From eba220e03fabaa4521bf6adc5df777027b56a667 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 2 Nov 2010 23:45:02 +0100 Subject: [PATCH 001/850] libogg: update to libogg-1.2.1 Signed-off-by: Stephan Raue --- packages/audio/libogg/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/audio/libogg/url b/packages/audio/libogg/url index b625a96597..ff22de79ed 100644 --- a/packages/audio/libogg/url +++ b/packages/audio/libogg/url @@ -1 +1 @@ -http://downloads.xiph.org/releases/ogg/libogg-1.2.0.tar.gz +http://downloads.xiph.org/releases/ogg/libogg-1.2.1.tar.gz From d7cae11784f1de2d03602041fe43793067527310 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 2 Nov 2010 23:49:30 +0100 Subject: [PATCH 002/850] libvorbis: update to libvorbis-1.3.2 Signed-off-by: Stephan Raue --- packages/audio/libvorbis/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/audio/libvorbis/url b/packages/audio/libvorbis/url index 2318cd28d9..d6dde96860 100644 --- a/packages/audio/libvorbis/url +++ b/packages/audio/libvorbis/url @@ -1 +1 @@ -http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.1.tar.bz2 +http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.2.tar.bz2 From 3bff9a30be4877fd8142df8379b85c101e252e0f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 2 Nov 2010 23:49:57 +0100 Subject: [PATCH 003/850] mysql: update to mysql-5.1.52 Signed-off-by: Stephan Raue --- packages/databases/mysql/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/databases/mysql/meta b/packages/databases/mysql/meta index b7ae82a056..36e5df33dc 100644 --- a/packages/databases/mysql/meta +++ b/packages/databases/mysql/meta @@ -1,5 +1,5 @@ PKG_NAME="mysql" -PKG_VERSION="5.1.51" +PKG_VERSION="5.1.52" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="LGPL" From 4837976d7c525626b1373ccd3ba760b19cf6a2db Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 2 Nov 2010 23:52:18 +0100 Subject: [PATCH 004/850] busybox: add busybox upstream patches Signed-off-by: Stephan Raue --- .../busybox/patches/busybox-1.17.3-dnsd.diff | 12 ++++++++++++ .../busybox/patches/busybox-1.17.3-sort.diff | 12 ++++++++++++ .../busybox/patches/busybox-1.17.3-unicode.diff | 12 ++++++++++++ 3 files changed, 36 insertions(+) create mode 100644 packages/sysutils/busybox/patches/busybox-1.17.3-dnsd.diff create mode 100644 packages/sysutils/busybox/patches/busybox-1.17.3-sort.diff create mode 100644 packages/sysutils/busybox/patches/busybox-1.17.3-unicode.diff diff --git a/packages/sysutils/busybox/patches/busybox-1.17.3-dnsd.diff b/packages/sysutils/busybox/patches/busybox-1.17.3-dnsd.diff new file mode 100644 index 0000000000..b135c14637 --- /dev/null +++ b/packages/sysutils/busybox/patches/busybox-1.17.3-dnsd.diff @@ -0,0 +1,12 @@ +diff -urpN busybox-1.17.3/networking/dnsd.c busybox-1.17.3-dnsd/networking/dnsd.c +--- busybox-1.17.3/networking/dnsd.c 2010-10-09 21:57:14.000000000 +0200 ++++ busybox-1.17.3-dnsd/networking/dnsd.c 2010-10-29 00:37:43.066043841 +0200 +@@ -388,7 +388,7 @@ static int process_packet(struct dns_ent + query_len = strlen(query_string) + 1; + /* may be unaligned! */ + unaligned_type_class = (void *)(query_string + query_len); +- query_len += sizeof(unaligned_type_class); ++ query_len += sizeof(*unaligned_type_class); + /* where to append answer block */ + answb = (void *)(unaligned_type_class + 1); + diff --git a/packages/sysutils/busybox/patches/busybox-1.17.3-sort.diff b/packages/sysutils/busybox/patches/busybox-1.17.3-sort.diff new file mode 100644 index 0000000000..ebc9bf9f94 --- /dev/null +++ b/packages/sysutils/busybox/patches/busybox-1.17.3-sort.diff @@ -0,0 +1,12 @@ +diff -urpN busybox-1.17.3/coreutils/sort.c busybox-1.17.3-sort/coreutils/sort.c +--- busybox-1.17.3/coreutils/sort.c 2010-10-09 21:57:13.000000000 +0200 ++++ busybox-1.17.3-sort/coreutils/sort.c 2010-10-20 15:17:35.320293543 +0200 +@@ -412,7 +412,7 @@ int sort_main(int argc UNUSED_PARAM, cha + #if ENABLE_FEATURE_SORT_BIG + /* Open output file _after_ we read all input ones */ + if (option_mask32 & FLAG_o) +- xmove_fd(xopen3(str_o, O_WRONLY, 0666), STDOUT_FILENO); ++ xmove_fd(xopen3(str_o, O_WRONLY|O_CREAT|O_TRUNC, 0666), STDOUT_FILENO); + #endif + flag = (option_mask32 & FLAG_z) ? '\0' : '\n'; + for (i = 0; i < linecount; i++) diff --git a/packages/sysutils/busybox/patches/busybox-1.17.3-unicode.diff b/packages/sysutils/busybox/patches/busybox-1.17.3-unicode.diff new file mode 100644 index 0000000000..dc3b02e22d --- /dev/null +++ b/packages/sysutils/busybox/patches/busybox-1.17.3-unicode.diff @@ -0,0 +1,12 @@ +diff -urpN busybox-1.17.3/libbb/unicode.c busybox-1.17.3-unicode/libbb/unicode.c +--- busybox-1.17.3/libbb/unicode.c 2010-10-09 21:58:13.000000000 +0200 ++++ busybox-1.17.3-unicode/libbb/unicode.c 2010-10-29 00:48:36.951494079 +0200 +@@ -1006,7 +1006,7 @@ static char* FAST_FUNC unicode_conv_to_p + } + } + if (stats) +- stats->byte_count = stats->unicode_count = (d - dst); ++ stats->byte_count = stats->unicode_count = stats->unicode_width = (d - dst); + return dst; + } + From 3339f8cb0cee7999a63f5e60091bc851fb2f7ff5 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 2 Nov 2010 23:56:18 +0100 Subject: [PATCH 005/850] timezone-data: update to timezone-data-2010o Signed-off-by: Stephan Raue --- packages/sysutils/timezone-data/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sysutils/timezone-data/meta b/packages/sysutils/timezone-data/meta index 80f5d90a02..055d8f6df9 100644 --- a/packages/sysutils/timezone-data/meta +++ b/packages/sysutils/timezone-data/meta @@ -1,5 +1,5 @@ PKG_NAME="timezone-data" -PKG_VERSION="2010n" +PKG_VERSION="2010o" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="Public Domain" From 93016ddc710c961ba55b591bacf81d5113439db7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 2 Nov 2010 23:56:40 +0100 Subject: [PATCH 006/850] upower: update to upower-0.9.7 Signed-off-by: Stephan Raue --- packages/sysutils/upower/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sysutils/upower/url b/packages/sysutils/upower/url index a01c2427c4..8273050bec 100644 --- a/packages/sysutils/upower/url +++ b/packages/sysutils/upower/url @@ -1 +1 @@ -http://upower.freedesktop.org/releases/upower-0.9.6.tar.bz2 \ No newline at end of file +http://upower.freedesktop.org/releases/upower-0.9.7.tar.bz2 From 8599e9e69bf63d81e2104cbb699732ea35e75b0e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 00:30:20 +0100 Subject: [PATCH 007/850] Python: readd SSL support, add patch to detect paths in sysroot Signed-off-by: Stephan Raue --- packages/lang/Python/build | 6 ++- .../002-Python-2.6.6-xcompile_path-0.1.diff | 52 +++++++++++++++++++ ...-xcompile-disable_modules_and_ssl-0.1.diff | 38 ++++++++++++++ 3 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 packages/lang/Python/patches/002-Python-2.6.6-xcompile_path-0.1.diff create mode 100644 packages/lang/Python/patches/003-Python-2.6.6-xcompile-disable_modules_and_ssl-0.1.diff diff --git a/packages/lang/Python/build b/packages/lang/Python/build index 811f6ff05b..28d84aa77c 100755 --- a/packages/lang/Python/build +++ b/packages/lang/Python/build @@ -75,7 +75,9 @@ make -j1 CC="$TARGET_CC" \ BLDSHARED="$CC -shared" \ PYTHON_DISABLE_MODULES="$PY_DISABLED_MODULES" \ CROSS_COMPILE="$TARGET_NAME" \ - CROSS_COMPILE_TARGET="yes" + CROSS_COMPILE_TARGET="yes" \ + PYTHON_MODULES_INCLUDE=$SYSROOT_PREFIX/usr/include \ + PYTHON_MODULES_LIB="$SYSROOT_PREFIX/lib $SYSROOT_PREFIX/usr/lib" \ make -j1 CC="$TARGET_CC" \ DESTDIR=$SYSROOT_PREFIX \ @@ -85,6 +87,8 @@ make -j1 CC="$TARGET_CC" \ PYTHON_DISABLE_MODULES="$PY_DISABLED_MODULES" \ CROSS_COMPILE="$TARGET_NAME" \ CROSS_COMPILE_TARGET="yes" \ + PYTHON_MODULES_INCLUDE=$SYSROOT_PREFIX/usr/include \ + PYTHON_MODULES_LIB="$SYSROOT_PREFIX/lib $SYSROOT_PREFIX/usr/lib" \ install cp -R ../Lib ./ diff --git a/packages/lang/Python/patches/002-Python-2.6.6-xcompile_path-0.1.diff b/packages/lang/Python/patches/002-Python-2.6.6-xcompile_path-0.1.diff new file mode 100644 index 0000000000..1685b1d701 --- /dev/null +++ b/packages/lang/Python/patches/002-Python-2.6.6-xcompile_path-0.1.diff @@ -0,0 +1,52 @@ +diff -Naur Python-2.6.6/setup.py Python-2.6.6.patch/setup.py +--- Python-2.6.6/setup.py 2010-11-03 00:08:13.955365257 +0100 ++++ Python-2.6.6.patch/setup.py 2010-11-03 00:11:49.838882245 +0100 +@@ -361,9 +361,18 @@ + return sys.platform + + def detect_modules(self): +- # Ensure that /usr/local is always used +- add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib') +- add_dir_to_list(self.compiler.include_dirs, '/usr/local/include') ++ try: ++ modules_include_dirs = os.environ["PYTHON_MODULES_INCLUDE"].split() ++ except KeyError: ++ modules_include_dirs = ['/usr/include'] ++ try: ++ modules_lib_dirs = os.environ["PYTHON_MODULES_LIB"].split() ++ except KeyError: ++ modules_lib_dirs = ['/usr/lib'] ++ for dir in modules_include_dirs: ++ add_dir_to_list(self.compiler.include_dirs, dir) ++ for dir in modules_lib_dirs: ++ add_dir_to_list(self.compiler.library_dirs, dir) + + # Add paths specified in the environment variables LDFLAGS and + # CPPFLAGS for header and library files. +@@ -399,12 +408,6 @@ + for directory in reversed(options.dirs): + add_dir_to_list(dir_list, directory) + +- if os.path.normpath(sys.prefix) != '/usr': +- add_dir_to_list(self.compiler.library_dirs, +- sysconfig.get_config_var("LIBDIR")) +- add_dir_to_list(self.compiler.include_dirs, +- sysconfig.get_config_var("INCLUDEDIR")) +- + try: + have_unicode = unicode + except NameError: +@@ -413,11 +416,8 @@ + # lib_dirs and inc_dirs are used to search for files; + # if a file is found in one of those directories, it can + # be assumed that no additional -I,-L directives are needed. +- lib_dirs = self.compiler.library_dirs + [ +- '/lib64', '/usr/lib64', +- '/lib', '/usr/lib', +- ] +- inc_dirs = self.compiler.include_dirs + ['/usr/include'] ++ lib_dirs = self.compiler.library_dirs ++ inc_dirs = self.compiler.include_dirs + exts = [] + missing = [] + diff --git a/packages/lang/Python/patches/003-Python-2.6.6-xcompile-disable_modules_and_ssl-0.1.diff b/packages/lang/Python/patches/003-Python-2.6.6-xcompile-disable_modules_and_ssl-0.1.diff new file mode 100644 index 0000000000..89df2beedb --- /dev/null +++ b/packages/lang/Python/patches/003-Python-2.6.6-xcompile-disable_modules_and_ssl-0.1.diff @@ -0,0 +1,38 @@ +diff -Naur Python-2.6.6/setup.py Python-2.6.6.patch/setup.py +--- Python-2.6.6/setup.py 2010-11-03 00:17:10.403608974 +0100 ++++ Python-2.6.6.patch/setup.py 2010-11-03 00:23:31.624025348 +0100 +@@ -18,7 +18,14 @@ + from distutils.spawn import find_executable + + # This global variable is used to hold the list of modules to be disabled. +-disabled_module_list = [] ++try: ++ disabled_module_list = os.environ["PYTHON_DISABLE_MODULES"].split() ++except KeyError: ++ disabled_module_list = [] ++try: ++ disable_ssl = os.environ["PYTHON_DISABLE_SSL"] ++except KeyError: ++ disable_ssl = 0 + + def add_dir_to_list(dirlist, dir): + """Add the directory 'dir' to the list 'dirlist' (at the front) if +@@ -361,6 +368,8 @@ + return sys.platform + + def detect_modules(self): ++ global disable_ssl ++ + try: + modules_include_dirs = os.environ["PYTHON_MODULES_INCLUDE"].split() + except KeyError: +@@ -714,7 +723,8 @@ + ] ) + + if (ssl_incs is not None and +- ssl_libs is not None): ++ ssl_libs is not None and ++ not disable_ssl): + exts.append( Extension('_ssl', ['_ssl.c'], + include_dirs = ssl_incs, + library_dirs = ssl_libs, From f3d0cf860c9806b27637b97679c971f916b6d1d7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 00:30:58 +0100 Subject: [PATCH 008/850] Python: remove unneeded patch Signed-off-by: Stephan Raue --- .../010-disable_modules_and_ssl-2.6.1.diff | 37 ------------------- 1 file changed, 37 deletions(-) delete mode 100644 packages/lang/Python/patches/010-disable_modules_and_ssl-2.6.1.diff diff --git a/packages/lang/Python/patches/010-disable_modules_and_ssl-2.6.1.diff b/packages/lang/Python/patches/010-disable_modules_and_ssl-2.6.1.diff deleted file mode 100644 index 5e99ac0277..0000000000 --- a/packages/lang/Python/patches/010-disable_modules_and_ssl-2.6.1.diff +++ /dev/null @@ -1,37 +0,0 @@ -diff -Naur Python-2.6.1/setup.py Python-2.6.1.patch/setup.py ---- Python-2.6.1/setup.py 2009-02-15 02:05:08.000000000 +0100 -+++ Python-2.6.1.patch/setup.py 2009-02-15 02:14:15.000000000 +0100 -@@ -17,7 +17,14 @@ - from distutils.command.install_lib import install_lib - - # This global variable is used to hold the list of modules to be disabled. --disabled_module_list = [] -+try: -+ disabled_module_list = os.environ["PYTHON_DISABLE_MODULES"].split() -+except KeyError: -+ disabled_module_list = [] -+try: -+ disable_ssl = os.environ["PYTHON_DISABLE_SSL"] -+except KeyError: -+ disable_ssl = 0 - - def add_dir_to_list(dirlist, dir): - """Add the directory 'dir' to the list 'dirlist' (at the front) if -@@ -310,6 +317,7 @@ - return sys.platform - - def detect_modules(self): -+ global disable_ssl - # Ensure that /usr/local is always used - try: - modules_include_dirs = os.environ["PYTHON_MODULES_INCLUDE"].split() -@@ -632,7 +640,8 @@ - ] ) - - if (ssl_incs is not None and -- ssl_libs is not None): -+ ssl_libs is not None and -+ not disable_ssl): - exts.append( Extension('_ssl', ['_ssl.c'], - include_dirs = ssl_incs, - library_dirs = ssl_libs, From 24cddbfb232b1d0f9068bf54462c02432d521c42 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 03:10:01 +0100 Subject: [PATCH 009/850] xbmc-dharma: update to xbmc-dharma-35142 Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc-dharma/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mediacenter/xbmc-dharma/meta b/packages/mediacenter/xbmc-dharma/meta index 4a5e944009..48b7807c25 100644 --- a/packages/mediacenter/xbmc-dharma/meta +++ b/packages/mediacenter/xbmc-dharma/meta @@ -1,5 +1,5 @@ PKG_NAME="xbmc-dharma" -PKG_VERSION="35100" +PKG_VERSION="35142" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From dc5f851566cf30a2615b0bd732bfa9765d026806 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 03:10:24 +0100 Subject: [PATCH 010/850] xbmc-dharma-theme-Confluence: update to xbmc-dharma-theme-Confluence-35142 Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc-dharma-theme-Confluence/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mediacenter/xbmc-dharma-theme-Confluence/meta b/packages/mediacenter/xbmc-dharma-theme-Confluence/meta index 2f1c4af109..725fbdef78 100644 --- a/packages/mediacenter/xbmc-dharma-theme-Confluence/meta +++ b/packages/mediacenter/xbmc-dharma-theme-Confluence/meta @@ -1,5 +1,5 @@ PKG_NAME="xbmc-dharma-theme-Confluence" -PKG_VERSION="35100" +PKG_VERSION="35142" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From 4481bce6fd98281444de07d9c533eafd5e50ced9 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 03:11:04 +0100 Subject: [PATCH 011/850] fuse: update to fuse-2.8.5 Signed-off-by: Stephan Raue --- packages/sysutils/fuse/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sysutils/fuse/url b/packages/sysutils/fuse/url index f1ea98e3f3..732a040e15 100644 --- a/packages/sysutils/fuse/url +++ b/packages/sysutils/fuse/url @@ -1 +1 @@ -http://downloads.sourceforge.net/project/fuse/fuse-2.X/2.8.4/fuse-2.8.4.tar.gz \ No newline at end of file +http://downloads.sourceforge.net/project/fuse/fuse-2.X/2.8.5/fuse-2.8.5.tar.gz \ No newline at end of file From 6f80e4a34681876ee5fec81c46e55db1f06e7e9d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 03:11:29 +0100 Subject: [PATCH 012/850] LVM2: update to LVM2.2.02.75 Signed-off-by: Stephan Raue --- packages/sysutils/LVM2/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sysutils/LVM2/url b/packages/sysutils/LVM2/url index e25f8a9808..ae10e4d2ea 100644 --- a/packages/sysutils/LVM2/url +++ b/packages/sysutils/LVM2/url @@ -1 +1 @@ -ftp://sources.redhat.com/pub/lvm2/LVM2.2.02.68.tgz +ftp://sources.redhat.com/pub/lvm2/LVM2.2.02.75.tgz From c565220affe61614e146fe1cd13fe2881afef3ff Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 03:12:02 +0100 Subject: [PATCH 013/850] ntfs-3g: update to ntfs-3g-2010.10.2 Signed-off-by: Stephan Raue --- packages/sysutils/ntfs-3g/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sysutils/ntfs-3g/url b/packages/sysutils/ntfs-3g/url index bf017e2337..7e2bce0a88 100644 --- a/packages/sysutils/ntfs-3g/url +++ b/packages/sysutils/ntfs-3g/url @@ -1 +1 @@ -http://tuxera.com/opensource/ntfs-3g-2010.8.8.tgz \ No newline at end of file +http://tuxera.com/opensource/ntfs-3g-2010.10.2.tgz \ No newline at end of file From d42281c0025edf0a3c7d099675594f3cc4bd33bc Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 03:12:39 +0100 Subject: [PATCH 014/850] libXi: update to libXi-1.4.0 Signed-off-by: Stephan Raue --- packages/x11/lib/libXi/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/x11/lib/libXi/meta b/packages/x11/lib/libXi/meta index ab9936b55e..2eedc5b631 100644 --- a/packages/x11/lib/libXi/meta +++ b/packages/x11/lib/libXi/meta @@ -1,5 +1,5 @@ PKG_NAME="libXi" -PKG_VERSION="1.3.2" +PKG_VERSION="1.4.0" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="OSS" From 46f56f379f33368629d35385bc496ac462051480 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 11:46:55 +0100 Subject: [PATCH 015/850] libmodplug: update to libmodplug-0.8.8.1 Signed-off-by: Stephan Raue --- packages/audio/libmodplug/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/audio/libmodplug/url b/packages/audio/libmodplug/url index b4eb7d163d..3715d68060 100644 --- a/packages/audio/libmodplug/url +++ b/packages/audio/libmodplug/url @@ -1 +1 @@ -http://ignum.dl.sourceforge.net/project/modplug-xmms/libmodplug/0.8.8/libmodplug-0.8.8.tar.gz \ No newline at end of file +http://ignum.dl.sourceforge.net/project/modplug-xmms/libmodplug/0.8.8.1/libmodplug-0.8.8.1.tar.gz \ No newline at end of file From 7e6ad6ec0804decd1f83131eddcf94dd4bde03ca Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 11:48:35 +0100 Subject: [PATCH 016/850] boost: update to boost_1_44_0 Signed-off-by: Stephan Raue --- packages/devel/boost/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/devel/boost/url b/packages/devel/boost/url index 73ae456d11..aeec0d2fbd 100644 --- a/packages/devel/boost/url +++ b/packages/devel/boost/url @@ -1 +1 @@ -http://downloads.sourceforge.net/project/boost/boost/1.43.0/boost_1_43_0.tar.bz2 \ No newline at end of file +http://downloads.sourceforge.net/project/boost/boost/1.44.0/boost_1_44_0.tar.bz2 \ No newline at end of file From d080f5cf2a02f6434fd42a1bb9e652e52ac0c5ec Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 11:49:05 +0100 Subject: [PATCH 017/850] dbus-glib: update to dbus-glib-0.88 Signed-off-by: Stephan Raue --- packages/devel/dbus-glib/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/devel/dbus-glib/url b/packages/devel/dbus-glib/url index 9d9d13698c..5691f8de12 100644 --- a/packages/devel/dbus-glib/url +++ b/packages/devel/dbus-glib/url @@ -1 +1 @@ -http://dbus.freedesktop.org/releases/dbus-glib/dbus-glib-0.86.tar.gz +http://dbus.freedesktop.org/releases/dbus-glib/dbus-glib-0.88.tar.gz From a90b23ce1d539ad4f839b6647b5bf776a9f5482d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 11:50:28 +0100 Subject: [PATCH 018/850] pygobject: update to pygobject-2.26.0, add libffi support Signed-off-by: Stephan Raue --- packages/python/devel/pygobject/build | 5 +- packages/python/devel/pygobject/install | 2 +- .../patches/010-binary-constants-module.diff | 5006 ----------------- packages/python/devel/pygobject/url | 2 +- 4 files changed, 5 insertions(+), 5010 deletions(-) delete mode 100644 packages/python/devel/pygobject/patches/010-binary-constants-module.diff diff --git a/packages/python/devel/pygobject/build b/packages/python/devel/pygobject/build index ac0a82b36b..053a111d4a 100755 --- a/packages/python/devel/pygobject/build +++ b/packages/python/devel/pygobject/build @@ -5,7 +5,7 @@ $SCRIPTS/build toolchain $SCRIPTS/build Python $SCRIPTS/build glib -#$SCRIPTS/build libffi +$SCRIPTS/build libffi PYTHON_LIBDIR="`ls -d $SYSROOT_PREFIX/usr/lib/python*`" @@ -16,7 +16,8 @@ cd $PKG_BUILD --sysconfdir=/etc \ --disable-static \ --enable-shared \ - --enable-thread + --enable-thread \ + --disable-introspection \ make diff --git a/packages/python/devel/pygobject/install b/packages/python/devel/pygobject/install index 18ace73565..efb7caf058 100755 --- a/packages/python/devel/pygobject/install +++ b/packages/python/devel/pygobject/install @@ -4,7 +4,7 @@ $SCRIPTS/install Python $SCRIPTS/install glib -#$SCRIPTS/install libffi +$SCRIPTS/install libffi PYTHON_LIB_DIR=`ls -d $INSTALL/usr/lib/python*` diff --git a/packages/python/devel/pygobject/patches/010-binary-constants-module.diff b/packages/python/devel/pygobject/patches/010-binary-constants-module.diff deleted file mode 100644 index b8a3d5d77a..0000000000 --- a/packages/python/devel/pygobject/patches/010-binary-constants-module.diff +++ /dev/null @@ -1,5006 +0,0 @@ -diff -Naur pygobject-2.21.1/aclocal.m4 pygobject-2.21.1.patch/aclocal.m4 ---- pygobject-2.21.1/aclocal.m4 2009-12-26 22:08:32.000000000 +0100 -+++ pygobject-2.21.1.patch/aclocal.m4 2010-04-26 16:25:24.345767498 +0200 -@@ -1,7 +1,7 @@ --# generated automatically by aclocal 1.10.2 -*- Autoconf -*- -+# generated automatically by aclocal 1.11.1 -*- Autoconf -*- - - # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, --# 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -+# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. -@@ -13,8 +13,8 @@ - - m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl --m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.64],, --[m4_warning([this file was generated for autoconf 2.64. -+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],, -+[m4_warning([this file was generated for autoconf 2.65. - You have another version of autoconf. It may work, but is not guaranteed to. - If you have problems, you may need to regenerate the build system entirely. - To do so, use the procedure documented by the package, typically `autoreconf'.])]) -@@ -300,16 +300,14 @@ - # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) - # --------------------------------------------- - m4_define([_PKG_CONFIG], --[if test -n "$PKG_CONFIG"; then -- if test -n "$$1"; then -- pkg_cv_[]$1="$$1" -- else -- PKG_CHECK_EXISTS([$3], -- [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], -- [pkg_failed=yes]) -- fi --else -- pkg_failed=untried -+[if test -n "$$1"; then -+ pkg_cv_[]$1="$$1" -+ elif test -n "$PKG_CONFIG"; then -+ PKG_CHECK_EXISTS([$3], -+ [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], -+ [pkg_failed=yes]) -+ else -+ pkg_failed=untried - fi[]dnl - ])# _PKG_CONFIG - -@@ -353,9 +351,9 @@ - if test $pkg_failed = yes; then - _PKG_SHORT_ERRORS_SUPPORTED - if test $_pkg_short_errors_supported = yes; then -- $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"` -+ $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1` - else -- $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` -+ $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD -@@ -402,10 +400,10 @@ - # generated from the m4 files accompanying Automake X.Y. - # (This private macro should not be called outside this file.) - AC_DEFUN([AM_AUTOMAKE_VERSION], --[am__api_version='1.10' -+[am__api_version='1.11' - dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to - dnl require some minimum version. Point them to the right macro. --m4_if([$1], [1.10.2], [], -+m4_if([$1], [1.11.1], [], - [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl - ]) - -@@ -421,7 +419,7 @@ - # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. - # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. - AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], --[AM_AUTOMAKE_VERSION([1.10.2])dnl -+[AM_AUTOMAKE_VERSION([1.11.1])dnl - m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl - _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) -@@ -481,14 +479,14 @@ - - # AM_CONDITIONAL -*- Autoconf -*- - --# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006 -+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 - # Free Software Foundation, Inc. - # - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. - --# serial 8 -+# serial 9 - - # AM_CONDITIONAL(NAME, SHELL-CONDITION) - # ------------------------------------- -@@ -501,6 +499,7 @@ - AC_SUBST([$1_FALSE])dnl - _AM_SUBST_NOTMAKE([$1_TRUE])dnl - _AM_SUBST_NOTMAKE([$1_FALSE])dnl -+m4_define([_AM_COND_VALUE_$1], [$2])dnl - if $2; then - $1_TRUE= - $1_FALSE='#' -@@ -514,14 +513,14 @@ - Usually this means the macro was only invoked conditionally.]]) - fi])]) - --# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 -+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 - # Free Software Foundation, Inc. - # - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. - --# serial 9 -+# serial 10 - - # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be - # written in clear, in which case automake, when reading aclocal.m4, -@@ -578,6 +577,16 @@ - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` - fi -+ am__universal=false -+ m4_case([$1], [CC], -+ [case " $depcc " in #( -+ *\ -arch\ *\ -arch\ *) am__universal=true ;; -+ esac], -+ [CXX], -+ [case " $depcc " in #( -+ *\ -arch\ *\ -arch\ *) am__universal=true ;; -+ esac]) -+ - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and -@@ -595,7 +604,17 @@ - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - -+ # We check with `-c' and `-o' for the sake of the "dashmstdout" -+ # mode. It turns out that the SunPro C++ compiler does not properly -+ # handle `-M -o', and we need to detect this. Also, some Intel -+ # versions had trouble with output in subdirs -+ am__obj=sub/conftest.${OBJEXT-o} -+ am__minus_obj="-o $am__obj" - case $depmode in -+ gcc) -+ # This depmode causes a compiler race in universal mode. -+ test "$am__universal" = false || continue -+ ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested -@@ -605,19 +624,23 @@ - break - fi - ;; -+ msvisualcpp | msvcmsys) -+ # This compiler won't grok `-c -o', but also, the minuso test has -+ # not run yet. These depmodes are late enough in the game, and -+ # so weak that their functioning should not be impacted. -+ am__obj=conftest.${OBJEXT-o} -+ am__minus_obj= -+ ;; - none) break ;; - esac -- # We check with `-c' and `-o' for the sake of the "dashmstdout" -- # mode. It turns out that the SunPro C++ compiler does not properly -- # handle `-M -o', and we need to detect this. - if depmode=$depmode \ -- source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ -+ source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ -- $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ -+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && -- grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && -+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message -@@ -767,13 +790,13 @@ - # Do all the work for Automake. -*- Autoconf -*- - - # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, --# 2005, 2006, 2008 Free Software Foundation, Inc. -+# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. - # - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. - --# serial 13 -+# serial 16 - - # This macro actually does too much. Some checks are only needed if - # your package does certain things. But this isn't really a big deal. -@@ -790,7 +813,7 @@ - # arguments mandatory, and then we can depend on a new Autoconf - # release and drop the old call support. - AC_DEFUN([AM_INIT_AUTOMAKE], --[AC_PREREQ([2.60])dnl -+[AC_PREREQ([2.62])dnl - dnl Autoconf wants to disallow AM_ names. We explicitly allow - dnl the ones we care about. - m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl -@@ -841,8 +864,8 @@ - AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) - AM_MISSING_PROG(AUTOHEADER, autoheader) - AM_MISSING_PROG(MAKEINFO, makeinfo) --AM_PROG_INSTALL_SH --AM_PROG_INSTALL_STRIP -+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl - AC_REQUIRE([AM_PROG_MKDIR_P])dnl - # We need awk for the "check" target. The system "awk" is bad on - # some platforms. -@@ -850,24 +873,37 @@ - AC_REQUIRE([AC_PROG_MAKE_SET])dnl - AC_REQUIRE([AM_SET_LEADING_DOT])dnl - _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], -- [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], -- [_AM_PROG_TAR([v7])])]) -+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], -+ [_AM_PROG_TAR([v7])])]) - _AM_IF_OPTION([no-dependencies],, - [AC_PROVIDE_IFELSE([AC_PROG_CC], -- [_AM_DEPENDENCIES(CC)], -- [define([AC_PROG_CC], -- defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl -+ [_AM_DEPENDENCIES(CC)], -+ [define([AC_PROG_CC], -+ defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl - AC_PROVIDE_IFELSE([AC_PROG_CXX], -- [_AM_DEPENDENCIES(CXX)], -- [define([AC_PROG_CXX], -- defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl -+ [_AM_DEPENDENCIES(CXX)], -+ [define([AC_PROG_CXX], -+ defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl - AC_PROVIDE_IFELSE([AC_PROG_OBJC], -- [_AM_DEPENDENCIES(OBJC)], -- [define([AC_PROG_OBJC], -- defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl -+ [_AM_DEPENDENCIES(OBJC)], -+ [define([AC_PROG_OBJC], -+ defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl - ]) -+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl -+dnl The `parallel-tests' driver may need to know about EXEEXT, so add the -+dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro -+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. -+AC_CONFIG_COMMANDS_PRE(dnl -+[m4_provide_if([_AM_COMPILER_EXEEXT], -+ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl - ]) - -+dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not -+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further -+dnl mangled by Autoconf and run in a shell conditional statement. -+m4_define([_AC_COMPILER_EXEEXT], -+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) -+ - - # When config.status generates a header, we must update the stamp-h file. - # This file resides in the same directory as the config header -@@ -890,7 +926,7 @@ - done - echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) - --# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -+# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. - # - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, -@@ -901,7 +937,14 @@ - # Define $install_sh. - AC_DEFUN([AM_PROG_INSTALL_SH], - [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl --install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} -+if test x"${install_sh}" != xset; then -+ case $am_aux_dir in -+ *\ * | *\ *) -+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; -+ *) -+ install_sh="\${SHELL} $am_aux_dir/install-sh" -+ esac -+fi - AC_SUBST(install_sh)]) - - # Copyright (C) 2003, 2005 Free Software Foundation, Inc. -@@ -927,13 +970,13 @@ - - # Check to see how 'make' treats includes. -*- Autoconf -*- - --# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. -+# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. - # - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. - --# serial 3 -+# serial 4 - - # AM_MAKE_INCLUDE() - # ----------------- -@@ -942,7 +985,7 @@ - [am_make=${MAKE-make} - cat > confinc << 'END' - am__doit: -- @echo done -+ @echo this is the am__doit target - .PHONY: am__doit - END - # If we don't find an include directive, just comment out the code. -@@ -952,24 +995,24 @@ - _am_result=none - # First try GNU make style include. - echo "include confinc" > confmf --# We grep out `Entering directory' and `Leaving directory' --# messages which can occur if `w' ends up in MAKEFLAGS. --# In particular we don't look at `^make:' because GNU make might --# be invoked under some other name (usually "gmake"), in which --# case it prints its new name instead of `make'. --if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then -- am__include=include -- am__quote= -- _am_result=GNU --fi -+# Ignore all kinds of additional output from `make'. -+case `$am_make -s -f confmf 2> /dev/null` in #( -+*the\ am__doit\ target*) -+ am__include=include -+ am__quote= -+ _am_result=GNU -+ ;; -+esac - # Now try BSD make style include. - if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf -- if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then -- am__include=.include -- am__quote="\"" -- _am_result=BSD -- fi -+ case `$am_make -s -f confmf 2> /dev/null` in #( -+ *the\ am__doit\ target*) -+ am__include=.include -+ am__quote="\"" -+ _am_result=BSD -+ ;; -+ esac - fi - AC_SUBST([am__include]) - AC_SUBST([am__quote]) -@@ -1014,14 +1057,14 @@ - - # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- - --# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005 -+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 - # Free Software Foundation, Inc. - # - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. - --# serial 5 -+# serial 6 - - # AM_MISSING_PROG(NAME, PROGRAM) - # ------------------------------ -@@ -1038,7 +1081,14 @@ - AC_DEFUN([AM_MISSING_HAS_RUN], - [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl - AC_REQUIRE_AUX_FILE([missing])dnl --test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" -+if test x"${MISSING+set}" != xset; then -+ case $am_aux_dir in -+ *\ * | *\ *) -+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; -+ *) -+ MISSING="\${SHELL} $am_aux_dir/missing" ;; -+ esac -+fi - # Use eval to expand $SHELL - if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -@@ -1107,7 +1157,7 @@ - AC_DEFUN([_AM_IF_OPTION], - [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) - --# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 -+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009 - # Free Software Foundation, Inc. - # - # This file is free software; the Free Software Foundation -@@ -1138,13 +1188,11 @@ - # numbers and dots only. - AC_DEFUN([AM_PATH_PYTHON], - [ -- dnl Find a Python interpreter. Python versions prior to 1.5 are not -- dnl supported because the default installation locations changed from -- dnl $prefix/lib/site-python in 1.4 to $prefix/lib/python1.5/site-packages -- dnl in 1.5. -+ dnl Find a Python interpreter. Python versions prior to 2.0 are not -+ dnl supported. (2.0 was released on October 16, 2000). - m4_define_default([_AM_PYTHON_INTERPRETER_LIST], -- [python python2 python2.5 python2.4 python2.3 python2.2 dnl --python2.1 python2.0 python1.6 python1.5]) -+ [python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 dnl -+python2.1 python2.0]) - - m4_if([$1],[],[ - dnl No version check is needed. -@@ -1191,7 +1239,7 @@ - dnl library. - - AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], -- [am_cv_python_version=`$PYTHON -c "import sys; print sys.version[[:3]]"`]) -+ [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`]) - AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) - - dnl Use the values of $prefix and $exec_prefix for the corresponding -@@ -1206,7 +1254,7 @@ - dnl to know which OS platform Python thinks this is. - - AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], -- [am_cv_python_platform=`$PYTHON -c "import sys; print sys.platform"`]) -+ [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) - AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) - - -@@ -1234,6 +1282,14 @@ - am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` - am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` - ;; -+ *) -+ case $am_py_prefix in -+ /usr|/System*) ;; -+ *) -+ am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages -+ ;; -+ esac -+ ;; - esac - ]) - AC_SUBST([pythondir], [$am_cv_python_pythondir]) -@@ -1264,6 +1320,14 @@ - am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` - am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` - ;; -+ *) -+ case $am_py_exec_prefix in -+ /usr|/System*) ;; -+ *) -+ am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages -+ ;; -+ esac -+ ;; - esac - ]) - AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) -@@ -1285,15 +1349,16 @@ - # Run ACTION-IF-FALSE otherwise. - # This test uses sys.hexversion instead of the string equivalent (first - # word of sys.version), in order to cope with versions such as 2.2c1. --# hexversion has been introduced in Python 1.5.2; it's probably not --# worth to support older versions (1.5.1 was released on October 31, 1998). -+# This supports Python 2.0 or higher. (2.0 was released on October 16, 2000). - AC_DEFUN([AM_PYTHON_CHECK_VERSION], -- [prog="import sys, string -+ [prog="import sys - # split strings by '.' and convert to numeric. Append some zeros - # because we need at least 4 digits for the hex conversion. --minver = map(int, string.split('$2', '.')) + [[0, 0, 0]] -+# map returns an iterator in Python 3.0 and a list in 2.x -+minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]] - minverhex = 0 --for i in xrange(0, 4): minverhex = (minverhex << 8) + minver[[i]] -+# xrange is not present in Python 3.0 and range returns an iterator -+for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]] - sys.exit(sys.hexversion < minverhex)" - AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) - -@@ -1316,14 +1381,14 @@ - - # Check to make sure that the build environment is sane. -*- Autoconf -*- - --# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 -+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 - # Free Software Foundation, Inc. - # - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. - --# serial 4 -+# serial 5 - - # AM_SANITY_CHECK - # --------------- -@@ -1332,16 +1397,29 @@ - # Just in case - sleep 1 - echo timestamp > conftest.file -+# Reject unsafe characters in $srcdir or the absolute working directory -+# name. Accept space and tab only in the latter. -+am_lf=' -+' -+case `pwd` in -+ *[[\\\"\#\$\&\'\`$am_lf]]*) -+ AC_MSG_ERROR([unsafe absolute working directory name]);; -+esac -+case $srcdir in -+ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) -+ AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; -+esac -+ - # Do `set' in a subshell so we don't clobber the current shell's - # arguments. Must try -L first in case configure is actually a - # symlink; some systems play weird games with the mod time of symlinks - # (eg FreeBSD returns the mod time of the symlink's containing - # directory). - if ( -- set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` -+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. -- set X `ls -t $srcdir/configure conftest.file` -+ set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$[*]" != "X $srcdir/configure conftest.file" \ -@@ -1394,18 +1472,25 @@ - INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - AC_SUBST([INSTALL_STRIP_PROGRAM])]) - --# Copyright (C) 2006 Free Software Foundation, Inc. -+# Copyright (C) 2006, 2008 Free Software Foundation, Inc. - # - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. - -+# serial 2 -+ - # _AM_SUBST_NOTMAKE(VARIABLE) - # --------------------------- - # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. - # This macro is traced by Automake. - AC_DEFUN([_AM_SUBST_NOTMAKE]) - -+# AM_SUBST_NOTMAKE(VARIABLE) -+# --------------------------- -+# Public sister of _AM_SUBST_NOTMAKE. -+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) -+ - # Check how to create a tarball. -*- Autoconf -*- - - # Copyright (C) 2004, 2005 Free Software Foundation, Inc. -diff -Naur pygobject-2.21.1/codegen/Makefile.in pygobject-2.21.1.patch/codegen/Makefile.in ---- pygobject-2.21.1/codegen/Makefile.in 2009-12-26 22:08:33.000000000 +0100 -+++ pygobject-2.21.1.patch/codegen/Makefile.in 2010-04-26 16:25:27.101863587 +0200 -@@ -1,8 +1,9 @@ --# Makefile.in generated by automake 1.10.2 from Makefile.am. -+# Makefile.in generated by automake 1.11.1 from Makefile.am. - # @configure_input@ - - # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, --# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -+# Inc. - # This Makefile.in is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. -@@ -16,8 +17,9 @@ - - VPATH = @srcdir@ - pkgdatadir = $(datadir)/@PACKAGE@ --pkglibdir = $(libdir)/@PACKAGE@ - pkgincludedir = $(includedir)/@PACKAGE@ -+pkglibdir = $(libdir)/@PACKAGE@ -+pkglibexecdir = $(libexecdir)/@PACKAGE@ - am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd - install_sh_DATA = $(install_sh) -c -m 644 - install_sh_PROGRAM = $(install_sh) -c -@@ -46,20 +48,33 @@ - mkinstalldirs = $(install_sh) -d - CONFIG_HEADER = $(top_builddir)/config.h - CONFIG_CLEAN_FILES = pygobject-codegen-2.0 --am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(codegendir)" \ -- "$(DESTDIR)$(codegendir)" --binSCRIPT_INSTALL = $(INSTALL_SCRIPT) --codegenSCRIPT_INSTALL = $(INSTALL_SCRIPT) --SCRIPTS = $(bin_SCRIPTS) $(codegen_SCRIPTS) --SOURCES = --DIST_SOURCES = -+CONFIG_CLEAN_VPATH_FILES = - am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; - am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; --am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; --codegenPYTHON_INSTALL = $(INSTALL_DATA) -+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -+am__install_max = 40 -+am__nobase_strip_setup = \ -+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -+am__nobase_strip = \ -+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -+am__nobase_list = $(am__nobase_strip_setup); \ -+ for p in $$list; do echo "$$p $$p"; done | \ -+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ -+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ -+ if (++n[$$2] == $(am__install_max)) \ -+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ -+ END { for (dir in files) print dir, files[dir] }' -+am__base_list = \ -+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ -+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(codegendir)" \ -+ "$(DESTDIR)$(codegendir)" -+SCRIPTS = $(bin_SCRIPTS) $(codegen_SCRIPTS) -+SOURCES = -+DIST_SOURCES = - py_compile = $(top_srcdir)/py-compile - DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) - ACLOCAL = @ACLOCAL@ -@@ -248,9 +263,9 @@ - exit 1;; \ - esac; \ - done; \ -- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu codegen/Makefile'; \ -- cd $(top_srcdir) && \ -- $(AUTOMAKE) --gnu codegen/Makefile -+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu codegen/Makefile'; \ -+ $(am__cd) $(top_srcdir) && \ -+ $(AUTOMAKE) --gnu codegen/Makefile - .PRECIOUS: Makefile - Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ -@@ -268,46 +283,77 @@ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - $(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -+$(am__aclocal_m4_deps): - pygobject-codegen-2.0: $(top_builddir)/config.status $(srcdir)/pygobject-codegen-2.0.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ - install-binSCRIPTS: $(bin_SCRIPTS) - @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" -- @list='$(bin_SCRIPTS)'; for p in $$list; do \ -+ @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ -+ for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ -- if test -f $$d$$p; then \ -- f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ -- echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \ -- $(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \ -- else :; fi; \ -- done -+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ -+ done | \ -+ sed -e 'p;s,.*/,,;n' \ -+ -e 'h;s|.*|.|' \ -+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ -+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ -+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ -+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ -+ if (++n[d] == $(am__install_max)) { \ -+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ -+ else { print "f", d "/" $$4, $$1 } } \ -+ END { for (d in files) print "f", d, files[d] }' | \ -+ while read type dir files; do \ -+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ -+ test -z "$$files" || { \ -+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ -+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ -+ } \ -+ ; done - - uninstall-binSCRIPTS: - @$(NORMAL_UNINSTALL) -- @list='$(bin_SCRIPTS)'; for p in $$list; do \ -- f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ -- echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ -- rm -f "$(DESTDIR)$(bindir)/$$f"; \ -- done -+ @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ -+ files=`for p in $$list; do echo "$$p"; done | \ -+ sed -e 's,.*/,,;$(transform)'`; \ -+ test -n "$$list" || exit 0; \ -+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ -+ cd "$(DESTDIR)$(bindir)" && rm -f $$files - install-codegenSCRIPTS: $(codegen_SCRIPTS) - @$(NORMAL_INSTALL) - test -z "$(codegendir)" || $(MKDIR_P) "$(DESTDIR)$(codegendir)" -- @list='$(codegen_SCRIPTS)'; for p in $$list; do \ -+ @list='$(codegen_SCRIPTS)'; test -n "$(codegendir)" || list=; \ -+ for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ -- if test -f $$d$$p; then \ -- f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ -- echo " $(codegenSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(codegendir)/$$f'"; \ -- $(codegenSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(codegendir)/$$f"; \ -- else :; fi; \ -- done -+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ -+ done | \ -+ sed -e 'p;s,.*/,,;n' \ -+ -e 'h;s|.*|.|' \ -+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ -+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ -+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ -+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ -+ if (++n[d] == $(am__install_max)) { \ -+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ -+ else { print "f", d "/" $$4, $$1 } } \ -+ END { for (d in files) print "f", d, files[d] }' | \ -+ while read type dir files; do \ -+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ -+ test -z "$$files" || { \ -+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(codegendir)$$dir'"; \ -+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(codegendir)$$dir" || exit $$?; \ -+ } \ -+ ; done - - uninstall-codegenSCRIPTS: - @$(NORMAL_UNINSTALL) -- @list='$(codegen_SCRIPTS)'; for p in $$list; do \ -- f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ -- echo " rm -f '$(DESTDIR)$(codegendir)/$$f'"; \ -- rm -f "$(DESTDIR)$(codegendir)/$$f"; \ -- done -+ @list='$(codegen_SCRIPTS)'; test -n "$(codegendir)" || exit 0; \ -+ files=`for p in $$list; do echo "$$p"; done | \ -+ sed -e 's,.*/,,;$(transform)'`; \ -+ test -n "$$list" || exit 0; \ -+ echo " ( cd '$(DESTDIR)$(codegendir)' && rm -f" $$files ")"; \ -+ cd "$(DESTDIR)$(codegendir)" && rm -f $$files - - mostlyclean-libtool: - -rm -f *.lo -@@ -317,15 +363,20 @@ - install-codegenPYTHON: $(codegen_PYTHON) - @$(NORMAL_INSTALL) - test -z "$(codegendir)" || $(MKDIR_P) "$(DESTDIR)$(codegendir)" -- @list='$(codegen_PYTHON)'; dlist=''; for p in $$list; do\ -+ @list='$(codegen_PYTHON)'; dlist=; list2=; test -n "$(codegendir)" || list=; \ -+ for p in $$list; do \ - if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ - if test -f $$b$$p; then \ -- f=$(am__strip_dir) \ -+ $(am__strip_dir) \ - dlist="$$dlist $$f"; \ -- echo " $(codegenPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(codegendir)/$$f'"; \ -- $(codegenPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(codegendir)/$$f"; \ -+ list2="$$list2 $$b$$p"; \ - else :; fi; \ - done; \ -+ for file in $$list2; do echo $$file; done | $(am__base_list) | \ -+ while read files; do \ -+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(codegendir)'"; \ -+ $(INSTALL_DATA) $$files "$(DESTDIR)$(codegendir)" || exit $$?; \ -+ done || exit $$?; \ - if test -n "$$dlist"; then \ - if test -z "$(DESTDIR)"; then \ - PYTHON=$(PYTHON) $(py_compile) --basedir "$(codegendir)" $$dlist; \ -@@ -336,12 +387,17 @@ - - uninstall-codegenPYTHON: - @$(NORMAL_UNINSTALL) -- @list='$(codegen_PYTHON)'; dlist=''; for p in $$list; do\ -- f=$(am__strip_dir) \ -- rm -f "$(DESTDIR)$(codegendir)/$$f"; \ -- rm -f "$(DESTDIR)$(codegendir)/$${f}c"; \ -- rm -f "$(DESTDIR)$(codegendir)/$${f}o"; \ -- done -+ @list='$(codegen_PYTHON)'; test -n "$(codegendir)" || list=; \ -+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ -+ test -n "$$files" || exit 0; \ -+ filesc=`echo "$$files" | sed 's|$$|c|'`; \ -+ fileso=`echo "$$files" | sed 's|$$|o|'`; \ -+ echo " ( cd '$(DESTDIR)$(codegendir)' && rm -f" $$files ")"; \ -+ cd "$(DESTDIR)$(codegendir)" && rm -f $$files || exit $$?; \ -+ echo " ( cd '$(DESTDIR)$(codegendir)' && rm -f" $$filesc ")"; \ -+ cd "$(DESTDIR)$(codegendir)" && rm -f $$filesc || exit $$?; \ -+ echo " ( cd '$(DESTDIR)$(codegendir)' && rm -f" $$fileso ")"; \ -+ cd "$(DESTDIR)$(codegendir)" && rm -f $$fileso - tags: TAGS - TAGS: - -@@ -365,13 +421,17 @@ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ -+ if test -d "$(distdir)/$$file"; then \ -+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ -+ fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ -- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ -+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ -+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ -- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ -+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ -- test -f $(distdir)/$$file \ -- || cp -p $$d/$$file $(distdir)/$$file \ -+ test -f "$(distdir)/$$file" \ -+ || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -@@ -402,6 +462,7 @@ - - distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - - maintainer-clean-generic: - @echo "This command is intended for maintainers to use" -@@ -420,6 +481,8 @@ - - html: html-am - -+html-am: -+ - info: info-am - - info-am: -@@ -428,18 +491,28 @@ - - install-dvi: install-dvi-am - -+install-dvi-am: -+ - install-exec-am: install-binSCRIPTS - - install-html: install-html-am - -+install-html-am: -+ - install-info: install-info-am - -+install-info-am: -+ - install-man: - - install-pdf: install-pdf-am - -+install-pdf-am: -+ - install-ps: install-ps-am - -+install-ps-am: -+ - installcheck-am: - - maintainer-clean: maintainer-clean-am -@@ -477,6 +550,7 @@ - ps ps-am uninstall uninstall-am uninstall-binSCRIPTS \ - uninstall-codegenPYTHON uninstall-codegenSCRIPTS - -+ - # Tell versions [3.59,3.63) of GNU make to not export all variables. - # Otherwise a system limit (for SysV at least) may be exceeded. - .NOEXPORT: -diff -Naur pygobject-2.21.1/configure pygobject-2.21.1.patch/configure ---- pygobject-2.21.1/configure 2009-12-26 22:08:34.000000000 +0100 -+++ pygobject-2.21.1.patch/configure 2010-04-26 16:25:26.035738238 +0200 -@@ -1,12 +1,14 @@ - #! /bin/sh - # Guess values for system-dependent variables and create Makefiles. --# Generated by GNU Autoconf 2.64 for pygobject 2.21.1. -+# Generated by GNU Autoconf 2.65 for pygobject 2.21.1. - # - # Report bugs to . - # -+# - # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, --# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software --# Foundation, Inc. -+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -+# Inc. -+# - # - # This configure script is free software; the Free Software Foundation - # gives unlimited permission to copy, distribute and modify it. -@@ -677,7 +679,8 @@ - - - --exec 7<&0 &1 -+test -n "$DJDIR" || exec 7<&0 &1 - - # Name of the host. - # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, -@@ -741,7 +744,9 @@ - # include - #endif" - --ac_subst_vars='LTLIBOBJS -+ac_subst_vars='am__EXEEXT_FALSE -+am__EXEEXT_TRUE -+LTLIBOBJS - LIBOBJS - BUILD_GIOUNIX_FALSE - BUILD_GIOUNIX_TRUE -@@ -1573,7 +1578,7 @@ - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l -- CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if -+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CPP C preprocessor - PKG_CONFIG path to pkg-config utility -@@ -1653,7 +1658,7 @@ - if $ac_init_version; then - cat <<\_ACEOF - pygobject configure 2.21.1 --generated by GNU Autoconf 2.64 -+generated by GNU Autoconf 2.65 - - Copyright (C) 2009 Free Software Foundation, Inc. - This configure script is free software; the Free Software Foundation -@@ -1700,7 +1705,7 @@ - ac_retval=1 - fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -- return $ac_retval -+ as_fn_set_status $ac_retval - - } # ac_fn_c_try_compile - -@@ -1746,7 +1751,7 @@ - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -- return $ac_retval -+ as_fn_set_status $ac_retval - - } # ac_fn_c_try_link - -@@ -1814,7 +1819,7 @@ - ac_retval=1 - fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -- return $ac_retval -+ as_fn_set_status $ac_retval - - } # ac_fn_c_try_cpp - -@@ -1856,7 +1861,7 @@ - fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -- return $ac_retval -+ as_fn_set_status $ac_retval - - } # ac_fn_c_try_run - -@@ -1931,7 +1936,7 @@ - running configure, to aid debugging if configure makes a mistake. - - It was created by pygobject $as_me 2.21.1, which was --generated by GNU Autoconf 2.64. Invocation command line was -+generated by GNU Autoconf 2.65. Invocation command line was - - $ $0 $@ - -@@ -2184,7 +2189,7 @@ - for ac_site_file in "$ac_site_file1" "$ac_site_file2" - do - test "x$ac_site_file" = xNONE && continue -- if test -r "$ac_site_file"; then -+ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 - $as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 -@@ -2193,9 +2198,9 @@ - done - - if test -r "$cache_file"; then -- # Some versions of bash will fail to source /dev/null (special -- # files actually), so we avoid doing that. -- if test -f "$cache_file"; then -+ # Some versions of bash will fail to source /dev/null (special files -+ # actually), so we avoid doing that. DJGPP emulates it as a regular file. -+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 - $as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in -@@ -2301,7 +2306,7 @@ - ac_config_headers="$ac_config_headers config.h" - - --am__api_version='1.10' -+am__api_version='1.11' - - ac_aux_dir= - for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do -@@ -2424,16 +2429,29 @@ - # Just in case - sleep 1 - echo timestamp > conftest.file -+# Reject unsafe characters in $srcdir or the absolute working directory -+# name. Accept space and tab only in the latter. -+am_lf=' -+' -+case `pwd` in -+ *[\\\"\#\$\&\'\`$am_lf]*) -+ as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; -+esac -+case $srcdir in -+ *[\\\"\#\$\&\'\`$am_lf\ \ ]*) -+ as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; -+esac -+ - # Do `set' in a subshell so we don't clobber the current shell's - # arguments. Must try -L first in case configure is actually a - # symlink; some systems play weird games with the mod time of symlinks - # (eg FreeBSD returns the mod time of the symlink's containing - # directory). - if ( -- set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` -+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. -- set X `ls -t $srcdir/configure conftest.file` -+ set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$*" != "X $srcdir/configure conftest.file" \ -@@ -2471,7 +2489,14 @@ - # expand $ac_aux_dir to an absolute path - am_aux_dir=`cd $ac_aux_dir && pwd` - --test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" -+if test x"${MISSING+set}" != xset; then -+ case $am_aux_dir in -+ *\ * | *\ *) -+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; -+ *) -+ MISSING="\${SHELL} $am_aux_dir/missing" ;; -+ esac -+fi - # Use eval to expand $SHELL - if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -@@ -2481,6 +2506,115 @@ - $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} - fi - -+if test x"${install_sh}" != xset; then -+ case $am_aux_dir in -+ *\ * | *\ *) -+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; -+ *) -+ install_sh="\${SHELL} $am_aux_dir/install-sh" -+ esac -+fi -+ -+# Installed binaries are usually stripped using `strip' when the user -+# run `make install-strip'. However `strip' might not be the right -+# tool to use in cross-compilation environments, therefore Automake -+# will honor the `STRIP' environment variable to overrule this program. -+if test "$cross_compiling" != no; then -+ if test -n "$ac_tool_prefix"; then -+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -+set dummy ${ac_tool_prefix}strip; ac_word=$2 -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -+$as_echo_n "checking for $ac_word... " >&6; } -+if test "${ac_cv_prog_STRIP+set}" = set; then : -+ $as_echo_n "(cached) " >&6 -+else -+ if test -n "$STRIP"; then -+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -+else -+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ for ac_exec_ext in '' $ac_executable_extensions; do -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then -+ ac_cv_prog_STRIP="${ac_tool_prefix}strip" -+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ break 2 -+ fi -+done -+ done -+IFS=$as_save_IFS -+ -+fi -+fi -+STRIP=$ac_cv_prog_STRIP -+if test -n "$STRIP"; then -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -+$as_echo "$STRIP" >&6; } -+else -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+$as_echo "no" >&6; } -+fi -+ -+ -+fi -+if test -z "$ac_cv_prog_STRIP"; then -+ ac_ct_STRIP=$STRIP -+ # Extract the first word of "strip", so it can be a program name with args. -+set dummy strip; ac_word=$2 -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -+$as_echo_n "checking for $ac_word... " >&6; } -+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : -+ $as_echo_n "(cached) " >&6 -+else -+ if test -n "$ac_ct_STRIP"; then -+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -+else -+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ for ac_exec_ext in '' $ac_executable_extensions; do -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then -+ ac_cv_prog_ac_ct_STRIP="strip" -+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ break 2 -+ fi -+done -+ done -+IFS=$as_save_IFS -+ -+fi -+fi -+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -+if test -n "$ac_ct_STRIP"; then -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -+$as_echo "$ac_ct_STRIP" >&6; } -+else -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+$as_echo "no" >&6; } -+fi -+ -+ if test "x$ac_ct_STRIP" = x; then -+ STRIP=":" -+ else -+ case $cross_compiling:$ac_tool_warned in -+yes:) -+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -+ac_tool_warned=yes ;; -+esac -+ STRIP=$ac_ct_STRIP -+ fi -+else -+ STRIP="$ac_cv_prog_STRIP" -+fi -+ -+fi -+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -+ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 - $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } - if test -z "$MKDIR_P"; then -@@ -2509,6 +2643,7 @@ - - fi - -+ test -d ./--version && rmdir ./--version - if test "${ac_cv_path_mkdir+set}" = set; then - MKDIR_P="$ac_cv_path_mkdir -p" - else -@@ -2516,7 +2651,6 @@ - # value for MKDIR_P within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. -- test -d ./--version && rmdir ./--version - MKDIR_P="$ac_install_sh -d" - fi - fi -@@ -2661,108 +2795,6 @@ - - MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - --install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} -- --# Installed binaries are usually stripped using `strip' when the user --# run `make install-strip'. However `strip' might not be the right --# tool to use in cross-compilation environments, therefore Automake --# will honor the `STRIP' environment variable to overrule this program. --if test "$cross_compiling" != no; then -- if test -n "$ac_tool_prefix"; then -- # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. --set dummy ${ac_tool_prefix}strip; ac_word=$2 --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 --$as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_STRIP+set}" = set; then : -- $as_echo_n "(cached) " >&6 --else -- if test -n "$STRIP"; then -- ac_cv_prog_STRIP="$STRIP" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then -- ac_cv_prog_STRIP="${ac_tool_prefix}strip" -- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done -- done --IFS=$as_save_IFS -- --fi --fi --STRIP=$ac_cv_prog_STRIP --if test -n "$STRIP"; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 --$as_echo "$STRIP" >&6; } --else -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 --$as_echo "no" >&6; } --fi -- -- --fi --if test -z "$ac_cv_prog_STRIP"; then -- ac_ct_STRIP=$STRIP -- # Extract the first word of "strip", so it can be a program name with args. --set dummy strip; ac_word=$2 --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 --$as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : -- $as_echo_n "(cached) " >&6 --else -- if test -n "$ac_ct_STRIP"; then -- ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then -- ac_cv_prog_ac_ct_STRIP="strip" -- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done -- done --IFS=$as_save_IFS -- --fi --fi --ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP --if test -n "$ac_ct_STRIP"; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 --$as_echo "$ac_ct_STRIP" >&6; } --else -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 --$as_echo "no" >&6; } --fi -- -- if test "x$ac_ct_STRIP" = x; then -- STRIP=":" -- else -- case $cross_compiling:$ac_tool_warned in --yes:) --{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 --$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} --ac_tool_warned=yes ;; --esac -- STRIP=$ac_ct_STRIP -- fi --else -- STRIP="$ac_cv_prog_STRIP" --fi -- --fi --INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -- - # We need awk for the "check" target. The system "awk" is bad on - # some platforms. - # Always define AMTAR for backward compatibility. -@@ -3261,7 +3293,7 @@ - am_make=${MAKE-make} - cat > confinc << 'END' - am__doit: -- @echo done -+ @echo this is the am__doit target - .PHONY: am__doit - END - # If we don't find an include directive, just comment out the code. -@@ -3272,24 +3304,24 @@ - _am_result=none - # First try GNU make style include. - echo "include confinc" > confmf --# We grep out `Entering directory' and `Leaving directory' --# messages which can occur if `w' ends up in MAKEFLAGS. --# In particular we don't look at `^make:' because GNU make might --# be invoked under some other name (usually "gmake"), in which --# case it prints its new name instead of `make'. --if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then -- am__include=include -- am__quote= -- _am_result=GNU --fi -+# Ignore all kinds of additional output from `make'. -+case `$am_make -s -f confmf 2> /dev/null` in #( -+*the\ am__doit\ target*) -+ am__include=include -+ am__quote= -+ _am_result=GNU -+ ;; -+esac - # Now try BSD make style include. - if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf -- if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then -- am__include=.include -- am__quote="\"" -- _am_result=BSD -- fi -+ case `$am_make -s -f confmf 2> /dev/null` in #( -+ *the\ am__doit\ target*) -+ am__include=.include -+ am__quote="\"" -+ _am_result=BSD -+ ;; -+ esac - fi - - -@@ -3637,32 +3669,30 @@ - ... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 -- rm -f conftest.er1 conftest.err - fi -+ rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - done - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ --#include -+ - int - main () - { --FILE *f = fopen ("conftest.out", "w"); -- return ferror (f) || fclose (f) != 0; - - ; - return 0; - } - _ACEOF - ac_clean_files_save=$ac_clean_files --ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.out" -+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" - # Try to create an executable without -o first, disregard a.out. - # It will help us diagnose broken compilers, and finding out an intuition - # of exeext. --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 --$as_echo_n "checking for C compiler default output file name... " >&6; } -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -+$as_echo_n "checking whether the C compiler works... " >&6; } - ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - - # The possible output files: -@@ -3724,10 +3754,10 @@ - else - ac_file='' - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 --$as_echo "$ac_file" >&6; } - if test -z "$ac_file"; then : -- $as_echo "$as_me: failed program was:" >&5 -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+$as_echo "no" >&6; } -+$as_echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -@@ -3735,51 +3765,18 @@ - { as_fn_set_status 77 - as_fn_error "C compiler cannot create executables - See \`config.log' for more details." "$LINENO" 5; }; } -+else -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -+$as_echo "yes" >&6; } - fi -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -+$as_echo_n "checking for C compiler default output file name... " >&6; } -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -+$as_echo "$ac_file" >&6; } - ac_exeext=$ac_cv_exeext - --# Check that the compiler produces executables we can run. If not, either --# the compiler is broken, or we cross compile. --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 --$as_echo_n "checking whether the C compiler works... " >&6; } --# If not cross compiling, check that we can run a simple program. --if test "$cross_compiling" != yes; then -- if { ac_try='./$ac_file' -- { { case "(($ac_try" in -- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -- *) ac_try_echo=$ac_try;; --esac --eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" --$as_echo "$ac_try_echo"; } >&5 -- (eval "$ac_try") 2>&5 -- ac_status=$? -- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -- test $ac_status = 0; }; }; then -- cross_compiling=no -- else -- if test "$cross_compiling" = maybe; then -- cross_compiling=yes -- else -- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 --$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} --as_fn_error "cannot run C compiled programs. --If you meant to cross compile, use \`--host'. --See \`config.log' for more details." "$LINENO" 5; } -- fi -- fi --fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 --$as_echo "yes" >&6; } -- --rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out -+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out - ac_clean_files=$ac_clean_files_save --# Check that the compiler produces executables we can run. If not, either --# the compiler is broken, or we cross compile. --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 --$as_echo_n "checking whether we are cross compiling... " >&6; } --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 --$as_echo "$cross_compiling" >&6; } -- - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 - $as_echo_n "checking for suffix of executables... " >&6; } - if { { ac_try="$ac_link" -@@ -3812,13 +3809,72 @@ - as_fn_error "cannot compute suffix of executables: cannot compile and link - See \`config.log' for more details." "$LINENO" 5; } - fi --rm -f conftest$ac_cv_exeext -+rm -f conftest conftest$ac_cv_exeext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 - $as_echo "$ac_cv_exeext" >&6; } - - rm -f conftest.$ac_ext - EXEEXT=$ac_cv_exeext - ac_exeext=$EXEEXT -+cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+#include -+int -+main () -+{ -+FILE *f = fopen ("conftest.out", "w"); -+ return ferror (f) || fclose (f) != 0; -+ -+ ; -+ return 0; -+} -+_ACEOF -+ac_clean_files="$ac_clean_files conftest.out" -+# Check that the compiler produces executables we can run. If not, either -+# the compiler is broken, or we cross compile. -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -+$as_echo_n "checking whether we are cross compiling... " >&6; } -+if test "$cross_compiling" != yes; then -+ { { ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -+$as_echo "$ac_try_echo"; } >&5 -+ (eval "$ac_link") 2>&5 -+ ac_status=$? -+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -+ test $ac_status = 0; } -+ if { ac_try='./conftest$ac_cv_exeext' -+ { { case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -+$as_echo "$ac_try_echo"; } >&5 -+ (eval "$ac_try") 2>&5 -+ ac_status=$? -+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -+ test $ac_status = 0; }; }; then -+ cross_compiling=no -+ else -+ if test "$cross_compiling" = maybe; then -+ cross_compiling=yes -+ else -+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -+as_fn_error "cannot run C compiled programs. -+If you meant to cross compile, use \`--host'. -+See \`config.log' for more details." "$LINENO" 5; } -+ fi -+ fi -+fi -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -+$as_echo "$cross_compiling" >&6; } -+ -+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -+ac_clean_files=$ac_clean_files_save - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 - $as_echo_n "checking for suffix of object files... " >&6; } - if test "${ac_cv_objext+set}" = set; then : -@@ -4112,6 +4168,11 @@ - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi -+ am__universal=false -+ case " $depcc " in #( -+ *\ -arch\ *\ -arch\ *) am__universal=true ;; -+ esac -+ - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and -@@ -4129,7 +4190,17 @@ - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - -+ # We check with `-c' and `-o' for the sake of the "dashmstdout" -+ # mode. It turns out that the SunPro C++ compiler does not properly -+ # handle `-M -o', and we need to detect this. Also, some Intel -+ # versions had trouble with output in subdirs -+ am__obj=sub/conftest.${OBJEXT-o} -+ am__minus_obj="-o $am__obj" - case $depmode in -+ gcc) -+ # This depmode causes a compiler race in universal mode. -+ test "$am__universal" = false || continue -+ ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested -@@ -4139,19 +4210,23 @@ - break - fi - ;; -+ msvisualcpp | msvcmsys) -+ # This compiler won't grok `-c -o', but also, the minuso test has -+ # not run yet. These depmodes are late enough in the game, and -+ # so weak that their functioning should not be impacted. -+ am__obj=conftest.${OBJEXT-o} -+ am__minus_obj= -+ ;; - none) break ;; - esac -- # We check with `-c' and `-o' for the sake of the "dashmstdout" -- # mode. It turns out that the SunPro C++ compiler does not properly -- # handle `-M -o', and we need to detect this. - if depmode=$depmode \ -- source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ -+ source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ -- $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ -+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && -- grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && -+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message -@@ -4774,13 +4849,13 @@ - else - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext -- (eval echo "\"\$as_me:4777: $ac_compile\"" >&5) -+ (eval echo "\"\$as_me:4852: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 -- (eval echo "\"\$as_me:4780: $NM \\\"conftest.$ac_objext\\\"\"" >&5) -+ (eval echo "\"\$as_me:4855: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 -- (eval echo "\"\$as_me:4783: output\"" >&5) -+ (eval echo "\"\$as_me:4858: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" -@@ -5983,7 +6058,7 @@ - ;; - *-*-irix6*) - # Find out which ABI we are using. -- echo '#line 5986 "configure"' > conftest.$ac_ext -+ echo '#line 6061 "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? -@@ -7481,11 +7556,11 @@ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` -- (eval echo "\"\$as_me:7484: $lt_compile\"" >&5) -+ (eval echo "\"\$as_me:7559: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 -- echo "$as_me:7488: \$? = $ac_status" >&5 -+ echo "$as_me:7563: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. -@@ -7820,11 +7895,11 @@ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` -- (eval echo "\"\$as_me:7823: $lt_compile\"" >&5) -+ (eval echo "\"\$as_me:7898: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 -- echo "$as_me:7827: \$? = $ac_status" >&5 -+ echo "$as_me:7902: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. -@@ -7925,11 +8000,11 @@ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` -- (eval echo "\"\$as_me:7928: $lt_compile\"" >&5) -+ (eval echo "\"\$as_me:8003: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 -- echo "$as_me:7932: \$? = $ac_status" >&5 -+ echo "$as_me:8007: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized -@@ -7980,11 +8055,11 @@ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` -- (eval echo "\"\$as_me:7983: $lt_compile\"" >&5) -+ (eval echo "\"\$as_me:8058: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 -- echo "$as_me:7987: \$? = $ac_status" >&5 -+ echo "$as_me:8062: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized -@@ -10363,7 +10438,7 @@ - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF --#line 10366 "configure" -+#line 10441 "configure" - #include "confdefs.h" - - #if HAVE_DLFCN_H -@@ -10459,7 +10534,7 @@ - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF --#line 10462 "configure" -+#line 10537 "configure" - #include "confdefs.h" - - #if HAVE_DLFCN_H -@@ -11099,7 +11174,7 @@ - - lt_cl_version="\ - pygobject config.lt 2.21.1 --configured by $0, generated by GNU Autoconf 2.64. -+configured by $0, generated by GNU Autoconf 2.65. - - Copyright (C) 2008 Free Software Foundation, Inc. - This config.lt script is free software; the Free Software Foundation -@@ -12430,7 +12505,7 @@ - if test "${am_cv_python_version+set}" = set; then : - $as_echo_n "(cached) " >&6 - else -- am_cv_python_version=`$PYTHON -c "import sys; print sys.version[:3]"` -+ am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 - $as_echo "$am_cv_python_version" >&6; } -@@ -12449,7 +12524,7 @@ - if test "${am_cv_python_platform+set}" = set; then : - $as_echo_n "(cached) " >&6 - else -- am_cv_python_platform=`$PYTHON -c "import sys; print sys.platform"` -+ am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"` - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 - $as_echo "$am_cv_python_platform" >&6; } -@@ -12476,6 +12551,14 @@ - am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` - am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` - ;; -+ *) -+ case $am_py_prefix in -+ /usr|/System*) ;; -+ *) -+ am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages -+ ;; -+ esac -+ ;; - esac - - fi -@@ -12506,6 +12589,14 @@ - am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` - am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` - ;; -+ *) -+ case $am_py_exec_prefix in -+ /usr|/System*) ;; -+ *) -+ am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages -+ ;; -+ esac -+ ;; - esac - - fi -@@ -13126,11 +13217,10 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FFI" >&5 - $as_echo_n "checking for FFI... " >&6; } - --if test -n "$PKG_CONFIG"; then -- if test -n "$FFI_CFLAGS"; then -- pkg_cv_FFI_CFLAGS="$FFI_CFLAGS" -- else -- if test -n "$PKG_CONFIG" && \ -+if test -n "$FFI_CFLAGS"; then -+ pkg_cv_FFI_CFLAGS="$FFI_CFLAGS" -+ elif test -n "$PKG_CONFIG"; then -+ if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libffi >= 3.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libffi >= 3.0") 2>&5 - ac_status=$? -@@ -13140,15 +13230,13 @@ - else - pkg_failed=yes - fi -- fi --else -- pkg_failed=untried -+ else -+ pkg_failed=untried - fi --if test -n "$PKG_CONFIG"; then -- if test -n "$FFI_LIBS"; then -- pkg_cv_FFI_LIBS="$FFI_LIBS" -- else -- if test -n "$PKG_CONFIG" && \ -+if test -n "$FFI_LIBS"; then -+ pkg_cv_FFI_LIBS="$FFI_LIBS" -+ elif test -n "$PKG_CONFIG"; then -+ if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libffi >= 3.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libffi >= 3.0") 2>&5 - ac_status=$? -@@ -13158,9 +13246,8 @@ - else - pkg_failed=yes - fi -- fi --else -- pkg_failed=untried -+ else -+ pkg_failed=untried - fi - - -@@ -13173,9 +13260,9 @@ - _pkg_short_errors_supported=no - fi - if test $_pkg_short_errors_supported = yes; then -- FFI_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libffi >= 3.0"` -+ FFI_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libffi >= 3.0" 2>&1` - else -- FFI_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libffi >= 3.0"` -+ FFI_PKG_ERRORS=`$PKG_CONFIG --print-errors "libffi >= 3.0" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$FFI_PKG_ERRORS" >&5 -@@ -13221,11 +13308,10 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GIO" >&5 - $as_echo_n "checking for GIO... " >&6; } - --if test -n "$PKG_CONFIG"; then -- if test -n "$GIO_CFLAGS"; then -- pkg_cv_GIO_CFLAGS="$GIO_CFLAGS" -- else -- if test -n "$PKG_CONFIG" && \ -+if test -n "$GIO_CFLAGS"; then -+ pkg_cv_GIO_CFLAGS="$GIO_CFLAGS" -+ elif test -n "$PKG_CONFIG"; then -+ if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gio-2.0 >= 2.22.4\""; } >&5 - ($PKG_CONFIG --exists --print-errors "gio-2.0 >= 2.22.4") 2>&5 - ac_status=$? -@@ -13235,15 +13321,13 @@ - else - pkg_failed=yes - fi -- fi --else -- pkg_failed=untried -+ else -+ pkg_failed=untried - fi --if test -n "$PKG_CONFIG"; then -- if test -n "$GIO_LIBS"; then -- pkg_cv_GIO_LIBS="$GIO_LIBS" -- else -- if test -n "$PKG_CONFIG" && \ -+if test -n "$GIO_LIBS"; then -+ pkg_cv_GIO_LIBS="$GIO_LIBS" -+ elif test -n "$PKG_CONFIG"; then -+ if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gio-2.0 >= 2.22.4\""; } >&5 - ($PKG_CONFIG --exists --print-errors "gio-2.0 >= 2.22.4") 2>&5 - ac_status=$? -@@ -13253,9 +13337,8 @@ - else - pkg_failed=yes - fi -- fi --else -- pkg_failed=untried -+ else -+ pkg_failed=untried - fi - - -@@ -13268,9 +13351,9 @@ - _pkg_short_errors_supported=no - fi - if test $_pkg_short_errors_supported = yes; then -- GIO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gio-2.0 >= 2.22.4"` -+ GIO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gio-2.0 >= 2.22.4" 2>&1` - else -- GIO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gio-2.0 >= 2.22.4"` -+ GIO_PKG_ERRORS=`$PKG_CONFIG --print-errors "gio-2.0 >= 2.22.4" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$GIO_PKG_ERRORS" >&5 -@@ -13306,11 +13389,10 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GIOUNIX" >&5 - $as_echo_n "checking for GIOUNIX... " >&6; } - --if test -n "$PKG_CONFIG"; then -- if test -n "$GIOUNIX_CFLAGS"; then -- pkg_cv_GIOUNIX_CFLAGS="$GIOUNIX_CFLAGS" -- else -- if test -n "$PKG_CONFIG" && \ -+if test -n "$GIOUNIX_CFLAGS"; then -+ pkg_cv_GIOUNIX_CFLAGS="$GIOUNIX_CFLAGS" -+ elif test -n "$PKG_CONFIG"; then -+ if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gio-unix-2.0 >= 2.22.4\""; } >&5 - ($PKG_CONFIG --exists --print-errors "gio-unix-2.0 >= 2.22.4") 2>&5 - ac_status=$? -@@ -13320,15 +13402,13 @@ - else - pkg_failed=yes - fi -- fi --else -- pkg_failed=untried -+ else -+ pkg_failed=untried - fi --if test -n "$PKG_CONFIG"; then -- if test -n "$GIOUNIX_LIBS"; then -- pkg_cv_GIOUNIX_LIBS="$GIOUNIX_LIBS" -- else -- if test -n "$PKG_CONFIG" && \ -+if test -n "$GIOUNIX_LIBS"; then -+ pkg_cv_GIOUNIX_LIBS="$GIOUNIX_LIBS" -+ elif test -n "$PKG_CONFIG"; then -+ if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gio-unix-2.0 >= 2.22.4\""; } >&5 - ($PKG_CONFIG --exists --print-errors "gio-unix-2.0 >= 2.22.4") 2>&5 - ac_status=$? -@@ -13338,9 +13418,8 @@ - else - pkg_failed=yes - fi -- fi --else -- pkg_failed=untried -+ else -+ pkg_failed=untried - fi - - -@@ -13353,9 +13432,9 @@ - _pkg_short_errors_supported=no - fi - if test $_pkg_short_errors_supported = yes; then -- GIOUNIX_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gio-unix-2.0 >= 2.22.4"` -+ GIOUNIX_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gio-unix-2.0 >= 2.22.4" 2>&1` - else -- GIOUNIX_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gio-unix-2.0 >= 2.22.4"` -+ GIOUNIX_PKG_ERRORS=`$PKG_CONFIG --print-errors "gio-unix-2.0 >= 2.22.4" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$GIOUNIX_PKG_ERRORS" >&5 -@@ -13608,6 +13687,14 @@ - LTLIBOBJS=$ac_ltlibobjs - - -+ if test -n "$EXEEXT"; then -+ am__EXEEXT_TRUE= -+ am__EXEEXT_FALSE='#' -+else -+ am__EXEEXT_TRUE='#' -+ am__EXEEXT_FALSE= -+fi -+ - if test -z "${PLATFORM_WIN32_TRUE}" && test -z "${PLATFORM_WIN32_FALSE}"; then - as_fn_error "conditional \"PLATFORM_WIN32\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 -@@ -14049,7 +14136,7 @@ - # values after options handling. - ac_log=" - This file was extended by pygobject $as_me 2.21.1, which was --generated by GNU Autoconf 2.64. Invocation command line was -+generated by GNU Autoconf 2.65. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS -@@ -14089,6 +14176,7 @@ - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit -+ --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files -@@ -14111,10 +14199,11 @@ - - _ACEOF - cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" - ac_cs_version="\\ - pygobject config.status 2.21.1 --configured by $0, generated by GNU Autoconf 2.64, -- with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" -+configured by $0, generated by GNU Autoconf 2.65, -+ with options \\"\$ac_cs_config\\" - - Copyright (C) 2009 Free Software Foundation, Inc. - This config.status script is free software; the Free Software Foundation -@@ -14152,6 +14241,8 @@ - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; -+ --config | --confi | --conf | --con | --co | --c ) -+ $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) -@@ -14610,7 +14701,7 @@ - t delim - :nl - h --s/\(.\{148\}\).*/\1/ -+s/\(.\{148\}\)..*/\1/ - t more1 - s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ - p -@@ -14624,7 +14715,7 @@ - t nl - :delim - h --s/\(.\{148\}\).*/\1/ -+s/\(.\{148\}\)..*/\1/ - t more2 - s/["\\]/\\&/g; s/^/"/; s/$/"/ - p -diff -Naur pygobject-2.21.1/docs/Makefile.in pygobject-2.21.1.patch/docs/Makefile.in ---- pygobject-2.21.1/docs/Makefile.in 2009-12-26 22:08:33.000000000 +0100 -+++ pygobject-2.21.1.patch/docs/Makefile.in 2010-04-26 16:25:27.186863464 +0200 -@@ -1,8 +1,9 @@ --# Makefile.in generated by automake 1.10.2 from Makefile.am. -+# Makefile.in generated by automake 1.11.1 from Makefile.am. - # @configure_input@ - - # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, --# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -+# Inc. - # This Makefile.in is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. -@@ -16,8 +17,9 @@ - - VPATH = @srcdir@ - pkgdatadir = $(datadir)/@PACKAGE@ --pkglibdir = $(libdir)/@PACKAGE@ - pkgincludedir = $(includedir)/@PACKAGE@ -+pkglibdir = $(libdir)/@PACKAGE@ -+pkglibexecdir = $(libexecdir)/@PACKAGE@ - am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd - install_sh_DATA = $(install_sh) -c -m 644 - install_sh_PROGRAM = $(install_sh) -c -@@ -45,6 +47,7 @@ - mkinstalldirs = $(install_sh) -d - CONFIG_HEADER = $(top_builddir)/config.h - CONFIG_CLEAN_FILES = -+CONFIG_CLEAN_VPATH_FILES = - SOURCES = - DIST_SOURCES = - am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -@@ -52,10 +55,23 @@ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; --am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -+am__install_max = 40 -+am__nobase_strip_setup = \ -+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -+am__nobase_strip = \ -+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -+am__nobase_list = $(am__nobase_strip_setup); \ -+ for p in $$list; do echo "$$p $$p"; done | \ -+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ -+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ -+ if (++n[$$2] == $(am__install_max)) \ -+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ -+ END { for (dir in files) print dir, files[dir] }' -+am__base_list = \ -+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ -+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' - am__installdirs = "$(DESTDIR)$(CSSdir)" "$(DESTDIR)$(XSLdir)" --CSSDATA_INSTALL = $(INSTALL_DATA) --XSLDATA_INSTALL = $(INSTALL_DATA) - DATA = $(CSS_DATA) $(XSL_DATA) - DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) - ACLOCAL = @ACLOCAL@ -@@ -361,9 +377,9 @@ - exit 1;; \ - esac; \ - done; \ -- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/Makefile'; \ -- cd $(top_srcdir) && \ -- $(AUTOMAKE) --gnu docs/Makefile -+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/Makefile'; \ -+ $(am__cd) $(top_srcdir) && \ -+ $(AUTOMAKE) --gnu docs/Makefile - .PRECIOUS: Makefile - Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ -@@ -381,6 +397,7 @@ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - $(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -+$(am__aclocal_m4_deps): - - mostlyclean-libtool: - -rm -f *.lo -@@ -390,37 +407,43 @@ - install-CSSDATA: $(CSS_DATA) - @$(NORMAL_INSTALL) - test -z "$(CSSdir)" || $(MKDIR_P) "$(DESTDIR)$(CSSdir)" -- @list='$(CSS_DATA)'; for p in $$list; do \ -+ @list='$(CSS_DATA)'; test -n "$(CSSdir)" || list=; \ -+ for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ -- f=$(am__strip_dir) \ -- echo " $(CSSDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(CSSdir)/$$f'"; \ -- $(CSSDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(CSSdir)/$$f"; \ -+ echo "$$d$$p"; \ -+ done | $(am__base_list) | \ -+ while read files; do \ -+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(CSSdir)'"; \ -+ $(INSTALL_DATA) $$files "$(DESTDIR)$(CSSdir)" || exit $$?; \ - done - - uninstall-CSSDATA: - @$(NORMAL_UNINSTALL) -- @list='$(CSS_DATA)'; for p in $$list; do \ -- f=$(am__strip_dir) \ -- echo " rm -f '$(DESTDIR)$(CSSdir)/$$f'"; \ -- rm -f "$(DESTDIR)$(CSSdir)/$$f"; \ -- done -+ @list='$(CSS_DATA)'; test -n "$(CSSdir)" || list=; \ -+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ -+ test -n "$$files" || exit 0; \ -+ echo " ( cd '$(DESTDIR)$(CSSdir)' && rm -f" $$files ")"; \ -+ cd "$(DESTDIR)$(CSSdir)" && rm -f $$files - install-XSLDATA: $(XSL_DATA) - @$(NORMAL_INSTALL) - test -z "$(XSLdir)" || $(MKDIR_P) "$(DESTDIR)$(XSLdir)" -- @list='$(XSL_DATA)'; for p in $$list; do \ -+ @list='$(XSL_DATA)'; test -n "$(XSLdir)" || list=; \ -+ for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ -- f=$(am__strip_dir) \ -- echo " $(XSLDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(XSLdir)/$$f'"; \ -- $(XSLDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(XSLdir)/$$f"; \ -+ echo "$$d$$p"; \ -+ done | $(am__base_list) | \ -+ while read files; do \ -+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(XSLdir)'"; \ -+ $(INSTALL_DATA) $$files "$(DESTDIR)$(XSLdir)" || exit $$?; \ - done - - uninstall-XSLDATA: - @$(NORMAL_UNINSTALL) -- @list='$(XSL_DATA)'; for p in $$list; do \ -- f=$(am__strip_dir) \ -- echo " rm -f '$(DESTDIR)$(XSLdir)/$$f'"; \ -- rm -f "$(DESTDIR)$(XSLdir)/$$f"; \ -- done -+ @list='$(XSL_DATA)'; test -n "$(XSLdir)" || list=; \ -+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ -+ test -n "$$files" || exit 0; \ -+ echo " ( cd '$(DESTDIR)$(XSLdir)' && rm -f" $$files ")"; \ -+ cd "$(DESTDIR)$(XSLdir)" && rm -f $$files - tags: TAGS - TAGS: - -@@ -444,13 +467,17 @@ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ -+ if test -d "$(distdir)/$$file"; then \ -+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ -+ fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ -- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ -+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ -+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ -- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ -+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ -- test -f $(distdir)/$$file \ -- || cp -p $$d/$$file $(distdir)/$$file \ -+ test -f "$(distdir)/$$file" \ -+ || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -@@ -484,6 +511,7 @@ - - distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - - maintainer-clean-generic: - @echo "This command is intended for maintainers to use" -@@ -503,6 +531,8 @@ - - html: html-am - -+html-am: -+ - info: info-am - - info-am: -@@ -511,18 +541,28 @@ - - install-dvi: install-dvi-am - -+install-dvi-am: -+ - install-exec-am: - - install-html: install-html-am - -+install-html-am: -+ - install-info: install-info-am - -+install-info-am: -+ - install-man: - - install-pdf: install-pdf-am - -+install-pdf-am: -+ - install-ps: install-ps-am - -+install-ps-am: -+ - installcheck-am: - - maintainer-clean: maintainer-clean-am -@@ -543,7 +583,7 @@ - - uninstall-am: uninstall-CSSDATA uninstall-XSLDATA uninstall-local - --.MAKE: install-am install-strip -+.MAKE: all check install install-am install-strip - - .PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ -@@ -596,6 +636,7 @@ - # xsltproc --nonet --xinclude -o pygobject-ref.fo xsl/pdf-style.xsl \ - # reference/pygobject-ref.xml - # pdfxmltex pygobject-ref.fo >output -+#include -+ -+DL_EXPORT(void) -+init_constants(void) -+{ -+ PyObject *m, *d; -+ -+ m = Py_InitModule("gobject._constants", NULL); -+ d = PyModule_GetDict(m); -+ -+ PyDict_SetItemString(d, "G_MINFLOAT", PyFloat_FromDouble(G_MINFLOAT)); -+ PyDict_SetItemString(d, "G_MAXFLOAT", PyFloat_FromDouble(G_MAXFLOAT)); -+ PyDict_SetItemString(d, "G_MINDOUBLE", PyFloat_FromDouble(G_MINDOUBLE)); -+ PyDict_SetItemString(d, "G_MAXDOUBLE", PyFloat_FromDouble(G_MAXDOUBLE)); -+ PyDict_SetItemString(d, "G_MINSHORT", PyLong_FromLong(G_MINSHORT)); -+ PyDict_SetItemString(d, "G_MAXSHORT", PyLong_FromLong(G_MAXSHORT)); -+ PyDict_SetItemString(d, "G_MAXUSHORT", PyLong_FromUnsignedLong(G_MAXUSHORT)); -+ PyDict_SetItemString(d, "G_MININT", PyLong_FromLong(G_MININT)); -+ PyDict_SetItemString(d, "G_MAXINT", PyLong_FromLong(G_MAXINT)); -+ PyDict_SetItemString(d, "G_MAXUINT", PyLong_FromUnsignedLong(G_MAXUINT)); -+ PyDict_SetItemString(d, "G_MINLONG", PyLong_FromLong(G_MINLONG)); -+ PyDict_SetItemString(d, "G_MAXLONG", PyLong_FromLong(G_MAXLONG)); -+ PyDict_SetItemString(d, "G_MAXULONG", PyLong_FromUnsignedLong(G_MAXULONG)); -+} -+ -diff -Naur pygobject-2.21.1/gobject/constants.py pygobject-2.21.1.patch/gobject/constants.py ---- pygobject-2.21.1/gobject/constants.py 1970-01-01 01:00:00.000000000 +0100 -+++ pygobject-2.21.1.patch/gobject/constants.py 2010-04-26 16:24:13.560740838 +0200 -@@ -0,0 +1,51 @@ -+# -*- Mode: Python; py-indent-offset: 4 -*- -+# pygobject - Python bindings for the GObject library -+# Copyright (C) 2006-2007 Johan Dahlin -+# -+# gobject/constants.py: GObject type constants -+# -+# This library is free software; you can redistribute it and/or -+# modify it under the terms of the GNU Lesser General Public -+# License as published by the Free Software Foundation; either -+# version 2.1 of the License, or (at your option) any later version. -+# -+# This library is distributed in the hope that it will be useful, -+# but WITHOUT ANY WARRANTY; without even the implied warranty of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+# Lesser General Public License for more details. -+# -+# You should have received a copy of the GNU Lesser General Public -+# License along with this library; if not, write to the Free Software -+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -+# USA -+ -+import sys -+ -+import gobject._gobject -+_gobject = sys.modules['gobject._gobject'] -+from _constants import * -+ -+# TYPE_INVALID defined in gobjectmodule.c -+TYPE_NONE = _gobject.type_from_name('void') -+TYPE_INTERFACE = _gobject.type_from_name('GInterface') -+TYPE_CHAR = _gobject.type_from_name('gchar') -+TYPE_UCHAR = _gobject.type_from_name('guchar') -+TYPE_BOOLEAN = _gobject.type_from_name('gboolean') -+TYPE_INT = _gobject.type_from_name('gint') -+TYPE_UINT = _gobject.type_from_name('guint') -+TYPE_LONG = _gobject.type_from_name('glong') -+TYPE_ULONG = _gobject.type_from_name('gulong') -+TYPE_INT64 = _gobject.type_from_name('gint64') -+TYPE_UINT64 = _gobject.type_from_name('guint64') -+TYPE_ENUM = _gobject.type_from_name('GEnum') -+TYPE_FLAGS = _gobject.type_from_name('GFlags') -+TYPE_FLOAT = _gobject.type_from_name('gfloat') -+TYPE_DOUBLE = _gobject.type_from_name('gdouble') -+TYPE_STRING = _gobject.type_from_name('gchararray') -+TYPE_POINTER = _gobject.type_from_name('gpointer') -+TYPE_BOXED = _gobject.type_from_name('GBoxed') -+TYPE_PARAM = _gobject.type_from_name('GParam') -+TYPE_OBJECT = _gobject.type_from_name('GObject') -+TYPE_PYOBJECT = _gobject.type_from_name('PyObject') -+TYPE_UNICHAR = TYPE_UINT -+ -diff -Naur pygobject-2.21.1/gobject/Makefile.am pygobject-2.21.1.patch/gobject/Makefile.am ---- pygobject-2.21.1/gobject/Makefile.am 2009-12-18 10:07:17.000000000 +0100 -+++ pygobject-2.21.1.patch/gobject/Makefile.am 2010-04-26 16:24:19.033865493 +0200 -@@ -11,7 +11,7 @@ - pygobject_PYTHON = \ - __init__.py \ - propertyhelper.py --pygobject_LTLIBRARIES = _gobject.la -+pygobject_LTLIBRARIES = _gobject.la _constants.la - nodist_pygobject_PYTHON = constants.py - - common_ldflags = -module -avoid-version -@@ -19,18 +19,11 @@ - common_ldflags += -no-undefined - endif - --constants.py: generate-constants$(EXEEXT) constants.py.in -- rm -f constants.py -- cp $(srcdir)/constants.py.in constants.py -- chmod 644 constants.py -- $(top_builddir)/gobject/generate-constants$(EXEEXT) >> constants.py -- chmod 444 constants.py -- --generate_constants_CFLAGS = $(GLIB_CFLAGS) $(PYTHON_INCLUDES) -- --noinst_PROGRAMS = generate-constants - CLEANFILES = constants.py --EXTRA_DIST = constants.py.in -+ -+_constants_la_CFLAGS = $(PYTHON_INCLUDES) $(GLIB_CFLAGS) -+_constants_la_LDFLAGS = $(common_ldflags) -export-symbols-regex init_constants -+_constants_la_SOURCES = _constants.c - - _gobject_la_CFLAGS = \ - -I$(top_srcdir)/glib \ -diff -Naur pygobject-2.21.1/gobject/Makefile.in pygobject-2.21.1.patch/gobject/Makefile.in ---- pygobject-2.21.1/gobject/Makefile.in 2009-12-26 22:08:34.000000000 +0100 -+++ pygobject-2.21.1.patch/gobject/Makefile.in 2010-04-26 16:25:27.758863642 +0200 -@@ -1,8 +1,9 @@ --# Makefile.in generated by automake 1.10.2 from Makefile.am. -+# Makefile.in generated by automake 1.11.1 from Makefile.am. - # @configure_input@ - - # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, --# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -+# Inc. - # This Makefile.in is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. -@@ -15,10 +16,10 @@ - @SET_MAKE@ - - -- - VPATH = @srcdir@ - pkgdatadir = $(datadir)/@PACKAGE@ - pkglibdir = $(libdir)/@PACKAGE@ -+pkglibexecdir = $(libexecdir)/@PACKAGE@ - am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd - install_sh_DATA = $(install_sh) -c -m 644 - install_sh_PROGRAM = $(install_sh) -c -@@ -34,7 +35,6 @@ - build_triplet = @build@ - host_triplet = @host@ - @PLATFORM_WIN32_TRUE@am__append_1 = -no-undefined --noinst_PROGRAMS = generate-constants$(EXEEXT) - @HAVE_LIBFFI_TRUE@am__append_2 = ffi-marshaller.c ffi-marshaller.h - @PLATFORM_WIN32_TRUE@am__append_3 = -DPLATFORM_WIN32 - subdir = gobject -@@ -51,17 +51,38 @@ - mkinstalldirs = $(install_sh) -d - CONFIG_HEADER = $(top_builddir)/config.h - CONFIG_CLEAN_FILES = -+CONFIG_CLEAN_VPATH_FILES = - am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; - am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; --am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -+am__install_max = 40 -+am__nobase_strip_setup = \ -+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -+am__nobase_strip = \ -+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -+am__nobase_list = $(am__nobase_strip_setup); \ -+ for p in $$list; do echo "$$p $$p"; done | \ -+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ -+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ -+ if (++n[$$2] == $(am__install_max)) \ -+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ -+ END { for (dir in files) print dir, files[dir] }' -+am__base_list = \ -+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ -+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' - am__installdirs = "$(DESTDIR)$(pygobjectdir)" \ - "$(DESTDIR)$(pygobjectdir)" "$(DESTDIR)$(pygobjectdir)" \ - "$(DESTDIR)$(pkgincludedir)" --pygobjectLTLIBRARIES_INSTALL = $(INSTALL) - LTLIBRARIES = $(pygobject_LTLIBRARIES) -+_constants_la_LIBADD = -+am__constants_la_OBJECTS = _constants_la-_constants.lo -+_constants_la_OBJECTS = $(am__constants_la_OBJECTS) -+_constants_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ -+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(_constants_la_CFLAGS) \ -+ $(CFLAGS) $(_constants_la_LDFLAGS) $(LDFLAGS) -o $@ - am__DEPENDENCIES_1 = - am___gobject_la_SOURCES_DIST = gobjectmodule.c pygboxed.c pygboxed.h \ - pygenum.c pygenum.h pygflags.c pygflags.h pyginterface.c \ -@@ -80,18 +101,10 @@ - _gobject_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(_gobject_la_CFLAGS) \ - $(CFLAGS) $(_gobject_la_LDFLAGS) $(LDFLAGS) -o $@ --PROGRAMS = $(noinst_PROGRAMS) --generate_constants_SOURCES = generate-constants.c --generate_constants_OBJECTS = \ -- generate_constants-generate-constants.$(OBJEXT) --generate_constants_LDADD = $(LDADD) --generate_constants_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ -- $(LIBTOOLFLAGS) --mode=link $(CCLD) \ -- $(generate_constants_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ -- $(LDFLAGS) -o $@ - DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) - depcomp = $(SHELL) $(top_srcdir)/depcomp - am__depfiles_maybe = depfiles -+am__mv = mv -f - COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) - LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ -@@ -101,12 +114,10 @@ - LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ --SOURCES = $(_gobject_la_SOURCES) generate-constants.c --DIST_SOURCES = $(am___gobject_la_SOURCES_DIST) generate-constants.c --nodist_pygobjectPYTHON_INSTALL = $(INSTALL_DATA) --pygobjectPYTHON_INSTALL = $(INSTALL_DATA) -+SOURCES = $(_constants_la_SOURCES) $(_gobject_la_SOURCES) -+DIST_SOURCES = $(_constants_la_SOURCES) \ -+ $(am___gobject_la_SOURCES_DIST) - py_compile = $(top_srcdir)/py-compile --pkgincludeHEADERS_INSTALL = $(INSTALL_HEADER) - HEADERS = $(pkginclude_HEADERS) - ETAGS = etags - CTAGS = ctags -@@ -268,12 +279,13 @@ - __init__.py \ - propertyhelper.py - --pygobject_LTLIBRARIES = _gobject.la -+pygobject_LTLIBRARIES = _gobject.la _constants.la - nodist_pygobject_PYTHON = constants.py - common_ldflags = -module -avoid-version $(am__append_1) --generate_constants_CFLAGS = $(GLIB_CFLAGS) $(PYTHON_INCLUDES) - CLEANFILES = constants.py --EXTRA_DIST = constants.py.in -+_constants_la_CFLAGS = $(PYTHON_INCLUDES) $(GLIB_CFLAGS) -+_constants_la_LDFLAGS = $(common_ldflags) -export-symbols-regex init_constants -+_constants_la_SOURCES = _constants.c - _gobject_la_CFLAGS = -I$(top_srcdir)/glib $(PYTHON_INCLUDES) \ - $(FFI_CFLAGS) $(GLIB_CFLAGS) -DPY_SSIZE_T_CLEAN \ - $(am__append_3) -@@ -302,9 +314,9 @@ - exit 1;; \ - esac; \ - done; \ -- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gobject/Makefile'; \ -- cd $(top_srcdir) && \ -- $(AUTOMAKE) --gnu gobject/Makefile -+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gobject/Makefile'; \ -+ $(am__cd) $(top_srcdir) && \ -+ $(AUTOMAKE) --gnu gobject/Makefile - .PRECIOUS: Makefile - Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ -@@ -322,23 +334,28 @@ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - $(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -+$(am__aclocal_m4_deps): - install-pygobjectLTLIBRARIES: $(pygobject_LTLIBRARIES) - @$(NORMAL_INSTALL) - test -z "$(pygobjectdir)" || $(MKDIR_P) "$(DESTDIR)$(pygobjectdir)" -- @list='$(pygobject_LTLIBRARIES)'; for p in $$list; do \ -+ @list='$(pygobject_LTLIBRARIES)'; test -n "$(pygobjectdir)" || list=; \ -+ list2=; for p in $$list; do \ - if test -f $$p; then \ -- f=$(am__strip_dir) \ -- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pygobjectLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(pygobjectdir)/$$f'"; \ -- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pygobjectLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(pygobjectdir)/$$f"; \ -+ list2="$$list2 $$p"; \ - else :; fi; \ -- done -+ done; \ -+ test -z "$$list2" || { \ -+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pygobjectdir)'"; \ -+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pygobjectdir)"; \ -+ } - - uninstall-pygobjectLTLIBRARIES: - @$(NORMAL_UNINSTALL) -- @list='$(pygobject_LTLIBRARIES)'; for p in $$list; do \ -- p=$(am__strip_dir) \ -- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pygobjectdir)/$$p'"; \ -- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pygobjectdir)/$$p"; \ -+ @list='$(pygobject_LTLIBRARIES)'; test -n "$(pygobjectdir)" || list=; \ -+ for p in $$list; do \ -+ $(am__strip_dir) \ -+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pygobjectdir)/$$f'"; \ -+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pygobjectdir)/$$f"; \ - done - - clean-pygobjectLTLIBRARIES: -@@ -349,25 +366,18 @@ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -+_constants.la: $(_constants_la_OBJECTS) $(_constants_la_DEPENDENCIES) -+ $(_constants_la_LINK) -rpath $(pygobjectdir) $(_constants_la_OBJECTS) $(_constants_la_LIBADD) $(LIBS) - _gobject.la: $(_gobject_la_OBJECTS) $(_gobject_la_DEPENDENCIES) - $(_gobject_la_LINK) -rpath $(pygobjectdir) $(_gobject_la_OBJECTS) $(_gobject_la_LIBADD) $(LIBS) - --clean-noinstPROGRAMS: -- @list='$(noinst_PROGRAMS)'; for p in $$list; do \ -- f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ -- echo " rm -f $$p $$f"; \ -- rm -f $$p $$f ; \ -- done --generate-constants$(EXEEXT): $(generate_constants_OBJECTS) $(generate_constants_DEPENDENCIES) -- @rm -f generate-constants$(EXEEXT) -- $(generate_constants_LINK) $(generate_constants_OBJECTS) $(generate_constants_LDADD) $(LIBS) -- - mostlyclean-compile: - -rm -f *.$(OBJEXT) - - distclean-compile: - -rm -f *.tab.c - -+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_constants_la-_constants.Plo@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gobject_la-ffi-marshaller.Plo@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gobject_la-gobjectmodule.Plo@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gobject_la-pygboxed.Plo@am__quote@ -@@ -378,112 +388,104 @@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gobject_la-pygparamspec.Plo@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gobject_la-pygpointer.Plo@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gobject_la-pygtype.Plo@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/generate_constants-generate-constants.Po@am__quote@ - - .c.o: - @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< --@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po - @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ - @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ - @am__fastdepCC_FALSE@ $(COMPILE) -c $< - - .c.obj: - @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` --@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po - @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ - @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ - @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - - .c.lo: - @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< --@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo - @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ - @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ - @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -+_constants_la-_constants.lo: _constants.c -+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_constants_la_CFLAGS) $(CFLAGS) -MT _constants_la-_constants.lo -MD -MP -MF $(DEPDIR)/_constants_la-_constants.Tpo -c -o _constants_la-_constants.lo `test -f '_constants.c' || echo '$(srcdir)/'`_constants.c -+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/_constants_la-_constants.Tpo $(DEPDIR)/_constants_la-_constants.Plo -+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='_constants.c' object='_constants_la-_constants.lo' libtool=yes @AMDEPBACKSLASH@ -+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_constants_la_CFLAGS) $(CFLAGS) -c -o _constants_la-_constants.lo `test -f '_constants.c' || echo '$(srcdir)/'`_constants.c -+ - _gobject_la-gobjectmodule.lo: gobjectmodule.c --@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -MT _gobject_la-gobjectmodule.lo -MD -MP -MF $(DEPDIR)/_gobject_la-gobjectmodule.Tpo -c -o _gobject_la-gobjectmodule.lo `test -f 'gobjectmodule.c' || echo '$(srcdir)/'`gobjectmodule.c --@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/_gobject_la-gobjectmodule.Tpo $(DEPDIR)/_gobject_la-gobjectmodule.Plo -+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -MT _gobject_la-gobjectmodule.lo -MD -MP -MF $(DEPDIR)/_gobject_la-gobjectmodule.Tpo -c -o _gobject_la-gobjectmodule.lo `test -f 'gobjectmodule.c' || echo '$(srcdir)/'`gobjectmodule.c -+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/_gobject_la-gobjectmodule.Tpo $(DEPDIR)/_gobject_la-gobjectmodule.Plo - @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gobjectmodule.c' object='_gobject_la-gobjectmodule.lo' libtool=yes @AMDEPBACKSLASH@ - @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -c -o _gobject_la-gobjectmodule.lo `test -f 'gobjectmodule.c' || echo '$(srcdir)/'`gobjectmodule.c -+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -c -o _gobject_la-gobjectmodule.lo `test -f 'gobjectmodule.c' || echo '$(srcdir)/'`gobjectmodule.c - - _gobject_la-pygboxed.lo: pygboxed.c --@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -MT _gobject_la-pygboxed.lo -MD -MP -MF $(DEPDIR)/_gobject_la-pygboxed.Tpo -c -o _gobject_la-pygboxed.lo `test -f 'pygboxed.c' || echo '$(srcdir)/'`pygboxed.c --@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/_gobject_la-pygboxed.Tpo $(DEPDIR)/_gobject_la-pygboxed.Plo -+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -MT _gobject_la-pygboxed.lo -MD -MP -MF $(DEPDIR)/_gobject_la-pygboxed.Tpo -c -o _gobject_la-pygboxed.lo `test -f 'pygboxed.c' || echo '$(srcdir)/'`pygboxed.c -+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/_gobject_la-pygboxed.Tpo $(DEPDIR)/_gobject_la-pygboxed.Plo - @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pygboxed.c' object='_gobject_la-pygboxed.lo' libtool=yes @AMDEPBACKSLASH@ - @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -c -o _gobject_la-pygboxed.lo `test -f 'pygboxed.c' || echo '$(srcdir)/'`pygboxed.c -+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -c -o _gobject_la-pygboxed.lo `test -f 'pygboxed.c' || echo '$(srcdir)/'`pygboxed.c - - _gobject_la-pygenum.lo: pygenum.c --@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -MT _gobject_la-pygenum.lo -MD -MP -MF $(DEPDIR)/_gobject_la-pygenum.Tpo -c -o _gobject_la-pygenum.lo `test -f 'pygenum.c' || echo '$(srcdir)/'`pygenum.c --@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/_gobject_la-pygenum.Tpo $(DEPDIR)/_gobject_la-pygenum.Plo -+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -MT _gobject_la-pygenum.lo -MD -MP -MF $(DEPDIR)/_gobject_la-pygenum.Tpo -c -o _gobject_la-pygenum.lo `test -f 'pygenum.c' || echo '$(srcdir)/'`pygenum.c -+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/_gobject_la-pygenum.Tpo $(DEPDIR)/_gobject_la-pygenum.Plo - @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pygenum.c' object='_gobject_la-pygenum.lo' libtool=yes @AMDEPBACKSLASH@ - @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -c -o _gobject_la-pygenum.lo `test -f 'pygenum.c' || echo '$(srcdir)/'`pygenum.c -+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -c -o _gobject_la-pygenum.lo `test -f 'pygenum.c' || echo '$(srcdir)/'`pygenum.c - - _gobject_la-pygflags.lo: pygflags.c --@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -MT _gobject_la-pygflags.lo -MD -MP -MF $(DEPDIR)/_gobject_la-pygflags.Tpo -c -o _gobject_la-pygflags.lo `test -f 'pygflags.c' || echo '$(srcdir)/'`pygflags.c --@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/_gobject_la-pygflags.Tpo $(DEPDIR)/_gobject_la-pygflags.Plo -+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -MT _gobject_la-pygflags.lo -MD -MP -MF $(DEPDIR)/_gobject_la-pygflags.Tpo -c -o _gobject_la-pygflags.lo `test -f 'pygflags.c' || echo '$(srcdir)/'`pygflags.c -+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/_gobject_la-pygflags.Tpo $(DEPDIR)/_gobject_la-pygflags.Plo - @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pygflags.c' object='_gobject_la-pygflags.lo' libtool=yes @AMDEPBACKSLASH@ - @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -c -o _gobject_la-pygflags.lo `test -f 'pygflags.c' || echo '$(srcdir)/'`pygflags.c -+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -c -o _gobject_la-pygflags.lo `test -f 'pygflags.c' || echo '$(srcdir)/'`pygflags.c - - _gobject_la-pyginterface.lo: pyginterface.c --@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -MT _gobject_la-pyginterface.lo -MD -MP -MF $(DEPDIR)/_gobject_la-pyginterface.Tpo -c -o _gobject_la-pyginterface.lo `test -f 'pyginterface.c' || echo '$(srcdir)/'`pyginterface.c --@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/_gobject_la-pyginterface.Tpo $(DEPDIR)/_gobject_la-pyginterface.Plo -+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -MT _gobject_la-pyginterface.lo -MD -MP -MF $(DEPDIR)/_gobject_la-pyginterface.Tpo -c -o _gobject_la-pyginterface.lo `test -f 'pyginterface.c' || echo '$(srcdir)/'`pyginterface.c -+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/_gobject_la-pyginterface.Tpo $(DEPDIR)/_gobject_la-pyginterface.Plo - @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pyginterface.c' object='_gobject_la-pyginterface.lo' libtool=yes @AMDEPBACKSLASH@ - @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -c -o _gobject_la-pyginterface.lo `test -f 'pyginterface.c' || echo '$(srcdir)/'`pyginterface.c -+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -c -o _gobject_la-pyginterface.lo `test -f 'pyginterface.c' || echo '$(srcdir)/'`pyginterface.c - - _gobject_la-pygobject.lo: pygobject.c --@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -MT _gobject_la-pygobject.lo -MD -MP -MF $(DEPDIR)/_gobject_la-pygobject.Tpo -c -o _gobject_la-pygobject.lo `test -f 'pygobject.c' || echo '$(srcdir)/'`pygobject.c --@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/_gobject_la-pygobject.Tpo $(DEPDIR)/_gobject_la-pygobject.Plo -+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -MT _gobject_la-pygobject.lo -MD -MP -MF $(DEPDIR)/_gobject_la-pygobject.Tpo -c -o _gobject_la-pygobject.lo `test -f 'pygobject.c' || echo '$(srcdir)/'`pygobject.c -+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/_gobject_la-pygobject.Tpo $(DEPDIR)/_gobject_la-pygobject.Plo - @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pygobject.c' object='_gobject_la-pygobject.lo' libtool=yes @AMDEPBACKSLASH@ - @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -c -o _gobject_la-pygobject.lo `test -f 'pygobject.c' || echo '$(srcdir)/'`pygobject.c -+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -c -o _gobject_la-pygobject.lo `test -f 'pygobject.c' || echo '$(srcdir)/'`pygobject.c - - _gobject_la-pygparamspec.lo: pygparamspec.c --@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -MT _gobject_la-pygparamspec.lo -MD -MP -MF $(DEPDIR)/_gobject_la-pygparamspec.Tpo -c -o _gobject_la-pygparamspec.lo `test -f 'pygparamspec.c' || echo '$(srcdir)/'`pygparamspec.c --@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/_gobject_la-pygparamspec.Tpo $(DEPDIR)/_gobject_la-pygparamspec.Plo -+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -MT _gobject_la-pygparamspec.lo -MD -MP -MF $(DEPDIR)/_gobject_la-pygparamspec.Tpo -c -o _gobject_la-pygparamspec.lo `test -f 'pygparamspec.c' || echo '$(srcdir)/'`pygparamspec.c -+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/_gobject_la-pygparamspec.Tpo $(DEPDIR)/_gobject_la-pygparamspec.Plo - @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pygparamspec.c' object='_gobject_la-pygparamspec.lo' libtool=yes @AMDEPBACKSLASH@ - @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -c -o _gobject_la-pygparamspec.lo `test -f 'pygparamspec.c' || echo '$(srcdir)/'`pygparamspec.c -+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -c -o _gobject_la-pygparamspec.lo `test -f 'pygparamspec.c' || echo '$(srcdir)/'`pygparamspec.c - - _gobject_la-pygpointer.lo: pygpointer.c --@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -MT _gobject_la-pygpointer.lo -MD -MP -MF $(DEPDIR)/_gobject_la-pygpointer.Tpo -c -o _gobject_la-pygpointer.lo `test -f 'pygpointer.c' || echo '$(srcdir)/'`pygpointer.c --@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/_gobject_la-pygpointer.Tpo $(DEPDIR)/_gobject_la-pygpointer.Plo -+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -MT _gobject_la-pygpointer.lo -MD -MP -MF $(DEPDIR)/_gobject_la-pygpointer.Tpo -c -o _gobject_la-pygpointer.lo `test -f 'pygpointer.c' || echo '$(srcdir)/'`pygpointer.c -+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/_gobject_la-pygpointer.Tpo $(DEPDIR)/_gobject_la-pygpointer.Plo - @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pygpointer.c' object='_gobject_la-pygpointer.lo' libtool=yes @AMDEPBACKSLASH@ - @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -c -o _gobject_la-pygpointer.lo `test -f 'pygpointer.c' || echo '$(srcdir)/'`pygpointer.c -+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -c -o _gobject_la-pygpointer.lo `test -f 'pygpointer.c' || echo '$(srcdir)/'`pygpointer.c - - _gobject_la-pygtype.lo: pygtype.c --@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -MT _gobject_la-pygtype.lo -MD -MP -MF $(DEPDIR)/_gobject_la-pygtype.Tpo -c -o _gobject_la-pygtype.lo `test -f 'pygtype.c' || echo '$(srcdir)/'`pygtype.c --@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/_gobject_la-pygtype.Tpo $(DEPDIR)/_gobject_la-pygtype.Plo -+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -MT _gobject_la-pygtype.lo -MD -MP -MF $(DEPDIR)/_gobject_la-pygtype.Tpo -c -o _gobject_la-pygtype.lo `test -f 'pygtype.c' || echo '$(srcdir)/'`pygtype.c -+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/_gobject_la-pygtype.Tpo $(DEPDIR)/_gobject_la-pygtype.Plo - @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pygtype.c' object='_gobject_la-pygtype.lo' libtool=yes @AMDEPBACKSLASH@ - @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -c -o _gobject_la-pygtype.lo `test -f 'pygtype.c' || echo '$(srcdir)/'`pygtype.c -+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -c -o _gobject_la-pygtype.lo `test -f 'pygtype.c' || echo '$(srcdir)/'`pygtype.c - - _gobject_la-ffi-marshaller.lo: ffi-marshaller.c --@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -MT _gobject_la-ffi-marshaller.lo -MD -MP -MF $(DEPDIR)/_gobject_la-ffi-marshaller.Tpo -c -o _gobject_la-ffi-marshaller.lo `test -f 'ffi-marshaller.c' || echo '$(srcdir)/'`ffi-marshaller.c --@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/_gobject_la-ffi-marshaller.Tpo $(DEPDIR)/_gobject_la-ffi-marshaller.Plo -+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -MT _gobject_la-ffi-marshaller.lo -MD -MP -MF $(DEPDIR)/_gobject_la-ffi-marshaller.Tpo -c -o _gobject_la-ffi-marshaller.lo `test -f 'ffi-marshaller.c' || echo '$(srcdir)/'`ffi-marshaller.c -+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/_gobject_la-ffi-marshaller.Tpo $(DEPDIR)/_gobject_la-ffi-marshaller.Plo - @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ffi-marshaller.c' object='_gobject_la-ffi-marshaller.lo' libtool=yes @AMDEPBACKSLASH@ - @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -c -o _gobject_la-ffi-marshaller.lo `test -f 'ffi-marshaller.c' || echo '$(srcdir)/'`ffi-marshaller.c -- --generate_constants-generate-constants.o: generate-constants.c --@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(generate_constants_CFLAGS) $(CFLAGS) -MT generate_constants-generate-constants.o -MD -MP -MF $(DEPDIR)/generate_constants-generate-constants.Tpo -c -o generate_constants-generate-constants.o `test -f 'generate-constants.c' || echo '$(srcdir)/'`generate-constants.c --@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/generate_constants-generate-constants.Tpo $(DEPDIR)/generate_constants-generate-constants.Po --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='generate-constants.c' object='generate_constants-generate-constants.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(generate_constants_CFLAGS) $(CFLAGS) -c -o generate_constants-generate-constants.o `test -f 'generate-constants.c' || echo '$(srcdir)/'`generate-constants.c -- --generate_constants-generate-constants.obj: generate-constants.c --@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(generate_constants_CFLAGS) $(CFLAGS) -MT generate_constants-generate-constants.obj -MD -MP -MF $(DEPDIR)/generate_constants-generate-constants.Tpo -c -o generate_constants-generate-constants.obj `if test -f 'generate-constants.c'; then $(CYGPATH_W) 'generate-constants.c'; else $(CYGPATH_W) '$(srcdir)/generate-constants.c'; fi` --@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/generate_constants-generate-constants.Tpo $(DEPDIR)/generate_constants-generate-constants.Po --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='generate-constants.c' object='generate_constants-generate-constants.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(generate_constants_CFLAGS) $(CFLAGS) -c -o generate_constants-generate-constants.obj `if test -f 'generate-constants.c'; then $(CYGPATH_W) 'generate-constants.c'; else $(CYGPATH_W) '$(srcdir)/generate-constants.c'; fi` -+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gobject_la_CFLAGS) $(CFLAGS) -c -o _gobject_la-ffi-marshaller.lo `test -f 'ffi-marshaller.c' || echo '$(srcdir)/'`ffi-marshaller.c - - mostlyclean-libtool: - -rm -f *.lo -@@ -493,15 +495,20 @@ - install-nodist_pygobjectPYTHON: $(nodist_pygobject_PYTHON) - @$(NORMAL_INSTALL) - test -z "$(pygobjectdir)" || $(MKDIR_P) "$(DESTDIR)$(pygobjectdir)" -- @list='$(nodist_pygobject_PYTHON)'; dlist=''; for p in $$list; do\ -+ @list='$(nodist_pygobject_PYTHON)'; dlist=; list2=; test -n "$(pygobjectdir)" || list=; \ -+ for p in $$list; do \ - if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ - if test -f $$b$$p; then \ -- f=$(am__strip_dir) \ -+ $(am__strip_dir) \ - dlist="$$dlist $$f"; \ -- echo " $(nodist_pygobjectPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(pygobjectdir)/$$f'"; \ -- $(nodist_pygobjectPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(pygobjectdir)/$$f"; \ -+ list2="$$list2 $$b$$p"; \ - else :; fi; \ - done; \ -+ for file in $$list2; do echo $$file; done | $(am__base_list) | \ -+ while read files; do \ -+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pygobjectdir)'"; \ -+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pygobjectdir)" || exit $$?; \ -+ done || exit $$?; \ - if test -n "$$dlist"; then \ - if test -z "$(DESTDIR)"; then \ - PYTHON=$(PYTHON) $(py_compile) --basedir "$(pygobjectdir)" $$dlist; \ -@@ -512,24 +519,34 @@ - - uninstall-nodist_pygobjectPYTHON: - @$(NORMAL_UNINSTALL) -- @list='$(nodist_pygobject_PYTHON)'; dlist=''; for p in $$list; do\ -- f=$(am__strip_dir) \ -- rm -f "$(DESTDIR)$(pygobjectdir)/$$f"; \ -- rm -f "$(DESTDIR)$(pygobjectdir)/$${f}c"; \ -- rm -f "$(DESTDIR)$(pygobjectdir)/$${f}o"; \ -- done -+ @list='$(nodist_pygobject_PYTHON)'; test -n "$(pygobjectdir)" || list=; \ -+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ -+ test -n "$$files" || exit 0; \ -+ filesc=`echo "$$files" | sed 's|$$|c|'`; \ -+ fileso=`echo "$$files" | sed 's|$$|o|'`; \ -+ echo " ( cd '$(DESTDIR)$(pygobjectdir)' && rm -f" $$files ")"; \ -+ cd "$(DESTDIR)$(pygobjectdir)" && rm -f $$files || exit $$?; \ -+ echo " ( cd '$(DESTDIR)$(pygobjectdir)' && rm -f" $$filesc ")"; \ -+ cd "$(DESTDIR)$(pygobjectdir)" && rm -f $$filesc || exit $$?; \ -+ echo " ( cd '$(DESTDIR)$(pygobjectdir)' && rm -f" $$fileso ")"; \ -+ cd "$(DESTDIR)$(pygobjectdir)" && rm -f $$fileso - install-pygobjectPYTHON: $(pygobject_PYTHON) - @$(NORMAL_INSTALL) - test -z "$(pygobjectdir)" || $(MKDIR_P) "$(DESTDIR)$(pygobjectdir)" -- @list='$(pygobject_PYTHON)'; dlist=''; for p in $$list; do\ -+ @list='$(pygobject_PYTHON)'; dlist=; list2=; test -n "$(pygobjectdir)" || list=; \ -+ for p in $$list; do \ - if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ - if test -f $$b$$p; then \ -- f=$(am__strip_dir) \ -+ $(am__strip_dir) \ - dlist="$$dlist $$f"; \ -- echo " $(pygobjectPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(pygobjectdir)/$$f'"; \ -- $(pygobjectPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(pygobjectdir)/$$f"; \ -+ list2="$$list2 $$b$$p"; \ - else :; fi; \ - done; \ -+ for file in $$list2; do echo $$file; done | $(am__base_list) | \ -+ while read files; do \ -+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pygobjectdir)'"; \ -+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pygobjectdir)" || exit $$?; \ -+ done || exit $$?; \ - if test -n "$$dlist"; then \ - if test -z "$(DESTDIR)"; then \ - PYTHON=$(PYTHON) $(py_compile) --basedir "$(pygobjectdir)" $$dlist; \ -@@ -540,29 +557,37 @@ - - uninstall-pygobjectPYTHON: - @$(NORMAL_UNINSTALL) -- @list='$(pygobject_PYTHON)'; dlist=''; for p in $$list; do\ -- f=$(am__strip_dir) \ -- rm -f "$(DESTDIR)$(pygobjectdir)/$$f"; \ -- rm -f "$(DESTDIR)$(pygobjectdir)/$${f}c"; \ -- rm -f "$(DESTDIR)$(pygobjectdir)/$${f}o"; \ -- done -+ @list='$(pygobject_PYTHON)'; test -n "$(pygobjectdir)" || list=; \ -+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ -+ test -n "$$files" || exit 0; \ -+ filesc=`echo "$$files" | sed 's|$$|c|'`; \ -+ fileso=`echo "$$files" | sed 's|$$|o|'`; \ -+ echo " ( cd '$(DESTDIR)$(pygobjectdir)' && rm -f" $$files ")"; \ -+ cd "$(DESTDIR)$(pygobjectdir)" && rm -f $$files || exit $$?; \ -+ echo " ( cd '$(DESTDIR)$(pygobjectdir)' && rm -f" $$filesc ")"; \ -+ cd "$(DESTDIR)$(pygobjectdir)" && rm -f $$filesc || exit $$?; \ -+ echo " ( cd '$(DESTDIR)$(pygobjectdir)' && rm -f" $$fileso ")"; \ -+ cd "$(DESTDIR)$(pygobjectdir)" && rm -f $$fileso - install-pkgincludeHEADERS: $(pkginclude_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" -- @list='$(pkginclude_HEADERS)'; for p in $$list; do \ -+ @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ -+ for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ -- f=$(am__strip_dir) \ -- echo " $(pkgincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgincludedir)/$$f'"; \ -- $(pkgincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgincludedir)/$$f"; \ -+ echo "$$d$$p"; \ -+ done | $(am__base_list) | \ -+ while read files; do \ -+ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ -+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ - done - - uninstall-pkgincludeHEADERS: - @$(NORMAL_UNINSTALL) -- @list='$(pkginclude_HEADERS)'; for p in $$list; do \ -- f=$(am__strip_dir) \ -- echo " rm -f '$(DESTDIR)$(pkgincludedir)/$$f'"; \ -- rm -f "$(DESTDIR)$(pkgincludedir)/$$f"; \ -- done -+ @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ -+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ -+ test -n "$$files" || exit 0; \ -+ echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \ -+ cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files - - ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ -@@ -576,7 +601,7 @@ - - TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) -- tags=; \ -+ set x; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ -@@ -584,29 +609,34 @@ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ -- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ -+ shift; \ -+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ -- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ -- $$tags $$unique; \ -+ if test $$# -gt 0; then \ -+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ -+ "$$@" $$unique; \ -+ else \ -+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ -+ $$unique; \ -+ fi; \ - fi - ctags: CTAGS - CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) -- tags=; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ -- test -z "$(CTAGS_ARGS)$$tags$$unique" \ -+ test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ -- $$tags $$unique -+ $$unique - - GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ -- && cd $(top_srcdir) \ -- && gtags -i $(GTAGS_ARGS) $$here -+ && $(am__cd) $(top_srcdir) \ -+ && gtags -i $(GTAGS_ARGS) "$$here" - - distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -@@ -627,19 +657,23 @@ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ -+ if test -d "$(distdir)/$$file"; then \ -+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ -+ fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ -- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ -+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ -+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ -- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ -+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ -- test -f $(distdir)/$$file \ -- || cp -p $$d/$$file $(distdir)/$$file \ -+ test -f "$(distdir)/$$file" \ -+ || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - check-am: all-am - check: check-am --all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) -+all-am: Makefile $(LTLIBRARIES) $(HEADERS) - installdirs: - for dir in "$(DESTDIR)$(pygobjectdir)" "$(DESTDIR)$(pygobjectdir)" "$(DESTDIR)$(pygobjectdir)" "$(DESTDIR)$(pkgincludedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ -@@ -665,13 +699,14 @@ - - distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - - maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." - clean: clean-am - --clean-am: clean-generic clean-libtool clean-local clean-noinstPROGRAMS \ -+clean-am: clean-generic clean-libtool clean-local \ - clean-pygobjectLTLIBRARIES mostlyclean-am - - distclean: distclean-am -@@ -686,6 +721,8 @@ - - html: html-am - -+html-am: -+ - info: info-am - - info-am: -@@ -696,18 +733,28 @@ - - install-dvi: install-dvi-am - -+install-dvi-am: -+ - install-exec-am: - - install-html: install-html-am - -+install-html-am: -+ - install-info: install-info-am - -+install-info-am: -+ - install-man: - - install-pdf: install-pdf-am - -+install-pdf-am: -+ - install-ps: install-ps-am - -+install-ps-am: -+ - installcheck-am: - - maintainer-clean: maintainer-clean-am -@@ -735,36 +782,30 @@ - .MAKE: install-am install-strip - - .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ -- clean-libtool clean-local clean-noinstPROGRAMS \ -- clean-pygobjectLTLIBRARIES ctags distclean distclean-compile \ -- distclean-generic distclean-libtool distclean-tags distdir dvi \ -- dvi-am html html-am info info-am install install-am \ -- install-data install-data-am install-dvi install-dvi-am \ -- install-exec install-exec-am install-html install-html-am \ -- install-info install-info-am install-man \ -- install-nodist_pygobjectPYTHON install-pdf install-pdf-am \ -- install-pkgincludeHEADERS install-ps install-ps-am \ -- install-pygobjectLTLIBRARIES install-pygobjectPYTHON \ -- install-strip installcheck installcheck-am installdirs \ -- maintainer-clean maintainer-clean-generic mostlyclean \ -- mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ -- pdf pdf-am ps ps-am tags uninstall uninstall-am \ -- uninstall-nodist_pygobjectPYTHON uninstall-pkgincludeHEADERS \ -- uninstall-pygobjectLTLIBRARIES uninstall-pygobjectPYTHON -- -- --constants.py: generate-constants$(EXEEXT) constants.py.in -- rm -f constants.py -- cp $(srcdir)/constants.py.in constants.py -- chmod 644 constants.py -- $(top_builddir)/gobject/generate-constants$(EXEEXT) >> constants.py -- chmod 444 constants.py -+ clean-libtool clean-local clean-pygobjectLTLIBRARIES ctags \ -+ distclean distclean-compile distclean-generic \ -+ distclean-libtool distclean-tags distdir dvi dvi-am html \ -+ html-am info info-am install install-am install-data \ -+ install-data-am install-dvi install-dvi-am install-exec \ -+ install-exec-am install-html install-html-am install-info \ -+ install-info-am install-man install-nodist_pygobjectPYTHON \ -+ install-pdf install-pdf-am install-pkgincludeHEADERS \ -+ install-ps install-ps-am install-pygobjectLTLIBRARIES \ -+ install-pygobjectPYTHON install-strip installcheck \ -+ installcheck-am installdirs maintainer-clean \ -+ maintainer-clean-generic mostlyclean mostlyclean-compile \ -+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ -+ tags uninstall uninstall-am uninstall-nodist_pygobjectPYTHON \ -+ uninstall-pkgincludeHEADERS uninstall-pygobjectLTLIBRARIES \ -+ uninstall-pygobjectPYTHON -+ - - all: $(pygobject_LTLIBRARIES:.la=.so) - clean-local: - rm -f $(pygobject_LTLIBRARIES:.la=.so) - .la.so: - $(LN_S) .libs/$@ $@ || true -+ - # Tell versions [3.59,3.63) of GNU make to not export all variables. - # Otherwise a system limit (for SysV at least) may be exceeded. - .NOEXPORT: -diff -Naur pygobject-2.21.1/Makefile.in pygobject-2.21.1.patch/Makefile.in ---- pygobject-2.21.1/Makefile.in 2009-12-26 22:08:34.000000000 +0100 -+++ pygobject-2.21.1.patch/Makefile.in 2010-04-26 16:25:27.962863862 +0200 -@@ -1,8 +1,9 @@ --# Makefile.in generated by automake 1.10.2 from Makefile.am. -+# Makefile.in generated by automake 1.11.1 from Makefile.am. - # @configure_input@ - - # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, --# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -+# Inc. - # This Makefile.in is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. -@@ -17,8 +18,9 @@ - - VPATH = @srcdir@ - pkgdatadir = $(datadir)/@PACKAGE@ --pkglibdir = $(libdir)/@PACKAGE@ - pkgincludedir = $(includedir)/@PACKAGE@ -+pkglibdir = $(libdir)/@PACKAGE@ -+pkglibexecdir = $(libexecdir)/@PACKAGE@ - am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd - install_sh_DATA = $(install_sh) -c -m 644 - install_sh_PROGRAM = $(install_sh) -c -@@ -58,17 +60,31 @@ - CONFIG_HEADER = config.h - CONFIG_CLEAN_FILES = pygobject-2.0.pc pygobject-2.0-uninstalled.pc \ - docs/reference/entities.docbook docs/xsl/fixxref.py PKG-INFO -+CONFIG_CLEAN_VPATH_FILES = - am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; - am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; --am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -+am__install_max = 40 -+am__nobase_strip_setup = \ -+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -+am__nobase_strip = \ -+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -+am__nobase_list = $(am__nobase_strip_setup); \ -+ for p in $$list; do echo "$$p $$p"; done | \ -+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ -+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ -+ if (++n[$$2] == $(am__install_max)) \ -+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ -+ END { for (dir in files) print dir, files[dir] }' -+am__base_list = \ -+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ -+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' - am__installdirs = "$(DESTDIR)$(pkgpyexecdir)" "$(DESTDIR)$(pyexecdir)" \ - "$(DESTDIR)$(pkgpyexecdir)" "$(DESTDIR)$(pyexecdir)" \ - "$(DESTDIR)$(pkgconfigdir)" --pkgpyexecLTLIBRARIES_INSTALL = $(INSTALL) --pyexecLTLIBRARIES_INSTALL = $(INSTALL) - LTLIBRARIES = $(pkgpyexec_LTLIBRARIES) $(pyexec_LTLIBRARIES) - SOURCES = - DIST_SOURCES = -@@ -79,13 +95,13 @@ - install-pdf-recursive install-ps-recursive install-recursive \ - installcheck-recursive installdirs-recursive pdf-recursive \ - ps-recursive uninstall-recursive --pkgpyexecPYTHON_INSTALL = $(INSTALL_DATA) --pyexecPYTHON_INSTALL = $(INSTALL_DATA) - py_compile = $(top_srcdir)/py-compile --pkgconfigDATA_INSTALL = $(INSTALL_DATA) - DATA = $(pkgconfig_DATA) - RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ -+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ -+ distdir dist dist-all distcheck - ETAGS = etags - CTAGS = ctags - DIST_SUBDIRS = $(SUBDIRS) -@@ -93,9 +109,34 @@ - distdir = $(PACKAGE)-$(VERSION) - top_distdir = $(distdir) - am__remove_distdir = \ -- { test ! -d $(distdir) \ -- || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ -- && rm -fr $(distdir); }; } -+ { test ! -d "$(distdir)" \ -+ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ -+ && rm -fr "$(distdir)"; }; } -+am__relativize = \ -+ dir0=`pwd`; \ -+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ -+ sed_rest='s,^[^/]*/*,,'; \ -+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ -+ sed_butlast='s,/*[^/]*$$,,'; \ -+ while test -n "$$dir1"; do \ -+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ -+ if test "$$first" != "."; then \ -+ if test "$$first" = ".."; then \ -+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ -+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ -+ else \ -+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ -+ if test "$$first2" = "$$first"; then \ -+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ -+ else \ -+ dir2="../$$dir2"; \ -+ fi; \ -+ dir0="$$dir0"/"$$first"; \ -+ fi; \ -+ fi; \ -+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ -+ done; \ -+ reldir="$$dir2" - DIST_ARCHIVES = $(distdir).tar.gz - GZIP_ENV = --best - distuninstallcheck_listfiles = find . -type f -print -@@ -295,15 +336,15 @@ - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ -- echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \ -- cd $(srcdir) && $(AUTOMAKE) --gnu \ -+ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ -+ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ -- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ -- cd $(top_srcdir) && \ -- $(AUTOMAKE) --gnu Makefile -+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ -+ $(am__cd) $(top_srcdir) && \ -+ $(AUTOMAKE) --gnu Makefile - .PRECIOUS: Makefile - Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ -@@ -319,9 +360,10 @@ - $(SHELL) ./config.status --recheck - - $(top_srcdir)/configure: $(am__configure_deps) -- cd $(srcdir) && $(AUTOCONF) -+ $(am__cd) $(srcdir) && $(AUTOCONF) - $(ACLOCAL_M4): $(am__aclocal_m4_deps) -- cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -+ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -+$(am__aclocal_m4_deps): - - config.h: stamp-h1 - @if test ! -f $@; then \ -@@ -333,7 +375,7 @@ - @rm -f stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status config.h - $(srcdir)/config.h.in: $(am__configure_deps) -- cd $(top_srcdir) && $(AUTOHEADER) -+ ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f stamp-h1 - touch $@ - -@@ -352,20 +394,24 @@ - install-pkgpyexecLTLIBRARIES: $(pkgpyexec_LTLIBRARIES) - @$(NORMAL_INSTALL) - test -z "$(pkgpyexecdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgpyexecdir)" -- @list='$(pkgpyexec_LTLIBRARIES)'; for p in $$list; do \ -+ @list='$(pkgpyexec_LTLIBRARIES)'; test -n "$(pkgpyexecdir)" || list=; \ -+ list2=; for p in $$list; do \ - if test -f $$p; then \ -- f=$(am__strip_dir) \ -- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pkgpyexecLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(pkgpyexecdir)/$$f'"; \ -- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pkgpyexecLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(pkgpyexecdir)/$$f"; \ -+ list2="$$list2 $$p"; \ - else :; fi; \ -- done -+ done; \ -+ test -z "$$list2" || { \ -+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgpyexecdir)'"; \ -+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgpyexecdir)"; \ -+ } - - uninstall-pkgpyexecLTLIBRARIES: - @$(NORMAL_UNINSTALL) -- @list='$(pkgpyexec_LTLIBRARIES)'; for p in $$list; do \ -- p=$(am__strip_dir) \ -- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgpyexecdir)/$$p'"; \ -- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgpyexecdir)/$$p"; \ -+ @list='$(pkgpyexec_LTLIBRARIES)'; test -n "$(pkgpyexecdir)" || list=; \ -+ for p in $$list; do \ -+ $(am__strip_dir) \ -+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgpyexecdir)/$$f'"; \ -+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgpyexecdir)/$$f"; \ - done - - clean-pkgpyexecLTLIBRARIES: -@@ -379,20 +425,24 @@ - install-pyexecLTLIBRARIES: $(pyexec_LTLIBRARIES) - @$(NORMAL_INSTALL) - test -z "$(pyexecdir)" || $(MKDIR_P) "$(DESTDIR)$(pyexecdir)" -- @list='$(pyexec_LTLIBRARIES)'; for p in $$list; do \ -+ @list='$(pyexec_LTLIBRARIES)'; test -n "$(pyexecdir)" || list=; \ -+ list2=; for p in $$list; do \ - if test -f $$p; then \ -- f=$(am__strip_dir) \ -- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pyexecLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(pyexecdir)/$$f'"; \ -- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pyexecLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(pyexecdir)/$$f"; \ -+ list2="$$list2 $$p"; \ - else :; fi; \ -- done -+ done; \ -+ test -z "$$list2" || { \ -+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pyexecdir)'"; \ -+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pyexecdir)"; \ -+ } - - uninstall-pyexecLTLIBRARIES: - @$(NORMAL_UNINSTALL) -- @list='$(pyexec_LTLIBRARIES)'; for p in $$list; do \ -- p=$(am__strip_dir) \ -- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pyexecdir)/$$p'"; \ -- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pyexecdir)/$$p"; \ -+ @list='$(pyexec_LTLIBRARIES)'; test -n "$(pyexecdir)" || list=; \ -+ for p in $$list; do \ -+ $(am__strip_dir) \ -+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pyexecdir)/$$f'"; \ -+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pyexecdir)/$$f"; \ - done - - clean-pyexecLTLIBRARIES: -@@ -415,15 +465,20 @@ - install-pkgpyexecPYTHON: $(pkgpyexec_PYTHON) - @$(NORMAL_INSTALL) - test -z "$(pkgpyexecdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgpyexecdir)" -- @list='$(pkgpyexec_PYTHON)'; dlist=''; for p in $$list; do\ -+ @list='$(pkgpyexec_PYTHON)'; dlist=; list2=; test -n "$(pkgpyexecdir)" || list=; \ -+ for p in $$list; do \ - if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ - if test -f $$b$$p; then \ -- f=$(am__strip_dir) \ -+ $(am__strip_dir) \ - dlist="$$dlist $$f"; \ -- echo " $(pkgpyexecPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(pkgpyexecdir)/$$f'"; \ -- $(pkgpyexecPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(pkgpyexecdir)/$$f"; \ -+ list2="$$list2 $$b$$p"; \ - else :; fi; \ - done; \ -+ for file in $$list2; do echo $$file; done | $(am__base_list) | \ -+ while read files; do \ -+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgpyexecdir)'"; \ -+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgpyexecdir)" || exit $$?; \ -+ done || exit $$?; \ - if test -n "$$dlist"; then \ - if test -z "$(DESTDIR)"; then \ - PYTHON=$(PYTHON) $(py_compile) --basedir "$(pkgpyexecdir)" $$dlist; \ -@@ -434,24 +489,34 @@ - - uninstall-pkgpyexecPYTHON: - @$(NORMAL_UNINSTALL) -- @list='$(pkgpyexec_PYTHON)'; dlist=''; for p in $$list; do\ -- f=$(am__strip_dir) \ -- rm -f "$(DESTDIR)$(pkgpyexecdir)/$$f"; \ -- rm -f "$(DESTDIR)$(pkgpyexecdir)/$${f}c"; \ -- rm -f "$(DESTDIR)$(pkgpyexecdir)/$${f}o"; \ -- done -+ @list='$(pkgpyexec_PYTHON)'; test -n "$(pkgpyexecdir)" || list=; \ -+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ -+ test -n "$$files" || exit 0; \ -+ filesc=`echo "$$files" | sed 's|$$|c|'`; \ -+ fileso=`echo "$$files" | sed 's|$$|o|'`; \ -+ echo " ( cd '$(DESTDIR)$(pkgpyexecdir)' && rm -f" $$files ")"; \ -+ cd "$(DESTDIR)$(pkgpyexecdir)" && rm -f $$files || exit $$?; \ -+ echo " ( cd '$(DESTDIR)$(pkgpyexecdir)' && rm -f" $$filesc ")"; \ -+ cd "$(DESTDIR)$(pkgpyexecdir)" && rm -f $$filesc || exit $$?; \ -+ echo " ( cd '$(DESTDIR)$(pkgpyexecdir)' && rm -f" $$fileso ")"; \ -+ cd "$(DESTDIR)$(pkgpyexecdir)" && rm -f $$fileso - install-pyexecPYTHON: $(pyexec_PYTHON) - @$(NORMAL_INSTALL) - test -z "$(pyexecdir)" || $(MKDIR_P) "$(DESTDIR)$(pyexecdir)" -- @list='$(pyexec_PYTHON)'; dlist=''; for p in $$list; do\ -+ @list='$(pyexec_PYTHON)'; dlist=; list2=; test -n "$(pyexecdir)" || list=; \ -+ for p in $$list; do \ - if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ - if test -f $$b$$p; then \ -- f=$(am__strip_dir) \ -+ $(am__strip_dir) \ - dlist="$$dlist $$f"; \ -- echo " $(pyexecPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(pyexecdir)/$$f'"; \ -- $(pyexecPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(pyexecdir)/$$f"; \ -+ list2="$$list2 $$b$$p"; \ - else :; fi; \ - done; \ -+ for file in $$list2; do echo $$file; done | $(am__base_list) | \ -+ while read files; do \ -+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pyexecdir)'"; \ -+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pyexecdir)" || exit $$?; \ -+ done || exit $$?; \ - if test -n "$$dlist"; then \ - if test -z "$(DESTDIR)"; then \ - PYTHON=$(PYTHON) $(py_compile) --basedir "$(pyexecdir)" $$dlist; \ -@@ -462,29 +527,37 @@ - - uninstall-pyexecPYTHON: - @$(NORMAL_UNINSTALL) -- @list='$(pyexec_PYTHON)'; dlist=''; for p in $$list; do\ -- f=$(am__strip_dir) \ -- rm -f "$(DESTDIR)$(pyexecdir)/$$f"; \ -- rm -f "$(DESTDIR)$(pyexecdir)/$${f}c"; \ -- rm -f "$(DESTDIR)$(pyexecdir)/$${f}o"; \ -- done -+ @list='$(pyexec_PYTHON)'; test -n "$(pyexecdir)" || list=; \ -+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ -+ test -n "$$files" || exit 0; \ -+ filesc=`echo "$$files" | sed 's|$$|c|'`; \ -+ fileso=`echo "$$files" | sed 's|$$|o|'`; \ -+ echo " ( cd '$(DESTDIR)$(pyexecdir)' && rm -f" $$files ")"; \ -+ cd "$(DESTDIR)$(pyexecdir)" && rm -f $$files || exit $$?; \ -+ echo " ( cd '$(DESTDIR)$(pyexecdir)' && rm -f" $$filesc ")"; \ -+ cd "$(DESTDIR)$(pyexecdir)" && rm -f $$filesc || exit $$?; \ -+ echo " ( cd '$(DESTDIR)$(pyexecdir)' && rm -f" $$fileso ")"; \ -+ cd "$(DESTDIR)$(pyexecdir)" && rm -f $$fileso - install-pkgconfigDATA: $(pkgconfig_DATA) - @$(NORMAL_INSTALL) - test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" -- @list='$(pkgconfig_DATA)'; for p in $$list; do \ -+ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ -+ for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ -- f=$(am__strip_dir) \ -- echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ -- $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \ -+ echo "$$d$$p"; \ -+ done | $(am__base_list) | \ -+ while read files; do \ -+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ -+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ - done - - uninstall-pkgconfigDATA: - @$(NORMAL_UNINSTALL) -- @list='$(pkgconfig_DATA)'; for p in $$list; do \ -- f=$(am__strip_dir) \ -- echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ -- rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \ -- done -+ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ -+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ -+ test -n "$$files" || exit 0; \ -+ echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ -+ cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files - - # This directory's subdirectories are mostly independent; you can cd - # into them and run `make' without going through this Makefile. -@@ -493,7 +566,7 @@ - # (which will cause the Makefiles to be regenerated when you run `make'); - # (2) otherwise, pass the desired values on the `make' command line. - $(RECURSIVE_TARGETS): -- @failcom='exit 1'; \ -+ @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ -@@ -510,7 +583,7 @@ - else \ - local_target="$$target"; \ - fi; \ -- (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ -+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ -@@ -518,7 +591,7 @@ - fi; test -z "$$fail" - - $(RECURSIVE_CLEAN_TARGETS): -- @failcom='exit 1'; \ -+ @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ -@@ -544,16 +617,16 @@ - else \ - local_target="$$target"; \ - fi; \ -- (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ -+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" - tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ -- test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ -+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done - ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ -- test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ -+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - - ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) -@@ -568,7 +641,7 @@ - - TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) -- tags=; \ -+ set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ -@@ -580,7 +653,7 @@ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ -- tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ -+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ -@@ -589,36 +662,41 @@ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ -- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ -+ shift; \ -+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ -- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ -- $$tags $$unique; \ -+ if test $$# -gt 0; then \ -+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ -+ "$$@" $$unique; \ -+ else \ -+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ -+ $$unique; \ -+ fi; \ - fi - ctags: CTAGS - CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) -- tags=; \ - list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ -- test -z "$(CTAGS_ARGS)$$tags$$unique" \ -+ test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ -- $$tags $$unique -+ $$unique - - GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ -- && cd $(top_srcdir) \ -- && gtags -i $(GTAGS_ARGS) $$here -+ && $(am__cd) $(top_srcdir) \ -+ && gtags -i $(GTAGS_ARGS) "$$here" - - distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - - distdir: $(DISTFILES) - $(am__remove_distdir) -- test -d $(distdir) || mkdir $(distdir) -+ test -d "$(distdir)" || mkdir "$(distdir)" - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ -@@ -634,29 +712,44 @@ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ -+ if test -d "$(distdir)/$$file"; then \ -+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ -+ fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ -- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ -+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ -+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ -- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ -+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ -- test -f $(distdir)/$$file \ -- || cp -p $$d/$$file $(distdir)/$$file \ -+ test -f "$(distdir)/$$file" \ -+ || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -- list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ -+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ -- distdir=`$(am__cd) $(distdir) && pwd`; \ -- top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ -- (cd $$subdir && \ -+ fi; \ -+ done -+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ -+ if test "$$subdir" = .; then :; else \ -+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ -+ $(am__relativize); \ -+ new_distdir=$$reldir; \ -+ dir1=$$subdir; dir2="$(top_distdir)"; \ -+ $(am__relativize); \ -+ new_top_distdir=$$reldir; \ -+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ -+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ -+ ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ -- top_distdir="$$top_distdir" \ -- distdir="$$distdir/$$subdir" \ -+ top_distdir="$$new_top_distdir" \ -+ distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ -+ am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ -@@ -664,11 +757,13 @@ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$(top_distdir)" distdir="$(distdir)" \ - dist-hook -- -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ -+ -test -n "$(am__skip_mode_fix)" \ -+ || find "$(distdir)" -type d ! -perm -755 \ -+ -exec chmod u+rwx,go+rx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ -- || chmod -R a+r $(distdir) -+ || chmod -R a+r "$(distdir)" - dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) -@@ -681,6 +776,10 @@ - tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma - $(am__remove_distdir) - -+dist-xz: distdir -+ tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz -+ $(am__remove_distdir) -+ - dist-tarZ: distdir - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__remove_distdir) -@@ -704,15 +803,17 @@ - distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ -- GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ -+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ -- bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ -+ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lzma*) \ -- unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\ -+ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ -+ *.tar.xz*) \ -+ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ -- GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ -+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ - esac -@@ -720,9 +821,11 @@ - mkdir $(distdir)/_build - mkdir $(distdir)/_inst - chmod a-w $(distdir) -+ test -d $(distdir)/_build || exit 0; \ - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ -- && cd $(distdir)/_build \ -+ && am__cwd=`pwd` \ -+ && $(am__cd) $(distdir)/_build \ - && ../configure --srcdir=.. --prefix="$$dc_install_base" \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) \ -@@ -744,13 +847,15 @@ - && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && rm -rf $(DIST_ARCHIVES) \ -- && $(MAKE) $(AM_MAKEFLAGS) distcleancheck -+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ -+ && cd "$$am__cwd" \ -+ || exit 1 - $(am__remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' - distuninstallcheck: -- @cd $(distuninstallcheck_dir) \ -+ @$(am__cd) '$(distuninstallcheck_dir)' \ - && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ -@@ -796,6 +901,7 @@ - - distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - - maintainer-clean-generic: - @echo "This command is intended for maintainers to use" -@@ -817,6 +923,8 @@ - - html: html-recursive - -+html-am: -+ - info: info-recursive - - info-am: -@@ -825,20 +933,30 @@ - - install-dvi: install-dvi-recursive - -+install-dvi-am: -+ - install-exec-am: install-exec-local install-pkgpyexecLTLIBRARIES \ - install-pkgpyexecPYTHON install-pyexecLTLIBRARIES \ - install-pyexecPYTHON - - install-html: install-html-recursive - -+install-html-am: -+ - install-info: install-info-recursive - -+install-info-am: -+ - install-man: - - install-pdf: install-pdf-recursive - -+install-pdf-am: -+ - install-ps: install-ps-recursive - -+install-ps-am: -+ - installcheck-am: - - maintainer-clean: maintainer-clean-recursive -@@ -863,16 +981,16 @@ - uninstall-pkgpyexecLTLIBRARIES uninstall-pkgpyexecPYTHON \ - uninstall-pyexecLTLIBRARIES uninstall-pyexecPYTHON - --.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ -- install-strip -+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ -+ ctags-recursive install-am install-strip tags-recursive - - .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am am--refresh check check-am clean clean-generic \ - clean-libtool clean-pkgpyexecLTLIBRARIES \ - clean-pyexecLTLIBRARIES ctags ctags-recursive dist dist-all \ - dist-bzip2 dist-gzip dist-hook dist-lzma dist-shar dist-tarZ \ -- dist-zip distcheck distclean distclean-generic distclean-hdr \ -- distclean-libtool distclean-local distclean-tags \ -+ dist-xz dist-zip distcheck distclean distclean-generic \ -+ distclean-hdr distclean-libtool distclean-local distclean-tags \ - distcleancheck distdir distuninstallcheck dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-data-local install-dvi install-dvi-am \ -@@ -959,6 +1077,7 @@ - for f in $$files; do \ - if test -f $$f; then d=.; else d=$(srcdir); fi; \ - rm -f $(distdir)/$$f && cp $$d/$$f $(distdir) || exit 1; done -+ - # Tell versions [3.59,3.63) of GNU make to not export all variables. - # Otherwise a system limit (for SysV at least) may be exceeded. - .NOEXPORT: -diff -Naur pygobject-2.21.1/tests/Makefile.in pygobject-2.21.1.patch/tests/Makefile.in ---- pygobject-2.21.1/tests/Makefile.in 2009-12-26 22:08:34.000000000 +0100 -+++ pygobject-2.21.1.patch/tests/Makefile.in 2010-04-26 16:25:27.851863698 +0200 -@@ -1,8 +1,9 @@ --# Makefile.in generated by automake 1.10.2 from Makefile.am. -+# Makefile.in generated by automake 1.11.1 from Makefile.am. - # @configure_input@ - - # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, --# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -+# Inc. - # This Makefile.in is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. -@@ -16,8 +17,9 @@ - - VPATH = @srcdir@ - pkgdatadir = $(datadir)/@PACKAGE@ --pkglibdir = $(libdir)/@PACKAGE@ - pkgincludedir = $(includedir)/@PACKAGE@ -+pkglibdir = $(libdir)/@PACKAGE@ -+pkglibexecdir = $(libexecdir)/@PACKAGE@ - am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd - install_sh_DATA = $(install_sh) -c -m 644 - install_sh_PROGRAM = $(install_sh) -c -@@ -45,6 +47,7 @@ - mkinstalldirs = $(install_sh) -d - CONFIG_HEADER = $(top_builddir)/config.h - CONFIG_CLEAN_FILES = -+CONFIG_CLEAN_VPATH_FILES = - LTLIBRARIES = $(noinst_LTLIBRARIES) - am__DEPENDENCIES_1 = - testhelper_la_DEPENDENCIES = $(am__DEPENDENCIES_1) -@@ -57,6 +60,7 @@ - DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) - depcomp = $(SHELL) $(top_srcdir)/depcomp - am__depfiles_maybe = depfiles -+am__mv = mv -f - COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) - LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ -@@ -268,9 +272,9 @@ - exit 1;; \ - esac; \ - done; \ -- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \ -- cd $(top_srcdir) && \ -- $(AUTOMAKE) --gnu tests/Makefile -+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \ -+ $(am__cd) $(top_srcdir) && \ -+ $(AUTOMAKE) --gnu tests/Makefile - .PRECIOUS: Makefile - Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ -@@ -288,6 +292,7 @@ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - $(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -+$(am__aclocal_m4_deps): - - clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) -@@ -310,21 +315,21 @@ - - .c.o: - @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< --@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po - @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ - @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ - @am__fastdepCC_FALSE@ $(COMPILE) -c $< - - .c.obj: - @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` --@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po - @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ - @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ - @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - - .c.lo: - @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< --@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo - @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ - @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ - @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< -@@ -347,7 +352,7 @@ - - TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) -- tags=; \ -+ set x; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ -@@ -355,29 +360,34 @@ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ -- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ -+ shift; \ -+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ -- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ -- $$tags $$unique; \ -+ if test $$# -gt 0; then \ -+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ -+ "$$@" $$unique; \ -+ else \ -+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ -+ $$unique; \ -+ fi; \ - fi - ctags: CTAGS - CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) -- tags=; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ -- test -z "$(CTAGS_ARGS)$$tags$$unique" \ -+ test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ -- $$tags $$unique -+ $$unique - - GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ -- && cd $(top_srcdir) \ -- && gtags -i $(GTAGS_ARGS) $$here -+ && $(am__cd) $(top_srcdir) \ -+ && gtags -i $(GTAGS_ARGS) "$$here" - - distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -@@ -398,13 +408,17 @@ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ -+ if test -d "$(distdir)/$$file"; then \ -+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ -+ fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ -- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ -+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ -+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ -- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ -+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ -- test -f $(distdir)/$$file \ -- || cp -p $$d/$$file $(distdir)/$$file \ -+ test -f "$(distdir)/$$file" \ -+ || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -@@ -433,6 +447,7 @@ - - distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - - maintainer-clean-generic: - @echo "This command is intended for maintainers to use" -@@ -454,6 +469,8 @@ - - html: html-am - -+html-am: -+ - info: info-am - - info-am: -@@ -462,18 +479,28 @@ - - install-dvi: install-dvi-am - -+install-dvi-am: -+ - install-exec-am: - - install-html: install-html-am - -+install-html-am: -+ - install-info: install-info-am - -+install-info-am: -+ - install-man: - - install-pdf: install-pdf-am - -+install-pdf-am: -+ - install-ps: install-ps-am - -+install-ps-am: -+ - installcheck-am: - - maintainer-clean: maintainer-clean-am -@@ -496,7 +523,7 @@ - - uninstall-am: - --.MAKE: install-am install-strip -+.MAKE: check-am install-am install-strip - - .PHONY: CTAGS GTAGS all all-am check check-am check-local clean \ - clean-generic clean-libtool clean-local \ -@@ -538,6 +565,7 @@ - rm -f $(LTLIBRARIES:.la=.so) - .la.so: - $(LN_S) .libs/$@ $@ || true -+ - # Tell versions [3.59,3.63) of GNU make to not export all variables. - # Otherwise a system limit (for SysV at least) may be exceeded. - .NOEXPORT: diff --git a/packages/python/devel/pygobject/url b/packages/python/devel/pygobject/url index 5162f0b10c..2e3f5fce4e 100644 --- a/packages/python/devel/pygobject/url +++ b/packages/python/devel/pygobject/url @@ -1 +1 @@ -http://ftp.gnome.org/pub/GNOME/sources/pygobject/2.21/pygobject-2.21.1.tar.bz2 \ No newline at end of file +http://ftp.gnome.org/pub/GNOME/sources/pygobject/2.26/pygobject-2.26.0.tar.bz2 \ No newline at end of file From b9b6738cef016211ab5e8bde52fc458b3793fcfc Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 11:51:06 +0100 Subject: [PATCH 019/850] polkit: update to polkit-0.99 Signed-off-by: Stephan Raue --- .../polkit/patches/polkit-1-shadow.diff | 1967 ----------------- .../polkit/patches/polkit-1-shadow.readme | 2 - packages/security/polkit/url | 2 +- 3 files changed, 1 insertion(+), 1970 deletions(-) delete mode 100644 packages/security/polkit/patches/polkit-1-shadow.diff delete mode 100644 packages/security/polkit/patches/polkit-1-shadow.readme diff --git a/packages/security/polkit/patches/polkit-1-shadow.diff b/packages/security/polkit/patches/polkit-1-shadow.diff deleted file mode 100644 index 2b12441e0c..0000000000 --- a/packages/security/polkit/patches/polkit-1-shadow.diff +++ /dev/null @@ -1,1967 +0,0 @@ -diff -Naur polkit-0.96/src/polkitagent/Makefile.am polkit-0.96.patch/src/polkitagent/Makefile.am ---- polkit-0.96/src/polkitagent/Makefile.am 2009-09-13 19:31:29.000000000 +0200 -+++ polkit-0.96.patch/src/polkitagent/Makefile.am 2010-09-28 23:57:21.559875461 +0200 -@@ -68,8 +68,15 @@ - libexec_PROGRAMS = polkit-agent-helper-1 - - polkit_agent_helper_1_SOURCES = \ -- polkitagenthelper.c \ -- $(NULL) -+ polkitagenthelperprivate.c polkitagenthelperprivate.h -+ -+if POLKIT_AUTHFW_PAM -+polkit_agent_helper_1_SOURCES += polkitagenthelper-pam.c -+endif -+if POLKIT_AUTHFW_SHADOW -+polkit_agent_helper_1_SOURCES += polkitagenthelper-shadow.c -+endif -+polkit_agent_helper_1_SOURCES += $(NULL) - - polkit_agent_helper_1_CFLAGS = \ - -D_POLKIT_COMPILATION \ -diff -Naur polkit-0.96/src/polkitagent/Makefile.in polkit-0.96.patch/src/polkitagent/Makefile.in ---- polkit-0.96/src/polkitagent/Makefile.in 2010-01-15 19:53:03.000000000 +0100 -+++ polkit-0.96.patch/src/polkitagent/Makefile.in 2010-09-28 23:57:34.190000422 +0200 -@@ -37,6 +37,8 @@ - build_triplet = @build@ - host_triplet = @host@ - libexec_PROGRAMS = polkit-agent-helper-1$(EXEEXT) -+@POLKIT_AUTHFW_PAM_TRUE@am__append_1 = polkitagenthelper-pam.c -+@POLKIT_AUTHFW_SHADOW_TRUE@am__append_2 = polkitagenthelper-shadow.c - subdir = src/polkitagent - DIST_COMMON = $(libpolkit_agent_1include_HEADERS) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in -@@ -93,9 +95,14 @@ - $(libpolkit_agent_1_la_CFLAGS) $(CFLAGS) \ - $(libpolkit_agent_1_la_LDFLAGS) $(LDFLAGS) -o $@ - PROGRAMS = $(libexec_PROGRAMS) -+am__polkit_agent_helper_1_SOURCES_DIST = polkitagenthelperprivate.c \ -+ polkitagenthelperprivate.h polkitagenthelper-pam.c \ -+ polkitagenthelper-shadow.c -+@POLKIT_AUTHFW_PAM_TRUE@am__objects_4 = polkit_agent_helper_1-polkitagenthelper-pam.$(OBJEXT) -+@POLKIT_AUTHFW_SHADOW_TRUE@am__objects_5 = polkit_agent_helper_1-polkitagenthelper-shadow.$(OBJEXT) - am_polkit_agent_helper_1_OBJECTS = \ -- polkit_agent_helper_1-polkitagenthelper.$(OBJEXT) \ -- $(am__objects_1) -+ polkit_agent_helper_1-polkitagenthelperprivate.$(OBJEXT) \ -+ $(am__objects_4) $(am__objects_5) $(am__objects_1) - polkit_agent_helper_1_OBJECTS = $(am_polkit_agent_helper_1_OBJECTS) - polkit_agent_helper_1_DEPENDENCIES = $(am__DEPENDENCIES_1) \ - $(top_builddir)/src/polkit/libpolkit-gobject-1.la \ -@@ -133,7 +140,7 @@ - SOURCES = $(libpolkit_agent_1_la_SOURCES) \ - $(polkit_agent_helper_1_SOURCES) - DIST_SOURCES = $(libpolkit_agent_1_la_SOURCES) \ -- $(polkit_agent_helper_1_SOURCES) -+ $(am__polkit_agent_helper_1_SOURCES_DIST) - HEADERS = $(libpolkit_agent_1include_HEADERS) - ETAGS = etags - CTAGS = ctags -@@ -361,10 +368,9 @@ - $(NULL) - - libpolkit_agent_1_la_LDFLAGS = -export-symbols-regex '(^polkit_.*)' --polkit_agent_helper_1_SOURCES = \ -- polkitagenthelper.c \ -+polkit_agent_helper_1_SOURCES = polkitagenthelperprivate.c \ -+ polkitagenthelperprivate.h $(am__append_1) $(am__append_2) \ - $(NULL) -- - polkit_agent_helper_1_CFLAGS = \ - -D_POLKIT_COMPILATION \ - $(GLIB_CFLAGS) \ -@@ -500,7 +506,9 @@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpolkit_agent_1_la-polkitagentlistener.Plo@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpolkit_agent_1_la-polkitagentmarshal.Plo@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpolkit_agent_1_la-polkitagentsession.Plo@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/polkit_agent_helper_1-polkitagenthelper.Po@am__quote@ -+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/polkit_agent_helper_1-polkitagenthelper-pam.Po@am__quote@ -+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/polkit_agent_helper_1-polkitagenthelper-shadow.Po@am__quote@ -+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/polkit_agent_helper_1-polkitagenthelperprivate.Po@am__quote@ - - .c.o: - @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@@ -550,21 +558,53 @@ - @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ - @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpolkit_agent_1_la_CFLAGS) $(CFLAGS) -c -o libpolkit_agent_1_la-polkitagentlistener.lo `test -f 'polkitagentlistener.c' || echo '$(srcdir)/'`polkitagentlistener.c - --polkit_agent_helper_1-polkitagenthelper.o: polkitagenthelper.c --@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(polkit_agent_helper_1_CFLAGS) $(CFLAGS) -MT polkit_agent_helper_1-polkitagenthelper.o -MD -MP -MF $(DEPDIR)/polkit_agent_helper_1-polkitagenthelper.Tpo -c -o polkit_agent_helper_1-polkitagenthelper.o `test -f 'polkitagenthelper.c' || echo '$(srcdir)/'`polkitagenthelper.c --@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/polkit_agent_helper_1-polkitagenthelper.Tpo $(DEPDIR)/polkit_agent_helper_1-polkitagenthelper.Po -+polkit_agent_helper_1-polkitagenthelperprivate.o: polkitagenthelperprivate.c -+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(polkit_agent_helper_1_CFLAGS) $(CFLAGS) -MT polkit_agent_helper_1-polkitagenthelperprivate.o -MD -MP -MF $(DEPDIR)/polkit_agent_helper_1-polkitagenthelperprivate.Tpo -c -o polkit_agent_helper_1-polkitagenthelperprivate.o `test -f 'polkitagenthelperprivate.c' || echo '$(srcdir)/'`polkitagenthelperprivate.c -+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/polkit_agent_helper_1-polkitagenthelperprivate.Tpo $(DEPDIR)/polkit_agent_helper_1-polkitagenthelperprivate.Po -+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polkitagenthelperprivate.c' object='polkit_agent_helper_1-polkitagenthelperprivate.o' libtool=no @AMDEPBACKSLASH@ -+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(polkit_agent_helper_1_CFLAGS) $(CFLAGS) -c -o polkit_agent_helper_1-polkitagenthelperprivate.o `test -f 'polkitagenthelperprivate.c' || echo '$(srcdir)/'`polkitagenthelperprivate.c -+ -+polkit_agent_helper_1-polkitagenthelperprivate.obj: polkitagenthelperprivate.c -+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(polkit_agent_helper_1_CFLAGS) $(CFLAGS) -MT polkit_agent_helper_1-polkitagenthelperprivate.obj -MD -MP -MF $(DEPDIR)/polkit_agent_helper_1-polkitagenthelperprivate.Tpo -c -o polkit_agent_helper_1-polkitagenthelperprivate.obj `if test -f 'polkitagenthelperprivate.c'; then $(CYGPATH_W) 'polkitagenthelperprivate.c'; else $(CYGPATH_W) '$(srcdir)/polkitagenthelperprivate.c'; fi` -+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/polkit_agent_helper_1-polkitagenthelperprivate.Tpo $(DEPDIR)/polkit_agent_helper_1-polkitagenthelperprivate.Po -+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polkitagenthelperprivate.c' object='polkit_agent_helper_1-polkitagenthelperprivate.obj' libtool=no @AMDEPBACKSLASH@ -+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(polkit_agent_helper_1_CFLAGS) $(CFLAGS) -c -o polkit_agent_helper_1-polkitagenthelperprivate.obj `if test -f 'polkitagenthelperprivate.c'; then $(CYGPATH_W) 'polkitagenthelperprivate.c'; else $(CYGPATH_W) '$(srcdir)/polkitagenthelperprivate.c'; fi` -+ -+polkit_agent_helper_1-polkitagenthelper-pam.o: polkitagenthelper-pam.c -+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(polkit_agent_helper_1_CFLAGS) $(CFLAGS) -MT polkit_agent_helper_1-polkitagenthelper-pam.o -MD -MP -MF $(DEPDIR)/polkit_agent_helper_1-polkitagenthelper-pam.Tpo -c -o polkit_agent_helper_1-polkitagenthelper-pam.o `test -f 'polkitagenthelper-pam.c' || echo '$(srcdir)/'`polkitagenthelper-pam.c -+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/polkit_agent_helper_1-polkitagenthelper-pam.Tpo $(DEPDIR)/polkit_agent_helper_1-polkitagenthelper-pam.Po -+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polkitagenthelper-pam.c' object='polkit_agent_helper_1-polkitagenthelper-pam.o' libtool=no @AMDEPBACKSLASH@ -+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(polkit_agent_helper_1_CFLAGS) $(CFLAGS) -c -o polkit_agent_helper_1-polkitagenthelper-pam.o `test -f 'polkitagenthelper-pam.c' || echo '$(srcdir)/'`polkitagenthelper-pam.c -+ -+polkit_agent_helper_1-polkitagenthelper-pam.obj: polkitagenthelper-pam.c -+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(polkit_agent_helper_1_CFLAGS) $(CFLAGS) -MT polkit_agent_helper_1-polkitagenthelper-pam.obj -MD -MP -MF $(DEPDIR)/polkit_agent_helper_1-polkitagenthelper-pam.Tpo -c -o polkit_agent_helper_1-polkitagenthelper-pam.obj `if test -f 'polkitagenthelper-pam.c'; then $(CYGPATH_W) 'polkitagenthelper-pam.c'; else $(CYGPATH_W) '$(srcdir)/polkitagenthelper-pam.c'; fi` -+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/polkit_agent_helper_1-polkitagenthelper-pam.Tpo $(DEPDIR)/polkit_agent_helper_1-polkitagenthelper-pam.Po -+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polkitagenthelper-pam.c' object='polkit_agent_helper_1-polkitagenthelper-pam.obj' libtool=no @AMDEPBACKSLASH@ -+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(polkit_agent_helper_1_CFLAGS) $(CFLAGS) -c -o polkit_agent_helper_1-polkitagenthelper-pam.obj `if test -f 'polkitagenthelper-pam.c'; then $(CYGPATH_W) 'polkitagenthelper-pam.c'; else $(CYGPATH_W) '$(srcdir)/polkitagenthelper-pam.c'; fi` -+ -+polkit_agent_helper_1-polkitagenthelper-shadow.o: polkitagenthelper-shadow.c -+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(polkit_agent_helper_1_CFLAGS) $(CFLAGS) -MT polkit_agent_helper_1-polkitagenthelper-shadow.o -MD -MP -MF $(DEPDIR)/polkit_agent_helper_1-polkitagenthelper-shadow.Tpo -c -o polkit_agent_helper_1-polkitagenthelper-shadow.o `test -f 'polkitagenthelper-shadow.c' || echo '$(srcdir)/'`polkitagenthelper-shadow.c -+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/polkit_agent_helper_1-polkitagenthelper-shadow.Tpo $(DEPDIR)/polkit_agent_helper_1-polkitagenthelper-shadow.Po - @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polkitagenthelper.c' object='polkit_agent_helper_1-polkitagenthelper.o' libtool=no @AMDEPBACKSLASH@ -+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polkitagenthelper-shadow.c' object='polkit_agent_helper_1-polkitagenthelper-shadow.o' libtool=no @AMDEPBACKSLASH@ - @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(polkit_agent_helper_1_CFLAGS) $(CFLAGS) -c -o polkit_agent_helper_1-polkitagenthelper.o `test -f 'polkitagenthelper.c' || echo '$(srcdir)/'`polkitagenthelper.c -+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(polkit_agent_helper_1_CFLAGS) $(CFLAGS) -c -o polkit_agent_helper_1-polkitagenthelper-shadow.o `test -f 'polkitagenthelper-shadow.c' || echo '$(srcdir)/'`polkitagenthelper-shadow.c - --polkit_agent_helper_1-polkitagenthelper.obj: polkitagenthelper.c --@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(polkit_agent_helper_1_CFLAGS) $(CFLAGS) -MT polkit_agent_helper_1-polkitagenthelper.obj -MD -MP -MF $(DEPDIR)/polkit_agent_helper_1-polkitagenthelper.Tpo -c -o polkit_agent_helper_1-polkitagenthelper.obj `if test -f 'polkitagenthelper.c'; then $(CYGPATH_W) 'polkitagenthelper.c'; else $(CYGPATH_W) '$(srcdir)/polkitagenthelper.c'; fi` --@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/polkit_agent_helper_1-polkitagenthelper.Tpo $(DEPDIR)/polkit_agent_helper_1-polkitagenthelper.Po -+polkit_agent_helper_1-polkitagenthelper-shadow.obj: polkitagenthelper-shadow.c -+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(polkit_agent_helper_1_CFLAGS) $(CFLAGS) -MT polkit_agent_helper_1-polkitagenthelper-shadow.obj -MD -MP -MF $(DEPDIR)/polkit_agent_helper_1-polkitagenthelper-shadow.Tpo -c -o polkit_agent_helper_1-polkitagenthelper-shadow.obj `if test -f 'polkitagenthelper-shadow.c'; then $(CYGPATH_W) 'polkitagenthelper-shadow.c'; else $(CYGPATH_W) '$(srcdir)/polkitagenthelper-shadow.c'; fi` -+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/polkit_agent_helper_1-polkitagenthelper-shadow.Tpo $(DEPDIR)/polkit_agent_helper_1-polkitagenthelper-shadow.Po - @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polkitagenthelper.c' object='polkit_agent_helper_1-polkitagenthelper.obj' libtool=no @AMDEPBACKSLASH@ -+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polkitagenthelper-shadow.c' object='polkit_agent_helper_1-polkitagenthelper-shadow.obj' libtool=no @AMDEPBACKSLASH@ - @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(polkit_agent_helper_1_CFLAGS) $(CFLAGS) -c -o polkit_agent_helper_1-polkitagenthelper.obj `if test -f 'polkitagenthelper.c'; then $(CYGPATH_W) 'polkitagenthelper.c'; else $(CYGPATH_W) '$(srcdir)/polkitagenthelper.c'; fi` -+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(polkit_agent_helper_1_CFLAGS) $(CFLAGS) -c -o polkit_agent_helper_1-polkitagenthelper-shadow.obj `if test -f 'polkitagenthelper-shadow.c'; then $(CYGPATH_W) 'polkitagenthelper-shadow.c'; else $(CYGPATH_W) '$(srcdir)/polkitagenthelper-shadow.c'; fi` - - mostlyclean-libtool: - -rm -f *.lo -diff -Naur polkit-0.96/src/polkitagent/polkitagenthelper.c polkit-0.96.patch/src/polkitagent/polkitagenthelper.c ---- polkit-0.96/src/polkitagent/polkitagenthelper.c 2009-10-21 19:07:51.000000000 +0200 -+++ polkit-0.96.patch/src/polkitagent/polkitagenthelper.c 1970-01-01 01:00:00.000000000 +0100 -@@ -1,339 +0,0 @@ --/* -- * Copyright (C) 2008 Red Hat, Inc. -- * -- * This library is free software; you can redistribute it and/or -- * modify it under the terms of the GNU Lesser General Public -- * License as published by the Free Software Foundation; either -- * version 2 of the License, or (at your option) any later version. -- * -- * This library is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- * Lesser General Public License for more details. -- * -- * You should have received a copy of the GNU Lesser General -- * Public License along with this library; if not, write to the -- * Free Software Foundation, Inc., 59 Temple Place, Suite 330, -- * Boston, MA 02111-1307, USA. -- * -- * Author: David Zeuthen -- */ -- --#include "config.h" --#include --#include --#include --#include --#include --#include --#include --#include -- --#include -- --#ifdef HAVE_SOLARIS --# define LOG_AUTHPRIV (10<<3) --#endif -- --#ifndef HAVE_CLEARENV --extern char **environ; -- --static int --clearenv (void) --{ -- if (environ != NULL) -- environ[0] = NULL; -- return 0; --} --#endif -- --/* Development aid: define PAH_DEBUG to get debugging output. Do _NOT_ -- * enable this in production builds; it may leak passwords and other -- * sensitive information. -- */ --#undef PAH_DEBUG --// #define PAH_DEBUG -- --static gboolean send_dbus_message (const char *cookie, const char *user); -- --static int conversation_function (int n, const struct pam_message **msg, struct pam_response **resp, void *data); -- --int --main (int argc, char *argv[]) --{ -- int rc; -- const char *user_to_auth; -- const char *cookie; -- struct pam_conv pam_conversation; -- pam_handle_t *pam_h; -- const void *authed_user; -- -- rc = 0; -- pam_h = NULL; -- -- /* clear the entire environment to avoid attacks using with libraries honoring environment variables */ -- if (clearenv () != 0) -- goto error; -- -- /* set a minimal environment */ -- setenv ("PATH", "/usr/sbin:/usr/bin:/sbin:/bin", 1); -- -- /* check that we are setuid root */ -- if (geteuid () != 0) -- { -- fprintf (stderr, "polkit-agent-helper-1: needs to be setuid root\n"); -- goto error; -- } -- -- openlog ("polkit-agent-helper-1", LOG_CONS | LOG_PID, LOG_AUTHPRIV); -- -- /* check for correct invocation */ -- if (argc != 3) -- { -- syslog (LOG_NOTICE, "inappropriate use of helper, wrong number of arguments [uid=%d]", getuid ()); -- fprintf (stderr, "polkit-agent-helper-1: wrong number of arguments. This incident has been logged.\n"); -- goto error; -- } -- -- user_to_auth = argv[1]; -- cookie = argv[2]; -- -- if (getuid () != 0) -- { -- /* check we're running with a non-tty stdin */ -- if (isatty (STDIN_FILENO) != 0) -- { -- syslog (LOG_NOTICE, "inappropriate use of helper, stdin is a tty [uid=%d]", getuid ()); -- fprintf (stderr, "polkit-agent-helper-1: inappropriate use of helper, stdin is a tty. This incident has been logged.\n"); -- goto error; -- } -- } -- --#ifdef PAH_DEBUG -- fprintf (stderr, "polkit-agent-helper-1: user to auth is '%s'.\n", user_to_auth); --#endif /* PAH_DEBUG */ -- -- pam_conversation.conv = conversation_function; -- pam_conversation.appdata_ptr = NULL; -- -- /* start the pam stack */ -- rc = pam_start ("polkit-1", -- user_to_auth, -- &pam_conversation, -- &pam_h); -- if (rc != PAM_SUCCESS) -- { -- fprintf (stderr, "polkit-agent-helper-1: pam_start failed: %s\n", pam_strerror (pam_h, rc)); -- goto error; -- } -- -- /* set the requesting user */ -- rc = pam_set_item (pam_h, PAM_RUSER, user_to_auth); -- if (rc != PAM_SUCCESS) -- { -- fprintf (stderr, "polkit-agent-helper-1: pam_set_item failed: %s\n", pam_strerror (pam_h, rc)); -- goto error; -- } -- -- /* is user really user? */ -- rc = pam_authenticate (pam_h, 0); -- if (rc != PAM_SUCCESS) -- { -- fprintf (stderr, "polkit-agent-helper-1: pam_authenticated failed: %s\n", pam_strerror (pam_h, rc)); -- goto error; -- } -- -- /* permitted access? */ -- rc = pam_acct_mgmt (pam_h, 0); -- if (rc != PAM_SUCCESS) -- { -- fprintf (stderr, "polkit-agent-helper-1: pam_acct_mgmt failed: %s\n", pam_strerror (pam_h, rc)); -- goto error; -- } -- -- /* did we auth the right user? */ -- rc = pam_get_item (pam_h, PAM_USER, &authed_user); -- if (rc != PAM_SUCCESS) -- { -- fprintf (stderr, "polkit-agent-helper-1: pam_get_item failed: %s\n", pam_strerror (pam_h, rc)); -- goto error; -- } -- -- if (strcmp (authed_user, user_to_auth) != 0) -- { -- fprintf (stderr, "polkit-agent-helper-1: Tried to auth user '%s' but we got auth for user '%s' instead", -- user_to_auth, (const char *) authed_user); -- goto error; -- } -- --#ifdef PAH_DEBUG -- fprintf (stderr, "polkit-agent-helper-1: successfully authenticated user '%s'.\n", user_to_auth); --#endif /* PAH_DEBUG */ -- -- pam_end (pam_h, rc); -- pam_h = NULL; -- --#ifdef PAH_DEBUG -- fprintf (stderr, "polkit-agent-helper-1: sending D-Bus message to PolicyKit daemon\n"); --#endif /* PAH_DEBUG */ -- -- /* now send a D-Bus message to the PolicyKit daemon that -- * includes a) the cookie; and b) the user we authenticated -- */ -- if (!send_dbus_message (cookie, user_to_auth)) -- { --#ifdef PAH_DEBUG -- fprintf (stderr, "polkit-agent-helper-1: error sending D-Bus message to PolicyKit daemon\n"); --#endif /* PAH_DEBUG */ -- goto error; -- } -- --#ifdef PAH_DEBUG -- fprintf (stderr, "polkit-agent-helper-1: successfully sent D-Bus message to PolicyKit daemon\n"); --#endif /* PAH_DEBUG */ -- -- fprintf (stdout, "SUCCESS\n"); -- fflush (stdout); -- fflush (stderr); -- usleep (10 * 1000); /* since fflush(3) seems buggy */ -- return 0; -- --error: -- if (pam_h != NULL) -- pam_end (pam_h, rc); -- -- fprintf (stdout, "FAILURE\n"); -- fflush (stdout); -- fflush (stderr); -- usleep (10 * 1000); /* since fflush(3) seems buggy */ -- return 1; --} -- --static int --conversation_function (int n, const struct pam_message **msg, struct pam_response **resp, void *data) --{ -- struct pam_response *aresp; -- char buf[PAM_MAX_RESP_SIZE]; -- int i; -- -- data = data; -- if (n <= 0 || n > PAM_MAX_NUM_MSG) -- return PAM_CONV_ERR; -- -- if ((aresp = calloc(n, sizeof *aresp)) == NULL) -- return PAM_BUF_ERR; -- -- for (i = 0; i < n; ++i) -- { -- aresp[i].resp_retcode = 0; -- aresp[i].resp = NULL; -- switch (msg[i]->msg_style) -- { -- -- case PAM_PROMPT_ECHO_OFF: -- fprintf (stdout, "PAM_PROMPT_ECHO_OFF "); -- goto conv1; -- -- case PAM_PROMPT_ECHO_ON: -- fprintf (stdout, "PAM_PROMPT_ECHO_ON "); -- conv1: -- fputs (msg[i]->msg, stdout); -- if (strlen (msg[i]->msg) > 0 && msg[i]->msg[strlen (msg[i]->msg) - 1] != '\n') -- fputc ('\n', stdout); -- fflush (stdout); -- -- if (fgets (buf, sizeof buf, stdin) == NULL) -- goto error; -- -- if (strlen (buf) > 0 && -- buf[strlen (buf) - 1] == '\n') -- buf[strlen (buf) - 1] = '\0'; -- -- aresp[i].resp = strdup (buf); -- if (aresp[i].resp == NULL) -- goto error; -- break; -- -- case PAM_ERROR_MSG: -- fprintf (stdout, "PAM_ERROR_MSG "); -- goto conv2; -- -- case PAM_TEXT_INFO: -- fprintf (stdout, "PAM_TEXT_INFO "); -- conv2: -- fputs (msg[i]->msg, stdout); -- if (strlen (msg[i]->msg) > 0 && -- msg[i]->msg[strlen (msg[i]->msg) - 1] != '\n') -- fputc ('\n', stdout); -- fflush (stdout); -- break; -- -- default: -- goto error; -- } -- } -- -- *resp = aresp; -- return PAM_SUCCESS; -- --error: -- -- for (i = 0; i < n; ++i) -- { -- if (aresp[i].resp != NULL) { -- memset (aresp[i].resp, 0, strlen(aresp[i].resp)); -- free (aresp[i].resp); -- } -- } -- memset (aresp, 0, n * sizeof *aresp); -- *resp = NULL; -- return PAM_CONV_ERR; --} -- --static gboolean --send_dbus_message (const char *cookie, const char *user) --{ -- PolkitAuthority *authority; -- PolkitIdentity *identity; -- GError *error; -- gboolean ret; -- -- ret = FALSE; -- -- error = NULL; -- -- g_type_init (); -- -- authority = polkit_authority_get (); -- -- identity = polkit_unix_user_new_for_name (user, &error); -- if (identity == NULL) -- { -- g_printerr ("Error constructing identity: %s\n", error->message); -- g_error_free (error); -- goto out; -- } -- -- if (!polkit_authority_authentication_agent_response_sync (authority, -- cookie, -- identity, -- NULL, -- &error)) -- { -- g_printerr ("polkit-agent-helper-1: error response to PolicyKit daemon: %s\n", error->message); -- g_error_free (error); -- goto out; -- } -- -- ret = TRUE; -- -- out: -- -- if (identity != NULL) -- g_object_unref (identity); -- -- if (authority != NULL) -- g_object_unref (authority); -- -- return ret; --} -diff -Naur polkit-0.96/src/polkitagent/polkitagenthelper-pam.c polkit-0.96.patch/src/polkitagent/polkitagenthelper-pam.c ---- polkit-0.96/src/polkitagent/polkitagenthelper-pam.c 1970-01-01 01:00:00.000000000 +0100 -+++ polkit-0.96.patch/src/polkitagent/polkitagenthelper-pam.c 2010-09-28 23:57:21.559875461 +0200 -@@ -0,0 +1,264 @@ -+/* -+ * Copyright (C) 2008, 2010 Red Hat, Inc. -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General -+ * Public License along with this library; if not, write to the -+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330, -+ * Boston, MA 02111-1307, USA. -+ * -+ * Author: David Zeuthen -+ */ -+ -+#include "config.h" -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include "polkitagenthelperprivate.h" -+ -+static int conversation_function (int n, const struct pam_message **msg, struct pam_response **resp, void *data); -+ -+int -+main (int argc, char *argv[]) -+{ -+ int rc; -+ const char *user_to_auth; -+ const char *cookie; -+ struct pam_conv pam_conversation; -+ pam_handle_t *pam_h; -+ const void *authed_user; -+ -+ rc = 0; -+ pam_h = NULL; -+ -+ /* clear the entire environment to avoid attacks using with libraries honoring environment variables */ -+ if (clearenv () != 0) -+ goto error; -+ -+ /* set a minimal environment */ -+ setenv ("PATH", "/usr/sbin:/usr/bin:/sbin:/bin", 1); -+ -+ /* check that we are setuid root */ -+ if (geteuid () != 0) -+ { -+ fprintf (stderr, "polkit-agent-helper-1: needs to be setuid root\n"); -+ goto error; -+ } -+ -+ openlog ("polkit-agent-helper-1", LOG_CONS | LOG_PID, LOG_AUTHPRIV); -+ -+ /* check for correct invocation */ -+ if (argc != 3) -+ { -+ syslog (LOG_NOTICE, "inappropriate use of helper, wrong number of arguments [uid=%d]", getuid ()); -+ fprintf (stderr, "polkit-agent-helper-1: wrong number of arguments. This incident has been logged.\n"); -+ goto error; -+ } -+ -+ user_to_auth = argv[1]; -+ cookie = argv[2]; -+ -+ if (getuid () != 0) -+ { -+ /* check we're running with a non-tty stdin */ -+ if (isatty (STDIN_FILENO) != 0) -+ { -+ syslog (LOG_NOTICE, "inappropriate use of helper, stdin is a tty [uid=%d]", getuid ()); -+ fprintf (stderr, "polkit-agent-helper-1: inappropriate use of helper, stdin is a tty. This incident has been logged.\n"); -+ goto error; -+ } -+ } -+ -+#ifdef PAH_DEBUG -+ fprintf (stderr, "polkit-agent-helper-1: user to auth is '%s'.\n", user_to_auth); -+#endif /* PAH_DEBUG */ -+ -+ pam_conversation.conv = conversation_function; -+ pam_conversation.appdata_ptr = NULL; -+ -+ /* start the pam stack */ -+ rc = pam_start ("polkit-1", -+ user_to_auth, -+ &pam_conversation, -+ &pam_h); -+ if (rc != PAM_SUCCESS) -+ { -+ fprintf (stderr, "polkit-agent-helper-1: pam_start failed: %s\n", pam_strerror (pam_h, rc)); -+ goto error; -+ } -+ -+ /* set the requesting user */ -+ rc = pam_set_item (pam_h, PAM_RUSER, user_to_auth); -+ if (rc != PAM_SUCCESS) -+ { -+ fprintf (stderr, "polkit-agent-helper-1: pam_set_item failed: %s\n", pam_strerror (pam_h, rc)); -+ goto error; -+ } -+ -+ /* is user really user? */ -+ rc = pam_authenticate (pam_h, 0); -+ if (rc != PAM_SUCCESS) -+ { -+ fprintf (stderr, "polkit-agent-helper-1: pam_authenticated failed: %s\n", pam_strerror (pam_h, rc)); -+ goto error; -+ } -+ -+ /* permitted access? */ -+ rc = pam_acct_mgmt (pam_h, 0); -+ if (rc != PAM_SUCCESS) -+ { -+ fprintf (stderr, "polkit-agent-helper-1: pam_acct_mgmt failed: %s\n", pam_strerror (pam_h, rc)); -+ goto error; -+ } -+ -+ /* did we auth the right user? */ -+ rc = pam_get_item (pam_h, PAM_USER, &authed_user); -+ if (rc != PAM_SUCCESS) -+ { -+ fprintf (stderr, "polkit-agent-helper-1: pam_get_item failed: %s\n", pam_strerror (pam_h, rc)); -+ goto error; -+ } -+ -+ if (strcmp (authed_user, user_to_auth) != 0) -+ { -+ fprintf (stderr, "polkit-agent-helper-1: Tried to auth user '%s' but we got auth for user '%s' instead", -+ user_to_auth, (const char *) authed_user); -+ goto error; -+ } -+ -+#ifdef PAH_DEBUG -+ fprintf (stderr, "polkit-agent-helper-1: successfully authenticated user '%s'.\n", user_to_auth); -+#endif /* PAH_DEBUG */ -+ -+ pam_end (pam_h, rc); -+ pam_h = NULL; -+ -+#ifdef PAH_DEBUG -+ fprintf (stderr, "polkit-agent-helper-1: sending D-Bus message to PolicyKit daemon\n"); -+#endif /* PAH_DEBUG */ -+ -+ /* now send a D-Bus message to the PolicyKit daemon that -+ * includes a) the cookie; and b) the user we authenticated -+ */ -+ if (!send_dbus_message (cookie, user_to_auth)) -+ { -+#ifdef PAH_DEBUG -+ fprintf (stderr, "polkit-agent-helper-1: error sending D-Bus message to PolicyKit daemon\n"); -+#endif /* PAH_DEBUG */ -+ goto error; -+ } -+ -+#ifdef PAH_DEBUG -+ fprintf (stderr, "polkit-agent-helper-1: successfully sent D-Bus message to PolicyKit daemon\n"); -+#endif /* PAH_DEBUG */ -+ -+ fprintf (stdout, "SUCCESS\n"); -+ flush_and_wait(); -+ return 0; -+ -+error: -+ if (pam_h != NULL) -+ pam_end (pam_h, rc); -+ -+ fprintf (stdout, "FAILURE\n"); -+ flush_and_wait(); -+ return 1; -+} -+ -+static int -+conversation_function (int n, const struct pam_message **msg, struct pam_response **resp, void *data) -+{ -+ struct pam_response *aresp; -+ char buf[PAM_MAX_RESP_SIZE]; -+ int i; -+ -+ data = data; -+ if (n <= 0 || n > PAM_MAX_NUM_MSG) -+ return PAM_CONV_ERR; -+ -+ if ((aresp = calloc(n, sizeof *aresp)) == NULL) -+ return PAM_BUF_ERR; -+ -+ for (i = 0; i < n; ++i) -+ { -+ aresp[i].resp_retcode = 0; -+ aresp[i].resp = NULL; -+ switch (msg[i]->msg_style) -+ { -+ -+ case PAM_PROMPT_ECHO_OFF: -+ fprintf (stdout, "PAM_PROMPT_ECHO_OFF "); -+ goto conv1; -+ -+ case PAM_PROMPT_ECHO_ON: -+ fprintf (stdout, "PAM_PROMPT_ECHO_ON "); -+ conv1: -+ fputs (msg[i]->msg, stdout); -+ if (strlen (msg[i]->msg) > 0 && msg[i]->msg[strlen (msg[i]->msg) - 1] != '\n') -+ fputc ('\n', stdout); -+ fflush (stdout); -+ -+ if (fgets (buf, sizeof buf, stdin) == NULL) -+ goto error; -+ -+ if (strlen (buf) > 0 && -+ buf[strlen (buf) - 1] == '\n') -+ buf[strlen (buf) - 1] = '\0'; -+ -+ aresp[i].resp = strdup (buf); -+ if (aresp[i].resp == NULL) -+ goto error; -+ break; -+ -+ case PAM_ERROR_MSG: -+ fprintf (stdout, "PAM_ERROR_MSG "); -+ goto conv2; -+ -+ case PAM_TEXT_INFO: -+ fprintf (stdout, "PAM_TEXT_INFO "); -+ conv2: -+ fputs (msg[i]->msg, stdout); -+ if (strlen (msg[i]->msg) > 0 && -+ msg[i]->msg[strlen (msg[i]->msg) - 1] != '\n') -+ fputc ('\n', stdout); -+ fflush (stdout); -+ break; -+ -+ default: -+ goto error; -+ } -+ } -+ -+ *resp = aresp; -+ return PAM_SUCCESS; -+ -+error: -+ -+ for (i = 0; i < n; ++i) -+ { -+ if (aresp[i].resp != NULL) { -+ memset (aresp[i].resp, 0, strlen(aresp[i].resp)); -+ free (aresp[i].resp); -+ } -+ } -+ memset (aresp, 0, n * sizeof *aresp); -+ *resp = NULL; -+ return PAM_CONV_ERR; -+} -+ -diff -Naur polkit-0.96/src/polkitagent/polkitagenthelperprivate.c polkit-0.96.patch/src/polkitagent/polkitagenthelperprivate.c ---- polkit-0.96/src/polkitagent/polkitagenthelperprivate.c 1970-01-01 01:00:00.000000000 +0100 -+++ polkit-0.96.patch/src/polkitagent/polkitagenthelperprivate.c 2010-09-28 23:57:22.074877607 +0200 -@@ -0,0 +1,97 @@ -+/* -+ * Copyright (C) 2009-2010 Red Hat, Inc. -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General -+ * Public License along with this library; if not, write to the -+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ * Boston, MA 02110-1301, USA. -+ * -+ * Authors: David Zeuthen , -+ * Andrew Psaltis -+ */ -+ -+#include "polkitagenthelperprivate.h" -+#include -+ -+#ifndef HAVE_CLEARENV -+extern char **environ; -+ -+static int -+clearenv (void) -+{ -+ if (environ != NULL) -+ environ[0] = NULL; -+ return 0; -+} -+#endif -+ -+ -+gboolean -+send_dbus_message (const char *cookie, const char *user) -+{ -+ PolkitAuthority *authority; -+ PolkitIdentity *identity; -+ GError *error; -+ gboolean ret; -+ -+ ret = FALSE; -+ -+ error = NULL; -+ -+ g_type_init (); -+ -+ authority = polkit_authority_get (); -+ -+ identity = polkit_unix_user_new_for_name (user, &error); -+ if (identity == NULL) -+ { -+ g_printerr ("Error constructing identity: %s\n", error->message); -+ g_error_free (error); -+ goto out; -+ } -+ -+ if (!polkit_authority_authentication_agent_response_sync (authority, -+ cookie, -+ identity, -+ NULL, -+ &error)) -+ { -+ g_printerr ("polkit-agent-helper-1: error response to PolicyKit daemon: %s\n", error->message); -+ g_error_free (error); -+ goto out; -+ } -+ -+ ret = TRUE; -+ -+ out: -+ -+ if (identity != NULL) -+ g_object_unref (identity); -+ -+ if (authority != NULL) -+ g_object_unref (authority); -+ -+ return ret; -+} -+ -+/* fflush(3) stdin and stdout and wait a little bit. -+ * This replaces the three-line commands at the bottom of -+ * polkit-agent-helper-1's main() function. -+ */ -+void -+flush_and_wait () -+{ -+ fflush (stdout); -+ fflush (stderr); -+ usleep (10 * 1000); /* since fflush(3) seems buggy */ -+} -diff -Naur polkit-0.96/src/polkitagent/polkitagenthelperprivate.h polkit-0.96.patch/src/polkitagent/polkitagenthelperprivate.h ---- polkit-0.96/src/polkitagent/polkitagenthelperprivate.h 1970-01-01 01:00:00.000000000 +0100 -+++ polkit-0.96.patch/src/polkitagent/polkitagenthelperprivate.h 2010-09-28 23:57:22.075877241 +0200 -@@ -0,0 +1,42 @@ -+/* -+ * Copyright (C) 2009-2010 Red Hat, Inc. -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General -+ * Public License along with this library; if not, write to the -+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ * Boston, MA 02110-1301, USA. -+ * -+ * Authors: David Zeuthen , -+ * Andrew Psaltis -+ */ -+#ifndef __POLKIT_AGENT_HELPER_PRIVATE_H -+#define __POLKIT_AGENT_HELPER_PRIVATE_H -+ -+#include -+ -+/* Development aid: define PAH_DEBUG to get debugging output. Do _NOT_ -+ * enable this in production builds; it may leak passwords and other -+ * sensitive information. -+ */ -+#undef PAH_DEBUG -+// #define PAH_DEBUG -+ -+#ifdef HAVE_SOLARIS -+# define LOG_AUTHPRIV (10<<3) -+#endif -+ -+gboolean send_dbus_message (const char *cookie, const char *user); -+ -+void flush_and_wait (); -+ -+#endif /* __POLKIT_AGENT_HELPER_PRIVATE_H */ -diff -Naur polkit-0.96/src/polkitagent/polkitagenthelper-shadow.c polkit-0.96.patch/src/polkitagent/polkitagenthelper-shadow.c ---- polkit-0.96/src/polkitagent/polkitagenthelper-shadow.c 1970-01-01 01:00:00.000000000 +0100 -+++ polkit-0.96.patch/src/polkitagent/polkitagenthelper-shadow.c 2010-09-28 23:57:22.071876889 +0200 -@@ -0,0 +1,189 @@ -+/* -+ * Copyright (C) 2008 Red Hat, Inc. -+ * Copyright (C) 2009-2010 Andrew Psaltis -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General -+ * Public License along with this library; if not, write to the -+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330, -+ * Boston, MA 02111-1307, USA. -+ * -+ * Authors: Andrew Psaltis , based on -+ * polkitagenthelper.c which was written by -+ * David Zeuthen -+ */ -+ -+#include "config.h" -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include "polkitagenthelperprivate.h" -+ -+ -+extern char *crypt (); -+static int shadow_authenticate (struct spwd *shadow); -+ -+int -+main (int argc, char *argv[]) -+{ -+ struct spwd *shadow; -+ const char *user_to_auth; -+ const char *cookie; -+ time_t tm; -+ -+ /* clear the entire environment to avoid attacks with -+ libraries honoring environment variables */ -+ if (clearenv () != 0) -+ goto error; -+ -+ /* set a minimal environment */ -+ setenv ("PATH", "/usr/sbin:/usr/bin:/sbin:/bin", 1); -+ -+ /* check that we are setuid root */ -+ if (geteuid () != 0) -+ { -+ fprintf (stderr, "polkit-agent-helper-1: needs to be setuid root\n"); -+ goto error; -+ } -+ -+ openlog ("polkit-agent-helper-1", LOG_CONS | LOG_PID, LOG_AUTHPRIV); -+ -+ /* check for correct invocation */ -+ if (argc != 3) -+ { -+ syslog (LOG_NOTICE, "inappropriate use of helper, wrong number of arguments [uid=%d]", getuid ()); -+ fprintf (stderr, "polkit-agent-helper-1: wrong number of arguments. This incident has been logged.\n"); -+ goto error; -+ } -+ -+ if (getuid () != 0) -+ { -+ /* check we're running with a non-tty stdin */ -+ if (isatty (STDIN_FILENO) != 0) -+ { -+ syslog (LOG_NOTICE, "inappropriate use of helper, stdin is a tty [uid=%d]", getuid ()); -+ fprintf (stderr, "polkit-agent-helper-1: inappropriate use of helper, stdin is a tty. This incident has been logged.\n"); -+ goto error; -+ } -+ } -+ -+ user_to_auth = argv[1]; -+ cookie = argv[2]; -+ -+#ifdef PAH_DEBUG -+ fprintf (stderr, "polkit-agent-helper-1: user to auth is '%s'.\n", user_to_auth); -+#endif /* PAH_DEBUG */ -+ -+ /* Ask shadow about the user requesting authentication */ -+ if ((shadow = getspnam (user_to_auth)) == NULL) -+ { -+ syslog (LOG_NOTICE, "shadow file data information request for user %s [uid=%d] failed", user_to_auth, getuid()); -+ fprintf(stderr, "polkit-agent-helper-1: could not get shadow information for%.100s", user_to_auth); -+ goto error; -+ } -+ -+ /* Check the user's identity */ -+ if(!shadow_authenticate (shadow)) -+ { -+ syslog (LOG_NOTICE, "authentication failure [uid=%d] trying to authenticate '%s'", getuid (), user_to_auth); -+ fprintf (stderr, "polkit-agent-helper-1: authentication failure. This incident has been logged.\n"); -+ goto error; -+ } -+ -+ /* Check whether the user's password has expired */ -+ time(&tm); -+ if( shadow->sp_max >= 0 && (shadow->sp_lstchg + shadow->sp_max) * 60 * 60 * 24 <= tm) -+ { -+ syslog (LOG_NOTICE, "password expired for user '%s' [uid=%d] trying to authenticate", user_to_auth, getuid () ); -+ fprintf (stderr, "polkit-agent-helper-1: authorization failure. This incident has been logged.\n"); -+ goto error; -+ } -+ -+ /* Check whether the user's password has aged (and account expired along -+ * with it) -+ */ -+ if( shadow->sp_inact >= 0 && (shadow->sp_lstchg + shadow->sp_max + shadow->sp_inact) * 60 * 60 * 24 <= tm) -+ { -+ syslog (LOG_NOTICE, "password aged for user '%s' [uid=%d] trying to authenticate", user_to_auth, getuid () ); -+ fprintf (stderr, "polkit-agent-helper-1: authorization failure. This incident has been logged.\n"); -+ goto error; -+ } -+ -+ /* Check whether the user's account has expired */ -+ if(shadow->sp_expire >= 0 && shadow->sp_expire * 60 * 60 * 24 <= tm) -+ { -+ syslog (LOG_NOTICE, "account expired for user '%s' [uid=%d] trying to authenticate", user_to_auth, getuid () ); -+ fprintf (stderr, "polkit-agent-helper-1: authorization failure. This incident has been logged.\n"); -+ goto error; -+ } -+ -+#ifdef PAH_DEBUG -+ fprintf (stderr, "polkit-agent-helper-1: sending D-Bus message to PolicyKit daemon\n"); -+#endif /* PAH_DEBUG */ -+ -+ /* now send a D-Bus message to the PolicyKit daemon that -+ * includes a) the cookie; and b) the user we authenticated -+ */ -+ if (!send_dbus_message (cookie, user_to_auth)) -+ { -+#ifdef PAH_DEBUG -+ fprintf (stderr, "polkit-agent-helper-1: error sending D-Bus message to PolicyKit daemon\n"); -+#endif /* PAH_DEBUG */ -+ goto error; -+ } -+ -+#ifdef PAH_DEBUG -+ fprintf (stderr, "polkit-agent-helper-1: successfully sent D-Bus message to PolicyKit daemon\n"); -+#endif /* PAH_DEBUG */ -+ -+ fprintf (stdout, "SUCCESS\n"); -+ flush_and_wait(); -+ return 0; -+ -+error: -+ fprintf (stdout, "FAILURE\n"); -+ flush_and_wait(); -+ return 1; -+} -+ -+static int -+shadow_authenticate(struct spwd *shadow) -+{ -+ /* Speak PAM to the daemon, thanks to David Zeuthen for the idea. */ -+ char passwd[512]; -+ fprintf(stdout, "PAM_PROMPT_ECHO_OFF password:\n"); -+ fflush(stdout); -+ usleep (10 * 1000); /* since fflush(3) seems buggy */ -+ -+ if (fgets (passwd, sizeof (passwd), stdin) == NULL) -+ goto error; -+ -+ if (strlen (passwd) > 0 && passwd[strlen (passwd) - 1] == '\n') -+ passwd[strlen (passwd) - 1] = '\0'; -+ -+ if (strcmp (shadow->sp_pwdp, crypt (passwd, shadow->sp_pwdp)) != 0) -+ goto error; -+ return 1; -+error: -+ return 0; -+} -+ -diff -Naur polkit-0.96/src/programs/pkexec.c polkit-0.96.patch/src/programs/pkexec.c ---- polkit-0.96/src/programs/pkexec.c 2009-12-15 20:04:15.000000000 +0100 -+++ polkit-0.96.patch/src/programs/pkexec.c 2010-09-28 23:57:22.077877347 +0200 -@@ -34,7 +34,11 @@ - #include - #include - #include -+ -+#ifdef POLKIT_AUTHFW_PAM - #include -+#endif /* POLKIT_AUTHFW_PAM */ -+ - #include - #include - -@@ -115,6 +119,7 @@ - - /* ---------------------------------------------------------------------------------------------------- */ - -+#ifdef POLKIT_AUTHFW_PAM - static int - pam_conversation_function (int n, - const struct pam_message **msg, -@@ -167,6 +172,7 @@ - pam_end (pam_h, rc); - return ret; - } -+#endif /* POLKIT_AUTHFW_PAM */ - - /* ---------------------------------------------------------------------------------------------------- */ - -@@ -742,11 +748,13 @@ - * TODO: The question here is whether we should clear the limits before applying them? - * As evident above, neither su(1) (and, for that matter, nor sudo(8)) does this. - */ -+#ifdef POLKIT_AUTHW_PAM - if (!open_session (pw->pw_name)) - { - goto out; - } -- -+#endif /* POLKIT_AUTHFW_PAM */ -+ - /* become the user */ - if (setgroups (0, NULL) != 0) - { -diff -Naur polkit-0.96/src/programs/pkexec.c.orig polkit-0.96.patch/src/programs/pkexec.c.orig ---- polkit-0.96/src/programs/pkexec.c.orig 1970-01-01 01:00:00.000000000 +0100 -+++ polkit-0.96.patch/src/programs/pkexec.c.orig 2009-12-15 20:04:15.000000000 +0100 -@@ -0,0 +1,819 @@ -+/* -+ * Copyright (C) 2008 Red Hat, Inc. -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General -+ * Public License along with this library; if not, write to the -+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330, -+ * Boston, MA 02111-1307, USA. -+ * -+ * Author: David Zeuthen -+ */ -+ -+#ifdef HAVE_CONFIG_H -+# include "config.h" -+#endif -+ -+#define _GNU_SOURCE -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+ -+static gchar *original_user_name = NULL; -+static gchar *original_cwd = NULL; -+static gchar *command_line = NULL; -+static struct passwd *pw; -+ -+#ifndef HAVE_CLEARENV -+extern char **environ; -+ -+static int -+clearenv (void) -+{ -+ if (environ != NULL) -+ environ[0] = NULL; -+ return 0; -+} -+#endif -+ -+static void -+usage (int argc, char *argv[]) -+{ -+ g_printerr ("pkexec --version |\n" -+ " --help |\n" -+ " [--user username] PROGRAM [ARGUMENTS...]\n" -+ "\n" -+ "See the pkexec manual page for more details.\n"); -+} -+ -+/* ---------------------------------------------------------------------------------------------------- */ -+ -+static void -+log_message (gint level, -+ gboolean print_to_stderr, -+ const gchar *format, -+ ...) -+{ -+ static gboolean is_log_open = FALSE; -+ va_list var_args; -+ gchar *s; -+ const gchar *tty; -+ -+ if (!is_log_open) -+ { -+ openlog ("pkexec", -+ LOG_PID, -+ LOG_AUTHPRIV); /* security/authorization messages (private) */ -+ is_log_open = TRUE; -+ } -+ -+ va_start (var_args, format); -+ s = g_strdup_vprintf (format, var_args); -+ va_end (var_args); -+ -+ tty = ttyname (0); -+ if (tty == NULL) -+ tty = "unknown"; -+ -+ /* first complain to syslog */ -+ syslog (level, -+ "%s: %s [USER=%s] [TTY=%s] [CWD=%s] [COMMAND=%s]", -+ original_user_name, -+ s, -+ pw->pw_name, -+ tty, -+ original_cwd, -+ command_line); -+ -+ /* and then on stderr */ -+ if (print_to_stderr) -+ g_printerr ("%s\n", s); -+ -+ g_free (s); -+} -+ -+/* ---------------------------------------------------------------------------------------------------- */ -+ -+static int -+pam_conversation_function (int n, -+ const struct pam_message **msg, -+ struct pam_response **resp, -+ void *data) -+{ -+ g_assert_not_reached (); -+ return PAM_CONV_ERR; -+} -+ -+static gboolean -+open_session (const gchar *user_to_auth) -+{ -+ gboolean ret; -+ gint rc; -+ pam_handle_t *pam_h; -+ struct pam_conv conversation; -+ -+ ret = FALSE; -+ -+ pam_h = NULL; -+ -+ conversation.conv = pam_conversation_function; -+ conversation.appdata_ptr = NULL; -+ -+ /* start the pam stack */ -+ rc = pam_start ("polkit-1", -+ user_to_auth, -+ &conversation, -+ &pam_h); -+ if (rc != PAM_SUCCESS) -+ { -+ g_printerr ("pam_start() failed: %s\n", pam_strerror (pam_h, rc)); -+ goto out; -+ } -+ -+ /* open a session */ -+ rc = pam_open_session (pam_h, -+ 0); /* flags */ -+ if (rc != PAM_SUCCESS) -+ { -+ g_printerr ("pam_open_session() failed: %s\n", pam_strerror (pam_h, rc)); -+ goto out; -+ } -+ -+ ret = TRUE; -+ -+out: -+ if (pam_h != NULL) -+ pam_end (pam_h, rc); -+ return ret; -+} -+ -+/* ---------------------------------------------------------------------------------------------------- */ -+ -+typedef gboolean (*FdCallback) (gint fd, gpointer user_data); -+ -+static gboolean -+set_close_on_exec (gint fd, -+ gpointer user_data) -+{ -+ gint fd_bottom; -+ -+ fd_bottom = GPOINTER_TO_INT (user_data); -+ -+ if (fd >= fd_bottom) -+ { -+ if (fcntl (fd, F_SETFD, FD_CLOEXEC) != 0 && errno != EBADF) -+ { -+ return FALSE; -+ } -+ } -+ -+ return TRUE; -+} -+ -+static gboolean -+fdwalk (FdCallback callback, -+ gpointer user_data) -+{ -+ gint fd; -+ gint max_fd; -+ -+ g_return_val_if_fail (callback != NULL, FALSE); -+ -+ max_fd = sysconf (_SC_OPEN_MAX); -+ for (fd = 0; fd < max_fd; fd++) -+ { -+ if (!callback (fd, user_data)) -+ return FALSE; -+ } -+ -+ return TRUE; -+} -+ -+/* ---------------------------------------------------------------------------------------------------- */ -+ -+static gchar * -+find_action_for_path (PolkitAuthority *authority, -+ const gchar *path) -+{ -+ GList *l; -+ GList *actions; -+ gchar *action_id; -+ GError *error; -+ -+ actions = NULL; -+ action_id = NULL; -+ error = NULL; -+ -+ actions = polkit_authority_enumerate_actions_sync (authority, -+ NULL, -+ &error); -+ if (actions == NULL) -+ { -+ g_warning ("Error enumerating actions: %s", error->message); -+ g_error_free (error); -+ goto out; -+ } -+ -+ for (l = actions; l != NULL; l = l->next) -+ { -+ PolkitActionDescription *action_desc = POLKIT_ACTION_DESCRIPTION (l->data); -+ const gchar *path_for_action; -+ -+ path_for_action = polkit_action_description_get_annotation (action_desc, "org.freedesktop.policykit.exec.path"); -+ if (path_for_action == NULL) -+ continue; -+ -+ if (g_strcmp0 (path_for_action, path) == 0) -+ { -+ action_id = g_strdup (polkit_action_description_get_action_id (action_desc)); -+ goto out; -+ } -+ } -+ -+ out: -+ g_list_foreach (actions, (GFunc) g_object_unref, NULL); -+ g_list_free (actions); -+ -+ /* Fall back to org.freedesktop.policykit.exec */ -+ -+ if (action_id == NULL) -+ action_id = g_strdup ("org.freedesktop.policykit.exec"); -+ -+ return action_id; -+} -+ -+/* ---------------------------------------------------------------------------------------------------- */ -+ -+static gboolean -+is_valid_shell (const gchar *shell) -+{ -+ gboolean ret; -+ gchar *contents; -+ gchar **shells; -+ GError *error; -+ guint n; -+ -+ ret = FALSE; -+ -+ contents = NULL; -+ shells = NULL; -+ -+ error = NULL; -+ if (!g_file_get_contents ("/etc/shells", -+ &contents, -+ NULL, /* gsize *length */ -+ &error)) -+ { -+ g_printerr ("Error getting contents of /etc/shells: %s\n", error->message); -+ g_error_free (error); -+ goto out; -+ } -+ -+ shells = g_strsplit (contents, "\n", 0); -+ for (n = 0; shells != NULL && shells[n] != NULL; n++) -+ { -+ if (g_strcmp0 (shell, shells[n]) == 0) -+ { -+ ret = TRUE; -+ goto out; -+ } -+ } -+ -+ out: -+ g_free (contents); -+ g_strfreev (shells); -+ return ret; -+} -+ -+static gboolean -+validate_environment_variable (const gchar *key, -+ const gchar *value) -+{ -+ gboolean ret; -+ -+ /* Generally we bail if any environment variable value contains -+ * -+ * - '/' characters -+ * - '%' characters -+ * - '..' substrings -+ */ -+ -+ g_return_val_if_fail (key != NULL, FALSE); -+ g_return_val_if_fail (value != NULL, FALSE); -+ -+ ret = FALSE; -+ -+ /* special case $SHELL */ -+ if (g_strcmp0 (key, "SHELL") == 0) -+ { -+ /* check if it's in /etc/shells */ -+ if (!is_valid_shell (value)) -+ { -+ log_message (LOG_CRIT, TRUE, -+ "The value for the SHELL variable was not found the /etc/shells file"); -+ g_printerr ("\n" -+ "This incident has been reported.\n"); -+ goto out; -+ } -+ } -+ else if (strstr (value, "/") != NULL || -+ strstr (value, "%") != NULL || -+ strstr (value, "..") != NULL) -+ { -+ log_message (LOG_CRIT, TRUE, -+ "The value for environment variable %s contains suscipious content", -+ key); -+ g_printerr ("\n" -+ "This incident has been reported.\n"); -+ goto out; -+ } -+ -+ ret = TRUE; -+ -+ out: -+ return ret; -+} -+ -+/* ---------------------------------------------------------------------------------------------------- */ -+ -+int -+main (int argc, char *argv[]) -+{ -+ guint n; -+ guint ret; -+ gint rc; -+ gboolean opt_show_help; -+ gboolean opt_show_version; -+ PolkitAuthority *authority; -+ PolkitAuthorizationResult *result; -+ PolkitSubject *subject; -+ PolkitDetails *details; -+ GError *error; -+ gchar *action_id; -+ gchar **exec_argv; -+ gchar *path; -+ struct passwd pwstruct; -+ gchar pwbuf[8192]; -+ gchar *s; -+ const gchar *environment_variables_to_save[] = { -+ "SHELL", -+ "LANG", -+ "LINGUAS", -+ "LANGUAGE", -+ "LC_COLLATE", -+ "LC_CTYPE", -+ "LC_MESSAGES", -+ "LC_MONETARY", -+ "LC_NUMERIC", -+ "LC_TIME", -+ "LC_ALL", -+ "TERM", -+ "COLORTERM", -+ -+ /* For now, avoiding pretend that running X11 apps as another user in the same session -+ * will ever work... See -+ * -+ * https://bugs.freedesktop.org/show_bug.cgi?id=17970#c26 -+ * -+ * and surrounding comments for a lot of discussion about this. -+ */ -+#if 0 -+ "DESKTOP_STARTUP_ID", -+ "DISPLAY", -+ "XAUTHORITY", -+ "DBUS_SESSION_BUS_ADDRESS", -+ "ORBIT_SOCKETDIR", -+#endif -+ NULL -+ }; -+ GPtrArray *saved_env; -+ gchar *opt_user; -+ pid_t pid_of_caller; -+ uid_t uid_of_caller; -+ struct stat statbuf; -+ -+ ret = 127; -+ authority = NULL; -+ subject = NULL; -+ details = NULL; -+ result = NULL; -+ action_id = NULL; -+ saved_env = NULL; -+ path = NULL; -+ command_line = NULL; -+ opt_user = NULL; -+ -+ /* check for correct invocation */ -+ if (geteuid () != 0) -+ { -+ g_printerr ("pkexec must be setuid root\n"); -+ goto out; -+ } -+ -+ original_user_name = g_strdup (g_get_user_name ()); -+ if (original_user_name == NULL) -+ { -+ g_printerr ("Error getting user name.\n"); -+ goto out; -+ } -+ -+ original_cwd = g_strdup (get_current_dir_name ()); -+ if (original_cwd == NULL) -+ { -+ g_printerr ("Error getting cwd.\n"); -+ goto out; -+ } -+ -+ /* First process options and find the command-line to invoke. Avoid using fancy library routines -+ * that depend on environtment variables since we haven't cleared the environment just yet. -+ */ -+ opt_show_help = FALSE; -+ opt_show_version = FALSE; -+ for (n = 1; n < (guint) argc; n++) -+ { -+ if (strcmp (argv[n], "--help") == 0) -+ { -+ opt_show_help = TRUE; -+ } -+ else if (strcmp (argv[n], "--version") == 0) -+ { -+ opt_show_version = TRUE; -+ } -+ else if (strcmp (argv[n], "--user") == 0 || strcmp (argv[n], "-u") == 0) -+ { -+ n++; -+ if (n >= (guint) argc) -+ { -+ usage (argc, argv); -+ goto out; -+ } -+ -+ opt_user = g_strdup (argv[n]); -+ } -+ else -+ { -+ break; -+ } -+ } -+ -+ if (opt_show_help) -+ { -+ usage (argc, argv); -+ ret = 0; -+ goto out; -+ } -+ else if (opt_show_version) -+ { -+ g_print ("pkexec version %s\n", PACKAGE_VERSION); -+ ret = 0; -+ goto out; -+ } -+ -+ if (opt_user == NULL) -+ opt_user = g_strdup ("root"); -+ -+ /* Now figure out the command-line to run - argv is guaranteed to be NULL-terminated, see -+ * -+ * http://lkml.indiana.edu/hypermail/linux/kernel/0409.2/0287.html -+ * -+ * but do check this is the case. -+ * -+ * We also try to locate the program in the path if a non-absolute path is given. -+ */ -+ g_assert (argv[argc] == NULL); -+ path = g_strdup (argv[n]); -+ if (path == NULL) -+ { -+ usage (argc, argv); -+ goto out; -+ } -+ if (path[0] != '/') -+ { -+ /* g_find_program_in_path() is not suspectible to attacks via the environment */ -+ s = g_find_program_in_path (path); -+ if (s == NULL) -+ { -+ g_printerr ("Cannot run program %s: %s\n", path, strerror (ENOENT)); -+ goto out; -+ } -+ g_free (path); -+ argv[n] = path = s; -+ } -+ if (stat (path, &statbuf) != 0) -+ { -+ g_printerr ("Error getting information about %s: %s\n", path, g_strerror (errno)); -+ goto out; -+ } -+ command_line = g_strjoinv (" ", argv + n); -+ exec_argv = argv + n; -+ -+ /* Look up information about the user we care about - yes, the return -+ * value of this function is a bit funky -+ */ -+ rc = getpwnam_r (opt_user, &pwstruct, pwbuf, sizeof pwbuf, &pw); -+ if (rc == 0 && pw == NULL) -+ { -+ g_printerr ("User `%s' does not exist.\n", opt_user); -+ goto out; -+ } -+ else if (pw == NULL) -+ { -+ g_printerr ("Error getting information for user `%s': %s\n", opt_user, g_strerror (rc)); -+ goto out; -+ } -+ -+ /* now save the environment variables we care about */ -+ saved_env = g_ptr_array_new (); -+ for (n = 0; environment_variables_to_save[n] != NULL; n++) -+ { -+ const gchar *key = environment_variables_to_save[n]; -+ const gchar *value; -+ -+ value = g_getenv (key); -+ if (value == NULL) -+ continue; -+ -+ /* To qualify for the paranoia goldstar - we validate the value of each -+ * environment variable passed through - this is to attempt to avoid -+ * exploits in (potentially broken) programs launched via pkexec(1). -+ */ -+ if (!validate_environment_variable (key, value)) -+ goto out; -+ -+ g_ptr_array_add (saved_env, g_strdup (key)); -+ g_ptr_array_add (saved_env, g_strdup (value)); -+ } -+ -+ /* Nuke the environment to get a well-known and sanitized environment to avoid attacks -+ * via e.g. the DBUS_SYSTEM_BUS_ADDRESS environment variable and similar. -+ */ -+ if (clearenv () != 0) -+ { -+ g_printerr ("Error clearing environment: %s\n", g_strerror (errno)); -+ goto out; -+ } -+ -+ /* Initialize the GLib type system - this is needed to interact with the -+ * PolicyKit daemon -+ */ -+ g_type_init (); -+ -+ /* now check if the program that invoked us is authorized */ -+ pid_of_caller = getppid (); -+ if (pid_of_caller == 1) -+ { -+ /* getppid() can return 1 if the parent died (meaning that we are reaped -+ * by /sbin/init); get process group leader instead - for example, this -+ * happens when launching via gnome-panel (alt+f2, then 'pkexec gedit'). -+ */ -+ pid_of_caller = getpgrp (); -+ } -+ -+ subject = polkit_unix_process_new (pid_of_caller); -+ if (subject == NULL) -+ { -+ g_printerr ("No such process for pid %d: %s\n", (gint) pid_of_caller, error->message); -+ g_error_free (error); -+ goto out; -+ } -+ -+ /* paranoia: check that the uid of pid_of_caller matches getuid() */ -+ error = NULL; -+ uid_of_caller = polkit_unix_process_get_owner (POLKIT_UNIX_PROCESS (subject), -+ &error); -+ if (error != NULL) -+ { -+ g_printerr ("Error determing pid of caller (pid %d): %s\n", (gint) pid_of_caller, error->message); -+ g_error_free (error); -+ goto out; -+ } -+ if (uid_of_caller != getuid ()) -+ { -+ g_printerr ("User of caller (%d) does not match our uid (%d)\n", uid_of_caller, getuid ()); -+ goto out; -+ } -+ -+ authority = polkit_authority_get (); -+ -+ details = polkit_details_new (); -+ -+ polkit_details_insert (details, "command-line", command_line); -+ s = g_strdup_printf ("%s (%s)", pw->pw_gecos, pw->pw_name); -+ polkit_details_insert (details, "user", s); -+ g_free (s); -+ s = g_strdup_printf ("%d", (gint) pw->pw_uid); -+ polkit_details_insert (details, "uid", s); -+ g_free (s); -+ polkit_details_insert (details, "program", path); -+ -+ action_id = find_action_for_path (authority, path); -+ g_assert (action_id != NULL); -+ -+ error = NULL; -+ result = polkit_authority_check_authorization_sync (authority, -+ subject, -+ action_id, -+ details, -+ POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION, -+ NULL, -+ &error); -+ if (result == NULL) -+ { -+ g_printerr ("Error checking for authorization %s: %s\n", -+ action_id, -+ error->message); -+ goto out; -+ } -+ -+ if (polkit_authorization_result_get_is_authorized (result)) -+ { -+ /* do nothing */ -+ } -+ else if (polkit_authorization_result_get_is_challenge (result)) -+ { -+ g_printerr ("Error executing command as another user: No authentication agent was found.\n"); -+ goto out; -+ } -+ else -+ { -+ log_message (LOG_WARNING, TRUE, -+ "Error executing command as another user: Not authorized"); -+ g_printerr ("\n" -+ "This incident has been reported.\n"); -+ goto out; -+ } -+ -+ /* Set PATH to a safe list */ -+ g_ptr_array_add (saved_env, g_strdup ("PATH")); -+ if (pw->pw_uid != 0) -+ s = g_strdup_printf ("/usr/bin:/bin:/usr/sbin:/sbin:%s/bin", pw->pw_dir); -+ else -+ s = g_strdup_printf ("/usr/sbin:/usr/bin:/sbin:/bin:%s/bin", pw->pw_dir); -+ g_ptr_array_add (saved_env, s); -+ g_ptr_array_add (saved_env, g_strdup ("LOGNAME")); -+ g_ptr_array_add (saved_env, g_strdup (pw->pw_name)); -+ g_ptr_array_add (saved_env, g_strdup ("USER")); -+ g_ptr_array_add (saved_env, g_strdup (pw->pw_name)); -+ g_ptr_array_add (saved_env, g_strdup ("HOME")); -+ g_ptr_array_add (saved_env, g_strdup (pw->pw_dir)); -+ -+ s = g_strdup_printf ("%d", getuid ()); -+ g_ptr_array_add (saved_env, g_strdup ("PKEXEC_UID")); -+ g_ptr_array_add (saved_env, s); -+ -+ /* set the environment */ -+ for (n = 0; n < saved_env->len - 1; n += 2) -+ { -+ const gchar *key = saved_env->pdata[n]; -+ const gchar *value = saved_env->pdata[n + 1]; -+ -+ if (!g_setenv (key, value, TRUE)) -+ { -+ g_printerr ("Error setting environment variable %s to '%s': %s\n", -+ key, -+ value, -+ g_strerror (errno)); -+ goto out; -+ } -+ } -+ -+ /* set close_on_exec on all file descriptors except stdin, stdout, stderr */ -+ if (!fdwalk (set_close_on_exec, GINT_TO_POINTER (3))) -+ { -+ g_printerr ("Error setting close-on-exec for file desriptors\n"); -+ goto out; -+ } -+ -+ /* if not changing to uid 0, become uid 0 before changing to the user */ -+ if (pw->pw_uid != 0) -+ { -+ setreuid (0, 0); -+ if ((geteuid () != 0) || (getuid () != 0)) -+ { -+ g_printerr ("Error becoming uid 0: %s\n", g_strerror (errno)); -+ goto out; -+ } -+ } -+ -+ /* open session - with PAM enabled, this runs the open_session() part of the PAM -+ * stack - this includes applying limits via pam_limits.so but also other things -+ * requested via the current PAM configuration. -+ * -+ * NOTE NOTE NOTE: pam_limits.so doesn't seem to clear existing limits - e.g. -+ * -+ * $ ulimit -t -+ * unlimited -+ * -+ * $ su - -+ * Password: -+ * # ulimit -t -+ * unlimited -+ * # logout -+ * -+ * $ ulimit -t 1000 -+ * $ ulimit -t -+ * 1000 -+ * $ su - -+ * Password: -+ * # ulimit -t -+ * 1000 -+ * -+ * TODO: The question here is whether we should clear the limits before applying them? -+ * As evident above, neither su(1) (and, for that matter, nor sudo(8)) does this. -+ */ -+ if (!open_session (pw->pw_name)) -+ { -+ goto out; -+ } -+ -+ /* become the user */ -+ if (setgroups (0, NULL) != 0) -+ { -+ g_printerr ("Error setting groups: %s\n", g_strerror (errno)); -+ goto out; -+ } -+ if (initgroups (pw->pw_name, pw->pw_gid) != 0) -+ { -+ g_printerr ("Error initializing groups for %s: %s\n", pw->pw_name, g_strerror (errno)); -+ goto out; -+ } -+ setregid (pw->pw_gid, pw->pw_gid); -+ setreuid (pw->pw_uid, pw->pw_uid); -+ if ((geteuid () != pw->pw_uid) || (getuid () != pw->pw_uid) || -+ (getegid () != pw->pw_gid) || (getgid () != pw->pw_gid)) -+ { -+ g_printerr ("Error becoming real+effective uid %d and gid %d: %s\n", pw->pw_uid, pw->pw_gid, g_strerror (errno)); -+ goto out; -+ } -+ -+ /* change to home directory */ -+ if (chdir (pw->pw_dir) != 0) -+ { -+ g_printerr ("Error changing to home directory %s: %s\n", pw->pw_dir, g_strerror (errno)); -+ goto out; -+ } -+ -+ /* Log the fact that we're executing a command */ -+ log_message (LOG_NOTICE, FALSE, "Executing command"); -+ -+ /* exec the program */ -+ if (execv (path, exec_argv) != 0) -+ { -+ g_printerr ("Error executing %s: %s\n", path, g_strerror (errno)); -+ goto out; -+ } -+ -+ /* if exec doesn't fail, it never returns... */ -+ g_assert_not_reached (); -+ -+ out: -+ if (result != NULL) -+ g_object_unref (result); -+ -+ g_free (action_id); -+ -+ if (details != NULL) -+ g_object_unref (details); -+ -+ if (subject != NULL) -+ g_object_unref (subject); -+ -+ if (authority != NULL) -+ g_object_unref (authority); -+ -+ if (saved_env != NULL) -+ { -+ g_ptr_array_foreach (saved_env, (GFunc) g_free, NULL); -+ g_ptr_array_free (saved_env, TRUE); -+ } -+ -+ g_free (path); -+ g_free (command_line); -+ g_free (opt_user); -+ g_free (original_user_name); -+ g_free (original_cwd); -+ -+ return ret; -+} -+ diff --git a/packages/security/polkit/patches/polkit-1-shadow.readme b/packages/security/polkit/patches/polkit-1-shadow.readme deleted file mode 100644 index 27e1eca9a6..0000000000 --- a/packages/security/polkit/patches/polkit-1-shadow.readme +++ /dev/null @@ -1,2 +0,0 @@ -http://lists.freedesktop.org/archives/polkit-devel/2010-January/000288.html -http://mirrors.dotsrc.org/slackware/slackware-13.1/source/l/polkit/ \ No newline at end of file diff --git a/packages/security/polkit/url b/packages/security/polkit/url index d9613275dc..8059c32146 100644 --- a/packages/security/polkit/url +++ b/packages/security/polkit/url @@ -1 +1 @@ -http://hal.freedesktop.org/releases/polkit-0.96.tar.gz \ No newline at end of file +http://hal.freedesktop.org/releases/polkit-0.99.tar.gz \ No newline at end of file From 4ea1cb61002d37f24bfa838e833ef5cfd1da5b1c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 11:51:33 +0100 Subject: [PATCH 020/850] ConsoleKit: update to ConsoleKit-0.4.2 Signed-off-by: Stephan Raue --- packages/sysutils/ConsoleKit/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sysutils/ConsoleKit/url b/packages/sysutils/ConsoleKit/url index 5641dfba24..d6e980443f 100644 --- a/packages/sysutils/ConsoleKit/url +++ b/packages/sysutils/ConsoleKit/url @@ -1 +1 @@ -http://www.freedesktop.org/software/ConsoleKit/dist/ConsoleKit-0.4.1.tar.bz2 \ No newline at end of file +http://www.freedesktop.org/software/ConsoleKit/dist/ConsoleKit-0.4.2.tar.bz2 \ No newline at end of file From 7f4d38557e39f778c575fb86685620a75f0c6039 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 14:56:08 +0100 Subject: [PATCH 021/850] new package: add package 'libevent' Signed-off-by: Stephan Raue --- packages/devel/libevent/build | 19 +++++++++++++++++++ packages/devel/libevent/install | 7 +++++++ packages/devel/libevent/url | 1 + 3 files changed, 27 insertions(+) create mode 100755 packages/devel/libevent/build create mode 100755 packages/devel/libevent/install create mode 100644 packages/devel/libevent/url diff --git a/packages/devel/libevent/build b/packages/devel/libevent/build new file mode 100755 index 0000000000..6a37aac5fe --- /dev/null +++ b/packages/devel/libevent/build @@ -0,0 +1,19 @@ +#!/bin/sh + +. config/options $1 + +$SCRIPTS/build toolchain + +cd $PKG_BUILD +./configure --host=$TARGET_NAME \ + --build=$HOST_NAME \ + --prefix=/usr \ + --exec-prefix=/usr \ + --sysconfdir=/etc \ + --datadir=/usr/share \ + --enable-shared \ + --disable-static \ + +make + +$MAKEINSTALL diff --git a/packages/devel/libevent/install b/packages/devel/libevent/install new file mode 100755 index 0000000000..f90efd0db0 --- /dev/null +++ b/packages/devel/libevent/install @@ -0,0 +1,7 @@ +#!/bin/sh + +. config/options $1 + +mkdir -p $INSTALL/usr/lib + cp -P $PKG_BUILD/.libs/libevent*.so* $INSTALL/usr/lib + diff --git a/packages/devel/libevent/url b/packages/devel/libevent/url new file mode 100644 index 0000000000..9affba6d71 --- /dev/null +++ b/packages/devel/libevent/url @@ -0,0 +1 @@ +http://monkey.org/~provos/libevent-1.4.14b-stable.tar.gz \ No newline at end of file From 8bf1062be68d96cbd8d92d6fd690386ef8f05f00 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 14:56:52 +0100 Subject: [PATCH 022/850] transmission: update to transmission-2.11 Signed-off-by: Stephan Raue --- packages/network/transmission/build | 1 + packages/network/transmission/install | 1 + packages/network/transmission/url | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/network/transmission/build b/packages/network/transmission/build index b3b389e534..d89d58b400 100755 --- a/packages/network/transmission/build +++ b/packages/network/transmission/build @@ -6,6 +6,7 @@ $SCRIPTS/build toolchain $SCRIPTS/build zlib $SCRIPTS/build openssl $SCRIPTS/build curl +$SCRIPTS/build libevent cd $PKG_BUILD diff --git a/packages/network/transmission/install b/packages/network/transmission/install index 2f06fabb22..70938c30d3 100755 --- a/packages/network/transmission/install +++ b/packages/network/transmission/install @@ -5,6 +5,7 @@ $SCRIPTS/install zlib $SCRIPTS/install openssl $SCRIPTS/install curl +$SCRIPTS/install libevent $SCRIPTS/install connman mkdir -p $INSTALL/usr/sbin diff --git a/packages/network/transmission/url b/packages/network/transmission/url index 3b77ff5833..823c19cd89 100644 --- a/packages/network/transmission/url +++ b/packages/network/transmission/url @@ -1 +1 @@ -http://mirrors.m0k.org/transmission/files/transmission-1.93.tar.bz2 \ No newline at end of file +http://download.m0k.org/transmission/files/transmission-2.11.tar.bz2 \ No newline at end of file From 233edd514dc015fa9139b2b7b1adb396b024e07c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 14:57:32 +0100 Subject: [PATCH 023/850] strace: update to strace-4.5.20 Signed-off-by: Stephan Raue --- .../strace/patches/10_ctl-proc-removal.diff | 13 - .../strace/patches/12_include_socket.h.diff | 11971 ---------------- packages/debug/strace/url | 2 +- 3 files changed, 1 insertion(+), 11985 deletions(-) delete mode 100644 packages/debug/strace/patches/10_ctl-proc-removal.diff delete mode 100644 packages/debug/strace/patches/12_include_socket.h.diff diff --git a/packages/debug/strace/patches/10_ctl-proc-removal.diff b/packages/debug/strace/patches/10_ctl-proc-removal.diff deleted file mode 100644 index 25433d9e79..0000000000 --- a/packages/debug/strace/patches/10_ctl-proc-removal.diff +++ /dev/null @@ -1,13 +0,0 @@ -CTL_PROC was removed in linux 2.6.18 - -diff -Nur strace-4.5.12.orig/system.c strace-4.5.12/system.c ---- strace-4.5.12.orig/system.c Wed Jun 1 22:22:06 2005 -+++ strace-4.5.12/system.c Sat Sep 23 11:18:04 2006 -@@ -1572,7 +1572,6 @@ - { CTL_KERN, "CTL_KERN" }, - { CTL_VM, "CTL_VM" }, - { CTL_NET, "CTL_NET" }, -- { CTL_PROC, "CTL_PROC" }, - { CTL_FS, "CTL_FS" }, - { CTL_DEBUG, "CTL_DEBUG" }, - { CTL_DEV, "CTL_DEV" }, diff --git a/packages/debug/strace/patches/12_include_socket.h.diff b/packages/debug/strace/patches/12_include_socket.h.diff deleted file mode 100644 index 9e87712524..0000000000 --- a/packages/debug/strace/patches/12_include_socket.h.diff +++ /dev/null @@ -1,11971 +0,0 @@ -diff -Naur strace-4.5.19/configure strace-4.5.19.patch/configure ---- strace-4.5.19/configure 2009-10-21 19:41:11.000000000 +0200 -+++ strace-4.5.19.patch/configure 2009-11-04 09:11:01.669519301 +0100 -@@ -1,20 +1,18 @@ - #! /bin/sh - # Guess values for system-dependent variables and create Makefiles. --# Generated by GNU Autoconf 2.64 for strace 4.5.19. -+# Generated by GNU Autoconf 2.63 for strace 4.5.19. - # - # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, --# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software --# Foundation, Inc. --# -+# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. - # This configure script is free software; the Free Software Foundation - # gives unlimited permission to copy, distribute and modify it. --## -------------------- ## --## M4sh Initialization. ## --## -------------------- ## -+## --------------------- ## -+## M4sh Initialization. ## -+## --------------------- ## - - # Be more Bourne compatible - DUALCASE=1; export DUALCASE # for MKS sh --if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : -+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which -@@ -22,15 +20,23 @@ - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST - else -- case `(set -o) 2>/dev/null` in #( -- *posix*) : -- set -o posix ;; #( -- *) : -- ;; -+ case `(set -o) 2>/dev/null` in -+ *posix*) set -o posix ;; - esac -+ - fi - - -+ -+ -+# PATH needs CR -+# Avoid depending upon Character Ranges. -+as_cr_letters='abcdefghijklmnopqrstuvwxyz' -+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -+as_cr_Letters=$as_cr_letters$as_cr_LETTERS -+as_cr_digits='0123456789' -+as_cr_alnum=$as_cr_Letters$as_cr_digits -+ - as_nl=' - ' - export as_nl -@@ -38,13 +44,7 @@ - as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo - as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo --# Prefer a ksh shell builtin over an external printf program on Solaris, --# but without wasting forks for bash or zsh. --if test -z "$BASH_VERSION$ZSH_VERSION" \ -- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then -- as_echo='print -r --' -- as_echo_n='print -rn --' --elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then -+if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' - else -@@ -55,7 +55,7 @@ - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; -- case $arg in #( -+ case $arg in - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; -@@ -78,6 +78,13 @@ - } - fi - -+# Support unset when possible. -+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then -+ as_unset=unset -+else -+ as_unset=false -+fi -+ - - # IFS - # We need space, tab and new line, in precisely that order. Quoting is -@@ -87,15 +94,15 @@ - IFS=" "" $as_nl" - - # Find who we are. Look in the path if we contain no directory separator. --case $0 in #(( -+case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH - do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. -- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -- done -+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -+done - IFS=$as_save_IFS - - ;; -@@ -107,16 +114,12 @@ - fi - if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 -- exit 1 -+ { (exit 1); exit 1; } - fi - --# Unset variables that we do not need and which cause bugs (e.g. in --# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" --# suppresses any "Segmentation fault" message there. '((' could --# trigger a bug in pdksh 5.2.14. --for as_var in BASH_ENV ENV MAIL MAILPATH --do eval test x\${$as_var+set} = xset \ -- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -+# Work around bugs in pre-3.0 UWIN ksh. -+for as_var in ENV MAIL MAILPATH -+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - done - PS1='$ ' - PS2='> ' -@@ -128,299 +131,330 @@ - LANGUAGE=C - export LANGUAGE - -+# Required to use basename. -+if expr a : '\(a\)' >/dev/null 2>&1 && -+ test "X`expr 00001 : '.*\(...\)'`" = X001; then -+ as_expr=expr -+else -+ as_expr=false -+fi -+ -+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then -+ as_basename=basename -+else -+ as_basename=false -+fi -+ -+ -+# Name of the executable. -+as_me=`$as_basename -- "$0" || -+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ -+ X"$0" : 'X\(//\)$' \| \ -+ X"$0" : 'X\(/\)' \| . 2>/dev/null || -+$as_echo X/"$0" | -+ sed '/^.*\/\([^/][^/]*\)\/*$/{ -+ s//\1/ -+ q -+ } -+ /^X\/\(\/\/\)$/{ -+ s//\1/ -+ q -+ } -+ /^X\/\(\/\).*/{ -+ s//\1/ -+ q -+ } -+ s/.*/./; q'` -+ - # CDPATH. --(unset CDPATH) >/dev/null 2>&1 && unset CDPATH -+$as_unset CDPATH -+ - - if test "x$CONFIG_SHELL" = x; then -- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : -- emulate sh -- NULLCMD=: -- # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which -- # is contrary to our usage. Disable this feature. -- alias -g '\${1+\"\$@\"}'='\"\$@\"' -- setopt NO_GLOB_SUBST -+ if (eval ":") 2>/dev/null; then -+ as_have_required=yes - else -- case \`(set -o) 2>/dev/null\` in #( -- *posix*) : -- set -o posix ;; #( -- *) : -- ;; --esac -+ as_have_required=no - fi --" -- as_required="as_fn_return () { (exit \$1); } --as_fn_success () { as_fn_return 0; } --as_fn_failure () { as_fn_return 1; } --as_fn_ret_success () { return 0; } --as_fn_ret_failure () { return 1; } -+ -+ if test $as_have_required = yes && (eval ": -+(as_func_return () { -+ (exit \$1) -+} -+as_func_success () { -+ as_func_return 0 -+} -+as_func_failure () { -+ as_func_return 1 -+} -+as_func_ret_success () { -+ return 0 -+} -+as_func_ret_failure () { -+ return 1 -+} - - exitcode=0 --as_fn_success || { exitcode=1; echo as_fn_success failed.; } --as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } --as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } --as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } --if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : -- --else -- exitcode=1; echo positional parameters were not saved. --fi --test x\$exitcode = x0 || exit 1" -- as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO -- as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO -- eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && -- test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 --test \$(( 1 + 1 )) = 2 || exit 1" -- if (eval "$as_required") 2>/dev/null; then : -- as_have_required=yes -+if as_func_success; then -+ : - else -- as_have_required=no -+ exitcode=1 -+ echo as_func_success failed. -+fi -+ -+if as_func_failure; then -+ exitcode=1 -+ echo as_func_failure succeeded. - fi -- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -+if as_func_ret_success; then -+ : - else -- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --as_found=false -+ exitcode=1 -+ echo as_func_ret_success failed. -+fi -+ -+if as_func_ret_failure; then -+ exitcode=1 -+ echo as_func_ret_failure succeeded. -+fi -+ -+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then -+ : -+else -+ exitcode=1 -+ echo positional parameters were not saved. -+fi -+ -+test \$exitcode = 0) || { (exit 1); exit 1; } -+ -+( -+ as_lineno_1=\$LINENO -+ as_lineno_2=\$LINENO -+ test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && -+ test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } -+") 2> /dev/null; then -+ : -+else -+ as_candidate_shells= -+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH - do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. -- as_found=: -- case $as_dir in #( -+ case $as_dir in - /*) - for as_base in sh bash ksh sh5; do -- # Try only shells that exist, to save several forks. -- as_shell=$as_dir/$as_base -- if { test -f "$as_shell" || test -f "$as_shell.exe"; } && -- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : -- CONFIG_SHELL=$as_shell as_have_required=yes -- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : -- break 2 --fi --fi -+ as_candidate_shells="$as_candidate_shells $as_dir/$as_base" - done;; - esac -- as_found=false - done --$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && -- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : -- CONFIG_SHELL=$SHELL as_have_required=yes --fi; } - IFS=$as_save_IFS - - -- if test "x$CONFIG_SHELL" != x; then : -- # We cannot yet assume a decent shell, so we have to provide a -- # neutralization value for shells without unset; and this also -- # works around shells that cannot unset nonexistent variables. -- BASH_ENV=/dev/null -- ENV=/dev/null -- (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -- export CONFIG_SHELL -- exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} --fi -+ for as_shell in $as_candidate_shells $SHELL; do -+ # Try only shells that exist, to save several forks. -+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } && -+ { ("$as_shell") 2> /dev/null <<\_ASEOF -+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then -+ emulate sh -+ NULLCMD=: -+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which -+ # is contrary to our usage. Disable this feature. -+ alias -g '${1+"$@"}'='"$@"' -+ setopt NO_GLOB_SUBST -+else -+ case `(set -o) 2>/dev/null` in -+ *posix*) set -o posix ;; -+esac - -- if test x$as_have_required = xno; then : -- $as_echo "$0: This script requires a shell more modern than all" -- $as_echo "$0: the shells that I found on your system." -- if test x${ZSH_VERSION+set} = xset ; then -- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" -- $as_echo "$0: be upgraded to zsh 4.3.4 or later." -- else -- $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, --$0: including any error possibly output before this --$0: message. Then install a modern shell, or manually run --$0: the script under such a shell if you do have one." -- fi -- exit 1 --fi - fi -+ -+ -+: -+_ASEOF -+}; then -+ CONFIG_SHELL=$as_shell -+ as_have_required=yes -+ if { "$as_shell" 2> /dev/null <<\_ASEOF -+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then -+ emulate sh -+ NULLCMD=: -+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which -+ # is contrary to our usage. Disable this feature. -+ alias -g '${1+"$@"}'='"$@"' -+ setopt NO_GLOB_SUBST -+else -+ case `(set -o) 2>/dev/null` in -+ *posix*) set -o posix ;; -+esac -+ - fi --SHELL=${CONFIG_SHELL-/bin/sh} --export SHELL --# Unset more variables known to interfere with behavior of common tools. --CLICOLOR_FORCE= GREP_OPTIONS= --unset CLICOLOR_FORCE GREP_OPTIONS - --## --------------------- ## --## M4sh Shell Functions. ## --## --------------------- ## --# as_fn_unset VAR --# --------------- --# Portably unset VAR. --as_fn_unset () --{ -- { eval $1=; unset $1;} --} --as_unset=as_fn_unset -- --# as_fn_set_status STATUS --# ----------------------- --# Set $? to STATUS, without forking. --as_fn_set_status () --{ -- return $1 --} # as_fn_set_status -- --# as_fn_exit STATUS --# ----------------- --# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. --as_fn_exit () --{ -- set +e -- as_fn_set_status $1 -- exit $1 --} # as_fn_exit -- --# as_fn_mkdir_p --# ------------- --# Create "$as_dir" as a directory, including parents if necessary. --as_fn_mkdir_p () --{ - -- case $as_dir in #( -- -*) as_dir=./$as_dir;; -- esac -- test -d "$as_dir" || eval $as_mkdir_p || { -- as_dirs= -- while :; do -- case $as_dir in #( -- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( -- *) as_qdir=$as_dir;; -- esac -- as_dirs="'$as_qdir' $as_dirs" -- as_dir=`$as_dirname -- "$as_dir" || --$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ -- X"$as_dir" : 'X\(//\)[^/]' \| \ -- X"$as_dir" : 'X\(//\)$' \| \ -- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || --$as_echo X"$as_dir" | -- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ -- s//\1/ -- q -- } -- /^X\(\/\/\)[^/].*/{ -- s//\1/ -- q -- } -- /^X\(\/\/\)$/{ -- s//\1/ -- q -- } -- /^X\(\/\).*/{ -- s//\1/ -- q -- } -- s/.*/./; q'` -- test -d "$as_dir" && break -- done -- test -z "$as_dirs" || eval "mkdir $as_dirs" -- } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" -+: -+(as_func_return () { -+ (exit $1) -+} -+as_func_success () { -+ as_func_return 0 -+} -+as_func_failure () { -+ as_func_return 1 -+} -+as_func_ret_success () { -+ return 0 -+} -+as_func_ret_failure () { -+ return 1 -+} -+ -+exitcode=0 -+if as_func_success; then -+ : -+else -+ exitcode=1 -+ echo as_func_success failed. -+fi - -+if as_func_failure; then -+ exitcode=1 -+ echo as_func_failure succeeded. -+fi - --} # as_fn_mkdir_p --# as_fn_append VAR VALUE --# ---------------------- --# Append the text in VALUE to the end of the definition contained in VAR. Take --# advantage of any shell optimizations that allow amortized linear growth over --# repeated appends, instead of the typical quadratic growth present in naive --# implementations. --if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : -- eval 'as_fn_append () -- { -- eval $1+=\$2 -- }' -+if as_func_ret_success; then -+ : - else -- as_fn_append () -- { -- eval $1=\$$1\$2 -- } --fi # as_fn_append -+ exitcode=1 -+ echo as_func_ret_success failed. -+fi - --# as_fn_arith ARG... --# ------------------ --# Perform arithmetic evaluation on the ARGs, and store the result in the --# global $as_val. Take advantage of shells that can avoid forks. The arguments --# must be portable across $(()) and expr. --if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : -- eval 'as_fn_arith () -- { -- as_val=$(( $* )) -- }' -+if as_func_ret_failure; then -+ exitcode=1 -+ echo as_func_ret_failure succeeded. -+fi -+ -+if ( set x; as_func_ret_success y && test x = "$1" ); then -+ : - else -- as_fn_arith () -- { -- as_val=`expr "$@" || test $? -eq 1` -- } --fi # as_fn_arith -+ exitcode=1 -+ echo positional parameters were not saved. -+fi - -+test $exitcode = 0) || { (exit 1); exit 1; } - --# as_fn_error ERROR [LINENO LOG_FD] --# --------------------------------- --# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are --# provided, also output the error to LOG_FD, referencing LINENO. Then exit the --# script with status $?, using 1 if that was 0. --as_fn_error () --{ -- as_status=$?; test $as_status -eq 0 && as_status=1 -- if test "$3"; then -- as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack -- $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 -- fi -- $as_echo "$as_me: error: $1" >&2 -- as_fn_exit $as_status --} # as_fn_error -+( -+ as_lineno_1=$LINENO -+ as_lineno_2=$LINENO -+ test "x$as_lineno_1" != "x$as_lineno_2" && -+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } - --if expr a : '\(a\)' >/dev/null 2>&1 && -- test "X`expr 00001 : '.*\(...\)'`" = X001; then -- as_expr=expr -+_ASEOF -+}; then -+ break -+fi -+ -+fi -+ -+ done -+ -+ if test "x$CONFIG_SHELL" != x; then -+ for as_var in BASH_ENV ENV -+ do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var -+ done -+ export CONFIG_SHELL -+ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -+fi -+ -+ -+ if test $as_have_required = no; then -+ echo This script requires a shell more modern than all the -+ echo shells that I found on your system. Please install a -+ echo modern shell, or manually run the script under such a -+ echo shell if you do have one. -+ { (exit 1); exit 1; } -+fi -+ -+ -+fi -+ -+fi -+ -+ -+ -+(eval "as_func_return () { -+ (exit \$1) -+} -+as_func_success () { -+ as_func_return 0 -+} -+as_func_failure () { -+ as_func_return 1 -+} -+as_func_ret_success () { -+ return 0 -+} -+as_func_ret_failure () { -+ return 1 -+} -+ -+exitcode=0 -+if as_func_success; then -+ : - else -- as_expr=false -+ exitcode=1 -+ echo as_func_success failed. - fi - --if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then -- as_basename=basename -+if as_func_failure; then -+ exitcode=1 -+ echo as_func_failure succeeded. -+fi -+ -+if as_func_ret_success; then -+ : - else -- as_basename=false -+ exitcode=1 -+ echo as_func_ret_success failed. - fi - --if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then -- as_dirname=dirname -+if as_func_ret_failure; then -+ exitcode=1 -+ echo as_func_ret_failure succeeded. -+fi -+ -+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then -+ : - else -- as_dirname=false -+ exitcode=1 -+ echo positional parameters were not saved. - fi - --as_me=`$as_basename -- "$0" || --$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ -- X"$0" : 'X\(//\)$' \| \ -- X"$0" : 'X\(/\)' \| . 2>/dev/null || --$as_echo X/"$0" | -- sed '/^.*\/\([^/][^/]*\)\/*$/{ -- s//\1/ -- q -- } -- /^X\/\(\/\/\)$/{ -- s//\1/ -- q -- } -- /^X\/\(\/\).*/{ -- s//\1/ -- q -- } -- s/.*/./; q'` -+test \$exitcode = 0") || { -+ echo No shell found that supports shell functions. -+ echo Please tell bug-autoconf@gnu.org about your system, -+ echo including any error possibly output before this message. -+ echo This can help us improve future autoconf versions. -+ echo Configuration will now proceed without shell functions. -+} - --# Avoid depending upon Character Ranges. --as_cr_letters='abcdefghijklmnopqrstuvwxyz' --as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' --as_cr_Letters=$as_cr_letters$as_cr_LETTERS --as_cr_digits='0123456789' --as_cr_alnum=$as_cr_Letters$as_cr_digits - - -- as_lineno_1=$LINENO as_lineno_1a=$LINENO -- as_lineno_2=$LINENO as_lineno_2a=$LINENO -- eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && -- test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { -- # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) -+ as_lineno_1=$LINENO -+ as_lineno_2=$LINENO -+ test "x$as_lineno_1" != "x$as_lineno_2" && -+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { -+ -+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO -+ # uniformly replaced by the line number. The first 'sed' inserts a -+ # line-number line after each line using $LINENO; the second 'sed' -+ # does the real work. The second script uses 'N' to pair each -+ # line-number line with the line containing $LINENO, and appends -+ # trailing '-' during substitution so that $LINENO is not a special -+ # case at line end. -+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the -+ # scripts with optimization help from Paolo Bonzini. Blame Lee -+ # E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= -@@ -437,7 +471,8 @@ - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || -- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } -+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 -+ { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the -@@ -447,18 +482,29 @@ - exit - } - --ECHO_C= ECHO_N= ECHO_T= --case `echo -n x` in #((((( ---n*) -- case `echo 'xy\c'` in -- *c*) ECHO_T=' ';; # ECHO_T is single tab character. -- xy) ECHO_C='\c';; -- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null -- ECHO_T=' ';; -- esac;; --*) -+ -+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then -+ as_dirname=dirname -+else -+ as_dirname=false -+fi -+ -+ECHO_C= ECHO_N= ECHO_T= -+case `echo -n x` in -+-n*) -+ case `echo 'x\c'` in -+ *c*) ECHO_T=' ';; # ECHO_T is single tab character. -+ *) ECHO_C='\c';; -+ esac;; -+*) - ECHO_N='-n';; - esac -+if expr a : '\(a\)' >/dev/null 2>&1 && -+ test "X`expr 00001 : '.*\(...\)'`" = X001; then -+ as_expr=expr -+else -+ as_expr=false -+fi - - rm -f conf$$ conf$$.exe conf$$.file - if test -d conf$$.dir; then -@@ -488,7 +534,7 @@ - rmdir conf$$.dir 2>/dev/null - - if mkdir -p . 2>/dev/null; then -- as_mkdir_p='mkdir -p "$as_dir"' -+ as_mkdir_p=: - else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -@@ -507,10 +553,10 @@ - if test -d "$1"; then - test -d "$1/."; - else -- case $1 in #( -+ case $1 in - -*)set "./$1";; - esac; -- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( -+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -@@ -524,6 +570,7 @@ - as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -+ - exec 7<&0 &1 - - # Name of the host. -@@ -542,6 +589,7 @@ - subdirs= - MFLAGS= - MAKEFLAGS= -+SHELL=${CONFIG_SHELL-/bin/sh} - - # Identity of this package. - PACKAGE_NAME='strace' -@@ -549,7 +597,6 @@ - PACKAGE_VERSION='4.5.19' - PACKAGE_STRING='strace 4.5.19' - PACKAGE_BUGREPORT='' --PACKAGE_URL='' - - ac_unique_file="strace.c" - # Factoring default headers for most tests. -@@ -691,7 +738,6 @@ - program_transform_name - prefix - exec_prefix --PACKAGE_URL - PACKAGE_BUGREPORT - PACKAGE_STRING - PACKAGE_VERSION -@@ -822,7 +868,8 @@ - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && -- as_fn_error "invalid feature name: $ac_useropt" -+ { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 -+ { (exit 1); exit 1; }; } - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in -@@ -848,7 +895,8 @@ - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && -- as_fn_error "invalid feature name: $ac_useropt" -+ { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 -+ { (exit 1); exit 1; }; } - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in -@@ -1052,7 +1100,8 @@ - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && -- as_fn_error "invalid package name: $ac_useropt" -+ { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 -+ { (exit 1); exit 1; }; } - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in -@@ -1068,7 +1117,8 @@ - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && -- as_fn_error "invalid package name: $ac_useropt" -+ { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 -+ { (exit 1); exit 1; }; } - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in -@@ -1098,17 +1148,17 @@ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - -- -*) as_fn_error "unrecognized option: \`$ac_option' --Try \`$0 --help' for more information." -+ -*) { $as_echo "$as_me: error: unrecognized option: $ac_option -+Try \`$0 --help' for more information." >&2 -+ { (exit 1); exit 1; }; } - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. -- case $ac_envvar in #( -- '' | [0-9]* | *[!_$as_cr_alnum]* ) -- as_fn_error "invalid variable name: \`$ac_envvar'" ;; -- esac -+ expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && -+ { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2 -+ { (exit 1); exit 1; }; } - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - -@@ -1125,13 +1175,15 @@ - - if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` -- as_fn_error "missing argument to $ac_option" -+ { $as_echo "$as_me: error: missing argument to $ac_option" >&2 -+ { (exit 1); exit 1; }; } - fi - - if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; -- fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; -+ fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2 -+ { (exit 1); exit 1; }; } ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac - fi -@@ -1154,7 +1206,8 @@ - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac -- as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" -+ { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 -+ { (exit 1); exit 1; }; } - done - - # There might be people who depend on the old broken behavior: `$host' -@@ -1184,9 +1237,11 @@ - ac_pwd=`pwd` && test -n "$ac_pwd" && - ac_ls_di=`ls -di .` && - ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || -- as_fn_error "working directory cannot be determined" -+ { $as_echo "$as_me: error: working directory cannot be determined" >&2 -+ { (exit 1); exit 1; }; } - test "X$ac_ls_di" = "X$ac_pwd_ls_di" || -- as_fn_error "pwd does not report name of working directory" -+ { $as_echo "$as_me: error: pwd does not report name of working directory" >&2 -+ { (exit 1); exit 1; }; } - - - # Find the source files, if location was not specified. -@@ -1225,11 +1280,13 @@ - fi - if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." -- as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" -+ { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 -+ { (exit 1); exit 1; }; } - fi - ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" - ac_abs_confdir=`( -- cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" -+ cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2 -+ { (exit 1); exit 1; }; } - pwd)` - # When building in place, set srcdir=. - if test "$ac_abs_confdir" = "$ac_pwd"; then -@@ -1351,7 +1408,6 @@ - Use these variables to override the choices made by `configure' or to help - it to find libraries and programs with nonstandard names/locations. - --Report bugs to the package provider. - _ACEOF - ac_status=$? - fi -@@ -1415,630 +1471,129 @@ - if $ac_init_version; then - cat <<\_ACEOF - strace configure 4.5.19 --generated by GNU Autoconf 2.64 -+generated by GNU Autoconf 2.63 - --Copyright (C) 2009 Free Software Foundation, Inc. -+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. - This configure script is free software; the Free Software Foundation - gives unlimited permission to copy, distribute and modify it. - _ACEOF - exit - fi -+cat >config.log <<_ACEOF -+This file contains any messages produced by compilers while -+running configure, to aid debugging if configure makes a mistake. - --## ------------------------ ## --## Autoconf initialization. ## --## ------------------------ ## -- --# ac_fn_c_try_compile LINENO --# -------------------------- --# Try to compile conftest.$ac_ext, and return whether this succeeded. --ac_fn_c_try_compile () --{ -- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack -- rm -f conftest.$ac_objext -- if { { ac_try="$ac_compile" --case "(($ac_try" in -- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -- *) ac_try_echo=$ac_try;; --esac --eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" --$as_echo "$ac_try_echo"; } >&5 -- (eval "$ac_compile") 2>conftest.err -- ac_status=$? -- if test -s conftest.err; then -- grep -v '^ *+' conftest.err >conftest.er1 -- cat conftest.er1 >&5 -- mv -f conftest.er1 conftest.err -- fi -- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -- test $ac_status = 0; } && { -- test -z "$ac_c_werror_flag" || -- test ! -s conftest.err -- } && test -s conftest.$ac_objext; then : -- ac_retval=0 --else -- $as_echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- -- ac_retval=1 --fi -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -- return $ac_retval -+It was created by strace $as_me 4.5.19, which was -+generated by GNU Autoconf 2.63. Invocation command line was - --} # ac_fn_c_try_compile -+ $ $0 $@ - --# ac_fn_c_try_cpp LINENO --# ---------------------- --# Try to preprocess conftest.$ac_ext, and return whether this succeeded. --ac_fn_c_try_cpp () -+_ACEOF -+exec 5>>config.log - { -- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack -- if { { ac_try="$ac_cpp conftest.$ac_ext" --case "(($ac_try" in -- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -- *) ac_try_echo=$ac_try;; --esac --eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" --$as_echo "$ac_try_echo"; } >&5 -- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err -- ac_status=$? -- if test -s conftest.err; then -- grep -v '^ *+' conftest.err >conftest.er1 -- cat conftest.er1 >&5 -- mv -f conftest.er1 conftest.err -- fi -- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -- test $ac_status = 0; } >/dev/null && { -- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -- test ! -s conftest.err -- }; then : -- ac_retval=0 --else -- $as_echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- -- ac_retval=1 --fi -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -- return $ac_retval -- --} # ac_fn_c_try_cpp -+cat <<_ASUNAME -+## --------- ## -+## Platform. ## -+## --------- ## - --# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES --# ------------------------------------------------------- --# Tests whether HEADER exists, giving a warning if it cannot be compiled using --# the include files in INCLUDES and setting the cache variable VAR --# accordingly. --ac_fn_c_check_header_mongrel () --{ -- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack -- if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 --$as_echo_n "checking for $2... " >&6; } --if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : -- $as_echo_n "(cached) " >&6 --fi --eval ac_res=\$$3 -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 --$as_echo "$ac_res" >&6; } --else -- # Is the header compilable? --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 --$as_echo_n "checking $2 usability... " >&6; } --cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ --$4 --#include <$2> --_ACEOF --if ac_fn_c_try_compile "$LINENO"; then : -- ac_header_compiler=yes --else -- ac_header_compiler=no --fi --rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 --$as_echo "$ac_header_compiler" >&6; } -+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -+uname -m = `(uname -m) 2>/dev/null || echo unknown` -+uname -r = `(uname -r) 2>/dev/null || echo unknown` -+uname -s = `(uname -s) 2>/dev/null || echo unknown` -+uname -v = `(uname -v) 2>/dev/null || echo unknown` - --# Is the header present? --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 --$as_echo_n "checking $2 presence... " >&6; } --cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ --#include <$2> --_ACEOF --if ac_fn_c_try_cpp "$LINENO"; then : -- ac_header_preproc=yes --else -- ac_header_preproc=no --fi --rm -f conftest.err conftest.$ac_ext --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 --$as_echo "$ac_header_preproc" >&6; } -+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - --# So? What about this header? --case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( -- yes:no: ) -- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 --$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} -- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 --$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -- ;; -- no:yes:* ) -- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 --$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} -- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 --$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} -- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 --$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} -- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 --$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} -- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 --$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -- ;; --esac -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 --$as_echo_n "checking for $2... " >&6; } --if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : -- $as_echo_n "(cached) " >&6 --else -- eval "$3=\$ac_header_compiler" --fi --eval ac_res=\$$3 -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 --$as_echo "$ac_res" >&6; } --fi -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - --} # ac_fn_c_check_header_mongrel -+_ASUNAME - --# ac_fn_c_try_run LINENO --# ---------------------- --# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes --# that executables *can* be run. --ac_fn_c_try_run () --{ -- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack -- if { { ac_try="$ac_link" --case "(($ac_try" in -- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -- *) ac_try_echo=$ac_try;; --esac --eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" --$as_echo "$ac_try_echo"; } >&5 -- (eval "$ac_link") 2>&5 -- ac_status=$? -- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -- test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' -- { { case "(($ac_try" in -- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -- *) ac_try_echo=$ac_try;; --esac --eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" --$as_echo "$ac_try_echo"; } >&5 -- (eval "$ac_try") 2>&5 -- ac_status=$? -- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -- test $ac_status = 0; }; }; then : -- ac_retval=0 --else -- $as_echo "$as_me: program exited with status $ac_status" >&5 -- $as_echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ $as_echo "PATH: $as_dir" -+done -+IFS=$as_save_IFS - -- ac_retval=$ac_status --fi -- rm -rf conftest.dSYM conftest_ipa8_conftest.oo -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -- return $ac_retval -+} >&5 - --} # ac_fn_c_try_run -+cat >&5 <<_ACEOF - --# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES --# ------------------------------------------------------- --# Tests whether HEADER exists and can be compiled using the include files in --# INCLUDES, setting the cache variable VAR accordingly. --ac_fn_c_check_header_compile () --{ -- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 --$as_echo_n "checking for $2... " >&6; } --if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : -- $as_echo_n "(cached) " >&6 --else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ --$4 --#include <$2> --_ACEOF --if ac_fn_c_try_compile "$LINENO"; then : -- eval "$3=yes" --else -- eval "$3=no" --fi --rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext --fi --eval ac_res=\$$3 -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 --$as_echo "$ac_res" >&6; } -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - --} # ac_fn_c_check_header_compile -+## ----------- ## -+## Core tests. ## -+## ----------- ## - --# ac_fn_c_check_type LINENO TYPE VAR INCLUDES --# ------------------------------------------- --# Tests whether TYPE exists after having included INCLUDES, setting cache --# variable VAR accordingly. --ac_fn_c_check_type () --{ -- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 --$as_echo_n "checking for $2... " >&6; } --if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : -- $as_echo_n "(cached) " >&6 --else -- eval "$3=no" -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ --$4 --int --main () --{ --if (sizeof ($2)) -- return 0; -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_compile "$LINENO"; then : -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ --$4 --int --main () --{ --if (sizeof (($2))) -- return 0; -- ; -- return 0; --} - _ACEOF --if ac_fn_c_try_compile "$LINENO"; then : -- --else -- eval "$3=yes" --fi --rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext --fi --rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext --fi --eval ac_res=\$$3 -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 --$as_echo "$ac_res" >&6; } -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - --} # ac_fn_c_check_type -- --# ac_fn_c_try_link LINENO --# ----------------------- --# Try to link conftest.$ac_ext, and return whether this succeeded. --ac_fn_c_try_link () --{ -- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack -- rm -f conftest.$ac_objext conftest$ac_exeext -- if { { ac_try="$ac_link" --case "(($ac_try" in -- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -- *) ac_try_echo=$ac_try;; --esac --eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" --$as_echo "$ac_try_echo"; } >&5 -- (eval "$ac_link") 2>conftest.err -- ac_status=$? -- if test -s conftest.err; then -- grep -v '^ *+' conftest.err >conftest.er1 -- cat conftest.er1 >&5 -- mv -f conftest.er1 conftest.err -- fi -- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -- test $ac_status = 0; } && { -- test -z "$ac_c_werror_flag" || -- test ! -s conftest.err -- } && test -s conftest$ac_exeext && { -- test "$cross_compiling" = yes || -- $as_test_x conftest$ac_exeext -- }; then : -- ac_retval=0 --else -- $as_echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 - -- ac_retval=1 --fi -- # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information -- # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would -- # interfere with the next link command; also delete a directory that is -- # left behind by Apple's compiler. We do this before executing the actions. -- rm -rf conftest.dSYM conftest_ipa8_conftest.oo -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -- return $ac_retval -+# Keep a trace of the command line. -+# Strip out --no-create and --no-recursion so they do not pile up. -+# Strip out --silent because we don't want to record it for future runs. -+# Also quote any args containing shell meta-characters. -+# Make two passes to allow for proper duplicate-argument suppression. -+ac_configure_args= -+ac_configure_args0= -+ac_configure_args1= -+ac_must_keep_next=false -+for ac_pass in 1 2 -+do -+ for ac_arg -+ do -+ case $ac_arg in -+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \ -+ | -silent | --silent | --silen | --sile | --sil) -+ continue ;; -+ *\'*) -+ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; -+ esac -+ case $ac_pass in -+ 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; -+ 2) -+ ac_configure_args1="$ac_configure_args1 '$ac_arg'" -+ if test $ac_must_keep_next = true; then -+ ac_must_keep_next=false # Got value, back to normal. -+ else -+ case $ac_arg in -+ *=* | --config-cache | -C | -disable-* | --disable-* \ -+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ -+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ -+ | -with-* | --with-* | -without-* | --without-* | --x) -+ case "$ac_configure_args0 " in -+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; -+ esac -+ ;; -+ -* ) ac_must_keep_next=true ;; -+ esac -+ fi -+ ac_configure_args="$ac_configure_args '$ac_arg'" -+ ;; -+ esac -+ done -+done -+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } -+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } - --} # ac_fn_c_try_link -- --# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES --# ---------------------------------------------------- --# Tries to find if the field MEMBER exists in type AGGR, after including --# INCLUDES, setting cache variable VAR accordingly. --ac_fn_c_check_member () --{ -- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 --$as_echo_n "checking for $2.$3... " >&6; } --if { as_var=$4; eval "test \"\${$as_var+set}\" = set"; }; then : -- $as_echo_n "(cached) " >&6 --else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ --$5 --int --main () --{ --static $2 ac_aggr; --if (ac_aggr.$3) --return 0; -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_compile "$LINENO"; then : -- eval "$4=yes" --else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ --$5 --int --main () --{ --static $2 ac_aggr; --if (sizeof ac_aggr.$3) --return 0; -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_compile "$LINENO"; then : -- eval "$4=yes" --else -- eval "$4=no" --fi --rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext --fi --rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext --fi --eval ac_res=\$$4 -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 --$as_echo "$ac_res" >&6; } -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -- --} # ac_fn_c_check_member -- --# ac_fn_c_check_func LINENO FUNC VAR --# ---------------------------------- --# Tests whether FUNC exists, setting the cache variable VAR accordingly --ac_fn_c_check_func () --{ -- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 --$as_echo_n "checking for $2... " >&6; } --if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : -- $as_echo_n "(cached) " >&6 --else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ --/* Define $2 to an innocuous variant, in case declares $2. -- For example, HP-UX 11i declares gettimeofday. */ --#define $2 innocuous_$2 -- --/* System header to define __stub macros and hopefully few prototypes, -- which can conflict with char $2 (); below. -- Prefer to if __STDC__ is defined, since -- exists even on freestanding compilers. */ -- --#ifdef __STDC__ --# include --#else --# include --#endif -- --#undef $2 -- --/* Override any GCC internal prototype to avoid an error. -- Use char because int might match the return type of a GCC -- builtin and then its argument prototype would still apply. */ --#ifdef __cplusplus --extern "C" --#endif --char $2 (); --/* The GNU C library defines this for functions which it implements -- to always fail with ENOSYS. Some functions are actually named -- something starting with __ and the normal name is an alias. */ --#if defined __stub_$2 || defined __stub___$2 --choke me --#endif -- --int --main () --{ --return $2 (); -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_link "$LINENO"; then : -- eval "$3=yes" --else -- eval "$3=no" --fi --rm -f core conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext --fi --eval ac_res=\$$3 -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 --$as_echo "$ac_res" >&6; } -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -- --} # ac_fn_c_check_func -- --# ac_fn_c_check_decl LINENO SYMBOL VAR --# ------------------------------------ --# Tests whether SYMBOL is declared, setting cache variable VAR accordingly. --ac_fn_c_check_decl () --{ -- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $2 is declared" >&5 --$as_echo_n "checking whether $2 is declared... " >&6; } --if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : -- $as_echo_n "(cached) " >&6 --else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ --$4 --int --main () --{ --#ifndef $2 -- (void) $2; --#endif -- -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_compile "$LINENO"; then : -- eval "$3=yes" --else -- eval "$3=no" --fi --rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext --fi --eval ac_res=\$$3 -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 --$as_echo "$ac_res" >&6; } -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -- --} # ac_fn_c_check_decl --cat >config.log <<_ACEOF --This file contains any messages produced by compilers while --running configure, to aid debugging if configure makes a mistake. -- --It was created by strace $as_me 4.5.19, which was --generated by GNU Autoconf 2.64. Invocation command line was -- -- $ $0 $@ -- --_ACEOF --exec 5>>config.log --{ --cat <<_ASUNAME --## --------- ## --## Platform. ## --## --------- ## -- --hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` --uname -m = `(uname -m) 2>/dev/null || echo unknown` --uname -r = `(uname -r) 2>/dev/null || echo unknown` --uname -s = `(uname -s) 2>/dev/null || echo unknown` --uname -v = `(uname -v) 2>/dev/null || echo unknown` -- --/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` --/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` -- --/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` --/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` --/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` --/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` --/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` --/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` --/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` -- --_ASUNAME -- --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- $as_echo "PATH: $as_dir" -- done --IFS=$as_save_IFS -- --} >&5 -- --cat >&5 <<_ACEOF -- -- --## ----------- ## --## Core tests. ## --## ----------- ## -- --_ACEOF -- -- --# Keep a trace of the command line. --# Strip out --no-create and --no-recursion so they do not pile up. --# Strip out --silent because we don't want to record it for future runs. --# Also quote any args containing shell meta-characters. --# Make two passes to allow for proper duplicate-argument suppression. --ac_configure_args= --ac_configure_args0= --ac_configure_args1= --ac_must_keep_next=false --for ac_pass in 1 2 --do -- for ac_arg -- do -- case $ac_arg in -- -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -- -q | -quiet | --quiet | --quie | --qui | --qu | --q \ -- | -silent | --silent | --silen | --sile | --sil) -- continue ;; -- *\'*) -- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; -- esac -- case $ac_pass in -- 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; -- 2) -- as_fn_append ac_configure_args1 " '$ac_arg'" -- if test $ac_must_keep_next = true; then -- ac_must_keep_next=false # Got value, back to normal. -- else -- case $ac_arg in -- *=* | --config-cache | -C | -disable-* | --disable-* \ -- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ -- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ -- | -with-* | --with-* | -without-* | --without-* | --x) -- case "$ac_configure_args0 " in -- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; -- esac -- ;; -- -* ) ac_must_keep_next=true ;; -- esac -- fi -- as_fn_append ac_configure_args " '$ac_arg'" -- ;; -- esac -- done --done --{ ac_configure_args0=; unset ac_configure_args0;} --{ ac_configure_args1=; unset ac_configure_args1;} -- --# When interrupted or exit'd, cleanup temporary files, and complete --# config.log. We remove comments because anyway the quotes in there --# would cause problems or look ugly. --# WARNING: Use '\'' to represent an apostrophe within the trap. --# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. --trap 'exit_status=$? -- # Save into config.log some information that might help in debugging. -- { -- echo -+# When interrupted or exit'd, cleanup temporary files, and complete -+# config.log. We remove comments because anyway the quotes in there -+# would cause problems or look ugly. -+# WARNING: Use '\'' to represent an apostrophe within the trap. -+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -+trap 'exit_status=$? -+ # Save into config.log some information that might help in debugging. -+ { -+ echo - - cat <<\_ASBOX - ## ---------------- ## -@@ -2053,13 +1608,13 @@ - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( -- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -+ *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 - $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( -- *) { eval $ac_var=; unset $ac_var;} ;; -+ *) $as_unset $ac_var ;; - esac ;; - esac - done -@@ -2131,39 +1686,37 @@ - exit $exit_status - ' 0 - for ac_signal in 1 2 13 15; do -- trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -+ trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal - done - ac_signal=0 - - # confdefs.h avoids OS command line length limits that DEFS can exceed. - rm -f -r conftest* confdefs.h - --$as_echo "/* confdefs.h */" > confdefs.h -- - # Predefined preprocessor variables. - - cat >>confdefs.h <<_ACEOF - #define PACKAGE_NAME "$PACKAGE_NAME" - _ACEOF - -+ - cat >>confdefs.h <<_ACEOF - #define PACKAGE_TARNAME "$PACKAGE_TARNAME" - _ACEOF - -+ - cat >>confdefs.h <<_ACEOF - #define PACKAGE_VERSION "$PACKAGE_VERSION" - _ACEOF - -+ - cat >>confdefs.h <<_ACEOF - #define PACKAGE_STRING "$PACKAGE_STRING" - _ACEOF - --cat >>confdefs.h <<_ACEOF --#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" --_ACEOF - - cat >>confdefs.h <<_ACEOF --#define PACKAGE_URL "$PACKAGE_URL" -+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" - _ACEOF - - -@@ -2184,7 +1737,7 @@ - do - test "x$ac_site_file" = xNONE && continue - if test -r "$ac_site_file"; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -+ { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 - $as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" -@@ -2195,7 +1748,7 @@ - # Some versions of bash will fail to source /dev/null (special - # files actually), so we avoid doing that. - if test -f "$cache_file"; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -+ { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5 - $as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; -@@ -2203,7 +1756,7 @@ - esac - fi - else -- { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -+ { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5 - $as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file - fi -@@ -2218,11 +1771,11 @@ - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) -- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -+ { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 - $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) -- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -+ { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 - $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; -@@ -2232,17 +1785,17 @@ - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -+ { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 - $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else -- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -+ { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 - $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi -- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -+ { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5 - $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} -- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -+ { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5 - $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac -@@ -2254,20 +1807,43 @@ - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. -- *) as_fn_append ac_configure_args " '$ac_arg'" ;; -+ *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; - esac - fi - done - if $ac_cache_corrupted; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -+ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -+ { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 - $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} -- as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 -+$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} -+ { (exit 1); exit 1; }; } - fi --## -------------------- ## --## Main body of script. ## --## -------------------- ## -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - - ac_ext=c - ac_cpp='$CPP $CPPFLAGS' -@@ -2279,16 +1855,24 @@ - - ac_aux_dir= - for ac_dir in . "$srcdir"/.; do -- for ac_t in install-sh install.sh shtool; do -- if test -f "$ac_dir/$ac_t"; then -- ac_aux_dir=$ac_dir -- ac_install_sh="$ac_aux_dir/$ac_t -c" -- break 2 -- fi -- done -+ if test -f "$ac_dir/install-sh"; then -+ ac_aux_dir=$ac_dir -+ ac_install_sh="$ac_aux_dir/install-sh -c" -+ break -+ elif test -f "$ac_dir/install.sh"; then -+ ac_aux_dir=$ac_dir -+ ac_install_sh="$ac_aux_dir/install.sh -c" -+ break -+ elif test -f "$ac_dir/shtool"; then -+ ac_aux_dir=$ac_dir -+ ac_install_sh="$ac_aux_dir/shtool install -c" -+ break -+ fi - done - if test -z "$ac_aux_dir"; then -- as_fn_error "cannot find install-sh, install.sh, or shtool in . \"$srcdir\"/." "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in . \"$srcdir\"/." >&5 -+$as_echo "$as_me: error: cannot find install-sh or install.sh in . \"$srcdir\"/." >&2;} -+ { (exit 1); exit 1; }; } - fi - - # These three variables are undocumented and unsupported, -@@ -2318,10 +1902,10 @@ - # OS/2's system install, which has a completely different semantic - # ./install, which can be erroneously created by make from ./install.sh. - # Reject install programs that cannot install multiple files. --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -+{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 - $as_echo_n "checking for a BSD-compatible install... " >&6; } - if test -z "$INSTALL"; then --if test "${ac_cv_path_install+set}" = set; then : -+if test "${ac_cv_path_install+set}" = set; then - $as_echo_n "(cached) " >&6 - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -@@ -2329,11 +1913,11 @@ - do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. -- # Account for people who put trailing slashes in PATH elements. --case $as_dir/ in #(( -- ./ | .// | /[cC]/* | \ -+ # Account for people who put trailing slashes in PATH elements. -+case $as_dir/ in -+ ./ | .// | /cC/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ -- ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ -+ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. -@@ -2370,7 +1954,7 @@ - ;; - esac - -- done -+done - IFS=$as_save_IFS - - rm -rf conftest.one conftest.two conftest.dir -@@ -2386,7 +1970,7 @@ - INSTALL=$ac_install_sh - fi - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -+{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5 - $as_echo "$INSTALL" >&6; } - - # Use test -z because SunOS4 sh mishandles braces in ${var-val}. -@@ -2397,7 +1981,7 @@ - - test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 -+{ $as_echo "$as_me:$LINENO: checking whether build environment is sane" >&5 - $as_echo_n "checking whether build environment is sane... " >&6; } - # Just in case - sleep 1 -@@ -2408,11 +1992,15 @@ - ' - case `pwd` in - *[\\\"\#\$\&\'\`$am_lf]*) -- as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; -+ { { $as_echo "$as_me:$LINENO: error: unsafe absolute working directory name" >&5 -+$as_echo "$as_me: error: unsafe absolute working directory name" >&2;} -+ { (exit 1); exit 1; }; };; - esac - case $srcdir in - *[\\\"\#\$\&\'\`$am_lf\ \ ]*) -- as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; -+ { { $as_echo "$as_me:$LINENO: error: unsafe srcdir value: \`$srcdir'" >&5 -+$as_echo "$as_me: error: unsafe srcdir value: \`$srcdir'" >&2;} -+ { (exit 1); exit 1; }; };; - esac - - # Do `set' in a subshell so we don't clobber the current shell's -@@ -2434,8 +2022,11 @@ - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". -- as_fn_error "ls -t appears to fail. Make sure there is not a broken --alias in your environment" "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken -+alias in your environment" >&5 -+$as_echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken -+alias in your environment" >&2;} -+ { (exit 1); exit 1; }; } - fi - - test "$2" = conftest.file -@@ -2444,10 +2035,13 @@ - # Ok. - : - else -- as_fn_error "newly created file is older than distributed files! --Check your system clock" "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files! -+Check your system clock" >&5 -+$as_echo "$as_me: error: newly created file is older than distributed files! -+Check your system clock" >&2;} -+ { (exit 1); exit 1; }; } - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -+{ $as_echo "$as_me:$LINENO: result: yes" >&5 - $as_echo "yes" >&6; } - test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" -@@ -2475,7 +2069,7 @@ - am_missing_run="$MISSING --run " - else - am_missing_run= -- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 -+ { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 - $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} - fi - -@@ -2496,9 +2090,9 @@ - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. - set dummy ${ac_tool_prefix}strip; ac_word=$2 --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_STRIP+set}" = set; then : -+if test "${ac_cv_prog_STRIP+set}" = set; then - $as_echo_n "(cached) " >&6 - else - if test -n "$STRIP"; then -@@ -2509,24 +2103,24 @@ - do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -+ for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" -- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done -- done -+done - IFS=$as_save_IFS - - fi - fi - STRIP=$ac_cv_prog_STRIP - if test -n "$STRIP"; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -+ { $as_echo "$as_me:$LINENO: result: $STRIP" >&5 - $as_echo "$STRIP" >&6; } - else -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+ { $as_echo "$as_me:$LINENO: result: no" >&5 - $as_echo "no" >&6; } - fi - -@@ -2536,9 +2130,9 @@ - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. - set dummy strip; ac_word=$2 --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : -+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - $as_echo_n "(cached) " >&6 - else - if test -n "$ac_ct_STRIP"; then -@@ -2549,24 +2143,24 @@ - do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -+ for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" -- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done -- done -+done - IFS=$as_save_IFS - - fi - fi - ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP - if test -n "$ac_ct_STRIP"; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -+ { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 - $as_echo "$ac_ct_STRIP" >&6; } - else -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+ { $as_echo "$as_me:$LINENO: result: no" >&5 - $as_echo "no" >&6; } - fi - -@@ -2575,7 +2169,7 @@ - else - case $cross_compiling:$ac_tool_warned in - yes:) --{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 - $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} - ac_tool_warned=yes ;; - esac -@@ -2588,10 +2182,10 @@ - fi - INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -+{ $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 - $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } - if test -z "$MKDIR_P"; then -- if test "${ac_cv_path_mkdir+set}" = set; then : -+ if test "${ac_cv_path_mkdir+set}" = set; then - $as_echo_n "(cached) " >&6 - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -@@ -2599,7 +2193,7 @@ - do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. -- for ac_prog in mkdir gmkdir; do -+ for ac_prog in mkdir gmkdir; do - for ac_exec_ext in '' $ac_executable_extensions; do - { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( -@@ -2611,7 +2205,7 @@ - esac - done - done -- done -+done - IFS=$as_save_IFS - - fi -@@ -2627,7 +2221,7 @@ - MKDIR_P="$ac_install_sh -d" - fi - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -+{ $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5 - $as_echo "$MKDIR_P" >&6; } - - mkdir_p="$MKDIR_P" -@@ -2640,9 +2234,9 @@ - do - # Extract the first word of "$ac_prog", so it can be a program name with args. - set dummy $ac_prog; ac_word=$2 --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_AWK+set}" = set; then : -+if test "${ac_cv_prog_AWK+set}" = set; then - $as_echo_n "(cached) " >&6 - else - if test -n "$AWK"; then -@@ -2653,24 +2247,24 @@ - do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -+ for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AWK="$ac_prog" -- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done -- done -+done - IFS=$as_save_IFS - - fi - fi - AWK=$ac_cv_prog_AWK - if test -n "$AWK"; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -+ { $as_echo "$as_me:$LINENO: result: $AWK" >&5 - $as_echo "$AWK" >&6; } - else -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+ { $as_echo "$as_me:$LINENO: result: no" >&5 - $as_echo "no" >&6; } - fi - -@@ -2678,11 +2272,11 @@ - test -n "$AWK" && break - done - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -+{ $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 - $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } - set x ${MAKE-make} - ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` --if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : -+if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 - else - cat >conftest.make <<\_ACEOF -@@ -2700,11 +2294,11 @@ - rm -f conftest.make - fi - if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -+ { $as_echo "$as_me:$LINENO: result: yes" >&5 - $as_echo "yes" >&6; } - SET_MAKE= - else -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+ { $as_echo "$as_me:$LINENO: result: no" >&5 - $as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" - fi -@@ -2724,7 +2318,9 @@ - am__isrc=' -I$(srcdir)' - # test to see if srcdir already configured - if test -f $srcdir/config.status; then -- as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 -+$as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} -+ { (exit 1); exit 1; }; } - fi - fi - -@@ -2781,16 +2377,16 @@ - - - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 -+{ $as_echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 - $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } - # Check whether --enable-maintainer-mode was given. --if test "${enable_maintainer_mode+set}" = set; then : -+if test "${enable_maintainer_mode+set}" = set; then - enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval - else - USE_MAINTAINER_MODE=no - fi - -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 -+ { $as_echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 - $as_echo "$USE_MAINTAINER_MODE" >&6; } - if test $USE_MAINTAINER_MODE = yes; then - MAINTAINER_MODE_TRUE= -@@ -2805,27 +2401,35 @@ - - # Make sure we can run config.sub. - $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || -- as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 -+$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} -+ { (exit 1); exit 1; }; } - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -+{ $as_echo "$as_me:$LINENO: checking build system type" >&5 - $as_echo_n "checking build system type... " >&6; } --if test "${ac_cv_build+set}" = set; then : -+if test "${ac_cv_build+set}" = set; then - $as_echo_n "(cached) " >&6 - else - ac_build_alias=$build_alias - test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` - test "x$ac_build_alias" = x && -- as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 -+$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;} -+ { (exit 1); exit 1; }; } - ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || -- as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 -+$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} -+ { (exit 1); exit 1; }; } - - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5 - $as_echo "$ac_cv_build" >&6; } - case $ac_cv_build in - *-*-*) ;; --*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; -+*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 -+$as_echo "$as_me: error: invalid value of canonical build" >&2;} -+ { (exit 1); exit 1; }; };; - esac - build=$ac_cv_build - ac_save_IFS=$IFS; IFS='-' -@@ -2841,24 +2445,28 @@ - case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -+{ $as_echo "$as_me:$LINENO: checking host system type" >&5 - $as_echo_n "checking host system type... " >&6; } --if test "${ac_cv_host+set}" = set; then : -+if test "${ac_cv_host+set}" = set; then - $as_echo_n "(cached) " >&6 - else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build - else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || -- as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 -+$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} -+ { (exit 1); exit 1; }; } - fi - - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5 - $as_echo "$ac_cv_host" >&6; } - case $ac_cv_host in - *-*-*) ;; --*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; -+*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 -+$as_echo "$as_me: error: invalid value of canonical host" >&2;} -+ { (exit 1); exit 1; }; };; - esac - host=$ac_cv_host - ac_save_IFS=$IFS; IFS='-' -@@ -2875,35 +2483,45 @@ - - - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for supported operating system" >&5 -+{ $as_echo "$as_me:$LINENO: checking for supported operating system" >&5 - $as_echo_n "checking for supported operating system... " >&6; } - case "$host_os" in - *linux*) - opsys=linux - --$as_echo "#define LINUX 1" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define LINUX 1 -+_ACEOF - - ;; - sunos4*) - opsys=sunos4 - --$as_echo "#define SUNOS4 1" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define SUNOS4 1 -+_ACEOF - - ;; - solaris2* | sysv[45]* | irix[56]*) - opsys=svr4 - --$as_echo "#define SVR4 1" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define SVR4 1 -+_ACEOF - - case "$host_os" in - sysv4.2uw*) - --$as_echo "#define UNIXWARE 2" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define UNIXWARE 2 -+_ACEOF - - ;; - sysv5*) - --$as_echo "#define UNIXWARE 7" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define UNIXWARE 7 -+_ACEOF - - ;; - esac -@@ -2911,142 +2529,186 @@ - freebsd*) - opsys=freebsd - --$as_echo "#define FREEBSD 1" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define FREEBSD 1 -+_ACEOF - - ;; - *) -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: NO!" >&5 -+ { $as_echo "$as_me:$LINENO: result: NO!" >&5 - $as_echo "NO!" >&6; } -- as_fn_error "operating system $host_os is not supported by strace" "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: operating system $host_os is not supported by strace" >&5 -+$as_echo "$as_me: error: operating system $host_os is not supported by strace" >&2;} -+ { (exit 1); exit 1; }; } - ;; - esac --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $opsys" >&5 -+{ $as_echo "$as_me:$LINENO: result: $opsys" >&5 - $as_echo "$opsys" >&6; } - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for supported architecture" >&5 -+{ $as_echo "$as_me:$LINENO: checking for supported architecture" >&5 - $as_echo_n "checking for supported architecture... " >&6; } - case "$host_cpu" in - bfin) - arch=bfin - --$as_echo "#define BFIN 1" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define BFIN 1 -+_ACEOF - - ;; - i[3456]86|pentium) - arch=i386 - --$as_echo "#define I386 1" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define I386 1 -+_ACEOF - - ;; - ia64) - arch=ia64 - --$as_echo "#define IA64 1" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define IA64 1 -+_ACEOF - - ;; - m68k) - arch=m68k - --$as_echo "#define M68K 1" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define M68K 1 -+_ACEOF - - ;; - sparc64*) - arch=sparc64 - --$as_echo "#define SPARC64 1" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define SPARC64 1 -+_ACEOF - - ;; - sparc*) - arch=sparc - --$as_echo "#define SPARC 1" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define SPARC 1 -+_ACEOF - - ;; - mips*) - arch=mips - --$as_echo "#define MIPS 1" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define MIPS 1 -+_ACEOF - - ;; - alpha*) - arch=alpha - --$as_echo "#define ALPHA 1" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define ALPHA 1 -+_ACEOF - - ;; - powerpc*) - arch=powerpc - --$as_echo "#define POWERPC 1" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define POWERPC 1 -+_ACEOF - - ;; - arm*) - arch=arm - --$as_echo "#define ARM 1" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define ARM 1 -+_ACEOF - - ;; - avr32*) - arch=avr32 - --$as_echo "#define AVR32 1" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define AVR32 1 -+_ACEOF - - ;; - s390) - arch=s390 - --$as_echo "#define S390 1" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define S390 1 -+_ACEOF - - ;; - s390x) - arch=s390x - --$as_echo "#define S390X 1" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define S390X 1 -+_ACEOF - - ;; - hppa*|parisc*) - arch=hppa - --$as_echo "#define HPPA 1" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define HPPA 1 -+_ACEOF - - ;; - sh64*) - arch=sh64 - --$as_echo "#define SH64 1" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define SH64 1 -+_ACEOF - - ;; - sh*) - arch=sh - --$as_echo "#define SH 1" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define SH 1 -+_ACEOF - - ;; - x86?64*) - arch=x86_64 - --$as_echo "#define X86_64 1" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define X86_64 1 -+_ACEOF - - ;; - cris|crisv10) - arch=crisv10 - --$as_echo "#define CRISV10 1" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define CRISV10 1 -+_ACEOF - - ;; - crisv32) - arch=crisv32 - --$as_echo "#define CRISV32 1" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define CRISV32 1 -+_ACEOF - - ;; - *) -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: NO!" >&5 -+ { $as_echo "$as_me:$LINENO: result: NO!" >&5 - $as_echo "NO!" >&6; } -- as_fn_error "architecture $host_cpu is not supported by strace" "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: architecture $host_cpu is not supported by strace" >&5 -+$as_echo "$as_me: error: architecture $host_cpu is not supported by strace" >&2;} -+ { (exit 1); exit 1; }; } - ;; - esac --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $arch" >&5 -+{ $as_echo "$as_me:$LINENO: result: $arch" >&5 - $as_echo "$arch" >&6; } - - -@@ -3109,9 +2771,9 @@ - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. - set dummy ${ac_tool_prefix}gcc; ac_word=$2 --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_CC+set}" = set; then : -+if test "${ac_cv_prog_CC+set}" = set; then - $as_echo_n "(cached) " >&6 - else - if test -n "$CC"; then -@@ -3122,24 +2784,24 @@ - do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -+ for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" -- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done -- done -+done - IFS=$as_save_IFS - - fi - fi - CC=$ac_cv_prog_CC - if test -n "$CC"; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -+ { $as_echo "$as_me:$LINENO: result: $CC" >&5 - $as_echo "$CC" >&6; } - else -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+ { $as_echo "$as_me:$LINENO: result: no" >&5 - $as_echo "no" >&6; } - fi - -@@ -3149,9 +2811,9 @@ - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. - set dummy gcc; ac_word=$2 --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : -+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - $as_echo_n "(cached) " >&6 - else - if test -n "$ac_ct_CC"; then -@@ -3162,24 +2824,24 @@ - do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -+ for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" -- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done -- done -+done - IFS=$as_save_IFS - - fi - fi - ac_ct_CC=$ac_cv_prog_ac_ct_CC - if test -n "$ac_ct_CC"; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -+ { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 - $as_echo "$ac_ct_CC" >&6; } - else -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+ { $as_echo "$as_me:$LINENO: result: no" >&5 - $as_echo "no" >&6; } - fi - -@@ -3188,7 +2850,7 @@ - else - case $cross_compiling:$ac_tool_warned in - yes:) --{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 - $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} - ac_tool_warned=yes ;; - esac -@@ -3202,9 +2864,9 @@ - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. - set dummy ${ac_tool_prefix}cc; ac_word=$2 --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_CC+set}" = set; then : -+if test "${ac_cv_prog_CC+set}" = set; then - $as_echo_n "(cached) " >&6 - else - if test -n "$CC"; then -@@ -3215,24 +2877,24 @@ - do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -+ for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" -- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done -- done -+done - IFS=$as_save_IFS - - fi - fi - CC=$ac_cv_prog_CC - if test -n "$CC"; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -+ { $as_echo "$as_me:$LINENO: result: $CC" >&5 - $as_echo "$CC" >&6; } - else -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+ { $as_echo "$as_me:$LINENO: result: no" >&5 - $as_echo "no" >&6; } - fi - -@@ -3242,9 +2904,9 @@ - if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. - set dummy cc; ac_word=$2 --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_CC+set}" = set; then : -+if test "${ac_cv_prog_CC+set}" = set; then - $as_echo_n "(cached) " >&6 - else - if test -n "$CC"; then -@@ -3256,18 +2918,18 @@ - do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -+ for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" -- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done -- done -+done - IFS=$as_save_IFS - - if test $ac_prog_rejected = yes; then -@@ -3286,10 +2948,10 @@ - fi - CC=$ac_cv_prog_CC - if test -n "$CC"; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -+ { $as_echo "$as_me:$LINENO: result: $CC" >&5 - $as_echo "$CC" >&6; } - else -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+ { $as_echo "$as_me:$LINENO: result: no" >&5 - $as_echo "no" >&6; } - fi - -@@ -3301,9 +2963,9 @@ - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. - set dummy $ac_tool_prefix$ac_prog; ac_word=$2 --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_CC+set}" = set; then : -+if test "${ac_cv_prog_CC+set}" = set; then - $as_echo_n "(cached) " >&6 - else - if test -n "$CC"; then -@@ -3314,24 +2976,24 @@ - do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -+ for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" -- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done -- done -+done - IFS=$as_save_IFS - - fi - fi - CC=$ac_cv_prog_CC - if test -n "$CC"; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -+ { $as_echo "$as_me:$LINENO: result: $CC" >&5 - $as_echo "$CC" >&6; } - else -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+ { $as_echo "$as_me:$LINENO: result: no" >&5 - $as_echo "no" >&6; } - fi - -@@ -3345,9 +3007,9 @@ - do - # Extract the first word of "$ac_prog", so it can be a program name with args. - set dummy $ac_prog; ac_word=$2 --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : -+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - $as_echo_n "(cached) " >&6 - else - if test -n "$ac_ct_CC"; then -@@ -3358,24 +3020,24 @@ - do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -+ for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" -- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done -- done -+done - IFS=$as_save_IFS - - fi - fi - ac_ct_CC=$ac_cv_prog_ac_ct_CC - if test -n "$ac_ct_CC"; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -+ { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 - $as_echo "$ac_ct_CC" >&6; } - else -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+ { $as_echo "$as_me:$LINENO: result: no" >&5 - $as_echo "no" >&6; } - fi - -@@ -3388,7 +3050,7 @@ - else - case $cross_compiling:$ac_tool_warned in - yes:) --{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 - $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} - ac_tool_warned=yes ;; - esac -@@ -3399,55 +3061,73 @@ - fi - - --test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -+test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} --as_fn_error "no acceptable C compiler found in \$PATH --See \`config.log' for more details." "$LINENO" 5; } -+{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH -+See \`config.log' for more details." >&5 -+$as_echo "$as_me: error: no acceptable C compiler found in \$PATH -+See \`config.log' for more details." >&2;} -+ { (exit 1); exit 1; }; }; } - - # Provide some information about the compiler. --$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -+$as_echo "$as_me:$LINENO: checking for C compiler version" >&5 - set X $ac_compile - ac_compiler=$2 --for ac_option in --version -v -V -qversion; do -- { { ac_try="$ac_compiler $ac_option >&5" -+{ (ac_try="$ac_compiler --version >&5" - case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; - esac --eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" --$as_echo "$ac_try_echo"; } >&5 -- (eval "$ac_compiler $ac_option >&5") 2>conftest.err -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? -- if test -s conftest.err; then -- sed '10a\ --... rest of stderr output deleted ... -- 10q' conftest.err >conftest.er1 -- cat conftest.er1 >&5 -- rm -f conftest.er1 conftest.err -- fi -- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -- test $ac_status = 0; } --done -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } -+{ (ac_try="$ac_compiler -v >&5" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compiler -v >&5") 2>&5 -+ ac_status=$? -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } -+{ (ac_try="$ac_compiler -V >&5" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compiler -V >&5") 2>&5 -+ ac_status=$? -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } - --cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ --#include -+ - int - main () - { --FILE *f = fopen ("conftest.out", "w"); -- return ferror (f) || fclose (f) != 0; - - ; - return 0; - } - _ACEOF - ac_clean_files_save=$ac_clean_files --ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.out" -+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" - # Try to create an executable without -o first, disregard a.out. - # It will help us diagnose broken compilers, and finding out an intuition - # of exeext. --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -+{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 - $as_echo_n "checking for C compiler default output file name... " >&6; } - ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -@@ -3464,17 +3144,17 @@ - done - rm -f $ac_rmfiles - --if { { ac_try="$ac_link_default" -+if { (ac_try="$ac_link_default" - case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; - esac --eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" --$as_echo "$ac_try_echo"; } >&5 -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? -- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -- test $ac_status = 0; }; then : -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); }; then - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. - # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' - # in a Makefile. We should not override ac_cv_exeext if it was cached, -@@ -3491,7 +3171,7 @@ - # certainly right. - break;; - *.* ) -- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; -+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi -@@ -3510,75 +3190,84 @@ - else - ac_file='' - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -+ -+{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5 - $as_echo "$ac_file" >&6; } --if test -z "$ac_file"; then : -+if test -z "$ac_file"; then - $as_echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -+{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} --{ as_fn_set_status 77 --as_fn_error "C compiler cannot create executables --See \`config.log' for more details." "$LINENO" 5; }; } -+{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables -+See \`config.log' for more details." >&5 -+$as_echo "$as_me: error: C compiler cannot create executables -+See \`config.log' for more details." >&2;} -+ { (exit 77); exit 77; }; }; } - fi -+ - ac_exeext=$ac_cv_exeext - - # Check that the compiler produces executables we can run. If not, either - # the compiler is broken, or we cross compile. --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -+{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5 - $as_echo_n "checking whether the C compiler works... " >&6; } -+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 - # If not cross compiling, check that we can run a simple program. - if test "$cross_compiling" != yes; then - if { ac_try='./$ac_file' -- { { case "(($ac_try" in -+ { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; - esac --eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" --$as_echo "$ac_try_echo"; } >&5 -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? -- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -- test $ac_status = 0; }; }; then -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else -- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -+ { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} --as_fn_error "cannot run C compiled programs. -+{ { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs. -+If you meant to cross compile, use \`--host'. -+See \`config.log' for more details." >&5 -+$as_echo "$as_me: error: cannot run C compiled programs. - If you meant to cross compile, use \`--host'. --See \`config.log' for more details." "$LINENO" 5; } -+See \`config.log' for more details." >&2;} -+ { (exit 1); exit 1; }; }; } - fi - fi - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -+{ $as_echo "$as_me:$LINENO: result: yes" >&5 - $as_echo "yes" >&6; } - --rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out -+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out - ac_clean_files=$ac_clean_files_save - # Check that the compiler produces executables we can run. If not, either - # the compiler is broken, or we cross compile. --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -+{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 - $as_echo_n "checking whether we are cross compiling... " >&6; } --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -+{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5 - $as_echo "$cross_compiling" >&6; } - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -+{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5 - $as_echo_n "checking for suffix of executables... " >&6; } --if { { ac_try="$ac_link" -+if { (ac_try="$ac_link" - case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; - esac --eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" --$as_echo "$ac_try_echo"; } >&5 -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? -- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -- test $ac_status = 0; }; then : -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); }; then - # If both `conftest.exe' and `conftest' are `present' (well, observable) - # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will - # work properly (i.e., refer to `conftest.exe'), while it won't with -@@ -3593,24 +3282,32 @@ - esac - done - else -- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -+ { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} --as_fn_error "cannot compute suffix of executables: cannot compile and link --See \`config.log' for more details." "$LINENO" 5; } -+{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link -+See \`config.log' for more details." >&5 -+$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link -+See \`config.log' for more details." >&2;} -+ { (exit 1); exit 1; }; }; } - fi -+ - rm -f conftest$ac_cv_exeext --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 - $as_echo "$ac_cv_exeext" >&6; } - - rm -f conftest.$ac_ext - EXEEXT=$ac_cv_exeext - ac_exeext=$EXEEXT --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -+{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5 - $as_echo_n "checking for suffix of object files... " >&6; } --if test "${ac_cv_objext+set}" = set; then : -+if test "${ac_cv_objext+set}" = set; then - $as_echo_n "(cached) " >&6 - else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - - int -@@ -3622,17 +3319,17 @@ - } - _ACEOF - rm -f conftest.o conftest.obj --if { { ac_try="$ac_compile" -+if { (ac_try="$ac_compile" - case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; - esac --eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" --$as_echo "$ac_try_echo"; } >&5 -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? -- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -- test $ac_status = 0; }; then : -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); }; then - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in -@@ -3645,23 +3342,31 @@ - $as_echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -+{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} --as_fn_error "cannot compute suffix of object files: cannot compile --See \`config.log' for more details." "$LINENO" 5; } -+{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile -+See \`config.log' for more details." >&5 -+$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile -+See \`config.log' for more details." >&2;} -+ { (exit 1); exit 1; }; }; } - fi -+ - rm -f conftest.$ac_cv_objext conftest.$ac_ext - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 - $as_echo "$ac_cv_objext" >&6; } - OBJEXT=$ac_cv_objext - ac_objext=$OBJEXT --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -+{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 - $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } --if test "${ac_cv_c_compiler_gnu+set}" = set; then : -+if test "${ac_cv_c_compiler_gnu+set}" = set; then - $as_echo_n "(cached) " >&6 - else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - - int -@@ -3675,16 +3380,37 @@ - return 0; - } - _ACEOF --if ac_fn_c_try_compile "$LINENO"; then : -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_compiler_gnu=yes - else -- ac_compiler_gnu=no -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_compiler_gnu=no - fi -+ - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cv_c_compiler_gnu=$ac_compiler_gnu - - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 - $as_echo "$ac_cv_c_compiler_gnu" >&6; } - if test $ac_compiler_gnu = yes; then - GCC=yes -@@ -3693,16 +3419,20 @@ - fi - ac_test_CFLAGS=${CFLAGS+set} - ac_save_CFLAGS=$CFLAGS --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -+{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 - $as_echo_n "checking whether $CC accepts -g... " >&6; } --if test "${ac_cv_prog_cc_g+set}" = set; then : -+if test "${ac_cv_prog_cc_g+set}" = set; then - $as_echo_n "(cached) " >&6 - else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - - int -@@ -3713,11 +3443,35 @@ - return 0; - } - _ACEOF --if ac_fn_c_try_compile "$LINENO"; then : -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_g=yes - else -- CFLAGS="" -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ CFLAGS="" -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - - int -@@ -3728,12 +3482,36 @@ - return 0; - } - _ACEOF --if ac_fn_c_try_compile "$LINENO"; then : -- -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ : - else -- ac_c_werror_flag=$ac_save_c_werror_flag -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - - int -@@ -3744,17 +3522,42 @@ - return 0; - } - _ACEOF --if ac_fn_c_try_compile "$LINENO"; then : -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_g=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ - fi -+ - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi -+ - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi -+ - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 - $as_echo "$ac_cv_prog_cc_g" >&6; } - if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -@@ -3771,14 +3574,18 @@ - CFLAGS= - fi - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -+{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 - $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } --if test "${ac_cv_prog_cc_c89+set}" = set; then : -+if test "${ac_cv_prog_cc_c89+set}" = set; then - $as_echo_n "(cached) " >&6 - else - ac_cv_prog_cc_c89=no - ac_save_CC=$CC --cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include - #include -@@ -3835,9 +3642,32 @@ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" - do - CC="$ac_save_CC $ac_arg" -- if ac_fn_c_try_compile "$LINENO"; then : -+ rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_c89=$ac_arg -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ - fi -+ - rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break - done -@@ -3848,19 +3678,17 @@ - # AC_CACHE_VAL - case "x$ac_cv_prog_cc_c89" in - x) -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -+ { $as_echo "$as_me:$LINENO: result: none needed" >&5 - $as_echo "none needed" >&6; } ;; - xno) -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -+ { $as_echo "$as_me:$LINENO: result: unsupported" >&5 - $as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -+ { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 - $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; - esac --if test "x$ac_cv_prog_cc_c89" != xno; then : - --fi - - ac_ext=c - ac_cpp='$CPP $CPPFLAGS' -@@ -3879,7 +3707,7 @@ - .PHONY: am__doit - END - # If we don't find an include directive, just comment out the code. --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -+{ $as_echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 - $as_echo_n "checking for style of include used by $am_make... " >&6; } - am__include="#" - am__quote= -@@ -3907,12 +3735,12 @@ - fi - - --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -+{ $as_echo "$as_me:$LINENO: result: $_am_result" >&5 - $as_echo "$_am_result" >&6; } - rm -f confinc confmf - - # Check whether --enable-dependency-tracking was given. --if test "${enable_dependency_tracking+set}" = set; then : -+if test "${enable_dependency_tracking+set}" = set; then - enableval=$enable_dependency_tracking; - fi - -@@ -3932,9 +3760,9 @@ - - depcc="$CC" am_compiler_list= - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -+{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 - $as_echo_n "checking dependency style of $depcc... " >&6; } --if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : -+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then - $as_echo_n "(cached) " >&6 - else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then -@@ -4042,7 +3870,7 @@ - fi - - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -+{ $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 - $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } - CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - -@@ -4063,14 +3891,14 @@ - ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' - ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' - ac_compiler_gnu=$ac_cv_c_compiler_gnu --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -+{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 - $as_echo_n "checking how to run the C preprocessor... " >&6; } - # On Suns, sometimes $CPP names a directory. - if test -n "$CPP" && test -d "$CPP"; then - CPP= - fi - if test -z "$CPP"; then -- if test "${ac_cv_prog_CPP+set}" = set; then : -+ if test "${ac_cv_prog_CPP+set}" = set; then - $as_echo_n "(cached) " >&6 - else - # Double quotes because CPP needs to be expanded -@@ -4085,7 +3913,11 @@ - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #ifdef __STDC__ - # include -@@ -4094,34 +3926,78 @@ - #endif - Syntax error - _ACEOF --if ac_fn_c_try_cpp "$LINENO"; then : -- -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then -+ : - else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ - # Broken: fails on valid input. - continue - fi -+ - rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include - _ACEOF --if ac_fn_c_try_cpp "$LINENO"; then : -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then - # Broken: success on invalid input. - continue - else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ - # Passes both tests. - ac_preproc_ok=: - break - fi -+ - rm -f conftest.err conftest.$ac_ext - - done - # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. - rm -f conftest.err conftest.$ac_ext --if $ac_preproc_ok; then : -+if $ac_preproc_ok; then - break - fi - -@@ -4133,7 +4009,7 @@ - else - ac_cv_prog_CPP=$CPP - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -+{ $as_echo "$as_me:$LINENO: result: $CPP" >&5 - $as_echo "$CPP" >&6; } - ac_preproc_ok=false - for ac_c_preproc_warn_flag in '' yes -@@ -4144,7 +4020,11 @@ - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #ifdef __STDC__ - # include -@@ -4153,40 +4033,87 @@ - #endif - Syntax error - _ACEOF --if ac_fn_c_try_cpp "$LINENO"; then : -- -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then -+ : - else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ - # Broken: fails on valid input. - continue - fi -+ - rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include - _ACEOF --if ac_fn_c_try_cpp "$LINENO"; then : -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then - # Broken: success on invalid input. - continue - else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ - # Passes both tests. - ac_preproc_ok=: - break - fi -+ - rm -f conftest.err conftest.$ac_ext - - done - # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. - rm -f conftest.err conftest.$ac_ext --if $ac_preproc_ok; then : -- -+if $ac_preproc_ok; then -+ : - else -- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -+ { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} --as_fn_error "C preprocessor \"$CPP\" fails sanity check --See \`config.log' for more details." "$LINENO" 5; } -+{ { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check -+See \`config.log' for more details." >&5 -+$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check -+See \`config.log' for more details." >&2;} -+ { (exit 1); exit 1; }; }; } - fi - - ac_ext=c -@@ -4196,9 +4123,9 @@ - ac_compiler_gnu=$ac_cv_c_compiler_gnu - - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -+{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 - $as_echo_n "checking for grep that handles long lines and -e... " >&6; } --if test "${ac_cv_path_GREP+set}" = set; then : -+if test "${ac_cv_path_GREP+set}" = set; then - $as_echo_n "(cached) " >&6 - else - if test -z "$GREP"; then -@@ -4209,7 +4136,7 @@ - do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. -- for ac_prog in grep ggrep; do -+ for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -@@ -4229,7 +4156,7 @@ - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break -- as_fn_arith $ac_count + 1 && ac_count=$as_val -+ ac_count=`expr $ac_count + 1` - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" -@@ -4244,24 +4171,26 @@ - $ac_path_GREP_found && break 3 - done - done -- done -+done - IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then -- as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -+$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} -+ { (exit 1); exit 1; }; } - fi - else - ac_cv_path_GREP=$GREP - fi - - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 - $as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -+{ $as_echo "$as_me:$LINENO: checking for egrep" >&5 - $as_echo_n "checking for egrep... " >&6; } --if test "${ac_cv_path_EGREP+set}" = set; then : -+if test "${ac_cv_path_EGREP+set}" = set; then - $as_echo_n "(cached) " >&6 - else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 -@@ -4275,7 +4204,7 @@ - do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. -- for ac_prog in egrep; do -+ for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue -@@ -4295,7 +4224,7 @@ - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break -- as_fn_arith $ac_count + 1 && ac_count=$as_val -+ ac_count=`expr $ac_count + 1` - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" -@@ -4310,10 +4239,12 @@ - $ac_path_EGREP_found && break 3 - done - done -- done -+done - IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then -- as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -+$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} -+ { (exit 1); exit 1; }; } - fi - else - ac_cv_path_EGREP=$EGREP -@@ -4321,17 +4252,21 @@ - - fi - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 - $as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -+{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5 - $as_echo_n "checking for ANSI C header files... " >&6; } --if test "${ac_cv_header_stdc+set}" = set; then : -+if test "${ac_cv_header_stdc+set}" = set; then - $as_echo_n "(cached) " >&6 - else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include - #include -@@ -4346,23 +4281,48 @@ - return 0; - } - _ACEOF --if ac_fn_c_try_compile "$LINENO"; then : -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_header_stdc=yes - else -- ac_cv_header_stdc=no -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_header_stdc=no - fi -+ - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include - - _ACEOF - if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | -- $EGREP "memchr" >/dev/null 2>&1; then : -- -+ $EGREP "memchr" >/dev/null 2>&1; then -+ : - else - ac_cv_header_stdc=no - fi -@@ -4372,14 +4332,18 @@ - - if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include - - _ACEOF - if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | -- $EGREP "free" >/dev/null 2>&1; then : -- -+ $EGREP "free" >/dev/null 2>&1; then -+ : - else - ac_cv_header_stdc=no - fi -@@ -4389,10 +4353,14 @@ - - if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. -- if test "$cross_compiling" = yes; then : -+ if test "$cross_compiling" = yes; then - : - else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include - #include -@@ -4419,108 +4387,359 @@ - return 0; - } - _ACEOF --if ac_fn_c_try_run "$LINENO"; then : -- -+rm -f conftest$ac_exeext -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_link") 2>&5 -+ ac_status=$? -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext' -+ { (case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_try") 2>&5 -+ ac_status=$? -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); }; }; then -+ : - else -- ac_cv_header_stdc=no -+ $as_echo "$as_me: program exited with status $ac_status" >&5 -+$as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+( exit $ac_status ) -+ac_cv_header_stdc=no - fi --rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ -- conftest.$ac_objext conftest.beam conftest.$ac_ext -+rm -rf conftest.dSYM -+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext - fi - -+ - fi - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 - $as_echo "$ac_cv_header_stdc" >&6; } - if test $ac_cv_header_stdc = yes; then - --$as_echo "#define STDC_HEADERS 1" >>confdefs.h -- --fi -- --# On IRIX 5.3, sys/types and inttypes.h are conflicting. --for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ -- inttypes.h stdint.h unistd.h --do : -- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` --ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default --" --eval as_val=\$$as_ac_Header -- if test "x$as_val" = x""yes; then : -- cat >>confdefs.h <<_ACEOF --#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -+cat >>confdefs.h <<\_ACEOF -+#define STDC_HEADERS 1 - _ACEOF - - fi - --done -- -- -- -- ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" --if test "x$ac_cv_header_minix_config_h" = x""yes; then : -- MINIX=yes --else -- MINIX= --fi -- -+# On IRIX 5.3, sys/types and inttypes.h are conflicting. - -- if test "$MINIX" = yes; then - --$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h - - --$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h - - --$as_echo "#define _MINIX 1" >>confdefs.h - -- fi - - -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 --$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } --if test "${ac_cv_safe_to_define___extensions__+set}" = set; then : -+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ -+ inttypes.h stdint.h unistd.h -+do -+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -+$as_echo_n "checking for $ac_header... " >&6; } -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 - else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ -+$ac_includes_default - --# define __EXTENSIONS__ 1 -- $ac_includes_default --int --main () --{ -- -- ; -- return 0; --} -+#include <$ac_header> - _ACEOF --if ac_fn_c_try_compile "$LINENO"; then : -- ac_cv_safe_to_define___extensions__=yes -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ eval "$as_ac_Header=yes" - else -- ac_cv_safe_to_define___extensions__=no -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ eval "$as_ac_Header=no" -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+ac_res=`eval 'as_val=${'$as_ac_Header'} -+ $as_echo "$as_val"'` -+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -+$as_echo "$ac_res" >&6; } -+as_val=`eval 'as_val=${'$as_ac_Header'} -+ $as_echo "$as_val"'` -+ if test "x$as_val" = x""yes; then -+ cat >>confdefs.h <<_ACEOF -+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -+_ACEOF -+ -+fi -+ -+done -+ -+ -+ -+ if test "${ac_cv_header_minix_config_h+set}" = set; then -+ { $as_echo "$as_me:$LINENO: checking for minix/config.h" >&5 -+$as_echo_n "checking for minix/config.h... " >&6; } -+if test "${ac_cv_header_minix_config_h+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5 -+$as_echo "$ac_cv_header_minix_config_h" >&6; } -+else -+ # Is the header compilable? -+{ $as_echo "$as_me:$LINENO: checking minix/config.h usability" >&5 -+$as_echo_n "checking minix/config.h usability... " >&6; } -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+$ac_includes_default -+#include -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_header_compiler=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_header_compiler=no -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -+$as_echo "$ac_header_compiler" >&6; } -+ -+# Is the header present? -+{ $as_echo "$as_me:$LINENO: checking minix/config.h presence" >&5 -+$as_echo_n "checking minix/config.h presence... " >&6; } -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+_ACEOF -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then -+ ac_header_preproc=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_header_preproc=no -+fi -+ -+rm -f conftest.err conftest.$ac_ext -+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -+$as_echo "$ac_header_preproc" >&6; } -+ -+# So? What about this header? -+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in -+ yes:no: ) -+ { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&5 -+$as_echo "$as_me: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&2;} -+ { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the compiler's result" >&5 -+$as_echo "$as_me: WARNING: minix/config.h: proceeding with the compiler's result" >&2;} -+ ac_header_preproc=yes -+ ;; -+ no:yes:* ) -+ { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: present but cannot be compiled" >&5 -+$as_echo "$as_me: WARNING: minix/config.h: present but cannot be compiled" >&2;} -+ { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: check for missing prerequisite headers?" >&5 -+$as_echo "$as_me: WARNING: minix/config.h: check for missing prerequisite headers?" >&2;} -+ { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: see the Autoconf documentation" >&5 -+$as_echo "$as_me: WARNING: minix/config.h: see the Autoconf documentation" >&2;} -+ { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: section \"Present But Cannot Be Compiled\"" >&5 -+$as_echo "$as_me: WARNING: minix/config.h: section \"Present But Cannot Be Compiled\"" >&2;} -+ { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the preprocessor's result" >&5 -+$as_echo "$as_me: WARNING: minix/config.h: proceeding with the preprocessor's result" >&2;} -+ { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: in the future, the compiler will take precedence" >&5 -+$as_echo "$as_me: WARNING: minix/config.h: in the future, the compiler will take precedence" >&2;} -+ -+ ;; -+esac -+{ $as_echo "$as_me:$LINENO: checking for minix/config.h" >&5 -+$as_echo_n "checking for minix/config.h... " >&6; } -+if test "${ac_cv_header_minix_config_h+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ ac_cv_header_minix_config_h=$ac_header_preproc -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5 -+$as_echo "$ac_cv_header_minix_config_h" >&6; } -+ -+fi -+if test "x$ac_cv_header_minix_config_h" = x""yes; then -+ MINIX=yes -+else -+ MINIX= -+fi -+ -+ -+ if test "$MINIX" = yes; then -+ -+cat >>confdefs.h <<\_ACEOF -+#define _POSIX_SOURCE 1 -+_ACEOF -+ -+ -+cat >>confdefs.h <<\_ACEOF -+#define _POSIX_1_SOURCE 2 -+_ACEOF -+ -+ -+cat >>confdefs.h <<\_ACEOF -+#define _MINIX 1 -+_ACEOF -+ -+ fi -+ -+ -+ -+ { $as_echo "$as_me:$LINENO: checking whether it is safe to define __EXTENSIONS__" >&5 -+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } -+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+ -+# define __EXTENSIONS__ 1 -+ $ac_includes_default -+int -+main () -+{ -+ -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_safe_to_define___extensions__=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_safe_to_define___extensions__=no - fi -+ - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_safe_to_define___extensions__" >&5 - $as_echo "$ac_cv_safe_to_define___extensions__" >&6; } - test $ac_cv_safe_to_define___extensions__ = yes && -- $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h -- -- $as_echo "#define _ALL_SOURCE 1" >>confdefs.h -+ cat >>confdefs.h <<\_ACEOF -+#define __EXTENSIONS__ 1 -+_ACEOF - -- $as_echo "#define _GNU_SOURCE 1" >>confdefs.h -+ cat >>confdefs.h <<\_ACEOF -+#define _ALL_SOURCE 1 -+_ACEOF - -- $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h -+ cat >>confdefs.h <<\_ACEOF -+#define _GNU_SOURCE 1 -+_ACEOF - -- $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h -+ cat >>confdefs.h <<\_ACEOF -+#define _POSIX_PTHREAD_SEMANTICS 1 -+_ACEOF - -+ cat >>confdefs.h <<\_ACEOF -+#define _TANDEM_SOURCE 1 -+_ACEOF - - - - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for primary include directory" >&5 -+{ $as_echo "$as_me:$LINENO: checking for primary include directory" >&5 - $as_echo_n "checking for primary include directory... " >&6; } - includedir=/usr/include - if test -n "$GCC" -@@ -4538,25 +4757,27 @@ - includedir=$new_includedir - fi - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $includedir" >&5 -+{ $as_echo "$as_me:$LINENO: result: $includedir" >&5 - $as_echo "$includedir" >&6; } - - - if test "x$opsys" = "xsunos4" && test "x$arch" = "xsparc" - then -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for valid machine include directory" >&5 -+ { $as_echo "$as_me:$LINENO: checking for valid machine include directory" >&5 - $as_echo_n "checking for valid machine include directory... " >&6; } - if test -d "$includedir/sun4" - then - rm -f machine - ln -s $includedir/sun4 machine -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -+ { $as_echo "$as_me:$LINENO: result: yes" >&5 - $as_echo "yes" >&6; } - --$as_echo "#define SUNOS4_KERNEL_ARCH_KLUDGE 1" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define SUNOS4_KERNEL_ARCH_KLUDGE 1 -+_ACEOF - - else -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+ { $as_echo "$as_me:$LINENO: result: no" >&5 - $as_echo "no" >&6; } - fi - fi -@@ -4585,14 +4806,14 @@ - ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' - ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' - ac_compiler_gnu=$ac_cv_c_compiler_gnu --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -+{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 - $as_echo_n "checking how to run the C preprocessor... " >&6; } - # On Suns, sometimes $CPP names a directory. - if test -n "$CPP" && test -d "$CPP"; then - CPP= - fi - if test -z "$CPP"; then -- if test "${ac_cv_prog_CPP+set}" = set; then : -+ if test "${ac_cv_prog_CPP+set}" = set; then - $as_echo_n "(cached) " >&6 - else - # Double quotes because CPP needs to be expanded -@@ -4607,7 +4828,11 @@ - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #ifdef __STDC__ - # include -@@ -4616,34 +4841,78 @@ - #endif - Syntax error - _ACEOF --if ac_fn_c_try_cpp "$LINENO"; then : -- -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then -+ : - else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ - # Broken: fails on valid input. - continue - fi -+ - rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include - _ACEOF --if ac_fn_c_try_cpp "$LINENO"; then : -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then - # Broken: success on invalid input. - continue - else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ - # Passes both tests. - ac_preproc_ok=: - break - fi -+ - rm -f conftest.err conftest.$ac_ext - - done - # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. - rm -f conftest.err conftest.$ac_ext --if $ac_preproc_ok; then : -+if $ac_preproc_ok; then - break - fi - -@@ -4655,7 +4924,7 @@ - else - ac_cv_prog_CPP=$CPP - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -+{ $as_echo "$as_me:$LINENO: result: $CPP" >&5 - $as_echo "$CPP" >&6; } - ac_preproc_ok=false - for ac_c_preproc_warn_flag in '' yes -@@ -4666,7 +4935,11 @@ - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #ifdef __STDC__ - # include -@@ -4675,40 +4948,87 @@ - #endif - Syntax error - _ACEOF --if ac_fn_c_try_cpp "$LINENO"; then : -- -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then -+ : - else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ - # Broken: fails on valid input. - continue - fi -+ - rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include - _ACEOF --if ac_fn_c_try_cpp "$LINENO"; then : -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then - # Broken: success on invalid input. - continue - else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ - # Passes both tests. - ac_preproc_ok=: - break - fi -+ - rm -f conftest.err conftest.$ac_ext - - done - # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. - rm -f conftest.err conftest.$ac_ext --if $ac_preproc_ok; then : -- -+if $ac_preproc_ok; then -+ : - else -- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -+ { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} --as_fn_error "C preprocessor \"$CPP\" fails sanity check --See \`config.log' for more details." "$LINENO" 5; } -+{ { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check -+See \`config.log' for more details." >&5 -+$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check -+See \`config.log' for more details." >&2;} -+ { (exit 1); exit 1; }; }; } - fi - - ac_ext=c -@@ -4718,19 +5038,23 @@ - ac_compiler_gnu=$ac_cv_c_compiler_gnu - - if test $ac_cv_c_compiler_gnu = yes; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5 -+ { $as_echo "$as_me:$LINENO: checking whether $CC needs -traditional" >&5 - $as_echo_n "checking whether $CC needs -traditional... " >&6; } --if test "${ac_cv_prog_gcc_traditional+set}" = set; then : -+if test "${ac_cv_prog_gcc_traditional+set}" = set; then - $as_echo_n "(cached) " >&6 - else - ac_pattern="Autoconf.*'x'" -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include - Autoconf TIOCGETP - _ACEOF - if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | -- $EGREP "$ac_pattern" >/dev/null 2>&1; then : -+ $EGREP "$ac_pattern" >/dev/null 2>&1; then - ac_cv_prog_gcc_traditional=yes - else - ac_cv_prog_gcc_traditional=no -@@ -4739,42 +5063,142 @@ - - - if test $ac_cv_prog_gcc_traditional = no; then -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include - Autoconf TCGETA - _ACEOF - if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | -- $EGREP "$ac_pattern" >/dev/null 2>&1; then : -+ $EGREP "$ac_pattern" >/dev/null 2>&1; then - ac_cv_prog_gcc_traditional=yes - fi - rm -f conftest* - - fi - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5 -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_gcc_traditional" >&5 - $as_echo "$ac_cv_prog_gcc_traditional" >&6; } - if test $ac_cv_prog_gcc_traditional = yes; then - CC="$CC -traditional" - fi - fi - -- --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 --$as_echo_n "checking for an ANSI C-conforming const... " >&6; } --if test "${ac_cv_c_const+set}" = set; then : -+# Find a good install program. We prefer a C program (faster), -+# so one script is as good as another. But avoid the broken or -+# incompatible versions: -+# SysV /etc/install, /usr/sbin/install -+# SunOS /usr/etc/install -+# IRIX /sbin/install -+# AIX /bin/install -+# AmigaOS /C/install, which installs bootblocks on floppy discs -+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -+# AFS /usr/afsws/bin/install, which mishandles nonexistent args -+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -+# OS/2's system install, which has a completely different semantic -+# ./install, which can be erroneously created by make from ./install.sh. -+# Reject install programs that cannot install multiple files. -+{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 -+$as_echo_n "checking for a BSD-compatible install... " >&6; } -+if test -z "$INSTALL"; then -+if test "${ac_cv_path_install+set}" = set; then - $as_echo_n "(cached) " >&6 - else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ -+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ # Account for people who put trailing slashes in PATH elements. -+case $as_dir/ in -+ ./ | .// | /cC/* | \ -+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ -+ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ -+ /usr/ucb/* ) ;; -+ *) -+ # OSF1 and SCO ODT 3.0 have their own names for install. -+ # Don't use installbsd from OSF since it installs stuff as root -+ # by default. -+ for ac_prog in ginstall scoinst install; do -+ for ac_exec_ext in '' $ac_executable_extensions; do -+ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then -+ if test $ac_prog = install && -+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then -+ # AIX install. It has an incompatible calling convention. -+ : -+ elif test $ac_prog = install && -+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then -+ # program-specific install script used by HP pwplus--don't use. -+ : -+ else -+ rm -rf conftest.one conftest.two conftest.dir -+ echo one > conftest.one -+ echo two > conftest.two -+ mkdir conftest.dir -+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && -+ test -s conftest.one && test -s conftest.two && -+ test -s conftest.dir/conftest.one && -+ test -s conftest.dir/conftest.two -+ then -+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" -+ break 3 -+ fi -+ fi -+ fi -+ done -+ done -+ ;; -+esac - --int --main () --{ --/* FIXME: Include the comments suggested by Paul. */ --#ifndef __cplusplus -- /* Ultrix mips cc rejects this. */ -- typedef int charset[2]; -+done -+IFS=$as_save_IFS -+ -+rm -rf conftest.one conftest.two conftest.dir -+ -+fi -+ if test "${ac_cv_path_install+set}" = set; then -+ INSTALL=$ac_cv_path_install -+ else -+ # As a last resort, use the slow shell script. Don't cache a -+ # value for INSTALL within a source directory, because that will -+ # break other packages using the cache if that directory is -+ # removed, or if the value is a relative name. -+ INSTALL=$ac_install_sh -+ fi -+fi -+{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5 -+$as_echo "$INSTALL" >&6; } -+ -+# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -+# It thinks the first close brace ends the variable substitution. -+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' -+ -+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' -+ -+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -+ -+{ $as_echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 -+$as_echo_n "checking for an ANSI C-conforming const... " >&6; } -+if test "${ac_cv_c_const+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+ -+int -+main () -+{ -+/* FIXME: Include the comments suggested by Paul. */ -+#ifndef __cplusplus -+ /* Ultrix mips cc rejects this. */ -+ typedef int charset[2]; - const charset cs; - /* SunOS 4.1.1 cc rejects this. */ - char const *const *pcpcc; -@@ -4825,27 +5249,54 @@ - return 0; - } - _ACEOF --if ac_fn_c_try_compile "$LINENO"; then : -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_c_const=yes - else -- ac_cv_c_const=no -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_c_const=no - fi -+ - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 - $as_echo "$ac_cv_c_const" >&6; } - if test $ac_cv_c_const = no; then - --$as_echo "#define const /**/" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define const /**/ -+_ACEOF - - fi - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -+{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5 - $as_echo_n "checking for ANSI C header files... " >&6; } --if test "${ac_cv_header_stdc+set}" = set; then : -+if test "${ac_cv_header_stdc+set}" = set; then - $as_echo_n "(cached) " >&6 - else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include - #include -@@ -4860,23 +5311,48 @@ - return 0; - } - _ACEOF --if ac_fn_c_try_compile "$LINENO"; then : -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_header_stdc=yes - else -- ac_cv_header_stdc=no -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_header_stdc=no - fi -+ - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include - - _ACEOF - if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | -- $EGREP "memchr" >/dev/null 2>&1; then : -- -+ $EGREP "memchr" >/dev/null 2>&1; then -+ : - else - ac_cv_header_stdc=no - fi -@@ -4886,14 +5362,18 @@ - - if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include - - _ACEOF - if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | -- $EGREP "free" >/dev/null 2>&1; then : -- -+ $EGREP "free" >/dev/null 2>&1; then -+ : - else - ac_cv_header_stdc=no - fi -@@ -4903,10 +5383,14 @@ - - if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. -- if test "$cross_compiling" = yes; then : -+ if test "$cross_compiling" = yes; then - : - else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include - #include -@@ -4933,31 +5417,64 @@ - return 0; - } - _ACEOF --if ac_fn_c_try_run "$LINENO"; then : -- -+rm -f conftest$ac_exeext -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_link") 2>&5 -+ ac_status=$? -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext' -+ { (case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_try") 2>&5 -+ ac_status=$? -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); }; }; then -+ : - else -- ac_cv_header_stdc=no -+ $as_echo "$as_me: program exited with status $ac_status" >&5 -+$as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+( exit $ac_status ) -+ac_cv_header_stdc=no - fi --rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ -- conftest.$ac_objext conftest.beam conftest.$ac_ext -+rm -rf conftest.dSYM -+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext - fi - -+ - fi - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 - $as_echo "$ac_cv_header_stdc" >&6; } - if test $ac_cv_header_stdc = yes; then - --$as_echo "#define STDC_HEADERS 1" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define STDC_HEADERS 1 -+_ACEOF - - fi - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 -+{ $as_echo "$as_me:$LINENO: checking for stdbool.h that conforms to C99" >&5 - $as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } --if test "${ac_cv_header_stdbool_h+set}" = set; then : -+if test "${ac_cv_header_stdbool_h+set}" = set; then - $as_echo_n "(cached) " >&6 - else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - - #include -@@ -5037,17 +5554,131 @@ - return 0; - } - _ACEOF --if ac_fn_c_try_compile "$LINENO"; then : -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_header_stdbool_h=yes - else -- ac_cv_header_stdbool_h=no -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_header_stdbool_h=no - fi -+ - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdbool_h" >&5 - $as_echo "$ac_cv_header_stdbool_h" >&6; } --ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" --if test "x$ac_cv_type__Bool" = x""yes; then : -+{ $as_echo "$as_me:$LINENO: checking for _Bool" >&5 -+$as_echo_n "checking for _Bool... " >&6; } -+if test "${ac_cv_type__Bool+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ ac_cv_type__Bool=no -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+$ac_includes_default -+int -+main () -+{ -+if (sizeof (_Bool)) -+ return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+$ac_includes_default -+int -+main () -+{ -+if (sizeof ((_Bool))) -+ return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ : -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_type__Bool=yes -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type__Bool" >&5 -+$as_echo "$ac_cv_type__Bool" >&6; } -+if test "x$ac_cv_type__Bool" = x""yes; then - - cat >>confdefs.h <<_ACEOF - #define HAVE__BOOL 1 -@@ -5058,19 +5689,30 @@ - - if test $ac_cv_header_stdbool_h = yes; then - --$as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h -+cat >>confdefs.h <<\_ACEOF -+#define HAVE_STDBOOL_H 1 -+_ACEOF - - fi - -+ -+ -+ -+ -+ - ac_header_dirent=no - for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do - as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 -+{ $as_echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5 - $as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } --if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then : -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 - else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include - #include <$ac_hdr> -@@ -5084,18 +5726,41 @@ - return 0; - } - _ACEOF --if ac_fn_c_try_compile "$LINENO"; then : -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - eval "$as_ac_Header=yes" - else -- eval "$as_ac_Header=no" -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ eval "$as_ac_Header=no" - fi -+ - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --eval ac_res=\$$as_ac_Header -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -+ac_res=`eval 'as_val=${'$as_ac_Header'} -+ $as_echo "$as_val"'` -+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 - $as_echo "$ac_res" >&6; } --eval as_val=\$$as_ac_Header -- if test "x$as_val" = x""yes; then : -+as_val=`eval 'as_val=${'$as_ac_Header'} -+ $as_echo "$as_val"'` -+ if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF - #define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 - _ACEOF -@@ -5106,13 +5771,17 @@ - done - # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. - if test $ac_header_dirent = dirent.h; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 -+ { $as_echo "$as_me:$LINENO: checking for library containing opendir" >&5 - $as_echo_n "checking for library containing opendir... " >&6; } --if test "${ac_cv_search_opendir+set}" = set; then : -+if test "${ac_cv_search_opendir+set}" = set; then - $as_echo_n "(cached) " >&6 - else - ac_func_search_save_LIBS=$LIBS --cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - - /* Override any GCC internal prototype to avoid an error. -@@ -5137,39 +5806,70 @@ - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi -- if ac_fn_c_try_link "$LINENO"; then : -+ rm -f conftest.$ac_objext conftest$ac_exeext -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_link") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && { -+ test "$cross_compiling" = yes || -+ $as_test_x conftest$ac_exeext -+ }; then - ac_cv_search_opendir=$ac_res -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ - fi --rm -f core conftest.err conftest.$ac_objext \ -- conftest$ac_exeext -- if test "${ac_cv_search_opendir+set}" = set; then : -+ -+rm -rf conftest.dSYM -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ -+ conftest$ac_exeext -+ if test "${ac_cv_search_opendir+set}" = set; then - break - fi - done --if test "${ac_cv_search_opendir+set}" = set; then : -- -+if test "${ac_cv_search_opendir+set}" = set; then -+ : - else - ac_cv_search_opendir=no - fi - rm conftest.$ac_ext - LIBS=$ac_func_search_save_LIBS - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 - $as_echo "$ac_cv_search_opendir" >&6; } - ac_res=$ac_cv_search_opendir --if test "$ac_res" != no; then : -+if test "$ac_res" != no; then - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - - fi - - else -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 -+ { $as_echo "$as_me:$LINENO: checking for library containing opendir" >&5 - $as_echo_n "checking for library containing opendir... " >&6; } --if test "${ac_cv_search_opendir+set}" = set; then : -+if test "${ac_cv_search_opendir+set}" = set; then - $as_echo_n "(cached) " >&6 - else - ac_func_search_save_LIBS=$LIBS --cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - - /* Override any GCC internal prototype to avoid an error. -@@ -5194,39 +5894,70 @@ - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi -- if ac_fn_c_try_link "$LINENO"; then : -+ rm -f conftest.$ac_objext conftest$ac_exeext -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_link") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && { -+ test "$cross_compiling" = yes || -+ $as_test_x conftest$ac_exeext -+ }; then - ac_cv_search_opendir=$ac_res -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ - fi --rm -f core conftest.err conftest.$ac_objext \ -- conftest$ac_exeext -- if test "${ac_cv_search_opendir+set}" = set; then : -+ -+rm -rf conftest.dSYM -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ -+ conftest$ac_exeext -+ if test "${ac_cv_search_opendir+set}" = set; then - break - fi - done --if test "${ac_cv_search_opendir+set}" = set; then : -- -+if test "${ac_cv_search_opendir+set}" = set; then -+ : - else - ac_cv_search_opendir=no - fi - rm conftest.$ac_ext - LIBS=$ac_func_search_save_LIBS - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 - $as_echo "$ac_cv_search_opendir" >&6; } - ac_res=$ac_cv_search_opendir --if test "$ac_res" != no; then : -+if test "$ac_res" != no; then - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - - fi - - fi - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat file-mode macros are broken" >&5 -+{ $as_echo "$as_me:$LINENO: checking whether stat file-mode macros are broken" >&5 - $as_echo_n "checking whether stat file-mode macros are broken... " >&6; } --if test "${ac_cv_header_stat_broken+set}" = set; then : -+if test "${ac_cv_header_stat_broken+set}" = set; then - $as_echo_n "(cached) " >&6 - else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include - #include -@@ -5248,1059 +5979,4721 @@ - #endif - - _ACEOF --if ac_fn_c_try_compile "$LINENO"; then : -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_header_stat_broken=no - else -- ac_cv_header_stat_broken=yes -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_header_stat_broken=yes - fi -+ - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stat_broken" >&5 -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stat_broken" >&5 - $as_echo "$ac_cv_header_stat_broken" >&6; } - if test $ac_cv_header_stat_broken = yes; then - --$as_echo "#define STAT_MACROS_BROKEN 1" >>confdefs.h -- --fi -- --ac_fn_c_check_member "$LINENO" "struct stat" "st_blksize" "ac_cv_member_struct_stat_st_blksize" "$ac_includes_default" --if test "x$ac_cv_member_struct_stat_st_blksize" = x""yes; then : -- --cat >>confdefs.h <<_ACEOF --#define HAVE_STRUCT_STAT_ST_BLKSIZE 1 -+cat >>confdefs.h <<\_ACEOF -+#define STAT_MACROS_BROKEN 1 - _ACEOF - -- - fi --ac_fn_c_check_member "$LINENO" "struct stat" "st_blocks" "ac_cv_member_struct_stat_st_blocks" "$ac_includes_default" --if test "x$ac_cv_member_struct_stat_st_blocks" = x""yes; then : - --cat >>confdefs.h <<_ACEOF --#define HAVE_STRUCT_STAT_ST_BLOCKS 1 -+{ $as_echo "$as_me:$LINENO: checking for struct stat.st_blksize" >&5 -+$as_echo_n "checking for struct stat.st_blksize... " >&6; } -+if test "${ac_cv_member_struct_stat_st_blksize+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ - _ACEOF -- -- --fi --ac_fn_c_check_member "$LINENO" "struct stat" "st_aclcnt" "ac_cv_member_struct_stat_st_aclcnt" "$ac_includes_default" --if test "x$ac_cv_member_struct_stat_st_aclcnt" = x""yes; then : -- --cat >>confdefs.h <<_ACEOF --#define HAVE_STRUCT_STAT_ST_ACLCNT 1 -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+$ac_includes_default -+int -+main () -+{ -+static struct stat ac_aggr; -+if (ac_aggr.st_blksize) -+return 0; -+ ; -+ return 0; -+} - _ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_stat_st_blksize=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - -- --fi --ac_fn_c_check_member "$LINENO" "struct stat" "st_flags" "ac_cv_member_struct_stat_st_flags" "$ac_includes_default" --if test "x$ac_cv_member_struct_stat_st_flags" = x""yes; then : -- --cat >>confdefs.h <<_ACEOF --#define HAVE_STRUCT_STAT_ST_FLAGS 1 --_ACEOF -- -- --fi --ac_fn_c_check_member "$LINENO" "struct stat" "st_fstype" "ac_cv_member_struct_stat_st_fstype" "$ac_includes_default" --if test "x$ac_cv_member_struct_stat_st_fstype" = x""yes; then : -- --cat >>confdefs.h <<_ACEOF --#define HAVE_STRUCT_STAT_ST_FSTYPE 1 -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ - _ACEOF -- -- --fi --ac_fn_c_check_member "$LINENO" "struct stat" "st_gen" "ac_cv_member_struct_stat_st_gen" "$ac_includes_default" --if test "x$ac_cv_member_struct_stat_st_gen" = x""yes; then : -- --cat >>confdefs.h <<_ACEOF --#define HAVE_STRUCT_STAT_ST_GEN 1 -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+$ac_includes_default -+int -+main () -+{ -+static struct stat ac_aggr; -+if (sizeof ac_aggr.st_blksize) -+return 0; -+ ; -+ return 0; -+} - _ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_stat_st_blksize=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - -- -+ ac_cv_member_struct_stat_st_blksize=no - fi --ac_fn_c_check_member "$LINENO" "struct stat" "st_level" "ac_cv_member_struct_stat_st_level" "$ac_includes_default" --if test "x$ac_cv_member_struct_stat_st_level" = x""yes; then : -- --cat >>confdefs.h <<_ACEOF --#define HAVE_STRUCT_STAT_ST_LEVEL 1 --_ACEOF - -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi - -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --ac_fn_c_check_member "$LINENO" "struct stat" "st_rdev" "ac_cv_member_struct_stat_st_rdev" "$ac_includes_default" --if test "x$ac_cv_member_struct_stat_st_rdev" = x""yes; then : -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_blksize" >&5 -+$as_echo "$ac_cv_member_struct_stat_st_blksize" >&6; } -+if test "x$ac_cv_member_struct_stat_st_blksize" = x""yes; then - - cat >>confdefs.h <<_ACEOF --#define HAVE_STRUCT_STAT_ST_RDEV 1 -+#define HAVE_STRUCT_STAT_ST_BLKSIZE 1 - _ACEOF - - - fi -- --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stat64 in (asm|sys)/stat.h" >&5 --$as_echo_n "checking for stat64 in (asm|sys)/stat.h... " >&6; } --if test "${ac_cv_type_stat64+set}" = set; then : -+{ $as_echo "$as_me:$LINENO: checking for struct stat.st_blocks" >&5 -+$as_echo_n "checking for struct stat.st_blocks... " >&6; } -+if test "${ac_cv_member_struct_stat_st_blocks+set}" = set; then - $as_echo_n "(cached) " >&6 - else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ --#ifdef LINUX --#include --#include --#else --#include --#endif -+$ac_includes_default - int - main () - { --struct stat64 st; -+static struct stat ac_aggr; -+if (ac_aggr.st_blocks) -+return 0; - ; - return 0; - } - _ACEOF --if ac_fn_c_try_compile "$LINENO"; then : -- ac_cv_type_stat64=yes -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_stat_st_blocks=yes - else -- ac_cv_type_stat64=no --fi --rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext --fi -- --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_stat64" >&5 --$as_echo "$ac_cv_type_stat64" >&6; } --if test "$ac_cv_type_stat64" = yes --then -- --$as_echo "#define HAVE_STAT64 1" >>confdefs.h -- --fi -- -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 --$as_echo_n "checking return type of signal handlers... " >&6; } --if test "${ac_cv_type_signal+set}" = set; then : -- $as_echo_n "(cached) " >&6 --else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ --#include --#include -- -+$ac_includes_default - int - main () - { --return *(signal (0, 0)) (0) == 1; -+static struct stat ac_aggr; -+if (sizeof ac_aggr.st_blocks) -+return 0; - ; - return 0; - } - _ACEOF --if ac_fn_c_try_compile "$LINENO"; then : -- ac_cv_type_signal=int -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_stat_st_blocks=yes - else -- ac_cv_type_signal=void -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_member_struct_stat_st_blocks=no - fi -+ - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 --$as_echo "$ac_cv_type_signal" >&6; } -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_blocks" >&5 -+$as_echo "$ac_cv_member_struct_stat_st_blocks" >&6; } -+if test "x$ac_cv_member_struct_stat_st_blocks" = x""yes; then - - cat >>confdefs.h <<_ACEOF --#define RETSIGTYPE $ac_cv_type_signal -+#define HAVE_STRUCT_STAT_ST_BLOCKS 1 - _ACEOF - - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 --$as_echo_n "checking for uid_t in sys/types.h... " >&6; } --if test "${ac_cv_type_uid_t+set}" = set; then : -+fi -+{ $as_echo "$as_me:$LINENO: checking for struct stat.st_aclcnt" >&5 -+$as_echo_n "checking for struct stat.st_aclcnt... " >&6; } -+if test "${ac_cv_member_struct_stat_st_aclcnt+set}" = set; then - $as_echo_n "(cached) " >&6 - else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ --#include -+$ac_includes_default -+int -+main () -+{ -+static struct stat ac_aggr; -+if (ac_aggr.st_aclcnt) -+return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_stat_st_aclcnt=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ - _ACEOF --if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | -- $EGREP "uid_t" >/dev/null 2>&1; then : -- ac_cv_type_uid_t=yes -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+$ac_includes_default -+int -+main () -+{ -+static struct stat ac_aggr; -+if (sizeof ac_aggr.st_aclcnt) -+return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_stat_st_aclcnt=yes - else -- ac_cv_type_uid_t=no --fi --rm -f conftest* -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - -+ ac_cv_member_struct_stat_st_aclcnt=no - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 --$as_echo "$ac_cv_type_uid_t" >&6; } --if test $ac_cv_type_uid_t = no; then -- --$as_echo "#define uid_t int" >>confdefs.h -- -- --$as_echo "#define gid_t int" >>confdefs.h - -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - --ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" --if test "x$ac_cv_type_mode_t" = x""yes; then : -- --else -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_aclcnt" >&5 -+$as_echo "$ac_cv_member_struct_stat_st_aclcnt" >&6; } -+if test "x$ac_cv_member_struct_stat_st_aclcnt" = x""yes; then - - cat >>confdefs.h <<_ACEOF --#define mode_t int -+#define HAVE_STRUCT_STAT_ST_ACLCNT 1 - _ACEOF - --fi - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking type of array argument to getgroups" >&5 --$as_echo_n "checking type of array argument to getgroups... " >&6; } --if test "${ac_cv_type_getgroups+set}" = set; then : -+fi -+{ $as_echo "$as_me:$LINENO: checking for struct stat.st_flags" >&5 -+$as_echo_n "checking for struct stat.st_flags... " >&6; } -+if test "${ac_cv_member_struct_stat_st_flags+set}" = set; then - $as_echo_n "(cached) " >&6 - else -- if test "$cross_compiling" = yes; then : -- ac_cv_type_getgroups=cross --else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ --/* Thanks to Mike Rendell for this test. */ - $ac_includes_default --#define NGID 256 --#undef MAX --#define MAX(x, y) ((x) > (y) ? (x) : (y)) -- - int - main () - { -- gid_t gidset[NGID]; -- int i, n; -- union { gid_t gval; long int lval; } val; -- -- val.lval = -1; -- for (i = 0; i < NGID; i++) -- gidset[i] = val.gval; -- n = getgroups (sizeof (gidset) / MAX (sizeof (int), sizeof (gid_t)) - 1, -- gidset); -- /* Exit non-zero if getgroups seems to require an array of ints. This -- happens when gid_t is short int but getgroups modifies an array -- of ints. */ -- return n > 0 && gidset[n] != val.gval; -+static struct stat ac_aggr; -+if (ac_aggr.st_flags) -+return 0; -+ ; -+ return 0; - } - _ACEOF --if ac_fn_c_try_run "$LINENO"; then : -- ac_cv_type_getgroups=gid_t -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_stat_st_flags=yes - else -- ac_cv_type_getgroups=int --fi --rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ -- conftest.$ac_objext conftest.beam conftest.$ac_ext --fi -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - --if test $ac_cv_type_getgroups = cross; then -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ --#include -- -+$ac_includes_default -+int -+main () -+{ -+static struct stat ac_aggr; -+if (sizeof ac_aggr.st_flags) -+return 0; -+ ; -+ return 0; -+} - _ACEOF --if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | -- $EGREP "getgroups.*int.*gid_t" >/dev/null 2>&1; then : -- ac_cv_type_getgroups=gid_t -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_stat_st_flags=yes - else -- ac_cv_type_getgroups=int -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_member_struct_stat_st_flags=no - fi --rm -f conftest* - -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_getgroups" >&5 --$as_echo "$ac_cv_type_getgroups" >&6; } -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_flags" >&5 -+$as_echo "$ac_cv_member_struct_stat_st_flags" >&6; } -+if test "x$ac_cv_member_struct_stat_st_flags" = x""yes; then - - cat >>confdefs.h <<_ACEOF --#define GETGROUPS_T $ac_cv_type_getgroups -+#define HAVE_STRUCT_STAT_ST_FLAGS 1 - _ACEOF - - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sys/types.h defines makedev" >&5 --$as_echo_n "checking whether sys/types.h defines makedev... " >&6; } --if test "${ac_cv_header_sys_types_h_makedev+set}" = set; then : -+fi -+{ $as_echo "$as_me:$LINENO: checking for struct stat.st_fstype" >&5 -+$as_echo_n "checking for struct stat.st_fstype... " >&6; } -+if test "${ac_cv_member_struct_stat_st_fstype+set}" = set; then - $as_echo_n "(cached) " >&6 - else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ --#include -+$ac_includes_default - int - main () - { --return makedev(0, 0); -+static struct stat ac_aggr; -+if (ac_aggr.st_fstype) -+return 0; - ; - return 0; - } - _ACEOF --if ac_fn_c_try_link "$LINENO"; then : -- ac_cv_header_sys_types_h_makedev=yes --else -- ac_cv_header_sys_types_h_makedev=no --fi --rm -f core conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext -- --fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_types_h_makedev" >&5 --$as_echo "$ac_cv_header_sys_types_h_makedev" >&6; } -- --if test $ac_cv_header_sys_types_h_makedev = no; then --ac_fn_c_check_header_mongrel "$LINENO" "sys/mkdev.h" "ac_cv_header_sys_mkdev_h" "$ac_includes_default" --if test "x$ac_cv_header_sys_mkdev_h" = x""yes; then : -- --$as_echo "#define MAJOR_IN_MKDEV 1" >>confdefs.h -- --fi -- -- -- -- if test $ac_cv_header_sys_mkdev_h = no; then -- ac_fn_c_check_header_mongrel "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default" --if test "x$ac_cv_header_sys_sysmacros_h" = x""yes; then : -- --$as_echo "#define MAJOR_IN_SYSMACROS 1" >>confdefs.h -- --fi -- -- -- fi --fi -- --ac_fn_c_check_type "$LINENO" "sig_atomic_t" "ac_cv_type_sig_atomic_t" "#include --" --if test "x$ac_cv_type_sig_atomic_t" = x""yes; then : -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_stat_st_fstype=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - --cat >>confdefs.h <<_ACEOF --#define HAVE_SIG_ATOMIC_T 1 -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ - _ACEOF -- -- --fi --ac_fn_c_check_type "$LINENO" "siginfo_t" "ac_cv_type_siginfo_t" "#include --" --if test "x$ac_cv_type_siginfo_t" = x""yes; then : -- --cat >>confdefs.h <<_ACEOF --#define HAVE_SIGINFO_T 1 -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+$ac_includes_default -+int -+main () -+{ -+static struct stat ac_aggr; -+if (sizeof ac_aggr.st_fstype) -+return 0; -+ ; -+ return 0; -+} - _ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_stat_st_fstype=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - -- -+ ac_cv_member_struct_stat_st_fstype=no - fi - --ac_fn_c_check_member "$LINENO" "struct sockaddr_in6" "sin6_scope_id" "ac_cv_member_struct_sockaddr_in6_sin6_scope_id" "#include --#include --#include --" --if test "x$ac_cv_member_struct_sockaddr_in6_sin6_scope_id" = x""yes; then : -- --cat >>confdefs.h <<_ACEOF --#define HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID 1 --_ACEOF -- -- -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - --ac_fn_c_check_type "$LINENO" "long long" "ac_cv_type_long_long" "$ac_includes_default" --if test "x$ac_cv_type_long_long" = x""yes; then : -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_fstype" >&5 -+$as_echo "$ac_cv_member_struct_stat_st_fstype" >&6; } -+if test "x$ac_cv_member_struct_stat_st_fstype" = x""yes; then - - cat >>confdefs.h <<_ACEOF --#define HAVE_LONG_LONG 1 -+#define HAVE_STRUCT_STAT_ST_FSTYPE 1 - _ACEOF - - - fi -- --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for little endian long long" >&5 --$as_echo_n "checking for little endian long long... " >&6; } --if test "${ac_cv_have_little_endian_long_long+set}" = set; then : -+{ $as_echo "$as_me:$LINENO: checking for struct stat.st_gen" >&5 -+$as_echo_n "checking for struct stat.st_gen... " >&6; } -+if test "${ac_cv_member_struct_stat_st_gen+set}" = set; then - $as_echo_n "(cached) " >&6 - else -- if test "$cross_compiling" = yes; then : -- # Should try to guess here --ac_cv_have_little_endian_long_long=no -- --else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ -- --int main () { -- union { -- long long ll; -- long l [2]; -- } u; -- u.ll = 0x12345678; -- if (u.l[0] == 0x12345678) -- return 0; -- return 1; -+$ac_includes_default -+int -+main () -+{ -+static struct stat ac_aggr; -+if (ac_aggr.st_gen) -+return 0; -+ ; -+ return 0; - } -- - _ACEOF --if ac_fn_c_try_run "$LINENO"; then : -- ac_cv_have_little_endian_long_long=yes --else -- ac_cv_have_little_endian_long_long=no --fi --rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ -- conftest.$ac_objext conftest.beam conftest.$ac_ext --fi -- --fi -- --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_little_endian_long_long" >&5 --$as_echo "$ac_cv_have_little_endian_long_long" >&6; } --if test "$ac_cv_have_little_endian_long_long" = yes --then -- --$as_echo "#define HAVE_LITTLE_ENDIAN_LONG_LONG 1" >>confdefs.h -- --fi -- --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long off_t" >&5 --$as_echo_n "checking for long long off_t... " >&6; } --if test "${ac_cv_have_long_long_off_t+set}" = set; then : -- $as_echo_n "(cached) " >&6 -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_stat_st_gen=yes - else -- if test "$cross_compiling" = yes; then : -- # Should try to guess here --ac_cv_have_long_long_off_t=no -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - --else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ --#include --main () { -- if (sizeof (off_t) == sizeof (long long) && -- sizeof (off_t) > sizeof (long)) -- return 0; -- return 1; -+$ac_includes_default -+int -+main () -+{ -+static struct stat ac_aggr; -+if (sizeof ac_aggr.st_gen) -+return 0; -+ ; -+ return 0; - } -- - _ACEOF --if ac_fn_c_try_run "$LINENO"; then : -- ac_cv_have_long_long_off_t=yes -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_stat_st_gen=yes - else -- ac_cv_have_long_long_off_t=no -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_member_struct_stat_st_gen=no - fi --rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ -- conftest.$ac_objext conftest.beam conftest.$ac_ext -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_gen" >&5 -+$as_echo "$ac_cv_member_struct_stat_st_gen" >&6; } -+if test "x$ac_cv_member_struct_stat_st_gen" = x""yes; then - --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_long_long_off_t" >&5 --$as_echo "$ac_cv_have_long_long_off_t" >&6; } --if test "$ac_cv_have_long_long_off_t" = yes --then -+cat >>confdefs.h <<_ACEOF -+#define HAVE_STRUCT_STAT_ST_GEN 1 -+_ACEOF - --$as_echo "#define HAVE_LONG_LONG_OFF_T 1" >>confdefs.h - - fi -- --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long rlim_t" >&5 --$as_echo_n "checking for long long rlim_t... " >&6; } --if test "${ac_cv_have_long_long_rlim_t+set}" = set; then : -+{ $as_echo "$as_me:$LINENO: checking for struct stat.st_level" >&5 -+$as_echo_n "checking for struct stat.st_level... " >&6; } -+if test "${ac_cv_member_struct_stat_st_level+set}" = set; then - $as_echo_n "(cached) " >&6 - else -- if test "$cross_compiling" = yes; then : -- # Should try to guess here --ac_cv_have_long_long_rlim_t=no -- --else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ --#include --#include --#include --main () { -- if (sizeof (rlim_t) == sizeof (long long) && -- sizeof (rlim_t) > sizeof (long)) -- return 0; -- return 1; -+$ac_includes_default -+int -+main () -+{ -+static struct stat ac_aggr; -+if (ac_aggr.st_level) -+return 0; -+ ; -+ return 0; - } -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_stat_st_level=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ - _ACEOF --if ac_fn_c_try_run "$LINENO"; then : -- ac_cv_have_long_long_rlim_t=yes -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+$ac_includes_default -+int -+main () -+{ -+static struct stat ac_aggr; -+if (sizeof ac_aggr.st_level) -+return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_stat_st_level=yes - else -- ac_cv_have_long_long_rlim_t=no --fi --rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ -- conftest.$ac_objext conftest.beam conftest.$ac_ext --fi -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - -+ ac_cv_member_struct_stat_st_level=no - fi - --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_long_long_rlim_t" >&5 --$as_echo "$ac_cv_have_long_long_rlim_t" >&6; } --if test "$ac_cv_have_long_long_rlim_t" = yes --then -- --$as_echo "#define HAVE_LONG_LONG_RLIM_T 1" >>confdefs.h -- -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - --ac_fn_c_check_type "$LINENO" "struct opthdr" "ac_cv_type_struct_opthdr" "#include --" --if test "x$ac_cv_type_struct_opthdr" = x""yes; then : -- --cat >>confdefs.h <<_ACEOF --#define HAVE_STRUCT_OPTHDR 1 --_ACEOF -- -- -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi -- --ac_fn_c_check_type "$LINENO" "struct t_opthdr" "ac_cv_type_struct_t_opthdr" "#include --" --if test "x$ac_cv_type_struct_t_opthdr" = x""yes; then : -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_level" >&5 -+$as_echo "$ac_cv_member_struct_stat_st_level" >&6; } -+if test "x$ac_cv_member_struct_stat_st_level" = x""yes; then - - cat >>confdefs.h <<_ACEOF --#define HAVE_STRUCT_T_OPTHDR 1 -+#define HAVE_STRUCT_STAT_ST_LEVEL 1 - _ACEOF - - - fi -- -- --if test x$opsys != xlinux; then --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lnsl" >&5 --$as_echo_n "checking for main in -lnsl... " >&6; } --if test "${ac_cv_lib_nsl_main+set}" = set; then : -+{ $as_echo "$as_me:$LINENO: checking for struct stat.st_rdev" >&5 -+$as_echo_n "checking for struct stat.st_rdev... " >&6; } -+if test "${ac_cv_member_struct_stat_st_rdev+set}" = set; then - $as_echo_n "(cached) " >&6 - else -- ac_check_lib_save_LIBS=$LIBS --LIBS="-lnsl $LIBS" --cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ -- -- -+$ac_includes_default - int - main () - { --return main (); -+static struct stat ac_aggr; -+if (ac_aggr.st_rdev) -+return 0; - ; - return 0; - } - _ACEOF --if ac_fn_c_try_link "$LINENO"; then : -- ac_cv_lib_nsl_main=yes -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_stat_st_rdev=yes - else -- ac_cv_lib_nsl_main=no --fi --rm -f core conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext --LIBS=$ac_check_lib_save_LIBS --fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_main" >&5 -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+$ac_includes_default -+int -+main () -+{ -+static struct stat ac_aggr; -+if (sizeof ac_aggr.st_rdev) -+return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_stat_st_rdev=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_member_struct_stat_st_rdev=no -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_rdev" >&5 -+$as_echo "$ac_cv_member_struct_stat_st_rdev" >&6; } -+if test "x$ac_cv_member_struct_stat_st_rdev" = x""yes; then -+ -+cat >>confdefs.h <<_ACEOF -+#define HAVE_STRUCT_STAT_ST_RDEV 1 -+_ACEOF -+ -+ -+fi -+ -+{ $as_echo "$as_me:$LINENO: checking for stat64 in (asm|sys)/stat.h" >&5 -+$as_echo_n "checking for stat64 in (asm|sys)/stat.h... " >&6; } -+if test "${ac_cv_type_stat64+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#ifdef LINUX -+#include -+#include -+#else -+#include -+#endif -+int -+main () -+{ -+struct stat64 st; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_type_stat64=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_type_stat64=no -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+ -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_stat64" >&5 -+$as_echo "$ac_cv_type_stat64" >&6; } -+if test "$ac_cv_type_stat64" = yes -+then -+ -+cat >>confdefs.h <<\_ACEOF -+#define HAVE_STAT64 1 -+_ACEOF -+ -+fi -+ -+ -+{ $as_echo "$as_me:$LINENO: checking return type of signal handlers" >&5 -+$as_echo_n "checking return type of signal handlers... " >&6; } -+if test "${ac_cv_type_signal+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+#include -+ -+int -+main () -+{ -+return *(signal (0, 0)) (0) == 1; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_type_signal=int -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_type_signal=void -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5 -+$as_echo "$ac_cv_type_signal" >&6; } -+ -+cat >>confdefs.h <<_ACEOF -+#define RETSIGTYPE $ac_cv_type_signal -+_ACEOF -+ -+ -+{ $as_echo "$as_me:$LINENO: checking for uid_t in sys/types.h" >&5 -+$as_echo_n "checking for uid_t in sys/types.h... " >&6; } -+if test "${ac_cv_type_uid_t+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+ -+_ACEOF -+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | -+ $EGREP "uid_t" >/dev/null 2>&1; then -+ ac_cv_type_uid_t=yes -+else -+ ac_cv_type_uid_t=no -+fi -+rm -f conftest* -+ -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_uid_t" >&5 -+$as_echo "$ac_cv_type_uid_t" >&6; } -+if test $ac_cv_type_uid_t = no; then -+ -+cat >>confdefs.h <<\_ACEOF -+#define uid_t int -+_ACEOF -+ -+ -+cat >>confdefs.h <<\_ACEOF -+#define gid_t int -+_ACEOF -+ -+fi -+ -+{ $as_echo "$as_me:$LINENO: checking for mode_t" >&5 -+$as_echo_n "checking for mode_t... " >&6; } -+if test "${ac_cv_type_mode_t+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ ac_cv_type_mode_t=no -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+$ac_includes_default -+int -+main () -+{ -+if (sizeof (mode_t)) -+ return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+$ac_includes_default -+int -+main () -+{ -+if (sizeof ((mode_t))) -+ return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ : -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_type_mode_t=yes -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_mode_t" >&5 -+$as_echo "$ac_cv_type_mode_t" >&6; } -+if test "x$ac_cv_type_mode_t" = x""yes; then -+ : -+else -+ -+cat >>confdefs.h <<_ACEOF -+#define mode_t int -+_ACEOF -+ -+fi -+ -+{ $as_echo "$as_me:$LINENO: checking type of array argument to getgroups" >&5 -+$as_echo_n "checking type of array argument to getgroups... " >&6; } -+if test "${ac_cv_type_getgroups+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ if test "$cross_compiling" = yes; then -+ ac_cv_type_getgroups=cross -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+/* Thanks to Mike Rendell for this test. */ -+$ac_includes_default -+#define NGID 256 -+#undef MAX -+#define MAX(x, y) ((x) > (y) ? (x) : (y)) -+ -+int -+main () -+{ -+ gid_t gidset[NGID]; -+ int i, n; -+ union { gid_t gval; long int lval; } val; -+ -+ val.lval = -1; -+ for (i = 0; i < NGID; i++) -+ gidset[i] = val.gval; -+ n = getgroups (sizeof (gidset) / MAX (sizeof (int), sizeof (gid_t)) - 1, -+ gidset); -+ /* Exit non-zero if getgroups seems to require an array of ints. This -+ happens when gid_t is short int but getgroups modifies an array -+ of ints. */ -+ return n > 0 && gidset[n] != val.gval; -+} -+_ACEOF -+rm -f conftest$ac_exeext -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_link") 2>&5 -+ ac_status=$? -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext' -+ { (case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_try") 2>&5 -+ ac_status=$? -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); }; }; then -+ ac_cv_type_getgroups=gid_t -+else -+ $as_echo "$as_me: program exited with status $ac_status" >&5 -+$as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+( exit $ac_status ) -+ac_cv_type_getgroups=int -+fi -+rm -rf conftest.dSYM -+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -+fi -+ -+ -+if test $ac_cv_type_getgroups = cross; then -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+ -+_ACEOF -+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | -+ $EGREP "getgroups.*int.*gid_t" >/dev/null 2>&1; then -+ ac_cv_type_getgroups=gid_t -+else -+ ac_cv_type_getgroups=int -+fi -+rm -f conftest* -+ -+fi -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_getgroups" >&5 -+$as_echo "$ac_cv_type_getgroups" >&6; } -+ -+cat >>confdefs.h <<_ACEOF -+#define GETGROUPS_T $ac_cv_type_getgroups -+_ACEOF -+ -+ -+{ $as_echo "$as_me:$LINENO: checking whether sys/types.h defines makedev" >&5 -+$as_echo_n "checking whether sys/types.h defines makedev... " >&6; } -+if test "${ac_cv_header_sys_types_h_makedev+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+int -+main () -+{ -+return makedev(0, 0); -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext conftest$ac_exeext -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_link") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && { -+ test "$cross_compiling" = yes || -+ $as_test_x conftest$ac_exeext -+ }; then -+ ac_cv_header_sys_types_h_makedev=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_header_sys_types_h_makedev=no -+fi -+ -+rm -rf conftest.dSYM -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ -+ conftest$ac_exeext conftest.$ac_ext -+ -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_sys_types_h_makedev" >&5 -+$as_echo "$ac_cv_header_sys_types_h_makedev" >&6; } -+ -+if test $ac_cv_header_sys_types_h_makedev = no; then -+if test "${ac_cv_header_sys_mkdev_h+set}" = set; then -+ { $as_echo "$as_me:$LINENO: checking for sys/mkdev.h" >&5 -+$as_echo_n "checking for sys/mkdev.h... " >&6; } -+if test "${ac_cv_header_sys_mkdev_h+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_sys_mkdev_h" >&5 -+$as_echo "$ac_cv_header_sys_mkdev_h" >&6; } -+else -+ # Is the header compilable? -+{ $as_echo "$as_me:$LINENO: checking sys/mkdev.h usability" >&5 -+$as_echo_n "checking sys/mkdev.h usability... " >&6; } -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+$ac_includes_default -+#include -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_header_compiler=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_header_compiler=no -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -+$as_echo "$ac_header_compiler" >&6; } -+ -+# Is the header present? -+{ $as_echo "$as_me:$LINENO: checking sys/mkdev.h presence" >&5 -+$as_echo_n "checking sys/mkdev.h presence... " >&6; } -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+_ACEOF -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then -+ ac_header_preproc=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_header_preproc=no -+fi -+ -+rm -f conftest.err conftest.$ac_ext -+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -+$as_echo "$ac_header_preproc" >&6; } -+ -+# So? What about this header? -+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in -+ yes:no: ) -+ { $as_echo "$as_me:$LINENO: WARNING: sys/mkdev.h: accepted by the compiler, rejected by the preprocessor!" >&5 -+$as_echo "$as_me: WARNING: sys/mkdev.h: accepted by the compiler, rejected by the preprocessor!" >&2;} -+ { $as_echo "$as_me:$LINENO: WARNING: sys/mkdev.h: proceeding with the compiler's result" >&5 -+$as_echo "$as_me: WARNING: sys/mkdev.h: proceeding with the compiler's result" >&2;} -+ ac_header_preproc=yes -+ ;; -+ no:yes:* ) -+ { $as_echo "$as_me:$LINENO: WARNING: sys/mkdev.h: present but cannot be compiled" >&5 -+$as_echo "$as_me: WARNING: sys/mkdev.h: present but cannot be compiled" >&2;} -+ { $as_echo "$as_me:$LINENO: WARNING: sys/mkdev.h: check for missing prerequisite headers?" >&5 -+$as_echo "$as_me: WARNING: sys/mkdev.h: check for missing prerequisite headers?" >&2;} -+ { $as_echo "$as_me:$LINENO: WARNING: sys/mkdev.h: see the Autoconf documentation" >&5 -+$as_echo "$as_me: WARNING: sys/mkdev.h: see the Autoconf documentation" >&2;} -+ { $as_echo "$as_me:$LINENO: WARNING: sys/mkdev.h: section \"Present But Cannot Be Compiled\"" >&5 -+$as_echo "$as_me: WARNING: sys/mkdev.h: section \"Present But Cannot Be Compiled\"" >&2;} -+ { $as_echo "$as_me:$LINENO: WARNING: sys/mkdev.h: proceeding with the preprocessor's result" >&5 -+$as_echo "$as_me: WARNING: sys/mkdev.h: proceeding with the preprocessor's result" >&2;} -+ { $as_echo "$as_me:$LINENO: WARNING: sys/mkdev.h: in the future, the compiler will take precedence" >&5 -+$as_echo "$as_me: WARNING: sys/mkdev.h: in the future, the compiler will take precedence" >&2;} -+ -+ ;; -+esac -+{ $as_echo "$as_me:$LINENO: checking for sys/mkdev.h" >&5 -+$as_echo_n "checking for sys/mkdev.h... " >&6; } -+if test "${ac_cv_header_sys_mkdev_h+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ ac_cv_header_sys_mkdev_h=$ac_header_preproc -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_sys_mkdev_h" >&5 -+$as_echo "$ac_cv_header_sys_mkdev_h" >&6; } -+ -+fi -+if test "x$ac_cv_header_sys_mkdev_h" = x""yes; then -+ -+cat >>confdefs.h <<\_ACEOF -+#define MAJOR_IN_MKDEV 1 -+_ACEOF -+ -+fi -+ -+ -+ -+ if test $ac_cv_header_sys_mkdev_h = no; then -+ if test "${ac_cv_header_sys_sysmacros_h+set}" = set; then -+ { $as_echo "$as_me:$LINENO: checking for sys/sysmacros.h" >&5 -+$as_echo_n "checking for sys/sysmacros.h... " >&6; } -+if test "${ac_cv_header_sys_sysmacros_h+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_sys_sysmacros_h" >&5 -+$as_echo "$ac_cv_header_sys_sysmacros_h" >&6; } -+else -+ # Is the header compilable? -+{ $as_echo "$as_me:$LINENO: checking sys/sysmacros.h usability" >&5 -+$as_echo_n "checking sys/sysmacros.h usability... " >&6; } -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+$ac_includes_default -+#include -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_header_compiler=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_header_compiler=no -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -+$as_echo "$ac_header_compiler" >&6; } -+ -+# Is the header present? -+{ $as_echo "$as_me:$LINENO: checking sys/sysmacros.h presence" >&5 -+$as_echo_n "checking sys/sysmacros.h presence... " >&6; } -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+_ACEOF -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then -+ ac_header_preproc=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_header_preproc=no -+fi -+ -+rm -f conftest.err conftest.$ac_ext -+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -+$as_echo "$ac_header_preproc" >&6; } -+ -+# So? What about this header? -+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in -+ yes:no: ) -+ { $as_echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: accepted by the compiler, rejected by the preprocessor!" >&5 -+$as_echo "$as_me: WARNING: sys/sysmacros.h: accepted by the compiler, rejected by the preprocessor!" >&2;} -+ { $as_echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: proceeding with the compiler's result" >&5 -+$as_echo "$as_me: WARNING: sys/sysmacros.h: proceeding with the compiler's result" >&2;} -+ ac_header_preproc=yes -+ ;; -+ no:yes:* ) -+ { $as_echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: present but cannot be compiled" >&5 -+$as_echo "$as_me: WARNING: sys/sysmacros.h: present but cannot be compiled" >&2;} -+ { $as_echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: check for missing prerequisite headers?" >&5 -+$as_echo "$as_me: WARNING: sys/sysmacros.h: check for missing prerequisite headers?" >&2;} -+ { $as_echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: see the Autoconf documentation" >&5 -+$as_echo "$as_me: WARNING: sys/sysmacros.h: see the Autoconf documentation" >&2;} -+ { $as_echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: section \"Present But Cannot Be Compiled\"" >&5 -+$as_echo "$as_me: WARNING: sys/sysmacros.h: section \"Present But Cannot Be Compiled\"" >&2;} -+ { $as_echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: proceeding with the preprocessor's result" >&5 -+$as_echo "$as_me: WARNING: sys/sysmacros.h: proceeding with the preprocessor's result" >&2;} -+ { $as_echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: in the future, the compiler will take precedence" >&5 -+$as_echo "$as_me: WARNING: sys/sysmacros.h: in the future, the compiler will take precedence" >&2;} -+ -+ ;; -+esac -+{ $as_echo "$as_me:$LINENO: checking for sys/sysmacros.h" >&5 -+$as_echo_n "checking for sys/sysmacros.h... " >&6; } -+if test "${ac_cv_header_sys_sysmacros_h+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ ac_cv_header_sys_sysmacros_h=$ac_header_preproc -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_sys_sysmacros_h" >&5 -+$as_echo "$ac_cv_header_sys_sysmacros_h" >&6; } -+ -+fi -+if test "x$ac_cv_header_sys_sysmacros_h" = x""yes; then -+ -+cat >>confdefs.h <<\_ACEOF -+#define MAJOR_IN_SYSMACROS 1 -+_ACEOF -+ -+fi -+ -+ -+ fi -+fi -+ -+{ $as_echo "$as_me:$LINENO: checking for sig_atomic_t" >&5 -+$as_echo_n "checking for sig_atomic_t... " >&6; } -+if test "${ac_cv_type_sig_atomic_t+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ ac_cv_type_sig_atomic_t=no -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+ -+int -+main () -+{ -+if (sizeof (sig_atomic_t)) -+ return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+ -+int -+main () -+{ -+if (sizeof ((sig_atomic_t))) -+ return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ : -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_type_sig_atomic_t=yes -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_sig_atomic_t" >&5 -+$as_echo "$ac_cv_type_sig_atomic_t" >&6; } -+if test "x$ac_cv_type_sig_atomic_t" = x""yes; then -+ -+cat >>confdefs.h <<_ACEOF -+#define HAVE_SIG_ATOMIC_T 1 -+_ACEOF -+ -+ -+fi -+{ $as_echo "$as_me:$LINENO: checking for siginfo_t" >&5 -+$as_echo_n "checking for siginfo_t... " >&6; } -+if test "${ac_cv_type_siginfo_t+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ ac_cv_type_siginfo_t=no -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+ -+int -+main () -+{ -+if (sizeof (siginfo_t)) -+ return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+ -+int -+main () -+{ -+if (sizeof ((siginfo_t))) -+ return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ : -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_type_siginfo_t=yes -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_siginfo_t" >&5 -+$as_echo "$ac_cv_type_siginfo_t" >&6; } -+if test "x$ac_cv_type_siginfo_t" = x""yes; then -+ -+cat >>confdefs.h <<_ACEOF -+#define HAVE_SIGINFO_T 1 -+_ACEOF -+ -+ -+fi -+ -+{ $as_echo "$as_me:$LINENO: checking for struct sockaddr_in6.sin6_scope_id" >&5 -+$as_echo_n "checking for struct sockaddr_in6.sin6_scope_id... " >&6; } -+if test "${ac_cv_member_struct_sockaddr_in6_sin6_scope_id+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+#include -+#include -+ -+int -+main () -+{ -+static struct sockaddr_in6 ac_aggr; -+if (ac_aggr.sin6_scope_id) -+return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_sockaddr_in6_sin6_scope_id=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+#include -+#include -+ -+int -+main () -+{ -+static struct sockaddr_in6 ac_aggr; -+if (sizeof ac_aggr.sin6_scope_id) -+return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_sockaddr_in6_sin6_scope_id=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_member_struct_sockaddr_in6_sin6_scope_id=no -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_sockaddr_in6_sin6_scope_id" >&5 -+$as_echo "$ac_cv_member_struct_sockaddr_in6_sin6_scope_id" >&6; } -+if test "x$ac_cv_member_struct_sockaddr_in6_sin6_scope_id" = x""yes; then -+ -+cat >>confdefs.h <<_ACEOF -+#define HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID 1 -+_ACEOF -+ -+ -+fi -+ -+{ $as_echo "$as_me:$LINENO: checking for long long" >&5 -+$as_echo_n "checking for long long... " >&6; } -+if test "${ac_cv_type_long_long+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ ac_cv_type_long_long=no -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+$ac_includes_default -+int -+main () -+{ -+if (sizeof (long long)) -+ return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+$ac_includes_default -+int -+main () -+{ -+if (sizeof ((long long))) -+ return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ : -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_type_long_long=yes -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5 -+$as_echo "$ac_cv_type_long_long" >&6; } -+if test "x$ac_cv_type_long_long" = x""yes; then -+ -+cat >>confdefs.h <<_ACEOF -+#define HAVE_LONG_LONG 1 -+_ACEOF -+ -+ -+fi -+ -+{ $as_echo "$as_me:$LINENO: checking for little endian long long" >&5 -+$as_echo_n "checking for little endian long long... " >&6; } -+if test "${ac_cv_have_little_endian_long_long+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ if test "$cross_compiling" = yes; then -+ # Should try to guess here -+ac_cv_have_little_endian_long_long=no -+ -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+ -+int main () { -+ union { -+ long long ll; -+ long l [2]; -+ } u; -+ u.ll = 0x12345678; -+ if (u.l[0] == 0x12345678) -+ return 0; -+ return 1; -+} -+ -+_ACEOF -+rm -f conftest$ac_exeext -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_link") 2>&5 -+ ac_status=$? -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext' -+ { (case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_try") 2>&5 -+ ac_status=$? -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); }; }; then -+ ac_cv_have_little_endian_long_long=yes -+else -+ $as_echo "$as_me: program exited with status $ac_status" >&5 -+$as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+( exit $ac_status ) -+ac_cv_have_little_endian_long_long=no -+fi -+rm -rf conftest.dSYM -+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -+fi -+ -+ -+fi -+ -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_little_endian_long_long" >&5 -+$as_echo "$ac_cv_have_little_endian_long_long" >&6; } -+if test "$ac_cv_have_little_endian_long_long" = yes -+then -+ -+cat >>confdefs.h <<\_ACEOF -+#define HAVE_LITTLE_ENDIAN_LONG_LONG 1 -+_ACEOF -+ -+fi -+ -+{ $as_echo "$as_me:$LINENO: checking for long long off_t" >&5 -+$as_echo_n "checking for long long off_t... " >&6; } -+if test "${ac_cv_have_long_long_off_t+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ if test "$cross_compiling" = yes; then -+ # Should try to guess here -+ac_cv_have_long_long_off_t=no -+ -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+main () { -+ if (sizeof (off_t) == sizeof (long long) && -+ sizeof (off_t) > sizeof (long)) -+ return 0; -+ return 1; -+} -+ -+_ACEOF -+rm -f conftest$ac_exeext -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_link") 2>&5 -+ ac_status=$? -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext' -+ { (case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_try") 2>&5 -+ ac_status=$? -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); }; }; then -+ ac_cv_have_long_long_off_t=yes -+else -+ $as_echo "$as_me: program exited with status $ac_status" >&5 -+$as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+( exit $ac_status ) -+ac_cv_have_long_long_off_t=no -+fi -+rm -rf conftest.dSYM -+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -+fi -+ -+ -+fi -+ -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_long_long_off_t" >&5 -+$as_echo "$ac_cv_have_long_long_off_t" >&6; } -+if test "$ac_cv_have_long_long_off_t" = yes -+then -+ -+cat >>confdefs.h <<\_ACEOF -+#define HAVE_LONG_LONG_OFF_T 1 -+_ACEOF -+ -+fi -+ -+{ $as_echo "$as_me:$LINENO: checking for long long rlim_t" >&5 -+$as_echo_n "checking for long long rlim_t... " >&6; } -+if test "${ac_cv_have_long_long_rlim_t+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ if test "$cross_compiling" = yes; then -+ # Should try to guess here -+ac_cv_have_long_long_rlim_t=no -+ -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+#include -+#include -+main () { -+ if (sizeof (rlim_t) == sizeof (long long) && -+ sizeof (rlim_t) > sizeof (long)) -+ return 0; -+ return 1; -+} -+ -+_ACEOF -+rm -f conftest$ac_exeext -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_link") 2>&5 -+ ac_status=$? -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext' -+ { (case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_try") 2>&5 -+ ac_status=$? -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); }; }; then -+ ac_cv_have_long_long_rlim_t=yes -+else -+ $as_echo "$as_me: program exited with status $ac_status" >&5 -+$as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+( exit $ac_status ) -+ac_cv_have_long_long_rlim_t=no -+fi -+rm -rf conftest.dSYM -+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -+fi -+ -+ -+fi -+ -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_long_long_rlim_t" >&5 -+$as_echo "$ac_cv_have_long_long_rlim_t" >&6; } -+if test "$ac_cv_have_long_long_rlim_t" = yes -+then -+ -+cat >>confdefs.h <<\_ACEOF -+#define HAVE_LONG_LONG_RLIM_T 1 -+_ACEOF -+ -+fi -+ -+{ $as_echo "$as_me:$LINENO: checking for struct opthdr" >&5 -+$as_echo_n "checking for struct opthdr... " >&6; } -+if test "${ac_cv_type_struct_opthdr+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ ac_cv_type_struct_opthdr=no -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+ -+int -+main () -+{ -+if (sizeof (struct opthdr)) -+ return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+ -+int -+main () -+{ -+if (sizeof ((struct opthdr))) -+ return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ : -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_type_struct_opthdr=yes -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_struct_opthdr" >&5 -+$as_echo "$ac_cv_type_struct_opthdr" >&6; } -+if test "x$ac_cv_type_struct_opthdr" = x""yes; then -+ -+cat >>confdefs.h <<_ACEOF -+#define HAVE_STRUCT_OPTHDR 1 -+_ACEOF -+ -+ -+fi -+ -+{ $as_echo "$as_me:$LINENO: checking for struct t_opthdr" >&5 -+$as_echo_n "checking for struct t_opthdr... " >&6; } -+if test "${ac_cv_type_struct_t_opthdr+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ ac_cv_type_struct_t_opthdr=no -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+ -+int -+main () -+{ -+if (sizeof (struct t_opthdr)) -+ return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+ -+int -+main () -+{ -+if (sizeof ((struct t_opthdr))) -+ return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ : -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_type_struct_t_opthdr=yes -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_struct_t_opthdr" >&5 -+$as_echo "$ac_cv_type_struct_t_opthdr" >&6; } -+if test "x$ac_cv_type_struct_t_opthdr" = x""yes; then -+ -+cat >>confdefs.h <<_ACEOF -+#define HAVE_STRUCT_T_OPTHDR 1 -+_ACEOF -+ -+ -+fi -+ -+ -+if test x$opsys != xlinux; then -+ -+{ $as_echo "$as_me:$LINENO: checking for main in -lnsl" >&5 -+$as_echo_n "checking for main in -lnsl... " >&6; } -+if test "${ac_cv_lib_nsl_main+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ ac_check_lib_save_LIBS=$LIBS -+LIBS="-lnsl $LIBS" -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+ -+ -+int -+main () -+{ -+return main (); -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext conftest$ac_exeext -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_link") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && { -+ test "$cross_compiling" = yes || -+ $as_test_x conftest$ac_exeext -+ }; then -+ ac_cv_lib_nsl_main=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_lib_nsl_main=no -+fi -+ -+rm -rf conftest.dSYM -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ -+ conftest$ac_exeext conftest.$ac_ext -+LIBS=$ac_check_lib_save_LIBS -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_main" >&5 - $as_echo "$ac_cv_lib_nsl_main" >&6; } --if test "x$ac_cv_lib_nsl_main" = x""yes; then : -+if test "x$ac_cv_lib_nsl_main" = x""yes; then -+ cat >>confdefs.h <<_ACEOF -+#define HAVE_LIBNSL 1 -+_ACEOF -+ -+ LIBS="-lnsl $LIBS" -+ -+fi -+ -+fi -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+for ac_func in \ -+ fork \ -+ getdents \ -+ if_indextoname \ -+ inet_ntop \ -+ mctl \ -+ prctl \ -+ pread \ -+ sendmsg \ -+ sigaction \ -+ strerror \ -+ strsignal \ -+ sys_siglist \ -+ _sys_siglist \ -+ -+do -+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 -+$as_echo_n "checking for $ac_func... " >&6; } -+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then -+ $as_echo_n "(cached) " >&6 -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+/* Define $ac_func to an innocuous variant, in case declares $ac_func. -+ For example, HP-UX 11i declares gettimeofday. */ -+#define $ac_func innocuous_$ac_func -+ -+/* System header to define __stub macros and hopefully few prototypes, -+ which can conflict with char $ac_func (); below. -+ Prefer to if __STDC__ is defined, since -+ exists even on freestanding compilers. */ -+ -+#ifdef __STDC__ -+# include -+#else -+# include -+#endif -+ -+#undef $ac_func -+ -+/* Override any GCC internal prototype to avoid an error. -+ Use char because int might match the return type of a GCC -+ builtin and then its argument prototype would still apply. */ -+#ifdef __cplusplus -+extern "C" -+#endif -+char $ac_func (); -+/* The GNU C library defines this for functions which it implements -+ to always fail with ENOSYS. Some functions are actually named -+ something starting with __ and the normal name is an alias. */ -+#if defined __stub_$ac_func || defined __stub___$ac_func -+choke me -+#endif -+ -+int -+main () -+{ -+return $ac_func (); -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext conftest$ac_exeext -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_link") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && { -+ test "$cross_compiling" = yes || -+ $as_test_x conftest$ac_exeext -+ }; then -+ eval "$as_ac_var=yes" -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ eval "$as_ac_var=no" -+fi -+ -+rm -rf conftest.dSYM -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ -+ conftest$ac_exeext conftest.$ac_ext -+fi -+ac_res=`eval 'as_val=${'$as_ac_var'} -+ $as_echo "$as_val"'` -+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -+$as_echo "$ac_res" >&6; } -+as_val=`eval 'as_val=${'$as_ac_var'} -+ $as_echo "$as_val"'` -+ if test "x$as_val" = x""yes; then -+ cat >>confdefs.h <<_ACEOF -+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -+_ACEOF -+ -+fi -+done -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+for ac_header in \ -+ inttypes.h \ -+ ioctls.h \ -+ libaio.h \ -+ mqueue.h \ -+ poll.h \ -+ stropts.h \ -+ termio.h \ -+ sys/acl.h \ -+ sys/aio.h \ -+ sys/asynch.h \ -+ sys/conf.h \ -+ sys/door.h \ -+ sys/epoll.h \ -+ sys/filio.h \ -+ sys/ioctl.h \ -+ sys/nscsys.h \ -+ sys/poll.h \ -+ sys/ptrace.h \ -+ sys/reg.h \ -+ sys/stream.h \ -+ sys/sysconfig.h \ -+ sys/tihdr.h \ -+ sys/tiuser.h \ -+ sys/uio.h \ -+ sys/vfs.h \ -+ asm/cachectl.h \ -+ asm/sysmips.h \ -+ linux/capability.h \ -+ linux/ptrace.h \ -+ linux/utsname.h \ -+ -+do -+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then -+ { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -+$as_echo_n "checking for $ac_header... " >&6; } -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then -+ $as_echo_n "(cached) " >&6 -+fi -+ac_res=`eval 'as_val=${'$as_ac_Header'} -+ $as_echo "$as_val"'` -+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -+$as_echo "$ac_res" >&6; } -+else -+ # Is the header compilable? -+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 -+$as_echo_n "checking $ac_header usability... " >&6; } -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+$ac_includes_default -+#include <$ac_header> -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_header_compiler=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_header_compiler=no -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -+$as_echo "$ac_header_compiler" >&6; } -+ -+# Is the header present? -+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 -+$as_echo_n "checking $ac_header presence... " >&6; } -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include <$ac_header> -+_ACEOF -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then -+ ac_header_preproc=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_header_preproc=no -+fi -+ -+rm -f conftest.err conftest.$ac_ext -+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -+$as_echo "$ac_header_preproc" >&6; } -+ -+# So? What about this header? -+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in -+ yes:no: ) -+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} -+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} -+ ac_header_preproc=yes -+ ;; -+ no:yes:* ) -+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} -+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -+$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} -+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} -+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -+$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} -+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} -+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} -+ -+ ;; -+esac -+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -+$as_echo_n "checking for $ac_header... " >&6; } -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then -+ $as_echo_n "(cached) " >&6 -+else -+ eval "$as_ac_Header=\$ac_header_preproc" -+fi -+ac_res=`eval 'as_val=${'$as_ac_Header'} -+ $as_echo "$as_val"'` -+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -+$as_echo "$ac_res" >&6; } -+ -+fi -+as_val=`eval 'as_val=${'$as_ac_Header'} -+ $as_echo "$as_val"'` -+ if test "x$as_val" = x""yes; then -+ cat >>confdefs.h <<_ACEOF -+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -+_ACEOF -+ -+fi -+ -+done -+ -+ -+ -+ -+ -+for ac_header in linux/icmp.h linux/in6.h linux/netlink.h linux/if_packet.h -+do -+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -+$as_echo_n "checking for $ac_header... " >&6; } -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then -+ $as_echo_n "(cached) " >&6 -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+#include -+#include -+ -+#include <$ac_header> -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ eval "$as_ac_Header=yes" -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ eval "$as_ac_Header=no" -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+ac_res=`eval 'as_val=${'$as_ac_Header'} -+ $as_echo "$as_val"'` -+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -+$as_echo "$ac_res" >&6; } -+as_val=`eval 'as_val=${'$as_ac_Header'} -+ $as_echo "$as_val"'` -+ if test "x$as_val" = x""yes; then -+ cat >>confdefs.h <<_ACEOF -+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -+_ACEOF -+ -+fi -+ -+done -+ -+ -+for ac_header in asm/sigcontext.h -+do -+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -+$as_echo_n "checking for $ac_header... " >&6; } -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then -+ $as_echo_n "(cached) " >&6 -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+ -+#include <$ac_header> -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ eval "$as_ac_Header=yes" -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ eval "$as_ac_Header=no" -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+ac_res=`eval 'as_val=${'$as_ac_Header'} -+ $as_echo "$as_val"'` -+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -+$as_echo "$ac_res" >&6; } -+as_val=`eval 'as_val=${'$as_ac_Header'} -+ $as_echo "$as_val"'` -+ if test "x$as_val" = x""yes; then -+ cat >>confdefs.h <<_ACEOF -+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -+_ACEOF -+ -+fi -+ -+done -+ -+{ $as_echo "$as_me:$LINENO: checking for struct sigcontext_struct" >&5 -+$as_echo_n "checking for struct sigcontext_struct... " >&6; } -+if test "${ac_cv_type_struct_sigcontext_struct+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ ac_cv_type_struct_sigcontext_struct=no -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+ -+int -+main () -+{ -+if (sizeof (struct sigcontext_struct)) -+ return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+ -+int -+main () -+{ -+if (sizeof ((struct sigcontext_struct))) -+ return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ : -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_type_struct_sigcontext_struct=yes -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_struct_sigcontext_struct" >&5 -+$as_echo "$ac_cv_type_struct_sigcontext_struct" >&6; } -+if test "x$ac_cv_type_struct_sigcontext_struct" = x""yes; then -+ -+cat >>confdefs.h <<_ACEOF -+#define HAVE_STRUCT_SIGCONTEXT_STRUCT 1 -+_ACEOF -+ -+ -+fi -+{ $as_echo "$as_me:$LINENO: checking for struct sigcontext" >&5 -+$as_echo_n "checking for struct sigcontext... " >&6; } -+if test "${ac_cv_type_struct_sigcontext+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ ac_cv_type_struct_sigcontext=no -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+ -+int -+main () -+{ -+if (sizeof (struct sigcontext)) -+ return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+ -+int -+main () -+{ -+if (sizeof ((struct sigcontext))) -+ return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ : -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_type_struct_sigcontext=yes -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_struct_sigcontext" >&5 -+$as_echo "$ac_cv_type_struct_sigcontext" >&6; } -+if test "x$ac_cv_type_struct_sigcontext" = x""yes; then -+ -+cat >>confdefs.h <<_ACEOF -+#define HAVE_STRUCT_SIGCONTEXT 1 -+_ACEOF -+ -+ -+fi -+ -+ -+ -+for ac_header in netinet/tcp.h netinet/udp.h -+do -+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -+$as_echo_n "checking for $ac_header... " >&6; } -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then -+ $as_echo_n "(cached) " >&6 -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+ -+#include <$ac_header> -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ eval "$as_ac_Header=yes" -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ eval "$as_ac_Header=no" -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+ac_res=`eval 'as_val=${'$as_ac_Header'} -+ $as_echo "$as_val"'` -+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -+$as_echo "$ac_res" >&6; } -+as_val=`eval 'as_val=${'$as_ac_Header'} -+ $as_echo "$as_val"'` -+ if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF --#define HAVE_LIBNSL 1 -+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -+_ACEOF -+ -+fi -+ -+done -+ -+ -+{ $as_echo "$as_me:$LINENO: checking for MP procfs" >&5 -+$as_echo_n "checking for MP procfs... " >&6; } -+if test "${ac_cv_mp_procfs+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ if test "$cross_compiling" = yes; then -+ -+# Guess or punt. -+case "$host_os" in -+svr4.2*|svr5*) -+ ac_cv_mp_procfs=yes -+ ;; -+*) -+ ac_cv_mp_procfs=no -+ ;; -+esac -+ -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+ -+#include -+#include -+#include -+ -+main() -+{ -+ int pid; -+ char proc[32]; -+ FILE *ctl; -+ FILE *status; -+ int cmd; -+ struct pstatus pstatus; -+ -+ if ((pid = fork()) == 0) { -+ pause(); -+ exit(0); -+ } -+ sprintf(proc, "/proc/%d/ctl", pid); -+ if ((ctl = fopen(proc, "w")) == NULL) -+ goto fail; -+ sprintf(proc, "/proc/%d/status", pid); -+ if ((status = fopen (proc, "r")) == NULL) -+ goto fail; -+ cmd = PCSTOP; -+ if (write (fileno (ctl), &cmd, sizeof cmd) < 0) -+ goto fail; -+ if (read (fileno (status), &pstatus, sizeof pstatus) < 0) -+ goto fail; -+ kill(pid, SIGKILL); -+ exit(0); -+fail: -+ kill(pid, SIGKILL); -+ exit(1); -+} -+ -+_ACEOF -+rm -f conftest$ac_exeext -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_link") 2>&5 -+ ac_status=$? -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext' -+ { (case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_try") 2>&5 -+ ac_status=$? -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); }; }; then -+ ac_cv_mp_procfs=yes -+else -+ $as_echo "$as_me: program exited with status $ac_status" >&5 -+$as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+( exit $ac_status ) -+ac_cv_mp_procfs=no -+fi -+rm -rf conftest.dSYM -+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -+fi -+ -+ -+fi -+ -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_mp_procfs" >&5 -+$as_echo "$ac_cv_mp_procfs" >&6; } -+if test "$ac_cv_mp_procfs" = yes -+then -+ -+cat >>confdefs.h <<\_ACEOF -+#define HAVE_MP_PROCFS 1 -+_ACEOF -+ -+fi -+ -+{ $as_echo "$as_me:$LINENO: checking for pollable procfs" >&5 -+$as_echo_n "checking for pollable procfs... " >&6; } -+if test "${ac_cv_pollable_procfs+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ if test "$cross_compiling" = yes; then -+ -+# Guess or punt. -+case "$host_os" in -+solaris2*|irix5*|svr4.2uw*|svr5*) -+ ac_cv_pollable_procfs=yes -+ ;; -+*) -+ ac_cv_pollable_procfs=no -+ ;; -+esac -+ -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+ -+#include -+#include -+#include -+#include -+#include -+ -+#ifdef HAVE_MP_PROCFS -+#define PIOCSTOP PCSTOP -+#define POLLWANT POLLWRNORM -+#define PROC "/proc/%d/ctl" -+#define PROC_MODE "w" -+int IOCTL (int fd, int cmd, int arg) { -+ return write (fd, &cmd, sizeof cmd); -+} -+#else -+#define POLLWANT POLLPRI -+#define PROC "/proc/%d" -+#define PROC_MODE "r+" -+#define IOCTL ioctl -+#endif -+ -+main() -+{ -+ int pid; -+ char proc[32]; -+ FILE *pfp; -+ struct pollfd pfd; -+ -+ if ((pid = fork()) == 0) { -+ pause(); -+ exit(0); -+ } -+ sprintf(proc, PROC, pid); -+ if ((pfp = fopen(proc, PROC_MODE)) == NULL) -+ goto fail; -+ if (IOCTL(fileno(pfp), PIOCSTOP, NULL) < 0) -+ goto fail; -+ pfd.fd = fileno(pfp); -+ pfd.events = POLLWANT; -+ if (poll(&pfd, 1, 0) < 0) -+ goto fail; -+ if (!(pfd.revents & POLLWANT)) -+ goto fail; -+ kill(pid, SIGKILL); -+ exit(0); -+fail: -+ kill(pid, SIGKILL); -+ exit(1); -+} -+ -+_ACEOF -+rm -f conftest$ac_exeext -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_link") 2>&5 -+ ac_status=$? -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext' -+ { (case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_try") 2>&5 -+ ac_status=$? -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); }; }; then -+ ac_cv_pollable_procfs=yes -+else -+ $as_echo "$as_me: program exited with status $ac_status" >&5 -+$as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+( exit $ac_status ) -+ac_cv_pollable_procfs=no -+fi -+rm -rf conftest.dSYM -+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -+fi -+ -+ -+fi -+ -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_pollable_procfs" >&5 -+$as_echo "$ac_cv_pollable_procfs" >&6; } -+if test "$ac_cv_pollable_procfs" = yes -+then -+ -+cat >>confdefs.h <<\_ACEOF -+#define HAVE_POLLABLE_PROCFS 1 -+_ACEOF -+ -+fi -+ -+ -+{ $as_echo "$as_me:$LINENO: checking for struct msghdr.msg_control" >&5 -+$as_echo_n "checking for struct msghdr.msg_control... " >&6; } -+if test "${ac_cv_member_struct_msghdr_msg_control+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+ -+int -+main () -+{ -+static struct msghdr ac_aggr; -+if (ac_aggr.msg_control) -+return 0; -+ ; -+ return 0; -+} - _ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_msghdr_msg_control=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - -- LIBS="-lnsl $LIBS" -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+ -+int -+main () -+{ -+static struct msghdr ac_aggr; -+if (sizeof ac_aggr.msg_control) -+return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_msghdr_msg_control=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - -+ ac_cv_member_struct_msghdr_msg_control=no - fi - -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - --for ac_func in \ -- fork \ -- getdents \ -- if_indextoname \ -- inet_ntop \ -- mctl \ -- prctl \ -- pread \ -- sendmsg \ -- sigaction \ -- strerror \ -- strsignal \ -- sys_siglist \ -- _sys_siglist \ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_msghdr_msg_control" >&5 -+$as_echo "$ac_cv_member_struct_msghdr_msg_control" >&6; } -+if test "x$ac_cv_member_struct_msghdr_msg_control" = x""yes; then - --do : -- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` --ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" --eval as_val=\$$as_ac_var -- if test "x$as_val" = x""yes; then : -- cat >>confdefs.h <<_ACEOF --#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -+cat >>confdefs.h <<_ACEOF -+#define HAVE_STRUCT_MSGHDR_MSG_CONTROL 1 - _ACEOF - -+ - fi --done - --for ac_header in \ -- inttypes.h \ -- ioctls.h \ -- libaio.h \ -- mqueue.h \ -- poll.h \ -- stropts.h \ -- termio.h \ -- sys/acl.h \ -- sys/aio.h \ -- sys/asynch.h \ -- sys/conf.h \ -- sys/door.h \ -- sys/epoll.h \ -- sys/filio.h \ -- sys/ioctl.h \ -- sys/nscsys.h \ -- sys/poll.h \ -- sys/ptrace.h \ -- sys/reg.h \ -- sys/stream.h \ -- sys/sysconfig.h \ -- sys/tihdr.h \ -- sys/tiuser.h \ -- sys/uio.h \ -- sys/vfs.h \ -- asm/cachectl.h \ -- asm/sysmips.h \ -- linux/capability.h \ -- linux/ptrace.h \ -- linux/utsname.h \ -+{ $as_echo "$as_me:$LINENO: checking for pr_syscall in struct prstatus" >&5 -+$as_echo_n "checking for pr_syscall in struct prstatus... " >&6; } -+if test "${ac_cv_struct_pr_syscall+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+int -+main () -+{ -+#ifdef HAVE_MP_PROCFS -+pstatus_t s; -+s.pr_lwp.pr_syscall -+#else -+prstatus_t s; -+s.pr_syscall -+#endif -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_struct_pr_syscall=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - --do : -- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` --ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" --eval as_val=\$$as_ac_Header -- if test "x$as_val" = x""yes; then : -- cat >>confdefs.h <<_ACEOF --#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -+ ac_cv_struct_pr_syscall=no -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+ -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_struct_pr_syscall" >&5 -+$as_echo "$ac_cv_struct_pr_syscall" >&6; } -+if test "$ac_cv_struct_pr_syscall" = yes -+then -+ -+cat >>confdefs.h <<\_ACEOF -+#define HAVE_PR_SYSCALL 1 -+_ACEOF -+ -+fi -+ -+ -+{ $as_echo "$as_me:$LINENO: checking for struct T_conn_res.QUEUE_ptr" >&5 -+$as_echo_n "checking for struct T_conn_res.QUEUE_ptr... " >&6; } -+if test "${ac_cv_member_struct_T_conn_res_QUEUE_ptr+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+#include -+ -+int -+main () -+{ -+static struct T_conn_res ac_aggr; -+if (ac_aggr.QUEUE_ptr) -+return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_T_conn_res_QUEUE_ptr=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+#include -+ -+int -+main () -+{ -+static struct T_conn_res ac_aggr; -+if (sizeof ac_aggr.QUEUE_ptr) -+return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_T_conn_res_QUEUE_ptr=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_member_struct_T_conn_res_QUEUE_ptr=no -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_T_conn_res_QUEUE_ptr" >&5 -+$as_echo "$ac_cv_member_struct_T_conn_res_QUEUE_ptr" >&6; } -+if test "x$ac_cv_member_struct_T_conn_res_QUEUE_ptr" = x""yes; then -+ -+cat >>confdefs.h <<_ACEOF -+#define HAVE_STRUCT_T_CONN_RES_QUEUE_PTR 1 -+_ACEOF -+ -+ -+fi -+{ $as_echo "$as_me:$LINENO: checking for struct T_conn_res.ACCEPTOR_id" >&5 -+$as_echo_n "checking for struct T_conn_res.ACCEPTOR_id... " >&6; } -+if test "${ac_cv_member_struct_T_conn_res_ACCEPTOR_id+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+#include -+ -+int -+main () -+{ -+static struct T_conn_res ac_aggr; -+if (ac_aggr.ACCEPTOR_id) -+return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_T_conn_res_ACCEPTOR_id=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+#include -+ -+int -+main () -+{ -+static struct T_conn_res ac_aggr; -+if (sizeof ac_aggr.ACCEPTOR_id) -+return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_T_conn_res_ACCEPTOR_id=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_member_struct_T_conn_res_ACCEPTOR_id=no -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_T_conn_res_ACCEPTOR_id" >&5 -+$as_echo "$ac_cv_member_struct_T_conn_res_ACCEPTOR_id" >&6; } -+if test "x$ac_cv_member_struct_T_conn_res_ACCEPTOR_id" = x""yes; then -+ -+cat >>confdefs.h <<_ACEOF -+#define HAVE_STRUCT_T_CONN_RES_ACCEPTOR_ID 1 - _ACEOF - -+ - fi - --done - --for ac_header in linux/icmp.h linux/in6.h linux/netlink.h linux/if_packet.h --do : -- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` --ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "#include --#include --" --eval as_val=\$$as_ac_Header -- if test "x$as_val" = x""yes; then : -- cat >>confdefs.h <<_ACEOF --#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -+{ $as_echo "$as_me:$LINENO: checking for struct __old_kernel_stat" >&5 -+$as_echo_n "checking for struct __old_kernel_stat... " >&6; } -+if test "${ac_cv_type_struct___old_kernel_stat+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ ac_cv_type_struct___old_kernel_stat=no -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ - _ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include - --fi -- --done -+int -+main () -+{ -+if (sizeof (struct __old_kernel_stat)) -+ return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include - --for ac_header in asm/sigcontext.h --do : -- ac_fn_c_check_header_compile "$LINENO" "asm/sigcontext.h" "ac_cv_header_asm_sigcontext_h" "#include --" --if test "x$ac_cv_header_asm_sigcontext_h" = x""yes; then : -- cat >>confdefs.h <<_ACEOF --#define HAVE_ASM_SIGCONTEXT_H 1 -+int -+main () -+{ -+if (sizeof ((struct __old_kernel_stat))) -+ return 0; -+ ; -+ return 0; -+} - _ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ : -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - -+ ac_cv_type_struct___old_kernel_stat=yes - fi - --done -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - --ac_fn_c_check_type "$LINENO" "struct sigcontext_struct" "ac_cv_type_struct_sigcontext_struct" "#include --" --if test "x$ac_cv_type_struct_sigcontext_struct" = x""yes; then : -+ -+fi -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_struct___old_kernel_stat" >&5 -+$as_echo "$ac_cv_type_struct___old_kernel_stat" >&6; } -+if test "x$ac_cv_type_struct___old_kernel_stat" = x""yes; then - - cat >>confdefs.h <<_ACEOF --#define HAVE_STRUCT_SIGCONTEXT_STRUCT 1 -+#define HAVE_STRUCT___OLD_KERNEL_STAT 1 - _ACEOF - - - fi --ac_fn_c_check_type "$LINENO" "struct sigcontext" "ac_cv_type_struct_sigcontext" "#include --" --if test "x$ac_cv_type_struct_sigcontext" = x""yes; then : - --cat >>confdefs.h <<_ACEOF --#define HAVE_STRUCT_SIGCONTEXT 1 -+ -+{ $as_echo "$as_me:$LINENO: checking for struct pt_all_user_regs" >&5 -+$as_echo_n "checking for struct pt_all_user_regs... " >&6; } -+if test "${ac_cv_type_struct_pt_all_user_regs+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ ac_cv_type_struct_pt_all_user_regs=no -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+ -+int -+main () -+{ -+if (sizeof (struct pt_all_user_regs)) -+ return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ - _ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include - -+int -+main () -+{ -+if (sizeof ((struct pt_all_user_regs))) -+ return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ : -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - -+ ac_cv_type_struct_pt_all_user_regs=yes - fi - --for ac_header in netinet/tcp.h netinet/udp.h --do : -- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` --ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "#include --" --eval as_val=\$$as_ac_Header -- if test "x$as_val" = x""yes; then : -- cat >>confdefs.h <<_ACEOF --#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 --_ACEOF -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ - - fi - --done -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_struct_pt_all_user_regs" >&5 -+$as_echo "$ac_cv_type_struct_pt_all_user_regs" >&6; } -+if test "x$ac_cv_type_struct_pt_all_user_regs" = x""yes; then -+ -+cat >>confdefs.h <<_ACEOF -+#define HAVE_STRUCT_PT_ALL_USER_REGS 1 -+_ACEOF - - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for MP procfs" >&5 --$as_echo_n "checking for MP procfs... " >&6; } --if test "${ac_cv_mp_procfs+set}" = set; then : -+fi -+{ $as_echo "$as_me:$LINENO: checking for struct ia64_fpreg" >&5 -+$as_echo_n "checking for struct ia64_fpreg... " >&6; } -+if test "${ac_cv_type_struct_ia64_fpreg+set}" = set; then - $as_echo_n "(cached) " >&6 - else -- if test "$cross_compiling" = yes; then : -+ ac_cv_type_struct_ia64_fpreg=no -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include - --# Guess or punt. --case "$host_os" in --svr4.2*|svr5*) -- ac_cv_mp_procfs=yes -- ;; --*) -- ac_cv_mp_procfs=no -- ;; -+int -+main () -+{ -+if (sizeof (struct ia64_fpreg)) -+ return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; - esac -- --else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ -+#include - --#include --#include --#include -- --main() -+int -+main () - { -- int pid; -- char proc[32]; -- FILE *ctl; -- FILE *status; -- int cmd; -- struct pstatus pstatus; -- -- if ((pid = fork()) == 0) { -- pause(); -- exit(0); -- } -- sprintf(proc, "/proc/%d/ctl", pid); -- if ((ctl = fopen(proc, "w")) == NULL) -- goto fail; -- sprintf(proc, "/proc/%d/status", pid); -- if ((status = fopen (proc, "r")) == NULL) -- goto fail; -- cmd = PCSTOP; -- if (write (fileno (ctl), &cmd, sizeof cmd) < 0) -- goto fail; -- if (read (fileno (status), &pstatus, sizeof pstatus) < 0) -- goto fail; -- kill(pid, SIGKILL); -- exit(0); --fail: -- kill(pid, SIGKILL); -- exit(1); -+if (sizeof ((struct ia64_fpreg))) -+ return 0; -+ ; -+ return 0; - } -- - _ACEOF --if ac_fn_c_try_run "$LINENO"; then : -- ac_cv_mp_procfs=yes -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ : - else -- ac_cv_mp_procfs=no -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ ac_cv_type_struct_ia64_fpreg=yes - fi --rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ -- conftest.$ac_objext conftest.beam conftest.$ac_ext -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ - fi - -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_struct_ia64_fpreg" >&5 -+$as_echo "$ac_cv_type_struct_ia64_fpreg" >&6; } -+if test "x$ac_cv_type_struct_ia64_fpreg" = x""yes; then - --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_mp_procfs" >&5 --$as_echo "$ac_cv_mp_procfs" >&6; } --if test "$ac_cv_mp_procfs" = yes --then -+cat >>confdefs.h <<_ACEOF -+#define HAVE_STRUCT_IA64_FPREG 1 -+_ACEOF - --$as_echo "#define HAVE_MP_PROCFS 1" >>confdefs.h - - fi - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pollable procfs" >&5 --$as_echo_n "checking for pollable procfs... " >&6; } --if test "${ac_cv_pollable_procfs+set}" = set; then : -- $as_echo_n "(cached) " >&6 --else -- if test "$cross_compiling" = yes; then : -- --# Guess or punt. --case "$host_os" in --solaris2*|irix5*|svr4.2uw*|svr5*) -- ac_cv_pollable_procfs=yes -- ;; --*) -- ac_cv_pollable_procfs=no -- ;; --esac - -+{ $as_echo "$as_me:$LINENO: checking for struct user_desc" >&5 -+$as_echo_n "checking for struct user_desc... " >&6; } -+if test "${ac_cv_type_struct_user_desc+set}" = set; then -+ $as_echo_n "(cached) " >&6 - else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ ac_cv_type_struct_user_desc=no -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ -+#include - --#include --#include --#include --#include --#include -- --#ifdef HAVE_MP_PROCFS --#define PIOCSTOP PCSTOP --#define POLLWANT POLLWRNORM --#define PROC "/proc/%d/ctl" --#define PROC_MODE "w" --int IOCTL (int fd, int cmd, int arg) { -- return write (fd, &cmd, sizeof cmd); -+int -+main () -+{ -+if (sizeof (struct user_desc)) -+ return 0; -+ ; -+ return 0; - } --#else --#define POLLWANT POLLPRI --#define PROC "/proc/%d" --#define PROC_MODE "r+" --#define IOCTL ioctl --#endif -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include - --main() -+int -+main () - { -- int pid; -- char proc[32]; -- FILE *pfp; -- struct pollfd pfd; -- -- if ((pid = fork()) == 0) { -- pause(); -- exit(0); -- } -- sprintf(proc, PROC, pid); -- if ((pfp = fopen(proc, PROC_MODE)) == NULL) -- goto fail; -- if (IOCTL(fileno(pfp), PIOCSTOP, NULL) < 0) -- goto fail; -- pfd.fd = fileno(pfp); -- pfd.events = POLLWANT; -- if (poll(&pfd, 1, 0) < 0) -- goto fail; -- if (!(pfd.revents & POLLWANT)) -- goto fail; -- kill(pid, SIGKILL); -- exit(0); --fail: -- kill(pid, SIGKILL); -- exit(1); -+if (sizeof ((struct user_desc))) -+ return 0; -+ ; -+ return 0; - } -- - _ACEOF --if ac_fn_c_try_run "$LINENO"; then : -- ac_cv_pollable_procfs=yes -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ : - else -- ac_cv_pollable_procfs=no --fi --rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ -- conftest.$ac_objext conftest.beam conftest.$ac_ext --fi -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - -+ ac_cv_type_struct_user_desc=yes - fi - --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_pollable_procfs" >&5 --$as_echo "$ac_cv_pollable_procfs" >&6; } --if test "$ac_cv_pollable_procfs" = yes --then -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - --$as_echo "#define HAVE_POLLABLE_PROCFS 1" >>confdefs.h - - fi - -- --ac_fn_c_check_member "$LINENO" "struct msghdr" "msg_control" "ac_cv_member_struct_msghdr_msg_control" "#include --" --if test "x$ac_cv_member_struct_msghdr_msg_control" = x""yes; then : -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_struct_user_desc" >&5 -+$as_echo "$ac_cv_type_struct_user_desc" >&6; } -+if test "x$ac_cv_type_struct_user_desc" = x""yes; then - - cat >>confdefs.h <<_ACEOF --#define HAVE_STRUCT_MSGHDR_MSG_CONTROL 1 -+#define HAVE_STRUCT_USER_DESC 1 - _ACEOF - - - fi - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pr_syscall in struct prstatus" >&5 --$as_echo_n "checking for pr_syscall in struct prstatus... " >&6; } --if test "${ac_cv_struct_pr_syscall+set}" = set; then : -+ -+{ $as_echo "$as_me:$LINENO: checking for struct dqblk.dqb_curblocks" >&5 -+$as_echo_n "checking for struct dqblk.dqb_curblocks... " >&6; } -+if test "${ac_cv_member_struct_dqblk_dqb_curblocks+set}" = set; then - $as_echo_n "(cached) " >&6 - else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ --#include -+#include -+ - int - main () - { --#ifdef HAVE_MP_PROCFS --pstatus_t s; --s.pr_lwp.pr_syscall --#else --prstatus_t s; --s.pr_syscall --#endif -+static struct dqblk ac_aggr; -+if (ac_aggr.dqb_curblocks) -+return 0; - ; - return 0; - } - _ACEOF --if ac_fn_c_try_compile "$LINENO"; then : -- ac_cv_struct_pr_syscall=yes -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_dqblk_dqb_curblocks=yes - else -- ac_cv_struct_pr_syscall=no --fi --rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext --fi -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_pr_syscall" >&5 --$as_echo "$ac_cv_struct_pr_syscall" >&6; } --if test "$ac_cv_struct_pr_syscall" = yes --then -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include - --$as_echo "#define HAVE_PR_SYSCALL 1" >>confdefs.h -+int -+main () -+{ -+static struct dqblk ac_aggr; -+if (sizeof ac_aggr.dqb_curblocks) -+return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_dqblk_dqb_curblocks=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - -+ ac_cv_member_struct_dqblk_dqb_curblocks=no - fi - -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi - --ac_fn_c_check_member "$LINENO" "struct T_conn_res" "QUEUE_ptr" "ac_cv_member_struct_T_conn_res_QUEUE_ptr" "#include --#include --" --if test "x$ac_cv_member_struct_T_conn_res_QUEUE_ptr" = x""yes; then : -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_dqblk_dqb_curblocks" >&5 -+$as_echo "$ac_cv_member_struct_dqblk_dqb_curblocks" >&6; } -+if test "x$ac_cv_member_struct_dqblk_dqb_curblocks" = x""yes; then - - cat >>confdefs.h <<_ACEOF --#define HAVE_STRUCT_T_CONN_RES_QUEUE_PTR 1 -+#define HAVE_STRUCT_DQBLK_DQB_CURBLOCKS 1 - _ACEOF - - - fi --ac_fn_c_check_member "$LINENO" "struct T_conn_res" "ACCEPTOR_id" "ac_cv_member_struct_T_conn_res_ACCEPTOR_id" "#include --#include --" --if test "x$ac_cv_member_struct_T_conn_res_ACCEPTOR_id" = x""yes; then : - --cat >>confdefs.h <<_ACEOF --#define HAVE_STRUCT_T_CONN_RES_ACCEPTOR_ID 1 -+ -+{ $as_echo "$as_me:$LINENO: checking for struct sigcontext.sc_hi2" >&5 -+$as_echo_n "checking for struct sigcontext.sc_hi2... " >&6; } -+if test "${ac_cv_member_struct_sigcontext_sc_hi2+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+#ifdef HAVE_ASM_SIGCONTEXT_H -+# include -+#endif -+ -+int -+main () -+{ -+static struct sigcontext ac_aggr; -+if (ac_aggr.sc_hi2) -+return 0; -+ ; -+ return 0; -+} - _ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_sigcontext_sc_hi2=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+#ifdef HAVE_ASM_SIGCONTEXT_H -+# include -+#endif - -+int -+main () -+{ -+static struct sigcontext ac_aggr; -+if (sizeof ac_aggr.sc_hi2) -+return 0; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_member_struct_sigcontext_sc_hi2=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - -+ ac_cv_member_struct_sigcontext_sc_hi2=no - fi - -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi - --ac_fn_c_check_type "$LINENO" "struct __old_kernel_stat" "ac_cv_type_struct___old_kernel_stat" "#include --" --if test "x$ac_cv_type_struct___old_kernel_stat" = x""yes; then : -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_sigcontext_sc_hi2" >&5 -+$as_echo "$ac_cv_member_struct_sigcontext_sc_hi2" >&6; } -+if test "x$ac_cv_member_struct_sigcontext_sc_hi2" = x""yes; then - - cat >>confdefs.h <<_ACEOF --#define HAVE_STRUCT___OLD_KERNEL_STAT 1 -+#define HAVE_STRUCT_SIGCONTEXT_SC_HI2 1 - _ACEOF - - - fi - - --ac_fn_c_check_type "$LINENO" "struct pt_all_user_regs" "ac_cv_type_struct_pt_all_user_regs" "#include --" --if test "x$ac_cv_type_struct_pt_all_user_regs" = x""yes; then : - --cat >>confdefs.h <<_ACEOF --#define HAVE_STRUCT_PT_ALL_USER_REGS 1 -+{ $as_echo "$as_me:$LINENO: checking whether sys_errlist is declared" >&5 -+$as_echo_n "checking whether sys_errlist is declared... " >&6; } -+if test "${ac_cv_have_decl_sys_errlist+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+$ac_includes_default -+int -+main () -+{ -+#ifndef sys_errlist -+ (void) sys_errlist; -+#endif -+ -+ ; -+ return 0; -+} - _ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_have_decl_sys_errlist=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - -+ ac_cv_have_decl_sys_errlist=no -+fi - -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --ac_fn_c_check_type "$LINENO" "struct ia64_fpreg" "ac_cv_type_struct_ia64_fpreg" "#include --" --if test "x$ac_cv_type_struct_ia64_fpreg" = x""yes; then : -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_sys_errlist" >&5 -+$as_echo "$ac_cv_have_decl_sys_errlist" >&6; } -+if test "x$ac_cv_have_decl_sys_errlist" = x""yes; then - - cat >>confdefs.h <<_ACEOF --#define HAVE_STRUCT_IA64_FPREG 1 -+#define HAVE_DECL_SYS_ERRLIST 1 -+_ACEOF -+ -+ -+else -+ cat >>confdefs.h <<_ACEOF -+#define HAVE_DECL_SYS_ERRLIST 0 - _ACEOF - - - fi - - --ac_fn_c_check_type "$LINENO" "struct user_desc" "ac_cv_type_struct_user_desc" "#include --" --if test "x$ac_cv_type_struct_user_desc" = x""yes; then : -+{ $as_echo "$as_me:$LINENO: checking whether sys_siglist is declared" >&5 -+$as_echo_n "checking whether sys_siglist is declared... " >&6; } -+if test "${ac_cv_have_decl_sys_siglist+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include - --cat >>confdefs.h <<_ACEOF --#define HAVE_STRUCT_USER_DESC 1 -+int -+main () -+{ -+#ifndef sys_siglist -+ (void) sys_siglist; -+#endif -+ -+ ; -+ return 0; -+} - _ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_have_decl_sys_siglist=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - -+ ac_cv_have_decl_sys_siglist=no -+fi - -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_sys_siglist" >&5 -+$as_echo "$ac_cv_have_decl_sys_siglist" >&6; } -+if test "x$ac_cv_have_decl_sys_siglist" = x""yes; then - -+cat >>confdefs.h <<_ACEOF -+#define HAVE_DECL_SYS_SIGLIST 1 -+_ACEOF - --ac_fn_c_check_member "$LINENO" "struct dqblk" "dqb_curblocks" "ac_cv_member_struct_dqblk_dqb_curblocks" "#include --" --if test "x$ac_cv_member_struct_dqblk_dqb_curblocks" = x""yes; then : - --cat >>confdefs.h <<_ACEOF --#define HAVE_STRUCT_DQBLK_DQB_CURBLOCKS 1 -+else -+ cat >>confdefs.h <<_ACEOF -+#define HAVE_DECL_SYS_SIGLIST 0 - _ACEOF - - - fi -+{ $as_echo "$as_me:$LINENO: checking whether _sys_siglist is declared" >&5 -+$as_echo_n "checking whether _sys_siglist is declared... " >&6; } -+if test "${ac_cv_have_decl__sys_siglist+set}" = set; then -+ $as_echo_n "(cached) " >&6 -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include - -- --ac_fn_c_check_member "$LINENO" "struct sigcontext" "sc_hi2" "ac_cv_member_struct_sigcontext_sc_hi2" "#include --#ifdef HAVE_ASM_SIGCONTEXT_H --# include -+int -+main () -+{ -+#ifndef _sys_siglist -+ (void) _sys_siglist; - #endif --" --if test "x$ac_cv_member_struct_sigcontext_sc_hi2" = x""yes; then : - --cat >>confdefs.h <<_ACEOF --#define HAVE_STRUCT_SIGCONTEXT_SC_HI2 1 -+ ; -+ return 0; -+} - _ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -+$as_echo "$ac_try_echo") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_have_decl__sys_siglist=yes -+else -+ $as_echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - -- -+ ac_cv_have_decl__sys_siglist=no - fi - -- -- --ac_fn_c_check_decl "$LINENO" "sys_errlist" "ac_cv_have_decl_sys_errlist" "$ac_includes_default" --if test "x$ac_cv_have_decl_sys_errlist" = x""yes; then : -- ac_have_decl=1 --else -- ac_have_decl=0 -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi -+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl__sys_siglist" >&5 -+$as_echo "$ac_cv_have_decl__sys_siglist" >&6; } -+if test "x$ac_cv_have_decl__sys_siglist" = x""yes; then - - cat >>confdefs.h <<_ACEOF --#define HAVE_DECL_SYS_ERRLIST $ac_have_decl -+#define HAVE_DECL__SYS_SIGLIST 1 - _ACEOF - --ac_fn_c_check_decl "$LINENO" "sys_siglist" "ac_cv_have_decl_sys_siglist" "#include --" --if test "x$ac_cv_have_decl_sys_siglist" = x""yes; then : -- ac_have_decl=1 --else -- ac_have_decl=0 --fi - --cat >>confdefs.h <<_ACEOF --#define HAVE_DECL_SYS_SIGLIST $ac_have_decl --_ACEOF --ac_fn_c_check_decl "$LINENO" "_sys_siglist" "ac_cv_have_decl__sys_siglist" "#include --" --if test "x$ac_cv_have_decl__sys_siglist" = x""yes; then : -- ac_have_decl=1 - else -- ac_have_decl=0 -+ cat >>confdefs.h <<_ACEOF -+#define HAVE_DECL__SYS_SIGLIST 0 -+_ACEOF -+ -+ - fi - --cat >>confdefs.h <<_ACEOF --#define HAVE_DECL__SYS_SIGLIST $ac_have_decl --_ACEOF - - - # Extract the first word of "perl", so it can be a program name with args. - set dummy perl; ac_word=$2 --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_path_PERL+set}" = set; then : -+if test "${ac_cv_path_PERL+set}" = set; then - $as_echo_n "(cached) " >&6 - else - case $PERL in -@@ -6313,14 +10706,14 @@ - do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -+ for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" -- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done -- done -+done - IFS=$as_save_IFS - - ;; -@@ -6328,10 +10721,10 @@ - fi - PERL=$ac_cv_path_PERL - if test -n "$PERL"; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 -+ { $as_echo "$as_me:$LINENO: result: $PERL" >&5 - $as_echo "$PERL" >&6; } - else -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+ { $as_echo "$as_me:$LINENO: result: no" >&5 - $as_echo "no" >&6; } - fi - -@@ -6366,13 +10759,13 @@ - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( -- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -+ *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 - $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( -- *) { eval $ac_var=; unset $ac_var;} ;; -+ *) $as_unset $ac_var ;; - esac ;; - esac - done -@@ -6380,8 +10773,8 @@ - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) -- # `set' does not quote correctly, so add quotes: double-quote -- # substitution turns \\\\ into \\, and sed turns \\ into \. -+ # `set' does not quote correctly, so add quotes (double-quote -+ # substitution turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" -@@ -6404,11 +10797,11 @@ - if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && -- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -+ { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5 - $as_echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else -- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -+ { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 - $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi - fi -@@ -6428,8 +10821,8 @@ - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. -- as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" -- as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -+ ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" -+ ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' - done - LIBOBJS=$ac_libobjs - -@@ -6445,50 +10838,76 @@ - fi - - if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then -- as_fn_error "conditional \"MAINTAINER_MODE\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. -+Usually this means the macro was only invoked conditionally." >&5 -+$as_echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. -+Usually this means the macro was only invoked conditionally." >&2;} -+ { (exit 1); exit 1; }; } - fi - if test -z "${LINUX_TRUE}" && test -z "${LINUX_FALSE}"; then -- as_fn_error "conditional \"LINUX\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: conditional \"LINUX\" was never defined. -+Usually this means the macro was only invoked conditionally." >&5 -+$as_echo "$as_me: error: conditional \"LINUX\" was never defined. -+Usually this means the macro was only invoked conditionally." >&2;} -+ { (exit 1); exit 1; }; } - fi - if test -z "${I386_TRUE}" && test -z "${I386_FALSE}"; then -- as_fn_error "conditional \"I386\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: conditional \"I386\" was never defined. -+Usually this means the macro was only invoked conditionally." >&5 -+$as_echo "$as_me: error: conditional \"I386\" was never defined. -+Usually this means the macro was only invoked conditionally." >&2;} -+ { (exit 1); exit 1; }; } - fi - if test -z "${X86_64_TRUE}" && test -z "${X86_64_FALSE}"; then -- as_fn_error "conditional \"X86_64\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: conditional \"X86_64\" was never defined. -+Usually this means the macro was only invoked conditionally." >&5 -+$as_echo "$as_me: error: conditional \"X86_64\" was never defined. -+Usually this means the macro was only invoked conditionally." >&2;} -+ { (exit 1); exit 1; }; } - fi - if test -z "${SUNOS4_TRUE}" && test -z "${SUNOS4_FALSE}"; then -- as_fn_error "conditional \"SUNOS4\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: conditional \"SUNOS4\" was never defined. -+Usually this means the macro was only invoked conditionally." >&5 -+$as_echo "$as_me: error: conditional \"SUNOS4\" was never defined. -+Usually this means the macro was only invoked conditionally." >&2;} -+ { (exit 1); exit 1; }; } - fi - if test -z "${SVR4_TRUE}" && test -z "${SVR4_FALSE}"; then -- as_fn_error "conditional \"SVR4\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: conditional \"SVR4\" was never defined. -+Usually this means the macro was only invoked conditionally." >&5 -+$as_echo "$as_me: error: conditional \"SVR4\" was never defined. -+Usually this means the macro was only invoked conditionally." >&2;} -+ { (exit 1); exit 1; }; } - fi - if test -z "${FREEBSD_TRUE}" && test -z "${FREEBSD_FALSE}"; then -- as_fn_error "conditional \"FREEBSD\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: conditional \"FREEBSD\" was never defined. -+Usually this means the macro was only invoked conditionally." >&5 -+$as_echo "$as_me: error: conditional \"FREEBSD\" was never defined. -+Usually this means the macro was only invoked conditionally." >&2;} -+ { (exit 1); exit 1; }; } - fi - if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then -- as_fn_error "conditional \"AMDEP\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. -+Usually this means the macro was only invoked conditionally." >&5 -+$as_echo "$as_me: error: conditional \"AMDEP\" was never defined. -+Usually this means the macro was only invoked conditionally." >&2;} -+ { (exit 1); exit 1; }; } - fi - if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then -- as_fn_error "conditional \"am__fastdepCC\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. -+Usually this means the macro was only invoked conditionally." >&5 -+$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. -+Usually this means the macro was only invoked conditionally." >&2;} -+ { (exit 1); exit 1; }; } - fi - - : ${CONFIG_STATUS=./config.status} - ac_write_fail=0 - ac_clean_files_save=$ac_clean_files - ac_clean_files="$ac_clean_files $CONFIG_STATUS" --{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -+{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 - $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} --as_write_fail=0 --cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -+cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - #! $SHELL - # Generated by $as_me. - # Run this file to recreate the current configuration. -@@ -6498,18 +10917,17 @@ - debug=false - ac_cs_recheck=false - ac_cs_silent=false -- - SHELL=\${CONFIG_SHELL-$SHELL} --export SHELL --_ASEOF --cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 --## -------------------- ## --## M4sh Initialization. ## --## -------------------- ## -+_ACEOF -+ -+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -+## --------------------- ## -+## M4sh Initialization. ## -+## --------------------- ## - - # Be more Bourne compatible - DUALCASE=1; export DUALCASE # for MKS sh --if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : -+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which -@@ -6517,15 +10935,23 @@ - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST - else -- case `(set -o) 2>/dev/null` in #( -- *posix*) : -- set -o posix ;; #( -- *) : -- ;; -+ case `(set -o) 2>/dev/null` in -+ *posix*) set -o posix ;; - esac -+ - fi - - -+ -+ -+# PATH needs CR -+# Avoid depending upon Character Ranges. -+as_cr_letters='abcdefghijklmnopqrstuvwxyz' -+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -+as_cr_Letters=$as_cr_letters$as_cr_LETTERS -+as_cr_digits='0123456789' -+as_cr_alnum=$as_cr_Letters$as_cr_digits -+ - as_nl=' - ' - export as_nl -@@ -6533,13 +10959,7 @@ - as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo - as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo --# Prefer a ksh shell builtin over an external printf program on Solaris, --# but without wasting forks for bash or zsh. --if test -z "$BASH_VERSION$ZSH_VERSION" \ -- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then -- as_echo='print -r --' -- as_echo_n='print -rn --' --elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then -+if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' - else -@@ -6550,7 +10970,7 @@ - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; -- case $arg in #( -+ case $arg in - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; -@@ -6573,6 +10993,13 @@ - } - fi - -+# Support unset when possible. -+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then -+ as_unset=unset -+else -+ as_unset=false -+fi -+ - - # IFS - # We need space, tab and new line, in precisely that order. Quoting is -@@ -6582,15 +11009,15 @@ - IFS=" "" $as_nl" - - # Find who we are. Look in the path if we contain no directory separator. --case $0 in #(( -+case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH - do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. -- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -- done -+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -+done - IFS=$as_save_IFS - - ;; -@@ -6602,16 +11029,12 @@ - fi - if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 -- exit 1 -+ { (exit 1); exit 1; } - fi - --# Unset variables that we do not need and which cause bugs (e.g. in --# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" --# suppresses any "Segmentation fault" message there. '((' could --# trigger a bug in pdksh 5.2.14. --for as_var in BASH_ENV ENV MAIL MAILPATH --do eval test x\${$as_var+set} = xset \ -- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -+# Work around bugs in pre-3.0 UWIN ksh. -+for as_var in ENV MAIL MAILPATH -+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - done - PS1='$ ' - PS2='> ' -@@ -6623,89 +11046,7 @@ - LANGUAGE=C - export LANGUAGE - --# CDPATH. --(unset CDPATH) >/dev/null 2>&1 && unset CDPATH -- -- --# as_fn_error ERROR [LINENO LOG_FD] --# --------------------------------- --# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are --# provided, also output the error to LOG_FD, referencing LINENO. Then exit the --# script with status $?, using 1 if that was 0. --as_fn_error () --{ -- as_status=$?; test $as_status -eq 0 && as_status=1 -- if test "$3"; then -- as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack -- $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 -- fi -- $as_echo "$as_me: error: $1" >&2 -- as_fn_exit $as_status --} # as_fn_error -- -- --# as_fn_set_status STATUS --# ----------------------- --# Set $? to STATUS, without forking. --as_fn_set_status () --{ -- return $1 --} # as_fn_set_status -- --# as_fn_exit STATUS --# ----------------- --# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. --as_fn_exit () --{ -- set +e -- as_fn_set_status $1 -- exit $1 --} # as_fn_exit -- --# as_fn_unset VAR --# --------------- --# Portably unset VAR. --as_fn_unset () --{ -- { eval $1=; unset $1;} --} --as_unset=as_fn_unset --# as_fn_append VAR VALUE --# ---------------------- --# Append the text in VALUE to the end of the definition contained in VAR. Take --# advantage of any shell optimizations that allow amortized linear growth over --# repeated appends, instead of the typical quadratic growth present in naive --# implementations. --if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : -- eval 'as_fn_append () -- { -- eval $1+=\$2 -- }' --else -- as_fn_append () -- { -- eval $1=\$$1\$2 -- } --fi # as_fn_append -- --# as_fn_arith ARG... --# ------------------ --# Perform arithmetic evaluation on the ARGs, and store the result in the --# global $as_val. Take advantage of shells that can avoid forks. The arguments --# must be portable across $(()) and expr. --if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : -- eval 'as_fn_arith () -- { -- as_val=$(( $* )) -- }' --else -- as_fn_arith () -- { -- as_val=`expr "$@" || test $? -eq 1` -- } --fi # as_fn_arith -- -- -+# Required to use basename. - if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -@@ -6719,12 +11060,8 @@ - as_basename=false - fi - --if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then -- as_dirname=dirname --else -- as_dirname=false --fi - -+# Name of the executable. - as_me=`$as_basename -- "$0" || - $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ -@@ -6744,25 +11081,76 @@ - } - s/.*/./; q'` - --# Avoid depending upon Character Ranges. --as_cr_letters='abcdefghijklmnopqrstuvwxyz' --as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' --as_cr_Letters=$as_cr_letters$as_cr_LETTERS --as_cr_digits='0123456789' --as_cr_alnum=$as_cr_Letters$as_cr_digits -+# CDPATH. -+$as_unset CDPATH -+ -+ -+ -+ as_lineno_1=$LINENO -+ as_lineno_2=$LINENO -+ test "x$as_lineno_1" != "x$as_lineno_2" && -+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { -+ -+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO -+ # uniformly replaced by the line number. The first 'sed' inserts a -+ # line-number line after each line using $LINENO; the second 'sed' -+ # does the real work. The second script uses 'N' to pair each -+ # line-number line with the line containing $LINENO, and appends -+ # trailing '-' during substitution so that $LINENO is not a special -+ # case at line end. -+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the -+ # scripts with optimization help from Paolo Bonzini. Blame Lee -+ # E. McMahon (1931-1989) for sed's syntax. :-) -+ sed -n ' -+ p -+ /[$]LINENO/= -+ ' <$as_myself | -+ sed ' -+ s/[$]LINENO.*/&-/ -+ t lineno -+ b -+ :lineno -+ N -+ :loop -+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ -+ t loop -+ s/-\n.*// -+ ' >$as_me.lineno && -+ chmod +x "$as_me.lineno" || -+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 -+ { (exit 1); exit 1; }; } -+ -+ # Don't try to exec as it changes $[0], causing all sort of problems -+ # (the dirname of $[0] is not the place where we might find the -+ # original and so on. Autoconf is especially sensitive to this). -+ . "./$as_me.lineno" -+ # Exit status is that of the last command. -+ exit -+} -+ -+ -+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then -+ as_dirname=dirname -+else -+ as_dirname=false -+fi - - ECHO_C= ECHO_N= ECHO_T= --case `echo -n x` in #((((( -+case `echo -n x` in - -n*) -- case `echo 'xy\c'` in -+ case `echo 'x\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. -- xy) ECHO_C='\c';; -- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null -- ECHO_T=' ';; -+ *) ECHO_C='\c';; - esac;; - *) - ECHO_N='-n';; - esac -+if expr a : '\(a\)' >/dev/null 2>&1 && -+ test "X`expr 00001 : '.*\(...\)'`" = X001; then -+ as_expr=expr -+else -+ as_expr=false -+fi - - rm -f conf$$ conf$$.exe conf$$.file - if test -d conf$$.dir; then -@@ -6791,56 +11179,8 @@ - rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file - rmdir conf$$.dir 2>/dev/null - -- --# as_fn_mkdir_p --# ------------- --# Create "$as_dir" as a directory, including parents if necessary. --as_fn_mkdir_p () --{ -- -- case $as_dir in #( -- -*) as_dir=./$as_dir;; -- esac -- test -d "$as_dir" || eval $as_mkdir_p || { -- as_dirs= -- while :; do -- case $as_dir in #( -- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( -- *) as_qdir=$as_dir;; -- esac -- as_dirs="'$as_qdir' $as_dirs" -- as_dir=`$as_dirname -- "$as_dir" || --$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ -- X"$as_dir" : 'X\(//\)[^/]' \| \ -- X"$as_dir" : 'X\(//\)$' \| \ -- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || --$as_echo X"$as_dir" | -- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ -- s//\1/ -- q -- } -- /^X\(\/\/\)[^/].*/{ -- s//\1/ -- q -- } -- /^X\(\/\/\)$/{ -- s//\1/ -- q -- } -- /^X\(\/\).*/{ -- s//\1/ -- q -- } -- s/.*/./; q'` -- test -d "$as_dir" && break -- done -- test -z "$as_dirs" || eval "mkdir $as_dirs" -- } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" -- -- --} # as_fn_mkdir_p - if mkdir -p . 2>/dev/null; then -- as_mkdir_p='mkdir -p "$as_dir"' -+ as_mkdir_p=: - else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -@@ -6859,10 +11199,10 @@ - if test -d "$1"; then - test -d "$1/."; - else -- case $1 in #( -+ case $1 in - -*)set "./$1";; - esac; -- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( -+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -@@ -6877,19 +11217,13 @@ - - - exec 6>&1 --## ----------------------------------- ## --## Main body of $CONFIG_STATUS script. ## --## ----------------------------------- ## --_ASEOF --test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - --cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 --# Save the log message, to keep $0 and so on meaningful, and to -+# Save the log message, to keep $[0] and so on meaningful, and to - # report actual input values of CONFIG_FILES etc. instead of their - # values after options handling. - ac_log=" - This file was extended by strace $as_me 4.5.19, which was --generated by GNU Autoconf 2.64. Invocation command line was -+generated by GNU Autoconf 2.63. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS -@@ -6921,11 +11255,10 @@ - - cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - ac_cs_usage="\ --\`$as_me' instantiates files and other configuration actions --from templates according to the current configuration. Unless the files --and actions are specified as TAGs, all are instantiated by default. -+\`$as_me' instantiates files from templates according to the -+current configuration. - --Usage: $0 [OPTION]... [TAG]... -+Usage: $0 [OPTION]... [FILE]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit -@@ -6947,16 +11280,16 @@ - Configuration commands: - $config_commands - --Report bugs to the package provider." -+Report bugs to ." - - _ACEOF - cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_cs_version="\\ - strace config.status 4.5.19 --configured by $0, generated by GNU Autoconf 2.64, -+configured by $0, generated by GNU Autoconf 2.63, - with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" - --Copyright (C) 2009 Free Software Foundation, Inc. -+Copyright (C) 2008 Free Software Foundation, Inc. - This config.status script is free software; the Free Software Foundation - gives unlimited permission to copy, distribute and modify it." - -@@ -6999,19 +11332,20 @@ - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac -- as_fn_append CONFIG_FILES " '$ac_optarg'" -+ CONFIG_FILES="$CONFIG_FILES '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac -- as_fn_append CONFIG_HEADERS " '$ac_optarg'" -+ CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header -- as_fn_error "ambiguous option: \`$1' --Try \`$0 --help' for more information.";; -+ { $as_echo "$as_me: error: ambiguous option: $1 -+Try \`$0 --help' for more information." >&2 -+ { (exit 1); exit 1; }; };; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ -@@ -7019,10 +11353,11 @@ - ac_cs_silent=: ;; - - # This is an error. -- -*) as_fn_error "unrecognized option: \`$1' --Try \`$0 --help' for more information." ;; -+ -*) { $as_echo "$as_me: error: unrecognized option: $1 -+Try \`$0 --help' for more information." >&2 -+ { (exit 1); exit 1; }; } ;; - -- *) as_fn_append ac_config_targets " $1" -+ *) ac_config_targets="$ac_config_targets $1" - ac_need_defaults=false ;; - - esac -@@ -7077,7 +11412,9 @@ - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - -- *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; -+ *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -+$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} -+ { (exit 1); exit 1; }; };; - esac - done - -@@ -7104,7 +11441,7 @@ - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status - ' 0 -- trap 'as_fn_exit 1' 1 2 13 15 -+ trap '{ (exit 1); exit 1; }' 1 2 13 15 - } - # Create a (secure) tmp directory for tmp files. - -@@ -7115,7 +11452,11 @@ - { - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") --} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 -+} || -+{ -+ $as_echo "$as_me: cannot create a temporary directory in ." >&2 -+ { (exit 1); exit 1; } -+} - - # Set up the scripts for CONFIG_FILES section. - # No need to generate them if there are no CONFIG_FILES. -@@ -7123,16 +11464,10 @@ - if test -n "$CONFIG_FILES"; then - - --ac_cr=`echo X | tr X '\015'` --# On cygwin, bash can eat \r inside `` if the user requested igncr. --# But we know of no other shell where ac_cr would be empty at this --# point, so we can use a bashism as a fallback. --if test "x$ac_cr" = x; then -- eval ac_cr=\$\'\\r\' --fi -+ac_cr=' ' - ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` - if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then -- ac_cs_awk_cr='\r' -+ ac_cs_awk_cr='\\r' - else - ac_cs_awk_cr=$ac_cr - fi -@@ -7146,18 +11481,24 @@ - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" - } >conf$$subs.sh || -- as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} -+ { (exit 1); exit 1; }; } - ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` - ac_delim='%!_!# ' - for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || -- as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} -+ { (exit 1); exit 1; }; } - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then -- as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} -+ { (exit 1); exit 1; }; } - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -@@ -7246,7 +11587,9 @@ - else - cat - fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ -- || as_fn_error "could not setup config files machinery" "$LINENO" 5 -+ || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5 -+$as_echo "$as_me: error: could not setup config files machinery" >&2;} -+ { (exit 1); exit 1; }; } - _ACEOF - - # VPATH may cause trouble with some makes, so we remove $(srcdir), -@@ -7287,7 +11630,9 @@ - if test -z "$ac_t"; then - break - elif $ac_last_try; then -- as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5 -+$as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;} -+ { (exit 1); exit 1; }; } - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -@@ -7372,7 +11717,9 @@ - _ACAWK - _ACEOF - cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -- as_fn_error "could not setup config headers machinery" "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5 -+$as_echo "$as_me: error: could not setup config headers machinery" >&2;} -+ { (exit 1); exit 1; }; } - fi # test -n "$CONFIG_HEADERS" - - -@@ -7385,7 +11732,9 @@ - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; -- :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; -+ :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5 -+$as_echo "$as_me: error: invalid tag $ac_tag" >&2;} -+ { (exit 1); exit 1; }; };; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac -@@ -7413,10 +11762,12 @@ - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || -- as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; -+ { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 -+$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;} -+ { (exit 1); exit 1; }; };; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac -- as_fn_append ac_file_inputs " '$ac_f'" -+ ac_file_inputs="$ac_file_inputs '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't -@@ -7427,7 +11778,7 @@ - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" -- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -+ { $as_echo "$as_me:$LINENO: creating $ac_file" >&5 - $as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. -@@ -7440,7 +11791,9 @@ - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin" \ -- || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; -+ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 -+$as_echo "$as_me: error: could not create $ac_file" >&2;} -+ { (exit 1); exit 1; }; } ;; - esac - ;; - esac -@@ -7468,7 +11821,47 @@ - q - } - s/.*/./; q'` -- as_dir="$ac_dir"; as_fn_mkdir_p -+ { as_dir="$ac_dir" -+ case $as_dir in #( -+ -*) as_dir=./$as_dir;; -+ esac -+ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { -+ as_dirs= -+ while :; do -+ case $as_dir in #( -+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( -+ *) as_qdir=$as_dir;; -+ esac -+ as_dirs="'$as_qdir' $as_dirs" -+ as_dir=`$as_dirname -- "$as_dir" || -+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ -+ X"$as_dir" : 'X\(//\)[^/]' \| \ -+ X"$as_dir" : 'X\(//\)$' \| \ -+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -+$as_echo X"$as_dir" | -+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)[^/].*/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\).*/{ -+ s//\1/ -+ q -+ } -+ s/.*/./; q'` -+ test -d "$as_dir" && break -+ done -+ test -z "$as_dirs" || eval "mkdir $as_dirs" -+ } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -+$as_echo "$as_me: error: cannot create directory $as_dir" >&2;} -+ { (exit 1); exit 1; }; }; } - ac_builddir=. - - case "$ac_dir" in -@@ -7525,6 +11918,7 @@ - # If the template does not know about datarootdir, expand it. - # FIXME: This hack should be removed a few years after 2.60. - ac_datarootdir_hack=; ac_datarootdir_seen= -+ - ac_sed_dataroot=' - /datarootdir/ { - p -@@ -7534,11 +11928,12 @@ - /@docdir@/p - /@infodir@/p - /@localedir@/p --/@mandir@/p' -+/@mandir@/p -+' - case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in - *datarootdir*) ac_datarootdir_seen=yes;; - *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) -- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -+ { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 - $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} - _ACEOF - cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -@@ -7548,7 +11943,7 @@ - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g -- s&\\\${datarootdir}&$datarootdir&g' ;; -+ s&\\\${datarootdir}&$datarootdir&g' ;; - esac - _ACEOF - -@@ -7577,12 +11972,14 @@ - $ac_datarootdir_hack - " - eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ -- || as_fn_error "could not create $ac_file" "$LINENO" 5 -+ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 -+$as_echo "$as_me: error: could not create $ac_file" >&2;} -+ { (exit 1); exit 1; }; } - - test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && -- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -+ { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' - which seems to be undefined. Please make sure it is defined." >&5 - $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' - which seems to be undefined. Please make sure it is defined." >&2;} -@@ -7592,7 +11989,9 @@ - -) cat "$tmp/out" && rm -f "$tmp/out";; - *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; - esac \ -- || as_fn_error "could not create $ac_file" "$LINENO" 5 -+ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 -+$as_echo "$as_me: error: could not create $ac_file" >&2;} -+ { (exit 1); exit 1; }; } - ;; - :H) - # -@@ -7603,19 +12002,25 @@ - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" - } >"$tmp/config.h" \ -- || as_fn_error "could not create $ac_file" "$LINENO" 5 -+ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 -+$as_echo "$as_me: error: could not create $ac_file" >&2;} -+ { (exit 1); exit 1; }; } - if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -+ { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5 - $as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$tmp/config.h" "$ac_file" \ -- || as_fn_error "could not create $ac_file" "$LINENO" 5 -+ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 -+$as_echo "$as_me: error: could not create $ac_file" >&2;} -+ { (exit 1); exit 1; }; } - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ -- || as_fn_error "could not create -" "$LINENO" 5 -+ || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5 -+$as_echo "$as_me: error: could not create -" >&2;} -+ { (exit 1); exit 1; }; } - fi - # Compute "$ac_file"'s index in $config_headers. - _am_arg="$ac_file" -@@ -7653,7 +12058,7 @@ - s/.*/./; q'`/stamp-h$_am_stamp_count - ;; - -- :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -+ :C) { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5 - $as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac -@@ -7748,7 +12153,47 @@ - q - } - s/.*/./; q'` -- as_dir=$dirpart/$fdir; as_fn_mkdir_p -+ { as_dir=$dirpart/$fdir -+ case $as_dir in #( -+ -*) as_dir=./$as_dir;; -+ esac -+ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { -+ as_dirs= -+ while :; do -+ case $as_dir in #( -+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( -+ *) as_qdir=$as_dir;; -+ esac -+ as_dirs="'$as_qdir' $as_dirs" -+ as_dir=`$as_dirname -- "$as_dir" || -+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ -+ X"$as_dir" : 'X\(//\)[^/]' \| \ -+ X"$as_dir" : 'X\(//\)$' \| \ -+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -+$as_echo X"$as_dir" | -+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)[^/].*/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\).*/{ -+ s//\1/ -+ q -+ } -+ s/.*/./; q'` -+ test -d "$as_dir" && break -+ done -+ test -z "$as_dirs" || eval "mkdir $as_dirs" -+ } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -+$as_echo "$as_me: error: cannot create directory $as_dir" >&2;} -+ { (exit 1); exit 1; }; }; } - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done -@@ -7760,12 +12205,15 @@ - done # for ac_tag - - --as_fn_exit 0 -+{ (exit 0); exit 0; } - _ACEOF -+chmod +x $CONFIG_STATUS - ac_clean_files=$ac_clean_files_save - - test $ac_write_fail = 0 || -- as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 -+ { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5 -+$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;} -+ { (exit 1); exit 1; }; } - - - # configure is writing to config.log, and then calls config.status. -@@ -7786,10 +12234,10 @@ - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. -- $ac_cs_success || as_fn_exit $? -+ $ac_cs_success || { (exit 1); exit 1; } - fi - if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -+ { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 - $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} - fi - -diff -Naur strace-4.5.19/configure.ac strace-4.5.19.patch/configure.ac ---- strace-4.5.19/configure.ac 2009-10-12 21:54:43.000000000 +0200 -+++ strace-4.5.19.patch/configure.ac 2009-11-04 09:10:53.901396360 +0100 -@@ -258,6 +258,7 @@ - ], [], []) - AC_CHECK_HEADERS([linux/icmp.h linux/in6.h linux/netlink.h linux/if_packet.h], - [], [], [#include -+#include - #include ]) - AC_CHECK_HEADERS([asm/sigcontext.h], [], [], [#include ]) - AC_CHECK_TYPES([struct sigcontext_struct, diff --git a/packages/debug/strace/url b/packages/debug/strace/url index 0826f2d220..a67ee6c1e1 100644 --- a/packages/debug/strace/url +++ b/packages/debug/strace/url @@ -1 +1 @@ -http://downloads.sourceforge.net/project/strace/strace/4.5.19/strace-4.5.19.tar.bz2 \ No newline at end of file +http://downloads.sourceforge.net/project/strace/strace/4.5.20/strace-4.5.20.tar.bz2 \ No newline at end of file From fc7981a89976a29935c4278fe6c2ff4f10c9ee61 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 14:58:27 +0100 Subject: [PATCH 024/850] libass: update to libass-0.9.11 Signed-off-by: Stephan Raue --- packages/multimedia/libass/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/multimedia/libass/url b/packages/multimedia/libass/url index f0aaa8f540..b8b3555b77 100644 --- a/packages/multimedia/libass/url +++ b/packages/multimedia/libass/url @@ -1 +1 @@ -http://libass.googlecode.com/files/libass-0.9.9.tar.bz2 \ No newline at end of file +http://libass.googlecode.com/files/libass-0.9.11.tar.bz2 \ No newline at end of file From db4981b9418e2784b2db870795eaf1c28c7926d3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 14:58:55 +0100 Subject: [PATCH 025/850] avahi: update to avahi-0.6.28 Signed-off-by: Stephan Raue --- packages/network/avahi/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/network/avahi/url b/packages/network/avahi/url index 59bd81ebdf..7328ee7bb5 100644 --- a/packages/network/avahi/url +++ b/packages/network/avahi/url @@ -1 +1 @@ -http://www.avahi.org/download/avahi-0.6.27.tar.gz \ No newline at end of file +http://www.avahi.org/download/avahi-0.6.28.tar.gz \ No newline at end of file From 97838d9ccbd9053330b93674b51a0a50f43438fa Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 14:59:26 +0100 Subject: [PATCH 026/850] libssh: update to libssh-0.4.6 Signed-off-by: Stephan Raue --- packages/network/libssh/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/network/libssh/url b/packages/network/libssh/url index 10316e369d..fa661f694a 100644 --- a/packages/network/libssh/url +++ b/packages/network/libssh/url @@ -1 +1 @@ -http://www.libssh.org/files/libssh-0.4.5.tar.gz \ No newline at end of file +http://www.libssh.org/files/libssh-0.4.6.tar.gz \ No newline at end of file From f7c23961bd3272b69eaf18a74323154194526214 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 15:00:19 +0100 Subject: [PATCH 027/850] m4: update to m4-1.4.15 Signed-off-by: Stephan Raue --- packages/toolchain/devel/autotools/m4/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/toolchain/devel/autotools/m4/url b/packages/toolchain/devel/autotools/m4/url index 6bdc816ef6..1bacfe6bbb 100644 --- a/packages/toolchain/devel/autotools/m4/url +++ b/packages/toolchain/devel/autotools/m4/url @@ -1 +1 @@ -http://ftp.gnu.org/gnu/m4/m4-1.4.14.tar.bz2 \ No newline at end of file +http://ftp.gnu.org/gnu/m4/m4-1.4.15.tar.bz2 \ No newline at end of file From 06c595fd16bd2cfb6ef8b71640ed2fd0e4bceb46 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 15:00:46 +0100 Subject: [PATCH 028/850] cmake: update to cmake-2.8.3-rc4 Signed-off-by: Stephan Raue --- packages/toolchain/devel/cmake/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/toolchain/devel/cmake/url b/packages/toolchain/devel/cmake/url index 8c6712ea09..509bb4ad8e 100644 --- a/packages/toolchain/devel/cmake/url +++ b/packages/toolchain/devel/cmake/url @@ -1 +1 @@ -http://www.cmake.org/files/v2.8/cmake-2.8.1.tar.gz \ No newline at end of file +http://www.cmake.org/files/v2.8/cmake-2.8.3-rc4.tar.gz \ No newline at end of file From 4b2ea35482c7946acec5f5adce63a519f054dad7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 15:01:19 +0100 Subject: [PATCH 029/850] xf86-input-synaptics: update to xf86-input-synaptics-1.3.0 Signed-off-by: Stephan Raue --- packages/x11/driver/xf86-input-synaptics/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/x11/driver/xf86-input-synaptics/url b/packages/x11/driver/xf86-input-synaptics/url index 926ad858d8..a26d8bf795 100644 --- a/packages/x11/driver/xf86-input-synaptics/url +++ b/packages/x11/driver/xf86-input-synaptics/url @@ -1 +1 @@ -http://xorg.freedesktop.org/archive/individual/driver/xf86-input-synaptics-1.2.99.901.tar.bz2 \ No newline at end of file +http://xorg.freedesktop.org/archive/individual/driver/xf86-input-synaptics-1.3.0.tar.bz2 \ No newline at end of file From a04216f1f5e59aa27fc9c034b0a21e5d520bfcca Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 15:01:54 +0100 Subject: [PATCH 030/850] xf86-input-wacom: update to xf86-input-wacom-0.10.8 Signed-off-by: Stephan Raue --- packages/x11/driver/xf86-input-wacom/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/x11/driver/xf86-input-wacom/url b/packages/x11/driver/xf86-input-wacom/url index c561b4c2ea..1b3fa2dfc8 100644 --- a/packages/x11/driver/xf86-input-wacom/url +++ b/packages/x11/driver/xf86-input-wacom/url @@ -1 +1 @@ -http://freefr.dl.sourceforge.net/project/linuxwacom/xf86-input-wacom/xf86-input-wacom-0.10.6.tar.bz2 +http://freefr.dl.sourceforge.net/project/linuxwacom/xf86-input-wacom/xf86-input-wacom-0.10.8.tar.bz2 From cdbd94a35cf3da3e1126d5ef783d9abfc99a218c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 15:02:39 +0100 Subject: [PATCH 031/850] font-cursor-misc: update to font-cursor-misc-1.0.2 Signed-off-by: Stephan Raue --- packages/x11/font/font-cursor-misc/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/x11/font/font-cursor-misc/url b/packages/x11/font/font-cursor-misc/url index 231c56da93..39c169d94d 100644 --- a/packages/x11/font/font-cursor-misc/url +++ b/packages/x11/font/font-cursor-misc/url @@ -1 +1 @@ -http://xorg.freedesktop.org/archive/individual/font/font-cursor-misc-1.0.1.tar.bz2 \ No newline at end of file +http://xorg.freedesktop.org/archive/individual/font/font-cursor-misc-1.0.2.tar.bz2 \ No newline at end of file From f23d0abedc7034e89b5a70bed78d8433212ea04d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 15:03:11 +0100 Subject: [PATCH 032/850] font-misc-misc: update to font-misc-misc-1.1.1 Signed-off-by: Stephan Raue --- packages/x11/font/font-misc-misc/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/x11/font/font-misc-misc/url b/packages/x11/font/font-misc-misc/url index 2f85ed3856..7a2b26e3c4 100644 --- a/packages/x11/font/font-misc-misc/url +++ b/packages/x11/font/font-misc-misc/url @@ -1 +1 @@ -http://xorg.freedesktop.org/archive/individual/font/font-misc-misc-1.1.0.tar.bz2 +http://xorg.freedesktop.org/archive/individual/font/font-misc-misc-1.1.1.tar.bz2 From f08e8731074827549d0ad60f102d7c4371d1ac3f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 15:03:52 +0100 Subject: [PATCH 033/850] font-xfree86-type1: update to font-xfree86-type1-1.0.3 Signed-off-by: Stephan Raue --- packages/x11/font/font-xfree86-type1/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/x11/font/font-xfree86-type1/url b/packages/x11/font/font-xfree86-type1/url index 4a0ed3c7d4..da1a99e70f 100644 --- a/packages/x11/font/font-xfree86-type1/url +++ b/packages/x11/font/font-xfree86-type1/url @@ -1 +1 @@ -http://xorg.freedesktop.org/releases/individual/font/font-xfree86-type1-1.0.2.tar.bz2 +http://xorg.freedesktop.org/releases/individual/font/font-xfree86-type1-1.0.3.tar.bz2 From 11d7775954a637468fee55458b588c627e2bfcce Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 3 Nov 2010 22:37:51 +0100 Subject: [PATCH 034/850] curl: install curl binary Signed-off-by: Stephan Raue --- packages/web/curl/install | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/web/curl/install b/packages/web/curl/install index 5881c18b2b..e38ac1b0e4 100755 --- a/packages/web/curl/install +++ b/packages/web/curl/install @@ -2,5 +2,8 @@ . config/options $1 +mkdir -p $INSTALL/usr/bin + cp $PKG_BUILD/src/.libs/curl $INSTALL/usr/bin + mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/lib/.libs/libcurl.so* $INSTALL/usr/lib From 9c97a9caa72809fe5db3c5ac4ce3ec4f4d1ba348 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 4 Nov 2010 00:42:34 +0100 Subject: [PATCH 035/850] boost: build and install 'boost_system', needed by wesnoth Signed-off-by: Stephan Raue --- packages/devel/boost/build | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/devel/boost/build b/packages/devel/boost/build index b642988b2b..e76f88bb28 100755 --- a/packages/devel/boost/build +++ b/packages/devel/boost/build @@ -23,5 +23,6 @@ $ROOT/$TOOLCHAIN/bin/bjam -d2 --toolset=gcc \ --layout=system \ --with-thread \ --with-iostreams \ + --with-system \ --with-regex -sICU_PATH="$SYSROOT_PREFIX/usr" \ install From f158867c18a7a53b125a11327455bf9c384fd4a9 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 4 Nov 2010 00:43:23 +0100 Subject: [PATCH 036/850] wesnoth: update to wesnoth-1.9.1 Signed-off-by: Stephan Raue --- packages/addons/games/wesnoth/changelog.txt | 3 +++ packages/addons/games/wesnoth/meta | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/addons/games/wesnoth/changelog.txt b/packages/addons/games/wesnoth/changelog.txt index bd720cd4d6..74349c3c17 100644 --- a/packages/addons/games/wesnoth/changelog.txt +++ b/packages/addons/games/wesnoth/changelog.txt @@ -1,2 +1,5 @@ +0.90.2 +- update to wesnoth-1.9.1 + 0.90.1 - initial version wesnoth-1.8.3 \ No newline at end of file diff --git a/packages/addons/games/wesnoth/meta b/packages/addons/games/wesnoth/meta index 8533eae3f1..cbd866ce49 100644 --- a/packages/addons/games/wesnoth/meta +++ b/packages/addons/games/wesnoth/meta @@ -1,10 +1,10 @@ PKG_NAME="wesnoth" -PKG_VERSION="1.8.3" -PKG_REV="1" +PKG_VERSION="1.9.1" +PKG_REV="2" PKG_ARCH="any" PKG_LICENSE="OSS" -PKG_SITE="http://www.glest.org" -PKG_URL="http://sourceforge.net/projects/wesnoth/files/$PKG_NAME/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_SITE="http://www.wesnoth.org/" +PKG_URL="http://downloads.sourceforge.net/project/wesnoth/wesnoth/$PKG_NAME-$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="boost zlib libX11 pango fontconfig SDL SDL_image SDL_mixer SDL_net SDL_ttf" PKG_BUILD_DEPENDS="toolchain boost lua zlib libX11 pango fontconfig SDL SDL_image SDL_mixer SDL_net SDL_ttf" PKG_PRIORITY="optional" From b23e7fb37bc622f68ba607d4bd2de197bd0e7bd7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 4 Nov 2010 00:44:41 +0100 Subject: [PATCH 037/850] megaglest: update to megaglest-3.3.7.2 Signed-off-by: Stephan Raue --- packages/addons/games/megaglest-data/meta | 4 +- packages/addons/games/megaglest-source/meta | 4 +- ...megaglest-3.5.5-add_missing_icons-0.1.diff | 1950 ----------------- packages/addons/games/megaglest/changelog.txt | 5 +- packages/addons/games/megaglest/meta | 2 +- 5 files changed, 9 insertions(+), 1956 deletions(-) delete mode 100644 packages/addons/games/megaglest-source/patches/megaglest-3.5.5-add_missing_icons-0.1.diff diff --git a/packages/addons/games/megaglest-data/meta b/packages/addons/games/megaglest-data/meta index a2769deef1..6b9d60152e 100644 --- a/packages/addons/games/megaglest-data/meta +++ b/packages/addons/games/megaglest-data/meta @@ -1,6 +1,6 @@ PKG_NAME="megaglest-data" -PKG_VERSION="3.3.5" -PKG_REV="1" +PKG_VERSION="3.3.7.2" +PKG_REV="2" PKG_ARCH="any" PKG_LICENSE="OSS" PKG_SITE="http://www.glest.org" diff --git a/packages/addons/games/megaglest-source/meta b/packages/addons/games/megaglest-source/meta index c2e0659af4..94ac401142 100644 --- a/packages/addons/games/megaglest-source/meta +++ b/packages/addons/games/megaglest-source/meta @@ -1,6 +1,6 @@ PKG_NAME="megaglest-source" -PKG_VERSION="3.3.5" -PKG_REV="1" +PKG_VERSION="3.3.7.2" +PKG_REV="2" PKG_ARCH="any" PKG_LICENSE="OSS" PKG_SITE="http://www.glest.org" diff --git a/packages/addons/games/megaglest-source/patches/megaglest-3.5.5-add_missing_icons-0.1.diff b/packages/addons/games/megaglest-source/patches/megaglest-3.5.5-add_missing_icons-0.1.diff deleted file mode 100644 index 7f95265319..0000000000 --- a/packages/addons/games/megaglest-source/patches/megaglest-3.5.5-add_missing_icons-0.1.diff +++ /dev/null @@ -1,1950 +0,0 @@ -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_gradient_0.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_gradient_0.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_gradient_0.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_gradient_0.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_gradient_0[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #FF0000", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXX XX X", -+"XXXXXXXXXXX XX X", -+"XXXXXXXXXXX XX X", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+" ", -+"................", -+"................", -+"................", -+"................", -+"................", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_gradient_n1.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_gradient_n1.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_gradient_n1.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_gradient_n1.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_gradient_n1[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #FF0000", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXX XX", -+"XXXXXXXXXXXXX XX", -+"XXXXXXXXX X XX", -+"XXXXXXXXXXXXX XX", -+"XXXXXXXXXXXXX XX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+" XXXXXXX ", -+"... ......", -+"................", -+"................", -+"................", -+"................", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_gradient_n2.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_gradient_n2.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_gradient_n2.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_gradient_n2.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_gradient_n2[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #FF0000", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXXXXX X", -+"XXXXXXX X X", -+"XXXXXXXXXXX XXXX", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+" XXXXXXXXX ", -+".. XXXXXXX .....", -+"... ......", -+"................", -+"................", -+"................", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_gradient_n3.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_gradient_n3.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_gradient_n3.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_gradient_n3.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_gradient_n3[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #FF0000", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXXXXX X", -+"XXXXXXX X X", -+"XXXXXXXXXXXXXX X", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+" XXXXXXXXX ", -+".. XXXXXXX .....", -+"... XXXXX ......", -+".... .......", -+"................", -+"................", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_gradient_n4.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_gradient_n4.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_gradient_n4.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_gradient_n4.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_gradient_n4[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #FF0000", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXX XX X", -+"XXXXXXXXXXX XX X", -+"XXXXXXX X X", -+"XXXXXXXXXXXXXX X", -+"XXXXXXXXXXXXXX X", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+" XXXXXXXXXXX ", -+". XXXXXXXXX ....", -+".. XXXXXXX .....", -+"... XXXXX ......", -+".... .......", -+"................", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_gradient_n5.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_gradient_n5.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_gradient_n5.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_gradient_n5.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_gradient_n5[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #FF0000", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXX XXXX", -+"XXXXXXX X X", -+"XXXXXXXXXXXXXX X", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+" XXXXXXXXXXX ", -+". XXXXXXXXX ....", -+".. XXXXXXX .....", -+"... XXXXX ......", -+".... XXX .......", -+"..... ........", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_gradient_p1.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_gradient_p1.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_gradient_p1.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_gradient_p1.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_gradient_p1[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #FF0000", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXX XX", -+"XXXXXXXXXXXXX XX", -+"XXXXXXXXXXXXX XX", -+"XXXXXXXXXXXXX XX", -+"XXXXXXXXXXXXX XX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXX XXXXXX", -+" ....... ", -+"................", -+"................", -+"................", -+"................", -+"................", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_gradient_p2.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_gradient_p2.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_gradient_p2.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_gradient_p2.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_gradient_p2[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #FF0000", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXXXXX X", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXX XXXX", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXXXXXXX", -+"XXX XXXXXX", -+"XX ....... XXXXX", -+" ......... ", -+"................", -+"................", -+"................", -+"................", -+"................", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_gradient_p3.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_gradient_p3.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_gradient_p3.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_gradient_p3.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_gradient_p3[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #FF0000", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXXXXX X", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXXXXX X", -+"XXXXXXXXXXX X", -+"XXXX XXXXXXX", -+"XXX ..... XXXXXX", -+"XX ....... XXXXX", -+" ......... ", -+"................", -+"................", -+"................", -+"................", -+"................", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_gradient_p4.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_gradient_p4.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_gradient_p4.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_gradient_p4.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_gradient_p4[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #FF0000", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXX XX X", -+"XXXXXXXXXXX XX X", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXXXXX X", -+"XXXX XXXXX X", -+"XXX ..... XXXXXX", -+"XX ....... XXXXX", -+"X ......... XXXX", -+" ........... ", -+"................", -+"................", -+"................", -+"................", -+"................", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_gradient_p5.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_gradient_p5.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_gradient_p5.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_gradient_p5.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_gradient_p5[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #FF0000", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXX XXXX", -+"XXXXXXXXXXX X", -+"XXXXX XXXXXX X", -+"XXXX ... XX X", -+"XXX ..... XXXXXX", -+"XX ....... XXXXX", -+"X ......... XXXX", -+" ........... ", -+"................", -+"................", -+"................", -+"................", -+"................", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_height_0.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_height_0.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_height_0.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_height_0.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_height_0[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #0000FF", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXX XX X", -+"XXXXXXXXXXX XX X", -+"XXXXXXXXXXX XX X", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+" ", -+"................", -+"................", -+"................", -+"................", -+"................", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_height_n1.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_height_n1.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_height_n1.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_height_n1.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_height_n1[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #0000FF", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXX XX", -+"XXXXXXXXXXXXX XX", -+"XXXXXXXXX X XX", -+"XXXXXXXXXXXXX XX", -+"XXXXXXXXXXXXX XX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+" XXXXXXX ", -+"... ......", -+"................", -+"................", -+"................", -+"................", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_height_n2.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_height_n2.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_height_n2.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_height_n2.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_height_n2[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #0000FF", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXXXXX X", -+"XXXXXXX X X", -+"XXXXXXXXXXX XXXX", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+" XXXXXXX ", -+"...XXXXXXX......", -+"... ......", -+"................", -+"................", -+"................", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_height_n3.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_height_n3.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_height_n3.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_height_n3.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_height_n3[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #0000FF", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXXXXX X", -+"XXXXXXX X X", -+"XXXXXXXXXXXXXX X", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+" XXXXXXX ", -+"...XXXXXXX......", -+"...XXXXXXX......", -+"... ......", -+"................", -+"................", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_height_n4.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_height_n4.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_height_n4.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_height_n4.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_height_n4[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #0000FF", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXX XX X", -+"XXXXXXXXXXX XX X", -+"XXXXXXX X X", -+"XXXXXXXXXXXXXX X", -+"XXXXXXXXXXXXXX X", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+" XXXXXXX ", -+"...XXXXXXX......", -+"...XXXXXXX......", -+"...XXXXXXX......", -+"... ......", -+"................", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_height_n5.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_height_n5.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_height_n5.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_height_n5.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_height_n5[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #0000FF", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXX XXXX", -+"XXXXXXX X X", -+"XXXXXXXXXXXXXX X", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+" XXXXXXX ", -+"...XXXXXXX......", -+"...XXXXXXX......", -+"...XXXXXXX......", -+"...XXXXXXX......", -+"... ......", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_height_p1.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_height_p1.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_height_p1.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_height_p1.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_height_p1[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #0000FF", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXX XX", -+"XXXXXXXXXXXXX XX", -+"XXXXXXXXXXXXX XX", -+"XXXXXXXXXXXXX XX", -+"XXXXXXXXXXXXX XX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXX XXXXXX", -+" ....... ", -+"................", -+"................", -+"................", -+"................", -+"................", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_height_p2.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_height_p2.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_height_p2.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_height_p2.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_height_p2[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #0000FF", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXXXXX X", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXX XXXX", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXXXXXXX", -+"XXX XXXXXX", -+"XXX.......XXXXXX", -+" ....... ", -+"................", -+"................", -+"................", -+"................", -+"................", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_height_p3.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_height_p3.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_height_p3.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_height_p3.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_height_p3[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #0000FF", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXXXXX X", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXXXXX X", -+"XXXXXXXXXXX X", -+"XXX XXXXXX", -+"XXX.......XXXXXX", -+"XXX.......XXXXXX", -+" ....... ", -+"................", -+"................", -+"................", -+"................", -+"................", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_height_p4.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_height_p4.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_height_p4.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_height_p4.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_height_p4[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #0000FF", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXX XX X", -+"XXXXXXXXXXX XX X", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXXXXX X", -+"XXX XXXX X", -+"XXX.......XXXXXX", -+"XXX.......XXXXXX", -+"XXX.......XXXXXX", -+" ....... ", -+"................", -+"................", -+"................", -+"................", -+"................", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_height_p5.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_height_p5.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_height_p5.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_height_p5.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_height_p5[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #0000FF", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXX X", -+"XXXXXXXXXXX XXXX", -+"XXXXXXXXXXX X", -+"XXX XXXX X", -+"XXX.......X X", -+"XXX.......XXXXXX", -+"XXX.......XXXXXX", -+"XXX.......XXXXXX", -+" ....... ", -+"................", -+"................", -+"................", -+"................", -+"................", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_none.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_none.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_none.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_none.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,26 @@ -+/* XPM */ -+static const char *brush_none[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 4 1", -+" c #FF0000", -+". c #008000", -+"X c #000080", -+"o c None", -+/* pixels */ -+"oo oooXXooo oo", -+"oo oXXXXo oo", -+"ooo XXXX ooo", -+"oooo XX oooo", -+"ooooo ooooo", -+"oooooo oooooo", -+"oooooo oooooo", -+"ooooo ooooo", -+"oooo XX oooo", -+"ooo XXXX ooo", -+"oo oXXXXo oo", -+"oo ooXXXXoo oo", -+"ooooo......ooooo", -+"................", -+"................", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_object_bush.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_object_bush.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_object_bush.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_object_bush.xpm 2010-05-05 00:55:22.000000000 +0200 -@@ -0,0 +1,27 @@ -+/* XPM */ -+static const char *brush_object_bush[] = { -+"20 20 4 1", -+" c None", -+". c #0000FF", -+"+ c #008000", -+"@ c #00FF00", -+"....................", -+"....................", -+".. ..", -+".. ..", -+".. ..", -+".. ..", -+".. ..", -+".. ..", -+".. ..", -+".. +@+ + ..", -+".. +@+@+@@ ..", -+".. @+@+@+@ ..", -+".. +@ + + ++ ..", -+".. @+@+@++ + ..", -+".. +@+ +@@+ ..", -+".. + +@++@ ..", -+".. ++++++++++++++ ..", -+".. ..", -+"....................", -+"...................."}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_object_c1-bigtree.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_object_c1-bigtree.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_object_c1-bigtree.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_object_c1-bigtree.xpm 2010-05-05 00:55:22.000000000 +0200 -@@ -0,0 +1,28 @@ -+/* XPM */ -+static const char *brush_object_c1_bigtree[] = { -+"20 20 5 1", -+" c None", -+". c #FFCC7F", -+"+ c #808000", -+"@ c #008000", -+"# c #800000", -+"....................", -+"....................", -+".. ++@+ ..", -+".. @+++++@+ ..", -+".. +++@+@+++@ ..", -+".. +@++@++@++ ..", -+".. ++++++++++@+ ..", -+".. +@@+@++@@@+@ ..", -+".. ++++@+++++ ..", -+".. ++@+++@@+@ ..", -+".. ++++@+++ ..", -+".. @+++ ..", -+".. #### ..", -+".. #### ..", -+".. #### ..", -+".. #### ..", -+".. ###### ..", -+".. ######### ..", -+"....................", -+"...................."}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_object_c2-hanged.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_object_c2-hanged.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_object_c2-hanged.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_object_c2-hanged.xpm 2010-05-05 00:55:22.000000000 +0200 -@@ -0,0 +1,31 @@ -+/* XPM */ -+static const char *brush_object_c2_hanged[] = { -+"20 20 8 1", -+" c None", -+". c #00FFFF", -+"+ c #800000", -+"@ c #C0C0C0", -+"# c #808080", -+"$ c #FFFF00", -+"% c #0000FF", -+"& c #008000", -+"....................", -+"....................", -+".. + ..", -+".. +++++++++ ..", -+".. @ + + + @ ..", -+".. ## +++ @ ..", -+".. @@@ + ### ..", -+".. @#@#@ + # @ # ..", -+".. @@#@@ + #+@ # ..", -+".. $@@@$ + #+@+# ..", -+".. %$% + #+@+# ..", -+".. %$% + # @+# ..", -+".. @@@ + ###+#+ ..", -+".. @ @ + + + ..", -+".. + ..", -+".. + ..", -+".. &+# ..", -+"..&&&&&&&&&&&&&&&&..", -+"....................", -+"...................."}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_object_c3-statue.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_object_c3-statue.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_object_c3-statue.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_object_c3-statue.xpm 2010-05-05 00:55:22.000000000 +0200 -@@ -0,0 +1,29 @@ -+/* XPM */ -+static const char *brush_object_c3_statue[] = { -+"20 20 6 1", -+" c None", -+". c #B2194C", -+"+ c #C0C0C0", -+"@ c #808080", -+"# c #808000", -+"$ c #008000", -+"....................", -+"....................", -+".. ..", -+".. + ..", -+".. +@@ ..", -+".. +@ ..", -+".. ###+@ ..", -+".. #+#@+@ ..", -+".. ###@ ..", -+".. @@@ ..", -+".. @@@ ..", -+".. @ @ ..", -+".. @ @ ..", -+".. @ @ ..", -+".. ++++++ ..", -+".. @@@@ ..", -+".. @@@@ ..", -+"..$$$$$$$$$$$$$$$$..", -+"....................", -+"...................."}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_object_c4-bigrock.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_object_c4-bigrock.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_object_c4-bigrock.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_object_c4-bigrock.xpm 2010-05-05 00:55:22.000000000 +0200 -@@ -0,0 +1,28 @@ -+/* XPM */ -+static const char *brush_object_c4_bigrock[] = { -+"20 20 5 1", -+" c None", -+". c #7fff19", -+"+ c #808080", -+"@ c #C0C0C0", -+"# c #008000", -+"....................", -+"....................", -+".. ..", -+".. ..", -+".. ..", -+".. +@ ..", -+".. @+++ +@ ..", -+".. +++@###++ ..", -+".. +@+@###++ ..", -+".. @++++@###+ ..", -+".. ++@+@+###+@ ..", -+".. ++##+++##++ ..", -+".. +@##++++@++ ..", -+".. @++##+@++@+@ ..", -+".. ++++#++###++ ..", -+".. +@++++++#### ..", -+".. +++++###++++ ..", -+"..################..", -+"....................", -+"...................."}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_object_c5-blocking.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_object_c5-blocking.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_object_c5-blocking.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_object_c5-blocking.xpm 2010-05-05 00:55:22.000000000 +0200 -@@ -0,0 +1,27 @@ -+/* XPM */ -+static const char *brush_object_c5_blocking[] = { -+"20 20 4 1", -+" c None", -+". c #FF33CC", -+"+ c #C0C0C0", -+"@ c #008000", -+"....................", -+"....................", -+".. ..", -+".. ++++++++++++ ..", -+".. + + ..", -+".. + + ..", -+".. + + ..", -+".. + + ..", -+".. + + ..", -+".. + + ..", -+".. + + ..", -+".. + + ..", -+".. + + ..", -+".. + + ..", -+".. + + ..", -+".. + + ..", -+".. + + ..", -+"..@@@@@@@@@@@@@@@@..", -+"....................", -+"...................."}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_object_dead-tree.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_object_dead-tree.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_object_dead-tree.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_object_dead-tree.xpm 2010-05-05 00:55:22.000000000 +0200 -@@ -0,0 +1,26 @@ -+/* XPM */ -+static const char *brush_object_dead_tree[] = { -+"20 20 3 1", -+" c None", -+". c #FFFFFF", -+"+ c #800000", -+"....................", -+"....................", -+".. ..", -+".. + + ..", -+".. + + + + ..", -+".. + ++ ..", -+".. ++++ + + + ..", -+".. +++ ++ ..", -+".. + ++ +++ ..", -+".. + ++++ + ..", -+".. +++ +++ ..", -+".. +++++ ++ ..", -+".. ++++++ ..", -+".. ++++ ..", -+".. ++++ ..", -+".. ++++ ..", -+".. ++++++ ..", -+".. +++++++++ ..", -+"....................", -+"...................."}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_object_stone.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_object_stone.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_object_stone.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_object_stone.xpm 2010-05-05 00:55:22.000000000 +0200 -@@ -0,0 +1,28 @@ -+/* XPM */ -+static const char *brush_object_stone[] = { -+"20 20 5 1", -+" c None", -+". c #7F7FFF", -+"+ c #808080", -+"@ c #C0C0C0", -+"# c #008000", -+"....................", -+"....................", -+".. ..", -+".. ..", -+".. ..", -+".. ..", -+".. ..", -+".. ..", -+".. ..", -+".. +@ ..", -+".. +++@++ ..", -+".. @++++@+@ ..", -+".. +++++++++@ ..", -+".. +++@+++++@@ ..", -+".. ++++++@++@@ ..", -+".. +@++++++++@ ..", -+".. ############## ..", -+".. ..", -+"....................", -+"...................."}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_object_tree.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_object_tree.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_object_tree.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_object_tree.xpm 2010-05-05 00:55:22.000000000 +0200 -@@ -0,0 +1,28 @@ -+/* XPM */ -+static const char * brush_object_tree[] = { -+"20 20 5 1", -+" c None", -+". c #FF0000", -+"+ c #008000", -+"@ c #00FF00", -+"# c #800000", -+"....................", -+"....................", -+".. ++ ..", -+".. ++++++ ..", -+".. ++++@+++ ..", -+".. ++++++++ ..", -+".. +@++@@++@+ ..", -+".. ++++++@+++ ..", -+".. +++@++++ ..", -+".. ++++++++ ..", -+".. ++++++ ..", -+".. #++# ..", -+".. #### ..", -+".. #### ..", -+".. #### ..", -+".. #### ..", -+".. ###### ..", -+".. ######### ..", -+"....................", -+"...................."}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_object_water-object.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_object_water-object.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_object_water-object.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_object_water-object.xpm 2010-05-05 00:55:22.000000000 +0200 -@@ -0,0 +1,28 @@ -+/* XPM */ -+static const char *brush_object_water_object[] = { -+"20 20 5 1", -+" c None", -+". c #7F7F7F", -+"+ c #008000", -+"@ c #00FFFF", -+"# c #0000FF", -+"....................", -+"....................", -+".. ..", -+".. ..", -+".. ..", -+".. ..", -+".. ..", -+".. ..", -+".. + ..", -+".. + + ..", -+".. + + + + ..", -+".. + ++ + ..", -+".. + + + ..", -+".. + ++ ..", -+"..@@@@@@@++@@@@@@@..", -+"..@#@@@#@@@#@@@#@@..", -+"..#@#@#@#@#@#@#@#@..", -+"..################..", -+"....................", -+"...................."}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_players_blue.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_players_blue.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_players_blue.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_players_blue.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,26 @@ -+/* XPM */ -+static const char *brush_players_blue[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 4 1", -+" c #000000", -+". c #000080", -+"X c #0000FF", -+"o c None", -+/* pixels */ -+"oo oo", -+"oo .......... oo", -+"oo XXXXXXXXXX oo", -+"oo XX.XXXX.XX oo", -+"oo X...XX...X oo", -+"oo XX.XXXX.XX oo", -+"oo XXXXXXXXXX oo", -+"oo XXXXXXXXXX oo", -+"oo X........X oo", -+"oo XXXXXXXXXX oo", -+"oo XXXXXXXXXX oo", -+"oo XXXX..XXXX oo", -+"ooo XX....XX ooo", -+"ooo X......X ooo", -+"oooo .... oooo", -+"oooooo oooooo" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_players_cyan.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_players_cyan.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_players_cyan.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_players_cyan.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,26 @@ -+/* XPM */ -+static const char *brush_players_cyan[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 4 1", -+" c #000000", -+". c #008080", -+"X c #00FFFF", -+"o c None", -+/* pixels */ -+"oo oo", -+"oo .......... oo", -+"oo ....XX.... oo", -+"oo ...XXXX... oo", -+"oo ...XXXX... oo", -+"oo ....XX.... oo", -+"oo .......... oo", -+"oo .XX....XX. oo", -+"oo ..XXXXXX.. oo", -+"oo ...XXXX... oo", -+"oo .......... oo", -+"oo .......... oo", -+"ooo ........ ooo", -+"ooo ........ ooo", -+"oooo .... oooo", -+"oooooo oooooo" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_players_green.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_players_green.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_players_green.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_players_green.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,26 @@ -+/* XPM */ -+static const char *brush_players_green[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 4 1", -+" c #000000", -+". c #008000", -+"X c #00FF00", -+"o c None", -+/* pixels */ -+"oo oo", -+"oo .X.X..X.X. oo", -+"oo .X.X..X.X. oo", -+"oo .X.X..X.X. oo", -+"oo .X.X..X.X. oo", -+"oo .X.X..X.X. oo", -+"oo .X.X..X.X. oo", -+"oo .X.X..X.X. oo", -+"oo .X.X..X.X. oo", -+"oo .......... oo", -+"oo .XXX..XXX. oo", -+"oo ...X..X... oo", -+"ooo ..XXXX.. ooo", -+"ooo ........ ooo", -+"oooo .... oooo", -+"oooooo oooooo" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_players_orange.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_players_orange.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_players_orange.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_players_orange.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,26 @@ -+/* XPM */ -+static const char *brush_players_orange[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 4 1", -+" c #000000", -+". c #804000", -+"X c #FF8000", -+"o c None", -+/* pixels */ -+"oo oo", -+"oo XXXX.X.XXX oo", -+"oo XXX.X.XXXX oo", -+"oo XX.X.XXXXX oo", -+"oo X.X.XXXXXX oo", -+"oo .X.XXXXXXX oo", -+"oo X.XXXXX..X oo", -+"oo .XXXXX...X oo", -+"oo XXXXX...XX oo", -+"oo XXX....XXX oo", -+"oo XXXX..XXXX oo", -+"oo XXX.X.XXXX oo", -+"ooo XXXXXXXX ooo", -+"ooo XXXXXXXX ooo", -+"oooo XXXX oooo", -+"oooooo oooooo" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_players_pink.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_players_pink.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_players_pink.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_players_pink.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,26 @@ -+/* XPM */ -+static const char *brush_players_pink[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 4 1", -+" c #000000", -+". c #800080", -+"X c #FF00FF", -+"o c None", -+/* pixels */ -+"oo oo", -+"oo ..X....X.. oo", -+"oo X...XX...X oo", -+"oo XX.XXXX.XX oo", -+"oo X...XX...X oo", -+"oo ..X....X.. oo", -+"oo X...XX...X oo", -+"oo XX.XXXX.XX oo", -+"oo X...XX...X oo", -+"oo ..X....X.. oo", -+"oo X...XX...X oo", -+"oo XX.XXXX.XX oo", -+"ooo ...XX... ooo", -+"ooo .X....X. ooo", -+"oooo .XX. oooo", -+"oooooo oooooo" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_players_player.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_players_player.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_players_player.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_players_player.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_players_player[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #FFFF00", -+". c #008080", -+"X c None", -+/* pixels */ -+"XXXXX......XXXXX", -+"XXX..........XXX", -+"XX............XX", -+"X..............X", -+"X.... ....X", -+"...... .. ....", -+"...... .. ....", -+"...... .. ....", -+"...... .....", -+"...... ........", -+"...... ........", -+"X..... .......X", -+"X.... ......X", -+"XX............XX", -+"XXX..........XXX", -+"XXXXX......XXXXX" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_players_red.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_players_red.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_players_red.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_players_red.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,26 @@ -+/* XPM */ -+static const char *brush_players_red[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 4 1", -+" c #000000", -+". c #800000", -+"X c #FF0000", -+"o c None", -+/* pixels */ -+"oo oo", -+"oo .......... oo", -+"oo .......... oo", -+"oo .......... oo", -+"oo XXXXXXXXXX oo", -+"oo .......... oo", -+"oo .......... oo", -+"oo XXXXXXXXXX oo", -+"oo XXXXXXXXXX oo", -+"oo .......... oo", -+"oo .......... oo", -+"oo XXXXXXXXXX oo", -+"ooo ........ ooo", -+"ooo ........ ooo", -+"oooo .... oooo", -+"oooooo oooooo" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_players_white.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_players_white.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_players_white.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_players_white.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,26 @@ -+/* XPM */ -+static const char *brush_players_white[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 4 1", -+" c #000000", -+". c #808080", -+"X c #C0C0C0", -+"o c None", -+/* pixels */ -+"oo oo", -+"oo XXXXXXXXXX oo", -+"oo ....XX.... oo", -+"oo X.X.XX.X.X oo", -+"oo ....XX.... oo", -+"oo XXXXXXXXXX oo", -+"oo XX..XX..XX oo", -+"oo XXXXXXXXXX oo", -+"oo .......... oo", -+"oo XXXXXXXXXX oo", -+"oo .......... oo", -+"oo XXXXXXXXXX oo", -+"ooo XXXXXXXX ooo", -+"ooo XXXXXXXX ooo", -+"oooo XXXX oooo", -+"oooooo oooooo" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_players_yellow.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_players_yellow.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_players_yellow.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_players_yellow.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,26 @@ -+/* XPM */ -+static const char *brush_players_yellow[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 4 1", -+" c #000000", -+". c #808000", -+"X c #FFFF00", -+"o c None", -+/* pixels */ -+"oo oo", -+"oo .........X oo", -+"oo .XXX....X. oo", -+"oo .XXX...X.. oo", -+"oo .XXX..X..X oo", -+"oo .....X..X. oo", -+"oo ....X..X.. oo", -+"oo ...X..X..X oo", -+"oo ..X..X..X. oo", -+"oo .X..X..X.. oo", -+"oo X..X..X... oo", -+"oo ..X..X.... oo", -+"ooo X..X.... ooo", -+"ooo ..X..... ooo", -+"oooo .... oooo", -+"oooooo oooooo" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_resource_1-gold.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_resource_1-gold.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_resource_1-gold.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_resource_1-gold.xpm 2010-05-05 00:55:22.000000000 +0200 -@@ -0,0 +1,24 @@ -+/* XPM */ -+static const char *brush_resource_1_gold[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 2 1", -+" c #dddd00", -+". c None", -+/* pixels */ -+"................", -+". .......... .", -+". ........ .", -+".. ...... ..", -+"... .... ...", -+".... .. ....", -+"..... .....", -+"...... ......", -+"...... ......", -+"..... .....", -+".... .. ....", -+"... .... ...", -+".. ...... ..", -+". ........ .", -+". .......... .", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_resource_2-stone.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_resource_2-stone.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_resource_2-stone.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_resource_2-stone.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,24 @@ -+/* XPM */ -+static const char *brush_resource_2_stone[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 2 1", -+" c #808080", -+". c None", -+/* pixels */ -+"................", -+". .......... .", -+". ........ .", -+".. ...... ..", -+"... .... ...", -+".... .. ....", -+"..... .....", -+"...... ......", -+"...... ......", -+"..... .....", -+".... .. ....", -+"... .... ...", -+".. ...... ..", -+". ........ .", -+". .......... .", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_resource_3.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_resource_3.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_resource_3.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_resource_3.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,24 @@ -+/* XPM */ -+static const char *brush_resource_3[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 2 1", -+" c #FF0000", -+". c None", -+/* pixels */ -+"................", -+". .......... .", -+". ........ .", -+".. ...... ..", -+"... .... ...", -+".... .. ....", -+"..... .....", -+"...... ......", -+"...... ......", -+"..... .....", -+".... .. ....", -+"... .... ...", -+".. ...... ..", -+". ........ .", -+". .......... .", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_resource_4.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_resource_4.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_resource_4.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_resource_4.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,24 @@ -+/* XPM */ -+static const char *brush_resource_4[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 2 1", -+" c #0000FF", -+". c None", -+/* pixels */ -+"................", -+". .......... .", -+". ........ .", -+".. ...... ..", -+"... .... ...", -+".... .. ....", -+"..... .....", -+"...... ......", -+"...... ......", -+"..... .....", -+".... .. ....", -+"... .... ...", -+".. ...... ..", -+". ........ .", -+". .......... .", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_resource_5.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_resource_5.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_resource_5.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_resource_5.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,24 @@ -+/* XPM */ -+static const char *brush_resource_5[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 2 1", -+" c #008080", -+". c None", -+/* pixels */ -+"................", -+". .......... .", -+". ........ .", -+".. ...... ..", -+"... .... ...", -+".... .. ....", -+"..... .....", -+"...... ......", -+"...... ......", -+"..... .....", -+".... .. ....", -+"... .... ...", -+".. ...... ..", -+". ........ .", -+". .......... .", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_surface_custom.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_surface_custom.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_surface_custom.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_surface_custom.xpm 2010-05-05 00:55:22.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_surface_custom[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #7c4645", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+" ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" ", -+"XXXXXXXXXXXXXXXX" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_surface_grass1.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_surface_grass1.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_surface_grass1.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_surface_grass1.xpm 2010-05-05 00:55:22.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_surface_grass1[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #00a000", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+" ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" ", -+"XXXXXXXXXXXXXXXX" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_surface_grass2.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_surface_grass2.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_surface_grass2.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_surface_grass2.xpm 2010-05-05 00:55:22.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_surface_grass2[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #536e0b", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+" ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" ", -+"XXXXXXXXXXXXXXXX" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_surface_road.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_surface_road.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_surface_road.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_surface_road.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_surface_road[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #800000", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+" ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" ", -+"XXXXXXXXXXXXXXXX" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/brush_surface_stone.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_surface_stone.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/brush_surface_stone.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/brush_surface_stone.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *brush_surface_stone[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #808080", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+" ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" .............. ", -+" ", -+"XXXXXXXXXXXXXXXX" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/edit_randomize-heights.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/edit_randomize-heights.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/edit_randomize-heights.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/edit_randomize-heights.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,24 @@ -+/* XPM */ -+static const char *edit_randomize_heights[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 2 1", -+" c #008000", -+". c None", -+/* pixels */ -+"................", -+"................", -+"................", -+"................", -+"................", -+"................", -+"................", -+"................", -+"...... ..... .", -+"... . .", -+" ", -+" ", -+" ", -+" ", -+" ", -+" " -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/edit_randomize.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/edit_randomize.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/edit_randomize.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/edit_randomize.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *edit_randomize[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #008000", -+". c #00FF00", -+"X c #00FFFF", -+/* pixels */ -+" ", -+" XX XX ", -+" XX XX . ", -+" XXXX ", -+" XX ", -+" XXXX .", -+" XX XX .", -+" XX XX ..", -+" . ", -+" .", -+" . ", -+" ... . ", -+" . ", -+" .", -+" . .... ", -+" ...... " -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/edit_redo.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/edit_redo.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/edit_redo.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/edit_redo.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,24 @@ -+/* XPM */ -+static const char *edit_redo[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 2 1", -+" c #000000", -+". c None", -+/* pixels */ -+"................", -+"........ .....", -+"......... ....", -+".......... ...", -+"........... ..", -+".... .", -+"... .", -+".. ...... ..", -+". ...... ...", -+". ...... ....", -+". ..... .....", -+". .............", -+". .............", -+".. .............", -+"................", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/edit_switch-surfaces.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/edit_switch-surfaces.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/edit_switch-surfaces.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/edit_switch-surfaces.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,24 @@ -+/* XPM */ -+static const char *edit_switch_surfaces[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 2 1", -+" c #008000", -+". c #00FF00", -+/* pixels */ -+"........ ", -+"........ ", -+"........ ", -+"........ ", -+"........ ", -+"..... .. . ", -+".... .. .. ", -+"... ..... ", -+"... ..... ", -+".... .. .. ", -+"..... .. . ", -+"........ ", -+"........ ", -+"........ ", -+"........ ", -+"........ " -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/edit_undo.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/edit_undo.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/edit_undo.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/edit_undo.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,24 @@ -+/* XPM */ -+static const char *edit_undo[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 2 1", -+" c #000000", -+". c None", -+/* pixels */ -+"................", -+"..... ........", -+".... .........", -+"... ..........", -+".. ...........", -+". ....", -+". ...", -+".. ...... ..", -+"... ...... .", -+".... ...... .", -+"..... ..... .", -+"............. .", -+"............. .", -+"............. ..", -+"................", -+"................" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/radius_1.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/radius_1.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/radius_1.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/radius_1.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *radius_1[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #C0C0C0", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXX..XXXXXXX", -+"XXXXXX. .XXXXXX", -+"XXXXXX. .XXXXXX", -+"XXXXXXX..XXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/radius_2.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/radius_2.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/radius_2.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/radius_2.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,26 @@ -+/* XPM */ -+static const char *radius_2[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 4 1", -+" c #000000", -+". c #808080", -+"X c #C0C0C0", -+"o c None", -+/* pixels */ -+"oooooooooooooooo", -+"oooooooooooooooo", -+"oooooooooooooooo", -+"oooooooooooooooo", -+"oooooooooooooooo", -+"oooooooXXooooooo", -+"oooooo. .oooooo", -+"oooooX Xooooo", -+"oooooX Xooooo", -+"oooooo. .oooooo", -+"oooooooXXooooooo", -+"oooooooooooooooo", -+"oooooooooooooooo", -+"oooooooooooooooo", -+"oooooooooooooooo", -+"oooooooooooooooo" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/radius_3.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/radius_3.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/radius_3.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/radius_3.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *radius_3[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #808080", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXX. .XXXXXX", -+"XXXXX. .XXXXX", -+"XXXXX XXXXX", -+"XXXXX XXXXX", -+"XXXXX. .XXXXX", -+"XXXXXX. .XXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX", -+"XXXXXXXXXXXXXXXX" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/radius_4.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/radius_4.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/radius_4.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/radius_4.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,26 @@ -+/* XPM */ -+static const char *radius_4[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 4 1", -+" c #000000", -+". c #808080", -+"X c #C0C0C0", -+"o c None", -+/* pixels */ -+"oooooooooooooooo", -+"oooooooooooooooo", -+"oooooooooooooooo", -+"oooooooooooooooo", -+"ooooooX..Xoooooo", -+"ooooo. .ooooo", -+"ooooX Xoooo", -+"oooo. .oooo", -+"oooo. .oooo", -+"ooooX Xoooo", -+"ooooo. .ooooo", -+"ooooooX..Xoooooo", -+"oooooooooooooooo", -+"oooooooooooooooo", -+"oooooooooooooooo", -+"oooooooooooooooo" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/radius_5.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/radius_5.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/radius_5.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/radius_5.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,26 @@ -+/* XPM */ -+static const char *radius_5[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 4 1", -+" c #000000", -+". c #808080", -+"X c #C0C0C0", -+"o c None", -+/* pixels */ -+"oooooooooooooooo", -+"oooooooooooooooo", -+"oooooooooooooooo", -+"oooooooXXooooooo", -+"oooooX. .Xooooo", -+"ooooX Xoooo", -+"oooo. .oooo", -+"oooX Xooo", -+"oooX Xooo", -+"oooo. .oooo", -+"ooooX Xoooo", -+"oooooX. .Xooooo", -+"oooooooXXooooooo", -+"oooooooooooooooo", -+"oooooooooooooooo", -+"oooooooooooooooo" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/radius_6.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/radius_6.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/radius_6.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/radius_6.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,26 @@ -+/* XPM */ -+static const char *radius_6[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 4 1", -+" c #000000", -+". c #808080", -+"X c #C0C0C0", -+"o c None", -+/* pixels */ -+"oooooooooooooooo", -+"oooooooooooooooo", -+"oooooooooooooooo", -+"ooooooX..Xoooooo", -+"ooooo. .ooooo", -+"oooo. .oooo", -+"oooX Xooo", -+"ooo. .ooo", -+"ooo. .ooo", -+"oooX Xooo", -+"oooo. .oooo", -+"ooooo. .ooooo", -+"ooooooX..Xoooooo", -+"oooooooooooooooo", -+"oooooooooooooooo", -+"oooooooooooooooo" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/radius_7.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/radius_7.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/radius_7.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/radius_7.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,26 @@ -+/* XPM */ -+static const char *radius_7[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 4 1", -+" c #000000", -+". c #808080", -+"X c #C0C0C0", -+"o c None", -+/* pixels */ -+"oooooooooooooooo", -+"oooooooooooooooo", -+"oooooooXXooooooo", -+"ooooo. .ooooo", -+"oooo oooo", -+"ooo. .ooo", -+"ooo ooo", -+"ooX Xoo", -+"ooX Xoo", -+"ooo ooo", -+"ooo. .ooo", -+"oooo oooo", -+"ooooo. .ooooo", -+"oooooooXXooooooo", -+"oooooooooooooooo", -+"oooooooooooooooo" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/radius_8.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/radius_8.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/radius_8.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/radius_8.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,26 @@ -+/* XPM */ -+static const char *radius_8[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 4 1", -+" c #000000", -+". c #808080", -+"X c #C0C0C0", -+"o c None", -+/* pixels */ -+"oooooooooooooooo", -+"oooooooooooooooo", -+"oooooo. .oooooo", -+"ooooX Xoooo", -+"oooX Xooo", -+"ooo ooo", -+"oo. .oo", -+"oo oo", -+"oo oo", -+"oo. .oo", -+"ooo ooo", -+"oooX Xooo", -+"ooooX Xoooo", -+"oooooo. .oooooo", -+"oooooooooooooooo", -+"oooooooooooooooo" -+}; -diff -Naur megaglest-source-3.3.5/glest_map_editor/icons/radius_9.xpm megaglest-source-3.3.5.patch/glest_map_editor/icons/radius_9.xpm ---- megaglest-source-3.3.5/glest_map_editor/icons/radius_9.xpm 1970-01-01 01:00:00.000000000 +0100 -+++ megaglest-source-3.3.5.patch/glest_map_editor/icons/radius_9.xpm 2010-05-04 02:22:11.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* XPM */ -+static const char *radius_9[] = { -+/* columns rows colors chars-per-pixel */ -+"16 16 3 1", -+" c #000000", -+". c #808080", -+"X c None", -+/* pixels */ -+"XXXXXXXXXXXXXXXX", -+"XXXXXXX..XXXXXXX", -+"XXXXX. .XXXXX", -+"XXXX XXXX", -+"XXX XXX", -+"XX. .XX", -+"XX XX", -+"X. .X", -+"X. .X", -+"XX XX", -+"XX. .XX", -+"XXX XXX", -+"XXXX XXXX", -+"XXXXX. .XXXXX", -+"XXXXXXX..XXXXXXX", -+"XXXXXXXXXXXXXXXX" -+}; diff --git a/packages/addons/games/megaglest/changelog.txt b/packages/addons/games/megaglest/changelog.txt index 14f82d9b75..2b869a64b1 100644 --- a/packages/addons/games/megaglest/changelog.txt +++ b/packages/addons/games/megaglest/changelog.txt @@ -1,2 +1,5 @@ +0.90.2 +- update to MegaGlest-3.3.7.2 + 0.90.1 -- initial version MegaGlest-3.3.5 \ No newline at end of file +- initial version MegaGlest-3.3.5 diff --git a/packages/addons/games/megaglest/meta b/packages/addons/games/megaglest/meta index 92f86675eb..3e65ebffac 100644 --- a/packages/addons/games/megaglest/meta +++ b/packages/addons/games/megaglest/meta @@ -1,6 +1,6 @@ PKG_NAME="megaglest" PKG_VERSION="" -PKG_REV="1" +PKG_REV="2" PKG_ARCH="any" PKG_LICENSE="OSS" PKG_SITE="http://www.glest.org" From 812f8a96d56cd26c039b9c546f86857b44990454 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 4 Nov 2010 01:14:55 +0100 Subject: [PATCH 038/850] sauerbraten: update to sauerbraten-2010_07_28 Signed-off-by: Stephan Raue --- packages/addons/games/sauerbraten/changelog.txt | 5 ++++- packages/addons/games/sauerbraten/meta | 6 +++--- .../patches/sauerbraten-fix_includes_and_libs-0.1.diff | 10 +++++----- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/packages/addons/games/sauerbraten/changelog.txt b/packages/addons/games/sauerbraten/changelog.txt index b660bff93a..86b3a1ab69 100644 --- a/packages/addons/games/sauerbraten/changelog.txt +++ b/packages/addons/games/sauerbraten/changelog.txt @@ -1,2 +1,5 @@ +0.90.2 +- update to sauerbraten-2010_07_28 + 0.90.1 -- initial version sauerbraten-2009.05.04 \ No newline at end of file +- initial version sauerbraten-2009.05.04 diff --git a/packages/addons/games/sauerbraten/meta b/packages/addons/games/sauerbraten/meta index c1ee548d90..f9596c248e 100644 --- a/packages/addons/games/sauerbraten/meta +++ b/packages/addons/games/sauerbraten/meta @@ -1,10 +1,10 @@ PKG_NAME="sauerbraten" -PKG_VERSION="2009_05_04" -PKG_REV="1" +PKG_VERSION="2010_07_28" +PKG_REV="2" PKG_ARCH="any" PKG_LICENSE="OSS" PKG_SITE="http://sauerbraten.org/" -PKG_URL="http://downloads.sourceforge.net/project/sauerbraten/sauerbraten/$PKG_VERSION/${PKG_NAME}_${PKG_VERSION}_trooper_edition_linux.tar.bz2" +PKG_URL="http://downloads.sourceforge.net/project/sauerbraten/sauerbraten/2010_07_19/${PKG_NAME}_${PKG_VERSION}_justice_edition_linux.tar.bz2" PKG_DEPENDS="zlib libpng $LIBJPEG libX11 SDL SDL_image SDL_mixer $MESA" PKG_BUILD_DEPENDS="toolchain zlib libpng $LIBJPEG libX11 SDL SDL_image SDL_mixer $MESA" PKG_PRIORITY="optional" diff --git a/packages/addons/games/sauerbraten/patches/sauerbraten-fix_includes_and_libs-0.1.diff b/packages/addons/games/sauerbraten/patches/sauerbraten-fix_includes_and_libs-0.1.diff index 9b27089586..65f0a5355d 100644 --- a/packages/addons/games/sauerbraten/patches/sauerbraten-fix_includes_and_libs-0.1.diff +++ b/packages/addons/games/sauerbraten/patches/sauerbraten-fix_includes_and_libs-0.1.diff @@ -1,14 +1,14 @@ diff -Naur sauerbraten/src/Makefile sauerbraten.patch/src/Makefile ---- sauerbraten/src/Makefile 2009-04-22 19:47:44.000000000 +0200 -+++ sauerbraten.patch/src/Makefile 2010-07-18 20:21:19.321805286 +0200 -@@ -18,8 +18,8 @@ +--- sauerbraten/src/Makefile 2010-05-13 20:30:28.000000000 +0200 ++++ sauerbraten.patch/src/Makefile 2010-11-04 01:03:27.636654907 +0100 +@@ -20,8 +20,8 @@ CLIENT_INCLUDES= $(INCLUDES) -Iinclude CLIENT_LIBS= -mwindows -Llib -lSDL -lSDL_image -lSDL_mixer -lzdll -lopengl32 -lenet -lws2_32 -lwinmm else -CLIENT_INCLUDES= $(INCLUDES) -I/usr/X11R6/include `sdl-config --cflags` --CLIENT_LIBS= -Lenet -lenet -L/usr/X11R6/lib `sdl-config --libs` -lSDL_image -lSDL_mixer -lz -lGL +-CLIENT_LIBS= -Lenet/.libs -lenet -L/usr/X11R6/lib `sdl-config --libs` -lSDL_image -lSDL_mixer -lz -lGL +CLIENT_INCLUDES= $(INCLUDES) `sdl-config --cflags` -+CLIENT_LIBS= -Lenet -lenet `sdl-config --libs` -lSDL_image -lSDL_mixer -lz -lGL ++CLIENT_LIBS= -Lenet/.libs -lenet `sdl-config --libs` -lSDL_image -lSDL_mixer -lz -lGL endif ifeq ($(PLATFORM),Linux) CLIENT_LIBS+= -lrt From a79bbbae5ba08ef5942cfe2110acde8ab6d9cdd8 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 4 Nov 2010 02:07:51 +0100 Subject: [PATCH 039/850] new package: add package 'iwlwifi-6050-ucode' Signed-off-by: Stephan Raue --- packages/linux-firmware/install | 1 + packages/linux-firmware/iwlwifi-6050-ucode/install | 6 ++++++ packages/linux-firmware/iwlwifi-6050-ucode/url | 1 + projects/ATV/options | 2 +- projects/ION/options | 2 +- projects/generic/options | 4 ++-- projects/intel/options | 2 +- 7 files changed, 13 insertions(+), 5 deletions(-) create mode 100755 packages/linux-firmware/iwlwifi-6050-ucode/install create mode 100644 packages/linux-firmware/iwlwifi-6050-ucode/url diff --git a/packages/linux-firmware/install b/packages/linux-firmware/install index 190e617c60..65fb892014 100755 --- a/packages/linux-firmware/install +++ b/packages/linux-firmware/install @@ -12,6 +12,7 @@ for firmware in "$FIRMWARE"; do [ "$firmware" = iwl5000 ] && $SCRIPTS/install iwlwifi-5000-ucode [ "$firmware" = iwl5150 ] && $SCRIPTS/install iwlwifi-5150-ucode [ "$firmware" = iwl6000 ] && $SCRIPTS/install iwlwifi-6000-ucode + [ "$firmware" = iwl6050 ] && $SCRIPTS/install iwlwifi-6050-ucode done diff --git a/packages/linux-firmware/iwlwifi-6050-ucode/install b/packages/linux-firmware/iwlwifi-6050-ucode/install new file mode 100755 index 0000000000..3fdf7ee6c5 --- /dev/null +++ b/packages/linux-firmware/iwlwifi-6050-ucode/install @@ -0,0 +1,6 @@ +#!/bin/sh + +. config/options $1 + +mkdir -p $INSTALL/lib/firmware + cp -PR $PKG_BUILD/* $INSTALL/lib/firmware diff --git a/packages/linux-firmware/iwlwifi-6050-ucode/url b/packages/linux-firmware/iwlwifi-6050-ucode/url new file mode 100644 index 0000000000..a9899d6acb --- /dev/null +++ b/packages/linux-firmware/iwlwifi-6050-ucode/url @@ -0,0 +1 @@ +http://intellinuxwireless.org/iwlwifi/downloads/iwlwifi-6050-ucode-9.201.4.1.tgz \ No newline at end of file diff --git a/projects/ATV/options b/projects/ATV/options index 1501a8d87f..e55cb614c8 100644 --- a/projects/ATV/options +++ b/projects/ATV/options @@ -178,7 +178,7 @@ # "none" for disable LCD support LCD_DRIVER="none" -# Firmware to use (iwl1000, iwl3945, iwl4965, iwl5000, iwl5150, iwl6000) +# Firmware to use (iwl1000, iwl3945, iwl4965, iwl5000, iwl5150, iwl6000, iwl6050) # Space separated list is supported, # e.g. FIRMWARE="iwl3945 iwl5000" FIRMWARE="" diff --git a/projects/ION/options b/projects/ION/options index aacf39b204..8af8609cd7 100644 --- a/projects/ION/options +++ b/projects/ION/options @@ -178,7 +178,7 @@ # "none" for disable LCD support LCD_DRIVER="irtrans" -# Firmware to use (iwl1000, iwl3945, iwl4965, iwl5000, iwl5150, iwl6000) +# Firmware to use (iwl1000, iwl3945, iwl4965, iwl5000, iwl5150, iwl6000, iwl6050) # Space separated list is supported, # e.g. FIRMWARE="iwl3945 iwl5000" FIRMWARE="" diff --git a/projects/generic/options b/projects/generic/options index 297f33128c..daeee79453 100644 --- a/projects/generic/options +++ b/projects/generic/options @@ -178,10 +178,10 @@ # "none" for disable LCD support LCD_DRIVER="irtrans" -# Firmware to use (iwl1000, iwl3945, iwl4965, iwl5000, iwl5150, iwl6000) +# Firmware to use (iwl1000, iwl3945, iwl4965, iwl5000, iwl5150, iwl6000, iwl6050) # Space separated list is supported, # e.g. FIRMWARE="iwl3945 iwl5000" - FIRMWARE="ipw2100 ipw2200 iwl1000 iwl3945 iwl4965 iwl5000 iwl5150 iwl6000" + FIRMWARE="ipw2100 ipw2200 iwl1000 iwl3945 iwl4965 iwl5000 iwl5150 iwl6000 iwl6050" # build with lm_sensors hardware monitoring support (yes / no) SENSOR_SUPPORT="yes" diff --git a/projects/intel/options b/projects/intel/options index 9d1c4d1433..36a4eaafba 100644 --- a/projects/intel/options +++ b/projects/intel/options @@ -178,7 +178,7 @@ # "none" for disable LCD support LCD_DRIVER="irtrans" -# Firmware to use (iwl1000, iwl3945, iwl4965, iwl5000, iwl5150, iwl6000) +# Firmware to use (iwl1000, iwl3945, iwl4965, iwl5000, iwl5150, iwl6000, iwl6050) # Space separated list is supported, # e.g. FIRMWARE="iwl3945 iwl5000" FIRMWARE="iwl5000" From 36f77c4bbfb705c020a53f860e94ce678cd70925 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 4 Nov 2010 02:10:48 +0100 Subject: [PATCH 040/850] atk: fix downloadurl Signed-off-by: Stephan Raue --- packages/accessibility/atk/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/accessibility/atk/meta b/packages/accessibility/atk/meta index 260ed4d18f..5bef3c55f9 100644 --- a/packages/accessibility/atk/meta +++ b/packages/accessibility/atk/meta @@ -4,7 +4,7 @@ PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://library.gnome.org/devel/atk/" -PKG_URL="http://ftp.gnome.org/pub/gnome/sources/$PKG_NAME/1.30/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_URL="http://ftp.gnome.org/pub/gnome/sources/$PKG_NAME/1.32/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="glib" PKG_BUILD_DEPENDS="toolchain glib" PKG_PRIORITY="optional" From 3f8ac499d343c0a0482db3c06d0b8e4bc77a689d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 4 Nov 2010 02:11:13 +0100 Subject: [PATCH 041/850] lzo: update to lzo-2.04 Signed-off-by: Stephan Raue --- packages/compress/lzo/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/compress/lzo/meta b/packages/compress/lzo/meta index 4f50440f66..6581178639 100644 --- a/packages/compress/lzo/meta +++ b/packages/compress/lzo/meta @@ -1,5 +1,5 @@ PKG_NAME="lzo" -PKG_VERSION="2.03" +PKG_VERSION="2.04" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From ca8bf967e4f05501e1a4c843750701e21c6349a9 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 4 Nov 2010 02:11:41 +0100 Subject: [PATCH 042/850] glib: update to glib-2.27.2 Signed-off-by: Stephan Raue --- packages/devel/glib/meta | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/devel/glib/meta b/packages/devel/glib/meta index f413d96c63..0832061030 100644 --- a/packages/devel/glib/meta +++ b/packages/devel/glib/meta @@ -1,10 +1,10 @@ PKG_NAME="glib" -PKG_VERSION="2.26.0" +PKG_VERSION="2.27.2" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="LGPL" PKG_SITE="http://www.gtk.org/" -PKG_URL="http://ftp.gnome.org/pub/gnome/sources/glib/2.26/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_URL="http://ftp.gnome.org/pub/gnome/sources/glib/2.27/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="zlib dbus" PKG_BUILD_DEPENDS="toolchain zlib dbus glib-host" PKG_PRIORITY="optional" From 448a3e91ec6dd4f5e7883b958bca61611a684537 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 4 Nov 2010 02:12:19 +0100 Subject: [PATCH 043/850] xproto: update to xproto-7.0.19 Signed-off-by: Stephan Raue --- packages/x11/proto/xproto/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/x11/proto/xproto/meta b/packages/x11/proto/xproto/meta index 1010902c21..222b0aacb4 100644 --- a/packages/x11/proto/xproto/meta +++ b/packages/x11/proto/xproto/meta @@ -1,5 +1,5 @@ PKG_NAME="xproto" -PKG_VERSION="7.0.18" +PKG_VERSION="7.0.19" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="OSS" From 9de90c51b28e96f44928a4c219c4960deabbe2ee Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 4 Nov 2010 02:32:02 +0100 Subject: [PATCH 044/850] new package: add package 'iptables' Signed-off-by: Stephan Raue --- packages/network/iptables/build | 20 ++++++++++++++++++++ packages/network/iptables/install | 6 ++++++ packages/network/iptables/url | 1 + 3 files changed, 27 insertions(+) create mode 100755 packages/network/iptables/build create mode 100755 packages/network/iptables/install create mode 100644 packages/network/iptables/url diff --git a/packages/network/iptables/build b/packages/network/iptables/build new file mode 100755 index 0000000000..f0c0a59590 --- /dev/null +++ b/packages/network/iptables/build @@ -0,0 +1,20 @@ +#!/bin/sh + +. config/options $1 + +$SCRIPTS/build toolchain +$SCRIPTS/build linux + +cd $PKG_BUILD +./configure --host=$TARGET_NAME \ + --build=$HOST_NAME \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --disable-static \ + --enable-shared \ + --with-kernel="$(kernel_path)" \ + +make + +$MAKEINSTALL diff --git a/packages/network/iptables/install b/packages/network/iptables/install new file mode 100755 index 0000000000..5017bc5633 --- /dev/null +++ b/packages/network/iptables/install @@ -0,0 +1,6 @@ +#!/bin/sh + +. config/options $1 + +mkdir -p $INSTALL/usr/lib + cp -P $PKG_BUILD/.libs/*.so*[.0-9] $INSTALL/usr/lib/ diff --git a/packages/network/iptables/url b/packages/network/iptables/url new file mode 100644 index 0000000000..aaee3bf661 --- /dev/null +++ b/packages/network/iptables/url @@ -0,0 +1 @@ +http://www.netfilter.org/projects/iptables/files/iptables-1.4.10.tar.bz2 \ No newline at end of file From 84ba1f7a38cb7ab6272a6a8e4d27c59549fc79f5 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 4 Nov 2010 02:32:27 +0100 Subject: [PATCH 045/850] connman: update to connman-0.63 Signed-off-by: Stephan Raue --- packages/network/connman/build | 11 ++++++----- packages/network/connman/meta | 6 +++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/packages/network/connman/build b/packages/network/connman/build index c4d689021f..bd1fb79cdb 100755 --- a/packages/network/connman/build +++ b/packages/network/connman/build @@ -4,7 +4,6 @@ cd $PKG_BUILD ac_cv_path_WPASUPPLICANT="/sbin/wpa_supplicant" \ -ac_cv_path_NTPD="/usr/sbin/ntpd" \ ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ @@ -15,7 +14,6 @@ ac_cv_path_NTPD="/usr/sbin/ntpd" \ --disable-gtk-doc \ --disable-debug \ --enable-threads \ - --enable-loopback=builtin \ --enable-ethernet=builtin \ --enable-wifi=builtin \ --disable-bluetooth \ @@ -23,21 +21,24 @@ ac_cv_path_NTPD="/usr/sbin/ntpd" \ --disable-ofono \ --disable-dhclient \ --disable-openconnect \ - --disable-pacrunner \ + --enable-portal=builtin \ + --disable-openvpn \ + --enable-loopback=builtin \ --enable-dnsproxy=builtin \ + --disable-pacrunner \ --enable-google=builtin \ --enable-meego=builtin \ - --enable-portal=builtin \ --disable-iwmx \ --disable-iospm \ --enable-ntpd=builtin \ + --with-ntpd="/usr/sbin/ntpd" \ + --disable-systemd \ --disable-polkit \ --enable-client \ --disable-tools \ --disable-test \ --disable-fake \ --disable-capng \ - --enable-udev \ --enable-datafiles \ --disable-silent-rules \ diff --git a/packages/network/connman/meta b/packages/network/connman/meta index 9491503c4e..ba4fb4ccdf 100644 --- a/packages/network/connman/meta +++ b/packages/network/connman/meta @@ -1,12 +1,12 @@ PKG_NAME="connman" -PKG_VERSION="0.62" +PKG_VERSION="0.63" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://www.connman.net" PKG_URL="http://www.kernel.org/pub/linux/network/connman/$PKG_NAME-$PKG_VERSION.tar.bz2" -PKG_DEPENDS="glib dbus udev wpa_supplicant ntp siglaunchd" -PKG_BUILD_DEPENDS="toolchain glib dbus udev" +PKG_DEPENDS="glib dbus udev iptables wpa_supplicant ntp siglaunchd" +PKG_BUILD_DEPENDS="toolchain glib dbus udev iptables" PKG_PRIORITY="optional" PKG_SECTION="network" PKG_SHORTDESC="connman: Network manager daemon" From 6eec796737d6612b65bb9788bbcf337e7c29062a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 4 Nov 2010 06:04:40 +0100 Subject: [PATCH 046/850] rtl8192se: update to rtl8192se-0018.1025.2010 Signed-off-by: Stephan Raue --- packages/drivers/rtl8192se/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/drivers/rtl8192se/meta b/packages/drivers/rtl8192se/meta index 6b9f4bdeb2..44f13470db 100644 --- a/packages/drivers/rtl8192se/meta +++ b/packages/drivers/rtl8192se/meta @@ -1,5 +1,5 @@ PKG_NAME="rtl8192se" -PKG_VERSION="0017.0705.2010" +PKG_VERSION="0018.1025.2010" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="nonfree" From fd1342e03f63f1db6df10d152f69e43812cf929a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 5 Nov 2010 02:42:52 +0100 Subject: [PATCH 047/850] linux: update nouveau drm patches Signed-off-by: Stephan Raue --- ...2.6.36-drm_nouveau_upstream-20101104.diff} | 340 ++++++++++-------- ...ouveau_revert_nv40_pcie_gart_size-0.1.diff | 16 - ...drm_noveau_dont_select_ACPI_VIDEO-0.1.diff | 11 - 3 files changed, 189 insertions(+), 178 deletions(-) rename packages/linux/patches/{110-linux-2.6.36-drm_nouveau_upstream-20101030.diff => 110-linux-2.6.36-drm_nouveau_upstream-20101104.diff} (99%) delete mode 100644 packages/linux/patches/111-linux-2.6.36-drm_nouveau_revert_nv40_pcie_gart_size-0.1.diff delete mode 100644 packages/linux/patches/112-linux-2.6.36-drm_noveau_dont_select_ACPI_VIDEO-0.1.diff diff --git a/packages/linux/patches/110-linux-2.6.36-drm_nouveau_upstream-20101030.diff b/packages/linux/patches/110-linux-2.6.36-drm_nouveau_upstream-20101104.diff similarity index 99% rename from packages/linux/patches/110-linux-2.6.36-drm_nouveau_upstream-20101030.diff rename to packages/linux/patches/110-linux-2.6.36-drm_nouveau_upstream-20101104.diff index 26893f9b4f..e1117bffd6 100644 --- a/packages/linux/patches/110-linux-2.6.36-drm_nouveau_upstream-20101030.diff +++ b/packages/linux/patches/110-linux-2.6.36-drm_nouveau_upstream-20101104.diff @@ -1,6 +1,6 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/Kconfig linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/Kconfig --- linux-2.6.36/drivers/gpu/drm/nouveau/Kconfig 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/Kconfig 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/Kconfig 2010-11-05 00:40:00.000000000 +0100 @@ -10,6 +10,7 @@ select FB select FRAMEBUFFER_CONSOLE if !EMBEDDED @@ -11,7 +11,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/Kconfig linux-2.6.36.nouveau/dri diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/Makefile linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/Makefile --- linux-2.6.36/drivers/gpu/drm/nouveau/Makefile 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/Makefile 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/Makefile 2010-11-05 00:40:00.000000000 +0100 @@ -9,7 +9,8 @@ nouveau_bo.o nouveau_fence.o nouveau_gem.o nouveau_ttm.o \ nouveau_hw.o nouveau_calc.o nouveau_bios.o nouveau_i2c.o \ @@ -42,7 +42,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/Makefile linux-2.6.36.nouveau/dr nouveau-$(CONFIG_COMPAT) += nouveau_ioc32.o diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_acpi.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_acpi.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_acpi.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_acpi.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_acpi.c 2010-11-05 00:40:00.000000000 +0100 @@ -292,6 +292,6 @@ if (ret < 0) return ret; @@ -51,9 +51,35 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_acpi.c linux-2.6.36.nouv + nv_connector->edid = kmemdup(edid, EDID_LENGTH, GFP_KERNEL); return 0; } +diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_backlight.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_backlight.c +--- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_backlight.c 2010-10-20 22:30:22.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_backlight.c 2010-11-05 00:40:00.000000000 +0100 +@@ -31,6 +31,7 @@ + */ + + #include ++#include + + #include "drmP.h" + #include "nouveau_drv.h" +@@ -136,6 +137,14 @@ + { + struct drm_nouveau_private *dev_priv = dev->dev_private; + ++#ifdef CONFIG_ACPI ++ if (acpi_video_backlight_support()) { ++ NV_INFO(dev, "ACPI backlight interface available, " ++ "not registering our own\n"); ++ return 0; ++ } ++#endif ++ + switch (dev_priv->card_type) { + case NV_40: + return nouveau_nv40_backlight_init(dev); diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_bios.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_bios.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_bios.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_bios.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_bios.c 2010-11-05 00:40:00.000000000 +0100 @@ -43,9 +43,6 @@ #define BIOSLOG(sip, fmt, arg...) NV_DEBUG(sip->dev, fmt, ##arg) #define LOG_OLD_VALUE(x) @@ -603,7 +629,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_bios.c linux-2.6.36.nouv if (ret) diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_bios.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_bios.h --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_bios.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_bios.h 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_bios.h 2010-11-05 00:40:00.000000000 +0100 @@ -34,6 +34,20 @@ #define DCB_LOC_ON_CHIP 0 @@ -674,7 +700,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_bios.h linux-2.6.36.nouv diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_bo.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_bo.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_bo.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_bo.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_bo.c 2010-11-05 00:40:00.000000000 +0100 @@ -36,21 +36,6 @@ #include #include @@ -1239,7 +1265,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_bo.c linux-2.6.36.nouvea .io_mem_free = &nouveau_ttm_io_mem_free, diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_calc.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_calc.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_calc.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_calc.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_calc.c 2010-11-05 00:40:00.000000000 +0100 @@ -198,8 +198,8 @@ struct drm_nouveau_private *dev_priv = dev->dev_private; struct nv_fifo_info fifo_data; @@ -1279,7 +1305,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_calc.c linux-2.6.36.nouv static int diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_channel.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_channel.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_channel.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_channel.c 2010-11-05 00:40:00.000000000 +0100 @@ -48,14 +48,14 @@ dev_priv->gart_info.aper_size, NV_DMA_ACCESS_RO, &pushbuf, @@ -1785,7 +1811,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6.36.n int nouveau_max_ioctl = DRM_ARRAY_SIZE(nouveau_ioctls); diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_connector.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_connector.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.c 2010-11-05 00:40:00.000000000 +0100 @@ -76,6 +76,22 @@ return NULL; } @@ -1993,7 +2019,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_connector.c linux-2.6.36 return dcb->drm; diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_connector.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.h --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_connector.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.h 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.h 2010-11-05 00:40:00.000000000 +0100 @@ -52,7 +52,7 @@ struct drm_connector * nouveau_connector_create(struct drm_device *, int index); @@ -2006,7 +2032,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_connector.h linux-2.6.36 #endif /* __NOUVEAU_CONNECTOR_H__ */ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_debugfs.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_debugfs.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_debugfs.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_debugfs.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_debugfs.c 2010-11-05 00:40:00.000000000 +0100 @@ -157,7 +157,23 @@ return 0; } @@ -2033,7 +2059,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_debugfs.c linux-2.6.36.n { "vbios.rom", nouveau_debugfs_vbios_image, 0, NULL }, diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_display.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_display.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_display.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_display.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_display.c 2010-11-05 00:40:00.000000000 +0100 @@ -29,6 +29,9 @@ #include "nouveau_drv.h" #include "nouveau_fb.h" @@ -2254,7 +2280,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_display.c linux-2.6.36.n +} diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_dma.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_dma.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_dma.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_dma.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_dma.c 2010-11-05 00:40:00.000000000 +0100 @@ -28,6 +28,7 @@ #include "drm.h" #include "nouveau_drv.h" @@ -2331,7 +2357,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_dma.c linux-2.6.36.nouve return 0; diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_dma.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_dma.h --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_dma.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_dma.h 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_dma.h 2010-11-05 00:40:00.000000000 +0100 @@ -72,6 +72,7 @@ NvGdiRect = 0x8000000c, NvImageBlit = 0x8000000d, @@ -2342,7 +2368,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_dma.h linux-2.6.36.nouve NvEvoVRAM = 0x01000000, diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_dp.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_dp.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_dp.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_dp.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_dp.c 2010-11-05 00:40:00.000000000 +0100 @@ -317,7 +317,8 @@ return false; @@ -2379,7 +2405,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_dp.c linux-2.6.36.nouvea ret = -EBUSY; diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_drv.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_drv.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.c 2010-11-05 00:40:00.000000000 +0100 @@ -31,13 +31,14 @@ #include "nouveau_hw.h" #include "nouveau_fb.h" @@ -2507,7 +2533,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_drv.c linux-2.6.36.nouve } diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.h --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_drv.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.h 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.h 2010-11-05 00:40:00.000000000 +0100 @@ -66,10 +66,13 @@ #define NV50_VM_VRAM_NR (NV50_VM_MAX_VRAM / NV50_VM_BLOCK) @@ -3513,7 +3539,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.36.nouve #endif /* __NOUVEAU_DRV_H__ */ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_encoder.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_encoder.h --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_encoder.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_encoder.h 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_encoder.h 2010-11-05 00:40:00.000000000 +0100 @@ -55,6 +55,7 @@ int dpcd_version; int link_nr; @@ -3524,7 +3550,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_encoder.h linux-2.6.36.n }; diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_fbcon.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_fbcon.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.c 2010-11-05 00:40:00.000000000 +0100 @@ -49,6 +49,96 @@ #include "nouveau_fbcon.h" #include "nouveau_dma.h" @@ -3744,7 +3770,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_fbcon.c linux-2.6.36.nou diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_fbcon.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.h --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_fbcon.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.h 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.h 2010-11-05 00:40:00.000000000 +0100 @@ -40,13 +40,13 @@ void nouveau_fbcon_restore(void); @@ -3767,7 +3793,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_fbcon.h linux-2.6.36.nou void nouveau_fbcon_gpu_lockup(struct fb_info *info); diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_fence.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_fence.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_fence.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_fence.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_fence.c 2010-11-05 00:40:00.000000000 +0100 @@ -28,9 +28,11 @@ #include "drm.h" @@ -4265,7 +4291,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_fence.c linux-2.6.36.nou +} diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_gem.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_gem.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_gem.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_gem.c 2010-11-05 00:40:00.000000000 +0100 @@ -48,9 +48,6 @@ return; nvbo->gem = NULL; @@ -4616,7 +4642,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.36.nouve int diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_grctx.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_grctx.h --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_grctx.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_grctx.h 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_grctx.h 2010-11-05 00:40:00.000000000 +0100 @@ -126,7 +126,7 @@ reg = (reg - 0x00400000) / 4; reg = (reg - ctx->ctxprog_reg) + ctx->ctxvals_base; @@ -4628,7 +4654,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_grctx.h linux-2.6.36.nou diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_hw.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_hw.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.c 2010-11-05 00:40:00.000000000 +0100 @@ -305,7 +305,7 @@ bool mpll = Preg == 0x4020; uint32_t oldPval = nvReadMC(dev, Preg); @@ -4780,7 +4806,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_hw.c linux-2.6.36.nouvea diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_hw.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.h --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_hw.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.h 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.h 2010-11-05 00:40:00.000000000 +0100 @@ -416,6 +416,25 @@ } @@ -4809,7 +4835,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_hw.h linux-2.6.36.nouvea struct drm_nouveau_private *dev_priv = dev->dev_private; diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_i2c.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_i2c.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_i2c.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_i2c.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_i2c.c 2010-11-05 00:40:00.000000000 +0100 @@ -299,7 +299,10 @@ int @@ -4834,7 +4860,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_i2c.c linux-2.6.36.nouve } diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_i2c.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_i2c.h --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_i2c.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_i2c.h 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_i2c.h 2010-11-05 00:40:00.000000000 +0100 @@ -44,7 +44,10 @@ struct nouveau_i2c_chan *nouveau_i2c_find(struct drm_device *, int index); bool nouveau_probe_i2c_addr(struct nouveau_i2c_chan *i2c, int addr); @@ -4849,7 +4875,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_i2c.h linux-2.6.36.nouve diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_irq.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_irq.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_irq.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_irq.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_irq.c 2010-11-05 00:40:00.000000000 +0100 @@ -35,12 +35,20 @@ #include "nouveau_drm.h" #include "nouveau_drv.h" @@ -5391,7 +5417,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_irq.c linux-2.6.36.nouve +} diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_mem.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_mem.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_mem.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_mem.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_mem.c 2010-11-05 00:40:00.000000000 +0100 @@ -33,92 +33,113 @@ #include "drmP.h" #include "drm.h" @@ -5812,12 +5838,12 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_mem.c linux-2.6.36.nouve - if (ret) { - NV_ERROR(dev, "Error setting DMA mask: %d\n", ret); + if (ret) -+ return ret; + return ret; +- } + + ret = nouveau_mem_detect(dev); + if (ret) - return ret; -- } ++ return ret; + + dev_priv->fb_phys = pci_resource_start(dev->pdev, 1); @@ -5876,7 +5902,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_mem.c linux-2.6.36.nouve ret = nouveau_mem_init_agp(dev); if (ret) NV_ERROR(dev, "Error initialising AGP: %d\n", ret); -@@ -523,11 +667,150 @@ +@@ -523,11 +667,157 @@ return ret; } @@ -5890,6 +5916,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_mem.c linux-2.6.36.nouve +void +nouveau_mem_timing_init(struct drm_device *dev) +{ ++ /* cards < NVC0 only */ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_pm_engine *pm = &dev_priv->engine.pm; + struct nouveau_pm_memtimings *memtimings = &pm->memtimings; @@ -5951,19 +5978,19 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_mem.c linux-2.6.36.nouve + struct nouveau_pm_memtiming *timing = &pm->memtimings.timing[i]; + if (entry[0] == 0) + continue; - ++ + tUNK_18 = 1; + tUNK_19 = 1; + tUNK_20 = 0; + tUNK_21 = 0; -+ switch (min(recordlen, 21)) { -+ case 21: ++ switch (min(recordlen, 22)) { ++ case 22: + tUNK_21 = entry[21]; -+ case 20: ++ case 21: + tUNK_20 = entry[20]; -+ case 19: ++ case 20: + tUNK_19 = entry[19]; -+ case 18: ++ case 19: + tUNK_18 = entry[18]; + default: + tUNK_0 = entry[0]; @@ -5993,24 +6020,30 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_mem.c linux-2.6.36.nouve + timing->reg_100228 = (tUNK_12 << 16 | tUNK_11 << 8 | tUNK_10); + if(recordlen > 19) { + timing->reg_100228 += (tUNK_19 - 1) << 24; -+ } else { ++ }/* I cannot back-up this else-statement right now ++ else { + timing->reg_100228 += tUNK_12 << 24; -+ } ++ }*/ + + /* XXX: reg_10022c */ ++ timing->reg_10022c = tUNK_2 - 1; + + timing->reg_100230 = (tUNK_20 << 24 | tUNK_21 << 16 | + tUNK_13 << 8 | tUNK_13); + + /* XXX: +6? */ + timing->reg_100234 = (tRAS << 24 | (tUNK_19 + 6) << 8 | tRC); -+ if(tUNK_10 > tUNK_11) { -+ timing->reg_100234 += tUNK_10 << 16; -+ } else { -+ timing->reg_100234 += tUNK_11 << 16; ++ timing->reg_100234 += max(tUNK_10,tUNK_11) << 16; ++ ++ /* XXX; reg_100238, reg_10023c ++ * reg: 0x00?????? ++ * reg_10023c: ++ * 0 for pre-NV50 cards ++ * 0x????0202 for NV50+ cards (empirical evidence) */ ++ if(dev_priv->card_type >= NV_50) { ++ timing->reg_10023c = 0x202; + } + -+ /* XXX; reg_100238, reg_10023c */ + NV_DEBUG(dev, "Entry %d: 220: %08x %08x %08x %08x\n", i, + timing->reg_100220, timing->reg_100224, + timing->reg_100228, timing->reg_10022c); @@ -6028,12 +6061,12 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_mem.c linux-2.6.36.nouve +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_pm_memtimings *mem = &dev_priv->engine.pm.memtimings; -+ + + kfree(mem->timing); +} diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_notifier.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_notifier.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_notifier.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_notifier.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_notifier.c 2010-11-05 00:40:00.000000000 +0100 @@ -28,6 +28,7 @@ #include "drmP.h" #include "drm.h" @@ -6085,7 +6118,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_notifier.c linux-2.6.36. } diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_object.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_object.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_object.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_object.c 2010-11-05 00:40:00.000000000 +0100 @@ -34,6 +34,84 @@ #include "drm.h" #include "nouveau_drv.h" @@ -6378,7 +6411,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.36.no + if (ramin == NULL) { + spin_unlock(&dev_priv->ramin_lock); + nouveau_gpuobj_ref(NULL, &gpuobj); -+ return ret; ++ return -ENOMEM; + } - if (!gpuobj->im_pramin) { @@ -6575,8 +6608,8 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.36.no - *pgpuobj = NULL; kfree(gpuobj); - return 0; - } - +-} +- -static int -nouveau_gpuobj_instance_get(struct drm_device *dev, - struct nouveau_channel *chan, @@ -6724,8 +6757,8 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.36.no - } - - return 0; --} -- + } + -int -nouveau_gpuobj_ref_find(struct nouveau_channel *chan, uint32_t handle, - struct nouveau_gpuobj_ref **ref_ret) @@ -7429,7 +7462,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.36.no } diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_perf.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_perf.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_perf.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_perf.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_perf.c 2010-11-05 00:40:00.000000000 +0100 @@ -0,0 +1,205 @@ +/* + * Copyright 2010 Red Hat Inc. @@ -7638,7 +7671,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_perf.c linux-2.6.36.nouv +} diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_pm.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_pm.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_pm.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_pm.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_pm.c 2010-11-05 00:40:00.000000000 +0100 @@ -0,0 +1,553 @@ +/* + * Copyright 2010 Red Hat Inc. @@ -8195,7 +8228,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_pm.c linux-2.6.36.nouvea +} diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_pm.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_pm.h --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_pm.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_pm.h 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_pm.h 2010-11-05 00:40:00.000000000 +0100 @@ -0,0 +1,74 @@ +/* + * Copyright 2010 Red Hat Inc. @@ -8273,7 +8306,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_pm.h linux-2.6.36.nouvea +#endif diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_ramht.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_ramht.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.c 2010-11-05 00:40:00.000000000 +0100 @@ -0,0 +1,307 @@ +/* + * Copyright 2010 Red Hat Inc. @@ -8584,7 +8617,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_ramht.c linux-2.6.36.nou +} diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_ramht.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.h --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_ramht.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.h 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.h 2010-11-05 00:40:00.000000000 +0100 @@ -0,0 +1,55 @@ +/* + * Copyright 2010 Red Hat Inc. @@ -8643,7 +8676,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_ramht.h linux-2.6.36.nou +#endif diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_reg.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_reg.h --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_reg.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_reg.h 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_reg.h 2010-11-05 00:40:00.000000000 +0100 @@ -45,6 +45,11 @@ # define NV04_PFB_REF_CMD_REFRESH (1 << 0) #define NV04_PFB_PRE 0x001002d4 @@ -8776,7 +8809,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_reg.h linux-2.6.36.nouve #define NV50_PDISPLAY_CRTC_CLK_CTRL1(i) ((i) * 0x800 + 0x614100) diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_sgdma.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_sgdma.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_sgdma.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_sgdma.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_sgdma.c 2010-11-05 00:40:00.000000000 +0100 @@ -95,9 +95,9 @@ struct nouveau_gpuobj *gpuobj = dev_priv->gart_info.sg_ctxdma; unsigned i, j, pte; @@ -8854,11 +8887,11 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_sgdma.c linux-2.6.36.nou if (dev_priv->card_type < NV_50) { - aper_size = (64 * 1024 * 1024); -+ if(dev_priv->card_type < NV_40) { -+ aper_size = (64 * 1024 * 1024); -+ } else { -+ aper_size = (512 * 1024 * 1024); -+ } ++ if(dev_priv->ramin_rsvd_vram < 2 * 1024 * 1024) ++ aper_size = 64 * 1024 * 1024; ++ else ++ aper_size = 512 * 1024 * 1024; ++ obj_size = (aper_size >> NV_CTXDMA_PAGE_SHIFT) * 4; obj_size += 8; /* ctxdma header */ } else { @@ -8952,7 +8985,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_sgdma.c linux-2.6.36.nou diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_state.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_state.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_state.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_state.c 2010-11-05 00:40:00.000000000 +0100 @@ -35,6 +35,8 @@ #include "nouveau_drv.h" #include "nouveau_drm.h" @@ -9566,7 +9599,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.36.nou return false; diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_temp.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_temp.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_temp.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_temp.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_temp.c 2010-11-05 00:40:00.000000000 +0100 @@ -0,0 +1,309 @@ +/* + * Copyright 2010 PathScale inc. @@ -9879,7 +9912,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_temp.c linux-2.6.36.nouv +} diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_volt.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_volt.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_volt.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_volt.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_volt.c 2010-11-05 00:40:00.000000000 +0100 @@ -0,0 +1,212 @@ +/* + * Copyright 2010 Red Hat Inc. @@ -10095,7 +10128,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_volt.c linux-2.6.36.nouv +} diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_crtc.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_crtc.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv04_crtc.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_crtc.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_crtc.c 2010-11-05 00:40:00.000000000 +0100 @@ -109,7 +109,7 @@ struct nouveau_pll_vals *pv = ®p->pllvals; struct pll_lims pll_lim; @@ -10188,7 +10221,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_crtc.c linux-2.6.36.nouveau diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_dac.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_dac.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv04_dac.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_dac.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_dac.c 2010-11-05 00:40:00.000000000 +0100 @@ -291,6 +291,8 @@ msleep(5); @@ -10223,7 +10256,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_dac.c linux-2.6.36.nouveau/ struct drm_display_mode *adjusted_mode) diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_dfp.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_dfp.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv04_dfp.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_dfp.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_dfp.c 2010-11-05 00:40:00.000000000 +0100 @@ -104,6 +104,8 @@ } /* don't inadvertently turn it on when state written later */ @@ -10307,7 +10340,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_dfp.c linux-2.6.36.nouveau/ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_fbcon.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_fbcon.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv04_fbcon.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_fbcon.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_fbcon.c 2010-11-05 00:40:00.000000000 +0100 @@ -25,54 +25,42 @@ #include "drmP.h" #include "nouveau_drv.h" @@ -10457,7 +10490,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_fbcon.c linux-2.6.36.nouvea int diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_fifo.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_fifo.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv04_fifo.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_fifo.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_fifo.c 2010-11-05 00:40:00.000000000 +0100 @@ -27,8 +27,9 @@ #include "drmP.h" #include "drm.h" @@ -10625,7 +10658,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_fifo.c linux-2.6.36.nouveau } diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_graph.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv04_graph.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_graph.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_graph.c 2010-11-05 00:40:00.000000000 +0100 @@ -26,6 +26,9 @@ #include "drm.h" #include "nouveau_drm.h" @@ -11389,7 +11422,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.36.nouvea - diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_instmem.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_instmem.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv04_instmem.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_instmem.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_instmem.c 2010-11-05 00:40:00.000000000 +0100 @@ -1,6 +1,7 @@ #include "drmP.h" #include "drm.h" @@ -11588,7 +11621,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_instmem.c linux-2.6.36.nouv diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_pm.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_pm.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv04_pm.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_pm.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_pm.c 2010-11-05 00:40:00.000000000 +0100 @@ -0,0 +1,90 @@ +/* + * Copyright 2010 Red Hat Inc. @@ -11682,7 +11715,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_pm.c linux-2.6.36.nouveau/d + diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_tv.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_tv.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv04_tv.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_tv.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_tv.c 2010-11-05 00:40:00.000000000 +0100 @@ -49,8 +49,8 @@ int nv04_tv_identify(struct drm_device *dev, int i2c_index) @@ -11711,7 +11744,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_tv.c linux-2.6.36.nouveau/d state->CRTC[NV_CIO_CRE_LCD__INDEX]); diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv10_fb.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv10_fb.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv10_fb.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv10_fb.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv10_fb.c 2010-11-05 00:40:00.000000000 +0100 @@ -3,23 +3,109 @@ #include "nouveau_drv.h" #include "nouveau_drm.h" @@ -11865,7 +11898,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv10_fb.c linux-2.6.36.nouveau/d } diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv10_fifo.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv10_fifo.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv10_fifo.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv10_fifo.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv10_fifo.c 2010-11-05 00:40:00.000000000 +0100 @@ -27,8 +27,9 @@ #include "drmP.h" #include "drm.h" @@ -11944,7 +11977,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv10_fifo.c linux-2.6.36.nouveau } diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv10_graph.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv10_graph.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv10_graph.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv10_graph.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv10_graph.c 2010-11-05 00:40:00.000000000 +0100 @@ -27,6 +27,8 @@ #include "nouveau_drm.h" #include "nouveau_drv.h" @@ -12155,7 +12188,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv10_graph.c linux-2.6.36.nouvea +} diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv17_tv.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv17_tv.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv17_tv.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv17_tv.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv17_tv.c 2010-11-05 00:40:00.000000000 +0100 @@ -193,55 +193,56 @@ } } @@ -12318,7 +12351,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv17_tv.c linux-2.6.36.nouveau/d dacclk = (NVReadRAMDAC(dev, 0, dacclk_off) & ~0x30) | 0x1; diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv17_tv.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv17_tv.h --- linux-2.6.36/drivers/gpu/drm/nouveau/nv17_tv.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv17_tv.h 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv17_tv.h 2010-11-05 00:40:00.000000000 +0100 @@ -127,7 +127,8 @@ /* TV hardware access functions */ @@ -12356,7 +12389,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv17_tv.h linux-2.6.36.nouveau/d #endif diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv17_tv_modes.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv17_tv_modes.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv17_tv_modes.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv17_tv_modes.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv17_tv_modes.c 2010-11-05 00:40:00.000000000 +0100 @@ -336,12 +336,17 @@ struct filter_params *p = &fparams[k][j]; @@ -12450,7 +12483,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv17_tv_modes.c linux-2.6.36.nou regs->fp_horiz_regs[FP_VALID_END] = output_mode->hdisplay - hmargin - 1; diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv20_graph.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv20_graph.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv20_graph.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv20_graph.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv20_graph.c 2010-11-05 00:40:00.000000000 +0100 @@ -32,54 +32,57 @@ #define NV34_GRCTX_SIZE (18140) #define NV35_36_GRCTX_SIZE (22396) @@ -13386,7 +13419,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv20_graph.c linux-2.6.36.nouvea +} diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv30_fb.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv30_fb.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv30_fb.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv30_fb.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv30_fb.c 2010-11-05 00:40:00.000000000 +0100 @@ -29,6 +29,27 @@ #include "nouveau_drv.h" #include "nouveau_drm.h" @@ -13426,7 +13459,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv30_fb.c linux-2.6.36.nouveau/d if (dev_priv->chipset == 0x30 || diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv40_fb.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv40_fb.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv40_fb.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv40_fb.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv40_fb.c 2010-11-05 00:40:00.000000000 +0100 @@ -4,26 +4,22 @@ #include "nouveau_drm.h" @@ -13473,7 +13506,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv40_fb.c linux-2.6.36.nouveau/d } diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv40_fifo.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv40_fifo.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv40_fifo.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv40_fifo.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv40_fifo.c 2010-11-05 00:40:00.000000000 +0100 @@ -27,8 +27,9 @@ #include "drmP.h" #include "nouveau_drv.h" @@ -13564,7 +13597,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv40_fifo.c linux-2.6.36.nouveau } diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv40_graph.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv40_graph.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv40_graph.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv40_graph.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv40_graph.c 2010-11-05 00:40:00.000000000 +0100 @@ -29,6 +29,8 @@ #include "nouveau_drv.h" #include "nouveau_grctx.h" @@ -13800,7 +13833,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv40_graph.c linux-2.6.36.nouvea +} diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv40_grctx.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv40_grctx.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv40_grctx.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv40_grctx.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv40_grctx.c 2010-11-05 00:40:00.000000000 +0100 @@ -596,13 +596,13 @@ offset += 0x0280/4; @@ -13820,7 +13853,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv40_grctx.c linux-2.6.36.nouvea diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_calc.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_calc.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_calc.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_calc.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_calc.c 2010-11-05 00:40:00.000000000 +0100 @@ -51,24 +51,28 @@ int *N, int *fN, int *M, int *P) { @@ -13858,7 +13891,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_calc.c linux-2.6.36.nouveau /* *N = floor(fb_div); */ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_crtc.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_crtc.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_crtc.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_crtc.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_crtc.c 2010-11-05 00:40:00.000000000 +0100 @@ -104,8 +104,7 @@ OUT_RING(evo, nv_crtc->lut.depth == 8 ? NV50_EVO_CRTC_CLUT_MODE_OFF : @@ -13986,7 +14019,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_crtc.c linux-2.6.36.nouveau diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_cursor.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_cursor.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_cursor.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_cursor.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_cursor.c 2010-11-05 00:40:00.000000000 +0100 @@ -147,7 +147,7 @@ NV_DEBUG_KMS(dev, "\n"); @@ -13998,7 +14031,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_cursor.c linux-2.6.36.nouve NV_ERROR(dev, "CURSOR_CTRL2 = 0x%08x\n", diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_dac.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_dac.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_dac.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_dac.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_dac.c 2010-11-05 00:40:00.000000000 +0100 @@ -79,7 +79,7 @@ nv_wr32(dev, NV50_PDISPLAY_DAC_DPMS_CTRL(or), @@ -14019,7 +14052,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_dac.c linux-2.6.36.nouveau/ NV_ERROR(dev, "DAC_DPMS_CTRL(%d) = 0x%08x\n", or, diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_display.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_display.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_display.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_display.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_display.c 2010-11-05 00:40:00.000000000 +0100 @@ -30,154 +30,20 @@ #include "nouveau_connector.h" #include "nouveau_fb.h" @@ -14562,7 +14595,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_display.c linux-2.6.36.nouv if (intr1 & NV50_PDISPLAY_INTR_1_VBLANK_CRTC) { diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_evo.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_evo.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_evo.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_evo.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_evo.c 2010-11-05 00:40:00.000000000 +0100 @@ -0,0 +1,318 @@ +/* + * Copyright 2010 Red Hat Inc. @@ -14884,7 +14917,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_evo.c linux-2.6.36.nouveau/ +} diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_evo.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_evo.h --- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_evo.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_evo.h 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_evo.h 2010-11-05 00:40:00.000000000 +0100 @@ -24,6 +24,15 @@ * */ @@ -14908,7 +14941,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_evo.h linux-2.6.36.nouveau/ +#endif diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_fb.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_fb.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_fb.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_fb.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_fb.c 2010-11-05 00:40:00.000000000 +0100 @@ -20,6 +20,7 @@ case 0x50: nv_wr32(dev, 0x100c90, 0x0707ff); @@ -14966,7 +14999,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_fb.c linux-2.6.36.nouveau/d +} diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_fbcon.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_fbcon.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_fbcon.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_fbcon.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_fbcon.c 2010-11-05 00:40:00.000000000 +0100 @@ -1,28 +1,21 @@ #include "drmP.h" #include "nouveau_drv.h" @@ -15113,7 +15146,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_fbcon.c linux-2.6.36.nouvea diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_fifo.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_fifo.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_fifo.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_fifo.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_fifo.c 2010-11-05 00:40:00.000000000 +0100 @@ -27,13 +27,14 @@ #include "drmP.h" #include "drm.h" @@ -15582,7 +15615,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_fifo.c linux-2.6.36.nouveau +} diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_graph.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_graph.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_graph.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_graph.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_graph.c 2010-11-05 00:40:00.000000000 +0100 @@ -27,8 +27,12 @@ #include "drmP.h" #include "drm.h" @@ -15783,7 +15816,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_graph.c linux-2.6.36.nouvea { struct drm_device *dev = chan->dev; struct drm_nouveau_private *dev_priv = dev->dev_private; -@@ -369,37 +386,124 @@ +@@ -369,37 +386,129 @@ if (!chan->nvsw.vblsem || chan->nvsw.vblsem_offset == ~0 || data > 1) return -EINVAL; @@ -15813,9 +15846,30 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_graph.c linux-2.6.36.nouvea + /* XXX - Do something here */ + } + -+ return 0; -+} -+ + return 0; + } + +-static struct nouveau_pgraph_object_method nv50_graph_nvsw_methods[] = { +- { 0x018c, nv50_graph_nvsw_dma_vblsem }, +- { 0x0400, nv50_graph_nvsw_vblsem_offset }, +- { 0x0404, nv50_graph_nvsw_vblsem_release_val }, +- { 0x0408, nv50_graph_nvsw_vblsem_release }, +- {} +-}; +- +-struct nouveau_pgraph_object_class nv50_graph_grclass[] = { +- { 0x506e, true, nv50_graph_nvsw_methods }, /* nvsw */ +- { 0x0030, false, NULL }, /* null */ +- { 0x5039, false, NULL }, /* m2mf */ +- { 0x502d, false, NULL }, /* 2d */ +- { 0x50c0, false, NULL }, /* compute */ +- { 0x85c0, false, NULL }, /* compute (nva3, nva5, nva8) */ +- { 0x5097, false, NULL }, /* tesla (nv50) */ +- { 0x8297, false, NULL }, /* tesla (nv8x/nv9x) */ +- { 0x8397, false, NULL }, /* tesla (nva0, nvaa, nvac) */ +- { 0x8597, false, NULL }, /* tesla (nva3, nva5, nva8) */ +- {} +-}; +static int +nv50_graph_register(struct drm_device *dev) +{ @@ -15834,8 +15888,6 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_graph.c linux-2.6.36.nouvea + NVOBJ_CLASS(dev, 0x0030, GR); /* null */ + NVOBJ_CLASS(dev, 0x5039, GR); /* m2mf */ + NVOBJ_CLASS(dev, 0x502d, GR); /* 2d */ -+ NVOBJ_CLASS(dev, 0x50c0, GR); /* compute */ -+ NVOBJ_CLASS(dev, 0x85c0, GR); /* compute (nva3, nva5, nva8) */ + + /* tesla */ + if (dev_priv->chipset == 0x50) @@ -15861,31 +15913,17 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_graph.c linux-2.6.36.nouvea + } + } + ++ /* compute */ ++ NVOBJ_CLASS(dev, 0x50c0, GR); ++ if (dev_priv->chipset > 0xa0 && ++ dev_priv->chipset != 0xaa && ++ dev_priv->chipset != 0xac) ++ NVOBJ_CLASS(dev, 0x85c0, GR); ++ + dev_priv->engine.graph.registered = true; - return 0; - } - --static struct nouveau_pgraph_object_method nv50_graph_nvsw_methods[] = { -- { 0x018c, nv50_graph_nvsw_dma_vblsem }, -- { 0x0400, nv50_graph_nvsw_vblsem_offset }, -- { 0x0404, nv50_graph_nvsw_vblsem_release_val }, -- { 0x0408, nv50_graph_nvsw_vblsem_release }, -- {} --}; -- --struct nouveau_pgraph_object_class nv50_graph_grclass[] = { -- { 0x506e, true, nv50_graph_nvsw_methods }, /* nvsw */ -- { 0x0030, false, NULL }, /* null */ -- { 0x5039, false, NULL }, /* m2mf */ -- { 0x502d, false, NULL }, /* 2d */ -- { 0x50c0, false, NULL }, /* compute */ -- { 0x85c0, false, NULL }, /* compute (nva3, nva5, nva8) */ -- { 0x5097, false, NULL }, /* tesla (nv50) */ -- { 0x8297, false, NULL }, /* tesla (nv8x/nv9x) */ -- { 0x8397, false, NULL }, /* tesla (nva0, nvaa, nvac) */ -- { 0x8597, false, NULL }, /* tesla (nva3, nva5, nva8) */ -- {} --}; ++ return 0; ++} ++ +void +nv50_graph_tlb_flush(struct drm_device *dev) +{ @@ -15939,7 +15977,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_graph.c linux-2.6.36.nouvea +} diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_grctx.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_grctx.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_grctx.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_grctx.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_grctx.c 2010-11-05 00:40:00.000000000 +0100 @@ -103,6 +103,9 @@ #include "nouveau_drv.h" #include "nouveau_grctx.h" @@ -19751,7 +19789,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_grctx.c linux-2.6.36.nouvea } diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_instmem.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_instmem.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_instmem.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_instmem.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_instmem.c 2010-11-05 00:40:00.000000000 +0100 @@ -32,39 +32,87 @@ struct nv50_instmem_priv { uint32_t save1700[5]; /* 0x1700->0x1710 */ @@ -20379,7 +20417,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_instmem.c linux-2.6.36.nouv diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_pm.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_pm.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_pm.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_pm.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_pm.c 2010-11-05 00:40:00.000000000 +0100 @@ -0,0 +1,131 @@ +/* + * Copyright 2010 Red Hat Inc. @@ -20514,7 +20552,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_pm.c linux-2.6.36.nouveau/d + diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_sor.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_sor.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_sor.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_sor.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_sor.c 2010-11-05 00:40:00.000000000 +0100 @@ -92,7 +92,7 @@ } @@ -20535,7 +20573,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_sor.c linux-2.6.36.nouveau/ NV_ERROR(dev, "SOR_DPMS_STATE(%d) = 0x%08x\n", or, diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv84_crypt.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv84_crypt.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nv84_crypt.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv84_crypt.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv84_crypt.c 2010-11-05 00:40:00.000000000 +0100 @@ -0,0 +1,110 @@ +/* + * Copyright 2010 Red Hat Inc. @@ -20649,7 +20687,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv84_crypt.c linux-2.6.36.nouvea +} diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nva3_pm.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nva3_pm.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nva3_pm.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nva3_pm.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nva3_pm.c 2010-11-05 00:40:00.000000000 +0100 @@ -0,0 +1,95 @@ +/* + * Copyright 2010 Red Hat Inc. @@ -20748,7 +20786,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nva3_pm.c linux-2.6.36.nouveau/d + diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nvc0_fifo.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nvc0_fifo.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nvc0_fifo.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nvc0_fifo.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nvc0_fifo.c 2010-11-05 00:40:00.000000000 +0100 @@ -43,12 +43,6 @@ } @@ -20764,7 +20802,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nvc0_fifo.c linux-2.6.36.nouveau return false; diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nvc0_instmem.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nvc0_instmem.c --- linux-2.6.36/drivers/gpu/drm/nouveau/nvc0_instmem.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nvc0_instmem.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nvc0_instmem.c 2010-11-05 00:40:00.000000000 +0100 @@ -28,7 +28,7 @@ int @@ -20831,7 +20869,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nvc0_instmem.c linux-2.6.36.nouv diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nvreg.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nvreg.h --- linux-2.6.36/drivers/gpu/drm/nouveau/nvreg.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nvreg.h 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nvreg.h 2010-11-05 00:40:00.000000000 +0100 @@ -153,7 +153,8 @@ #define NV_PCRTC_START 0x00600800 #define NV_PCRTC_CONFIG 0x00600804 @@ -20852,7 +20890,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nvreg.h linux-2.6.36.nouveau/dri # define NV_CIO_CRE_ILACE__INDEX 0x39 /* interlace */ diff -Naur linux-2.6.36/drivers/gpu/drm/radeon/radeon_object.c linux-2.6.36.nouveau/drivers/gpu/drm/radeon/radeon_object.c --- linux-2.6.36/drivers/gpu/drm/radeon/radeon_object.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/radeon/radeon_object.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/radeon/radeon_object.c 2010-11-05 00:40:00.000000000 +0100 @@ -435,7 +435,7 @@ out: @@ -20882,7 +20920,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/radeon/radeon_object.c linux-2.6.36.nouv return -EINVAL; diff -Naur linux-2.6.36/drivers/gpu/drm/radeon/radeon_ttm.c linux-2.6.36.nouveau/drivers/gpu/drm/radeon/radeon_ttm.c --- linux-2.6.36/drivers/gpu/drm/radeon/radeon_ttm.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/radeon/radeon_ttm.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/radeon/radeon_ttm.c 2010-11-05 00:40:00.000000000 +0100 @@ -152,6 +152,7 @@ man->default_caching = TTM_PL_FLAG_CACHED; break; @@ -20982,7 +21020,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/radeon/radeon_ttm.c linux-2.6.36.nouveau /* Add ttm page pool to debugfs */ diff -Naur linux-2.6.36/drivers/gpu/drm/ttm/Makefile linux-2.6.36.nouveau/drivers/gpu/drm/ttm/Makefile --- linux-2.6.36/drivers/gpu/drm/ttm/Makefile 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/ttm/Makefile 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/ttm/Makefile 2010-11-05 00:40:00.000000000 +0100 @@ -4,6 +4,7 @@ ccflags-y := -Iinclude/drm ttm-y := ttm_agp_backend.o ttm_memory.o ttm_tt.o ttm_bo.o \ @@ -20994,7 +21032,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/ttm/Makefile linux-2.6.36.nouveau/driver obj-$(CONFIG_DRM_TTM) += ttm.o diff -Naur linux-2.6.36/drivers/gpu/drm/ttm/ttm_agp_backend.c linux-2.6.36.nouveau/drivers/gpu/drm/ttm/ttm_agp_backend.c --- linux-2.6.36/drivers/gpu/drm/ttm/ttm_agp_backend.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/ttm/ttm_agp_backend.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/ttm/ttm_agp_backend.c 2010-11-05 00:40:00.000000000 +0100 @@ -74,6 +74,7 @@ { struct ttm_agp_backend *agp_be = @@ -21014,7 +21052,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/ttm/ttm_agp_backend.c linux-2.6.36.nouve diff -Naur linux-2.6.36/drivers/gpu/drm/ttm/ttm_bo.c linux-2.6.36.nouveau/drivers/gpu/drm/ttm/ttm_bo.c --- linux-2.6.36/drivers/gpu/drm/ttm/ttm_bo.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/ttm/ttm_bo.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/ttm/ttm_bo.c 2010-11-05 00:40:00.000000000 +0100 @@ -84,11 +84,8 @@ man->available_caching); printk(KERN_ERR TTM_PFX " default_caching: 0x%08X\n", @@ -21271,7 +21309,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/ttm/ttm_bo.c linux-2.6.36.nouveau/driver } diff -Naur linux-2.6.36/drivers/gpu/drm/ttm/ttm_bo_manager.c linux-2.6.36.nouveau/drivers/gpu/drm/ttm/ttm_bo_manager.c --- linux-2.6.36/drivers/gpu/drm/ttm/ttm_bo_manager.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/ttm/ttm_bo_manager.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/ttm/ttm_bo_manager.c 2010-11-05 00:40:00.000000000 +0100 @@ -0,0 +1,148 @@ +/************************************************************************** + * @@ -21423,7 +21461,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/ttm/ttm_bo_manager.c linux-2.6.36.nouvea +EXPORT_SYMBOL(ttm_bo_manager_func); diff -Naur linux-2.6.36/drivers/gpu/drm/ttm/ttm_bo_util.c linux-2.6.36.nouveau/drivers/gpu/drm/ttm/ttm_bo_util.c --- linux-2.6.36/drivers/gpu/drm/ttm/ttm_bo_util.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/ttm/ttm_bo_util.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/ttm/ttm_bo_util.c 2010-11-05 00:40:00.000000000 +0100 @@ -39,14 +39,7 @@ void ttm_bo_free_old_node(struct ttm_buffer_object *bo) @@ -21452,7 +21490,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/ttm/ttm_bo_util.c linux-2.6.36.nouveau/d } diff -Naur linux-2.6.36/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c linux-2.6.36.nouveau/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c --- linux-2.6.36/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c 2010-11-05 00:40:00.000000000 +0100 @@ -147,6 +147,7 @@ break; case TTM_PL_VRAM: @@ -21472,7 +21510,7 @@ diff -Naur linux-2.6.36/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c linux-2.6.36.nouv break; diff -Naur linux-2.6.36/include/drm/nouveau_drm.h linux-2.6.36.nouveau/include/drm/nouveau_drm.h --- linux-2.6.36/include/drm/nouveau_drm.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/include/drm/nouveau_drm.h 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/include/drm/nouveau_drm.h 2010-11-05 00:40:00.000000000 +0100 @@ -80,6 +80,8 @@ #define NOUVEAU_GETPARAM_VM_VRAM_BASE 12 #define NOUVEAU_GETPARAM_GRAPH_UNITS 13 @@ -21505,7 +21543,7 @@ diff -Naur linux-2.6.36/include/drm/nouveau_drm.h linux-2.6.36.nouveau/include/d uint32_t handle; diff -Naur linux-2.6.36/include/drm/ttm/ttm_bo_api.h linux-2.6.36.nouveau/include/drm/ttm/ttm_bo_api.h --- linux-2.6.36/include/drm/ttm/ttm_bo_api.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/include/drm/ttm/ttm_bo_api.h 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/include/drm/ttm/ttm_bo_api.h 2010-11-05 00:40:00.000000000 +0100 @@ -102,7 +102,8 @@ */ @@ -21518,7 +21556,7 @@ diff -Naur linux-2.6.36/include/drm/ttm/ttm_bo_api.h linux-2.6.36.nouveau/includ uint32_t page_alignment; diff -Naur linux-2.6.36/include/drm/ttm/ttm_bo_driver.h linux-2.6.36.nouveau/include/drm/ttm/ttm_bo_driver.h --- linux-2.6.36/include/drm/ttm/ttm_bo_driver.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/include/drm/ttm/ttm_bo_driver.h 2010-10-30 22:24:25.000000000 +0200 ++++ linux-2.6.36.nouveau/include/drm/ttm/ttm_bo_driver.h 2010-11-05 00:40:00.000000000 +0100 @@ -203,7 +203,22 @@ * It's set up by the ttm_bo_driver::init_mem_type method. */ diff --git a/packages/linux/patches/111-linux-2.6.36-drm_nouveau_revert_nv40_pcie_gart_size-0.1.diff b/packages/linux/patches/111-linux-2.6.36-drm_nouveau_revert_nv40_pcie_gart_size-0.1.diff deleted file mode 100644 index 5eea0b7b1b..0000000000 --- a/packages/linux/patches/111-linux-2.6.36-drm_nouveau_revert_nv40_pcie_gart_size-0.1.diff +++ /dev/null @@ -1,16 +0,0 @@ -diff -Naur linux-2.6.36.orig/drivers/gpu/drm/nouveau/nouveau_sgdma.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_sgdma.c ---- linux-2.6.36.orig/drivers/gpu/drm/nouveau/nouveau_sgdma.c 2010-10-23 16:00:10.512365461 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_sgdma.c 2010-10-23 15:57:19.079304241 +0200 -@@ -224,11 +224,7 @@ - int i, ret; - - if (dev_priv->card_type < NV_50) { -- if(dev_priv->card_type < NV_40) { -- aper_size = (64 * 1024 * 1024); -- } else { -- aper_size = (512 * 1024 * 1024); -- } -+ aper_size = (64 * 1024 * 1024); - obj_size = (aper_size >> NV_CTXDMA_PAGE_SHIFT) * 4; - obj_size += 8; /* ctxdma header */ - } else { diff --git a/packages/linux/patches/112-linux-2.6.36-drm_noveau_dont_select_ACPI_VIDEO-0.1.diff b/packages/linux/patches/112-linux-2.6.36-drm_noveau_dont_select_ACPI_VIDEO-0.1.diff deleted file mode 100644 index 9838c136d4..0000000000 --- a/packages/linux/patches/112-linux-2.6.36-drm_noveau_dont_select_ACPI_VIDEO-0.1.diff +++ /dev/null @@ -1,11 +0,0 @@ -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/Kconfig linux-2.6.36.patch/drivers/gpu/drm/nouveau/Kconfig ---- linux-2.6.36/drivers/gpu/drm/nouveau/Kconfig 2010-10-24 04:19:00.872718004 +0200 -+++ linux-2.6.36.patch/drivers/gpu/drm/nouveau/Kconfig 2010-10-24 04:19:42.287230715 +0200 -@@ -10,7 +10,6 @@ - select FB - select FRAMEBUFFER_CONSOLE if !EMBEDDED - select FB_BACKLIGHT if DRM_NOUVEAU_BACKLIGHT -- select ACPI_VIDEO if ACPI - help - Choose this option for open-source nVidia support. - From b45280ad23450d7b3499164cafd22bf96c21906b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 5 Nov 2010 02:43:38 +0100 Subject: [PATCH 048/850] projects/*/linux: optimize kernel config Signed-off-by: Stephan Raue --- projects/ATV/linux/linux.i386.conf | 8 ++++---- projects/ION/linux/linux.i386.conf | 17 +++++++++-------- projects/ION/linux/linux.x86_64.conf | 17 +++++++++-------- projects/generic/linux/linux.i386.conf | 17 +++++++++-------- projects/intel/linux/linux.i386.conf | 17 +++++++++-------- projects/intel/linux/linux.x86_64.conf | 17 +++++++++-------- 6 files changed, 49 insertions(+), 44 deletions(-) diff --git a/projects/ATV/linux/linux.i386.conf b/projects/ATV/linux/linux.i386.conf index a2d5b2eb7d..07f7592b6e 100644 --- a/projects/ATV/linux/linux.i386.conf +++ b/projects/ATV/linux/linux.i386.conf @@ -117,7 +117,7 @@ CONFIG_INITRAMFS_ROOT_GID=0 # CONFIG_RD_LZMA is not set # CONFIG_RD_LZO is not set CONFIG_INITRAMFS_COMPRESSION_NONE=y -# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y CONFIG_SYSCTL=y CONFIG_ANON_INODES=y CONFIG_EMBEDDED=y @@ -146,11 +146,10 @@ CONFIG_PERF_EVENTS=y # CONFIG_PERF_COUNTERS is not set # CONFIG_VM_EVENT_COUNTERS is not set CONFIG_PCI_QUIRKS=y -# CONFIG_SLUB_DEBUG is not set # CONFIG_COMPAT_BRK is not set # CONFIG_SLAB is not set -CONFIG_SLUB=y -# CONFIG_SLOB is not set +# CONFIG_SLUB is not set +CONFIG_SLOB=y # CONFIG_PROFILING is not set CONFIG_HAVE_OPROFILE=y # CONFIG_KPROBES is not set @@ -389,6 +388,7 @@ CONFIG_ACPI_SYSFS_POWER=y # CONFIG_ACPI_AC is not set # CONFIG_ACPI_BATTERY is not set # CONFIG_ACPI_BUTTON is not set +CONFIG_ACPI_VIDEO=m CONFIG_ACPI_FAN=y # CONFIG_ACPI_DOCK is not set CONFIG_ACPI_PROCESSOR=y diff --git a/projects/ION/linux/linux.i386.conf b/projects/ION/linux/linux.i386.conf index f732d8e8f5..544d50eac2 100644 --- a/projects/ION/linux/linux.i386.conf +++ b/projects/ION/linux/linux.i386.conf @@ -90,6 +90,7 @@ CONFIG_BSD_PROCESS_ACCT=y # RCU Subsystem # CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set # CONFIG_RCU_TRACE is not set CONFIG_RCU_FANOUT=32 # CONFIG_RCU_FANOUT_EXACT is not set @@ -206,27 +207,27 @@ CONFIG_DEFAULT_IOSCHED="cfq" # CONFIG_INLINE_SPIN_LOCK_BH is not set # CONFIG_INLINE_SPIN_LOCK_IRQ is not set # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set -CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK is not set # CONFIG_INLINE_SPIN_UNLOCK_BH is not set -CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_READ_TRYLOCK is not set # CONFIG_INLINE_READ_LOCK is not set # CONFIG_INLINE_READ_LOCK_BH is not set # CONFIG_INLINE_READ_LOCK_IRQ is not set # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set -CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK is not set # CONFIG_INLINE_READ_UNLOCK_BH is not set -CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQ is not set # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_WRITE_TRYLOCK is not set # CONFIG_INLINE_WRITE_LOCK is not set # CONFIG_INLINE_WRITE_LOCK_BH is not set # CONFIG_INLINE_WRITE_LOCK_IRQ is not set # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set -CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK is not set # CONFIG_INLINE_WRITE_UNLOCK_BH is not set -CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set CONFIG_MUTEX_SPIN_ON_OWNER=y CONFIG_FREEZER=y @@ -303,8 +304,8 @@ CONFIG_NR_CPUS=4 CONFIG_SCHED_SMT=y CONFIG_SCHED_MC=y # CONFIG_PREEMPT_NONE is not set -CONFIG_PREEMPT_VOLUNTARY=y -# CONFIG_PREEMPT is not set +# CONFIG_PREEMPT_VOLUNTARY is not set +CONFIG_PREEMPT=y CONFIG_X86_LOCAL_APIC=y CONFIG_X86_IO_APIC=y # CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set diff --git a/projects/ION/linux/linux.x86_64.conf b/projects/ION/linux/linux.x86_64.conf index 53981e8fd8..dd6037d67d 100644 --- a/projects/ION/linux/linux.x86_64.conf +++ b/projects/ION/linux/linux.x86_64.conf @@ -90,6 +90,7 @@ CONFIG_BSD_PROCESS_ACCT=y # RCU Subsystem # CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set # CONFIG_RCU_TRACE is not set CONFIG_RCU_FANOUT=32 # CONFIG_RCU_FANOUT_EXACT is not set @@ -204,27 +205,27 @@ CONFIG_DEFAULT_IOSCHED="cfq" # CONFIG_INLINE_SPIN_LOCK_BH is not set # CONFIG_INLINE_SPIN_LOCK_IRQ is not set # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set -CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK is not set # CONFIG_INLINE_SPIN_UNLOCK_BH is not set -CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_READ_TRYLOCK is not set # CONFIG_INLINE_READ_LOCK is not set # CONFIG_INLINE_READ_LOCK_BH is not set # CONFIG_INLINE_READ_LOCK_IRQ is not set # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set -CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK is not set # CONFIG_INLINE_READ_UNLOCK_BH is not set -CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQ is not set # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_WRITE_TRYLOCK is not set # CONFIG_INLINE_WRITE_LOCK is not set # CONFIG_INLINE_WRITE_LOCK_BH is not set # CONFIG_INLINE_WRITE_LOCK_IRQ is not set # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set -CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK is not set # CONFIG_INLINE_WRITE_UNLOCK_BH is not set -CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set CONFIG_MUTEX_SPIN_ON_OWNER=y CONFIG_FREEZER=y @@ -277,8 +278,8 @@ CONFIG_NR_CPUS=4 CONFIG_SCHED_SMT=y CONFIG_SCHED_MC=y # CONFIG_PREEMPT_NONE is not set -CONFIG_PREEMPT_VOLUNTARY=y -# CONFIG_PREEMPT is not set +# CONFIG_PREEMPT_VOLUNTARY is not set +CONFIG_PREEMPT=y CONFIG_X86_LOCAL_APIC=y CONFIG_X86_IO_APIC=y # CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set diff --git a/projects/generic/linux/linux.i386.conf b/projects/generic/linux/linux.i386.conf index 89ea845e9a..287aec22b9 100644 --- a/projects/generic/linux/linux.i386.conf +++ b/projects/generic/linux/linux.i386.conf @@ -90,6 +90,7 @@ CONFIG_BSD_PROCESS_ACCT=y # RCU Subsystem # CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set # CONFIG_RCU_TRACE is not set CONFIG_RCU_FANOUT=32 # CONFIG_RCU_FANOUT_EXACT is not set @@ -206,27 +207,27 @@ CONFIG_DEFAULT_IOSCHED="cfq" # CONFIG_INLINE_SPIN_LOCK_BH is not set # CONFIG_INLINE_SPIN_LOCK_IRQ is not set # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set -CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK is not set # CONFIG_INLINE_SPIN_UNLOCK_BH is not set -CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_READ_TRYLOCK is not set # CONFIG_INLINE_READ_LOCK is not set # CONFIG_INLINE_READ_LOCK_BH is not set # CONFIG_INLINE_READ_LOCK_IRQ is not set # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set -CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK is not set # CONFIG_INLINE_READ_UNLOCK_BH is not set -CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQ is not set # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_WRITE_TRYLOCK is not set # CONFIG_INLINE_WRITE_LOCK is not set # CONFIG_INLINE_WRITE_LOCK_BH is not set # CONFIG_INLINE_WRITE_LOCK_IRQ is not set # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set -CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK is not set # CONFIG_INLINE_WRITE_UNLOCK_BH is not set -CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set CONFIG_MUTEX_SPIN_ON_OWNER=y CONFIG_FREEZER=y @@ -304,8 +305,8 @@ CONFIG_NR_CPUS=8 CONFIG_SCHED_SMT=y CONFIG_SCHED_MC=y # CONFIG_PREEMPT_NONE is not set -CONFIG_PREEMPT_VOLUNTARY=y -# CONFIG_PREEMPT is not set +# CONFIG_PREEMPT_VOLUNTARY is not set +CONFIG_PREEMPT=y CONFIG_X86_LOCAL_APIC=y CONFIG_X86_IO_APIC=y # CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set diff --git a/projects/intel/linux/linux.i386.conf b/projects/intel/linux/linux.i386.conf index 200b2aae2e..1b7ce4c83d 100644 --- a/projects/intel/linux/linux.i386.conf +++ b/projects/intel/linux/linux.i386.conf @@ -90,6 +90,7 @@ CONFIG_BSD_PROCESS_ACCT=y # RCU Subsystem # CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set # CONFIG_RCU_TRACE is not set CONFIG_RCU_FANOUT=32 # CONFIG_RCU_FANOUT_EXACT is not set @@ -206,27 +207,27 @@ CONFIG_DEFAULT_IOSCHED="cfq" # CONFIG_INLINE_SPIN_LOCK_BH is not set # CONFIG_INLINE_SPIN_LOCK_IRQ is not set # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set -CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK is not set # CONFIG_INLINE_SPIN_UNLOCK_BH is not set -CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_READ_TRYLOCK is not set # CONFIG_INLINE_READ_LOCK is not set # CONFIG_INLINE_READ_LOCK_BH is not set # CONFIG_INLINE_READ_LOCK_IRQ is not set # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set -CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK is not set # CONFIG_INLINE_READ_UNLOCK_BH is not set -CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQ is not set # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_WRITE_TRYLOCK is not set # CONFIG_INLINE_WRITE_LOCK is not set # CONFIG_INLINE_WRITE_LOCK_BH is not set # CONFIG_INLINE_WRITE_LOCK_IRQ is not set # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set -CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK is not set # CONFIG_INLINE_WRITE_UNLOCK_BH is not set -CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set CONFIG_MUTEX_SPIN_ON_OWNER=y CONFIG_FREEZER=y @@ -304,8 +305,8 @@ CONFIG_NR_CPUS=8 CONFIG_SCHED_SMT=y CONFIG_SCHED_MC=y # CONFIG_PREEMPT_NONE is not set -CONFIG_PREEMPT_VOLUNTARY=y -# CONFIG_PREEMPT is not set +# CONFIG_PREEMPT_VOLUNTARY is not set +CONFIG_PREEMPT=y CONFIG_X86_LOCAL_APIC=y CONFIG_X86_IO_APIC=y # CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set diff --git a/projects/intel/linux/linux.x86_64.conf b/projects/intel/linux/linux.x86_64.conf index e5f8cfc4c2..c01efd99ae 100644 --- a/projects/intel/linux/linux.x86_64.conf +++ b/projects/intel/linux/linux.x86_64.conf @@ -90,6 +90,7 @@ CONFIG_BSD_PROCESS_ACCT=y # RCU Subsystem # CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set # CONFIG_RCU_TRACE is not set CONFIG_RCU_FANOUT=32 # CONFIG_RCU_FANOUT_EXACT is not set @@ -204,27 +205,27 @@ CONFIG_DEFAULT_IOSCHED="cfq" # CONFIG_INLINE_SPIN_LOCK_BH is not set # CONFIG_INLINE_SPIN_LOCK_IRQ is not set # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set -CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK is not set # CONFIG_INLINE_SPIN_UNLOCK_BH is not set -CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_READ_TRYLOCK is not set # CONFIG_INLINE_READ_LOCK is not set # CONFIG_INLINE_READ_LOCK_BH is not set # CONFIG_INLINE_READ_LOCK_IRQ is not set # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set -CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK is not set # CONFIG_INLINE_READ_UNLOCK_BH is not set -CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQ is not set # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_WRITE_TRYLOCK is not set # CONFIG_INLINE_WRITE_LOCK is not set # CONFIG_INLINE_WRITE_LOCK_BH is not set # CONFIG_INLINE_WRITE_LOCK_IRQ is not set # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set -CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK is not set # CONFIG_INLINE_WRITE_UNLOCK_BH is not set -CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set CONFIG_MUTEX_SPIN_ON_OWNER=y CONFIG_FREEZER=y @@ -279,8 +280,8 @@ CONFIG_NR_CPUS=8 CONFIG_SCHED_SMT=y CONFIG_SCHED_MC=y # CONFIG_PREEMPT_NONE is not set -CONFIG_PREEMPT_VOLUNTARY=y -# CONFIG_PREEMPT is not set +# CONFIG_PREEMPT_VOLUNTARY is not set +CONFIG_PREEMPT=y CONFIG_X86_LOCAL_APIC=y CONFIG_X86_IO_APIC=y # CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set From 97a0f45fe1bf999f7f512a948ad3d5a930d26314 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 5 Nov 2010 02:44:01 +0100 Subject: [PATCH 049/850] libdrm-master: update to libdrm-master-20101104 Signed-off-by: Stephan Raue --- packages/graphics/libdrm-master/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/graphics/libdrm-master/url b/packages/graphics/libdrm-master/url index 707f08cc6f..4c0b407e97 100644 --- a/packages/graphics/libdrm-master/url +++ b/packages/graphics/libdrm-master/url @@ -1 +1 @@ -http://sources.openelec.tv/svn/libdrm-master-20101030.1.tar.bz2 \ No newline at end of file +http://sources.openelec.tv/svn/libdrm-master-20101104.tar.bz2 \ No newline at end of file From d7cc1d104a0a463b168f6ea7beda644e704ed348 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 5 Nov 2010 02:44:15 +0100 Subject: [PATCH 050/850] mesa-master: update to mesa-master-20101104 Signed-off-by: Stephan Raue --- packages/graphics/mesa-master/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/graphics/mesa-master/url b/packages/graphics/mesa-master/url index 4c8ba5c2f9..427bb26c94 100644 --- a/packages/graphics/mesa-master/url +++ b/packages/graphics/mesa-master/url @@ -1 +1 @@ -http://sources.openelec.tv/svn/mesa-master-20101030.1.tar.bz2 \ No newline at end of file +http://sources.openelec.tv/svn/mesa-master-20101104.tar.bz2 \ No newline at end of file From e75f47aa914a72abecf8de947af0faf11ce94618 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 5 Nov 2010 02:44:59 +0100 Subject: [PATCH 051/850] xf86-video-nvidia: fix config so driver will loaded without connected monitor too Signed-off-by: Stephan Raue --- .../x11/driver/xf86-video-nvidia/config/xorg-nvidia-chd.conf | 1 + packages/x11/driver/xf86-video-nvidia/config/xorg-nvidia.conf | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/x11/driver/xf86-video-nvidia/config/xorg-nvidia-chd.conf b/packages/x11/driver/xf86-video-nvidia/config/xorg-nvidia-chd.conf index 591e01a2df..4d092c0c29 100644 --- a/packages/x11/driver/xf86-video-nvidia/config/xorg-nvidia-chd.conf +++ b/packages/x11/driver/xf86-video-nvidia/config/xorg-nvidia-chd.conf @@ -17,6 +17,7 @@ Section "Device" Driver "nvidia" VendorName "NVIDIA Corporation" Option "ConnectToAcpid" "0" + Option "ConnectedMonitor" "CRT" Option "RegistryDwords" "RMDisableRenderToSysmem=1 Option "DynamicTwinView" "False" EndSection diff --git a/packages/x11/driver/xf86-video-nvidia/config/xorg-nvidia.conf b/packages/x11/driver/xf86-video-nvidia/config/xorg-nvidia.conf index a95cbf5472..4e298ffee2 100644 --- a/packages/x11/driver/xf86-video-nvidia/config/xorg-nvidia.conf +++ b/packages/x11/driver/xf86-video-nvidia/config/xorg-nvidia.conf @@ -17,6 +17,7 @@ Section "Device" Driver "nvidia" VendorName "NVIDIA Corporation" Option "ConnectToAcpid" "0" + Option "ConnectedMonitor" "CRT" Option "DynamicTwinView" "False" EndSection From 8a850b36a5a9a0be44c2594ab09c53a24db5b4e0 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 5 Nov 2010 04:58:27 +0100 Subject: [PATCH 052/850] xbmc-dharma: update to xbmc-dharma-35164 Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc-dharma/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mediacenter/xbmc-dharma/meta b/packages/mediacenter/xbmc-dharma/meta index 48b7807c25..771f469ba5 100644 --- a/packages/mediacenter/xbmc-dharma/meta +++ b/packages/mediacenter/xbmc-dharma/meta @@ -1,5 +1,5 @@ PKG_NAME="xbmc-dharma" -PKG_VERSION="35142" +PKG_VERSION="35164" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From 26ff1bcf3b2bbc911b0726a0f323b7fdbf94a3ec Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 5 Nov 2010 04:58:46 +0100 Subject: [PATCH 053/850] xbmc-dharma-theme-Confluence: update to xbmc-dharma-theme-Confluence-35164 Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc-dharma-theme-Confluence/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mediacenter/xbmc-dharma-theme-Confluence/meta b/packages/mediacenter/xbmc-dharma-theme-Confluence/meta index 725fbdef78..b88ae0ed43 100644 --- a/packages/mediacenter/xbmc-dharma-theme-Confluence/meta +++ b/packages/mediacenter/xbmc-dharma-theme-Confluence/meta @@ -1,5 +1,5 @@ PKG_NAME="xbmc-dharma-theme-Confluence" -PKG_VERSION="35142" +PKG_VERSION="35164" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From fcad62582314e76da645b597ccb4d59d9f8a68ba Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 5 Nov 2010 07:28:36 +0100 Subject: [PATCH 054/850] libX11: update to libX11-1.3.99.903 Signed-off-by: Stephan Raue --- packages/x11/lib/libX11/build | 6 +++--- packages/x11/lib/libX11/meta | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/x11/lib/libX11/build b/packages/x11/lib/libX11/build index 9f9d2c6337..b7dfea14ed 100755 --- a/packages/x11/lib/libX11/build +++ b/packages/x11/lib/libX11/build @@ -22,15 +22,15 @@ cd $PKG_BUILD --disable-loadable-i18n \ --enable-xthreads \ --disable-xcms \ - --with-xcb \ --enable-xlocale \ --enable-xkb \ --disable-xlocaledir \ --disable-xf86bigfont \ --enable-malloc0returnsnull \ - --disable-man-pages \ --disable-specs \ - --disable-composecache \ + --without-xmlto \ + --without-fop \ + --enable-composecache \ --disable-lint-library \ --disable-ipv6 \ --without-launchd \ diff --git a/packages/x11/lib/libX11/meta b/packages/x11/lib/libX11/meta index 397da45389..eceae46c7b 100644 --- a/packages/x11/lib/libX11/meta +++ b/packages/x11/lib/libX11/meta @@ -1,5 +1,5 @@ PKG_NAME="libX11" -PKG_VERSION="1.3.6" +PKG_VERSION="1.3.99.903" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="OSS" From b855b5ee8a2265411b983ec7e9538796c97306a4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 5 Nov 2010 07:29:06 +0100 Subject: [PATCH 055/850] SABnzbd: update to SABnzbd-0.5.4 Signed-off-by: Stephan Raue --- packages/plugins/SABnzbd/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/plugins/SABnzbd/url b/packages/plugins/SABnzbd/url index b26ed7cf10..89e95c84ef 100644 --- a/packages/plugins/SABnzbd/url +++ b/packages/plugins/SABnzbd/url @@ -1 +1 @@ -http://switch.dl.sourceforge.net/sourceforge/sabnzbdplus/SABnzbd-0.5.0-src.tar.gz +http://switch.dl.sourceforge.net/sourceforge/sabnzbdplus/SABnzbd-0.5.4-src.tar.gz From 0ee7fc9cdf42785e6287cf5a5f3d561c7362f697 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 5 Nov 2010 07:29:38 +0100 Subject: [PATCH 056/850] projects/ATV/linux: optimize kernel config Signed-off-by: Stephan Raue --- projects/ATV/linux/linux.i386.conf | 38 ++++++++++++++++++------------ 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/projects/ATV/linux/linux.i386.conf b/projects/ATV/linux/linux.i386.conf index 07f7592b6e..9bbc296f60 100644 --- a/projects/ATV/linux/linux.i386.conf +++ b/projects/ATV/linux/linux.i386.conf @@ -388,7 +388,7 @@ CONFIG_ACPI_SYSFS_POWER=y # CONFIG_ACPI_AC is not set # CONFIG_ACPI_BATTERY is not set # CONFIG_ACPI_BUTTON is not set -CONFIG_ACPI_VIDEO=m +CONFIG_ACPI_VIDEO=y CONFIG_ACPI_FAN=y # CONFIG_ACPI_DOCK is not set CONFIG_ACPI_PROCESSOR=y @@ -1111,7 +1111,7 @@ CONFIG_I2C_BOARDINFO=y CONFIG_I2C_CHARDEV=m # CONFIG_I2C_MUX is not set CONFIG_I2C_HELPER_AUTO=y -CONFIG_I2C_ALGOBIT=m +CONFIG_I2C_ALGOBIT=y # # I2C Hardware Bus support @@ -1232,11 +1232,11 @@ CONFIG_IR_MCEUSB=m # # Graphics support # -CONFIG_AGP=m +CONFIG_AGP=y # CONFIG_AGP_ALI is not set # CONFIG_AGP_ATI is not set # CONFIG_AGP_AMD is not set -CONFIG_AGP_INTEL=m +CONFIG_AGP_INTEL=y # CONFIG_AGP_NVIDIA is not set # CONFIG_AGP_SIS is not set # CONFIG_AGP_SWORKS is not set @@ -1245,9 +1245,9 @@ CONFIG_AGP_INTEL=m CONFIG_VGA_ARB=y CONFIG_VGA_ARB_MAX_GPUS=1 # CONFIG_VGA_SWITCHEROO is not set -CONFIG_DRM=m -CONFIG_DRM_KMS_HELPER=m -CONFIG_DRM_TTM=m +CONFIG_DRM=y +CONFIG_DRM_KMS_HELPER=y +CONFIG_DRM_TTM=y # CONFIG_DRM_TDFX is not set # CONFIG_DRM_R128 is not set # CONFIG_DRM_RADEON is not set @@ -1257,14 +1257,14 @@ CONFIG_DRM_TTM=m # CONFIG_DRM_VIA is not set # CONFIG_DRM_SAVAGE is not set # CONFIG_VGASTATE is not set -# CONFIG_VIDEO_OUTPUT_CONTROL is not set +CONFIG_VIDEO_OUTPUT_CONTROL=y CONFIG_FB=y # CONFIG_FIRMWARE_EDID is not set # CONFIG_FB_DDC is not set # CONFIG_FB_BOOT_VESA_SUPPORT is not set -CONFIG_FB_CFB_FILLRECT=m -CONFIG_FB_CFB_COPYAREA=m -CONFIG_FB_CFB_IMAGEBLIT=m +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y # CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set # CONFIG_FB_SYS_FILLRECT is not set # CONFIG_FB_SYS_COPYAREA is not set @@ -1273,7 +1273,7 @@ CONFIG_FB_CFB_IMAGEBLIT=m # CONFIG_FB_SYS_FOPS is not set # CONFIG_FB_SVGALIB is not set # CONFIG_FB_MACMODES is not set -# CONFIG_FB_BACKLIGHT is not set +CONFIG_FB_BACKLIGHT=y # CONFIG_FB_MODE_HELPERS is not set # CONFIG_FB_TILEBLITTING is not set @@ -1319,7 +1319,14 @@ CONFIG_FB_CFB_IMAGEBLIT=m # CONFIG_FB_METRONOME is not set # CONFIG_FB_MB862XX is not set # CONFIG_FB_BROADSHEET is not set -# CONFIG_BACKLIGHT_LCD_SUPPORT is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_GENERIC is not set +# CONFIG_BACKLIGHT_PROGEAR is not set +# CONFIG_BACKLIGHT_MBP_NVIDIA is not set +# CONFIG_BACKLIGHT_SAHARA is not set +# CONFIG_BACKLIGHT_ADP8860 is not set # # Display device support @@ -1780,8 +1787,8 @@ CONFIG_STAGING=y # CONFIG_IDE_PHISON is not set # CONFIG_LINE6_USB is not set # CONFIG_DRM_VMWGFX is not set -CONFIG_DRM_NOUVEAU=m -# CONFIG_DRM_NOUVEAU_BACKLIGHT is not set +CONFIG_DRM_NOUVEAU=y +CONFIG_DRM_NOUVEAU_BACKLIGHT=y # # I2C encoder or helper chips @@ -1798,6 +1805,7 @@ CONFIG_DRM_I2C_SIL164=m # CONFIG_IIO is not set # CONFIG_ZRAM is not set # CONFIG_BATMAN_ADV is not set +# CONFIG_SAMSUNG_LAPTOP is not set # CONFIG_FB_SM7XX is not set # CONFIG_CRYSTALHD is not set From e964df26ec16a5db11396aafd42ab42227ce9983 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 5 Nov 2010 08:07:23 +0100 Subject: [PATCH 057/850] xf86-video-nouveau: enable GLXVBlank by default Signed-off-by: Stephan Raue --- packages/x11/driver/xf86-video-nouveau/config/xorg-nouveau.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/x11/driver/xf86-video-nouveau/config/xorg-nouveau.conf b/packages/x11/driver/xf86-video-nouveau/config/xorg-nouveau.conf index 1d7095cdf6..c07f22605d 100644 --- a/packages/x11/driver/xf86-video-nouveau/config/xorg-nouveau.conf +++ b/packages/x11/driver/xf86-video-nouveau/config/xorg-nouveau.conf @@ -17,7 +17,7 @@ Section "Device" Driver "nouveau" VendorName "Nouveau" Option "HWCursor" "on" - Option "GLXVBlank" "off" + Option "GLXVBlank" "on" EndSection Section "Extensions" From 33a375b86ed504c8d250c24e3fe2efc5adcbe076 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 5 Nov 2010 15:29:03 +0100 Subject: [PATCH 058/850] projects/ATV/linux: update kernel config Signed-off-by: Stephan Raue --- projects/ATV/linux/linux.i386.conf | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/projects/ATV/linux/linux.i386.conf b/projects/ATV/linux/linux.i386.conf index 9bbc296f60..4ff1d7ebf9 100644 --- a/projects/ATV/linux/linux.i386.conf +++ b/projects/ATV/linux/linux.i386.conf @@ -47,6 +47,7 @@ CONFIG_HAVE_EARLY_RES=y CONFIG_GENERIC_HARDIRQS=y CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_X86_32_LAZY_GS=y CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-ecx -fcall-saved-edx" CONFIG_KTIME_SCALAR=y CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" @@ -237,7 +238,7 @@ CONFIG_X86_MPPARSE=y # CONFIG_X86_EXTENDED_PLATFORM is not set CONFIG_SCHED_OMIT_FRAME_POINTER=y # CONFIG_PARAVIRT_GUEST is not set -CONFIG_NO_BOOTMEM=y +# CONFIG_NO_BOOTMEM is not set # CONFIG_MEMTEST is not set # CONFIG_M386 is not set # CONFIG_M486 is not set @@ -355,7 +356,7 @@ CONFIG_X86_PAT=y CONFIG_ARCH_USES_PG_UNCACHED=y CONFIG_EFI=y CONFIG_SECCOMP=y -CONFIG_CC_STACKPROTECTOR=y +# CONFIG_CC_STACKPROTECTOR is not set # CONFIG_HZ_100 is not set # CONFIG_HZ_250 is not set CONFIG_HZ_300=y @@ -2066,7 +2067,7 @@ CONFIG_IO_DELAY_0X80=y # CONFIG_IO_DELAY_UDELAY is not set # CONFIG_IO_DELAY_NONE is not set CONFIG_DEFAULT_IO_DELAY_TYPE=0 -# CONFIG_OPTIMIZE_INLINING is not set +CONFIG_OPTIMIZE_INLINING=y # # Security options From 4b40ccf3d290bd1c040110e69f46cee9c9e097a3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 5 Nov 2010 15:29:31 +0100 Subject: [PATCH 059/850] xf86-video-nvidia: fix configfile Signed-off-by: Stephan Raue --- .../x11/driver/xf86-video-nvidia/config/xorg-nvidia-chd.conf | 1 - packages/x11/driver/xf86-video-nvidia/config/xorg-nvidia.conf | 1 - 2 files changed, 2 deletions(-) diff --git a/packages/x11/driver/xf86-video-nvidia/config/xorg-nvidia-chd.conf b/packages/x11/driver/xf86-video-nvidia/config/xorg-nvidia-chd.conf index 4d092c0c29..591e01a2df 100644 --- a/packages/x11/driver/xf86-video-nvidia/config/xorg-nvidia-chd.conf +++ b/packages/x11/driver/xf86-video-nvidia/config/xorg-nvidia-chd.conf @@ -17,7 +17,6 @@ Section "Device" Driver "nvidia" VendorName "NVIDIA Corporation" Option "ConnectToAcpid" "0" - Option "ConnectedMonitor" "CRT" Option "RegistryDwords" "RMDisableRenderToSysmem=1 Option "DynamicTwinView" "False" EndSection diff --git a/packages/x11/driver/xf86-video-nvidia/config/xorg-nvidia.conf b/packages/x11/driver/xf86-video-nvidia/config/xorg-nvidia.conf index 4e298ffee2..a95cbf5472 100644 --- a/packages/x11/driver/xf86-video-nvidia/config/xorg-nvidia.conf +++ b/packages/x11/driver/xf86-video-nvidia/config/xorg-nvidia.conf @@ -17,7 +17,6 @@ Section "Device" Driver "nvidia" VendorName "NVIDIA Corporation" Option "ConnectToAcpid" "0" - Option "ConnectedMonitor" "CRT" Option "DynamicTwinView" "False" EndSection From f6622efa58c7f8f28f1a6c5b86a2d4344895d569 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 7 Nov 2010 08:20:37 +0100 Subject: [PATCH 060/850] projects/*/linux: dont build as preemptive kernel Signed-off-by: Stephan Raue --- projects/ATV/linux/linux.i386.conf | 17 ++++++++--------- projects/ION/linux/linux.i386.conf | 16 ++++++++-------- projects/ION/linux/linux.x86_64.conf | 16 ++++++++-------- projects/generic/linux/linux.i386.conf | 16 ++++++++-------- projects/intel/linux/linux.i386.conf | 16 ++++++++-------- projects/intel/linux/linux.x86_64.conf | 16 ++++++++-------- 6 files changed, 48 insertions(+), 49 deletions(-) diff --git a/projects/ATV/linux/linux.i386.conf b/projects/ATV/linux/linux.i386.conf index 4ff1d7ebf9..e429f5bb00 100644 --- a/projects/ATV/linux/linux.i386.conf +++ b/projects/ATV/linux/linux.i386.conf @@ -58,7 +58,6 @@ CONFIG_CONSTRUCTORS=y # CONFIG_EXPERIMENTAL=y CONFIG_BROKEN_ON_SMP=y -CONFIG_LOCK_KERNEL=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" CONFIG_LOCALVERSION="" @@ -200,27 +199,27 @@ CONFIG_DEFAULT_IOSCHED="cfq" # CONFIG_INLINE_SPIN_LOCK_BH is not set # CONFIG_INLINE_SPIN_LOCK_IRQ is not set # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set -# CONFIG_INLINE_SPIN_UNLOCK is not set +CONFIG_INLINE_SPIN_UNLOCK=y # CONFIG_INLINE_SPIN_UNLOCK_BH is not set -# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_READ_TRYLOCK is not set # CONFIG_INLINE_READ_LOCK is not set # CONFIG_INLINE_READ_LOCK_BH is not set # CONFIG_INLINE_READ_LOCK_IRQ is not set # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set -# CONFIG_INLINE_READ_UNLOCK is not set +CONFIG_INLINE_READ_UNLOCK=y # CONFIG_INLINE_READ_UNLOCK_BH is not set -# CONFIG_INLINE_READ_UNLOCK_IRQ is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_WRITE_TRYLOCK is not set # CONFIG_INLINE_WRITE_LOCK is not set # CONFIG_INLINE_WRITE_LOCK_BH is not set # CONFIG_INLINE_WRITE_LOCK_IRQ is not set # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set -# CONFIG_INLINE_WRITE_UNLOCK is not set +CONFIG_INLINE_WRITE_UNLOCK=y # CONFIG_INLINE_WRITE_UNLOCK_BH is not set -# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set # CONFIG_MUTEX_SPIN_ON_OWNER is not set CONFIG_FREEZER=y @@ -295,8 +294,8 @@ CONFIG_DMI=y # CONFIG_IOMMU_API is not set CONFIG_NR_CPUS=1 # CONFIG_PREEMPT_NONE is not set -# CONFIG_PREEMPT_VOLUNTARY is not set -CONFIG_PREEMPT=y +CONFIG_PREEMPT_VOLUNTARY=y +# CONFIG_PREEMPT is not set CONFIG_X86_UP_APIC=y CONFIG_X86_UP_IOAPIC=y CONFIG_X86_LOCAL_APIC=y diff --git a/projects/ION/linux/linux.i386.conf b/projects/ION/linux/linux.i386.conf index 544d50eac2..1580d48ed0 100644 --- a/projects/ION/linux/linux.i386.conf +++ b/projects/ION/linux/linux.i386.conf @@ -207,27 +207,27 @@ CONFIG_DEFAULT_IOSCHED="cfq" # CONFIG_INLINE_SPIN_LOCK_BH is not set # CONFIG_INLINE_SPIN_LOCK_IRQ is not set # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set -# CONFIG_INLINE_SPIN_UNLOCK is not set +CONFIG_INLINE_SPIN_UNLOCK=y # CONFIG_INLINE_SPIN_UNLOCK_BH is not set -# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_READ_TRYLOCK is not set # CONFIG_INLINE_READ_LOCK is not set # CONFIG_INLINE_READ_LOCK_BH is not set # CONFIG_INLINE_READ_LOCK_IRQ is not set # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set -# CONFIG_INLINE_READ_UNLOCK is not set +CONFIG_INLINE_READ_UNLOCK=y # CONFIG_INLINE_READ_UNLOCK_BH is not set -# CONFIG_INLINE_READ_UNLOCK_IRQ is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_WRITE_TRYLOCK is not set # CONFIG_INLINE_WRITE_LOCK is not set # CONFIG_INLINE_WRITE_LOCK_BH is not set # CONFIG_INLINE_WRITE_LOCK_IRQ is not set # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set -# CONFIG_INLINE_WRITE_UNLOCK is not set +CONFIG_INLINE_WRITE_UNLOCK=y # CONFIG_INLINE_WRITE_UNLOCK_BH is not set -# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set CONFIG_MUTEX_SPIN_ON_OWNER=y CONFIG_FREEZER=y @@ -304,8 +304,8 @@ CONFIG_NR_CPUS=4 CONFIG_SCHED_SMT=y CONFIG_SCHED_MC=y # CONFIG_PREEMPT_NONE is not set -# CONFIG_PREEMPT_VOLUNTARY is not set -CONFIG_PREEMPT=y +CONFIG_PREEMPT_VOLUNTARY=y +# CONFIG_PREEMPT is not set CONFIG_X86_LOCAL_APIC=y CONFIG_X86_IO_APIC=y # CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set diff --git a/projects/ION/linux/linux.x86_64.conf b/projects/ION/linux/linux.x86_64.conf index dd6037d67d..97746021e3 100644 --- a/projects/ION/linux/linux.x86_64.conf +++ b/projects/ION/linux/linux.x86_64.conf @@ -205,27 +205,27 @@ CONFIG_DEFAULT_IOSCHED="cfq" # CONFIG_INLINE_SPIN_LOCK_BH is not set # CONFIG_INLINE_SPIN_LOCK_IRQ is not set # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set -# CONFIG_INLINE_SPIN_UNLOCK is not set +CONFIG_INLINE_SPIN_UNLOCK=y # CONFIG_INLINE_SPIN_UNLOCK_BH is not set -# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_READ_TRYLOCK is not set # CONFIG_INLINE_READ_LOCK is not set # CONFIG_INLINE_READ_LOCK_BH is not set # CONFIG_INLINE_READ_LOCK_IRQ is not set # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set -# CONFIG_INLINE_READ_UNLOCK is not set +CONFIG_INLINE_READ_UNLOCK=y # CONFIG_INLINE_READ_UNLOCK_BH is not set -# CONFIG_INLINE_READ_UNLOCK_IRQ is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_WRITE_TRYLOCK is not set # CONFIG_INLINE_WRITE_LOCK is not set # CONFIG_INLINE_WRITE_LOCK_BH is not set # CONFIG_INLINE_WRITE_LOCK_IRQ is not set # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set -# CONFIG_INLINE_WRITE_UNLOCK is not set +CONFIG_INLINE_WRITE_UNLOCK=y # CONFIG_INLINE_WRITE_UNLOCK_BH is not set -# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set CONFIG_MUTEX_SPIN_ON_OWNER=y CONFIG_FREEZER=y @@ -278,8 +278,8 @@ CONFIG_NR_CPUS=4 CONFIG_SCHED_SMT=y CONFIG_SCHED_MC=y # CONFIG_PREEMPT_NONE is not set -# CONFIG_PREEMPT_VOLUNTARY is not set -CONFIG_PREEMPT=y +CONFIG_PREEMPT_VOLUNTARY=y +# CONFIG_PREEMPT is not set CONFIG_X86_LOCAL_APIC=y CONFIG_X86_IO_APIC=y # CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set diff --git a/projects/generic/linux/linux.i386.conf b/projects/generic/linux/linux.i386.conf index 287aec22b9..db8307eb47 100644 --- a/projects/generic/linux/linux.i386.conf +++ b/projects/generic/linux/linux.i386.conf @@ -207,27 +207,27 @@ CONFIG_DEFAULT_IOSCHED="cfq" # CONFIG_INLINE_SPIN_LOCK_BH is not set # CONFIG_INLINE_SPIN_LOCK_IRQ is not set # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set -# CONFIG_INLINE_SPIN_UNLOCK is not set +CONFIG_INLINE_SPIN_UNLOCK=y # CONFIG_INLINE_SPIN_UNLOCK_BH is not set -# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_READ_TRYLOCK is not set # CONFIG_INLINE_READ_LOCK is not set # CONFIG_INLINE_READ_LOCK_BH is not set # CONFIG_INLINE_READ_LOCK_IRQ is not set # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set -# CONFIG_INLINE_READ_UNLOCK is not set +CONFIG_INLINE_READ_UNLOCK=y # CONFIG_INLINE_READ_UNLOCK_BH is not set -# CONFIG_INLINE_READ_UNLOCK_IRQ is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_WRITE_TRYLOCK is not set # CONFIG_INLINE_WRITE_LOCK is not set # CONFIG_INLINE_WRITE_LOCK_BH is not set # CONFIG_INLINE_WRITE_LOCK_IRQ is not set # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set -# CONFIG_INLINE_WRITE_UNLOCK is not set +CONFIG_INLINE_WRITE_UNLOCK=y # CONFIG_INLINE_WRITE_UNLOCK_BH is not set -# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set CONFIG_MUTEX_SPIN_ON_OWNER=y CONFIG_FREEZER=y @@ -305,8 +305,8 @@ CONFIG_NR_CPUS=8 CONFIG_SCHED_SMT=y CONFIG_SCHED_MC=y # CONFIG_PREEMPT_NONE is not set -# CONFIG_PREEMPT_VOLUNTARY is not set -CONFIG_PREEMPT=y +CONFIG_PREEMPT_VOLUNTARY=y +# CONFIG_PREEMPT is not set CONFIG_X86_LOCAL_APIC=y CONFIG_X86_IO_APIC=y # CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set diff --git a/projects/intel/linux/linux.i386.conf b/projects/intel/linux/linux.i386.conf index 1b7ce4c83d..e83b6aca9e 100644 --- a/projects/intel/linux/linux.i386.conf +++ b/projects/intel/linux/linux.i386.conf @@ -207,27 +207,27 @@ CONFIG_DEFAULT_IOSCHED="cfq" # CONFIG_INLINE_SPIN_LOCK_BH is not set # CONFIG_INLINE_SPIN_LOCK_IRQ is not set # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set -# CONFIG_INLINE_SPIN_UNLOCK is not set +CONFIG_INLINE_SPIN_UNLOCK=y # CONFIG_INLINE_SPIN_UNLOCK_BH is not set -# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_READ_TRYLOCK is not set # CONFIG_INLINE_READ_LOCK is not set # CONFIG_INLINE_READ_LOCK_BH is not set # CONFIG_INLINE_READ_LOCK_IRQ is not set # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set -# CONFIG_INLINE_READ_UNLOCK is not set +CONFIG_INLINE_READ_UNLOCK=y # CONFIG_INLINE_READ_UNLOCK_BH is not set -# CONFIG_INLINE_READ_UNLOCK_IRQ is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_WRITE_TRYLOCK is not set # CONFIG_INLINE_WRITE_LOCK is not set # CONFIG_INLINE_WRITE_LOCK_BH is not set # CONFIG_INLINE_WRITE_LOCK_IRQ is not set # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set -# CONFIG_INLINE_WRITE_UNLOCK is not set +CONFIG_INLINE_WRITE_UNLOCK=y # CONFIG_INLINE_WRITE_UNLOCK_BH is not set -# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set CONFIG_MUTEX_SPIN_ON_OWNER=y CONFIG_FREEZER=y @@ -305,8 +305,8 @@ CONFIG_NR_CPUS=8 CONFIG_SCHED_SMT=y CONFIG_SCHED_MC=y # CONFIG_PREEMPT_NONE is not set -# CONFIG_PREEMPT_VOLUNTARY is not set -CONFIG_PREEMPT=y +CONFIG_PREEMPT_VOLUNTARY=y +# CONFIG_PREEMPT is not set CONFIG_X86_LOCAL_APIC=y CONFIG_X86_IO_APIC=y # CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set diff --git a/projects/intel/linux/linux.x86_64.conf b/projects/intel/linux/linux.x86_64.conf index c01efd99ae..a7cc9c9054 100644 --- a/projects/intel/linux/linux.x86_64.conf +++ b/projects/intel/linux/linux.x86_64.conf @@ -205,27 +205,27 @@ CONFIG_DEFAULT_IOSCHED="cfq" # CONFIG_INLINE_SPIN_LOCK_BH is not set # CONFIG_INLINE_SPIN_LOCK_IRQ is not set # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set -# CONFIG_INLINE_SPIN_UNLOCK is not set +CONFIG_INLINE_SPIN_UNLOCK=y # CONFIG_INLINE_SPIN_UNLOCK_BH is not set -# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_READ_TRYLOCK is not set # CONFIG_INLINE_READ_LOCK is not set # CONFIG_INLINE_READ_LOCK_BH is not set # CONFIG_INLINE_READ_LOCK_IRQ is not set # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set -# CONFIG_INLINE_READ_UNLOCK is not set +CONFIG_INLINE_READ_UNLOCK=y # CONFIG_INLINE_READ_UNLOCK_BH is not set -# CONFIG_INLINE_READ_UNLOCK_IRQ is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_WRITE_TRYLOCK is not set # CONFIG_INLINE_WRITE_LOCK is not set # CONFIG_INLINE_WRITE_LOCK_BH is not set # CONFIG_INLINE_WRITE_LOCK_IRQ is not set # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set -# CONFIG_INLINE_WRITE_UNLOCK is not set +CONFIG_INLINE_WRITE_UNLOCK=y # CONFIG_INLINE_WRITE_UNLOCK_BH is not set -# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set CONFIG_MUTEX_SPIN_ON_OWNER=y CONFIG_FREEZER=y @@ -280,8 +280,8 @@ CONFIG_NR_CPUS=8 CONFIG_SCHED_SMT=y CONFIG_SCHED_MC=y # CONFIG_PREEMPT_NONE is not set -# CONFIG_PREEMPT_VOLUNTARY is not set -CONFIG_PREEMPT=y +CONFIG_PREEMPT_VOLUNTARY=y +# CONFIG_PREEMPT is not set CONFIG_X86_LOCAL_APIC=y CONFIG_X86_IO_APIC=y # CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set From c871179648f6dd2d1337c534b680e262b0359603 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 7 Nov 2010 08:27:39 +0100 Subject: [PATCH 061/850] projects/*/linux: buildin 'autofs4' and 'ipv6' module statically Signed-off-by: Stephan Raue --- projects/ATV/linux/linux.i386.conf | 2 +- projects/ION/linux/linux.i386.conf | 4 ++-- projects/ION/linux/linux.x86_64.conf | 4 ++-- projects/generic/linux/linux.i386.conf | 4 ++-- projects/intel/linux/linux.i386.conf | 5 ++--- projects/intel/linux/linux.x86_64.conf | 4 ++-- 6 files changed, 11 insertions(+), 12 deletions(-) diff --git a/projects/ATV/linux/linux.i386.conf b/projects/ATV/linux/linux.i386.conf index e429f5bb00..f19c38ca8e 100644 --- a/projects/ATV/linux/linux.i386.conf +++ b/projects/ATV/linux/linux.i386.conf @@ -528,7 +528,7 @@ CONFIG_INET_TCP_DIAG=y CONFIG_TCP_CONG_CUBIC=y CONFIG_DEFAULT_TCP_CONG="cubic" # CONFIG_TCP_MD5SIG is not set -CONFIG_IPV6=m +CONFIG_IPV6=y # CONFIG_IPV6_PRIVACY is not set # CONFIG_IPV6_ROUTER_PREF is not set # CONFIG_IPV6_OPTIMISTIC_DAD is not set diff --git a/projects/ION/linux/linux.i386.conf b/projects/ION/linux/linux.i386.conf index 1580d48ed0..7cf5f19736 100644 --- a/projects/ION/linux/linux.i386.conf +++ b/projects/ION/linux/linux.i386.conf @@ -548,7 +548,7 @@ CONFIG_INET_TCP_DIAG=y CONFIG_TCP_CONG_CUBIC=y CONFIG_DEFAULT_TCP_CONG="cubic" # CONFIG_TCP_MD5SIG is not set -CONFIG_IPV6=m +CONFIG_IPV6=y # CONFIG_IPV6_PRIVACY is not set # CONFIG_IPV6_ROUTER_PREF is not set # CONFIG_IPV6_OPTIMISTIC_DAD is not set @@ -2015,7 +2015,7 @@ CONFIG_DNOTIFY=y CONFIG_INOTIFY_USER=y # CONFIG_QUOTA is not set # CONFIG_AUTOFS_FS is not set -CONFIG_AUTOFS4_FS=m +CONFIG_AUTOFS4_FS=y CONFIG_FUSE_FS=m # CONFIG_CUSE is not set diff --git a/projects/ION/linux/linux.x86_64.conf b/projects/ION/linux/linux.x86_64.conf index 97746021e3..a9dbfce058 100644 --- a/projects/ION/linux/linux.x86_64.conf +++ b/projects/ION/linux/linux.x86_64.conf @@ -498,7 +498,7 @@ CONFIG_INET_TCP_DIAG=y CONFIG_TCP_CONG_CUBIC=y CONFIG_DEFAULT_TCP_CONG="cubic" # CONFIG_TCP_MD5SIG is not set -CONFIG_IPV6=m +CONFIG_IPV6=y # CONFIG_IPV6_PRIVACY is not set # CONFIG_IPV6_ROUTER_PREF is not set # CONFIG_IPV6_OPTIMISTIC_DAD is not set @@ -1949,7 +1949,7 @@ CONFIG_DNOTIFY=y CONFIG_INOTIFY_USER=y # CONFIG_QUOTA is not set # CONFIG_AUTOFS_FS is not set -CONFIG_AUTOFS4_FS=m +CONFIG_AUTOFS4_FS=y CONFIG_FUSE_FS=m # CONFIG_CUSE is not set diff --git a/projects/generic/linux/linux.i386.conf b/projects/generic/linux/linux.i386.conf index db8307eb47..9598c23bdc 100644 --- a/projects/generic/linux/linux.i386.conf +++ b/projects/generic/linux/linux.i386.conf @@ -551,7 +551,7 @@ CONFIG_INET_TCP_DIAG=y CONFIG_TCP_CONG_CUBIC=y CONFIG_DEFAULT_TCP_CONG="cubic" # CONFIG_TCP_MD5SIG is not set -CONFIG_IPV6=m +CONFIG_IPV6=y # CONFIG_IPV6_PRIVACY is not set # CONFIG_IPV6_ROUTER_PREF is not set # CONFIG_IPV6_OPTIMISTIC_DAD is not set @@ -2159,7 +2159,7 @@ CONFIG_DNOTIFY=y CONFIG_INOTIFY_USER=y # CONFIG_QUOTA is not set # CONFIG_AUTOFS_FS is not set -CONFIG_AUTOFS4_FS=m +CONFIG_AUTOFS4_FS=y CONFIG_FUSE_FS=m # CONFIG_CUSE is not set diff --git a/projects/intel/linux/linux.i386.conf b/projects/intel/linux/linux.i386.conf index e83b6aca9e..b24b37a744 100644 --- a/projects/intel/linux/linux.i386.conf +++ b/projects/intel/linux/linux.i386.conf @@ -90,7 +90,6 @@ CONFIG_BSD_PROCESS_ACCT=y # RCU Subsystem # CONFIG_TREE_RCU=y -# CONFIG_TREE_PREEMPT_RCU is not set # CONFIG_RCU_TRACE is not set CONFIG_RCU_FANOUT=32 # CONFIG_RCU_FANOUT_EXACT is not set @@ -550,7 +549,7 @@ CONFIG_INET_TCP_DIAG=y CONFIG_TCP_CONG_CUBIC=y CONFIG_DEFAULT_TCP_CONG="cubic" # CONFIG_TCP_MD5SIG is not set -CONFIG_IPV6=m +CONFIG_IPV6=y # CONFIG_IPV6_PRIVACY is not set # CONFIG_IPV6_ROUTER_PREF is not set # CONFIG_IPV6_OPTIMISTIC_DAD is not set @@ -1994,7 +1993,7 @@ CONFIG_DNOTIFY=y CONFIG_INOTIFY_USER=y # CONFIG_QUOTA is not set # CONFIG_AUTOFS_FS is not set -CONFIG_AUTOFS4_FS=m +CONFIG_AUTOFS4_FS=y CONFIG_FUSE_FS=m # CONFIG_CUSE is not set diff --git a/projects/intel/linux/linux.x86_64.conf b/projects/intel/linux/linux.x86_64.conf index a7cc9c9054..a7ade788a5 100644 --- a/projects/intel/linux/linux.x86_64.conf +++ b/projects/intel/linux/linux.x86_64.conf @@ -501,7 +501,7 @@ CONFIG_INET_TCP_DIAG=y CONFIG_TCP_CONG_CUBIC=y CONFIG_DEFAULT_TCP_CONG="cubic" # CONFIG_TCP_MD5SIG is not set -CONFIG_IPV6=m +CONFIG_IPV6=y # CONFIG_IPV6_PRIVACY is not set # CONFIG_IPV6_ROUTER_PREF is not set # CONFIG_IPV6_OPTIMISTIC_DAD is not set @@ -1929,7 +1929,7 @@ CONFIG_DNOTIFY=y CONFIG_INOTIFY_USER=y # CONFIG_QUOTA is not set # CONFIG_AUTOFS_FS is not set -CONFIG_AUTOFS4_FS=m +CONFIG_AUTOFS4_FS=y CONFIG_FUSE_FS=m # CONFIG_CUSE is not set From 1fdbad98723362c917e978965dcd1dd776b45e35 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 8 Nov 2010 07:36:29 +0100 Subject: [PATCH 062/850] projects/*/options: remove unneeded config options Signed-off-by: Stephan Raue --- projects/ATV/options | 10 ---------- projects/ION/options | 10 ---------- projects/generic/options | 10 ---------- projects/intel/options | 10 ---------- 4 files changed, 40 deletions(-) diff --git a/projects/ATV/options b/projects/ATV/options index e55cb614c8..16b553d19e 100644 --- a/projects/ATV/options +++ b/projects/ATV/options @@ -50,10 +50,6 @@ # Project CFLAGS PROJECT_CFLAGS="" -# Timezone to use (empty disables timezone support) -# use a TZ environment string - TIMEZONE="" - # Mediacenter to use (xbmc / no) MEDIACENTER="xbmc-dharma" @@ -151,12 +147,6 @@ # build and install remote support (yes / no) REMOTE_SUPPORT="yes" -# Remote to Use (pctv/logitech/hauppauge/realmagic/creative/leadtek/ -# leadtek-pvr2000/RM-S6/RX-V850/animax/askey/avermedia/packard_bell/atiusb/ -# atiusb2/LG/D-10/digimatrix/mceusb/streamzap/cinergy1400/nova-s-plus/twinhan/ -# tosh-vt76f/flytv-prime/Medion-X10/imonknob/ultrax/dvico/MCE-X10) - REMOTE="mceusb" - # build and install WiiMote support (yes / no) WIIMOTE_SUPPORT="no" diff --git a/projects/ION/options b/projects/ION/options index 8af8609cd7..d3d46829ec 100644 --- a/projects/ION/options +++ b/projects/ION/options @@ -50,10 +50,6 @@ # Project CFLAGS PROJECT_CFLAGS="-mfpmath=sse -ftree-vectorize -mmovbe" -# Timezone to use (empty disables timezone support) -# use a TZ environment string - TIMEZONE="" - # Mediacenter to use (xbmc / no) MEDIACENTER="xbmc-dharma" @@ -151,12 +147,6 @@ # build and install remote support (yes / no) REMOTE_SUPPORT="yes" -# Remote to Use (pctv/logitech/hauppauge/realmagic/creative/leadtek/ -# leadtek-pvr2000/RM-S6/RX-V850/animax/askey/avermedia/packard_bell/atiusb/ -# atiusb2/LG/D-10/digimatrix/mceusb/streamzap/cinergy1400/nova-s-plus/twinhan/ -# tosh-vt76f/flytv-prime/Medion-X10/imonknob/ultrax/dvico/MCE-X10) - REMOTE="mceusb" - # build and install WiiMote support (yes / no) WIIMOTE_SUPPORT="yes" diff --git a/projects/generic/options b/projects/generic/options index daeee79453..dbe34334e3 100644 --- a/projects/generic/options +++ b/projects/generic/options @@ -50,10 +50,6 @@ # Project CFLAGS PROJECT_CFLAGS="-mmmx -msse -msse2 -mfpmath=sse" -# Timezone to use (empty disables timezone support) -# use a TZ environment string - TIMEZONE="" - # Mediacenter to use (xbmc / no) MEDIACENTER="xbmc-dharma" @@ -151,12 +147,6 @@ # build and install remote support (yes / no) REMOTE_SUPPORT="yes" -# Remote to Use (pctv/logitech/hauppauge/realmagic/creative/leadtek/ -# leadtek-pvr2000/RM-S6/RX-V850/animax/askey/avermedia/packard_bell/atiusb/ -# atiusb2/LG/D-10/digimatrix/mceusb/streamzap/cinergy1400/nova-s-plus/twinhan/ -# tosh-vt76f/flytv-prime/Medion-X10/imonknob/ultrax/dvico/MCE-X10) - REMOTE="mceusb" - # build and install WiiMote support (yes / no) WIIMOTE_SUPPORT="yes" diff --git a/projects/intel/options b/projects/intel/options index 36a4eaafba..d468c5a483 100644 --- a/projects/intel/options +++ b/projects/intel/options @@ -50,10 +50,6 @@ # Project CFLAGS PROJECT_CFLAGS="" -# Timezone to use (empty disables timezone support) -# use a TZ environment string - TIMEZONE="" - # Mediacenter to use (xbmc / no) MEDIACENTER="xbmc-dharma" @@ -151,12 +147,6 @@ # build and install remote support (yes / no) REMOTE_SUPPORT="yes" -# Remote to Use (pctv/logitech/hauppauge/realmagic/creative/leadtek/ -# leadtek-pvr2000/RM-S6/RX-V850/animax/askey/avermedia/packard_bell/atiusb/ -# atiusb2/LG/D-10/digimatrix/mceusb/streamzap/cinergy1400/nova-s-plus/twinhan/ -# tosh-vt76f/flytv-prime/Medion-X10/imonknob/ultrax/dvico/MCE-X10) - REMOTE="mceusb" - # build and install WiiMote support (yes / no) WIIMOTE_SUPPORT="yes" From d4ce9bc9bb8423f2a3de94b14f266ae3e6618547 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 8 Nov 2010 07:38:06 +0100 Subject: [PATCH 063/850] installer: increase size of flash partition Signed-off-by: Stephan Raue --- packages/tools/installer/config/installer.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/tools/installer/config/installer.conf b/packages/tools/installer/config/installer.conf index 0522b7bd6d..14ce42403d 100644 --- a/packages/tools/installer/config/installer.conf +++ b/packages/tools/installer/config/installer.conf @@ -3,7 +3,7 @@ DISKLABEL_STORAGE="Storage" # Defaultsize of system partition (Cylinder: 16=132MB, 31=255MB) - PARTSIZE_SYSTEM="16" + PARTSIZE_SYSTEM="23" # additional parameters to extlinux EXTLINUX_PARAMETERS="" From d02130240c6d103b1d19b6e614f754cbd69f6821 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 8 Nov 2010 07:38:39 +0100 Subject: [PATCH 064/850] libxml2: update to libxml2-2.7.8 Signed-off-by: Stephan Raue --- packages/textproc/libxml2/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/textproc/libxml2/url b/packages/textproc/libxml2/url index f4ddb0d914..015a7ebf3f 100644 --- a/packages/textproc/libxml2/url +++ b/packages/textproc/libxml2/url @@ -1 +1 @@ -ftp://xmlsoft.org/libxml2/libxml2-2.7.7.tar.gz \ No newline at end of file +ftp://xmlsoft.org/libxml2/libxml2-2.7.8.tar.gz \ No newline at end of file From dbcf11b928f0019a58e408ff3b0dd20f735ac6a8 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 8 Nov 2010 07:39:05 +0100 Subject: [PATCH 065/850] bluez: update to bluez-4.78 Signed-off-by: Stephan Raue --- packages/network/bluez/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/network/bluez/url b/packages/network/bluez/url index eb5851187a..2a3bf380b8 100644 --- a/packages/network/bluez/url +++ b/packages/network/bluez/url @@ -1 +1 @@ -http://www.kernel.org/pub/linux/bluetooth/bluez-4.77.tar.bz2 \ No newline at end of file +http://www.kernel.org/pub/linux/bluetooth/bluez-4.78.tar.bz2 \ No newline at end of file From 435ad82f4023a2d30169cc3d5b726fa1c3c350ea Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 8 Nov 2010 07:39:45 +0100 Subject: [PATCH 066/850] xbmc-dharma: update to xbmc-dharma-35198 Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc-dharma/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mediacenter/xbmc-dharma/meta b/packages/mediacenter/xbmc-dharma/meta index 771f469ba5..283b780804 100644 --- a/packages/mediacenter/xbmc-dharma/meta +++ b/packages/mediacenter/xbmc-dharma/meta @@ -1,5 +1,5 @@ PKG_NAME="xbmc-dharma" -PKG_VERSION="35164" +PKG_VERSION="35198" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From ed84c09cae2b5557d118c8049b78459565a1653b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 8 Nov 2010 07:39:59 +0100 Subject: [PATCH 067/850] xbmc-dharma-theme-Confluence: update to xbmc-dharma-theme-Confluence-35198 Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc-dharma-theme-Confluence/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mediacenter/xbmc-dharma-theme-Confluence/meta b/packages/mediacenter/xbmc-dharma-theme-Confluence/meta index b88ae0ed43..640db99078 100644 --- a/packages/mediacenter/xbmc-dharma-theme-Confluence/meta +++ b/packages/mediacenter/xbmc-dharma-theme-Confluence/meta @@ -1,5 +1,5 @@ PKG_NAME="xbmc-dharma-theme-Confluence" -PKG_VERSION="35164" +PKG_VERSION="35198" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From d7bef5996d7f2ac6620af8f485d5363bb58ebab3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 9 Nov 2010 10:03:52 +0100 Subject: [PATCH 068/850] Mesa: disable build of gallium if not needed, fix build Signed-off-by: Stephan Raue --- packages/graphics/Mesa/build | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/graphics/Mesa/build b/packages/graphics/Mesa/build index 225f51a30c..c609bd74af 100755 --- a/packages/graphics/Mesa/build +++ b/packages/graphics/Mesa/build @@ -17,7 +17,7 @@ $SCRIPTS/build libX11 get_graphicdrivers -MESA_CONFIG="--disable-gallium-nouveau --disable-gallium-i915 --disable-gallium-i965" +MESA_CONFIG=" --disable-gallium --disable-gallium-nouveau --disable-gallium-i915 --disable-gallium-i965" MESA_CONFIG="$MESA_CONFIG --disable-gallium-radeon --disable-gallium-r600 --disable-gallium-svga" for drv in $GRAPHIC_DRIVERS; do @@ -34,7 +34,8 @@ for drv in $GRAPHIC_DRIVERS; do MESA_CONFIG=`echo $MESA_CONFIG | sed -e 's/disable-gallium-r600/disable-gallium-r600/'` [ $drv = nouveau ] && \ - MESA_CONFIG=`echo $MESA_CONFIG | sed -e 's/disable-gallium-nouveau/enable-gallium-nouveau/'` + MESA_CONFIG=`echo $MESA_CONFIG | sed -e 's/disable-gallium/enable-gallium/'` && \ + MESA_CONFIG=`echo $MESA_CONFIG | sed -e 's/disable-gallium-nouveau/enable-gallium-nouveau/'` && \ MESA_CONFIG="$MESA_CONFIG --with-state-trackers=dri,glx" done From 7c5ce32bc38ede5b22fe9f7683eb1541a311eb0f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 9 Nov 2010 10:04:32 +0100 Subject: [PATCH 069/850] mesa-master: disable build of gallium if not needed, fix build Signed-off-by: Stephan Raue --- packages/graphics/mesa-master/build | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/graphics/mesa-master/build b/packages/graphics/mesa-master/build index 225f51a30c..c609bd74af 100755 --- a/packages/graphics/mesa-master/build +++ b/packages/graphics/mesa-master/build @@ -17,7 +17,7 @@ $SCRIPTS/build libX11 get_graphicdrivers -MESA_CONFIG="--disable-gallium-nouveau --disable-gallium-i915 --disable-gallium-i965" +MESA_CONFIG=" --disable-gallium --disable-gallium-nouveau --disable-gallium-i915 --disable-gallium-i965" MESA_CONFIG="$MESA_CONFIG --disable-gallium-radeon --disable-gallium-r600 --disable-gallium-svga" for drv in $GRAPHIC_DRIVERS; do @@ -34,7 +34,8 @@ for drv in $GRAPHIC_DRIVERS; do MESA_CONFIG=`echo $MESA_CONFIG | sed -e 's/disable-gallium-r600/disable-gallium-r600/'` [ $drv = nouveau ] && \ - MESA_CONFIG=`echo $MESA_CONFIG | sed -e 's/disable-gallium-nouveau/enable-gallium-nouveau/'` + MESA_CONFIG=`echo $MESA_CONFIG | sed -e 's/disable-gallium/enable-gallium/'` && \ + MESA_CONFIG=`echo $MESA_CONFIG | sed -e 's/disable-gallium-nouveau/enable-gallium-nouveau/'` && \ MESA_CONFIG="$MESA_CONFIG --with-state-trackers=dri,glx" done From 2248df22b313fb65396dd01fb1810154ed45b5f3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 9 Nov 2010 10:05:24 +0100 Subject: [PATCH 070/850] linux: add patch to fix vmware drm build Signed-off-by: Stephan Raue --- ...rm_vmware_revert_abb295f3b3db602f91accf58b526b30b48673af1.diff | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 packages/linux/patches/201-linux-2.6.36-drm_vmware_revert_abb295f3b3db602f91accf58b526b30b48673af1.diff diff --git a/packages/linux/patches/201-linux-2.6.36-drm_vmware_revert_abb295f3b3db602f91accf58b526b30b48673af1.diff b/packages/linux/patches/201-linux-2.6.36-drm_vmware_revert_abb295f3b3db602f91accf58b526b30b48673af1.diff new file mode 100644 index 0000000000..e69de29bb2 From 66ce23e09e81df7792500613cc3813cb361f3512 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 9 Nov 2010 10:08:10 +0100 Subject: [PATCH 071/850] new package: add initial package 'xf86-video-vmware', enable on generic image Signed-off-by: Stephan Raue --- config/options | 11 ++++++++-- packages/x11/driver/xf86-video-vmware/build | 22 +++++++++++++++++++ packages/x11/driver/xf86-video-vmware/install | 6 +++++ packages/x11/driver/xf86-video-vmware/meta | 14 ++++++++++++ projects/ATV/options | 2 +- projects/ION/options | 6 ++--- projects/generic/options | 4 ++-- projects/intel/options | 4 ++-- 8 files changed, 59 insertions(+), 10 deletions(-) create mode 100755 packages/x11/driver/xf86-video-vmware/build create mode 100755 packages/x11/driver/xf86-video-vmware/install create mode 100644 packages/x11/driver/xf86-video-vmware/meta diff --git a/config/options b/config/options index d01e02ad60..b35207ce22 100644 --- a/config/options +++ b/config/options @@ -67,7 +67,7 @@ fi get_graphicdrivers() { if [ "$GRAPHIC_DRIVERS" = all ]; then - GRAPHIC_DRIVERS="i915 i965 r200 r300 r600 radeon nvidia" + GRAPHIC_DRIVERS="i915 i965 r200 r300 r600 radeon nvidia vmware" fi for drv in $GRAPHIC_DRIVERS; do @@ -78,6 +78,7 @@ get_graphicdrivers() { [ $drv = r600 ] && MESA_DRIVERS="$MESA_DRIVERS,r600" [ $drv = radeon ] && MESA_DRIVERS="$MESA_DRIVERS,radeon" [ $drv = nouveau ] && MESA_DRIVERS="$MESA_DRIVERS,nouveau" + [ $drv = vmware ] && MESA_DRIVERS="$MESA_DRIVERS,swrast" if [ $drv = i915 -o $drv = i965 ]; then XORG_DRIVERS="$XORG_DRIVERS intel" @@ -92,12 +93,18 @@ get_graphicdrivers() { if [ $drv = nouveau ]; then XORG_DRIVERS="$XORG_DRIVERS nouveau" DRM_DRIVERS="$DRM_DRIVERS nouveau" - fi + fi if [ $drv = nvidia ]; then XORG_DRIVERS="$XORG_DRIVERS nvidia" XINERAMA_SUPPORT="yes" fi + + if [ $drv = vmware ]; then + XORG_DRIVERS="$XORG_DRIVERS vmware" + DRM_DRIVERS="$DRM_DRIVERS vmware" + XINERAMA_SUPPORT="yes" + fi done } diff --git a/packages/x11/driver/xf86-video-vmware/build b/packages/x11/driver/xf86-video-vmware/build new file mode 100755 index 0000000000..ec6c131233 --- /dev/null +++ b/packages/x11/driver/xf86-video-vmware/build @@ -0,0 +1,22 @@ +#!/bin/sh + +. config/options $1 + +xorg_drv_configure_prepend + +PKG_CONFIG="$PKG_CONFIG --define-variable=sdkdir=$SYSROOT_PREFIX/usr/include/xorg" +CFLAGS="$CFLAGS -I$SYSROOT_PREFIX/usr/include/xorg/" + +cd $PKG_BUILD + +./configure --host=$TARGET_NAME \ + --build=$HOST_NAME \ + --prefix=/usr \ + --sysconfdir=/etc \ + --enable-shared \ + --disable-static \ + --with-xorg-module-dir=$XORG_PATH_MODULES + +make + +$MAKEINSTALL diff --git a/packages/x11/driver/xf86-video-vmware/install b/packages/x11/driver/xf86-video-vmware/install new file mode 100755 index 0000000000..3feff6eb80 --- /dev/null +++ b/packages/x11/driver/xf86-video-vmware/install @@ -0,0 +1,6 @@ +#!/bin/sh + +. config/options $1 + +mkdir -p $INSTALL/$XORG_PATH_MODULES/drivers + cp -P $PKG_BUILD/src/.libs/vmware_drv.so $INSTALL/$XORG_PATH_MODULES/drivers diff --git a/packages/x11/driver/xf86-video-vmware/meta b/packages/x11/driver/xf86-video-vmware/meta new file mode 100644 index 0000000000..be689104e7 --- /dev/null +++ b/packages/x11/driver/xf86-video-vmware/meta @@ -0,0 +1,14 @@ +PKG_NAME="xf86-video-vmware" +PKG_VERSION="11.0.2" +PKG_REV="1" +PKG_ARCH="i386 x86_64" +PKG_LICENSE="OSS" +PKG_SITE="http://vmware.com/" +PKG_URL="http://xorg.freedesktop.org/archive/individual/driver/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="libdrm" +PKG_BUILD_DEPENDS="toolchain util-macros libdrm libXrandr libXrender libXinerama xorg-server" +PKG_PRIORITY="optional" +PKG_SECTION="x11/driver" +PKG_SHORTDESC="xf86-video-vmware: The Xorg driver for VMware VM machines" +PKG_LONGDESC="The Xorg driver for VMware VM machines." +PKG_IS_ADDON="no" diff --git a/projects/ATV/options b/projects/ATV/options index 16b553d19e..ed063c7784 100644 --- a/projects/ATV/options +++ b/projects/ATV/options @@ -123,7 +123,7 @@ # Displayserver to use (xorg-server / no) DISPLAYSERVER="xorg-server" -# Graphic drivers to use (all / i915,i965,r200,r300,r600,radeon,nvidia,nouveau) +# Graphic drivers to use (all / i915,i965,r200,r300,r600,radeon,nvidia,nouveau,vmware) # Space separated list is supported, # e.g. GRAPHIC_DRIVERS="i915 i965 r300 r600 radeon nvidia nouveau" GRAPHIC_DRIVERS="nouveau" diff --git a/projects/ION/options b/projects/ION/options index d3d46829ec..94e0b060b8 100644 --- a/projects/ION/options +++ b/projects/ION/options @@ -123,9 +123,9 @@ # Displayserver to use (xorg-server / no) DISPLAYSERVER="xorg-server" -# Graphic drivers to use (all / i915,i965,r200,r300,r600,radeon,nvidia,nouveau) -# Space separated list is supported, -# e.g. GRAPHIC_DRIVERS="i915 i965 radeon nvidia nouveau" +# Graphic drivers to use (all / i915,i965,r200,r300,r600,radeon,nvidia,nouveau,vmware) +# Space separated list is supported, +# e.g. GRAPHIC_DRIVERS="i915 i965 r300 r600 radeon nvidia nouveau" GRAPHIC_DRIVERS="nvidia" # libdrm to use (libdrm / libdrm-master) diff --git a/projects/generic/options b/projects/generic/options index dbe34334e3..11160dd6ad 100644 --- a/projects/generic/options +++ b/projects/generic/options @@ -123,10 +123,10 @@ # Displayserver to use (xorg-server / no) DISPLAYSERVER="xorg-server" -# Graphic drivers to use (all / i915,i965,r200,r300,r600,radeon,nvidia,nouveau) +# Graphic drivers to use (all / i915,i965,r200,r300,r600,radeon,nvidia,nouveau,vmware) # Space separated list is supported, # e.g. GRAPHIC_DRIVERS="i915 i965 r300 r600 radeon nvidia nouveau" - GRAPHIC_DRIVERS="i915 i965 r200 r300 r600 radeon nvidia" + GRAPHIC_DRIVERS="i915 i965 r200 r300 r600 radeon nvidia vmware" # libdrm to use (libdrm / libdrm-master) LIBDRM="libdrm" diff --git a/projects/intel/options b/projects/intel/options index d468c5a483..98f6412268 100644 --- a/projects/intel/options +++ b/projects/intel/options @@ -123,9 +123,9 @@ # Displayserver to use (xorg-server / no) DISPLAYSERVER="xorg-server" -# Graphic drivers to use (all / i915,i965,r200,r300,r600,radeon,nvidia,nouveau) +# Graphic drivers to use (all / i915,i965,r200,r300,r600,radeon,nvidia,nouveau,vmware) # Space separated list is supported, -# e.g. GRAPHIC_DRIVERS="i915 i965 radeon nvidia nouveau" +# e.g. GRAPHIC_DRIVERS="i915 i965 r300 r600 radeon nvidia nouveau" GRAPHIC_DRIVERS="i965" # libdrm to use (libdrm / libdrm-master) From bed1a46bd4ee15f7b5f7eb856eacfdcb9f27cfeb Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 9 Nov 2010 10:10:00 +0100 Subject: [PATCH 072/850] config: add config for vmplayer Signed-off-by: Stephan Raue --- config/vmware/OpenELEC.nvram | Bin 0 -> 8684 bytes config/vmware/OpenELEC.vmx | 36 +++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 config/vmware/OpenELEC.nvram create mode 100755 config/vmware/OpenELEC.vmx diff --git a/config/vmware/OpenELEC.nvram b/config/vmware/OpenELEC.nvram new file mode 100644 index 0000000000000000000000000000000000000000..f9425122c0fe0a9d2d3a506a6a73fd814dde8813 GIT binary patch literal 8684 zcmeHI&1+m$6#w1#UMAynlK0ZYI&@0sS&O=;kkrwpB;tIfwa|Q!fLkY4p{0|u>mKF3l|Y8{sDa(rMQq#MT2ezTnJWh5Y#NjT+exLW)hTHHVEFs%sn6X zo^yZacP=xdlh2I_0EN-?es*kCsp;o3nZScF%DGlE@n<;o5&>l?QR#l#erJUUt=83wT~j}@s;Zw@ZK%7f0`;ql zl#R7b#M34BAY}weo)!!%tP?Hei}NzFrU*R?*WXX4mzU5DdD&c;5%Ldnp(dPCU)anM zF6I5J)QO&`)KG7$*1I=sBEZ9YHjyK-N)2qnW3^FNtJKHWb(Nw%zKi2L zoSD8hpl3U*PaX&hV-UTq8<@T2myyo4%ai+B$e!irLc+}^8QB3_CSc(LD$=d2xs||8 zSKE=c2=8z-3k)Fw!gcsXF295d`qExI2<3~tmm*FuOf0i-YJyVdX;^a8qR!j2y)x6; zYtxtaJakuaKigc1xjXw1DRF zh2qG)LFxgwZx}ll=XcD#wZ2*l?<t8dc`Xa+O` nngPv#WGz0%F244Le>(m)l literal 0 HcmV?d00001 diff --git a/config/vmware/OpenELEC.vmx b/config/vmware/OpenELEC.vmx new file mode 100755 index 0000000000..0cbe3bd59e --- /dev/null +++ b/config/vmware/OpenELEC.vmx @@ -0,0 +1,36 @@ +.encoding = "UTF-8" +config.version = "8" +virtualHW.version = "7" + +displayName = "OpenELEC.tv - VMWare build" +guestOS = "other26xlinux" +nvram = "OpenELEC.nvram" +numvcpus = "2" +memsize = "1024" +mks.enable3d = "TRUE" +virtualHW.productCompatibility = "hosted" + +ide0:0.present = "TRUE" +ide0:0.fileName = "OpenELEC.flash" +ide0:1.present = "TRUE" +ide0:1.fileName = "OpenELEC.storage" +ide1:0.present = "TRUE" +ide1:0.autodetect = "TRUE" +ide1:0.startConnected = "FALSE" +ide1:0.deviceType = "cdrom-raw" +ide1:1.present = "FALSE" +scsi0.present = "FALSE" +floppy0.present = "FALSE" + +ethernet0.present = "TRUE" +ethernet0.connectionType = "nat" +ethernet0.wakeOnPcktRcv = "FALSE" +ethernet0.addressType = "generated" + +usb.present = "TRUE" +ehci.present = "TRUE" + +sound.present = "TRUE" +sound.startConnected = "TRUE" +sound.fileName = "-1" +sound.autodetect = "TRUE" From 924c15da54feca4b3854d615dd04566053e3ea6b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 9 Nov 2010 10:11:20 +0100 Subject: [PATCH 073/850] xf86-video-intel: cleanup Signed-off-by: Stephan Raue --- packages/x11/driver/xf86-video-intel/build | 6 ------ packages/x11/driver/xf86-video-intel/install | 2 -- 2 files changed, 8 deletions(-) diff --git a/packages/x11/driver/xf86-video-intel/build b/packages/x11/driver/xf86-video-intel/build index e493baea35..731a110ba4 100755 --- a/packages/x11/driver/xf86-video-intel/build +++ b/packages/x11/driver/xf86-video-intel/build @@ -2,12 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build util-macros -$SCRIPTS/build fontsproto -$SCRIPTS/build udev -$SCRIPTS/build xorg-server - xorg_drv_configure_prepend PKG_CONFIG="$PKG_CONFIG --define-variable=sdkdir=$SYSROOT_PREFIX/usr/include/xorg" diff --git a/packages/x11/driver/xf86-video-intel/install b/packages/x11/driver/xf86-video-intel/install index 0f9f6f439a..d7bc1fa053 100755 --- a/packages/x11/driver/xf86-video-intel/install +++ b/packages/x11/driver/xf86-video-intel/install @@ -2,7 +2,5 @@ . config/options $1 -$SCRIPTS/install udev - mkdir -p $INSTALL/$XORG_PATH_MODULES/drivers cp -P $PKG_BUILD/src/.libs/intel_drv.so $INSTALL/$XORG_PATH_MODULES/drivers From 5dce7ace78e7d35742e3af9d688785733a6c4d69 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 9 Nov 2010 10:13:14 +0100 Subject: [PATCH 074/850] libdrm: add vmware support Signed-off-by: Stephan Raue --- packages/graphics/libdrm/build | 13 +++++++++---- packages/graphics/libdrm/install | 1 + 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/graphics/libdrm/build b/packages/graphics/libdrm/build index 60b0519d4c..bbb2a2e809 100755 --- a/packages/graphics/libdrm/build +++ b/packages/graphics/libdrm/build @@ -8,20 +8,25 @@ $SCRIPTS/build udev get_graphicdrivers -DRM_CONFIG="--disable-libkms --disable-intel --disable-radeon --disable-nouveau-experimental-api" +DRM_CONFIG="--disable-libkms --disable-intel --disable-radeon" +DRM_CONFIG="$DRM_CONFIG --disable-nouveau-experimental-api --enable-vmwgfx-experimental-api" for drv in $DRM_DRIVERS; do [ $drv = intel ] && \ - DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-libkms/enable-libkms/'` \ + DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-libkms/enable-libkms/'` && \ DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-intel/enable-intel/'` [ $drv = radeon ] && \ - DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-libkms/enable-libkms/'` \ + DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-libkms/enable-libkms/'` && \ DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-radeon/enable-radeon/'` [ $drv = nouveau ] && \ - DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-libkms/enable-libkms/'` \ + DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-libkms/enable-libkms/'` && \ DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-nouveau/enable-nouveau/'` + + [ $drv = vmware ] && \ + DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-libkms/enable-libkms/'` && \ + DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-vmwgfx-experimental-api/enable-vmwgfx-experimental-api/'` done export LIBUDEV_CFLAGS="-I`ls -d $ROOT/$BUILD/udev*`" diff --git a/packages/graphics/libdrm/install b/packages/graphics/libdrm/install index 28917ff085..10927ec1bc 100755 --- a/packages/graphics/libdrm/install +++ b/packages/graphics/libdrm/install @@ -9,6 +9,7 @@ mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/libkms/.libs/libkms.so* $INSTALL/usr/lib || true for drv in $DRM_DRIVERS; do + [ -f $PKG_BUILD/$drv/.libs/libdrm_$drv*.so* ] && \ cp -P $PKG_BUILD/$drv/.libs/libdrm_$drv*.so* $INSTALL/usr/lib rm -rf $INSTALL/usr/lib/libdrm_$drv*.so*T done From 1a6d65f647fd1a4c3a66aaa8cbf0f034262064c6 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 9 Nov 2010 10:13:22 +0100 Subject: [PATCH 075/850] libdrm-master: add vmware support Signed-off-by: Stephan Raue --- packages/graphics/libdrm-master/build | 13 +++++++++---- packages/graphics/libdrm-master/install | 1 + 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/graphics/libdrm-master/build b/packages/graphics/libdrm-master/build index 60b0519d4c..bbb2a2e809 100755 --- a/packages/graphics/libdrm-master/build +++ b/packages/graphics/libdrm-master/build @@ -8,20 +8,25 @@ $SCRIPTS/build udev get_graphicdrivers -DRM_CONFIG="--disable-libkms --disable-intel --disable-radeon --disable-nouveau-experimental-api" +DRM_CONFIG="--disable-libkms --disable-intel --disable-radeon" +DRM_CONFIG="$DRM_CONFIG --disable-nouveau-experimental-api --enable-vmwgfx-experimental-api" for drv in $DRM_DRIVERS; do [ $drv = intel ] && \ - DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-libkms/enable-libkms/'` \ + DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-libkms/enable-libkms/'` && \ DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-intel/enable-intel/'` [ $drv = radeon ] && \ - DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-libkms/enable-libkms/'` \ + DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-libkms/enable-libkms/'` && \ DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-radeon/enable-radeon/'` [ $drv = nouveau ] && \ - DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-libkms/enable-libkms/'` \ + DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-libkms/enable-libkms/'` && \ DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-nouveau/enable-nouveau/'` + + [ $drv = vmware ] && \ + DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-libkms/enable-libkms/'` && \ + DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-vmwgfx-experimental-api/enable-vmwgfx-experimental-api/'` done export LIBUDEV_CFLAGS="-I`ls -d $ROOT/$BUILD/udev*`" diff --git a/packages/graphics/libdrm-master/install b/packages/graphics/libdrm-master/install index 28917ff085..10927ec1bc 100755 --- a/packages/graphics/libdrm-master/install +++ b/packages/graphics/libdrm-master/install @@ -9,6 +9,7 @@ mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/libkms/.libs/libkms.so* $INSTALL/usr/lib || true for drv in $DRM_DRIVERS; do + [ -f $PKG_BUILD/$drv/.libs/libdrm_$drv*.so* ] && \ cp -P $PKG_BUILD/$drv/.libs/libdrm_$drv*.so* $INSTALL/usr/lib rm -rf $INSTALL/usr/lib/libdrm_$drv*.so*T done From aa4e4fbe34efbe3173bada1177295e83a2de89bf Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 9 Nov 2010 10:17:12 +0100 Subject: [PATCH 076/850] projects/generic/linux: add VMware DRM support Signed-off-by: Stephan Raue --- projects/generic/linux/linux.i386.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/generic/linux/linux.i386.conf b/projects/generic/linux/linux.i386.conf index 9598c23bdc..815793d1f8 100644 --- a/projects/generic/linux/linux.i386.conf +++ b/projects/generic/linux/linux.i386.conf @@ -90,7 +90,6 @@ CONFIG_BSD_PROCESS_ACCT=y # RCU Subsystem # CONFIG_TREE_RCU=y -# CONFIG_TREE_PREEMPT_RCU is not set # CONFIG_RCU_TRACE is not set CONFIG_RCU_FANOUT=32 # CONFIG_RCU_FANOUT_EXACT is not set @@ -1559,6 +1558,7 @@ CONFIG_FB_CFB_IMAGEBLIT=y # CONFIG_FB_SYS_IMAGEBLIT is not set # CONFIG_FB_FOREIGN_ENDIAN is not set # CONFIG_FB_SYS_FOPS is not set +CONFIG_FB_DEFERRED_IO=y # CONFIG_FB_SVGALIB is not set # CONFIG_FB_MACMODES is not set # CONFIG_FB_BACKLIGHT is not set @@ -2093,7 +2093,7 @@ CONFIG_RTL8192E=m # CONFIG_POHMELFS is not set # CONFIG_IDE_PHISON is not set # CONFIG_LINE6_USB is not set -# CONFIG_DRM_VMWGFX is not set +CONFIG_DRM_VMWGFX=y # CONFIG_DRM_NOUVEAU is not set # From 63aa203447b82f132b78e1543e513af0a8dd5092 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 9 Nov 2010 10:30:57 +0100 Subject: [PATCH 077/850] image: increase size from flash and storage partition on VM images Signed-off-by: Stephan Raue --- packages/image/install | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/image/install b/packages/image/install index 532460c3a8..4ab591bc6e 100755 --- a/packages/image/install +++ b/packages/image/install @@ -176,7 +176,7 @@ case "$2" in mkdir -p $TARGET_IMG rm -rf $TARGET_IMG/OpenELEC-$TARGET_VERSION-qemu.flash - qemu-img create -f raw $TARGET_IMG/OpenELEC-$TARGET_VERSION-qemu.flash 128M + qemu-img create -f raw $TARGET_IMG/OpenELEC-$TARGET_VERSION-qemu.flash 192M /sbin/mkfs.ext4 -L Boot -F $TARGET_IMG/OpenELEC-$TARGET_VERSION-qemu.flash mkdir -p $ROOT/.tmp @@ -185,7 +185,7 @@ case "$2" in sudo umount $ROOT/.tmp rm -rf $TARGET_IMG/OpenELEC-$TARGET_VERSION-qemu.storage - qemu-img create -f raw $TARGET_IMG/OpenELEC-$TARGET_VERSION-qemu.storage 500M + qemu-img create -f raw $TARGET_IMG/OpenELEC-$TARGET_VERSION-qemu.storage 1024M /sbin/mkfs.ext4 -L Storage -F $TARGET_IMG/OpenELEC-$TARGET_VERSION-qemu.storage ;; From 01c0d8dc6ab983fd0357a02e4d45ed4b07c3e961 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 10 Nov 2010 21:35:53 +0100 Subject: [PATCH 078/850] projects/*/linux: add Sunplus keyboard support Signed-off-by: Stephan Raue --- projects/ATV/linux/linux.i386.conf | 2 +- projects/ION/linux/linux.i386.conf | 2 +- projects/ION/linux/linux.x86_64.conf | 2 +- projects/generic/linux/linux.i386.conf | 2 +- projects/intel/linux/linux.i386.conf | 2 +- projects/intel/linux/linux.x86_64.conf | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/projects/ATV/linux/linux.i386.conf b/projects/ATV/linux/linux.i386.conf index f19c38ca8e..b48a65ba6e 100644 --- a/projects/ATV/linux/linux.i386.conf +++ b/projects/ATV/linux/linux.i386.conf @@ -1507,7 +1507,7 @@ CONFIG_HID_MICROSOFT=y # CONFIG_HID_SAMSUNG is not set CONFIG_HID_SONY=y # CONFIG_HID_STANTUM is not set -# CONFIG_HID_SUNPLUS is not set +CONFIG_HID_SUNPLUS=y # CONFIG_HID_GREENASIA is not set # CONFIG_HID_SMARTJOYPLUS is not set CONFIG_HID_TOPSEED=y diff --git a/projects/ION/linux/linux.i386.conf b/projects/ION/linux/linux.i386.conf index 7cf5f19736..cf704155c9 100644 --- a/projects/ION/linux/linux.i386.conf +++ b/projects/ION/linux/linux.i386.conf @@ -1671,7 +1671,7 @@ CONFIG_HID_MICROSOFT=y # CONFIG_HID_SAMSUNG is not set CONFIG_HID_SONY=y # CONFIG_HID_STANTUM is not set -# CONFIG_HID_SUNPLUS is not set +CONFIG_HID_SUNPLUS=y # CONFIG_HID_GREENASIA is not set # CONFIG_HID_SMARTJOYPLUS is not set CONFIG_HID_TOPSEED=y diff --git a/projects/ION/linux/linux.x86_64.conf b/projects/ION/linux/linux.x86_64.conf index a9dbfce058..a9aa1e7cfe 100644 --- a/projects/ION/linux/linux.x86_64.conf +++ b/projects/ION/linux/linux.x86_64.conf @@ -1605,7 +1605,7 @@ CONFIG_HID_MICROSOFT=y # CONFIG_HID_SAMSUNG is not set CONFIG_HID_SONY=y # CONFIG_HID_STANTUM is not set -# CONFIG_HID_SUNPLUS is not set +CONFIG_HID_SUNPLUS=y # CONFIG_HID_GREENASIA is not set # CONFIG_HID_SMARTJOYPLUS is not set CONFIG_HID_TOPSEED=y diff --git a/projects/generic/linux/linux.i386.conf b/projects/generic/linux/linux.i386.conf index 815793d1f8..1af277d288 100644 --- a/projects/generic/linux/linux.i386.conf +++ b/projects/generic/linux/linux.i386.conf @@ -1799,7 +1799,7 @@ CONFIG_HID_MICROSOFT=y # CONFIG_HID_SAMSUNG is not set CONFIG_HID_SONY=y # CONFIG_HID_STANTUM is not set -# CONFIG_HID_SUNPLUS is not set +CONFIG_HID_SUNPLUS=y # CONFIG_HID_GREENASIA is not set # CONFIG_HID_SMARTJOYPLUS is not set CONFIG_HID_TOPSEED=y diff --git a/projects/intel/linux/linux.i386.conf b/projects/intel/linux/linux.i386.conf index b24b37a744..2129182398 100644 --- a/projects/intel/linux/linux.i386.conf +++ b/projects/intel/linux/linux.i386.conf @@ -1643,7 +1643,7 @@ CONFIG_HID_MICROSOFT=y # CONFIG_HID_SAMSUNG is not set CONFIG_HID_SONY=y # CONFIG_HID_STANTUM is not set -# CONFIG_HID_SUNPLUS is not set +CONFIG_HID_SUNPLUS=y # CONFIG_HID_GREENASIA is not set # CONFIG_HID_SMARTJOYPLUS is not set CONFIG_HID_TOPSEED=y diff --git a/projects/intel/linux/linux.x86_64.conf b/projects/intel/linux/linux.x86_64.conf index a7ade788a5..6231b3e506 100644 --- a/projects/intel/linux/linux.x86_64.conf +++ b/projects/intel/linux/linux.x86_64.conf @@ -1579,7 +1579,7 @@ CONFIG_HID_MICROSOFT=y # CONFIG_HID_SAMSUNG is not set CONFIG_HID_SONY=y # CONFIG_HID_STANTUM is not set -# CONFIG_HID_SUNPLUS is not set +CONFIG_HID_SUNPLUS=y # CONFIG_HID_GREENASIA is not set # CONFIG_HID_SMARTJOYPLUS is not set CONFIG_HID_TOPSEED=y From d984f8482eabc48b822dad22c32e030e3f40cb0a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 10:10:39 +0100 Subject: [PATCH 079/850] Mesa: split package in 'Mesa' and 'Mesa-GL' package, enable vmware support Signed-off-by: Stephan Raue --- packages/graphics/Mesa-GL/build | 55 +++++++++++++++++++++++++++++++++ packages/graphics/Mesa/build | 15 +++++++-- packages/graphics/Mesa/install | 3 ++ packages/graphics/Mesa/url | 2 +- 4 files changed, 72 insertions(+), 3 deletions(-) create mode 100755 packages/graphics/Mesa-GL/build diff --git a/packages/graphics/Mesa-GL/build b/packages/graphics/Mesa-GL/build new file mode 100755 index 0000000000..abcd331ce4 --- /dev/null +++ b/packages/graphics/Mesa-GL/build @@ -0,0 +1,55 @@ +#!/bin/sh + +. config/options $1 + +$SCRIPTS/unpack $MESA +$SCRIPTS/build libxml2-host +$SCRIPTS/build talloc +$SCRIPTS/build expat +$SCRIPTS/build glproto +$SCRIPTS/build dri2proto +$SCRIPTS/build $LIBDRM +$SCRIPTS/build libXext +$SCRIPTS/build libXdamage +$SCRIPTS/build libXfixes +$SCRIPTS/build libXxf86vm +$SCRIPTS/build libxcb +$SCRIPTS/build libX11 + +cd $BUILD/$MESA* +./configure --host=$TARGET_NAME \ + --build=$HOST_NAME \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --disable-static \ + --enable-shared \ + --disable-debug \ + --disable-selinux \ + --enable-xcb \ + --disable-glx-tls \ + --enable-driglx-direct \ + --disable-egl \ + --disable-glu \ + --disable-gl-osmesa \ + --disable-glut \ + --disable-glw \ + --disable-motif \ + --with-driver=dri \ + --disable-gallium + + make -C src/glx + make -C src/mesa gl.pc + make -C src/mesa/drivers/dri dri.pc + + mkdir -p $SYSROOT_PREFIX/usr/include/GL + cp include/GL/*.h $SYSROOT_PREFIX/usr/include/GL + mkdir -p $SYSROOT_PREFIX/usr/lib + cp -P lib/libGL.so* $SYSROOT_PREFIX/usr/lib/pkgconfig + mkdir -p $SYSROOT_PREFIX/usr/lib/pkgconfig + cp src/mesa/gl.pc $SYSROOT_PREFIX/usr/lib/pkgconfig + + mkdir -p $SYSROOT_PREFIX/usr/include/GL/internal + cp include/GL/internal/dri_interface.h $SYSROOT_PREFIX/usr/include/GL/internal + mkdir -p $SYSROOT_PREFIX/usr/lib/pkgconfig + cp src/mesa/drivers/dri/dri.pc $SYSROOT_PREFIX/usr/lib/pkgconfig diff --git a/packages/graphics/Mesa/build b/packages/graphics/Mesa/build index c609bd74af..a8be0a76fc 100755 --- a/packages/graphics/Mesa/build +++ b/packages/graphics/Mesa/build @@ -14,11 +14,15 @@ $SCRIPTS/build libXfixes $SCRIPTS/build libXxf86vm $SCRIPTS/build libxcb $SCRIPTS/build libX11 +$SCRIPTS/build xorg-server get_graphicdrivers +# dont use strip because of use from mklib + LDFLAGS=`echo $LDFLAGS | sed -e "s|-s||"` + MESA_CONFIG=" --disable-gallium --disable-gallium-nouveau --disable-gallium-i915 --disable-gallium-i965" -MESA_CONFIG="$MESA_CONFIG --disable-gallium-radeon --disable-gallium-r600 --disable-gallium-svga" +MESA_CONFIG="$MESA_CONFIG --disable-gallium-radeon --disable-gallium-r600 --disable-gallium-svga --disable-gallium-swrast" for drv in $GRAPHIC_DRIVERS; do [ $drv = i915 ] && \ @@ -36,11 +40,18 @@ for drv in $GRAPHIC_DRIVERS; do [ $drv = nouveau ] && \ MESA_CONFIG=`echo $MESA_CONFIG | sed -e 's/disable-gallium/enable-gallium/'` && \ MESA_CONFIG=`echo $MESA_CONFIG | sed -e 's/disable-gallium-nouveau/enable-gallium-nouveau/'` && \ - MESA_CONFIG="$MESA_CONFIG --with-state-trackers=dri,glx" + MESA_CONFIG="$MESA_CONFIG --with-state-trackers=dri,glx,xorg" + + [ $drv = vmware ] && \ + MESA_CONFIG=`echo $MESA_CONFIG | sed -e 's/disable-gallium/enable-gallium/'` && \ + MESA_CONFIG=`echo $MESA_CONFIG | sed -e 's/disable-gallium-svga/enable-gallium-svga/'` && \ + MESA_CONFIG="$MESA_CONFIG --with-state-trackers=dri,glx,xorg" done cd $PKG_BUILD +make clean + HOST_CC=$HOST_CC \ HOST_OPT_FLAGS="$HOST_CFLAGS" \ X11_INCLUDES= \ diff --git a/packages/graphics/Mesa/install b/packages/graphics/Mesa/install index ee241f4e41..8ee9847a75 100755 --- a/packages/graphics/Mesa/install +++ b/packages/graphics/Mesa/install @@ -21,3 +21,6 @@ mkdir -p $INSTALL/usr/lib mkdir -p $INSTALL/usr/lib/dri cp -P $PKG_BUILD/lib/*_dri.so $INSTALL/usr/lib/dri || true cp -P $PKG_BUILD/lib/gallium/*_dri.so $INSTALL/usr/lib/dri || true + +mkdir -p $INSTALL/usr/lib/xorg/modules/drivers + cp -P $PKG_BUILD/lib/gallium/*_drv.so $INSTALL/usr/lib/xorg/modules/drivers || true diff --git a/packages/graphics/Mesa/url b/packages/graphics/Mesa/url index 6441adc9ea..15170d3fc0 100644 --- a/packages/graphics/Mesa/url +++ b/packages/graphics/Mesa/url @@ -1 +1 @@ -ftp://freedesktop.org/pub/mesa/7.9/MesaLib-7.9.tar.bz2 \ No newline at end of file +http://sources.openelec.tv/svn/Mesa-7.9.1-20101109.tar.bz2 \ No newline at end of file From 84838d356485a0f1cdd02b818b33f6baa072fe94 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 10:11:14 +0100 Subject: [PATCH 080/850] mesa-master: split package in 'mesa-master' and 'mesa-master-GL' package, enable vmware support Signed-off-by: Stephan Raue --- packages/graphics/mesa-master-GL/build | 55 ++++++++++++++++++++++++++ packages/graphics/mesa-master/build | 15 ++++++- packages/graphics/mesa-master/install | 3 ++ 3 files changed, 71 insertions(+), 2 deletions(-) create mode 100755 packages/graphics/mesa-master-GL/build diff --git a/packages/graphics/mesa-master-GL/build b/packages/graphics/mesa-master-GL/build new file mode 100755 index 0000000000..abcd331ce4 --- /dev/null +++ b/packages/graphics/mesa-master-GL/build @@ -0,0 +1,55 @@ +#!/bin/sh + +. config/options $1 + +$SCRIPTS/unpack $MESA +$SCRIPTS/build libxml2-host +$SCRIPTS/build talloc +$SCRIPTS/build expat +$SCRIPTS/build glproto +$SCRIPTS/build dri2proto +$SCRIPTS/build $LIBDRM +$SCRIPTS/build libXext +$SCRIPTS/build libXdamage +$SCRIPTS/build libXfixes +$SCRIPTS/build libXxf86vm +$SCRIPTS/build libxcb +$SCRIPTS/build libX11 + +cd $BUILD/$MESA* +./configure --host=$TARGET_NAME \ + --build=$HOST_NAME \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --disable-static \ + --enable-shared \ + --disable-debug \ + --disable-selinux \ + --enable-xcb \ + --disable-glx-tls \ + --enable-driglx-direct \ + --disable-egl \ + --disable-glu \ + --disable-gl-osmesa \ + --disable-glut \ + --disable-glw \ + --disable-motif \ + --with-driver=dri \ + --disable-gallium + + make -C src/glx + make -C src/mesa gl.pc + make -C src/mesa/drivers/dri dri.pc + + mkdir -p $SYSROOT_PREFIX/usr/include/GL + cp include/GL/*.h $SYSROOT_PREFIX/usr/include/GL + mkdir -p $SYSROOT_PREFIX/usr/lib + cp -P lib/libGL.so* $SYSROOT_PREFIX/usr/lib/pkgconfig + mkdir -p $SYSROOT_PREFIX/usr/lib/pkgconfig + cp src/mesa/gl.pc $SYSROOT_PREFIX/usr/lib/pkgconfig + + mkdir -p $SYSROOT_PREFIX/usr/include/GL/internal + cp include/GL/internal/dri_interface.h $SYSROOT_PREFIX/usr/include/GL/internal + mkdir -p $SYSROOT_PREFIX/usr/lib/pkgconfig + cp src/mesa/drivers/dri/dri.pc $SYSROOT_PREFIX/usr/lib/pkgconfig diff --git a/packages/graphics/mesa-master/build b/packages/graphics/mesa-master/build index c609bd74af..a8be0a76fc 100755 --- a/packages/graphics/mesa-master/build +++ b/packages/graphics/mesa-master/build @@ -14,11 +14,15 @@ $SCRIPTS/build libXfixes $SCRIPTS/build libXxf86vm $SCRIPTS/build libxcb $SCRIPTS/build libX11 +$SCRIPTS/build xorg-server get_graphicdrivers +# dont use strip because of use from mklib + LDFLAGS=`echo $LDFLAGS | sed -e "s|-s||"` + MESA_CONFIG=" --disable-gallium --disable-gallium-nouveau --disable-gallium-i915 --disable-gallium-i965" -MESA_CONFIG="$MESA_CONFIG --disable-gallium-radeon --disable-gallium-r600 --disable-gallium-svga" +MESA_CONFIG="$MESA_CONFIG --disable-gallium-radeon --disable-gallium-r600 --disable-gallium-svga --disable-gallium-swrast" for drv in $GRAPHIC_DRIVERS; do [ $drv = i915 ] && \ @@ -36,11 +40,18 @@ for drv in $GRAPHIC_DRIVERS; do [ $drv = nouveau ] && \ MESA_CONFIG=`echo $MESA_CONFIG | sed -e 's/disable-gallium/enable-gallium/'` && \ MESA_CONFIG=`echo $MESA_CONFIG | sed -e 's/disable-gallium-nouveau/enable-gallium-nouveau/'` && \ - MESA_CONFIG="$MESA_CONFIG --with-state-trackers=dri,glx" + MESA_CONFIG="$MESA_CONFIG --with-state-trackers=dri,glx,xorg" + + [ $drv = vmware ] && \ + MESA_CONFIG=`echo $MESA_CONFIG | sed -e 's/disable-gallium/enable-gallium/'` && \ + MESA_CONFIG=`echo $MESA_CONFIG | sed -e 's/disable-gallium-svga/enable-gallium-svga/'` && \ + MESA_CONFIG="$MESA_CONFIG --with-state-trackers=dri,glx,xorg" done cd $PKG_BUILD +make clean + HOST_CC=$HOST_CC \ HOST_OPT_FLAGS="$HOST_CFLAGS" \ X11_INCLUDES= \ diff --git a/packages/graphics/mesa-master/install b/packages/graphics/mesa-master/install index ee241f4e41..8ee9847a75 100755 --- a/packages/graphics/mesa-master/install +++ b/packages/graphics/mesa-master/install @@ -21,3 +21,6 @@ mkdir -p $INSTALL/usr/lib mkdir -p $INSTALL/usr/lib/dri cp -P $PKG_BUILD/lib/*_dri.so $INSTALL/usr/lib/dri || true cp -P $PKG_BUILD/lib/gallium/*_dri.so $INSTALL/usr/lib/dri || true + +mkdir -p $INSTALL/usr/lib/xorg/modules/drivers + cp -P $PKG_BUILD/lib/gallium/*_drv.so $INSTALL/usr/lib/xorg/modules/drivers || true From af296d5902f8555c9c74f01581a86291ca69551f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 10:11:50 +0100 Subject: [PATCH 081/850] xorg-server: depends on Mesa-GL Signed-off-by: Stephan Raue --- packages/x11/xserver/xorg-server/build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/x11/xserver/xorg-server/build b/packages/x11/xserver/xorg-server/build index a289ffac39..9f615046b0 100755 --- a/packages/x11/xserver/xorg-server/build +++ b/packages/x11/xserver/xorg-server/build @@ -25,7 +25,7 @@ $SCRIPTS/build libX11 $SCRIPTS/build libXfont $SCRIPTS/build libxkbfile $SCRIPTS/build $LIBDRM -$SCRIPTS/build $MESA +$SCRIPTS/build ${MESA}-GL $SCRIPTS/build openssl $SCRIPTS/build freetype $SCRIPTS/build pixman From 7369f2efaea98ebe4c833ed4975dbfe4030cf90c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 10:12:32 +0100 Subject: [PATCH 082/850] libxcb: install all libxcb libs Signed-off-by: Stephan Raue --- packages/x11/lib/libxcb/install | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/x11/lib/libxcb/install b/packages/x11/lib/libxcb/install index 96380926c9..70ba8769a4 100755 --- a/packages/x11/lib/libxcb/install +++ b/packages/x11/lib/libxcb/install @@ -4,5 +4,5 @@ mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/src/.libs/libxcb.so* $INSTALL/usr/lib - cp -P $PKG_BUILD/src/.libs/libxcb-glx*.so* $INSTALL/usr/lib - rm -rf $INSTALL/usr/lib/libxcb-glx*.so*T + cp -P $PKG_BUILD/src/.libs/libxcb-*.so* $INSTALL/usr/lib + rm -rf $INSTALL/usr/lib/libxcb-*.so*T From 1c0f1346361d433cfe3b8ad3c754bc9f02d52c51 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 10:13:15 +0100 Subject: [PATCH 083/850] libXinerama: depends on libXext Signed-off-by: Stephan Raue --- packages/x11/lib/libXinerama/build | 1 + packages/x11/lib/libXinerama/install | 2 ++ 2 files changed, 3 insertions(+) diff --git a/packages/x11/lib/libXinerama/build b/packages/x11/lib/libXinerama/build index 63ab168a12..81c4dc234b 100755 --- a/packages/x11/lib/libXinerama/build +++ b/packages/x11/lib/libXinerama/build @@ -4,6 +4,7 @@ $SCRIPTS/build toolchain $SCRIPTS/build xineramaproto +$SCRIPTS/build libXext cd $PKG_BUILD ./configure --host=$TARGET_NAME \ diff --git a/packages/x11/lib/libXinerama/install b/packages/x11/lib/libXinerama/install index 59a735032f..50a708b117 100755 --- a/packages/x11/lib/libXinerama/install +++ b/packages/x11/lib/libXinerama/install @@ -2,5 +2,7 @@ . config/options $1 +$SCRIPTS/install libXext + mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/src/.libs/libXinerama.so* $INSTALL/usr/lib From ee55434f932e6e675624c2244e7e945ebfa02a95 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 10:15:22 +0100 Subject: [PATCH 084/850] xf86-video-vmware: remove package Signed-off-by: Stephan Raue --- config/options | 2 -- packages/x11/driver/xf86-video-vmware/build | 22 ------------------- packages/x11/driver/xf86-video-vmware/install | 6 ----- packages/x11/driver/xf86-video-vmware/meta | 14 ------------ 4 files changed, 44 deletions(-) delete mode 100755 packages/x11/driver/xf86-video-vmware/build delete mode 100755 packages/x11/driver/xf86-video-vmware/install delete mode 100644 packages/x11/driver/xf86-video-vmware/meta diff --git a/config/options b/config/options index b35207ce22..3e3fb8b500 100644 --- a/config/options +++ b/config/options @@ -78,7 +78,6 @@ get_graphicdrivers() { [ $drv = r600 ] && MESA_DRIVERS="$MESA_DRIVERS,r600" [ $drv = radeon ] && MESA_DRIVERS="$MESA_DRIVERS,radeon" [ $drv = nouveau ] && MESA_DRIVERS="$MESA_DRIVERS,nouveau" - [ $drv = vmware ] && MESA_DRIVERS="$MESA_DRIVERS,swrast" if [ $drv = i915 -o $drv = i965 ]; then XORG_DRIVERS="$XORG_DRIVERS intel" @@ -101,7 +100,6 @@ get_graphicdrivers() { fi if [ $drv = vmware ]; then - XORG_DRIVERS="$XORG_DRIVERS vmware" DRM_DRIVERS="$DRM_DRIVERS vmware" XINERAMA_SUPPORT="yes" fi diff --git a/packages/x11/driver/xf86-video-vmware/build b/packages/x11/driver/xf86-video-vmware/build deleted file mode 100755 index ec6c131233..0000000000 --- a/packages/x11/driver/xf86-video-vmware/build +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/sh - -. config/options $1 - -xorg_drv_configure_prepend - -PKG_CONFIG="$PKG_CONFIG --define-variable=sdkdir=$SYSROOT_PREFIX/usr/include/xorg" -CFLAGS="$CFLAGS -I$SYSROOT_PREFIX/usr/include/xorg/" - -cd $PKG_BUILD - -./configure --host=$TARGET_NAME \ - --build=$HOST_NAME \ - --prefix=/usr \ - --sysconfdir=/etc \ - --enable-shared \ - --disable-static \ - --with-xorg-module-dir=$XORG_PATH_MODULES - -make - -$MAKEINSTALL diff --git a/packages/x11/driver/xf86-video-vmware/install b/packages/x11/driver/xf86-video-vmware/install deleted file mode 100755 index 3feff6eb80..0000000000 --- a/packages/x11/driver/xf86-video-vmware/install +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -. config/options $1 - -mkdir -p $INSTALL/$XORG_PATH_MODULES/drivers - cp -P $PKG_BUILD/src/.libs/vmware_drv.so $INSTALL/$XORG_PATH_MODULES/drivers diff --git a/packages/x11/driver/xf86-video-vmware/meta b/packages/x11/driver/xf86-video-vmware/meta deleted file mode 100644 index be689104e7..0000000000 --- a/packages/x11/driver/xf86-video-vmware/meta +++ /dev/null @@ -1,14 +0,0 @@ -PKG_NAME="xf86-video-vmware" -PKG_VERSION="11.0.2" -PKG_REV="1" -PKG_ARCH="i386 x86_64" -PKG_LICENSE="OSS" -PKG_SITE="http://vmware.com/" -PKG_URL="http://xorg.freedesktop.org/archive/individual/driver/$PKG_NAME-$PKG_VERSION.tar.bz2" -PKG_DEPENDS="libdrm" -PKG_BUILD_DEPENDS="toolchain util-macros libdrm libXrandr libXrender libXinerama xorg-server" -PKG_PRIORITY="optional" -PKG_SECTION="x11/driver" -PKG_SHORTDESC="xf86-video-vmware: The Xorg driver for VMware VM machines" -PKG_LONGDESC="The Xorg driver for VMware VM machines." -PKG_IS_ADDON="no" From fc1c0f7cf93b6700bdf9a0874da6ddc4f3ff1b42 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 10:30:53 +0100 Subject: [PATCH 085/850] config/release: split in 'config/release' and 'config/image' Signed-off-by: Stephan Raue --- config/{release => image}/README | 0 config/release/sample.conf/extlinux.conf | 8 +------- config/release/sample.conf/grub.conf | 10 +--------- config/release/sample.conf/syslinux.cfg | 8 +------- 4 files changed, 3 insertions(+), 23 deletions(-) rename config/{release => image}/README (100%) diff --git a/config/release/README b/config/image/README similarity index 100% rename from config/release/README rename to config/image/README diff --git a/config/release/sample.conf/extlinux.conf b/config/release/sample.conf/extlinux.conf index 851f2592d7..2a52c077cb 100644 --- a/config/release/sample.conf/extlinux.conf +++ b/config/release/sample.conf/extlinux.conf @@ -3,10 +3,4 @@ PROMPT 0 LABEL linux KERNEL /KERNEL - APPEND boot=/dev/sda1 disk=/dev/sdb2 quiet -LABEL text - KERNEL /KERNEL - APPEND boot=/dev/sda1 disk=/dev/sdb2 quiet textmode -LABEL debug - KERNEL /KERNEL - APPEND boot=/dev/sda1 disk=/dev/sdb2 quiet textmode debugging + APPEND boot=LABEL=BOOT disk=LABEL=STORAGE quiet diff --git a/config/release/sample.conf/grub.conf b/config/release/sample.conf/grub.conf index 6e5711f0bc..3cf75126be 100644 --- a/config/release/sample.conf/grub.conf +++ b/config/release/sample.conf/grub.conf @@ -4,12 +4,4 @@ hiddenmenu title OpenELEC.tv root (hd0,0) - kernel /KERNEL boot=/dev/sda1 disk=/dev/sda2 quiet - -title OpenELEC.tv (Textmode) - root (hd0,0) - kernel /KERNEL boot=/dev/sda1 disk=/dev/sda2 textmode quiet - -title OpenELEC.tv (Debugmode) - root (hd0,0) - kernel /KERNEL boot=/dev/sda1 disk=/dev/sda2 debugging textmode quiet + kernel /KERNEL boot=LABEL=BOOT disk=LABEL=STORAGE quiet diff --git a/config/release/sample.conf/syslinux.cfg b/config/release/sample.conf/syslinux.cfg index 804ae866c2..7fbc8700c2 100644 --- a/config/release/sample.conf/syslinux.cfg +++ b/config/release/sample.conf/syslinux.cfg @@ -3,10 +3,4 @@ PROMPT 0 LABEL linux KERNEL /KERNEL - APPEND boot=/dev/sda1 disk=/dev/sdb2 quiet -LABEL text - KERNEL /KERNEL - APPEND boot=/dev/sda1 disk=/dev/sdb2 quiet textmode -LABEL debug - KERNEL /KERNEL - APPEND boot=/dev/sda1 disk=/dev/sdb2 quiet textmode debugging + APPEND boot=LABEL=BOOT disk=LABEL=STORAGE quiet From ea7c4376c3cc18cef5764e75ec14492d342a93bb Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 14:40:02 +0100 Subject: [PATCH 086/850] sed: merge 'install' script to 'build' script, remove 'unpack' script Signed-off-by: Stephan Raue --- packages/toolchain/sed/build | 3 +-- packages/toolchain/sed/install | 5 ----- packages/toolchain/sed/unpack | 6 ------ 3 files changed, 1 insertion(+), 13 deletions(-) delete mode 100755 packages/toolchain/sed/install delete mode 100755 packages/toolchain/sed/unpack diff --git a/packages/toolchain/sed/build b/packages/toolchain/sed/build index ced5964f48..243f0a72a3 100755 --- a/packages/toolchain/sed/build +++ b/packages/toolchain/sed/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/install ccache - setup_toolchain host cd $PKG_BUILD @@ -12,3 +10,4 @@ cd $PKG_BUILD --prefix=$ROOT/$TOOLCHAIN \ --disable-nls make +make -C sed install diff --git a/packages/toolchain/sed/install b/packages/toolchain/sed/install deleted file mode 100755 index 0d16970743..0000000000 --- a/packages/toolchain/sed/install +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -. config/options $1 - -make -C $PKG_BUILD/$1 install diff --git a/packages/toolchain/sed/unpack b/packages/toolchain/sed/unpack deleted file mode 100755 index 057c199c26..0000000000 --- a/packages/toolchain/sed/unpack +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -. config/options $1 - -$SCRIPTS/fixconfigtools $PKG_BUILD/config - From fb8922862bcfa8719bab24dea28a74c0c37e0631 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 14:41:03 +0100 Subject: [PATCH 087/850] squashfs: remove 'install' script Signed-off-by: Stephan Raue --- packages/toolchain/sysutils/squashfs/install | 6 ------ 1 file changed, 6 deletions(-) delete mode 100755 packages/toolchain/sysutils/squashfs/install diff --git a/packages/toolchain/sysutils/squashfs/install b/packages/toolchain/sysutils/squashfs/install deleted file mode 100755 index 40df218cf0..0000000000 --- a/packages/toolchain/sysutils/squashfs/install +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -. config/options $1 - -mkdir -p $ROOT/$TOOLCHAIN/bin - cp -rf $BUILD/$1*/squashfs-tools/mksquashfs $ROOT/$TOOLCHAIN/bin From 3ae9deead9b99b45ac7e666188ff535163393c51 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 14:42:59 +0100 Subject: [PATCH 088/850] ccache: merge 'install' script to 'build' script Signed-off-by: Stephan Raue --- packages/toolchain/devel/ccache/build | 17 +++++++++++-- packages/toolchain/devel/ccache/install | 34 ------------------------- packages/toolchain/lang/gcc-final/build | 25 ++++++++++++++++++ 3 files changed, 40 insertions(+), 36 deletions(-) delete mode 100755 packages/toolchain/devel/ccache/install diff --git a/packages/toolchain/devel/ccache/build b/packages/toolchain/devel/ccache/build index 144fd6c4cb..4b29061140 100755 --- a/packages/toolchain/devel/ccache/build +++ b/packages/toolchain/devel/ccache/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/install make - setup_toolchain host CC=$LOCAL_CC @@ -12,3 +10,18 @@ cd $PKG_BUILD --build=$HOST_NAME \ --prefix=$ROOT/$TOOLCHAIN make + +mkdir -p $ROOT/$TOOLCHAIN/bin + cp -f ccache $ROOT/$TOOLCHAIN/bin + +cat > $HOST_CC < $HOST_CXX <$TARGET_CC - echo "$ROOT/$TOOLCHAIN/bin/ccache $CROSS_CC \"\$@\"" >>$TARGET_CC - chmod +x $TARGET_CC - # To avoid cache trashing - DATE="0501`echo $GCC_VERSION | sed 's/\([0-9]\)/0\1/g' | sed 's/\.//g'`" - touch -c -t $DATE $CROSS_CC - - CROSS_CXX=$TARGET_CXX-$GCC_VERSION - if [ -f "$TARGET_CXX" ]; then - [ ! -f "$CROSS_CXX" ] && mv $TARGET_CXX $CROSS_CXX - echo "#!/bin/sh" >$TARGET_CXX - echo "$ROOT/$TOOLCHAIN/bin/ccache $CROSS_CXX \"\$@\"" >>$TARGET_CXX - chmod +x $TARGET_CXX - # To avoid cache trashing - touch -c -t $DATE $CROSS_CXX - fi -else - echo "#!/bin/sh" >$HOST_CC - echo "$ROOT/$TOOLCHAIN/bin/ccache $LOCAL_CC \"\$@\"" >>$HOST_CC - chmod +x $HOST_CC - echo "#!/bin/sh" >$HOST_CXX - echo "$ROOT/$TOOLCHAIN/bin/ccache $LOCAL_CXX \"\$@\"" >>$HOST_CXX - chmod +x $HOST_CXX -fi diff --git a/packages/toolchain/lang/gcc-final/build b/packages/toolchain/lang/gcc-final/build index 8a1690bfc9..a6ed772902 100755 --- a/packages/toolchain/lang/gcc-final/build +++ b/packages/toolchain/lang/gcc-final/build @@ -2,6 +2,7 @@ . config/options $1 +$SCRIPTS/build ccache $SCRIPTS/build binutils $SCRIPTS/build gmp $SCRIPTS/build mpfr @@ -51,3 +52,27 @@ make make install cp -PR $TARGET_NAME/libstdc++-v3/src/.libs/libstdc++.so* $SYSROOT_PREFIX/usr/lib +GCC_VERSION=`$ROOT/$TOOLCHAIN/$TARGET_NAME/bin/gcc -dumpversion` +DATE="0501`echo $GCC_VERSION | sed 's/\([0-9]\)/0\1/g' | sed 's/\.//g'`" +CROSS_CC=$TARGET_CC-$GCC_VERSION +CROSS_CXX=$TARGET_CXX-$GCC_VERSION + +rm -f $TARGET_CC +cat > $TARGET_CC < $TARGET_CXX < Date: Thu, 11 Nov 2010 14:43:39 +0100 Subject: [PATCH 089/850] ppl: dont depend on 'ccache' Signed-off-by: Stephan Raue --- packages/toolchain/math/ppl/build | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/toolchain/math/ppl/build b/packages/toolchain/math/ppl/build index 15fc83add8..dda849a29c 100755 --- a/packages/toolchain/math/ppl/build +++ b/packages/toolchain/math/ppl/build @@ -2,7 +2,6 @@ . config/options $1 -$SCRIPTS/install ccache $SCRIPTS/build gmp setup_toolchain host From 75754af63b10947f47168a2a2ad297e3a2d3e410 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 14:44:02 +0100 Subject: [PATCH 090/850] mpfr: dont depend on 'ccache' Signed-off-by: Stephan Raue --- packages/toolchain/math/mpfr/build | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/toolchain/math/mpfr/build b/packages/toolchain/math/mpfr/build index e9ad23a24e..da092b3f9a 100755 --- a/packages/toolchain/math/mpfr/build +++ b/packages/toolchain/math/mpfr/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/install ccache - setup_toolchain host cd $PKG_BUILD From f9f45e6cc4f4f04c6b43fe09d1a41f666a4b953e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 14:44:11 +0100 Subject: [PATCH 091/850] mpc: dont depend on 'ccache' Signed-off-by: Stephan Raue --- packages/toolchain/math/mpc/build | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/toolchain/math/mpc/build b/packages/toolchain/math/mpc/build index d892eb088d..a5889c1211 100755 --- a/packages/toolchain/math/mpc/build +++ b/packages/toolchain/math/mpc/build @@ -2,7 +2,6 @@ . config/options $1 -$SCRIPTS/install ccache $SCRIPTS/build gmp $SCRIPTS/build mpfr From 48f842489eeab3b9dd826189c0332d9b13d0b455 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 14:44:24 +0100 Subject: [PATCH 092/850] gmp: dont depend on 'ccache' Signed-off-by: Stephan Raue --- packages/toolchain/math/gmp/build | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/toolchain/math/gmp/build b/packages/toolchain/math/gmp/build index f63b5258d8..b841675bc1 100755 --- a/packages/toolchain/math/gmp/build +++ b/packages/toolchain/math/gmp/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/install ccache - setup_toolchain host export CFLAGS="$CFLAGS -fPIC" From 5fd7750cbc21a55fe48100d3d90790ca4e549564 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 14:44:37 +0100 Subject: [PATCH 093/850] cloog-ppl: dont depend on 'ccache' Signed-off-by: Stephan Raue --- packages/toolchain/math/cloog-ppl/build | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/toolchain/math/cloog-ppl/build b/packages/toolchain/math/cloog-ppl/build index f29fd10672..a8bb36ae72 100755 --- a/packages/toolchain/math/cloog-ppl/build +++ b/packages/toolchain/math/cloog-ppl/build @@ -2,7 +2,6 @@ . config/options $1 -$SCRIPTS/install ccache $SCRIPTS/build gmp $SCRIPTS/build ppl From a9717c6ef9a8c727b22594a51f7a16e70b4477b4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 14:45:13 +0100 Subject: [PATCH 094/850] gcc-core: dont depend on 'ccache' Signed-off-by: Stephan Raue --- packages/toolchain/lang/gcc-core/build | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/toolchain/lang/gcc-core/build b/packages/toolchain/lang/gcc-core/build index e74de3c800..4580b2f764 100755 --- a/packages/toolchain/lang/gcc-core/build +++ b/packages/toolchain/lang/gcc-core/build @@ -2,7 +2,6 @@ . config/options $1 -$SCRIPTS/install ccache $SCRIPTS/build binutils $SCRIPTS/build gmp $SCRIPTS/build mpfr From 8aed65ca9eb2410dd2af99b8b08dd75cbf813541 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 14:45:28 +0100 Subject: [PATCH 095/850] gcc-final: cleanups Signed-off-by: Stephan Raue --- packages/toolchain/lang/gcc-final/install | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/toolchain/lang/gcc-final/install b/packages/toolchain/lang/gcc-final/install index 23183e19b4..188a4ebf56 100755 --- a/packages/toolchain/lang/gcc-final/install +++ b/packages/toolchain/lang/gcc-final/install @@ -3,6 +3,6 @@ . config/options $1 mkdir -p $INSTALL/usr/lib -cp -PR $BUILD/gcc*/objdir-$1*/$TARGET_NAME/libgcc/libgcc_s.so* $INSTALL/usr/lib -cp -PR $BUILD/gcc*/objdir-$1*/$TARGET_NAME/libgomp/.libs/libgomp.so* $INSTALL/usr/lib -cp -PR $BUILD/gcc*/objdir-$1*/$TARGET_NAME/libstdc++-v3/src/.libs/libstdc++.so* $INSTALL/usr/lib + cp -P $BUILD/gcc*/objdir-$1*/$TARGET_NAME/libgcc/libgcc_s.so* $INSTALL/usr/lib + cp -P $BUILD/gcc*/objdir-$1*/$TARGET_NAME/libgomp/.libs/libgomp.so* $INSTALL/usr/lib + cp -P $BUILD/gcc*/objdir-$1*/$TARGET_NAME/libstdc++-v3/src/.libs/libstdc++.so* $INSTALL/usr/lib From d362e86099ffe5043ebf3aa8c6c003ecaf4c7926 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 14:46:08 +0100 Subject: [PATCH 096/850] pkg-config: merge 'install' script to 'build' script Signed-off-by: Stephan Raue --- packages/toolchain/devel/pkg-config/build | 6 ++++++ packages/toolchain/devel/pkg-config/install | 9 --------- 2 files changed, 6 insertions(+), 9 deletions(-) delete mode 100755 packages/toolchain/devel/pkg-config/install diff --git a/packages/toolchain/devel/pkg-config/build b/packages/toolchain/devel/pkg-config/build index 9a729756e3..44092ea832 100755 --- a/packages/toolchain/devel/pkg-config/build +++ b/packages/toolchain/devel/pkg-config/build @@ -10,3 +10,9 @@ cd $PKG_BUILD --with-gnu-ld make + +mkdir -p $ROOT/$TOOLCHAIN/bin + cp pkg-config $ROOT/$TOOLCHAIN/bin + +mkdir -p $SYSROOT_PREFIX/usr/share/aclocal + cp pkg.m4 $SYSROOT_PREFIX/usr/share/aclocal diff --git a/packages/toolchain/devel/pkg-config/install b/packages/toolchain/devel/pkg-config/install deleted file mode 100755 index 42ab2e954e..0000000000 --- a/packages/toolchain/devel/pkg-config/install +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -. config/options $1 - -mkdir -p $ROOT/$TOOLCHAIN/bin - cp $PKG_BUILD/$1 $ROOT/$TOOLCHAIN/bin - -mkdir -p $SYSROOT_PREFIX/usr/share/aclocal - cp $PKG_BUILD/pkg.m4 $SYSROOT_PREFIX/usr/share/aclocal \ No newline at end of file From 72609cfb37b18f97296d7e77708afd33dd67797c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 14:46:32 +0100 Subject: [PATCH 097/850] make: merge 'install' script to 'build' script, remove 'unpack' script Signed-off-by: Stephan Raue --- packages/toolchain/devel/make/build | 3 +++ packages/toolchain/devel/make/install | 6 ------ packages/toolchain/devel/make/unpack | 6 ------ 3 files changed, 3 insertions(+), 12 deletions(-) delete mode 100755 packages/toolchain/devel/make/install delete mode 100755 packages/toolchain/devel/make/unpack diff --git a/packages/toolchain/devel/make/build b/packages/toolchain/devel/make/build index c975a0f84d..e6391e7f5e 100755 --- a/packages/toolchain/devel/make/build +++ b/packages/toolchain/devel/make/build @@ -11,3 +11,6 @@ cd $PKG_BUILD --disable-nls /bin/sh build.sh + +mkdir -p $ROOT/$TOOLCHAIN/bin + cp make $ROOT/$TOOLCHAIN/bin diff --git a/packages/toolchain/devel/make/install b/packages/toolchain/devel/make/install deleted file mode 100755 index 8409343723..0000000000 --- a/packages/toolchain/devel/make/install +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -. config/options $1 - -mkdir -p $ROOT/$TOOLCHAIN/bin - cp $PKG_BUILD/$1 $ROOT/$TOOLCHAIN/bin diff --git a/packages/toolchain/devel/make/unpack b/packages/toolchain/devel/make/unpack deleted file mode 100755 index 057c199c26..0000000000 --- a/packages/toolchain/devel/make/unpack +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -. config/options $1 - -$SCRIPTS/fixconfigtools $PKG_BUILD/config - From 23fe40245da2172b583cc9f7e9fbcf9a38a5880a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 14:47:29 +0100 Subject: [PATCH 098/850] linux-headers: merge 'install' script to 'build' script Signed-off-by: Stephan Raue --- packages/toolchain/devel/linux-headers/{install => build} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/toolchain/devel/linux-headers/{install => build} (100%) diff --git a/packages/toolchain/devel/linux-headers/install b/packages/toolchain/devel/linux-headers/build similarity index 100% rename from packages/toolchain/devel/linux-headers/install rename to packages/toolchain/devel/linux-headers/build From 4d89d64604112c16773efe74465494d2e3d51b27 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 14:48:25 +0100 Subject: [PATCH 099/850] binutils: dont depend on 'ccache', fix dependencies Signed-off-by: Stephan Raue --- packages/toolchain/devel/binutils/build | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/toolchain/devel/binutils/build b/packages/toolchain/devel/binutils/build index feec1c1c15..511bf77e5b 100755 --- a/packages/toolchain/devel/binutils/build +++ b/packages/toolchain/devel/binutils/build @@ -2,8 +2,7 @@ . config/options $1 -$SCRIPTS/install ccache -$SCRIPTS/install linux-headers +$SCRIPTS/build linux-headers $SCRIPTS/build gmp $SCRIPTS/build mpfr $SCRIPTS/build ppl From c153b2d73d44d428d9b37c8b41941c8fc7cd1a5f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 14:49:01 +0100 Subject: [PATCH 100/850] eglibc: fix dependencies, cleanup Signed-off-by: Stephan Raue --- packages/toolchain/devel/eglibc/build | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/packages/toolchain/devel/eglibc/build b/packages/toolchain/devel/eglibc/build index d07daf3c50..0ce9dce714 100755 --- a/packages/toolchain/devel/eglibc/build +++ b/packages/toolchain/devel/eglibc/build @@ -2,14 +2,8 @@ . config/options $1 -$SCRIPTS/install ccache - -rm -rf "$SYSROOT_PREFIX/lib" -rm -rf "$SYSROOT_PREFIX/usr/lib" -rm -rf "$SYSROOT_PREFIX/usr/include" - $SCRIPTS/build autotools -$SCRIPTS/install linux-headers +$SCRIPTS/build linux-headers $SCRIPTS/build gcc-core # Filter out some problematic CFLAGS From 12d176435102c141a3edd32179dc082ad32fe445 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 14:49:33 +0100 Subject: [PATCH 101/850] libelf: dont depend on 'ccache' Signed-off-by: Stephan Raue --- packages/toolchain/devel/libelf/build | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/toolchain/devel/libelf/build b/packages/toolchain/devel/libelf/build index 0eb534773d..81824dc938 100755 --- a/packages/toolchain/devel/libelf/build +++ b/packages/toolchain/devel/libelf/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/install ccache - setup_toolchain host cd $PKG_BUILD @@ -17,4 +15,4 @@ cd objdir --disable-static \ make -make install \ No newline at end of file +make install From ff96fe750b5d1b292ff5d5547aa1814a2de66007 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 14:50:09 +0100 Subject: [PATCH 102/850] toolchain: fix dependencies, cleanup Signed-off-by: Stephan Raue --- packages/toolchain/build | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/toolchain/build b/packages/toolchain/build index 6e96896882..c12fdc63d9 100755 --- a/packages/toolchain/build +++ b/packages/toolchain/build @@ -4,15 +4,15 @@ $SCRIPTS/build configtools toolchain -$SCRIPTS/install make -$SCRIPTS/install sed -$SCRIPTS/install pkg-config +$SCRIPTS/build make +$SCRIPTS/build ccache +$SCRIPTS/build sed +$SCRIPTS/build pkg-config $SCRIPTS/build autotools - $SCRIPTS/build intltool + $SCRIPTS/build gcc-final -$SCRIPTS/install ccache toolchain $SCRIPTS/build cmake $SCRIPTS/build jam From 5c864d34d5cc5afe53013b3615589a0498d18a67 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 14:52:45 +0100 Subject: [PATCH 103/850] libdrm: simplyfing options for building grafic drivers, cleanup Signed-off-by: Stephan Raue --- config/options | 4 ---- packages/graphics/libdrm/build | 8 ++++---- packages/graphics/libdrm/install | 7 ++----- 3 files changed, 6 insertions(+), 13 deletions(-) diff --git a/config/options b/config/options index 3e3fb8b500..399341f007 100644 --- a/config/options +++ b/config/options @@ -81,17 +81,14 @@ get_graphicdrivers() { if [ $drv = i915 -o $drv = i965 ]; then XORG_DRIVERS="$XORG_DRIVERS intel" - DRM_DRIVERS="$DRM_DRIVERS intel" fi if [ $drv = r200 -o $drv = r300 -o $drv = r600 -o $drv = radeon ]; then XORG_DRIVERS="$XORG_DRIVERS ati" - DRM_DRIVERS="$DRM_DRIVERS radeon" fi if [ $drv = nouveau ]; then XORG_DRIVERS="$XORG_DRIVERS nouveau" - DRM_DRIVERS="$DRM_DRIVERS nouveau" fi if [ $drv = nvidia ]; then @@ -100,7 +97,6 @@ get_graphicdrivers() { fi if [ $drv = vmware ]; then - DRM_DRIVERS="$DRM_DRIVERS vmware" XINERAMA_SUPPORT="yes" fi done diff --git a/packages/graphics/libdrm/build b/packages/graphics/libdrm/build index bbb2a2e809..4751549977 100755 --- a/packages/graphics/libdrm/build +++ b/packages/graphics/libdrm/build @@ -9,14 +9,14 @@ $SCRIPTS/build udev get_graphicdrivers DRM_CONFIG="--disable-libkms --disable-intel --disable-radeon" -DRM_CONFIG="$DRM_CONFIG --disable-nouveau-experimental-api --enable-vmwgfx-experimental-api" +DRM_CONFIG="$DRM_CONFIG --disable-nouveau-experimental-api --disable-vmwgfx-experimental-api" -for drv in $DRM_DRIVERS; do - [ $drv = intel ] && \ +for drv in $GRAPHIC_DRIVERS; do + [ $drv = i915 -o $drv = i965 ] && \ DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-libkms/enable-libkms/'` && \ DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-intel/enable-intel/'` - [ $drv = radeon ] && \ + [ $drv = r200 -o $drv = r300 -o $drv = r600 -o $drv = radeon ] && \ DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-libkms/enable-libkms/'` && \ DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-radeon/enable-radeon/'` diff --git a/packages/graphics/libdrm/install b/packages/graphics/libdrm/install index 10927ec1bc..078dd735b4 100755 --- a/packages/graphics/libdrm/install +++ b/packages/graphics/libdrm/install @@ -8,8 +8,5 @@ mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/.libs/libdrm.so* $INSTALL/usr/lib cp -P $PKG_BUILD/libkms/.libs/libkms.so* $INSTALL/usr/lib || true -for drv in $DRM_DRIVERS; do - [ -f $PKG_BUILD/$drv/.libs/libdrm_$drv*.so* ] && \ - cp -P $PKG_BUILD/$drv/.libs/libdrm_$drv*.so* $INSTALL/usr/lib - rm -rf $INSTALL/usr/lib/libdrm_$drv*.so*T -done + cp -P $PKG_BUILD/*/.libs/libdrm_*.so $INSTALL/usr/lib || true + cp -P $PKG_BUILD/*/.libs/libdrm_*.so*[0-9] $INSTALL/usr/lib || true From 6647a6ee14eaed167c861d977eccdcef5cb0f167 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 14:52:57 +0100 Subject: [PATCH 104/850] libdrm-master: simplyfing options for building grafic drivers, cleanup Signed-off-by: Stephan Raue --- packages/graphics/libdrm-master/build | 8 ++++---- packages/graphics/libdrm-master/install | 7 ++----- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/packages/graphics/libdrm-master/build b/packages/graphics/libdrm-master/build index bbb2a2e809..4751549977 100755 --- a/packages/graphics/libdrm-master/build +++ b/packages/graphics/libdrm-master/build @@ -9,14 +9,14 @@ $SCRIPTS/build udev get_graphicdrivers DRM_CONFIG="--disable-libkms --disable-intel --disable-radeon" -DRM_CONFIG="$DRM_CONFIG --disable-nouveau-experimental-api --enable-vmwgfx-experimental-api" +DRM_CONFIG="$DRM_CONFIG --disable-nouveau-experimental-api --disable-vmwgfx-experimental-api" -for drv in $DRM_DRIVERS; do - [ $drv = intel ] && \ +for drv in $GRAPHIC_DRIVERS; do + [ $drv = i915 -o $drv = i965 ] && \ DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-libkms/enable-libkms/'` && \ DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-intel/enable-intel/'` - [ $drv = radeon ] && \ + [ $drv = r200 -o $drv = r300 -o $drv = r600 -o $drv = radeon ] && \ DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-libkms/enable-libkms/'` && \ DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-radeon/enable-radeon/'` diff --git a/packages/graphics/libdrm-master/install b/packages/graphics/libdrm-master/install index 10927ec1bc..078dd735b4 100755 --- a/packages/graphics/libdrm-master/install +++ b/packages/graphics/libdrm-master/install @@ -8,8 +8,5 @@ mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/.libs/libdrm.so* $INSTALL/usr/lib cp -P $PKG_BUILD/libkms/.libs/libkms.so* $INSTALL/usr/lib || true -for drv in $DRM_DRIVERS; do - [ -f $PKG_BUILD/$drv/.libs/libdrm_$drv*.so* ] && \ - cp -P $PKG_BUILD/$drv/.libs/libdrm_$drv*.so* $INSTALL/usr/lib - rm -rf $INSTALL/usr/lib/libdrm_$drv*.so*T -done + cp -P $PKG_BUILD/*/.libs/libdrm_*.so $INSTALL/usr/lib || true + cp -P $PKG_BUILD/*/.libs/libdrm_*.so*[0-9] $INSTALL/usr/lib || true From 8636b090ff41fcd2e43816eac2fc5ca4e01479c5 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 17:05:47 +0100 Subject: [PATCH 105/850] scripts/install: (re)add 'fastinstall' support Signed-off-by: Stephan Raue --- config/options | 3 ++ config/path | 2 +- scripts/install | 81 +++++++++++++++++++++++++------------------------ 3 files changed, 46 insertions(+), 40 deletions(-) diff --git a/config/options b/config/options index 399341f007..cfeca9ce85 100644 --- a/config/options +++ b/config/options @@ -57,6 +57,9 @@ fi # multi-processor computer (like hyperthreading SMP CPU) CONCURRENCY_MAKE_LEVEL=`cat /proc/cpuinfo | grep -c '^processor[[:cntrl:]]*:'` +# forcing install of all packages (yes/no) + FORCE_INSTALL=no + # set jpeg library depending on ARCH if [ "$TARGET_ARCH" = "i386" -o "$TARGET_ARCH" = "x86_64" ]; then LIBJPEG="libjpeg-turbo" diff --git a/config/path b/config/path index cf9ad9de54..ead51f3f65 100644 --- a/config/path +++ b/config/path @@ -43,7 +43,7 @@ TARGET_ADDONS="$TARGET_IMG/$ADDONS/$ADDON_PATH" ADDON_BUILD="$BUILD/$ADDONS/$1" STAMPS_NOARCH=.stamps STAMPS=$BUILD/.stamps -INSTALLSTAMPS=$BUILD/.install +STAMPS_INSTALL=$BUILD/image/.stamps DOCS=DOCS TOOLCHAIN=$BUILD/toolchain SYSROOT_PREFIX=$ROOT/$TOOLCHAIN/$TARGET_NAME/sysroot diff --git a/scripts/install b/scripts/install index 357f0a0475..e0f5cce301 100755 --- a/scripts/install +++ b/scripts/install @@ -2,58 +2,61 @@ . config/options $1 +STAMP=$STAMPS_INSTALL/$1/install + if [ -z "$1" ]; then echo "usage: $0 package_name" exit 1 fi -# mkdir -p $INSTALLSTAMPS/$1 -# INSTALLSTAMP=$INSTALLSTAMPS/$1/install +mkdir -p $STAMPS_INSTALL/$1 -# if [ $1 = "image" ]; then -# rm -rf $INSTALLSTAMPS -# mkdir -p $INSTALLSTAMPS/image -# fi +if [ -f $STAMP -a $PKG_DIR/install -nt $STAMP ]; then + rm -f $STAMP +fi -# if [ ! -f $INSTALLSTAMP ]; then +[ -f $STAMP -a $FORCE_INSTALL = "no" ] && exit 0 - if [ -f $PKG_DIR/arch ]; then - grep -q "$TARGET_ARCH" "$PKG_DIR/arch" || exit 0 - grep -q "\-$TARGET_ARCH" "$PKG_DIR/arch" && exit 0 - fi +if [ -f $PKG_DIR/arch ]; then + grep -q "$TARGET_ARCH" "$PKG_DIR/arch" || exit 0 + grep -q "\-$TARGET_ARCH" "$PKG_DIR/arch" && exit 0 +fi - if [ -f $PKG_DIR/platform ]; then - grep -q "$TARGET_PLATFORM" "$PKG_DIR/platform" || exit 0 - grep -q "\-$TARGET_PLATFORM" "$PKG_DIR/platform" && exit 0 - fi +if [ -f $PKG_DIR/platform ]; then + grep -q "$TARGET_PLATFORM" "$PKG_DIR/platform" || exit 0 + grep -q "\-$TARGET_PLATFORM" "$PKG_DIR/platform" && exit 0 +fi - if [ -d $PKG_DIR/init.d ]; then - mkdir -p $INSTALL/etc/init.d - cp $PKG_DIR/init.d/* $INSTALL/etc/init.d/ - fi +if [ -d $PKG_DIR/init.d ]; then + mkdir -p $INSTALL/etc/init.d + cp $PKG_DIR/init.d/* $INSTALL/etc/init.d/ +fi - if [ -d $PKG_DIR/profile.d ]; then - mkdir -p $INSTALL/etc/profile.d - cp $PKG_DIR/profile.d/*.conf $INSTALL/etc/profile.d/ - fi +if [ -d $PKG_DIR/profile.d ]; then + mkdir -p $INSTALL/etc/profile.d + cp $PKG_DIR/profile.d/*.conf $INSTALL/etc/profile.d/ +fi - if [ -d $PKG_DIR/init.network ]; then - mkdir -p $INSTALL/etc/init.d/network - cp $PKG_DIR/init.network/* $INSTALL/etc/init.d/network/ - fi +if [ -d $PKG_DIR/init.network ]; then + mkdir -p $INSTALL/etc/init.d/network + cp $PKG_DIR/init.network/* $INSTALL/etc/init.d/network/ +fi - $SCRIPTS/build $@ - printf "%${INDENT}c INSTALL $1\n" >&$SILENT_OUT - #dialog --infobox "%${INDENT}c INSTALL $1\n" 15 40 - export INDENT=$((${INDENT:-1}+$INDENT_SIZE)) +$SCRIPTS/build $@ +printf "%${INDENT}c INSTALL $1\n" >&$SILENT_OUT +export INDENT=$((${INDENT:-1}+$INDENT_SIZE)) - for p in $PKG_DEPENDS; do - $SCRIPTS/install $p - done +for p in $PKG_DEPENDS; do + $SCRIPTS/install $p +done - if [ -f $PKG_DIR/install ]; then - $PKG_DIR/install $@ >&$VERBOSE_OUT - fi +if [ -f $PKG_DIR/install ]; then + $PKG_DIR/install $@ >&$VERBOSE_OUT +fi -# touch $INSTALLSTAMP -# fi +. $PROJECT_DIR/$PROJECT/options + +for i in `sed -n "s/^\([^#].*\)=\".*$/\1/p" $PROJECT_DIR/$PROJECT/options | grep -v "#"`; do + eval val=\$$i + echo "STAMP_$i=\"$val"\" >> $STAMP +done From e814f2f38e4e273a98140a8ac2f9e9d8095d63ee Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 17:33:49 +0100 Subject: [PATCH 106/850] image: move to 'scripts', split into 'scripts/image', 'scripts/image_squashfs' and 'scripts/image_release' Signed-off-by: Stephan Raue --- packages/image/install | 193 ----------------------------------------- scripts/image | 108 +++++++++++++++++++++++ scripts/image_release | 35 ++++++++ scripts/image_squashfs | 25 ++++++ 4 files changed, 168 insertions(+), 193 deletions(-) delete mode 100755 packages/image/install create mode 100755 scripts/image create mode 100755 scripts/image_release create mode 100755 scripts/image_squashfs diff --git a/packages/image/install b/packages/image/install deleted file mode 100755 index 4ab591bc6e..0000000000 --- a/packages/image/install +++ /dev/null @@ -1,193 +0,0 @@ -#!/bin/sh - -. config/options $1 - -$SCRIPTS/checkdeps build - -if [ "$OPENELEC_VERSION" = devel -o "$OPENELEC_VERSION" = debug ]; then - BUILD_DATE=`date +%Y%m%d` - GIT_BUILD=`git log --pretty=format:'' | wc -l` - OPENELEC_VERSION=$OPENELEC_VERSION-$BUILD_DATE-r$GIT_BUILD -fi - -TARGET_VERSION="$PROJECT.$TARGET_ARCH-$OPENELEC_VERSION" - -case "$2" in - system) - - $SCRIPTS/install squashfs - $SCRIPTS/build fakeroot - - export INSTALL=$BUILD/$1/$2 - - rm -rf $FAKEROOT_SCRIPT # remove $FAKEROOT_SCRIPT if it exist - touch $FAKEROOT_SCRIPT # create an empty $FAKEROOT_SCRIPT - chmod +x $FAKEROOT_SCRIPT # make $FAKEROOT_SCRIPT executable - echo "chown -R 0:0 $INSTALL" >> $FAKEROOT_SCRIPT - - rm -rf $INSTALL - mkdir -p $INSTALL - - mkdir -p $INSTALL/bin - mkdir -p $INSTALL/etc - mkdir -p $INSTALL/lib - mkdir -p $INSTALL/sbin - mkdir -p $INSTALL/dev - mkdir -p $INSTALL/proc - mkdir -p $INSTALL/sys - mkdir -p $INSTALL/usr - mkdir -p $INSTALL/var - mkdir -p $INSTALL/flash - mkdir -p $INSTALL/storage - - ln -sf /var $INSTALL/usr/var - ln -sf /var/tmp $INSTALL/tmp - ln -sf /var/media $INSTALL/media - - if [ $TARGET_ARCH = x86_64 -o $TARGET_ARCH = powerpc64 ]; then - ln -s /lib $INSTALL/lib64 - ln -s lib $INSTALL/usr/lib64 - fi - -# copy project related files to filesystem - if [ -d $PROJECT_DIR/$PROJECT/filesystem ]; then - cp -PR $PROJECT_DIR/$PROJECT/filesystem/* $INSTALL - fi - -# Basissystem... - $SCRIPTS/install eglibc - $SCRIPTS/install gcc-final - $SCRIPTS/install linux $2 - $SCRIPTS/install busybox - $SCRIPTS/install acpid - $SCRIPTS/install util-linux-ng - - echo "OpenELEC" > $INSTALL/etc/distribution - echo "$PROJECT.$TARGET_ARCH" > $INSTALL/etc/arch - echo "$OPENELEC_VERSION" > $INSTALL/etc/version - echo "OpenELEC.tv - Date of build: $BUILD_DATE Build: $BZR_BUILD" > $INSTALL/etc/openelec-release - -# Network support - [ "$NETWORK" = yes ] && $SCRIPTS/install network - -# Transmission BitTorrent support - [ "$TRANSMISSION" = yes ] && $SCRIPTS/install transmission - -# Graphic support - [ ! "$DISPLAYSERVER" = no ] && $SCRIPTS/install $DISPLAYSERVER - -# Multimedia support - [ ! "$MEDIACENTER" = no ] && $SCRIPTS/install mediacenter - -# Automounter support - [ "$UDISKS" = yes ] && $SCRIPTS/install udisks - -# Powermanagement support - [ "$UPOWER" = yes ] && $SCRIPTS/install upower - [ "$UPOWER" = yes ] && $SCRIPTS/install ConsoleKit - -# NTFS 3G support - [ "$NTFS3G" = yes ] && $SCRIPTS/install ntfs-3g - -# Remote support - [ "$REMOTE_SUPPORT" = yes ] && $SCRIPTS/install remote - -# LCD support - [ ! "$LCD_DRIVER" = none ] && $SCRIPTS/install lcdproc - -# Sensors support - [ "$SENSOR_SUPPORT" = yes ] && $SCRIPTS/install lm_sensors - -# Update support - [ "$UPDATE_SUPPORT" = yes ] && $SCRIPTS/install autoupdate - -# Update support - [ "$INSTALLER_SUPPORT" = yes ] && $SCRIPTS/install installer - -# Games and Emulators support (SDK's) - [ "$GAMES" = yes ] && $SCRIPTS/install games-sdk - [ "$EMULATORS" = yes ] && $SCRIPTS/install emulators-sdk - -# Devtools... (not for Release) - [ "$TESTING" = yes ] && $SCRIPTS/install testing - [ "$DEVTOOLS" = yes ] && $SCRIPTS/install debug - -# OEM packages - [ "$OEM_SUPPORT" = yes ] && $SCRIPTS/install oem - -# setting - echo $TARGET_VERSION > $INSTALL/etc/release - -# strip kernel modules - for MOD in `find $INSTALL/lib/modules/ -name *.ko`; do - $STRIP --strip-debug $MOD - done - - mkdir -p $TARGET_IMG - rm -rf $TARGET_IMG/OpenELEC-$TARGET_VERSION.kernel - cp -PR $BUILD/linux-*/arch/x86/boot/bzImage $TARGET_IMG/OpenELEC-$TARGET_VERSION.kernel - - echo "rm -rf $TARGET_IMG/OpenELEC-$TARGET_VERSION.system" >> $FAKEROOT_SCRIPT -# echo "$ROOT/$TOOLCHAIN/bin/mksquashfs $INSTALL $TARGET_IMG/OpenELEC-$TARGET_VERSION.system -noappend -comp lzma" >> $FAKEROOT_SCRIPT - echo "$ROOT/$TOOLCHAIN/bin/mksquashfs $INSTALL $TARGET_IMG/OpenELEC-$TARGET_VERSION.system -noappend" >> $FAKEROOT_SCRIPT - $ROOT/$TOOLCHAIN/bin/fakeroot -- $FAKEROOT_SCRIPT - chmod 0644 $TARGET_IMG/OpenELEC-$TARGET_VERSION.system - rm -rf $FAKEROOT_SCRIPT - ;; - - release) - - $SCRIPTS/install image system - -# cleanup - rm -rf $BUILD/$2/OpenELEC-$TARGET_VERSION - - mkdir -p $BUILD/$2/OpenELEC-$TARGET_VERSION - cp -R $CONFIG/release/* $BUILD/$2/OpenELEC-$TARGET_VERSION - echo "$TARGET_VERSION" > $BUILD/$2/OpenELEC-$TARGET_VERSION/RELEASE - cp $ROOT/CHANGELOG $BUILD/$2/OpenELEC-$TARGET_VERSION - - mkdir -p $BUILD/$2/OpenELEC-$TARGET_VERSION/licenses - cp $ROOT/licenses/* $BUILD/$2/OpenELEC-$TARGET_VERSION/licenses - - mkdir -p $BUILD/$2/OpenELEC-$TARGET_VERSION/target - cp $TARGET_IMG/OpenELEC-$TARGET_VERSION.system $BUILD/$2/OpenELEC-$TARGET_VERSION/target/SYSTEM - cp $TARGET_IMG/OpenELEC-$TARGET_VERSION.kernel $BUILD/$2/OpenELEC-$TARGET_VERSION/target/KERNEL - -# create release directory - mkdir -p $TARGET_IMG - -# remove an previous created release tarball - rm -rf $TARGET_IMG/OpenELEC-$TARGET_VERSION.tar.bz2 - tar cjf $TARGET_IMG/OpenELEC-$TARGET_VERSION.tar.bz2 -C $BUILD/$2 OpenELEC-$TARGET_VERSION - ;; - - addons) - - export INSTALL=$BUILD/$1/$2 - - $SCRIPTS/install emulators addons - $SCRIPTS/install games addons - ;; - - qemu) - - $SCRIPTS/install image system - - mkdir -p $TARGET_IMG - rm -rf $TARGET_IMG/OpenELEC-$TARGET_VERSION-qemu.flash - qemu-img create -f raw $TARGET_IMG/OpenELEC-$TARGET_VERSION-qemu.flash 192M - /sbin/mkfs.ext4 -L Boot -F $TARGET_IMG/OpenELEC-$TARGET_VERSION-qemu.flash - - mkdir -p $ROOT/.tmp - sudo mount -o loop $TARGET_IMG/OpenELEC-$TARGET_VERSION-qemu.flash $ROOT/.tmp - cp -R $TARGET_IMG/OpenELEC-$TARGET_VERSION.system $ROOT/.tmp/openelec.system - sudo umount $ROOT/.tmp - - rm -rf $TARGET_IMG/OpenELEC-$TARGET_VERSION-qemu.storage - qemu-img create -f raw $TARGET_IMG/OpenELEC-$TARGET_VERSION-qemu.storage 1024M - /sbin/mkfs.ext4 -L Storage -F $TARGET_IMG/OpenELEC-$TARGET_VERSION-qemu.storage - - ;; - -esac diff --git a/scripts/image b/scripts/image new file mode 100755 index 0000000000..2840aaefbf --- /dev/null +++ b/scripts/image @@ -0,0 +1,108 @@ +#!/bin/sh + +. config/options $1 + +$SCRIPTS/checkdeps build + +export INSTALL=$BUILD/image/system + +get_version + +rm -rf $INSTALL +rm -rf $STAMPS_INSTALL + +mkdir -p $INSTALL + +# create baselayout + mkdir -p $INSTALL/bin + mkdir -p $INSTALL/etc + mkdir -p $INSTALL/lib + mkdir -p $INSTALL/sbin + mkdir -p $INSTALL/dev + mkdir -p $INSTALL/proc + mkdir -p $INSTALL/sys + mkdir -p $INSTALL/usr + mkdir -p $INSTALL/var + mkdir -p $INSTALL/flash + mkdir -p $INSTALL/storage + + ln -sf /var $INSTALL/usr/var + ln -sf /var/tmp $INSTALL/tmp + ln -sf /var/media $INSTALL/media + + if [ $TARGET_ARCH = x86_64 -o $TARGET_ARCH = powerpc64 ]; then + ln -s /lib $INSTALL/lib64 + ln -s lib $INSTALL/usr/lib64 + fi + + echo "OpenELEC" > $INSTALL/etc/distribution + echo "$PROJECT.$TARGET_ARCH" > $INSTALL/etc/arch + echo "$OPENELEC_VERSION" > $INSTALL/etc/version + echo "OpenELEC.tv - Date of build: $BUILD_DATE Build: $GIT_BUILD" > $INSTALL/etc/openelec-release + echo "$TARGET_VERSION" > $INSTALL/etc/release + +# copy project related files to filesystem + if [ -d $PROJECT_DIR/$PROJECT/filesystem ]; then + cp -PR $PROJECT_DIR/$PROJECT/filesystem/* $INSTALL + fi + +# Basissystem... + $SCRIPTS/install eglibc + $SCRIPTS/install gcc-final + $SCRIPTS/install linux system + $SCRIPTS/install busybox + $SCRIPTS/install acpid + $SCRIPTS/install util-linux-ng + +# Network support + [ "$NETWORK" = yes ] && $SCRIPTS/install network + +# Transmission BitTorrent support + [ "$TRANSMISSION" = yes ] && $SCRIPTS/install transmission + +# Graphic support + [ ! "$DISPLAYSERVER" = no ] && $SCRIPTS/install $DISPLAYSERVER + +# Multimedia support + [ ! "$MEDIACENTER" = no ] && $SCRIPTS/install mediacenter + +# Automounter support + [ "$UDISKS" = yes ] && $SCRIPTS/install udisks + +# Powermanagement support + [ "$UPOWER" = yes ] && $SCRIPTS/install upower + [ "$UPOWER" = yes ] && $SCRIPTS/install ConsoleKit + +# NTFS 3G support + [ "$NTFS3G" = yes ] && $SCRIPTS/install ntfs-3g + +# Remote support + [ "$REMOTE_SUPPORT" = yes ] && $SCRIPTS/install remote + +# LCD support + [ ! "$LCD_DRIVER" = none ] && $SCRIPTS/install lcdproc + +# Sensors support + [ "$SENSOR_SUPPORT" = yes ] && $SCRIPTS/install lm_sensors + +# Update support + [ "$UPDATE_SUPPORT" = yes ] && $SCRIPTS/install autoupdate + +# Update support + [ "$INSTALLER_SUPPORT" = yes ] && $SCRIPTS/install installer + +# Games and Emulators support (SDK's) + [ "$GAMES" = yes ] && $SCRIPTS/install games-sdk + [ "$EMULATORS" = yes ] && $SCRIPTS/install emulators-sdk + +# Devtools... (not for Release) + [ "$TESTING" = yes ] && $SCRIPTS/install testing + [ "$DEVTOOLS" = yes ] && $SCRIPTS/install debug + +# OEM packages + [ "$OEM_SUPPORT" = yes ] && $SCRIPTS/install oem + +# strip kernel modules + for MOD in `find $INSTALL/lib/modules/ -name *.ko`; do + $STRIP --strip-debug $MOD + done diff --git a/scripts/image_release b/scripts/image_release new file mode 100755 index 0000000000..89df2c5f29 --- /dev/null +++ b/scripts/image_release @@ -0,0 +1,35 @@ +#!/bin/sh + +. config/options $1 + +$SCRIPTS/image_squashfs + +get_version + +RELEASE_DIR="$BUILD/target/OpenELEC-$TARGET_VERSION" + +# cleanup + rm -rf $RELEASE_DIR + +# create release dir + mkdir -p $RELEASE_DIR + cp -R $CONFIG/image/* $RELEASE_DIR + cp -R $CONFIG/release/* $RELEASE_DIR + echo "$TARGET_VERSION" > $RELEASE_DIR/RELEASE + cp $ROOT/CHANGELOG $RELEASE_DIR + + mkdir -p $RELEASE_DIR/licenses + cp $ROOT/licenses/* $RELEASE_DIR/licenses + + mkdir -p $RELEASE_DIR/target + cp $TARGET_IMG/OpenELEC-$TARGET_VERSION.system $RELEASE_DIR/target/SYSTEM + cp $TARGET_IMG/OpenELEC-$TARGET_VERSION.kernel $RELEASE_DIR/target/KERNEL + +# create target directory + mkdir -p $TARGET_IMG + +# remove an previous created release tarball + rm -rf $TARGET_IMG/OpenELEC-$TARGET_VERSION.tar.bz2 + +# create release tarball + tar cjf $TARGET_IMG/OpenELEC-$TARGET_VERSION.tar.bz2 -C $BUILD/target OpenELEC-$TARGET_VERSION diff --git a/scripts/image_squashfs b/scripts/image_squashfs new file mode 100755 index 0000000000..db2658c89b --- /dev/null +++ b/scripts/image_squashfs @@ -0,0 +1,25 @@ +#!/bin/sh + +. config/options $1 + +rm -rf $FAKEROOT_SCRIPT # remove $FAKEROOT_SCRIPT if it exist +touch $FAKEROOT_SCRIPT # create an empty $FAKEROOT_SCRIPT +chmod +x $FAKEROOT_SCRIPT # make $FAKEROOT_SCRIPT executable +echo "chown -R 0:0 $INSTALL" >> $FAKEROOT_SCRIPT + +$SCRIPTS/image +$SCRIPTS/build squashfs +$SCRIPTS/build fakeroot + +get_version + +mkdir -p $TARGET_IMG + rm -rf $TARGET_IMG/OpenELEC-$TARGET_VERSION.kernel + cp -PR $BUILD/linux-*/arch/x86/boot/bzImage $TARGET_IMG/OpenELEC-$TARGET_VERSION.kernel + + echo "rm -rf $TARGET_IMG/OpenELEC-$TARGET_VERSION.system" >> $FAKEROOT_SCRIPT +# echo "$ROOT/$TOOLCHAIN/bin/mksquashfs $BUILD/image/system $TARGET_IMG/OpenELEC-$TARGET_VERSION.system -noappend -comp lzma" >> $FAKEROOT_SCRIPT + echo "$ROOT/$TOOLCHAIN/bin/mksquashfs $BUILD/image/system $TARGET_IMG/OpenELEC-$TARGET_VERSION.system -noappend" >> $FAKEROOT_SCRIPT + $ROOT/$TOOLCHAIN/bin/fakeroot -- $FAKEROOT_SCRIPT + chmod 0644 $TARGET_IMG/OpenELEC-$TARGET_VERSION.system + rm -rf $FAKEROOT_SCRIPT From e9133d68c3df45147dde4e205f0fdadeda6df9ae Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 17:34:36 +0100 Subject: [PATCH 107/850] config/path: add function to get version Signed-off-by: Stephan Raue --- config/path | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/config/path b/config/path index ead51f3f65..31cfa69612 100644 --- a/config/path +++ b/config/path @@ -348,3 +348,13 @@ add_group() { echo "$1:x:$2:$3" >> ${INSTALL}/etc/group fi } + +get_version() { + if [ "$OPENELEC_VERSION" = devel -o "$OPENELEC_VERSION" = debug ]; then + BUILD_DATE=`date +%Y%m%d` + GIT_BUILD=`git log --pretty=format:'' | wc -l` + OPENELEC_VERSION=$OPENELEC_VERSION-$BUILD_DATE-r$GIT_BUILD + fi + + TARGET_VERSION="$PROJECT.$TARGET_ARCH-$OPENELEC_VERSION" +} From f3c3a32217ed4f96c4ea7c1e7e046ea7b0038507 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 17:35:26 +0100 Subject: [PATCH 108/850] inputproto: update to inputproto-2.0.1 Signed-off-by: Stephan Raue --- packages/x11/proto/inputproto/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/x11/proto/inputproto/url b/packages/x11/proto/inputproto/url index 9a2a95f153..3feb7623ae 100644 --- a/packages/x11/proto/inputproto/url +++ b/packages/x11/proto/inputproto/url @@ -1 +1 @@ -http://xorg.freedesktop.org/archive/individual/proto/inputproto-2.0.tar.bz2 \ No newline at end of file +http://xorg.freedesktop.org/archive/individual/proto/inputproto-2.0.1.tar.bz2 \ No newline at end of file From 5dc804addd85aad463447328c47173cb548cc44a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 17:38:57 +0100 Subject: [PATCH 109/850] Makefile: update for the new changes Signed-off-by: Stephan Raue --- Makefile | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 5ca3295dfd..10ab9b0c07 100644 --- a/Makefile +++ b/Makefile @@ -1,18 +1,24 @@ BUILD_DIRS="build.*" -all: system +all: squashfs system: - ./scripts/install image system + ./scripts/image release: - ./scripts/install image release + ./scripts/image_release -addons: - ./scripts/install image addons +squashfs: + ./scripts/image_squashfs qemu: - ./scripts/install image qemu + ./scripts/image_qemu + +vmware: + ./scripts/image_vmware + +addons: + ./scripts/image_addons clean: rm -rf $(BUILD_DIRS) From 8a840300dbc14492403294bc245e7d92b553de6d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 17:46:27 +0100 Subject: [PATCH 110/850] scripts/image: setup fakeroot Signed-off-by: Stephan Raue --- scripts/image | 3 +++ scripts/image_squashfs | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/image b/scripts/image index 2840aaefbf..7459439419 100755 --- a/scripts/image +++ b/scripts/image @@ -13,6 +13,9 @@ rm -rf $STAMPS_INSTALL mkdir -p $INSTALL +# setup fakeroot + echo "chown -R 0:0 $INSTALL" >> $FAKEROOT_SCRIPT + # create baselayout mkdir -p $INSTALL/bin mkdir -p $INSTALL/etc diff --git a/scripts/image_squashfs b/scripts/image_squashfs index db2658c89b..0a18bc4566 100755 --- a/scripts/image_squashfs +++ b/scripts/image_squashfs @@ -5,7 +5,6 @@ rm -rf $FAKEROOT_SCRIPT # remove $FAKEROOT_SCRIPT if it exist touch $FAKEROOT_SCRIPT # create an empty $FAKEROOT_SCRIPT chmod +x $FAKEROOT_SCRIPT # make $FAKEROOT_SCRIPT executable -echo "chown -R 0:0 $INSTALL" >> $FAKEROOT_SCRIPT $SCRIPTS/image $SCRIPTS/build squashfs From 994e2cac7cc23aae92e53d173bf5882f37884089 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 17:52:16 +0100 Subject: [PATCH 111/850] scripts/image: force building toolchain first Signed-off-by: Stephan Raue --- scripts/image | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/image b/scripts/image index 7459439419..a0b33d54bd 100755 --- a/scripts/image +++ b/scripts/image @@ -4,6 +4,8 @@ $SCRIPTS/checkdeps build +$SCRIPTS/build toolchain + export INSTALL=$BUILD/image/system get_version From d032128254a0c677b0577cc777cbc0eb4c9e93e3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 19:11:26 +0100 Subject: [PATCH 112/850] Mesa-GL: fix build Signed-off-by: Stephan Raue --- packages/graphics/Mesa-GL/build | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/graphics/Mesa-GL/build b/packages/graphics/Mesa-GL/build index abcd331ce4..9a66b4e197 100755 --- a/packages/graphics/Mesa-GL/build +++ b/packages/graphics/Mesa-GL/build @@ -36,6 +36,7 @@ cd $BUILD/$MESA* --disable-glw \ --disable-motif \ --with-driver=dri \ + --with-dri-drivers="" \ --disable-gallium make -C src/glx From 8b8835b1bed509150202e12caf1c7b2c1e60bc27 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 19:11:47 +0100 Subject: [PATCH 113/850] mesa-master-GL: fix build Signed-off-by: Stephan Raue --- packages/graphics/mesa-master-GL/build | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/graphics/mesa-master-GL/build b/packages/graphics/mesa-master-GL/build index abcd331ce4..9a66b4e197 100755 --- a/packages/graphics/mesa-master-GL/build +++ b/packages/graphics/mesa-master-GL/build @@ -36,6 +36,7 @@ cd $BUILD/$MESA* --disable-glw \ --disable-motif \ --with-driver=dri \ + --with-dri-drivers="" \ --disable-gallium make -C src/glx From 96707d9ff2b9fa87a9953a56cb3a36b8fe83abd5 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 11 Nov 2010 19:12:41 +0100 Subject: [PATCH 114/850] scripts/image: cosmetics Signed-off-by: Stephan Raue --- scripts/image | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/image b/scripts/image index a0b33d54bd..e3986992fe 100755 --- a/scripts/image +++ b/scripts/image @@ -3,7 +3,6 @@ . config/options $1 $SCRIPTS/checkdeps build - $SCRIPTS/build toolchain export INSTALL=$BUILD/image/system From af3baf788bf1fdb0f7de0475e1a158556f61779b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 00:08:23 +0100 Subject: [PATCH 115/850] wireless_tools: remove package Signed-off-by: Stephan Raue --- packages/debug/install | 1 - packages/debug/wireless_tools/build | 18 ------------------ packages/debug/wireless_tools/install | 8 -------- packages/debug/wireless_tools/url | 1 - 4 files changed, 28 deletions(-) delete mode 100755 packages/debug/wireless_tools/build delete mode 100755 packages/debug/wireless_tools/install delete mode 100644 packages/debug/wireless_tools/url diff --git a/packages/debug/install b/packages/debug/install index 46b124c803..3c692be970 100755 --- a/packages/debug/install +++ b/packages/debug/install @@ -10,5 +10,4 @@ $SCRIPTS/install nano # on user request $SCRIPTS/install wgetpaste $SCRIPTS/install evtest $SCRIPTS/install tvdump -$SCRIPTS/install wireless_tools diff --git a/packages/debug/wireless_tools/build b/packages/debug/wireless_tools/build deleted file mode 100755 index 94ba8215b1..0000000000 --- a/packages/debug/wireless_tools/build +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -. config/options $1 - -$SCRIPTS/build toolchain -$SCRIPTS/build linux - -cd $BUILD/$1* - -make PREFIX=/usr \ - CC=$CC \ - AR=$AR \ - RANLIB=$RANLIB \ - CFLAGS="$CFLAGS -I." \ - BUILD_STRIPPING='y' - -make PREFIX=$SYSROOT_PREFIX/usr install -make PREFIX=$SYSROOT_PREFIX/usr install-hdr diff --git a/packages/debug/wireless_tools/install b/packages/debug/wireless_tools/install deleted file mode 100755 index 7528e943ae..0000000000 --- a/packages/debug/wireless_tools/install +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -. config/options $1 - -mkdir -p $INSTALL/sbin - cp $BUILD/$1*/iwconfig $INSTALL/sbin - cp $BUILD/$1*/iwpriv $INSTALL/sbin - cp $BUILD/$1*/iwlist $INSTALL/sbin diff --git a/packages/debug/wireless_tools/url b/packages/debug/wireless_tools/url deleted file mode 100644 index a250187f47..0000000000 --- a/packages/debug/wireless_tools/url +++ /dev/null @@ -1 +0,0 @@ -http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/wireless_tools.30.pre9.tar.gz From 0d7f06f0e2680d2e4a4cda753dd17383acbc8eb2 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 00:09:29 +0100 Subject: [PATCH 116/850] busybox: remove 'unpack' and 'need_unpack' script, cleanup Signed-off-by: Stephan Raue --- packages/sysutils/busybox/build | 9 +++++++-- packages/sysutils/busybox/need_unpack | 12 ------------ packages/sysutils/busybox/unpack | 13 ------------- 3 files changed, 7 insertions(+), 27 deletions(-) delete mode 100755 packages/sysutils/busybox/need_unpack delete mode 100755 packages/sysutils/busybox/unpack diff --git a/packages/sysutils/busybox/build b/packages/sysutils/busybox/build index 4476274f91..5b71b6ae22 100755 --- a/packages/sysutils/busybox/build +++ b/packages/sysutils/busybox/build @@ -8,12 +8,17 @@ else BUSYBOX_CFG_FILE=$ROOT/$PKG_DIR/config/$1.conf fi +# optimize for size + CFLAGS=`echo $CFLAGS | sed -e "s|-O?|-Os|"` + cd $BUILD/busybox* # Build Busybox for system make distclean cp $BUSYBOX_CFG_FILE .config - [ -n "$TIMEZONE" ] && sed -i -e 's/^# CONFIG_HWCLOCK .*$/CONFIG_HWCLOCK=yes/g' -e 's/^# CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS .*/CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=yes/g' $BUSYBOX/.config make oldconfig - ARCH=$TARGET_ARCH make install + make ARCH=$TARGET_ARCH \ + HOSTCC=$HOST_CC \ + CROSS_COMPILE=$TARGET_PREFIX \ + install diff --git a/packages/sysutils/busybox/need_unpack b/packages/sysutils/busybox/need_unpack deleted file mode 100755 index 08eb4d014b..0000000000 --- a/packages/sysutils/busybox/need_unpack +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -. config/options $1 - -STAMP=$STAMPS/$1/unpack - -. $STAMP - -test $PKG_DIR/config/$1.conf -nt $STAMP && rm -f $STAMP -# test $STAMP_DEVTOOLS != $DEVTOOLS && rm -f $STAMP - -exit 0 diff --git a/packages/sysutils/busybox/unpack b/packages/sysutils/busybox/unpack deleted file mode 100755 index 15e0f94efc..0000000000 --- a/packages/sysutils/busybox/unpack +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -. config/options $1 - -$SCRIPTS/build toolchain - -BUSYBOX=`ls -d $PKG_BUILD` - -cat <>$BUSYBOX/Makefile.custom -HOSTCC = $HOST_CC -CROSS_COMPILE = $TARGET_PREFIX -CFLAGS += -std=gnu99 -Os -EOF From 959732aeda63308aa7a255e482d53ab7bbcfa4d9 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 00:09:51 +0100 Subject: [PATCH 117/850] busybox-initramfs: cleanup Signed-off-by: Stephan Raue --- packages/sysutils/busybox-initramfs/build | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/sysutils/busybox-initramfs/build b/packages/sysutils/busybox-initramfs/build index 17ec507b18..2b84d09ee7 100755 --- a/packages/sysutils/busybox-initramfs/build +++ b/packages/sysutils/busybox-initramfs/build @@ -10,6 +10,9 @@ else BUSYBOX_CFG_FILE=$ROOT/$PKG_DIR/config/$1.conf fi +# optimize for size + CFLAGS=`echo $CFLAGS | sed -e "s|-O?|-Os|"` + cd $BUILD/busybox* # Build Busybox for initramfs @@ -17,4 +20,7 @@ cd $BUILD/busybox* cp $BUSYBOX_CFG_FILE .config make oldconfig - ARCH=$TARGET_ARCH make install + make ARCH=$TARGET_ARCH \ + HOSTCC=$HOST_CC \ + CROSS_COMPILE=$TARGET_PREFIX \ + install From e040f9d56531b7157965723ef497a87620bad77f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 00:11:15 +0100 Subject: [PATCH 118/850] linux: add patch to fix build VMware DRM build Signed-off-by: Stephan Raue --- ..._abb295f3b3db602f91accf58b526b30b48673af1.diff | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages/linux/patches/201-linux-2.6.36-drm_vmware_revert_abb295f3b3db602f91accf58b526b30b48673af1.diff b/packages/linux/patches/201-linux-2.6.36-drm_vmware_revert_abb295f3b3db602f91accf58b526b30b48673af1.diff index e69de29bb2..7707c6144c 100644 --- a/packages/linux/patches/201-linux-2.6.36-drm_vmware_revert_abb295f3b3db602f91accf58b526b30b48673af1.diff +++ b/packages/linux/patches/201-linux-2.6.36-drm_vmware_revert_abb295f3b3db602f91accf58b526b30b48673af1.diff @@ -0,0 +1,15 @@ +diff -Naur linux-2.6.36/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c linux-2.6.36.patch/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c +--- linux-2.6.36/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c 2010-10-20 22:30:22.000000000 +0200 ++++ linux-2.6.36.patch/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c 2010-11-09 00:40:07.000000000 +0100 +@@ -615,11 +615,6 @@ + if (unlikely(ret != 0)) + goto err_unlock; + +- if (bo->mem.mem_type == TTM_PL_VRAM && +- bo->mem.mm_node->start < bo->num_pages) +- (void) ttm_bo_validate(bo, &vmw_sys_placement, false, +- false, false); +- + ret = ttm_bo_validate(bo, &ne_placement, false, false, false); + + /* Could probably bug on */ From 95a30bd9783ac7c3541ca051dbd43470bed32453 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 10:37:55 +0100 Subject: [PATCH 119/850] projects/*/linux: optimize kernel config Signed-off-by: Stephan Raue --- projects/ATV/linux/linux.i386.conf | 17 +++++++++-------- projects/ION/linux/linux.i386.conf | 23 +++++++++++------------ projects/ION/linux/linux.x86_64.conf | 23 +++++++++++------------ projects/generic/linux/linux.i386.conf | 24 ++++++++++++------------ projects/intel/linux/linux.i386.conf | 24 ++++++++++++------------ projects/intel/linux/linux.x86_64.conf | 23 +++++++++++------------ 6 files changed, 66 insertions(+), 68 deletions(-) diff --git a/projects/ATV/linux/linux.i386.conf b/projects/ATV/linux/linux.i386.conf index b48a65ba6e..c0b4b3b566 100644 --- a/projects/ATV/linux/linux.i386.conf +++ b/projects/ATV/linux/linux.i386.conf @@ -58,6 +58,7 @@ CONFIG_CONSTRUCTORS=y # CONFIG_EXPERIMENTAL=y CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" CONFIG_LOCALVERSION="" @@ -199,27 +200,27 @@ CONFIG_DEFAULT_IOSCHED="cfq" # CONFIG_INLINE_SPIN_LOCK_BH is not set # CONFIG_INLINE_SPIN_LOCK_IRQ is not set # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set -CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK is not set # CONFIG_INLINE_SPIN_UNLOCK_BH is not set -CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_READ_TRYLOCK is not set # CONFIG_INLINE_READ_LOCK is not set # CONFIG_INLINE_READ_LOCK_BH is not set # CONFIG_INLINE_READ_LOCK_IRQ is not set # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set -CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK is not set # CONFIG_INLINE_READ_UNLOCK_BH is not set -CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQ is not set # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_WRITE_TRYLOCK is not set # CONFIG_INLINE_WRITE_LOCK is not set # CONFIG_INLINE_WRITE_LOCK_BH is not set # CONFIG_INLINE_WRITE_LOCK_IRQ is not set # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set -CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK is not set # CONFIG_INLINE_WRITE_UNLOCK_BH is not set -CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set # CONFIG_MUTEX_SPIN_ON_OWNER is not set CONFIG_FREEZER=y @@ -294,8 +295,8 @@ CONFIG_DMI=y # CONFIG_IOMMU_API is not set CONFIG_NR_CPUS=1 # CONFIG_PREEMPT_NONE is not set -CONFIG_PREEMPT_VOLUNTARY=y -# CONFIG_PREEMPT is not set +# CONFIG_PREEMPT_VOLUNTARY is not set +CONFIG_PREEMPT=y CONFIG_X86_UP_APIC=y CONFIG_X86_UP_IOAPIC=y CONFIG_X86_LOCAL_APIC=y diff --git a/projects/ION/linux/linux.i386.conf b/projects/ION/linux/linux.i386.conf index cf704155c9..90ee3e142f 100644 --- a/projects/ION/linux/linux.i386.conf +++ b/projects/ION/linux/linux.i386.conf @@ -97,7 +97,7 @@ CONFIG_RCU_FANOUT=32 # CONFIG_TREE_RCU_TRACE is not set CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y -CONFIG_LOG_BUF_SHIFT=18 +CONFIG_LOG_BUF_SHIFT=16 CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y CONFIG_CGROUPS=y # CONFIG_CGROUP_DEBUG is not set @@ -153,9 +153,9 @@ CONFIG_PERF_EVENTS=y # CONFIG_VM_EVENT_COUNTERS is not set CONFIG_PCI_QUIRKS=y # CONFIG_COMPAT_BRK is not set -CONFIG_SLAB=y +# CONFIG_SLAB is not set # CONFIG_SLUB is not set -# CONFIG_SLOB is not set +CONFIG_SLOB=y # CONFIG_PROFILING is not set CONFIG_HAVE_OPROFILE=y # CONFIG_KPROBES is not set @@ -177,7 +177,6 @@ CONFIG_HAVE_PERF_EVENTS_NMI=y # GCOV-based kernel profiling # CONFIG_HAVE_GENERIC_DMA_COHERENT=y -CONFIG_SLABINFO=y CONFIG_RT_MUTEXES=y CONFIG_BASE_SMALL=0 CONFIG_MODULES=y @@ -207,27 +206,27 @@ CONFIG_DEFAULT_IOSCHED="cfq" # CONFIG_INLINE_SPIN_LOCK_BH is not set # CONFIG_INLINE_SPIN_LOCK_IRQ is not set # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set -CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK is not set # CONFIG_INLINE_SPIN_UNLOCK_BH is not set -CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_READ_TRYLOCK is not set # CONFIG_INLINE_READ_LOCK is not set # CONFIG_INLINE_READ_LOCK_BH is not set # CONFIG_INLINE_READ_LOCK_IRQ is not set # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set -CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK is not set # CONFIG_INLINE_READ_UNLOCK_BH is not set -CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQ is not set # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_WRITE_TRYLOCK is not set # CONFIG_INLINE_WRITE_LOCK is not set # CONFIG_INLINE_WRITE_LOCK_BH is not set # CONFIG_INLINE_WRITE_LOCK_IRQ is not set # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set -CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK is not set # CONFIG_INLINE_WRITE_UNLOCK_BH is not set -CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set CONFIG_MUTEX_SPIN_ON_OWNER=y CONFIG_FREEZER=y @@ -304,8 +303,8 @@ CONFIG_NR_CPUS=4 CONFIG_SCHED_SMT=y CONFIG_SCHED_MC=y # CONFIG_PREEMPT_NONE is not set -CONFIG_PREEMPT_VOLUNTARY=y -# CONFIG_PREEMPT is not set +# CONFIG_PREEMPT_VOLUNTARY is not set +CONFIG_PREEMPT=y CONFIG_X86_LOCAL_APIC=y CONFIG_X86_IO_APIC=y # CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set diff --git a/projects/ION/linux/linux.x86_64.conf b/projects/ION/linux/linux.x86_64.conf index a9aa1e7cfe..4e8f8e0b1a 100644 --- a/projects/ION/linux/linux.x86_64.conf +++ b/projects/ION/linux/linux.x86_64.conf @@ -97,7 +97,7 @@ CONFIG_RCU_FANOUT=32 # CONFIG_TREE_RCU_TRACE is not set CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y -CONFIG_LOG_BUF_SHIFT=18 +CONFIG_LOG_BUF_SHIFT=16 CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y CONFIG_CGROUPS=y # CONFIG_CGROUP_DEBUG is not set @@ -152,9 +152,9 @@ CONFIG_PERF_EVENTS=y # CONFIG_VM_EVENT_COUNTERS is not set CONFIG_PCI_QUIRKS=y # CONFIG_COMPAT_BRK is not set -CONFIG_SLAB=y +# CONFIG_SLAB is not set # CONFIG_SLUB is not set -# CONFIG_SLOB is not set +CONFIG_SLOB=y # CONFIG_PROFILING is not set CONFIG_HAVE_OPROFILE=y # CONFIG_KPROBES is not set @@ -176,7 +176,6 @@ CONFIG_HAVE_PERF_EVENTS_NMI=y # GCOV-based kernel profiling # # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set -CONFIG_SLABINFO=y CONFIG_RT_MUTEXES=y CONFIG_BASE_SMALL=0 CONFIG_MODULES=y @@ -205,27 +204,27 @@ CONFIG_DEFAULT_IOSCHED="cfq" # CONFIG_INLINE_SPIN_LOCK_BH is not set # CONFIG_INLINE_SPIN_LOCK_IRQ is not set # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set -CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK is not set # CONFIG_INLINE_SPIN_UNLOCK_BH is not set -CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_READ_TRYLOCK is not set # CONFIG_INLINE_READ_LOCK is not set # CONFIG_INLINE_READ_LOCK_BH is not set # CONFIG_INLINE_READ_LOCK_IRQ is not set # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set -CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK is not set # CONFIG_INLINE_READ_UNLOCK_BH is not set -CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQ is not set # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_WRITE_TRYLOCK is not set # CONFIG_INLINE_WRITE_LOCK is not set # CONFIG_INLINE_WRITE_LOCK_BH is not set # CONFIG_INLINE_WRITE_LOCK_IRQ is not set # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set -CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK is not set # CONFIG_INLINE_WRITE_UNLOCK_BH is not set -CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set CONFIG_MUTEX_SPIN_ON_OWNER=y CONFIG_FREEZER=y @@ -278,8 +277,8 @@ CONFIG_NR_CPUS=4 CONFIG_SCHED_SMT=y CONFIG_SCHED_MC=y # CONFIG_PREEMPT_NONE is not set -CONFIG_PREEMPT_VOLUNTARY=y -# CONFIG_PREEMPT is not set +# CONFIG_PREEMPT_VOLUNTARY is not set +CONFIG_PREEMPT=y CONFIG_X86_LOCAL_APIC=y CONFIG_X86_IO_APIC=y # CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set diff --git a/projects/generic/linux/linux.i386.conf b/projects/generic/linux/linux.i386.conf index 1af277d288..7c32291554 100644 --- a/projects/generic/linux/linux.i386.conf +++ b/projects/generic/linux/linux.i386.conf @@ -90,13 +90,14 @@ CONFIG_BSD_PROCESS_ACCT=y # RCU Subsystem # CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set # CONFIG_RCU_TRACE is not set CONFIG_RCU_FANOUT=32 # CONFIG_RCU_FANOUT_EXACT is not set # CONFIG_TREE_RCU_TRACE is not set CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y -CONFIG_LOG_BUF_SHIFT=18 +CONFIG_LOG_BUF_SHIFT=16 CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y CONFIG_CGROUPS=y # CONFIG_CGROUP_DEBUG is not set @@ -152,9 +153,9 @@ CONFIG_PERF_EVENTS=y # CONFIG_VM_EVENT_COUNTERS is not set CONFIG_PCI_QUIRKS=y # CONFIG_COMPAT_BRK is not set -CONFIG_SLAB=y +# CONFIG_SLAB is not set # CONFIG_SLUB is not set -# CONFIG_SLOB is not set +CONFIG_SLOB=y # CONFIG_PROFILING is not set CONFIG_HAVE_OPROFILE=y # CONFIG_KPROBES is not set @@ -176,7 +177,6 @@ CONFIG_HAVE_PERF_EVENTS_NMI=y # GCOV-based kernel profiling # CONFIG_HAVE_GENERIC_DMA_COHERENT=y -CONFIG_SLABINFO=y CONFIG_RT_MUTEXES=y CONFIG_BASE_SMALL=0 CONFIG_MODULES=y @@ -206,27 +206,27 @@ CONFIG_DEFAULT_IOSCHED="cfq" # CONFIG_INLINE_SPIN_LOCK_BH is not set # CONFIG_INLINE_SPIN_LOCK_IRQ is not set # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set -CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK is not set # CONFIG_INLINE_SPIN_UNLOCK_BH is not set -CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_READ_TRYLOCK is not set # CONFIG_INLINE_READ_LOCK is not set # CONFIG_INLINE_READ_LOCK_BH is not set # CONFIG_INLINE_READ_LOCK_IRQ is not set # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set -CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK is not set # CONFIG_INLINE_READ_UNLOCK_BH is not set -CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQ is not set # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_WRITE_TRYLOCK is not set # CONFIG_INLINE_WRITE_LOCK is not set # CONFIG_INLINE_WRITE_LOCK_BH is not set # CONFIG_INLINE_WRITE_LOCK_IRQ is not set # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set -CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK is not set # CONFIG_INLINE_WRITE_UNLOCK_BH is not set -CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set CONFIG_MUTEX_SPIN_ON_OWNER=y CONFIG_FREEZER=y @@ -304,8 +304,8 @@ CONFIG_NR_CPUS=8 CONFIG_SCHED_SMT=y CONFIG_SCHED_MC=y # CONFIG_PREEMPT_NONE is not set -CONFIG_PREEMPT_VOLUNTARY=y -# CONFIG_PREEMPT is not set +# CONFIG_PREEMPT_VOLUNTARY is not set +CONFIG_PREEMPT=y CONFIG_X86_LOCAL_APIC=y CONFIG_X86_IO_APIC=y # CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set diff --git a/projects/intel/linux/linux.i386.conf b/projects/intel/linux/linux.i386.conf index 2129182398..d7713734e1 100644 --- a/projects/intel/linux/linux.i386.conf +++ b/projects/intel/linux/linux.i386.conf @@ -90,13 +90,14 @@ CONFIG_BSD_PROCESS_ACCT=y # RCU Subsystem # CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set # CONFIG_RCU_TRACE is not set CONFIG_RCU_FANOUT=32 # CONFIG_RCU_FANOUT_EXACT is not set # CONFIG_TREE_RCU_TRACE is not set CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y -CONFIG_LOG_BUF_SHIFT=18 +CONFIG_LOG_BUF_SHIFT=16 CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y CONFIG_CGROUPS=y # CONFIG_CGROUP_DEBUG is not set @@ -152,9 +153,9 @@ CONFIG_PERF_EVENTS=y # CONFIG_VM_EVENT_COUNTERS is not set CONFIG_PCI_QUIRKS=y # CONFIG_COMPAT_BRK is not set -CONFIG_SLAB=y +# CONFIG_SLAB is not set # CONFIG_SLUB is not set -# CONFIG_SLOB is not set +CONFIG_SLOB=y # CONFIG_PROFILING is not set CONFIG_HAVE_OPROFILE=y # CONFIG_KPROBES is not set @@ -176,7 +177,6 @@ CONFIG_HAVE_PERF_EVENTS_NMI=y # GCOV-based kernel profiling # CONFIG_HAVE_GENERIC_DMA_COHERENT=y -CONFIG_SLABINFO=y CONFIG_RT_MUTEXES=y CONFIG_BASE_SMALL=0 CONFIG_MODULES=y @@ -206,27 +206,27 @@ CONFIG_DEFAULT_IOSCHED="cfq" # CONFIG_INLINE_SPIN_LOCK_BH is not set # CONFIG_INLINE_SPIN_LOCK_IRQ is not set # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set -CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK is not set # CONFIG_INLINE_SPIN_UNLOCK_BH is not set -CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_READ_TRYLOCK is not set # CONFIG_INLINE_READ_LOCK is not set # CONFIG_INLINE_READ_LOCK_BH is not set # CONFIG_INLINE_READ_LOCK_IRQ is not set # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set -CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK is not set # CONFIG_INLINE_READ_UNLOCK_BH is not set -CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQ is not set # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_WRITE_TRYLOCK is not set # CONFIG_INLINE_WRITE_LOCK is not set # CONFIG_INLINE_WRITE_LOCK_BH is not set # CONFIG_INLINE_WRITE_LOCK_IRQ is not set # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set -CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK is not set # CONFIG_INLINE_WRITE_UNLOCK_BH is not set -CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set CONFIG_MUTEX_SPIN_ON_OWNER=y CONFIG_FREEZER=y @@ -304,8 +304,8 @@ CONFIG_NR_CPUS=8 CONFIG_SCHED_SMT=y CONFIG_SCHED_MC=y # CONFIG_PREEMPT_NONE is not set -CONFIG_PREEMPT_VOLUNTARY=y -# CONFIG_PREEMPT is not set +# CONFIG_PREEMPT_VOLUNTARY is not set +CONFIG_PREEMPT=y CONFIG_X86_LOCAL_APIC=y CONFIG_X86_IO_APIC=y # CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set diff --git a/projects/intel/linux/linux.x86_64.conf b/projects/intel/linux/linux.x86_64.conf index 6231b3e506..5ce3aa08fd 100644 --- a/projects/intel/linux/linux.x86_64.conf +++ b/projects/intel/linux/linux.x86_64.conf @@ -97,7 +97,7 @@ CONFIG_RCU_FANOUT=32 # CONFIG_TREE_RCU_TRACE is not set CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y -CONFIG_LOG_BUF_SHIFT=18 +CONFIG_LOG_BUF_SHIFT=16 CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y CONFIG_CGROUPS=y # CONFIG_CGROUP_DEBUG is not set @@ -152,9 +152,9 @@ CONFIG_PERF_EVENTS=y # CONFIG_VM_EVENT_COUNTERS is not set CONFIG_PCI_QUIRKS=y # CONFIG_COMPAT_BRK is not set -CONFIG_SLAB=y +# CONFIG_SLAB is not set # CONFIG_SLUB is not set -# CONFIG_SLOB is not set +CONFIG_SLOB=y # CONFIG_PROFILING is not set CONFIG_HAVE_OPROFILE=y # CONFIG_KPROBES is not set @@ -176,7 +176,6 @@ CONFIG_HAVE_PERF_EVENTS_NMI=y # GCOV-based kernel profiling # # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set -CONFIG_SLABINFO=y CONFIG_RT_MUTEXES=y CONFIG_BASE_SMALL=0 CONFIG_MODULES=y @@ -205,27 +204,27 @@ CONFIG_DEFAULT_IOSCHED="cfq" # CONFIG_INLINE_SPIN_LOCK_BH is not set # CONFIG_INLINE_SPIN_LOCK_IRQ is not set # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set -CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK is not set # CONFIG_INLINE_SPIN_UNLOCK_BH is not set -CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_READ_TRYLOCK is not set # CONFIG_INLINE_READ_LOCK is not set # CONFIG_INLINE_READ_LOCK_BH is not set # CONFIG_INLINE_READ_LOCK_IRQ is not set # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set -CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK is not set # CONFIG_INLINE_READ_UNLOCK_BH is not set -CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQ is not set # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_WRITE_TRYLOCK is not set # CONFIG_INLINE_WRITE_LOCK is not set # CONFIG_INLINE_WRITE_LOCK_BH is not set # CONFIG_INLINE_WRITE_LOCK_IRQ is not set # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set -CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK is not set # CONFIG_INLINE_WRITE_UNLOCK_BH is not set -CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set CONFIG_MUTEX_SPIN_ON_OWNER=y CONFIG_FREEZER=y @@ -280,8 +279,8 @@ CONFIG_NR_CPUS=8 CONFIG_SCHED_SMT=y CONFIG_SCHED_MC=y # CONFIG_PREEMPT_NONE is not set -CONFIG_PREEMPT_VOLUNTARY=y -# CONFIG_PREEMPT is not set +# CONFIG_PREEMPT_VOLUNTARY is not set +CONFIG_PREEMPT=y CONFIG_X86_LOCAL_APIC=y CONFIG_X86_IO_APIC=y # CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set From 768d974aaf658954d702596de61be9f022fcb282 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 10:50:56 +0100 Subject: [PATCH 120/850] connman: fix comments in configfiles, thanks to ilya Signed-off-by: Stephan Raue --- packages/network/connman/config/hosts.conf | 9 ++- packages/network/connman/config/network.conf | 60 +++++++++++++------- 2 files changed, 47 insertions(+), 22 deletions(-) diff --git a/packages/network/connman/config/hosts.conf b/packages/network/connman/config/hosts.conf index ca58cffac8..d6a73331ed 100644 --- a/packages/network/connman/config/hosts.conf +++ b/packages/network/connman/config/hosts.conf @@ -1,4 +1,7 @@ -# Here you can add additional hosts for usage with hosts.conf from system -# +# hosts.conf + +# This configuration file allows you to manually map hostnames to +# IP addresses + # Format: -# Example: 192.168.0.3 mynas mynas.mynetwork storage +# Example: 192.168.0.3 openelec openelec.mynetwork diff --git a/packages/network/connman/config/network.conf b/packages/network/connman/config/network.conf index 0fc764d667..31c4fd3431 100644 --- a/packages/network/connman/config/network.conf +++ b/packages/network/connman/config/network.conf @@ -1,40 +1,62 @@ -# Network configuration +# network.conf +# +# This configuration file allows you to customize your network +# configuration -# Hostname to use, this also affects Samba, Avahi and some others -# ypu can leave blank to use "openelec" as hostname (default) +# Hostname +# Sets the machine's hostname - This setting also also affects Samba, +# Avahi and some other services +# This option left blank sets the hostname to the default setting, "openelec" HOSTNAME="" -# Network technology ( LAN / WLAN ) -# "LAN" or leave blank to use Wired LAN Connection (default) +# Network Technology ( LAN / WLAN ) +# This option lets you switch between a LAN and WLAN connection +# Left blank or set to "LAN" sets the machine to use a wired network connection +# "WLAN" sets the machine to use a wireless connection NETWORK="" -# Network interface name or address (e.g. "eth0", "wlan0" or "00:0d:56:ec:ba:0c") -# you can leave blank to use eth0 (default) +# Network interface name or address +# This option lets you specificy a network device's name or address +# e.g. "eth0", "wlan0" or "00:0d:56:ec:ba:0c" +# Leaving this option blank uses the default setting "eth0" IFACE="" -# Static IP address in CIDR format (e.g. "192.168.1.1/24") -# leave blank to use DHCP server (default) +# Static IP address +# This option lets you set a static IP address in CIDR format +# e.g. "192.168.1.1/24" +# Leave blank to use DHCP (default) IPADDRESS="" -# Network gateway (e.g. "192.168.1.254") -# you must setup if you use an static IP address +# Network gateway +# This option lets you set your gateway address +# e.g. "192.168.1.254" +# This variable must be set if you are using a static IP address GATEWAY="" -# List of DNS servers (e.g. "192.168.1.253;192.168.1.254") -# you must setup if you use an static IP address +# DNS servers +# This option lets you set up DNS for your network +# e.g. "192.168.1.253;192.168.1.254" +# This variable must be set if you are using a static IP address NAMESERVER="" -# WLAN SSID (e.g. "MyNetwork") -# needed for Wireless network configuration +# WLAN SSID +# This option lets you set the SSID for your wireless network +# e.g. "MyNetwork" +# This variable must be set if you are using a wireless device SSID="" -# WLAN Security method ( NONE / WEP / PSK ) -# "NONE" or leave blank on an open WLAN (default) +# WLAN Security +# This option lets you chose the security protocol for your wireless +# network +# Options are "NONE" / "WEP" / "PSK" ) +# "NONE" or left blank for an open WLAN (default) # "WEP" for WEP protected WLAN's # "PSK" for WPA protected WLAN's SECURITY="" -# Passphrase to access your Wireless network (e.g. "TopSecret") -# needed for secure Wireless network configuration (WEP and WPA) +# WLAN Passphrase +# This option lets you set the password for your wireless network +# e.g. "TopSecret" +# This variable must be set if you are using a secure wireless network PASSPHRASE="" From f8fd5bc58dac6351903ca363a4c25e4d5bb530a9 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 10:51:11 +0100 Subject: [PATCH 121/850] netmount: fix comments in configfiles, thanks to ilya Signed-off-by: Stephan Raue --- .../netmount/config/netmount.conf.sample | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/network/netmount/config/netmount.conf.sample b/packages/network/netmount/config/netmount.conf.sample index ed5f5fac2b..0fda4757a7 100644 --- a/packages/network/netmount/config/netmount.conf.sample +++ b/packages/network/netmount/config/netmount.conf.sample @@ -1,17 +1,17 @@ -# Mounting Network shares on boot -# This configuration file allows to setup Network mounts via CIFS (Samba) or NFS -# (not yet included) -# This is an sample file, please rename or copy this file to netmount.conf -# (location /storage/.config/ or inside the samba share "Configfiles" +# netmount.conf +# +# This configuration file allows you to setup network mounts via +# CIFS (Samba) while the system is booting +# +# This is an sample file, please rename or copy this file to +# netmount.conf in the samba share "Configfiles" (or /storage/.config/) # # Usage: # service | share on server | local mountpoint | mount options # -# - please use an "|" as delimiter -# - dont use spaces in usernames, passwords and options. -# - local mountpoints can be only on /storage and /media (not recommended!). -# - you can use any dir inside the XBMC home /storage/.xbmc/... for local -# mountpoints if you need this for some reasons. +# - Please use an "|" as delimiter +# - Don't use spaces in usernames, passwords and options +# - Local mountpoints should only be on /storage # # Examples: # cifs | //192.168.1.44/videos | /storage/mount/videos | username=user,password=secret From e4b5caaca09eb3586cda17657aac4c397c57691f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 10:51:24 +0100 Subject: [PATCH 122/850] samba: fix comments in configfiles, thanks to ilya Signed-off-by: Stephan Raue --- packages/network/samba/config/samba.conf.sample | 10 ++++++++-- packages/network/samba/config/smb.conf | 10 ++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/packages/network/samba/config/samba.conf.sample b/packages/network/samba/config/samba.conf.sample index 5b466c8818..da3784c7c4 100644 --- a/packages/network/samba/config/samba.conf.sample +++ b/packages/network/samba/config/samba.conf.sample @@ -1,5 +1,10 @@ +# samba.conf + +# This configuration file allows you to customize the samba shares +# available from your machine + [global] - server string = OpenELEC.tv Mediacenter(%i) + server string = Media Centre(%i) workgroup = WORKGROUP netbios name = openelec security = share @@ -9,7 +14,8 @@ syslog only = yes name resolve order = lmhosts wins bcast host -# here you can add a writable share of a disk under /storage +# Using the following configurations as a template allows you to add +# writable shares of disks and paths under /storage [Update] path = /storage/.update diff --git a/packages/network/samba/config/smb.conf b/packages/network/samba/config/smb.conf index 5b466c8818..da3784c7c4 100644 --- a/packages/network/samba/config/smb.conf +++ b/packages/network/samba/config/smb.conf @@ -1,5 +1,10 @@ +# samba.conf + +# This configuration file allows you to customize the samba shares +# available from your machine + [global] - server string = OpenELEC.tv Mediacenter(%i) + server string = Media Centre(%i) workgroup = WORKGROUP netbios name = openelec security = share @@ -9,7 +14,8 @@ syslog only = yes name resolve order = lmhosts wins bcast host -# here you can add a writable share of a disk under /storage +# Using the following configurations as a template allows you to add +# writable shares of disks and paths under /storage [Update] path = /storage/.update From dbab7c8606a439e8db036704680daab2d6fc5449 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 10:51:40 +0100 Subject: [PATCH 123/850] transmission: fix comments in configfiles, thanks to ilya Signed-off-by: Stephan Raue --- .../transmission/config/transmission.conf | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/packages/network/transmission/config/transmission.conf b/packages/network/transmission/config/transmission.conf index b42588e335..2e14ca89e8 100644 --- a/packages/network/transmission/config/transmission.conf +++ b/packages/network/transmission/config/transmission.conf @@ -1,6 +1,9 @@ -# Setup Transmission BitTorrent daemon +# transmission.conf -# start transmission at boot ( yes / no ) +# This configuration file allows you to setup 'Transmission' a +# BitTorrent daemon + +# Start transmission at boot ( yes / no ) TRANSMISSION_START="no" # Allow RPC access to a comma-delimited whitelist of IP addresses. @@ -8,19 +11,21 @@ # "127.0.0.1" Example: "127.0.0.*,192.168.1.*" TRANSMISSION_IP="127.0.0.1,192.168.0.*" -# use authentification for the web frontend ( yes / no ) +# Use authentication for the web frontend ( yes / no ) TRANSMISSION_AUTH="yes" -# username for logging to the webfrontend +# Username for logging to the webfrontend TRANSMISSION_USER="openelec" # password for logging to the webfrontend TRANSMISSION_PWD="openelec" -# incoming dir for not completed files (relative to downloaddir / -# "none" for disabling incoming dir) +# Incoming directory for non completed files +# Relative to 'Downloads' directory +# Set to "none" to disable TRANSMISSION_INCDIR="incoming" -# watch dir for .torrent files (relative to downloaddir / -# "none" for disabling watch dir) +# Watch directory for .torrent files +# Relative to 'Downloads' directory +# Set to "none" to disable watch folder TRANSMISSION_WATCHDIR="watch" From 3792a1b85a6e4ede904f87fea6e9f9612a64a6ac Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 10:51:59 +0100 Subject: [PATCH 124/850] lcdproc: fix comments in configfiles, thanks to ilya Signed-off-by: Stephan Raue --- packages/sysutils/lcdproc/config/lcd.conf | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/sysutils/lcdproc/config/lcd.conf b/packages/sysutils/lcdproc/config/lcd.conf index 6259b17772..b12ad5d6e9 100644 --- a/packages/sysutils/lcdproc/config/lcd.conf +++ b/packages/sysutils/lcdproc/config/lcd.conf @@ -1,7 +1,10 @@ -# Setup LCD/VFD driver ( none / irtrans ) -# -# none: no LCD/VFD hardware is installed -# -# irtrans: use irtrans as LCD/VFD driver +# lcd.conf + +# This configuration file allows you to enable a LCD/VFD driver + +# Valid options are "none" / "irtrans" + +# none: No LCD/VFD hardware is installed (default) +# irtrans: Use irtrans as LCD/VFD driver LCD_DRIVER="none" From 18c631b3027f6677db3162b5227a33c606f8bd2f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 10:52:17 +0100 Subject: [PATCH 125/850] remote: fix comments in configfiles, thanks to ilya Signed-off-by: Stephan Raue --- packages/sysutils/remote/config/remote.conf | 16 ++++---- .../config/evmap/03_0bc7_0006.evmap | 40 +++++++++++++++++++ .../config/rules/98-eventlircd.rules | 4 ++ 3 files changed, 53 insertions(+), 7 deletions(-) create mode 100644 packages/sysutils/remote/eventlircd/config/evmap/03_0bc7_0006.evmap diff --git a/packages/sysutils/remote/config/remote.conf b/packages/sysutils/remote/config/remote.conf index aafd0b010e..0a6be12bd4 100644 --- a/packages/sysutils/remote/config/remote.conf +++ b/packages/sysutils/remote/config/remote.conf @@ -1,9 +1,11 @@ -# Setup remote control ( none / lirc / irtrans ) -# -# none: no remote control hardware is installed -# -# lirc: use lirc as remotecontrol backend (default) -# -# irtrans: use irtrans as remotecontrol backend +# remote.conf + +# This configuration file lets you setup remote control access for your +# system +# Options are "none" / "lirc" / "irtrans" + +# none: No remote control hardware is installed +# lirc: Use lirc as remote control backend (default) +# irtrans: Use irtrans as remote control backend REMOTE_BACKEND="lirc" diff --git a/packages/sysutils/remote/eventlircd/config/evmap/03_0bc7_0006.evmap b/packages/sysutils/remote/eventlircd/config/evmap/03_0bc7_0006.evmap new file mode 100644 index 0000000000..65f4681e89 --- /dev/null +++ b/packages/sysutils/remote/eventlircd/config/evmap/03_0bc7_0006.evmap @@ -0,0 +1,40 @@ +# X10 Remote + + KEY_0 = KEY_NUMERIC_0 # 0 + KEY_1 = KEY_NUMERIC_1 # 1 + KEY_2 = KEY_NUMERIC_2 # 2 + KEY_3 = KEY_NUMERIC_3 # 3 + KEY_4 = KEY_NUMERIC_4 # 4 + KEY_5 = KEY_NUMERIC_5 # 5 + KEY_6 = KEY_NUMERIC_6 # 6 + KEY_7 = KEY_NUMERIC_7 # 7 + KEY_8 = KEY_NUMERIC_8 # 8 + KEY_9 = KEY_NUMERIC_9 # 9 + + KEY_VOLUMEUP = KEY_VOLUMEUP # Volume Up + KEY_VOLUMEDOWN = KEY_VOLUMEDOWN # Volume Down + KEY_PAGEDOWN = KEY_CHANNELDOWN # Channel Up + KEY_PAGEUP = KEY_CHANNELUP # Channel Down +#KEY_0 = KEY_MUTE # Mute (also Button 0) + + KEY_OK = KEY_OK # Direction OK (also used for Enter) + KEY_UP = KEY_UP # Direction Up + KEY_DOWN = KEY_DOWN # Direction Down + KEY_LEFT = KEY_LEFT # Direction Left + KEY_RIGHT = KEY_RIGHT # Direction Right + + KEY_PLAY = KEY_PLAY # Play (also used for Pause) + KEY_STOP = KEY_STOP # Stop + KEY_RECORD = KEY_RECORD # Record + KEY_FORWARD = KEY_FORWARD # Forward + KEY_REWIND = KEY_REWIND # Reverse + KEY_F = KEY_NEXT # Next track + KEY_E = KEY_PREVIOUS # Pre-track + + KEY_INFO = KEY_VIDEO # My Videos + KEY_DVD = KEY_CAMERA # My Pictures + KEY_BOOKMARKS = KEY_AUDIO # My Music + KEY_HOME = KEY_PROG1 # Start Key + + KEY_MENU = KEY_EXIT # Back + KEY_END = KEY_DELETE # Button "RC" diff --git a/packages/sysutils/remote/eventlircd/config/rules/98-eventlircd.rules b/packages/sysutils/remote/eventlircd/config/rules/98-eventlircd.rules index b4f40e6183..1006e59a5e 100644 --- a/packages/sysutils/remote/eventlircd/config/rules/98-eventlircd.rules +++ b/packages/sysutils/remote/eventlircd/config/rules/98-eventlircd.rules @@ -68,6 +68,10 @@ LABEL="begin-usb" ENV{ID_USB_INTERFACES}=="", IMPORT{program}="usb_id --export %p" +ENV{ID_VENDOR_ID}=="0bc7", ENV{ID_MODEL_ID}=="0006", \ + ENV{eventlircd_enable}="true", + ENV{eventlircd_evmap}="03_$env{ID_VENDOR_ID}_$env{ID_MODEL_ID}.evmap" + ENV{ID_VENDOR_ID}=="0419", ENV{ID_MODEL_ID}=="0001", \ ENV{eventlircd_enable}="true", ENV{eventlircd_evmap}="03_$env{ID_VENDOR_ID}_$env{ID_MODEL_ID}.evmap" From b7bc7105fe82d61b8b4dedf17ca6770453fc78db Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 10:52:41 +0100 Subject: [PATCH 126/850] autoupdate: fix comments in configfiles, thanks to ilya Signed-off-by: Stephan Raue --- packages/tools/autoupdate/config/update.conf | 40 +++++++++++++------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/packages/tools/autoupdate/config/update.conf b/packages/tools/autoupdate/config/update.conf index e6b47b08a3..15193243a4 100644 --- a/packages/tools/autoupdate/config/update.conf +++ b/packages/tools/autoupdate/config/update.conf @@ -1,15 +1,29 @@ -# Setup autoupdate ( no / manually / auto ) -# -# no: no popup-information about new updates, no automatically download, -# no autoupdate. -# -# manually: shows popupinformation about updates, you must manually download the -# and extract the update package. Copy the files "SYSTEM" and "KERNEL" -# locally or per SSH/SCP to /storage/.update or via SMB to the -# "Update" share. Then reboot the system to install the update. -# -# auto: shows popupinformation about updates, the autoupdater downloads the -# update package and shows an information that the system must -# manually rebooted to install the update. +# update.conf + +# This configuration file allows you to setup the update feature of +# openelec + +# The update features retain all custom settings and files from both +# the openelec base system and xbmc + +# Options are "no" / "manually" / "auto" ) + +# no: -Disable updates +# -No pop-up information about available updates +# -No automatic downloadling + +# manually: Manual updates +# -Shows pop-up information about available updates +# -No automatic downloading +# -To update: Download the required openelec version, extract +# and copy the two files "SYSTEM" and "KERNEL" to the "Update" +# share (or /storage/.update) +# Reboot the system and the update will install automatically + +# auto: Automatic updates +# -Shows pop-up information about available updates +# -New updates will be automatically downloaded +# -The system will notify you that a reboot is all that's +# required to complete the upgrade AUTOUPDATE=manually \ No newline at end of file From 072a9b8f4850a7edd1266de26ac639f016d4975e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 10:57:12 +0100 Subject: [PATCH 127/850] scripts/image_release: change $RELEASE_DIR location, remove $RELEASE_DIR if ready Signed-off-by: Stephan Raue --- scripts/image_release | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/scripts/image_release b/scripts/image_release index 89df2c5f29..9536b06c03 100755 --- a/scripts/image_release +++ b/scripts/image_release @@ -6,7 +6,7 @@ $SCRIPTS/image_squashfs get_version -RELEASE_DIR="$BUILD/target/OpenELEC-$TARGET_VERSION" +RELEASE_DIR="target/OpenELEC-$TARGET_VERSION" # cleanup rm -rf $RELEASE_DIR @@ -32,4 +32,7 @@ RELEASE_DIR="$BUILD/target/OpenELEC-$TARGET_VERSION" rm -rf $TARGET_IMG/OpenELEC-$TARGET_VERSION.tar.bz2 # create release tarball - tar cjf $TARGET_IMG/OpenELEC-$TARGET_VERSION.tar.bz2 -C $BUILD/target OpenELEC-$TARGET_VERSION + tar cjf $TARGET_IMG/OpenELEC-$TARGET_VERSION.tar.bz2 -C target OpenELEC-$TARGET_VERSION + +# cleanup release dir + rm -rf $RELEASE_DIR From 7827b9e8472112317e29428c2faa807ceb6fc696 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 11:28:51 +0100 Subject: [PATCH 128/850] bluez: update to bluez-4.79 Signed-off-by: Stephan Raue --- packages/network/bluez/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/network/bluez/url b/packages/network/bluez/url index 2a3bf380b8..ad03d658ed 100644 --- a/packages/network/bluez/url +++ b/packages/network/bluez/url @@ -1 +1 @@ -http://www.kernel.org/pub/linux/bluetooth/bluez-4.78.tar.bz2 \ No newline at end of file +http://www.kernel.org/pub/linux/bluetooth/bluez-4.79.tar.bz2 \ No newline at end of file From e2e589b04cb314192c77c120074c28bff568112a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 11:29:26 +0100 Subject: [PATCH 129/850] hdparm: update to hdparm-9.36 Signed-off-by: Stephan Raue --- packages/tools/hdparm/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/tools/hdparm/url b/packages/tools/hdparm/url index a423def420..99f2b506d7 100644 --- a/packages/tools/hdparm/url +++ b/packages/tools/hdparm/url @@ -1 +1 @@ -http://downloads.sourceforge.net/project/hdparm/hdparm/hdparm-9.35.tar.gz \ No newline at end of file +http://downloads.sourceforge.net/project/hdparm/hdparm/hdparm-9.36.tar.gz \ No newline at end of file From d3deda53df1eaf0b9ea7f29e9afaa04f5eac82eb Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 11:30:09 +0100 Subject: [PATCH 130/850] xf86-video-nvidia: update to xf86-video-nvidia-260.19.21 Signed-off-by: Stephan Raue --- packages/x11/driver/xf86-video-nvidia/meta | 2 +- packages/x11/driver/xf86-video-nvidia/meta.new | 16 ---------------- .../NVIDIA-256.44-2.6.36-0.1.diff | 11 ----------- 3 files changed, 1 insertion(+), 28 deletions(-) delete mode 100644 packages/x11/driver/xf86-video-nvidia/meta.new delete mode 100644 packages/x11/driver/xf86-video-nvidia/patches.upstream/NVIDIA-256.44-2.6.36-0.1.diff diff --git a/packages/x11/driver/xf86-video-nvidia/meta b/packages/x11/driver/xf86-video-nvidia/meta index 4863346a82..577eb827a5 100644 --- a/packages/x11/driver/xf86-video-nvidia/meta +++ b/packages/x11/driver/xf86-video-nvidia/meta @@ -1,5 +1,5 @@ PKG_NAME="xf86-video-nvidia" -PKG_VERSION="256.53" +PKG_VERSION="260.19.21" PKG_REV="1" PKG_ARCH="i386 x86_64" PKG_LICENSE="nonfree" diff --git a/packages/x11/driver/xf86-video-nvidia/meta.new b/packages/x11/driver/xf86-video-nvidia/meta.new deleted file mode 100644 index 8ceb814f5f..0000000000 --- a/packages/x11/driver/xf86-video-nvidia/meta.new +++ /dev/null @@ -1,16 +0,0 @@ -PKG_NAME="xf86-video-nvidia" -PKG_VERSION="260.19.12" -PKG_REV="1" -PKG_ARCH="i386 x86_64" -PKG_LICENSE="nonfree" -PKG_SITE="http://www.nvidia.com/" -[ $TARGET_ARCH = i386 ] && PKG_URL="ftp://download.nvidia.com/XFree86/Linux-x86/$PKG_VERSION/NVIDIA-Linux-x86-$PKG_VERSION.run" -[ $TARGET_ARCH = x86_64 ] && PKG_URL="ftp://download.nvidia.com/XFree86/Linux-x86_64/$PKG_VERSION/NVIDIA-Linux-x86_64-$PKG_VERSION-no-compat32.run" -PKG_DEPENDS="linux libXinerama" -PKG_BUILD_DEPENDS="toolchain linux xorg-server" -PKG_PRIORITY="optional" -PKG_SECTION="x11/driver" -PKG_SHORTDESC="xf86-video-nvidia: The Xorg driver for NVIDIA video chips" -PKG_LONGDESC="These binary drivers provide optimized hardware acceleration of OpenGL applications via a direct-rendering X Server. AGP, PCIe, SLI, TV-out and flat panel displays are also supported. This version only supports GeForce 6xxx and higher of the Geforce GPUs plus complimentary Quadros and nforce." -PKG_IS_ADDON="no" - diff --git a/packages/x11/driver/xf86-video-nvidia/patches.upstream/NVIDIA-256.44-2.6.36-0.1.diff b/packages/x11/driver/xf86-video-nvidia/patches.upstream/NVIDIA-256.44-2.6.36-0.1.diff deleted file mode 100644 index cf5ed96d9b..0000000000 --- a/packages/x11/driver/xf86-video-nvidia/patches.upstream/NVIDIA-256.44-2.6.36-0.1.diff +++ /dev/null @@ -1,11 +0,0 @@ -diff -Naur NVIDIA-Linux-x86_64-256.53-no-compat32/kernel/nv.c NVIDIA-Linux-x86_64-256.53-no-compat32.patch/kernel/nv.c ---- NVIDIA-Linux-x86_64-256.53-no-compat32/kernel/nv.c 2010-08-28 05:28:03.000000000 +0200 -+++ NVIDIA-Linux-x86_64-256.53-no-compat32.patch/kernel/nv.c 2010-10-27 13:30:54.202322884 +0200 -@@ -423,7 +423,6 @@ - static struct file_operations nv_fops = { - .owner = THIS_MODULE, - .poll = nv_kern_poll, -- .ioctl = nv_kern_ioctl, - #if defined(HAVE_UNLOCKED_IOCTL) - .unlocked_ioctl = nv_kern_unlocked_ioctl, - #endif From e4c3042e97348090cecba9a85957ad8eb37811fb Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 11:30:37 +0100 Subject: [PATCH 131/850] mpfr: update upstream patch Signed-off-by: Stephan Raue --- .../mpfr-3.0.0-allpatches_20100710.diff | 621 ------ .../mpfr-3.0.0-allpatches_20101110.diff | 1668 +++++++++++++++++ 2 files changed, 1668 insertions(+), 621 deletions(-) delete mode 100644 packages/toolchain/math/mpfr/patches/mpfr-3.0.0-allpatches_20100710.diff create mode 100644 packages/toolchain/math/mpfr/patches/mpfr-3.0.0-allpatches_20101110.diff diff --git a/packages/toolchain/math/mpfr/patches/mpfr-3.0.0-allpatches_20100710.diff b/packages/toolchain/math/mpfr/patches/mpfr-3.0.0-allpatches_20100710.diff deleted file mode 100644 index ec09117793..0000000000 --- a/packages/toolchain/math/mpfr/patches/mpfr-3.0.0-allpatches_20100710.diff +++ /dev/null @@ -1,621 +0,0 @@ -diff -Naur mpfr-3.0.0-old/acinclude.m4 mpfr-3.0.0-new/acinclude.m4 ---- mpfr-3.0.0-old/acinclude.m4 2010-06-10 04:00:14.000000000 -0700 -+++ mpfr-3.0.0-new/acinclude.m4 2010-07-11 08:07:36.000000000 -0700 -@@ -59,6 +59,9 @@ - dnl sys/fpu.h - MIPS specific - AC_CHECK_HEADERS([sys/time.h sys/fpu.h]) - -+dnl Check how to get `alloca' -+AC_FUNC_ALLOCA -+ - dnl SIZE_MAX macro - gl_SIZE_MAX - -diff -Naur mpfr-3.0.0-old/configure mpfr-3.0.0-new/configure ---- mpfr-3.0.0-old/configure 2010-06-10 04:00:51.000000000 -0700 -+++ mpfr-3.0.0-new/configure 2010-07-11 08:07:36.000000000 -0700 -@@ -783,6 +783,7 @@ - OBJDUMP - DLLTOOL - AS -+ALLOCA - MPFR_LIBM - ANSI2KNR - U -@@ -5622,6 +5623,197 @@ - done - - -+# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works -+# for constant arguments. Useless! -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 -+$as_echo_n "checking for working alloca.h... " >&6; } -+if test "${ac_cv_working_alloca_h+set}" = set; then : -+ $as_echo_n "(cached) " >&6 -+else -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+#include -+int -+main () -+{ -+char *p = (char *) alloca (2 * sizeof (int)); -+ if (p) return 0; -+ ; -+ return 0; -+} -+_ACEOF -+if ac_fn_c_try_link "$LINENO"; then : -+ ac_cv_working_alloca_h=yes -+else -+ ac_cv_working_alloca_h=no -+fi -+rm -f core conftest.err conftest.$ac_objext \ -+ conftest$ac_exeext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 -+$as_echo "$ac_cv_working_alloca_h" >&6; } -+if test $ac_cv_working_alloca_h = yes; then -+ -+$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h -+ -+fi -+ -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 -+$as_echo_n "checking for alloca... " >&6; } -+if test "${ac_cv_func_alloca_works+set}" = set; then : -+ $as_echo_n "(cached) " >&6 -+else -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+#ifdef __GNUC__ -+# define alloca __builtin_alloca -+#else -+# ifdef _MSC_VER -+# include -+# define alloca _alloca -+# else -+# ifdef HAVE_ALLOCA_H -+# include -+# else -+# ifdef _AIX -+ #pragma alloca -+# else -+# ifndef alloca /* predefined by HP cc +Olibcalls */ -+char *alloca (); -+# endif -+# endif -+# endif -+# endif -+#endif -+ -+int -+main () -+{ -+char *p = (char *) alloca (1); -+ if (p) return 0; -+ ; -+ return 0; -+} -+_ACEOF -+if ac_fn_c_try_link "$LINENO"; then : -+ ac_cv_func_alloca_works=yes -+else -+ ac_cv_func_alloca_works=no -+fi -+rm -f core conftest.err conftest.$ac_objext \ -+ conftest$ac_exeext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 -+$as_echo "$ac_cv_func_alloca_works" >&6; } -+ -+if test $ac_cv_func_alloca_works = yes; then -+ -+$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h -+ -+else -+ # The SVR3 libPW and SVR4 libucb both contain incompatible functions -+# that cause trouble. Some versions do not even contain alloca or -+# contain a buggy version. If you still want to use their alloca, -+# use ar to extract alloca.o from them instead of compiling alloca.c. -+ -+ALLOCA=\${LIBOBJDIR}alloca.$ac_objext -+ -+$as_echo "#define C_ALLOCA 1" >>confdefs.h -+ -+ -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 -+$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } -+if test "${ac_cv_os_cray+set}" = set; then : -+ $as_echo_n "(cached) " >&6 -+else -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+#if defined CRAY && ! defined CRAY2 -+webecray -+#else -+wenotbecray -+#endif -+ -+_ACEOF -+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | -+ $EGREP "webecray" >/dev/null 2>&1; then : -+ ac_cv_os_cray=yes -+else -+ ac_cv_os_cray=no -+fi -+rm -f conftest* -+ -+fi -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 -+$as_echo "$ac_cv_os_cray" >&6; } -+if test $ac_cv_os_cray = yes; then -+ for ac_func in _getb67 GETB67 getb67; do -+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -+eval as_val=\$$as_ac_var -+ if test "x$as_val" = x""yes; then : -+ -+cat >>confdefs.h <<_ACEOF -+#define CRAY_STACKSEG_END $ac_func -+_ACEOF -+ -+ break -+fi -+ -+ done -+fi -+ -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 -+$as_echo_n "checking stack direction for C alloca... " >&6; } -+if test "${ac_cv_c_stack_direction+set}" = set; then : -+ $as_echo_n "(cached) " >&6 -+else -+ if test "$cross_compiling" = yes; then : -+ ac_cv_c_stack_direction=0 -+else -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+$ac_includes_default -+int -+find_stack_direction () -+{ -+ static char *addr = 0; -+ auto char dummy; -+ if (addr == 0) -+ { -+ addr = &dummy; -+ return find_stack_direction (); -+ } -+ else -+ return (&dummy > addr) ? 1 : -1; -+} -+ -+int -+main () -+{ -+ return find_stack_direction () < 0; -+} -+_ACEOF -+if ac_fn_c_try_run "$LINENO"; then : -+ ac_cv_c_stack_direction=1 -+else -+ ac_cv_c_stack_direction=-1 -+fi -+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ -+ conftest.$ac_objext conftest.beam conftest.$ac_ext -+fi -+ -+fi -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 -+$as_echo "$ac_cv_c_stack_direction" >&6; } -+cat >>confdefs.h <<_ACEOF -+#define STACK_DIRECTION $ac_cv_c_stack_direction -+_ACEOF -+ -+ -+fi -+ -+ - - for ac_header in stdint.h - do : -@@ -7564,13 +7756,13 @@ - else - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext -- (eval echo "\"\$as_me:7567: $ac_compile\"" >&5) -+ (eval echo "\"\$as_me:7759: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 -- (eval echo "\"\$as_me:7570: $NM \\\"conftest.$ac_objext\\\"\"" >&5) -+ (eval echo "\"\$as_me:7762: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 -- (eval echo "\"\$as_me:7573: output\"" >&5) -+ (eval echo "\"\$as_me:7765: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" -@@ -8772,7 +8964,7 @@ - ;; - *-*-irix6*) - # Find out which ABI we are using. -- echo '#line 8775 "configure"' > conftest.$ac_ext -+ echo '#line 8967 "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? -@@ -10032,11 +10224,11 @@ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` -- (eval echo "\"\$as_me:10035: $lt_compile\"" >&5) -+ (eval echo "\"\$as_me:10227: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 -- echo "$as_me:10039: \$? = $ac_status" >&5 -+ echo "$as_me:10231: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. -@@ -10371,11 +10563,11 @@ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` -- (eval echo "\"\$as_me:10374: $lt_compile\"" >&5) -+ (eval echo "\"\$as_me:10566: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 -- echo "$as_me:10378: \$? = $ac_status" >&5 -+ echo "$as_me:10570: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. -@@ -10476,11 +10668,11 @@ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` -- (eval echo "\"\$as_me:10479: $lt_compile\"" >&5) -+ (eval echo "\"\$as_me:10671: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 -- echo "$as_me:10483: \$? = $ac_status" >&5 -+ echo "$as_me:10675: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized -@@ -10531,11 +10723,11 @@ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` -- (eval echo "\"\$as_me:10534: $lt_compile\"" >&5) -+ (eval echo "\"\$as_me:10726: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 -- echo "$as_me:10538: \$? = $ac_status" >&5 -+ echo "$as_me:10730: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized -@@ -12915,7 +13107,7 @@ - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF --#line 12918 "configure" -+#line 13110 "configure" - #include "confdefs.h" - - #if HAVE_DLFCN_H -@@ -13011,7 +13203,7 @@ - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF --#line 13014 "configure" -+#line 13206 "configure" - #include "confdefs.h" - - #if HAVE_DLFCN_H -diff -Naur mpfr-3.0.0-old/gamma.c mpfr-3.0.0-new/gamma.c ---- mpfr-3.0.0-old/gamma.c 2010-06-10 04:00:14.000000000 -0700 -+++ mpfr-3.0.0-new/gamma.c 2010-07-11 08:07:36.000000000 -0700 -@@ -274,7 +274,7 @@ - /* we want an upper bound for x * [log(2-x)-1]. - since x < 0, we need a lower bound on log(2-x) */ - mpfr_ui_sub (xp, 2, x, MPFR_RNDD); -- mpfr_log (xp, xp, MPFR_RNDD); -+ mpfr_log2 (xp, xp, MPFR_RNDD); - mpfr_sub_ui (xp, xp, 1, MPFR_RNDD); - mpfr_mul (xp, xp, x, MPFR_RNDU); - -@@ -303,8 +303,8 @@ - { - mpfr_sub (tmp, tmp, tmp2, MPFR_RNDZ); /* low bnd on |sin(Pi*(2-x))| */ - mpfr_ui_div (tmp, 12, tmp, MPFR_RNDU); /* upper bound */ -- mpfr_log (tmp, tmp, MPFR_RNDU); -- mpfr_add (tmp, tmp, xp, MPFR_RNDU); -+ mpfr_log2 (tmp, tmp, MPFR_RNDU); -+ mpfr_add (xp, tmp, xp, MPFR_RNDU); - underflow = mpfr_cmp_si (xp, expo.saved_emin - 2) <= 0; - } - -diff -Naur mpfr-3.0.0-old/Makefile.in mpfr-3.0.0-new/Makefile.in ---- mpfr-3.0.0-old/Makefile.in 2010-06-10 04:00:52.000000000 -0700 -+++ mpfr-3.0.0-new/Makefile.in 2010-07-11 08:07:36.000000000 -0700 -@@ -239,6 +239,7 @@ - distuninstallcheck_listfiles = find . -type f -print - distcleancheck_listfiles = find . -type f -print - ACLOCAL = @ACLOCAL@ -+ALLOCA = @ALLOCA@ - AMTAR = @AMTAR@ - AR = @AR@ - AS = @AS@ -diff -Naur mpfr-3.0.0-old/mpfr.h mpfr-3.0.0-new/mpfr.h ---- mpfr-3.0.0-old/mpfr.h 2010-06-10 04:00:14.000000000 -0700 -+++ mpfr-3.0.0-new/mpfr.h 2010-07-11 08:07:36.000000000 -0700 -@@ -27,7 +27,7 @@ - #define MPFR_VERSION_MAJOR 3 - #define MPFR_VERSION_MINOR 0 - #define MPFR_VERSION_PATCHLEVEL 0 --#define MPFR_VERSION_STRING "3.0.0" -+#define MPFR_VERSION_STRING "3.0.0-p3" - - /* Macros dealing with MPFR VERSION */ - #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) -diff -Naur mpfr-3.0.0-old/mpfr.texi mpfr-3.0.0-new/mpfr.texi ---- mpfr-3.0.0-old/mpfr.texi 2010-06-10 04:00:14.000000000 -0700 -+++ mpfr-3.0.0-new/mpfr.texi 2010-07-11 08:07:36.000000000 -0700 -@@ -2050,7 +2050,7 @@ - are printed. If @var{base} is greater than 10, @samp{@@} will be used - instead of @samp{e} as exponent delimiter. - --Return the number of bytes written, or if an error occurred, return 0. -+Return the number of characters written, or if an error occurred, return 0. - @end deftypefun - - @deftypefun size_t mpfr_inp_str (mpfr_t @var{rop}, FILE *@var{stream}, int @var{base}, mpfr_rnd_t @var{rnd}) -diff -Naur mpfr-3.0.0-old/out_str.c mpfr-3.0.0-new/out_str.c ---- mpfr-3.0.0-old/out_str.c 2010-06-10 04:00:14.000000000 -0700 -+++ mpfr-3.0.0-new/out_str.c 2010-07-11 08:07:36.000000000 -0700 -@@ -22,6 +22,16 @@ - - #include "mpfr-impl.h" - -+/* Warning! S should not contain "%". */ -+#define OUT_STR_RET(S) \ -+ do \ -+ { \ -+ int r; \ -+ r = fprintf (stream, (S)); \ -+ return r < 0 ? 0 : r; \ -+ } \ -+ while (0) -+ - size_t - mpfr_out_str (FILE *stream, int base, size_t n_digits, mpfr_srcptr op, - mpfr_rnd_t rnd_mode) -@@ -29,6 +39,7 @@ - char *s, *s0; - size_t l; - mpfr_exp_t e; -+ int err; - - MPFR_ASSERTN (base >= 2 && base <= 62); - -@@ -36,37 +47,16 @@ - if (stream == NULL) - stream = stdout; - -- if (MPFR_IS_NAN(op)) -- { -- fprintf (stream, "@NaN@"); -- return 3; -- } -- -- if (MPFR_IS_INF(op)) -- { -- if (MPFR_SIGN(op) > 0) -- { -- fprintf (stream, "@Inf@"); -- return 3; -- } -- else -- { -- fprintf (stream, "-@Inf@"); -- return 4; -- } -- } -- -- if (MPFR_IS_ZERO(op)) -+ if (MPFR_UNLIKELY (MPFR_IS_SINGULAR (op))) - { -- if (MPFR_SIGN(op) > 0) -- { -- fprintf(stream, "0"); -- return 1; -- } -+ if (MPFR_IS_NAN (op)) -+ OUT_STR_RET ("@NaN@"); -+ else if (MPFR_IS_INF (op)) -+ OUT_STR_RET (MPFR_IS_POS (op) ? "@Inf@" : "-@Inf@"); - else - { -- fprintf(stream, "-0"); -- return 2; -+ MPFR_ASSERTD (MPFR_IS_ZERO (op)); -+ OUT_STR_RET (MPFR_IS_POS (op) ? "0" : "-0"); - } - } - -@@ -77,21 +67,31 @@ - - l = strlen (s) + 1; /* size of allocated block returned by mpfr_get_str - - may be incorrect, as only an upper bound? */ -- if (*s == '-') -- fputc (*s++, stream); - -- /* outputs mantissa */ -- fputc (*s++, stream); e--; /* leading digit */ -- fputc ((unsigned char) MPFR_DECIMAL_POINT, stream); -- fputs (s, stream); /* rest of mantissa */ -+ /* outputs possible sign and significand */ -+ err = (*s == '-' && fputc (*s++, stream) == EOF) -+ || fputc (*s++, stream) == EOF /* leading digit */ -+ || fputc ((unsigned char) MPFR_DECIMAL_POINT, stream) == EOF -+ || fputs (s, stream) == EOF; /* trailing significand */ - (*__gmp_free_func) (s0, l); -+ if (MPFR_UNLIKELY (err)) -+ return 0; -+ -+ e--; /* due to the leading digit */ - - /* outputs exponent */ - if (e) - { -+ int r; -+ - MPFR_ASSERTN(e >= LONG_MIN); - MPFR_ASSERTN(e <= LONG_MAX); -- l += fprintf (stream, (base <= 10 ? "e%ld" : "@%ld"), (long) e); -+ -+ r = fprintf (stream, (base <= 10 ? "e%ld" : "@%ld"), (long) e); -+ if (MPFR_UNLIKELY (r < 0)) -+ return 0; -+ -+ l += r; - } - - return l; -diff -Naur mpfr-3.0.0-old/PATCHES mpfr-3.0.0-new/PATCHES ---- mpfr-3.0.0-old/PATCHES 2010-06-10 04:00:14.000000000 -0700 -+++ mpfr-3.0.0-new/PATCHES 2010-07-11 08:07:36.000000000 -0700 -@@ -0,0 +1,3 @@ -+gamma_underflow -+alloca -+mpfr_out_str -diff -Naur mpfr-3.0.0-old/tests/Makefile.in mpfr-3.0.0-new/tests/Makefile.in ---- mpfr-3.0.0-old/tests/Makefile.in 2010-06-10 04:00:52.000000000 -0700 -+++ mpfr-3.0.0-new/tests/Makefile.in 2010-07-11 08:07:36.000000000 -0700 -@@ -960,6 +960,7 @@ - red=; grn=; lgn=; blu=; std= - DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) - ACLOCAL = @ACLOCAL@ -+ALLOCA = @ALLOCA@ - AMTAR = @AMTAR@ - AR = @AR@ - AS = @AS@ -diff -Naur mpfr-3.0.0-old/tests/tgamma.c mpfr-3.0.0-new/tests/tgamma.c ---- mpfr-3.0.0-old/tests/tgamma.c 2010-06-10 04:00:13.000000000 -0700 -+++ mpfr-3.0.0-new/tests/tgamma.c 2010-07-11 08:07:36.000000000 -0700 -@@ -461,6 +461,20 @@ - mpfr_clear (x); - } - -+/* bug found by Stathis, only occurs on 32-bit machines */ -+static void -+test20100709 (void) -+{ -+ mpfr_t x; -+ int inex; -+ -+ mpfr_init2 (x, 100); -+ mpfr_set_str (x, "-4.6308260837372266e+07", 10, MPFR_RNDN); -+ inex = mpfr_gamma (x, x, MPFR_RNDN); -+ MPFR_ASSERTN(MPFR_IS_ZERO(x) && MPFR_IS_NEG(x) && inex > 0); -+ mpfr_clear (x); -+} -+ - int - main (int argc, char *argv[]) - { -@@ -471,6 +485,7 @@ - test_generic (2, 100, 2); - gamma_integer (); - test20071231 (); -+ test20100709 (); - - data_check ("data/gamma", mpfr_gamma, "mpfr_gamma"); - -diff -Naur mpfr-3.0.0-old/tests/tout_str.c mpfr-3.0.0-new/tests/tout_str.c ---- mpfr-3.0.0-old/tests/tout_str.c 2010-06-10 04:00:13.000000000 -0700 -+++ mpfr-3.0.0-new/tests/tout_str.c 2010-07-11 08:07:36.000000000 -0700 -@@ -46,22 +46,54 @@ - special (void) - { - mpfr_t x; -+ unsigned int n; - - mpfr_init (x); - - mpfr_set_nan (x); -- mpfr_out_str (fout, 10, 0, x, MPFR_RNDN); -+ n = mpfr_out_str (fout, 10, 0, x, MPFR_RNDN); -+ if (n != 5) -+ { -+ printf ("Error: mpfr_out_str (file, 10, 0, NaN, MPFR_RNDN) wrote %u " -+ "characters instead of 5.\n", n); -+ exit (1); -+ } - - mpfr_set_inf (x, 1); -- mpfr_out_str (fout, 10, 0, x, MPFR_RNDN); -+ n = mpfr_out_str (fout, 10, 0, x, MPFR_RNDN); -+ if (n != 5) -+ { -+ printf ("Error: mpfr_out_str (file, 10, 0, +Inf, MPFR_RNDN) wrote %u " -+ "characters instead of 5.\n", n); -+ exit (1); -+ } - - mpfr_set_inf (x, -1); -- mpfr_out_str (fout, 10, 0, x, MPFR_RNDN); -+ n = mpfr_out_str (fout, 10, 0, x, MPFR_RNDN); -+ if (n != 6) -+ { -+ printf ("Error: mpfr_out_str (file, 10, 0, -Inf, MPFR_RNDN) wrote %u " -+ "characters instead of 6.\n", n); -+ exit (1); -+ } - - mpfr_set_ui (x, 0, MPFR_RNDN); -- mpfr_out_str (fout, 10, 0, x, MPFR_RNDN); -+ n = mpfr_out_str (fout, 10, 0, x, MPFR_RNDN); -+ if (n != 1) -+ { -+ printf ("Error: mpfr_out_str (file, 10, 0, +0, MPFR_RNDN) wrote %u " -+ "characters instead of 1.\n", n); -+ exit (1); -+ } -+ - mpfr_neg (x, x, MPFR_RNDN); -- mpfr_out_str (fout, 10, 0, x, MPFR_RNDN); -+ n = mpfr_out_str (fout, 10, 0, x, MPFR_RNDN); -+ if (n != 2) -+ { -+ printf ("Error: mpfr_out_str (file, 10, 0, -0, MPFR_RNDN) wrote %u " -+ "characters instead of 2.\n", n); -+ exit (1); -+ } - - mpfr_clear (x); - } -diff -Naur mpfr-3.0.0-old/VERSION mpfr-3.0.0-new/VERSION ---- mpfr-3.0.0-old/VERSION 2010-06-10 04:00:14.000000000 -0700 -+++ mpfr-3.0.0-new/VERSION 2010-07-11 08:07:36.000000000 -0700 -@@ -1 +1 @@ --3.0.0 -+3.0.0-p3 -diff -Naur mpfr-3.0.0-old/version.c mpfr-3.0.0-new/version.c ---- mpfr-3.0.0-old/version.c 2010-06-10 04:00:14.000000000 -0700 -+++ mpfr-3.0.0-new/version.c 2010-07-11 08:07:36.000000000 -0700 -@@ -25,5 +25,5 @@ - const char * - mpfr_get_version (void) - { -- return "3.0.0"; -+ return "3.0.0-p3"; - } diff --git a/packages/toolchain/math/mpfr/patches/mpfr-3.0.0-allpatches_20101110.diff b/packages/toolchain/math/mpfr/patches/mpfr-3.0.0-allpatches_20101110.diff new file mode 100644 index 0000000000..0d64508321 --- /dev/null +++ b/packages/toolchain/math/mpfr/patches/mpfr-3.0.0-allpatches_20101110.diff @@ -0,0 +1,1668 @@ +diff -Naur mpfr-3.0.0-old/acinclude.m4 mpfr-3.0.0-new/acinclude.m4 +--- mpfr-3.0.0-old/acinclude.m4 2010-06-10 04:00:14.000000000 -0700 ++++ mpfr-3.0.0-new/acinclude.m4 2010-11-10 16:53:44.000000000 -0800 +@@ -59,6 +59,9 @@ + dnl sys/fpu.h - MIPS specific + AC_CHECK_HEADERS([sys/time.h sys/fpu.h]) + ++dnl Check how to get `alloca' ++AC_FUNC_ALLOCA ++ + dnl SIZE_MAX macro + gl_SIZE_MAX + +diff -Naur mpfr-3.0.0-old/configure mpfr-3.0.0-new/configure +--- mpfr-3.0.0-old/configure 2010-06-10 04:00:51.000000000 -0700 ++++ mpfr-3.0.0-new/configure 2010-11-10 16:53:44.000000000 -0800 +@@ -783,6 +783,7 @@ + OBJDUMP + DLLTOOL + AS ++ALLOCA + MPFR_LIBM + ANSI2KNR + U +@@ -5622,6 +5623,197 @@ + done + + ++# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works ++# for constant arguments. Useless! ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 ++$as_echo_n "checking for working alloca.h... " >&6; } ++if test "${ac_cv_working_alloca_h+set}" = set; then : ++ $as_echo_n "(cached) " >&6 ++else ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include ++int ++main () ++{ ++char *p = (char *) alloca (2 * sizeof (int)); ++ if (p) return 0; ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_link "$LINENO"; then : ++ ac_cv_working_alloca_h=yes ++else ++ ac_cv_working_alloca_h=no ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 ++$as_echo "$ac_cv_working_alloca_h" >&6; } ++if test $ac_cv_working_alloca_h = yes; then ++ ++$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h ++ ++fi ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 ++$as_echo_n "checking for alloca... " >&6; } ++if test "${ac_cv_func_alloca_works+set}" = set; then : ++ $as_echo_n "(cached) " >&6 ++else ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#ifdef __GNUC__ ++# define alloca __builtin_alloca ++#else ++# ifdef _MSC_VER ++# include ++# define alloca _alloca ++# else ++# ifdef HAVE_ALLOCA_H ++# include ++# else ++# ifdef _AIX ++ #pragma alloca ++# else ++# ifndef alloca /* predefined by HP cc +Olibcalls */ ++char *alloca (); ++# endif ++# endif ++# endif ++# endif ++#endif ++ ++int ++main () ++{ ++char *p = (char *) alloca (1); ++ if (p) return 0; ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_link "$LINENO"; then : ++ ac_cv_func_alloca_works=yes ++else ++ ac_cv_func_alloca_works=no ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 ++$as_echo "$ac_cv_func_alloca_works" >&6; } ++ ++if test $ac_cv_func_alloca_works = yes; then ++ ++$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h ++ ++else ++ # The SVR3 libPW and SVR4 libucb both contain incompatible functions ++# that cause trouble. Some versions do not even contain alloca or ++# contain a buggy version. If you still want to use their alloca, ++# use ar to extract alloca.o from them instead of compiling alloca.c. ++ ++ALLOCA=\${LIBOBJDIR}alloca.$ac_objext ++ ++$as_echo "#define C_ALLOCA 1" >>confdefs.h ++ ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 ++$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } ++if test "${ac_cv_os_cray+set}" = set; then : ++ $as_echo_n "(cached) " >&6 ++else ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#if defined CRAY && ! defined CRAY2 ++webecray ++#else ++wenotbecray ++#endif ++ ++_ACEOF ++if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | ++ $EGREP "webecray" >/dev/null 2>&1; then : ++ ac_cv_os_cray=yes ++else ++ ac_cv_os_cray=no ++fi ++rm -f conftest* ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 ++$as_echo "$ac_cv_os_cray" >&6; } ++if test $ac_cv_os_cray = yes; then ++ for ac_func in _getb67 GETB67 getb67; do ++ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ++ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" ++eval as_val=\$$as_ac_var ++ if test "x$as_val" = x""yes; then : ++ ++cat >>confdefs.h <<_ACEOF ++#define CRAY_STACKSEG_END $ac_func ++_ACEOF ++ ++ break ++fi ++ ++ done ++fi ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 ++$as_echo_n "checking stack direction for C alloca... " >&6; } ++if test "${ac_cv_c_stack_direction+set}" = set; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test "$cross_compiling" = yes; then : ++ ac_cv_c_stack_direction=0 ++else ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++$ac_includes_default ++int ++find_stack_direction () ++{ ++ static char *addr = 0; ++ auto char dummy; ++ if (addr == 0) ++ { ++ addr = &dummy; ++ return find_stack_direction (); ++ } ++ else ++ return (&dummy > addr) ? 1 : -1; ++} ++ ++int ++main () ++{ ++ return find_stack_direction () < 0; ++} ++_ACEOF ++if ac_fn_c_try_run "$LINENO"; then : ++ ac_cv_c_stack_direction=1 ++else ++ ac_cv_c_stack_direction=-1 ++fi ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ ++ conftest.$ac_objext conftest.beam conftest.$ac_ext ++fi ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 ++$as_echo "$ac_cv_c_stack_direction" >&6; } ++cat >>confdefs.h <<_ACEOF ++#define STACK_DIRECTION $ac_cv_c_stack_direction ++_ACEOF ++ ++ ++fi ++ ++ + + for ac_header in stdint.h + do : +@@ -7564,13 +7756,13 @@ + else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext +- (eval echo "\"\$as_me:7567: $ac_compile\"" >&5) ++ (eval echo "\"\$as_me:7759: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 +- (eval echo "\"\$as_me:7570: $NM \\\"conftest.$ac_objext\\\"\"" >&5) ++ (eval echo "\"\$as_me:7762: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 +- (eval echo "\"\$as_me:7573: output\"" >&5) ++ (eval echo "\"\$as_me:7765: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" +@@ -8772,7 +8964,7 @@ + ;; + *-*-irix6*) + # Find out which ABI we are using. +- echo '#line 8775 "configure"' > conftest.$ac_ext ++ echo '#line 8967 "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? +@@ -10032,11 +10224,11 @@ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` +- (eval echo "\"\$as_me:10035: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:10227: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 +- echo "$as_me:10039: \$? = $ac_status" >&5 ++ echo "$as_me:10231: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. +@@ -10371,11 +10563,11 @@ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` +- (eval echo "\"\$as_me:10374: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:10566: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 +- echo "$as_me:10378: \$? = $ac_status" >&5 ++ echo "$as_me:10570: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. +@@ -10476,11 +10668,11 @@ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` +- (eval echo "\"\$as_me:10479: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:10671: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 +- echo "$as_me:10483: \$? = $ac_status" >&5 ++ echo "$as_me:10675: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized +@@ -10531,11 +10723,11 @@ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` +- (eval echo "\"\$as_me:10534: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:10726: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 +- echo "$as_me:10538: \$? = $ac_status" >&5 ++ echo "$as_me:10730: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized +@@ -12915,7 +13107,7 @@ + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +-#line 12918 "configure" ++#line 13110 "configure" + #include "confdefs.h" + + #if HAVE_DLFCN_H +@@ -13011,7 +13203,7 @@ + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +-#line 13014 "configure" ++#line 13206 "configure" + #include "confdefs.h" + + #if HAVE_DLFCN_H +diff -Naur mpfr-3.0.0-old/gamma.c mpfr-3.0.0-new/gamma.c +--- mpfr-3.0.0-old/gamma.c 2010-06-10 04:00:14.000000000 -0700 ++++ mpfr-3.0.0-new/gamma.c 2010-11-10 16:53:44.000000000 -0800 +@@ -274,7 +274,7 @@ + /* we want an upper bound for x * [log(2-x)-1]. + since x < 0, we need a lower bound on log(2-x) */ + mpfr_ui_sub (xp, 2, x, MPFR_RNDD); +- mpfr_log (xp, xp, MPFR_RNDD); ++ mpfr_log2 (xp, xp, MPFR_RNDD); + mpfr_sub_ui (xp, xp, 1, MPFR_RNDD); + mpfr_mul (xp, xp, x, MPFR_RNDU); + +@@ -303,8 +303,8 @@ + { + mpfr_sub (tmp, tmp, tmp2, MPFR_RNDZ); /* low bnd on |sin(Pi*(2-x))| */ + mpfr_ui_div (tmp, 12, tmp, MPFR_RNDU); /* upper bound */ +- mpfr_log (tmp, tmp, MPFR_RNDU); +- mpfr_add (tmp, tmp, xp, MPFR_RNDU); ++ mpfr_log2 (tmp, tmp, MPFR_RNDU); ++ mpfr_add (xp, tmp, xp, MPFR_RNDU); + underflow = mpfr_cmp_si (xp, expo.saved_emin - 2) <= 0; + } + +diff -Naur mpfr-3.0.0-old/Makefile.in mpfr-3.0.0-new/Makefile.in +--- mpfr-3.0.0-old/Makefile.in 2010-06-10 04:00:52.000000000 -0700 ++++ mpfr-3.0.0-new/Makefile.in 2010-11-10 16:53:44.000000000 -0800 +@@ -239,6 +239,7 @@ + distuninstallcheck_listfiles = find . -type f -print + distcleancheck_listfiles = find . -type f -print + ACLOCAL = @ACLOCAL@ ++ALLOCA = @ALLOCA@ + AMTAR = @AMTAR@ + AR = @AR@ + AS = @AS@ +diff -Naur mpfr-3.0.0-old/mpfr.h mpfr-3.0.0-new/mpfr.h +--- mpfr-3.0.0-old/mpfr.h 2010-06-10 04:00:14.000000000 -0700 ++++ mpfr-3.0.0-new/mpfr.h 2010-11-10 16:53:44.000000000 -0800 +@@ -27,7 +27,7 @@ + #define MPFR_VERSION_MAJOR 3 + #define MPFR_VERSION_MINOR 0 + #define MPFR_VERSION_PATCHLEVEL 0 +-#define MPFR_VERSION_STRING "3.0.0" ++#define MPFR_VERSION_STRING "3.0.0-p8" + + /* Macros dealing with MPFR VERSION */ + #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) +@@ -67,6 +67,16 @@ + # define _MPFR_H_HAVE_INTMAX_T 1 + #endif + ++/* Avoid some problems with macro expansion if the user defines macros ++ with the same name as keywords. By convention, identifiers and macro ++ names starting with mpfr_ are reserved by MPFR. */ ++typedef void mpfr_void; ++typedef int mpfr_int; ++typedef unsigned int mpfr_uint; ++typedef long mpfr_long; ++typedef unsigned long mpfr_ulong; ++typedef size_t mpfr_size_t; ++ + /* Definition of rounding modes (DON'T USE MPFR_RNDNA!). + Warning! Changing the contents of this enum should be seen as an + interface change since the old and the new types are not compatible +@@ -136,7 +146,7 @@ + typedef mp_exp_t mpfr_exp_t; + + /* Definition of the standard exponent limits */ +-#define MPFR_EMAX_DEFAULT ((mpfr_exp_t) (((unsigned long) 1 << 30) - 1)) ++#define MPFR_EMAX_DEFAULT ((mpfr_exp_t) (((mpfr_ulong) 1 << 30) - 1)) + #define MPFR_EMIN_DEFAULT (-(MPFR_EMAX_DEFAULT)) + + /* Definition of the main structure */ +@@ -725,13 +735,13 @@ + unexpected results with future compilers and aggressive optimisations. + Why not working only with signed types, using INT_MIN and LONG_MIN? */ + #if __GMP_MP_SIZE_T_INT +-#define __MPFR_EXP_NAN ((mpfr_exp_t)((~((~(unsigned int)0)>>1))+2)) +-#define __MPFR_EXP_ZERO ((mpfr_exp_t)((~((~(unsigned int)0)>>1))+1)) +-#define __MPFR_EXP_INF ((mpfr_exp_t)((~((~(unsigned int)0)>>1))+3)) ++#define __MPFR_EXP_NAN ((mpfr_exp_t)((~((~(mpfr_uint)0)>>1))+2)) ++#define __MPFR_EXP_ZERO ((mpfr_exp_t)((~((~(mpfr_uint)0)>>1))+1)) ++#define __MPFR_EXP_INF ((mpfr_exp_t)((~((~(mpfr_uint)0)>>1))+3)) + #else +-#define __MPFR_EXP_NAN ((mpfr_exp_t)((~((~(unsigned long)0)>>1))+2)) +-#define __MPFR_EXP_ZERO ((mpfr_exp_t)((~((~(unsigned long)0)>>1))+1)) +-#define __MPFR_EXP_INF ((mpfr_exp_t)((~((~(unsigned long)0)>>1))+3)) ++#define __MPFR_EXP_NAN ((mpfr_exp_t)((~((~(mpfr_ulong)0)>>1))+2)) ++#define __MPFR_EXP_ZERO ((mpfr_exp_t)((~((~(mpfr_ulong)0)>>1))+1)) ++#define __MPFR_EXP_INF ((mpfr_exp_t)((~((~(mpfr_ulong)0)>>1))+3)) + #endif + + /* Define MPFR_USE_EXTENSION to avoid "gcc -pedantic" warnings. */ +@@ -760,9 +770,9 @@ + #define mpfr_inf_p(_x) ((_x)->_mpfr_exp == __MPFR_EXP_INF) + #define mpfr_zero_p(_x) ((_x)->_mpfr_exp == __MPFR_EXP_ZERO) + #define mpfr_regular_p(_x) ((_x)->_mpfr_exp > __MPFR_EXP_INF) +-#define mpfr_sgn(_x) \ +- ((_x)->_mpfr_exp < __MPFR_EXP_INF ? \ +- (mpfr_nan_p (_x) ? mpfr_set_erangeflag () : (void) 0), 0 : \ ++#define mpfr_sgn(_x) \ ++ ((_x)->_mpfr_exp < __MPFR_EXP_INF ? \ ++ (mpfr_nan_p (_x) ? mpfr_set_erangeflag () : (mpfr_void) 0), 0 : \ + MPFR_SIGN (_x)) + + /* Prevent them from using as lvalues */ +@@ -798,50 +808,72 @@ + anyway. Checking with other ICC versions is needed. Possibly detect + whether warnings are produced or not with a configure test. + + Remove C++ too, since it complains too much. */ ++/* Added casts to improve robustness in case of undefined behavior and ++ compiler extensions based on UB (in particular -fwrapv). MPFR doesn't ++ use such extensions, but these macros will be used by 3rd-party code, ++ where such extensions may be required. ++ Moreover casts to unsigned long have been added to avoid warnings in ++ programs that use MPFR and are compiled with -Wconversion; such casts ++ are OK since if X is a constant expression, then (unsigned long) X is ++ also a constant expression, so that the optimizations still work. The ++ warnings are probably related to the following two bugs: ++ http://gcc.gnu.org/bugzilla/show_bug.cgi?id=4210 ++ http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38470 (possibly a variant) ++ and the casts could be removed once these bugs are fixed. ++ Casts shouldn't be used on the generic calls (to the ..._2exp functions), ++ where implicit conversions are performed. Indeed, having at least one ++ implicit conversion in the macro allows the compiler to emit diagnostics ++ when normally expected, for instance in the following call: ++ mpfr_set_ui (x, "foo", MPFR_RNDN); ++ If this is not possible (for future macros), one of the tricks described ++ on http://groups.google.com/group/comp.std.c/msg/e92abd24bf9eaf7b could ++ be used. */ + #if defined (__GNUC__) && !defined(__ICC) && !defined(__cplusplus) + #if (__GNUC__ >= 2) + #undef mpfr_cmp_ui +-/* We use the fact that mpfr_sgn on NaN sets the erange flag and returns 0. */ +-#define mpfr_cmp_ui(_f,_u) \ +- (__builtin_constant_p (_u) && (_u) == 0 ? \ +- mpfr_sgn (_f) : \ +- mpfr_cmp_ui_2exp ((_f),(_u),0)) ++/* We use the fact that mpfr_sgn on NaN sets the erange flag and returns 0. ++ But warning! mpfr_sgn is specified as a macro in the API, thus the macro ++ mustn't be used if side effects are possible, like here. */ ++#define mpfr_cmp_ui(_f,_u) \ ++ (__builtin_constant_p (_u) && (mpfr_ulong) (_u) == 0 ? \ ++ (mpfr_sgn) (_f) : \ ++ mpfr_cmp_ui_2exp ((_f), (_u), 0)) + #undef mpfr_cmp_si +-#define mpfr_cmp_si(_f,_s) \ +- (__builtin_constant_p (_s) && (_s) >= 0 ? \ +- mpfr_cmp_ui ((_f), (_s)) : \ ++#define mpfr_cmp_si(_f,_s) \ ++ (__builtin_constant_p (_s) && (mpfr_long) (_s) >= 0 ? \ ++ mpfr_cmp_ui ((_f), (mpfr_ulong) (mpfr_long) (_s)) : \ + mpfr_cmp_si_2exp ((_f), (_s), 0)) + #if __GNUC__ > 2 || __GNUC_MINOR__ >= 95 + #undef mpfr_set_ui +-#define mpfr_set_ui(_f,_u,_r) \ +- (__builtin_constant_p (_u) && (_u) == 0 ? \ +- __extension__ ({ \ +- mpfr_ptr _p = (_f); \ +- _p->_mpfr_sign = 1; \ +- _p->_mpfr_exp = __MPFR_EXP_ZERO; \ +- (void) (_r); 0; }) : \ ++#define mpfr_set_ui(_f,_u,_r) \ ++ (__builtin_constant_p (_u) && (mpfr_ulong) (_u) == 0 ? \ ++ __extension__ ({ \ ++ mpfr_ptr _p = (_f); \ ++ _p->_mpfr_sign = 1; \ ++ _p->_mpfr_exp = __MPFR_EXP_ZERO; \ ++ (mpfr_void) (_r); 0; }) : \ + mpfr_set_ui_2exp ((_f), (_u), 0, (_r))) + #endif + #undef mpfr_set_si +-#define mpfr_set_si(_f,_s,_r) \ +- (__builtin_constant_p (_s) && (_s) >= 0 ? \ +- mpfr_set_ui ((_f), (_s), (_r)) : \ ++#define mpfr_set_si(_f,_s,_r) \ ++ (__builtin_constant_p (_s) && (mpfr_long) (_s) >= 0 ? \ ++ mpfr_set_ui ((_f), (mpfr_ulong) (mpfr_long) (_s), (_r)) : \ + mpfr_set_si_2exp ((_f), (_s), 0, (_r))) + #endif + #endif + + /* Macro version of mpfr_stack interface for fast access */ +-#define mpfr_custom_get_size(p) ((size_t) \ ++#define mpfr_custom_get_size(p) ((mpfr_size_t) \ + (((p)+GMP_NUMB_BITS-1)/GMP_NUMB_BITS*sizeof (mp_limb_t))) + #define mpfr_custom_init(m,p) do {} while (0) +-#define mpfr_custom_get_significand(x) ((void*)((x)->_mpfr_d)) ++#define mpfr_custom_get_significand(x) ((mpfr_void*)((x)->_mpfr_d)) + #define mpfr_custom_get_exp(x) ((x)->_mpfr_exp) + #define mpfr_custom_move(x,m) do { ((x)->_mpfr_d = (mp_limb_t*)(m)); } while (0) + #define mpfr_custom_init_set(x,k,e,p,m) do { \ + mpfr_ptr _x = (x); \ + mpfr_exp_t _e; \ + mpfr_kind_t _t; \ +- int _s, _k; \ ++ mpfr_int _s, _k; \ + _k = (k); \ + if (_k >= 0) { \ + _t = (mpfr_kind_t) _k; \ +@@ -858,11 +890,13 @@ + _x->_mpfr_exp = _e; \ + _x->_mpfr_d = (mp_limb_t*) (m); \ + } while (0) +-#define mpfr_custom_get_kind(x) \ +- ( (x)->_mpfr_exp > __MPFR_EXP_INF ? (int)MPFR_REGULAR_KIND*MPFR_SIGN (x) \ +- : (x)->_mpfr_exp == __MPFR_EXP_INF ? (int)MPFR_INF_KIND*MPFR_SIGN (x) \ +- : (x)->_mpfr_exp == __MPFR_EXP_NAN ? (int)MPFR_NAN_KIND \ +- : (int) MPFR_ZERO_KIND * MPFR_SIGN (x) ) ++#define mpfr_custom_get_kind(x) \ ++ ( (x)->_mpfr_exp > __MPFR_EXP_INF ? \ ++ (mpfr_int) MPFR_REGULAR_KIND * MPFR_SIGN (x) \ ++ : (x)->_mpfr_exp == __MPFR_EXP_INF ? \ ++ (mpfr_int) MPFR_INF_KIND * MPFR_SIGN (x) \ ++ : (x)->_mpfr_exp == __MPFR_EXP_NAN ? (mpfr_int) MPFR_NAN_KIND \ ++ : (mpfr_int) MPFR_ZERO_KIND * MPFR_SIGN (x) ) + + + #endif /* MPFR_USE_NO_MACRO */ +diff -Naur mpfr-3.0.0-old/mpfr.texi mpfr-3.0.0-new/mpfr.texi +--- mpfr-3.0.0-old/mpfr.texi 2010-06-10 04:00:14.000000000 -0700 ++++ mpfr-3.0.0-new/mpfr.texi 2010-11-10 16:53:44.000000000 -0800 +@@ -2050,7 +2050,7 @@ + are printed. If @var{base} is greater than 10, @samp{@@} will be used + instead of @samp{e} as exponent delimiter. + +-Return the number of bytes written, or if an error occurred, return 0. ++Return the number of characters written, or if an error occurred, return 0. + @end deftypefun + + @deftypefun size_t mpfr_inp_str (mpfr_t @var{rop}, FILE *@var{stream}, int @var{base}, mpfr_rnd_t @var{rnd}) +diff -Naur mpfr-3.0.0-old/out_str.c mpfr-3.0.0-new/out_str.c +--- mpfr-3.0.0-old/out_str.c 2010-06-10 04:00:14.000000000 -0700 ++++ mpfr-3.0.0-new/out_str.c 2010-11-10 16:53:44.000000000 -0800 +@@ -22,6 +22,16 @@ + + #include "mpfr-impl.h" + ++/* Warning! S should not contain "%". */ ++#define OUT_STR_RET(S) \ ++ do \ ++ { \ ++ int r; \ ++ r = fprintf (stream, (S)); \ ++ return r < 0 ? 0 : r; \ ++ } \ ++ while (0) ++ + size_t + mpfr_out_str (FILE *stream, int base, size_t n_digits, mpfr_srcptr op, + mpfr_rnd_t rnd_mode) +@@ -29,6 +39,7 @@ + char *s, *s0; + size_t l; + mpfr_exp_t e; ++ int err; + + MPFR_ASSERTN (base >= 2 && base <= 62); + +@@ -36,37 +47,16 @@ + if (stream == NULL) + stream = stdout; + +- if (MPFR_IS_NAN(op)) +- { +- fprintf (stream, "@NaN@"); +- return 3; +- } +- +- if (MPFR_IS_INF(op)) +- { +- if (MPFR_SIGN(op) > 0) +- { +- fprintf (stream, "@Inf@"); +- return 3; +- } +- else +- { +- fprintf (stream, "-@Inf@"); +- return 4; +- } +- } +- +- if (MPFR_IS_ZERO(op)) ++ if (MPFR_UNLIKELY (MPFR_IS_SINGULAR (op))) + { +- if (MPFR_SIGN(op) > 0) +- { +- fprintf(stream, "0"); +- return 1; +- } ++ if (MPFR_IS_NAN (op)) ++ OUT_STR_RET ("@NaN@"); ++ else if (MPFR_IS_INF (op)) ++ OUT_STR_RET (MPFR_IS_POS (op) ? "@Inf@" : "-@Inf@"); + else + { +- fprintf(stream, "-0"); +- return 2; ++ MPFR_ASSERTD (MPFR_IS_ZERO (op)); ++ OUT_STR_RET (MPFR_IS_POS (op) ? "0" : "-0"); + } + } + +@@ -77,21 +67,31 @@ + + l = strlen (s) + 1; /* size of allocated block returned by mpfr_get_str + - may be incorrect, as only an upper bound? */ +- if (*s == '-') +- fputc (*s++, stream); + +- /* outputs mantissa */ +- fputc (*s++, stream); e--; /* leading digit */ +- fputc ((unsigned char) MPFR_DECIMAL_POINT, stream); +- fputs (s, stream); /* rest of mantissa */ ++ /* outputs possible sign and significand */ ++ err = (*s == '-' && fputc (*s++, stream) == EOF) ++ || fputc (*s++, stream) == EOF /* leading digit */ ++ || fputc ((unsigned char) MPFR_DECIMAL_POINT, stream) == EOF ++ || fputs (s, stream) == EOF; /* trailing significand */ + (*__gmp_free_func) (s0, l); ++ if (MPFR_UNLIKELY (err)) ++ return 0; ++ ++ e--; /* due to the leading digit */ + + /* outputs exponent */ + if (e) + { ++ int r; ++ + MPFR_ASSERTN(e >= LONG_MIN); + MPFR_ASSERTN(e <= LONG_MAX); +- l += fprintf (stream, (base <= 10 ? "e%ld" : "@%ld"), (long) e); ++ ++ r = fprintf (stream, (base <= 10 ? "e%ld" : "@%ld"), (long) e); ++ if (MPFR_UNLIKELY (r < 0)) ++ return 0; ++ ++ l += r; + } + + return l; +diff -Naur mpfr-3.0.0-old/PATCHES mpfr-3.0.0-new/PATCHES +--- mpfr-3.0.0-old/PATCHES 2010-06-10 04:00:14.000000000 -0700 ++++ mpfr-3.0.0-new/PATCHES 2010-11-10 16:53:44.000000000 -0800 +@@ -0,0 +1,8 @@ ++macros ++mpfr_set_ld ++mpfr_sub1 ++tcan_round ++mpfr_cmp/set_ui/si ++gamma_underflow ++alloca ++mpfr_out_str +diff -Naur mpfr-3.0.0-old/set_ld.c mpfr-3.0.0-new/set_ld.c +--- mpfr-3.0.0-old/set_ld.c 2010-06-10 04:00:14.000000000 -0700 ++++ mpfr-3.0.0-new/set_ld.c 2010-11-10 16:53:44.000000000 -0800 +@@ -102,21 +102,25 @@ + { + x /= div13; /* exact */ + shift_exp += 8192; ++ mpfr_div_2si (t, t, 8192, MPFR_RNDZ); + } + if (ABS (x) >= div12) + { + x /= div12; /* exact */ + shift_exp += 4096; ++ mpfr_div_2si (t, t, 4096, MPFR_RNDZ); + } + if (ABS (x) >= div11) + { + x /= div11; /* exact */ + shift_exp += 2048; ++ mpfr_div_2si (t, t, 2048, MPFR_RNDZ); + } + if (ABS (x) >= div10) + { + x /= div10; /* exact */ + shift_exp += 1024; ++ mpfr_div_2si (t, t, 1024, MPFR_RNDZ); + } + /* warning: we may have DBL_MAX=2^1024*(1-2^(-53)) < x < 2^1024, + therefore we have one extra exponent reduction step */ +@@ -124,9 +128,10 @@ + { + x /= div9; /* exact */ + shift_exp += 512; ++ mpfr_div_2si (t, t, 512, MPFR_RNDZ); + } + } /* Check overflow of double */ +- else ++ else /* no overflow on double */ + { + long double div9, div10, div11; + +@@ -149,29 +154,34 @@ + { + x /= div13; /* exact */ + shift_exp -= 8192; ++ mpfr_mul_2si (t, t, 8192, MPFR_RNDZ); + } + if (ABS (x) <= div12) + { + x /= div12; /* exact */ + shift_exp -= 4096; ++ mpfr_mul_2si (t, t, 4096, MPFR_RNDZ); + } + if (ABS (x) <= div11) + { + x /= div11; /* exact */ + shift_exp -= 2048; ++ mpfr_mul_2si (t, t, 2048, MPFR_RNDZ); + } + if (ABS (x) <= div10) + { + x /= div10; /* exact */ + shift_exp -= 1024; ++ mpfr_mul_2si (t, t, 1024, MPFR_RNDZ); + } + if (ABS(x) <= div9) + { + x /= div9; /* exact */ + shift_exp -= 512; ++ mpfr_mul_2si (t, t, 512, MPFR_RNDZ); + } + } +- else ++ else /* no underflow */ + { + inexact = mpfr_set_d (u, (double) x, MPFR_RNDZ); + MPFR_ASSERTD (inexact == 0); +diff -Naur mpfr-3.0.0-old/sub1.c mpfr-3.0.0-new/sub1.c +--- mpfr-3.0.0-old/sub1.c 2010-06-10 04:00:14.000000000 -0700 ++++ mpfr-3.0.0-new/sub1.c 2010-11-10 16:53:44.000000000 -0800 +@@ -37,7 +37,9 @@ + mp_size_t cancel2, an, bn, cn, cn0; + mp_limb_t *ap, *bp, *cp; + mp_limb_t carry, bb, cc, borrow = 0; +- int inexact, shift_b, shift_c, is_exact = 1, down = 0, add_exp = 0; ++ int inexact, shift_b, shift_c, add_exp = 0; ++ int cmp_low = 0; /* used for rounding to nearest: 0 if low(b) = low(c), ++ negative if low(b) < low(c), positive if low(b)>low(c) */ + int sh, k; + MPFR_TMP_DECL(marker); + +@@ -196,7 +198,8 @@ + } + + #ifdef DEBUG +- printf ("shift_b=%d shift_c=%d diffexp=%lu\n", shift_b, shift_c, ++ printf ("rnd=%s shift_b=%d shift_c=%d diffexp=%lu\n", ++ mpfr_print_rnd_mode (rnd_mode), shift_b, shift_c, + (unsigned long) diff_exp); + #endif + +@@ -307,17 +310,18 @@ + { + if (MPFR_LIKELY(sh)) + { +- is_exact = (carry == 0); + /* can decide except when carry = 2^(sh-1) [middle] + or carry = 0 [truncate, but cannot decide inexact flag] */ +- down = (carry < (MPFR_LIMB_ONE << (sh - 1))); + if (carry > (MPFR_LIMB_ONE << (sh - 1))) + goto add_one_ulp; +- else if ((0 < carry) && down) ++ else if ((0 < carry) && (carry < (MPFR_LIMB_ONE << (sh - 1)))) + { + inexact = -1; /* result if smaller than exact value */ + goto truncate; + } ++ /* now carry = 2^(sh-1), in which case cmp_low=2, ++ or carry = 0, in which case cmp_low=0 */ ++ cmp_low = (carry == 0) ? 0 : 2; + } + } + else /* directed rounding: set rnd_mode to RNDZ iff toward zero */ +@@ -344,12 +348,32 @@ + cn -= (long int) an + cancel2; + + #ifdef DEBUG +- printf ("last %d bits from a are %lu, bn=%ld, cn=%ld\n", ++ printf ("last sh=%d bits from a are %lu, bn=%ld, cn=%ld\n", + sh, (unsigned long) carry, (long) bn, (long) cn); + #endif + ++ /* for rounding to nearest, we couldn't conclude up to here in the following ++ cases: ++ 1. sh = 0, then cmp_low=0: we can either truncate, subtract one ulp ++ or add one ulp: -1 ulp < low(b)-low(c) < 1 ulp ++ 2. sh > 0 but the low sh bits from high(b)-high(c) equal 2^(sh-1): ++ -0.5 ulp <= -1/2^sh < low(b)-low(c)-0.5 < 1/2^sh <= 0.5 ulp ++ we can't decide the rounding, in that case cmp_low=2: ++ either we truncate and flag=-1, or we add one ulp and flag=1 ++ 3. the low sh>0 bits from high(b)-high(c) equal 0: we know we have to ++ truncate but we can't decide the ternary value, here cmp_low=0: ++ -0.5 ulp <= -1/2^sh < low(b)-low(c) < 1/2^sh <= 0.5 ulp ++ we always truncate and inexact can be any of -1,0,1 ++ */ ++ ++ /* note: here cn might exceed cn0, in which case we consider a zero limb */ + for (k = 0; (bn > 0) || (cn > 0); k = 1) + { ++ /* if cmp_low < 0, we know low(b) - low(c) < 0 ++ if cmp_low > 0, we know low(b) - low(c) > 0 ++ (more precisely if cmp_low = 2, low(b) - low(c) = 0.5 ulp so far) ++ if cmp_low = 0, so far low(b) - low(c) = 0 */ ++ + /* get next limbs */ + bb = (bn > 0) ? bp[--bn] : 0; + if ((cn > 0) && (cn-- <= cn0)) +@@ -357,76 +381,115 @@ + else + cc = 0; + +- /* down is set when low(b) < low(c) */ +- if (down == 0) +- down = (bb < cc); ++ /* cmp_low compares low(b) and low(c) */ ++ if (cmp_low == 0) /* case 1 or 3 */ ++ cmp_low = (bb < cc) ? -2+k : (bb > cc) ? 1 : 0; ++ ++ /* Case 1 for k=0 splits into 7 subcases: ++ 1a: bb > cc + half ++ 1b: bb = cc + half ++ 1c: 0 < bb - cc < half ++ 1d: bb = cc ++ 1e: -half < bb - cc < 0 ++ 1f: bb - cc = -half ++ 1g: bb - cc < -half ++ ++ Case 2 splits into 3 subcases: ++ 2a: bb > cc ++ 2b: bb = cc ++ 2c: bb < cc ++ ++ Case 3 splits into 3 subcases: ++ 3a: bb > cc ++ 3b: bb = cc ++ 3c: bb < cc ++ */ + + /* the case rounding to nearest with sh=0 is special since one couldn't + subtract above 1/2 ulp in the trailing limb of the result */ +- if ((rnd_mode == MPFR_RNDN) && sh == 0 && k == 0) ++ if (rnd_mode == MPFR_RNDN && sh == 0 && k == 0) /* case 1 for k=0 */ + { + mp_limb_t half = MPFR_LIMB_HIGHBIT; + +- is_exact = (bb == cc); +- + /* add one ulp if bb > cc + half + truncate if cc - half < bb < cc + half + sub one ulp if bb < cc - half + */ + +- if (down) ++ if (cmp_low < 0) /* bb < cc: -1 ulp < low(b) - low(c) < 0, ++ cases 1e, 1f and 1g */ + { + if (cc >= half) + cc -= half; +- else ++ else /* since bb < cc < half, bb+half < 2*half */ + bb += half; ++ /* now we have bb < cc + half: ++ we have to subtract one ulp if bb < cc, ++ and truncate if bb > cc */ + } +- else /* bb >= cc */ ++ else if (cmp_low >= 0) /* bb >= cc, cases 1a to 1d */ + { + if (cc < half) + cc += half; +- else ++ else /* since bb >= cc >= half, bb - half >= 0 */ + bb -= half; ++ /* now we have bb > cc - half: we have to add one ulp if bb > cc, ++ and truncate if bb < cc */ ++ if (cmp_low > 0) ++ cmp_low = 2; + } + } + + #ifdef DEBUG +- printf (" bb=%lu cc=%lu down=%d is_exact=%d\n", +- (unsigned long) bb, (unsigned long) cc, down, is_exact); ++ printf ("k=%u bb=%lu cc=%lu cmp_low=%d\n", k, ++ (unsigned long) bb, (unsigned long) cc, cmp_low); + #endif +- if (bb < cc) ++ if (cmp_low < 0) /* low(b) - low(c) < 0: either truncate or subtract ++ one ulp */ + { + if (rnd_mode == MPFR_RNDZ) +- goto sub_one_ulp; ++ goto sub_one_ulp; /* set inexact=-1 */ + else if (rnd_mode != MPFR_RNDN) /* round away */ + { + inexact = 1; + goto truncate; + } +- else /* round to nearest: special case here since for sh=k=0 +- bb = bb0 - MPFR_LIMB_HIGHBIT */ ++ else /* round to nearest */ + { +- if (is_exact && sh == 0) +- { +- /* For k=0 we can't decide exactness since it may depend +- from low order bits. +- For k=1, the first low limbs matched: low(b)-low(c)<0. */ +- if (k) +- { +- inexact = 1; +- goto truncate; +- } +- } +- else if (down && sh == 0) +- goto sub_one_ulp; +- else +- { +- inexact = (is_exact) ? 1 : -1; ++ /* If cmp_low < 0 and bb > cc, then -0.5 ulp < low(b)-low(c) < 0, ++ whatever the value of sh. ++ If sh>0, then cmp_low < 0 implies that the initial neglected ++ sh bits were 0 (otherwise cmp_low=2 initially), thus the ++ weight of the new bits is less than 0.5 ulp too. ++ If k > 0 (and sh=0) this means that either the first neglected ++ limbs bb and cc were equal (thus cmp_low was 0 for k=0), ++ or we had bb - cc = -0.5 ulp or 0.5 ulp. ++ The last case is not possible here since we would have ++ cmp_low > 0 which is sticky. ++ In the first case (where we have cmp_low = -1), we truncate, ++ whereas in the 2nd case we have cmp_low = -2 and we subtract ++ one ulp. ++ */ ++ if (bb > cc || sh > 0 || cmp_low == -1) ++ { /* -0.5 ulp < low(b)-low(c) < 0, ++ bb > cc corresponds to cases 1e and 1f1 ++ sh > 0 corresponds to cases 3c and 3b3 ++ cmp_low = -1 corresponds to case 1d3 (also 3b3) */ ++ inexact = 1; + goto truncate; + } ++ else if (bb < cc) /* here sh = 0 and low(b)-low(c) < -0.5 ulp, ++ this corresponds to cases 1g and 1f3 */ ++ goto sub_one_ulp; ++ /* the only case where we can't conclude is sh=0 and bb=cc, ++ i.e., we have low(b) - low(c) = -0.5 ulp (up to now), thus ++ we don't know if we must truncate or subtract one ulp. ++ Note: for sh=0 we can't have low(b) - low(c) = -0.5 ulp up to ++ now, since low(b) - low(c) > 1/2^sh */ + } + } +- else if (bb > cc) ++ else if (cmp_low > 0) /* 0 < low(b) - low(c): either truncate or ++ add one ulp */ + { + if (rnd_mode == MPFR_RNDZ) + { +@@ -437,34 +500,70 @@ + goto add_one_ulp; + else /* round to nearest */ + { +- if (is_exact) ++ if (bb > cc) + { +- inexact = -1; +- goto truncate; ++ /* if sh=0, then bb>cc means that low(b)-low(c) > 0.5 ulp, ++ and similarly when cmp_low=2 */ ++ if (cmp_low == 2) /* cases 1a, 1b1, 2a and 2b1 */ ++ goto add_one_ulp; ++ /* sh > 0 and cmp_low > 0: this implies that the sh initial ++ neglected bits were 0, and the remaining low(b)-low(c)>0, ++ but its weight is less than 0.5 ulp */ ++ else /* 0 < low(b) - low(c) < 0.5 ulp, this corresponds to ++ cases 3a, 1d1 and 3b1 */ ++ { ++ inexact = -1; ++ goto truncate; ++ } + } +- else if (down) ++ else if (bb < cc) /* 0 < low(b) - low(c) < 0.5 ulp, cases 1c, ++ 1b3, 2b3 and 2c */ + { +- inexact = 1; ++ inexact = -1; + goto truncate; + } +- else +- goto add_one_ulp; +- } +- } ++ /* the only case where we can't conclude is bb=cc, i.e., ++ low(b) - low(c) = 0.5 ulp (up to now), thus we don't know ++ if we must truncate or add one ulp. */ ++ } ++ } ++ /* after k=0, we cannot conclude in the following cases, we split them ++ according to the values of bb and cc for k=1: ++ 1b. sh=0 and cmp_low = 1 and bb-cc = half [around 0.5 ulp] ++ 1b1. bb > cc: add one ulp, inex = 1 ++ 1b2: bb = cc: cannot conclude ++ 1b3: bb < cc: truncate, inex = -1 ++ 1d. sh=0 and cmp_low = 0 and bb-cc = 0 [around 0] ++ 1d1: bb > cc: truncate, inex = -1 ++ 1d2: bb = cc: cannot conclude ++ 1d3: bb < cc: truncate, inex = +1 ++ 1f. sh=0 and cmp_low = -1 and bb-cc = -half [around -0.5 ulp] ++ 1f1: bb > cc: truncate, inex = +1 ++ 1f2: bb = cc: cannot conclude ++ 1f3: bb < cc: sub one ulp, inex = -1 ++ 2b. sh > 0 and cmp_low = 2 and bb=cc [around 0.5 ulp] ++ 2b1. bb > cc: add one ulp, inex = 1 ++ 2b2: bb = cc: cannot conclude ++ 2b3: bb < cc: truncate, inex = -1 ++ 3b. sh > 0 and cmp_low = 0 [around 0] ++ 3b1. bb > cc: truncate, inex = -1 ++ 3b2: bb = cc: cannot conclude ++ 3b3: bb < cc: truncate, inex = +1 ++ */ + } + +- if ((rnd_mode == MPFR_RNDN) && !is_exact) ++ if ((rnd_mode == MPFR_RNDN) && cmp_low != 0) + { + /* even rounding rule */ + if ((ap[0] >> sh) & 1) + { +- if (down) ++ if (cmp_low < 0) + goto sub_one_ulp; + else + goto add_one_ulp; + } + else +- inexact = (down) ? 1 : -1; ++ inexact = (cmp_low > 0) ? -1 : 1; + } + else + inexact = 0; +diff -Naur mpfr-3.0.0-old/tests/Makefile.in mpfr-3.0.0-new/tests/Makefile.in +--- mpfr-3.0.0-old/tests/Makefile.in 2010-06-10 04:00:52.000000000 -0700 ++++ mpfr-3.0.0-new/tests/Makefile.in 2010-11-10 16:53:44.000000000 -0800 +@@ -960,6 +960,7 @@ + red=; grn=; lgn=; blu=; std= + DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + ACLOCAL = @ACLOCAL@ ++ALLOCA = @ALLOCA@ + AMTAR = @AMTAR@ + AR = @AR@ + AS = @AS@ +diff -Naur mpfr-3.0.0-old/tests/tcan_round.c mpfr-3.0.0-new/tests/tcan_round.c +--- mpfr-3.0.0-old/tests/tcan_round.c 2010-06-10 04:00:13.000000000 -0700 ++++ mpfr-3.0.0-new/tests/tcan_round.c 2010-11-10 16:53:44.000000000 -0800 +@@ -41,7 +41,7 @@ + /* avoid mpn_random which leaks memory */ + for (i = 0; i < n; i++) + buf[i] = randlimb (); +- p = (mpfr_prec_t) randlimb() % ((n-1) * GMP_NUMB_BITS) + MPFR_PREC_MIN; ++ p = randlimb() % ((n-1) * GMP_NUMB_BITS) + MPFR_PREC_MIN; + err = p + randlimb () % GMP_NUMB_BITS; + r1 = mpfr_round_p (buf, n, err, p); + r2 = mpfr_can_round_raw (buf, n, MPFR_SIGN_POS, err, +diff -Naur mpfr-3.0.0-old/tests/tcmp_ui.c mpfr-3.0.0-new/tests/tcmp_ui.c +--- mpfr-3.0.0-old/tests/tcmp_ui.c 2010-06-10 04:00:13.000000000 -0700 ++++ mpfr-3.0.0-new/tests/tcmp_ui.c 2010-11-10 16:53:44.000000000 -0800 +@@ -88,6 +88,126 @@ + mpfr_clear (x); + } + ++/* Since mpfr_cmp_ui and mpfr_cmp_si are also implemented by a macro ++ with __builtin_constant_p for GCC, check that side effects are ++ handled correctly. */ ++static void ++check_macros (void) ++{ ++ mpfr_t x; ++ int c; ++ ++ mpfr_init2 (x, 32); ++ ++ c = 0; ++ mpfr_set_ui (x, 17, MPFR_RNDN); ++ if (mpfr_cmp_ui (x, 17) != 0) ++ { ++ printf ("Error 1 on mpfr_cmp_ui(x,17) in check_macros\n"); ++ exit (1); ++ } ++ if (mpfr_cmp_ui (x, (c++, 17)) != 0) ++ { ++ printf ("Error 2 on mpfr_cmp_ui(x,17) in check_macros\n"); ++ exit (1); ++ } ++ if (c != 1) ++ { ++ printf ("Error 3 on mpfr_cmp_ui(x,17) in check_macros\n" ++ "(c = %d instead of 1)\n", c); ++ exit (1); ++ } ++ if (mpfr_cmp_si (x, 17) != 0) ++ { ++ printf ("Error 1 on mpfr_cmp_si(x,17) in check_macros\n"); ++ exit (1); ++ } ++ if (mpfr_cmp_si (x, (c++, 17)) != 0) ++ { ++ printf ("Error 2 on mpfr_cmp_si(x,17) in check_macros\n"); ++ exit (1); ++ } ++ if (c != 2) ++ { ++ printf ("Error 3 on mpfr_cmp_si(x,17) in check_macros\n" ++ "(c = %d instead of 2)\n", c); ++ exit (1); ++ } ++ ++ c = 0; ++ mpfr_set_ui (x, 0, MPFR_RNDN); ++ if (mpfr_cmp_ui (x, 0) != 0) ++ { ++ printf ("Error 1 on mpfr_cmp_ui(x,0) in check_macros\n"); ++ exit (1); ++ } ++ if (mpfr_cmp_ui (x, (c++, 0)) != 0) ++ { ++ printf ("Error 2 on mpfr_cmp_ui(x,0) in check_macros\n"); ++ exit (1); ++ } ++ if (c != 1) ++ { ++ printf ("Error 3 on mpfr_cmp_ui(x,0) in check_macros\n" ++ "(c = %d instead of 1)\n", c); ++ exit (1); ++ } ++ if (mpfr_cmp_si (x, 0) != 0) ++ { ++ printf ("Error 1 on mpfr_cmp_si(x,0) in check_macros\n"); ++ exit (1); ++ } ++ if (mpfr_cmp_si (x, (c++, 0)) != 0) ++ { ++ printf ("Error 2 on mpfr_cmp_si(x,0) in check_macros\n"); ++ exit (1); ++ } ++ if (c != 2) ++ { ++ printf ("Error 3 on mpfr_cmp_si(x,0) in check_macros\n" ++ "(c = %d instead of 2)\n", c); ++ exit (1); ++ } ++ ++ mpfr_clear (x); ++} ++ ++/* Bug in r7114 */ ++static void ++test_macros (void) ++{ ++ mpfr_t x[3]; ++ mpfr_ptr p; ++ ++ mpfr_inits (x[0], x[1], x[2], (mpfr_ptr) 0); ++ mpfr_set_ui (x[0], 0, MPFR_RNDN); ++ p = x[0]; ++ if (mpfr_cmp_ui (p++, 0) != 0) ++ { ++ printf ("Error in mpfr_cmp_ui macro: result should be 0.\n"); ++ exit (1); ++ } ++ if (p != x[1]) ++ { ++ printf ("Error in mpfr_cmp_ui macro: p - x[0] = %d (expecting 1)\n", ++ (int) (p - x[0])); ++ exit (1); ++ } ++ p = x[0]; ++ if (mpfr_cmp_si (p++, 0) != 0) ++ { ++ printf ("Error in mpfr_cmp_si macro: result should be 0.\n"); ++ exit (1); ++ } ++ if (p != x[1]) ++ { ++ printf ("Error in mpfr_cmp_si macro: p - x[0] = %d (expecting 1)\n", ++ (int) (p - x[0])); ++ exit (1); ++ } ++ mpfr_clears (x[0], x[1], x[2], (mpfr_ptr) 0); ++} ++ + int + main (void) + { +@@ -216,6 +336,8 @@ + mpfr_clear (x); + + check_nan (); ++ check_macros (); ++ test_macros (); + + tests_end_mpfr (); + return 0; +diff -Naur mpfr-3.0.0-old/tests/tfma.c mpfr-3.0.0-new/tests/tfma.c +--- mpfr-3.0.0-old/tests/tfma.c 2010-06-10 04:00:13.000000000 -0700 ++++ mpfr-3.0.0-new/tests/tfma.c 2010-11-10 16:53:44.000000000 -0800 +@@ -337,6 +337,94 @@ + mpfr_clears (x, y, z, r, (mpfr_ptr) 0); + } + ++static void ++bug20101018 (void) ++{ ++ mpfr_t x, y, z, t, u; ++ int i; ++ ++ mpfr_init2 (x, 64); ++ mpfr_init2 (y, 64); ++ mpfr_init2 (z, 64); ++ mpfr_init2 (t, 64); ++ mpfr_init2 (u, 64); ++ ++ mpfr_set_str (x, "0xf.fffffffffffffffp-14766", 16, MPFR_RNDN); ++ mpfr_set_str (y, "-0xf.fffffffffffffffp+317", 16, MPFR_RNDN); ++ mpfr_set_str (z, "0x8.3ffffffffffe3ffp-14443", 16, MPFR_RNDN); ++ mpfr_set_str (t, "0x8.7ffffffffffc7ffp-14444", 16, MPFR_RNDN); ++ i = mpfr_fma (u, x, y, z, MPFR_RNDN); ++ if (mpfr_cmp (u, t) != 0) ++ { ++ printf ("Wrong result in bug20101018 (a)\n"); ++ printf ("Expected "); ++ mpfr_out_str (stdout, 16, 0, t, MPFR_RNDN); ++ printf ("\nGot "); ++ mpfr_out_str (stdout, 16, 0, u, MPFR_RNDN); ++ printf ("\n"); ++ exit (1); ++ } ++ if (i <= 0) ++ { ++ printf ("Wrong ternary value in bug20101018 (a)\n"); ++ printf ("Expected > 0\n"); ++ printf ("Got %d\n", i); ++ exit (1); ++ } ++ ++ mpfr_set_str (x, "-0xf.fffffffffffffffp-11420", 16, MPFR_RNDN); ++ mpfr_set_str (y, "0xf.fffffffffffffffp+9863", 16, MPFR_RNDN); ++ mpfr_set_str (z, "0x8.fffff80ffffffffp-1551", 16, MPFR_RNDN); ++ mpfr_set_str (t, "0x9.fffff01ffffffffp-1552", 16, MPFR_RNDN); ++ i = mpfr_fma (u, x, y, z, MPFR_RNDN); ++ if (mpfr_cmp (u, t) != 0) ++ { ++ printf ("Wrong result in bug20101018 (b)\n"); ++ printf ("Expected "); ++ mpfr_out_str (stdout, 16, 0, t, MPFR_RNDN); ++ printf ("\nGot "); ++ mpfr_out_str (stdout, 16, 0, u, MPFR_RNDN); ++ printf ("\n"); ++ exit (1); ++ } ++ if (i <= 0) ++ { ++ printf ("Wrong ternary value in bug20101018 (b)\n"); ++ printf ("Expected > 0\n"); ++ printf ("Got %d\n", i); ++ exit (1); ++ } ++ ++ mpfr_set_str (x, "0xf.fffffffffffffffp-2125", 16, MPFR_RNDN); ++ mpfr_set_str (y, "-0xf.fffffffffffffffp-6000", 16, MPFR_RNDN); ++ mpfr_set_str (z, "0x8p-8119", 16, MPFR_RNDN); ++ mpfr_set_str (t, "0x8.000000000000001p-8120", 16, MPFR_RNDN); ++ i = mpfr_fma (u, x, y, z, MPFR_RNDN); ++ if (mpfr_cmp (u, t) != 0) ++ { ++ printf ("Wrong result in bug20101018 (c)\n"); ++ printf ("Expected "); ++ mpfr_out_str (stdout, 16, 0, t, MPFR_RNDN); ++ printf ("\nGot "); ++ mpfr_out_str (stdout, 16, 0, u, MPFR_RNDN); ++ printf ("\n"); ++ exit (1); ++ } ++ if (i <= 0) ++ { ++ printf ("Wrong ternary value in bug20101018 (c)\n"); ++ printf ("Expected > 0\n"); ++ printf ("Got %d\n", i); ++ exit (1); ++ } ++ ++ mpfr_clear (x); ++ mpfr_clear (y); ++ mpfr_clear (z); ++ mpfr_clear (t); ++ mpfr_clear (u); ++} ++ + int + main (int argc, char *argv[]) + { +@@ -345,6 +433,8 @@ + + tests_start_mpfr (); + ++ bug20101018 (); ++ + mpfr_init (x); + mpfr_init (s); + mpfr_init (y); +diff -Naur mpfr-3.0.0-old/tests/tgamma.c mpfr-3.0.0-new/tests/tgamma.c +--- mpfr-3.0.0-old/tests/tgamma.c 2010-06-10 04:00:13.000000000 -0700 ++++ mpfr-3.0.0-new/tests/tgamma.c 2010-11-10 16:53:44.000000000 -0800 +@@ -461,6 +461,20 @@ + mpfr_clear (x); + } + ++/* bug found by Stathis, only occurs on 32-bit machines */ ++static void ++test20100709 (void) ++{ ++ mpfr_t x; ++ int inex; ++ ++ mpfr_init2 (x, 100); ++ mpfr_set_str (x, "-4.6308260837372266e+07", 10, MPFR_RNDN); ++ inex = mpfr_gamma (x, x, MPFR_RNDN); ++ MPFR_ASSERTN(MPFR_IS_ZERO(x) && MPFR_IS_NEG(x) && inex > 0); ++ mpfr_clear (x); ++} ++ + int + main (int argc, char *argv[]) + { +@@ -471,6 +485,7 @@ + test_generic (2, 100, 2); + gamma_integer (); + test20071231 (); ++ test20100709 (); + + data_check ("data/gamma", mpfr_gamma, "mpfr_gamma"); + +diff -Naur mpfr-3.0.0-old/tests/tout_str.c mpfr-3.0.0-new/tests/tout_str.c +--- mpfr-3.0.0-old/tests/tout_str.c 2010-06-10 04:00:13.000000000 -0700 ++++ mpfr-3.0.0-new/tests/tout_str.c 2010-11-10 16:53:44.000000000 -0800 +@@ -46,22 +46,54 @@ + special (void) + { + mpfr_t x; ++ unsigned int n; + + mpfr_init (x); + + mpfr_set_nan (x); +- mpfr_out_str (fout, 10, 0, x, MPFR_RNDN); ++ n = mpfr_out_str (fout, 10, 0, x, MPFR_RNDN); ++ if (n != 5) ++ { ++ printf ("Error: mpfr_out_str (file, 10, 0, NaN, MPFR_RNDN) wrote %u " ++ "characters instead of 5.\n", n); ++ exit (1); ++ } + + mpfr_set_inf (x, 1); +- mpfr_out_str (fout, 10, 0, x, MPFR_RNDN); ++ n = mpfr_out_str (fout, 10, 0, x, MPFR_RNDN); ++ if (n != 5) ++ { ++ printf ("Error: mpfr_out_str (file, 10, 0, +Inf, MPFR_RNDN) wrote %u " ++ "characters instead of 5.\n", n); ++ exit (1); ++ } + + mpfr_set_inf (x, -1); +- mpfr_out_str (fout, 10, 0, x, MPFR_RNDN); ++ n = mpfr_out_str (fout, 10, 0, x, MPFR_RNDN); ++ if (n != 6) ++ { ++ printf ("Error: mpfr_out_str (file, 10, 0, -Inf, MPFR_RNDN) wrote %u " ++ "characters instead of 6.\n", n); ++ exit (1); ++ } + + mpfr_set_ui (x, 0, MPFR_RNDN); +- mpfr_out_str (fout, 10, 0, x, MPFR_RNDN); ++ n = mpfr_out_str (fout, 10, 0, x, MPFR_RNDN); ++ if (n != 1) ++ { ++ printf ("Error: mpfr_out_str (file, 10, 0, +0, MPFR_RNDN) wrote %u " ++ "characters instead of 1.\n", n); ++ exit (1); ++ } ++ + mpfr_neg (x, x, MPFR_RNDN); +- mpfr_out_str (fout, 10, 0, x, MPFR_RNDN); ++ n = mpfr_out_str (fout, 10, 0, x, MPFR_RNDN); ++ if (n != 2) ++ { ++ printf ("Error: mpfr_out_str (file, 10, 0, -0, MPFR_RNDN) wrote %u " ++ "characters instead of 2.\n", n); ++ exit (1); ++ } + + mpfr_clear (x); + } +diff -Naur mpfr-3.0.0-old/tests/tset_ld.c mpfr-3.0.0-new/tests/tset_ld.c +--- mpfr-3.0.0-old/tests/tset_ld.c 2010-06-10 04:00:13.000000000 -0700 ++++ mpfr-3.0.0-new/tests/tset_ld.c 2010-11-10 16:53:44.000000000 -0800 +@@ -147,12 +147,39 @@ + test_fixed_bugs (void) + { + mpfr_t x; +- long double d; ++ long double l, m; + + /* bug found by Steve Kargl (2009-03-14) */ + mpfr_init2 (x, 64); + mpfr_set_ui_2exp (x, 1, -16447, MPFR_RNDN); +- d = mpfr_get_ld (x, MPFR_RNDN); /* an assertion failed in init2.c:50 */ ++ mpfr_get_ld (x, MPFR_RNDN); /* an assertion failed in init2.c:50 */ ++ ++ /* bug reported by Jakub Jelinek (2010-10-17) ++ https://gforge.inria.fr/tracker/?func=detail&aid=11300 */ ++ mpfr_set_prec (x, MPFR_LDBL_MANT_DIG); ++ /* l = 0x1.23456789abcdef0123456789abcdp-914L; */ ++ l = 8.215640181713713164092636634579e-276; ++ mpfr_set_ld (x, l, MPFR_RNDN); ++ m = mpfr_get_ld (x, MPFR_RNDN); ++ if (m != l) ++ { ++ printf ("Error in get_ld o set_ld for l=%Le\n", l); ++ printf ("Got m=%Le instead of l\n", m); ++ exit (1); ++ } ++ ++ /* another similar test which failed with extended double precision and the ++ generic code for mpfr_set_ld */ ++ /* l = 0x1.23456789abcdef0123456789abcdp-968L; */ ++ l = 4.560596445887084662336528403703e-292; ++ mpfr_set_ld (x, l, MPFR_RNDN); ++ m = mpfr_get_ld (x, MPFR_RNDN); ++ if (m != l) ++ { ++ printf ("Error in get_ld o set_ld for l=%Le\n", l); ++ printf ("Got m=%Le instead of l\n", m); ++ exit (1); ++ } + + mpfr_clear (x); + } +diff -Naur mpfr-3.0.0-old/tests/tsub.c mpfr-3.0.0-new/tests/tsub.c +--- mpfr-3.0.0-old/tests/tsub.c 2010-06-10 04:00:13.000000000 -0700 ++++ mpfr-3.0.0-new/tests/tsub.c 2010-11-10 16:53:44.000000000 -0800 +@@ -201,6 +201,8 @@ + if (mpfr_cmp (z, x)) + { + printf ("Error in mpfr_sub (2)\n"); ++ printf ("Expected "); mpfr_print_binary (x); puts (""); ++ printf ("Got "); mpfr_print_binary (z); puts (""); + exit (1); + } + mpfr_set_str_binary (x, "1.1110111011110001110111011111111111101000011001011100101100101101"); +@@ -478,6 +480,156 @@ + mpfr_clear (u); + } + ++/* Bug found by Jakub Jelinek ++ * http://bugzilla.redhat.com/643657 ++ * https://gforge.inria.fr/tracker/index.php?func=detail&aid=11301 ++ * The consequence can be either an assertion failure (i = 2 in the ++ * testcase below, in debug mode) or an incorrectly rounded value. ++ */ ++static void ++bug20101017 (void) ++{ ++ mpfr_t a, b, c; ++ int inex; ++ int i; ++ ++ mpfr_init2 (a, GMP_NUMB_BITS * 2); ++ mpfr_init2 (b, GMP_NUMB_BITS); ++ mpfr_init2 (c, GMP_NUMB_BITS); ++ ++ /* a = 2^(2N) + k.2^(2N-1) + 2^N and b = 1 ++ with N = GMP_NUMB_BITS and k = 0 or 1. ++ c = a - b should round to the same value as a. */ ++ ++ for (i = 2; i <= 3; i++) ++ { ++ mpfr_set_ui_2exp (a, i, GMP_NUMB_BITS - 1, MPFR_RNDN); ++ mpfr_add_ui (a, a, 1, MPFR_RNDN); ++ mpfr_mul_2ui (a, a, GMP_NUMB_BITS, MPFR_RNDN); ++ mpfr_set_ui (b, 1, MPFR_RNDN); ++ inex = mpfr_sub (c, a, b, MPFR_RNDN); ++ mpfr_set (b, a, MPFR_RNDN); ++ if (! mpfr_equal_p (c, b)) ++ { ++ printf ("Error in bug20101017 for i = %d.\n", i); ++ printf ("Expected "); ++ mpfr_out_str (stdout, 16, 0, b, MPFR_RNDN); ++ putchar ('\n'); ++ printf ("Got "); ++ mpfr_out_str (stdout, 16, 0, c, MPFR_RNDN); ++ putchar ('\n'); ++ exit (1); ++ } ++ if (inex >= 0) ++ { ++ printf ("Error in bug20101017 for i = %d: bad inex value.\n", i); ++ printf ("Expected negative, got %d.\n", inex); ++ exit (1); ++ } ++ } ++ ++ mpfr_set_prec (a, 64); ++ mpfr_set_prec (b, 129); ++ mpfr_set_prec (c, 2); ++ mpfr_set_str_binary (b, "0.100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001E65"); ++ mpfr_set_str_binary (c, "0.10E1"); ++ inex = mpfr_sub (a, b, c, MPFR_RNDN); ++ if (mpfr_cmp_ui_2exp (a, 1, 64) != 0 || inex >= 0) ++ { ++ printf ("Error in mpfr_sub for b-c for b=2^64+1+2^(-64), c=1\n"); ++ printf ("Expected result 2^64 with inex < 0\n"); ++ printf ("Got "); mpfr_print_binary (a); ++ printf (" with inex=%d\n", inex); ++ exit (1); ++ } ++ ++ mpfr_clears (a, b, c, (mpfr_ptr) 0); ++} ++ ++/* hard test of rounding */ ++static void ++check_rounding (void) ++{ ++ mpfr_t a, b, c, res; ++ mpfr_prec_t p; ++ long k, l; ++ int i; ++ ++#define MAXKL (2 * GMP_NUMB_BITS) ++ for (p = MPFR_PREC_MIN; p <= GMP_NUMB_BITS; p++) ++ { ++ mpfr_init2 (a, p); ++ mpfr_init2 (res, p); ++ mpfr_init2 (b, p + 1 + MAXKL); ++ mpfr_init2 (c, MPFR_PREC_MIN); ++ ++ /* b = 2^p + 1 + 2^(-k), c = 2^(-l) */ ++ for (k = 0; k <= MAXKL; k++) ++ for (l = 0; l <= MAXKL; l++) ++ { ++ mpfr_set_ui_2exp (b, 1, p, MPFR_RNDN); ++ mpfr_add_ui (b, b, 1, MPFR_RNDN); ++ mpfr_mul_2ui (b, b, k, MPFR_RNDN); ++ mpfr_add_ui (b, b, 1, MPFR_RNDN); ++ mpfr_div_2ui (b, b, k, MPFR_RNDN); ++ mpfr_set_ui_2exp (c, 1, -l, MPFR_RNDN); ++ i = mpfr_sub (a, b, c, MPFR_RNDN); ++ /* b - c = 2^p + 1 + 2^(-k) - 2^(-l), should be rounded to ++ 2^p for l <= k, and 2^p+2 for l < k */ ++ if (l <= k) ++ { ++ if (mpfr_cmp_ui_2exp (a, 1, p) != 0) ++ { ++ printf ("Wrong result in check_rounding\n"); ++ printf ("p=%lu k=%ld l=%ld\n", p, k, l); ++ printf ("b="); mpfr_print_binary (b); puts (""); ++ printf ("c="); mpfr_print_binary (c); puts (""); ++ printf ("Expected 2^%lu\n", p); ++ printf ("Got "); mpfr_print_binary (a); puts (""); ++ exit (1); ++ } ++ if (i >= 0) ++ { ++ printf ("Wrong ternary value in check_rounding\n"); ++ printf ("p=%lu k=%ld l=%ld\n", p, k, l); ++ printf ("b="); mpfr_print_binary (b); puts (""); ++ printf ("c="); mpfr_print_binary (c); puts (""); ++ printf ("a="); mpfr_print_binary (a); puts (""); ++ printf ("Expected < 0, got %d\n", i); ++ exit (1); ++ } ++ } ++ else /* l < k */ ++ { ++ mpfr_set_ui_2exp (res, 1, p, MPFR_RNDN); ++ mpfr_add_ui (res, res, 2, MPFR_RNDN); ++ if (mpfr_cmp (a, res) != 0) ++ { ++ printf ("Wrong result in check_rounding\n"); ++ printf ("b="); mpfr_print_binary (b); puts (""); ++ printf ("c="); mpfr_print_binary (c); puts (""); ++ printf ("Expected "); mpfr_print_binary (res); puts (""); ++ printf ("Got "); mpfr_print_binary (a); puts (""); ++ exit (1); ++ } ++ if (i <= 0) ++ { ++ printf ("Wrong ternary value in check_rounding\n"); ++ printf ("b="); mpfr_print_binary (b); puts (""); ++ printf ("c="); mpfr_print_binary (c); puts (""); ++ printf ("Expected > 0, got %d\n", i); ++ exit (1); ++ } ++ } ++ } ++ ++ mpfr_clear (a); ++ mpfr_clear (res); ++ mpfr_clear (b); ++ mpfr_clear (c); ++ } ++} ++ + #define TEST_FUNCTION test_sub + #define TWO_ARGS + #define RAND_FUNCTION(x) mpfr_random2(x, MPFR_LIMB_SIZE (x), randlimb () % 100, RANDS) +@@ -491,6 +643,8 @@ + + tests_start_mpfr (); + ++ bug20101017 (); ++ check_rounding (); + check_diverse (); + check_inexact (); + bug_ddefour (); +diff -Naur mpfr-3.0.0-old/VERSION mpfr-3.0.0-new/VERSION +--- mpfr-3.0.0-old/VERSION 2010-06-10 04:00:14.000000000 -0700 ++++ mpfr-3.0.0-new/VERSION 2010-11-10 16:53:44.000000000 -0800 +@@ -1 +1 @@ +-3.0.0 ++3.0.0-p8 +diff -Naur mpfr-3.0.0-old/version.c mpfr-3.0.0-new/version.c +--- mpfr-3.0.0-old/version.c 2010-06-10 04:00:14.000000000 -0700 ++++ mpfr-3.0.0-new/version.c 2010-11-10 16:53:44.000000000 -0800 +@@ -25,5 +25,5 @@ + const char * + mpfr_get_version (void) + { +- return "3.0.0"; ++ return "3.0.0-p8"; + } From 4d0f8458b10cb8ee657e9b8a63c5a486de14da1a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 13:41:38 +0100 Subject: [PATCH 132/850] xbmc-dharma: update to xbmc-dharma-35248 Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc-dharma/meta | 2 +- .../463-xbmc-add_remote_devinput-0.1.diff | 20 +++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/packages/mediacenter/xbmc-dharma/meta b/packages/mediacenter/xbmc-dharma/meta index 283b780804..84c2be1fda 100644 --- a/packages/mediacenter/xbmc-dharma/meta +++ b/packages/mediacenter/xbmc-dharma/meta @@ -1,5 +1,5 @@ PKG_NAME="xbmc-dharma" -PKG_VERSION="35198" +PKG_VERSION="35248" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/xbmc-dharma/patches/463-xbmc-add_remote_devinput-0.1.diff b/packages/mediacenter/xbmc-dharma/patches/463-xbmc-add_remote_devinput-0.1.diff index 546137d387..8b0ef3b6b2 100644 --- a/packages/mediacenter/xbmc-dharma/patches/463-xbmc-add_remote_devinput-0.1.diff +++ b/packages/mediacenter/xbmc-dharma/patches/463-xbmc-add_remote_devinput-0.1.diff @@ -1,9 +1,17 @@ -diff -Naur xbmc-dharma-33971/system/Lircmap.xml xbmc-dharma-33971.patch/system/Lircmap.xml ---- xbmc-dharma-33971/system/Lircmap.xml 2010-09-19 14:54:06.000000000 +0200 -+++ xbmc-dharma-33971.patch/system/Lircmap.xml 2010-09-28 17:45:10.196337846 +0200 -@@ -406,4 +406,57 @@ - KEY_YELLOW - KEY_BLUE +diff -Naur xbmc-dharma-35248/system/Lircmap.xml xbmc-dharma-35248.patch/system/Lircmap.xml +--- xbmc-dharma-35248/system/Lircmap.xml 2010-11-12 13:25:11.464538074 +0100 ++++ xbmc-dharma-35248.patch/system/Lircmap.xml 2010-11-12 13:26:26.486568902 +0100 +@@ -365,7 +365,6 @@ + + + cx23885_remote +- devinput + KEY_LEFT + KEY_RIGHT + KEY_UP +@@ -452,4 +451,57 @@ + yellow + blue + + From e5821cfa8bc84e20033892c7e3739a6b6231614d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 13:42:05 +0100 Subject: [PATCH 133/850] xbmc-dharma-theme-Confluence: update to xbmc-dharma-theme-Confluence-35248 Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc-dharma-theme-Confluence/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mediacenter/xbmc-dharma-theme-Confluence/meta b/packages/mediacenter/xbmc-dharma-theme-Confluence/meta index 640db99078..23784e5c37 100644 --- a/packages/mediacenter/xbmc-dharma-theme-Confluence/meta +++ b/packages/mediacenter/xbmc-dharma-theme-Confluence/meta @@ -1,5 +1,5 @@ PKG_NAME="xbmc-dharma-theme-Confluence" -PKG_VERSION="35198" +PKG_VERSION="35248" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From d13b07260ea304b9be939a0f3aa91e33b6bd4f28 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 13:42:37 +0100 Subject: [PATCH 134/850] bluez: install input.conf Signed-off-by: Stephan Raue --- packages/network/bluez/install | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/network/bluez/install b/packages/network/bluez/install index 8898dd0486..7ad6d18a69 100755 --- a/packages/network/bluez/install +++ b/packages/network/bluez/install @@ -12,6 +12,7 @@ PKG_DIR=`find $PACKAGES -type d -name $1` mkdir -p $INSTALL/etc/bluetooth cp $PKG_BUILD/src/main.conf $INSTALL/etc/bluetooth cp $PKG_BUILD/tools/rfcomm.conf $INSTALL/etc/bluetooth + cp $PKG_BUILD/input/input.conf $INSTALL/etc/bluetooth mkdir -p $INSTALL/etc/dbus-1/system.d cp $PKG_BUILD/src/bluetooth.conf $INSTALL/etc/dbus-1/system.d From e9af057890518b9f8f4722dc05d98be99fc39732 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 13:43:07 +0100 Subject: [PATCH 135/850] e2fsprogs: remove htree and compression support Signed-off-by: Stephan Raue --- packages/tools/e2fsprogs/build | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/tools/e2fsprogs/build b/packages/tools/e2fsprogs/build index 184bd2df66..cab6e7593c 100755 --- a/packages/tools/e2fsprogs/build +++ b/packages/tools/e2fsprogs/build @@ -14,8 +14,8 @@ cd $PKG_BUILD --enable-verbose-makecmds \ --enable-symlink-install \ --enable-symlink-build \ - --enable-compression \ - --enable-htree \ + --disable-compression \ + --disable-htree \ --enable-elf-shlibs \ --disable-bsd-shlibs \ --disable-profile \ From 9399971f142daf2a29154bebae1169fd72569f9d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 17:12:53 +0100 Subject: [PATCH 136/850] libdrm: add multiversion support, add meta file support, remove package 'libdrm-master' Signed-off-by: Stephan Raue --- packages/graphics/Mesa-GL/build | 2 +- packages/graphics/Mesa/build | 2 +- packages/graphics/Mesa/install | 2 +- packages/graphics/cairo/build | 2 +- packages/graphics/libdrm-master/build | 49 --------------------- packages/graphics/libdrm-master/install | 12 ----- packages/graphics/libdrm-master/url | 1 - packages/graphics/libdrm/build | 4 -- packages/graphics/libdrm/meta | 19 ++++++++ packages/graphics/libdrm/url | 1 - packages/graphics/mesa-master-GL/build | 2 +- packages/graphics/mesa-master/build | 2 +- packages/graphics/mesa-master/install | 2 +- packages/graphics/mesa-master/url | 2 +- packages/multimedia/libva/build | 2 +- packages/multimedia/libva/install | 2 +- packages/x11/driver/xf86-video-ati/meta | 4 +- packages/x11/driver/xf86-video-nouveau/meta | 4 +- packages/x11/xserver/xorg-server/build | 2 +- packages/x11/xserver/xorg-server/install | 2 +- projects/ATV/options | 4 +- projects/ION/options | 4 +- projects/generic/options | 4 +- projects/intel/options | 4 +- 24 files changed, 43 insertions(+), 91 deletions(-) delete mode 100755 packages/graphics/libdrm-master/build delete mode 100755 packages/graphics/libdrm-master/install delete mode 100644 packages/graphics/libdrm-master/url create mode 100644 packages/graphics/libdrm/meta delete mode 100644 packages/graphics/libdrm/url diff --git a/packages/graphics/Mesa-GL/build b/packages/graphics/Mesa-GL/build index 9a66b4e197..c6c47a900c 100755 --- a/packages/graphics/Mesa-GL/build +++ b/packages/graphics/Mesa-GL/build @@ -8,7 +8,7 @@ $SCRIPTS/build talloc $SCRIPTS/build expat $SCRIPTS/build glproto $SCRIPTS/build dri2proto -$SCRIPTS/build $LIBDRM +$SCRIPTS/build libdrm $SCRIPTS/build libXext $SCRIPTS/build libXdamage $SCRIPTS/build libXfixes diff --git a/packages/graphics/Mesa/build b/packages/graphics/Mesa/build index a8be0a76fc..a0c17abe82 100755 --- a/packages/graphics/Mesa/build +++ b/packages/graphics/Mesa/build @@ -7,7 +7,7 @@ $SCRIPTS/build talloc $SCRIPTS/build expat $SCRIPTS/build glproto $SCRIPTS/build dri2proto -$SCRIPTS/build $LIBDRM +$SCRIPTS/build libdrm $SCRIPTS/build libXext $SCRIPTS/build libXdamage $SCRIPTS/build libXfixes diff --git a/packages/graphics/Mesa/install b/packages/graphics/Mesa/install index 8ee9847a75..781d48a53c 100755 --- a/packages/graphics/Mesa/install +++ b/packages/graphics/Mesa/install @@ -3,7 +3,7 @@ . config/options $1 $SCRIPTS/install libXdamage -$SCRIPTS/install $LIBDRM +$SCRIPTS/install libdrm $SCRIPTS/install talloc $SCRIPTS/install expat $SCRIPTS/install libXext diff --git a/packages/graphics/cairo/build b/packages/graphics/cairo/build index 2435ddf1db..f00a5da18d 100755 --- a/packages/graphics/cairo/build +++ b/packages/graphics/cairo/build @@ -11,7 +11,7 @@ $SCRIPTS/build pixman $SCRIPTS/build libXrender $SCRIPTS/build libX11 # $SCRIPTS/build $MESA -# $SCRIPTS/build $LIBDRM +# $SCRIPTS/build libdrm # $SCRIPTS/build libxcb cd $PKG_BUILD diff --git a/packages/graphics/libdrm-master/build b/packages/graphics/libdrm-master/build deleted file mode 100755 index 4751549977..0000000000 --- a/packages/graphics/libdrm-master/build +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/sh - -. config/options $1 - -$SCRIPTS/build toolchain -$SCRIPTS/build libpthread-stubs -$SCRIPTS/build udev - -get_graphicdrivers - -DRM_CONFIG="--disable-libkms --disable-intel --disable-radeon" -DRM_CONFIG="$DRM_CONFIG --disable-nouveau-experimental-api --disable-vmwgfx-experimental-api" - -for drv in $GRAPHIC_DRIVERS; do - [ $drv = i915 -o $drv = i965 ] && \ - DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-libkms/enable-libkms/'` && \ - DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-intel/enable-intel/'` - - [ $drv = r200 -o $drv = r300 -o $drv = r600 -o $drv = radeon ] && \ - DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-libkms/enable-libkms/'` && \ - DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-radeon/enable-radeon/'` - - [ $drv = nouveau ] && \ - DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-libkms/enable-libkms/'` && \ - DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-nouveau/enable-nouveau/'` - - [ $drv = vmware ] && \ - DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-libkms/enable-libkms/'` && \ - DRM_CONFIG=`echo $DRM_CONFIG | sed -e 's/disable-vmwgfx-experimental-api/enable-vmwgfx-experimental-api/'` -done - -export LIBUDEV_CFLAGS="-I`ls -d $ROOT/$BUILD/udev*`" -export LIBUDEV_LIBS="-I`ls -d $ROOT/$BUILD/udev*`" - -cd $PKG_BUILD -./configure --host=$TARGET_NAME \ - --build=$HOST_NAME \ - --prefix=/usr \ - --sysconfdir=/etc \ - --disable-static \ - --enable-shared \ - --enable-udev \ - --enable-largefile \ - --with-kernel-source=$(kernel_path) \ - $DRM_CONFIG \ - -make - -$MAKEINSTALL diff --git a/packages/graphics/libdrm-master/install b/packages/graphics/libdrm-master/install deleted file mode 100755 index 078dd735b4..0000000000 --- a/packages/graphics/libdrm-master/install +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -. config/options $1 - -get_graphicdrivers - -mkdir -p $INSTALL/usr/lib - cp -P $PKG_BUILD/.libs/libdrm.so* $INSTALL/usr/lib - cp -P $PKG_BUILD/libkms/.libs/libkms.so* $INSTALL/usr/lib || true - - cp -P $PKG_BUILD/*/.libs/libdrm_*.so $INSTALL/usr/lib || true - cp -P $PKG_BUILD/*/.libs/libdrm_*.so*[0-9] $INSTALL/usr/lib || true diff --git a/packages/graphics/libdrm-master/url b/packages/graphics/libdrm-master/url deleted file mode 100644 index 4c0b407e97..0000000000 --- a/packages/graphics/libdrm-master/url +++ /dev/null @@ -1 +0,0 @@ -http://sources.openelec.tv/svn/libdrm-master-20101104.tar.bz2 \ No newline at end of file diff --git a/packages/graphics/libdrm/build b/packages/graphics/libdrm/build index 4751549977..fd295d2bdd 100755 --- a/packages/graphics/libdrm/build +++ b/packages/graphics/libdrm/build @@ -2,10 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build libpthread-stubs -$SCRIPTS/build udev - get_graphicdrivers DRM_CONFIG="--disable-libkms --disable-intel --disable-radeon" diff --git a/packages/graphics/libdrm/meta b/packages/graphics/libdrm/meta new file mode 100644 index 0000000000..7ff155e2cb --- /dev/null +++ b/packages/graphics/libdrm/meta @@ -0,0 +1,19 @@ +PKG_NAME="libdrm" +PKG_VERSION="2.4.22" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://dri.freedesktop.org" +PKG_URL="http://dri.freedesktop.org/libdrm/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="udev" +PKG_BUILD_DEPENDS="toolchain libpthread-stubs udev" +PKG_PRIORITY="optional" +PKG_SECTION="graphics" +PKG_SHORTDESC="libdrm: Userspace interface to kernel DRM services" +PKG_LONGDESC="The userspace interface library to kernel DRM services." +PKG_IS_ADDON="no" + +if [ $LIBDRM_MASTER = "yes" ]; then + PKG_VERSION="20101111" + PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" +fi diff --git a/packages/graphics/libdrm/url b/packages/graphics/libdrm/url deleted file mode 100644 index b75c89f329..0000000000 --- a/packages/graphics/libdrm/url +++ /dev/null @@ -1 +0,0 @@ -http://dri.freedesktop.org/libdrm/libdrm-2.4.22.tar.bz2 \ No newline at end of file diff --git a/packages/graphics/mesa-master-GL/build b/packages/graphics/mesa-master-GL/build index 9a66b4e197..c6c47a900c 100755 --- a/packages/graphics/mesa-master-GL/build +++ b/packages/graphics/mesa-master-GL/build @@ -8,7 +8,7 @@ $SCRIPTS/build talloc $SCRIPTS/build expat $SCRIPTS/build glproto $SCRIPTS/build dri2proto -$SCRIPTS/build $LIBDRM +$SCRIPTS/build libdrm $SCRIPTS/build libXext $SCRIPTS/build libXdamage $SCRIPTS/build libXfixes diff --git a/packages/graphics/mesa-master/build b/packages/graphics/mesa-master/build index a8be0a76fc..a0c17abe82 100755 --- a/packages/graphics/mesa-master/build +++ b/packages/graphics/mesa-master/build @@ -7,7 +7,7 @@ $SCRIPTS/build talloc $SCRIPTS/build expat $SCRIPTS/build glproto $SCRIPTS/build dri2proto -$SCRIPTS/build $LIBDRM +$SCRIPTS/build libdrm $SCRIPTS/build libXext $SCRIPTS/build libXdamage $SCRIPTS/build libXfixes diff --git a/packages/graphics/mesa-master/install b/packages/graphics/mesa-master/install index 8ee9847a75..781d48a53c 100755 --- a/packages/graphics/mesa-master/install +++ b/packages/graphics/mesa-master/install @@ -3,7 +3,7 @@ . config/options $1 $SCRIPTS/install libXdamage -$SCRIPTS/install $LIBDRM +$SCRIPTS/install libdrm $SCRIPTS/install talloc $SCRIPTS/install expat $SCRIPTS/install libXext diff --git a/packages/graphics/mesa-master/url b/packages/graphics/mesa-master/url index 427bb26c94..6f1a9370f7 100644 --- a/packages/graphics/mesa-master/url +++ b/packages/graphics/mesa-master/url @@ -1 +1 @@ -http://sources.openelec.tv/svn/mesa-master-20101104.tar.bz2 \ No newline at end of file +http://sources.openelec.tv/svn/mesa-master-20101111.tar.bz2 \ No newline at end of file diff --git a/packages/multimedia/libva/build b/packages/multimedia/libva/build index f098a70429..6dc16a9039 100755 --- a/packages/multimedia/libva/build +++ b/packages/multimedia/libva/build @@ -6,7 +6,7 @@ $SCRIPTS/build toolchain $SCRIPTS/build libX11 $SCRIPTS/build libXext $SCRIPTS/build libXfixes -$SCRIPTS/build $LIBDRM +$SCRIPTS/build libdrm $SCRIPTS/build $MESA cd $PKG_BUILD diff --git a/packages/multimedia/libva/install b/packages/multimedia/libva/install index 625c93d110..e42dd8729d 100755 --- a/packages/multimedia/libva/install +++ b/packages/multimedia/libva/install @@ -5,7 +5,7 @@ $SCRIPTS/install libX11 $SCRIPTS/install libXext $SCRIPTS/install libXfixes -$SCRIPTS/install $LIBDRM +$SCRIPTS/install libdrm $SCRIPTS/install $MESA mkdir -p $INSTALL/usr/lib diff --git a/packages/x11/driver/xf86-video-ati/meta b/packages/x11/driver/xf86-video-ati/meta index 0552fdb318..b5d8af6883 100644 --- a/packages/x11/driver/xf86-video-ati/meta +++ b/packages/x11/driver/xf86-video-ati/meta @@ -5,8 +5,8 @@ PKG_ARCH="i386 x86_64" PKG_LICENSE="OSS" PKG_SITE="http://www.x.org/" PKG_URL="http://xorg.freedesktop.org/archive/individual/driver/$PKG_NAME-$PKG_VERSION.tar.bz2" -PKG_DEPENDS="libXrandr libXrender libXext libpciaccess $LIBDRM udev" -PKG_BUILD_DEPENDS="toolchain util-macros libXrandr libXrender libXext libpciaccess $LIBDRM udev xorg-server" +PKG_DEPENDS="libXrandr libXrender libXext libpciaccess libdrm udev" +PKG_BUILD_DEPENDS="toolchain util-macros libXrandr libXrender libXext libpciaccess libdrm udev xorg-server" PKG_PRIORITY="optional" PKG_SECTION="x11/driver" PKG_SHORTDESC="xf86-video-ati: The Xorg driver for ATI video chips" diff --git a/packages/x11/driver/xf86-video-nouveau/meta b/packages/x11/driver/xf86-video-nouveau/meta index e1aef8d755..f5f6f0c699 100644 --- a/packages/x11/driver/xf86-video-nouveau/meta +++ b/packages/x11/driver/xf86-video-nouveau/meta @@ -5,8 +5,8 @@ PKG_ARCH="i386 x86_64" PKG_LICENSE="OSS" PKG_SITE="http://www.x.org/" PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" -PKG_DEPENDS="libXrandr libXrender $LIBDRM libXext libpciaccess udev $MESA" -PKG_BUILD_DEPENDS="toolchain libXrandr libXrender $LIBDRM libXext libpciaccess udev $MESA xorg-server" +PKG_DEPENDS="libXrandr libXrender libdrm libXext libpciaccess udev $MESA" +PKG_BUILD_DEPENDS="toolchain libXrandr libXrender libdrm libXext libpciaccess udev $MESA xorg-server" PKG_PRIORITY="optional" PKG_SECTION="x11/driver" PKG_SHORTDESC="xf86-video-nouveau: Nouveau display driver (experimental)" diff --git a/packages/x11/xserver/xorg-server/build b/packages/x11/xserver/xorg-server/build index 9f615046b0..c578e56790 100755 --- a/packages/x11/xserver/xorg-server/build +++ b/packages/x11/xserver/xorg-server/build @@ -24,7 +24,7 @@ $SCRIPTS/build libpciaccess $SCRIPTS/build libX11 $SCRIPTS/build libXfont $SCRIPTS/build libxkbfile -$SCRIPTS/build $LIBDRM +$SCRIPTS/build libdrm $SCRIPTS/build ${MESA}-GL $SCRIPTS/build openssl $SCRIPTS/build freetype diff --git a/packages/x11/xserver/xorg-server/install b/packages/x11/xserver/xorg-server/install index 658fc6bd09..07a804cd20 100755 --- a/packages/x11/xserver/xorg-server/install +++ b/packages/x11/xserver/xorg-server/install @@ -9,7 +9,7 @@ $SCRIPTS/install freetype $SCRIPTS/install openssl $SCRIPTS/install libX11 $SCRIPTS/install libXfont -$SCRIPTS/install $LIBDRM +$SCRIPTS/install libdrm $SCRIPTS/install $MESA $SCRIPTS/install pixman $SCRIPTS/install udev diff --git a/projects/ATV/options b/projects/ATV/options index ed063c7784..d7904ccf8b 100644 --- a/projects/ATV/options +++ b/projects/ATV/options @@ -128,8 +128,8 @@ # e.g. GRAPHIC_DRIVERS="i915 i965 r300 r600 radeon nvidia nouveau" GRAPHIC_DRIVERS="nouveau" -# libdrm to use (libdrm / libdrm-master) - LIBDRM="libdrm-master" +# use libdrm-master (latest git) instead latest released version + LIBDRM_MASTER="yes" # Mesa to use (Mesa / mesa-master) MESA="mesa-master" diff --git a/projects/ION/options b/projects/ION/options index 94e0b060b8..56b6476258 100644 --- a/projects/ION/options +++ b/projects/ION/options @@ -128,8 +128,8 @@ # e.g. GRAPHIC_DRIVERS="i915 i965 r300 r600 radeon nvidia nouveau" GRAPHIC_DRIVERS="nvidia" -# libdrm to use (libdrm / libdrm-master) - LIBDRM="libdrm" +# use libdrm-master (latest git) instead latest released version + LIBDRM_MASTER="no" # Mesa to use (Mesa / mesa-master) MESA="Mesa" diff --git a/projects/generic/options b/projects/generic/options index 11160dd6ad..67f3786b36 100644 --- a/projects/generic/options +++ b/projects/generic/options @@ -128,8 +128,8 @@ # e.g. GRAPHIC_DRIVERS="i915 i965 r300 r600 radeon nvidia nouveau" GRAPHIC_DRIVERS="i915 i965 r200 r300 r600 radeon nvidia vmware" -# libdrm to use (libdrm / libdrm-master) - LIBDRM="libdrm" +# use libdrm-master (latest git) instead latest released version + LIBDRM_MASTER="no" # Mesa to use (Mesa / mesa-master) MESA="Mesa" diff --git a/projects/intel/options b/projects/intel/options index 98f6412268..2313bc5856 100644 --- a/projects/intel/options +++ b/projects/intel/options @@ -128,8 +128,8 @@ # e.g. GRAPHIC_DRIVERS="i915 i965 r300 r600 radeon nvidia nouveau" GRAPHIC_DRIVERS="i965" -# libdrm to use (libdrm / libdrm-master) - LIBDRM="libdrm" +# use libdrm-master (latest git) instead latest released version + LIBDRM_MASTER="no" # Mesa to use (Mesa / mesa-master) MESA="Mesa" From c83e54fcf99bfe0244e7d64c648592e36ffeff8a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 18:29:35 +0100 Subject: [PATCH 137/850] Mesa add multiversion support, add meta file support, remove package 'mesa-master', remove package 'mesa-master-GL' Signed-off-by: Stephan Raue --- packages/addons/games/megaglest-source/meta | 4 +- packages/addons/games/sauerbraten/meta | 4 +- packages/debug/mesa-demos/build | 2 +- packages/debug/mesa-demos/install | 2 +- packages/graphics/Mesa-GL/build | 16 +--- packages/graphics/Mesa-GL/meta | 14 ++++ packages/graphics/Mesa/build | 14 ---- packages/graphics/Mesa/install | 10 --- packages/graphics/Mesa/meta | 19 +++++ packages/graphics/Mesa/url | 1 - packages/graphics/cairo/build | 2 +- packages/graphics/cairo/install | 1 + packages/graphics/glew/build | 2 +- packages/graphics/glew/install | 2 +- packages/graphics/mesa-master-GL/build | 56 ------------- packages/graphics/mesa-master/build | 87 --------------------- packages/graphics/mesa-master/install | 26 ------ packages/graphics/mesa-master/url | 1 - packages/mediacenter/xbmc-dharma/meta | 4 +- packages/mediacenter/xbmc/meta | 4 +- packages/multimedia/SDL/meta | 4 +- packages/multimedia/SDL_ttf/build | 2 +- packages/multimedia/SDL_ttf/install | 2 +- packages/multimedia/libva/build | 2 +- packages/multimedia/libva/install | 2 +- packages/sdk/games-sdk/install | 2 +- packages/x11/driver/xf86-video-nouveau/meta | 4 +- packages/x11/xserver/xorg-server/build | 2 +- packages/x11/xserver/xorg-server/install | 2 +- projects/ATV/options | 4 +- projects/ION/options | 4 +- projects/generic/options | 4 +- projects/intel/options | 4 +- 33 files changed, 68 insertions(+), 241 deletions(-) create mode 100644 packages/graphics/Mesa-GL/meta create mode 100644 packages/graphics/Mesa/meta delete mode 100644 packages/graphics/Mesa/url delete mode 100755 packages/graphics/mesa-master-GL/build delete mode 100755 packages/graphics/mesa-master/build delete mode 100755 packages/graphics/mesa-master/install delete mode 100644 packages/graphics/mesa-master/url diff --git a/packages/addons/games/megaglest-source/meta b/packages/addons/games/megaglest-source/meta index 94ac401142..b79e0b88cc 100644 --- a/packages/addons/games/megaglest-source/meta +++ b/packages/addons/games/megaglest-source/meta @@ -5,8 +5,8 @@ PKG_ARCH="any" PKG_LICENSE="OSS" PKG_SITE="http://www.glest.org" PKG_URL="http://downloads.sourceforge.net/project/megaglest/current_release/$PKG_NAME-$PKG_VERSION.tar.bz2" -PKG_DEPENDS="curl xerces-c $LIBJPEG libpng libvorbis libogg SDL openal-soft libX11 $MESA" -PKG_BUILD_DEPENDS="toolchain lua curl xerces-c $LIBJPEG libpng libvorbis libogg SDL openal-soft libX11 $MESA" +PKG_DEPENDS="curl xerces-c $LIBJPEG libpng libvorbis libogg SDL openal-soft libX11 Mesa" +PKG_BUILD_DEPENDS="toolchain lua curl xerces-c $LIBJPEG libpng libvorbis libogg SDL openal-soft libX11 Mesa" PKG_PRIORITY="optional" PKG_SECTION="games" PKG_SHORTDESC="(Game) MegaGlest: a free 3D real-time strategy game" diff --git a/packages/addons/games/sauerbraten/meta b/packages/addons/games/sauerbraten/meta index f9596c248e..9cd9a1fa9b 100644 --- a/packages/addons/games/sauerbraten/meta +++ b/packages/addons/games/sauerbraten/meta @@ -5,8 +5,8 @@ PKG_ARCH="any" PKG_LICENSE="OSS" PKG_SITE="http://sauerbraten.org/" PKG_URL="http://downloads.sourceforge.net/project/sauerbraten/sauerbraten/2010_07_19/${PKG_NAME}_${PKG_VERSION}_justice_edition_linux.tar.bz2" -PKG_DEPENDS="zlib libpng $LIBJPEG libX11 SDL SDL_image SDL_mixer $MESA" -PKG_BUILD_DEPENDS="toolchain zlib libpng $LIBJPEG libX11 SDL SDL_image SDL_mixer $MESA" +PKG_DEPENDS="zlib libpng $LIBJPEG libX11 SDL SDL_image SDL_mixer Mesa" +PKG_BUILD_DEPENDS="toolchain zlib libpng $LIBJPEG libX11 SDL SDL_image SDL_mixer Mesa" PKG_PRIORITY="optional" PKG_SECTION="games" PKG_SHORTDESC="(Game) Cube 2: Sauerbraten" diff --git a/packages/debug/mesa-demos/build b/packages/debug/mesa-demos/build index 05297e26c2..1c61867820 100755 --- a/packages/debug/mesa-demos/build +++ b/packages/debug/mesa-demos/build @@ -4,7 +4,7 @@ $SCRIPTS/build toolchain $SCRIPTS/build libX11 -$SCRIPTS/build $MESA +$SCRIPTS/build Mesa $SCRIPTS/build glew cd $PKG_BUILD diff --git a/packages/debug/mesa-demos/install b/packages/debug/mesa-demos/install index 45097435df..4dd826ce32 100755 --- a/packages/debug/mesa-demos/install +++ b/packages/debug/mesa-demos/install @@ -3,7 +3,7 @@ . config/options $1 $SCRIPTS/install libX11 -$SCRIPTS/install $MESA +$SCRIPTS/install Mesa $SCRIPTS/install glew mkdir -p $INSTALL/usr/bin diff --git a/packages/graphics/Mesa-GL/build b/packages/graphics/Mesa-GL/build index c6c47a900c..41041b10a6 100755 --- a/packages/graphics/Mesa-GL/build +++ b/packages/graphics/Mesa-GL/build @@ -2,21 +2,9 @@ . config/options $1 -$SCRIPTS/unpack $MESA -$SCRIPTS/build libxml2-host -$SCRIPTS/build talloc -$SCRIPTS/build expat -$SCRIPTS/build glproto -$SCRIPTS/build dri2proto -$SCRIPTS/build libdrm -$SCRIPTS/build libXext -$SCRIPTS/build libXdamage -$SCRIPTS/build libXfixes -$SCRIPTS/build libXxf86vm -$SCRIPTS/build libxcb -$SCRIPTS/build libX11 +$SCRIPTS/unpack Mesa -cd $BUILD/$MESA* +cd $BUILD/Mesa* ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ diff --git a/packages/graphics/Mesa-GL/meta b/packages/graphics/Mesa-GL/meta new file mode 100644 index 0000000000..c1e8728ad7 --- /dev/null +++ b/packages/graphics/Mesa-GL/meta @@ -0,0 +1,14 @@ +PKG_NAME="Mesa-GL" +PKG_VERSION="" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.mesa3d.org/" +PKG_URL="" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain libxml2-host talloc expat glproto dri2proto libdrm libXext libXdamage libXfixes libXxf86vm libxcb libX11" +PKG_PRIORITY="optional" +PKG_SECTION="graphics" +PKG_SHORTDESC="Mesa-GL: 3-D graphics library with OpenGL API (GL part)" +PKG_LONGDESC="Mesa is a 3-D graphics library with an API which is very similar to that of OpenGL*. To the extent that Mesa utilizes the OpenGL command syntax or state machine, it is being used with authorization from Silicon Graphics, Inc. However, the author makes no claim that Mesa is in any way a compatible replacement for OpenGL or associated with Silicon Graphics, Inc. Those who want a licensed implementation of OpenGL should contact a licensed vendor. While Mesa is not a licensed OpenGL implementation, it is currently being tested with the OpenGL conformance tests. For the current conformance status see the CONFORM file included in the Mesa distribution." +PKG_IS_ADDON="no" diff --git a/packages/graphics/Mesa/build b/packages/graphics/Mesa/build index a0c17abe82..e5abcb0c55 100755 --- a/packages/graphics/Mesa/build +++ b/packages/graphics/Mesa/build @@ -2,20 +2,6 @@ . config/options $1 -$SCRIPTS/build libxml2-host -$SCRIPTS/build talloc -$SCRIPTS/build expat -$SCRIPTS/build glproto -$SCRIPTS/build dri2proto -$SCRIPTS/build libdrm -$SCRIPTS/build libXext -$SCRIPTS/build libXdamage -$SCRIPTS/build libXfixes -$SCRIPTS/build libXxf86vm -$SCRIPTS/build libxcb -$SCRIPTS/build libX11 -$SCRIPTS/build xorg-server - get_graphicdrivers # dont use strip because of use from mklib diff --git a/packages/graphics/Mesa/install b/packages/graphics/Mesa/install index 781d48a53c..cac0c4de80 100755 --- a/packages/graphics/Mesa/install +++ b/packages/graphics/Mesa/install @@ -2,16 +2,6 @@ . config/options $1 -$SCRIPTS/install libXdamage -$SCRIPTS/install libdrm -$SCRIPTS/install talloc -$SCRIPTS/install expat -$SCRIPTS/install libXext -$SCRIPTS/install libXfixes -$SCRIPTS/install libXxf86vm -$SCRIPTS/install libxcb -$SCRIPTS/install libX11 - mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/lib/libGL.so.1.2 $INSTALL/usr/lib/libGL_mesa.so.1 # rename for cooperate with nvidia drivers ln -sf libGL.so.1 $INSTALL/usr/lib/libGL.so diff --git a/packages/graphics/Mesa/meta b/packages/graphics/Mesa/meta new file mode 100644 index 0000000000..195562722e --- /dev/null +++ b/packages/graphics/Mesa/meta @@ -0,0 +1,19 @@ +PKG_NAME="Mesa" +PKG_VERSION="7.9.1-20101109" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.mesa3d.org/" +PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="libXdamage libdrm talloc expat libXext libXfixes libXxf86vm libxcb libX11" +PKG_BUILD_DEPENDS="toolchain libxml2-host talloc expat glproto dri2proto libdrm libXext libXdamage libXfixes libXxf86vm libxcb libX11 xorg-server" +PKG_PRIORITY="optional" +PKG_SECTION="graphics" +PKG_SHORTDESC="mesa: 3-D graphics library with OpenGL API" +PKG_LONGDESC="Mesa is a 3-D graphics library with an API which is very similar to that of OpenGL*. To the extent that Mesa utilizes the OpenGL command syntax or state machine, it is being used with authorization from Silicon Graphics, Inc. However, the author makes no claim that Mesa is in any way a compatible replacement for OpenGL or associated with Silicon Graphics, Inc. Those who want a licensed implementation of OpenGL should contact a licensed vendor. While Mesa is not a licensed OpenGL implementation, it is currently being tested with the OpenGL conformance tests. For the current conformance status see the CONFORM file included in the Mesa distribution." +PKG_IS_ADDON="no" + +if [ $MESA_MASTER = "yes" ]; then + PKG_VERSION="20101111" + PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" +fi diff --git a/packages/graphics/Mesa/url b/packages/graphics/Mesa/url deleted file mode 100644 index 15170d3fc0..0000000000 --- a/packages/graphics/Mesa/url +++ /dev/null @@ -1 +0,0 @@ -http://sources.openelec.tv/svn/Mesa-7.9.1-20101109.tar.bz2 \ No newline at end of file diff --git a/packages/graphics/cairo/build b/packages/graphics/cairo/build index f00a5da18d..f1ab58d627 100755 --- a/packages/graphics/cairo/build +++ b/packages/graphics/cairo/build @@ -10,7 +10,7 @@ $SCRIPTS/build libpng $SCRIPTS/build pixman $SCRIPTS/build libXrender $SCRIPTS/build libX11 -# $SCRIPTS/build $MESA +# $SCRIPTS/build Mesa # $SCRIPTS/build libdrm # $SCRIPTS/build libxcb diff --git a/packages/graphics/cairo/install b/packages/graphics/cairo/install index b5ed0bd0d8..4df4aa7299 100755 --- a/packages/graphics/cairo/install +++ b/packages/graphics/cairo/install @@ -9,6 +9,7 @@ $SCRIPTS/install libpng $SCRIPTS/install pixman $SCRIPTS/install libXrender $SCRIPTS/install libX11 +$SCRIPTS/install Mesa #$SCRIPTS/install libxcb mkdir -p $INSTALL/usr/lib diff --git a/packages/graphics/glew/build b/packages/graphics/glew/build index c2d8508e3b..fa6ffb3bd0 100755 --- a/packages/graphics/glew/build +++ b/packages/graphics/glew/build @@ -7,7 +7,7 @@ $SCRIPTS/build libX11 $SCRIPTS/build libXext $SCRIPTS/build libXi $SCRIPTS/build libXmu -$SCRIPTS/build $MESA +$SCRIPTS/build Mesa cd $PKG_BUILD make SYSTEM=linux \ diff --git a/packages/graphics/glew/install b/packages/graphics/glew/install index 88c4dd6ef8..808fcee24b 100755 --- a/packages/graphics/glew/install +++ b/packages/graphics/glew/install @@ -6,7 +6,7 @@ $SCRIPTS/install libX11 $SCRIPTS/install libXext $SCRIPTS/install libXi $SCRIPTS/install libXmu -$SCRIPTS/install $MESA +$SCRIPTS/install Mesa mkdir -p $INSTALL/usr/lib cp -PR $PKG_BUILD/lib/lib*.so* $INSTALL/usr/lib diff --git a/packages/graphics/mesa-master-GL/build b/packages/graphics/mesa-master-GL/build deleted file mode 100755 index c6c47a900c..0000000000 --- a/packages/graphics/mesa-master-GL/build +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/sh - -. config/options $1 - -$SCRIPTS/unpack $MESA -$SCRIPTS/build libxml2-host -$SCRIPTS/build talloc -$SCRIPTS/build expat -$SCRIPTS/build glproto -$SCRIPTS/build dri2proto -$SCRIPTS/build libdrm -$SCRIPTS/build libXext -$SCRIPTS/build libXdamage -$SCRIPTS/build libXfixes -$SCRIPTS/build libXxf86vm -$SCRIPTS/build libxcb -$SCRIPTS/build libX11 - -cd $BUILD/$MESA* -./configure --host=$TARGET_NAME \ - --build=$HOST_NAME \ - --prefix=/usr \ - --sysconfdir=/etc \ - --localstatedir=/var \ - --disable-static \ - --enable-shared \ - --disable-debug \ - --disable-selinux \ - --enable-xcb \ - --disable-glx-tls \ - --enable-driglx-direct \ - --disable-egl \ - --disable-glu \ - --disable-gl-osmesa \ - --disable-glut \ - --disable-glw \ - --disable-motif \ - --with-driver=dri \ - --with-dri-drivers="" \ - --disable-gallium - - make -C src/glx - make -C src/mesa gl.pc - make -C src/mesa/drivers/dri dri.pc - - mkdir -p $SYSROOT_PREFIX/usr/include/GL - cp include/GL/*.h $SYSROOT_PREFIX/usr/include/GL - mkdir -p $SYSROOT_PREFIX/usr/lib - cp -P lib/libGL.so* $SYSROOT_PREFIX/usr/lib/pkgconfig - mkdir -p $SYSROOT_PREFIX/usr/lib/pkgconfig - cp src/mesa/gl.pc $SYSROOT_PREFIX/usr/lib/pkgconfig - - mkdir -p $SYSROOT_PREFIX/usr/include/GL/internal - cp include/GL/internal/dri_interface.h $SYSROOT_PREFIX/usr/include/GL/internal - mkdir -p $SYSROOT_PREFIX/usr/lib/pkgconfig - cp src/mesa/drivers/dri/dri.pc $SYSROOT_PREFIX/usr/lib/pkgconfig diff --git a/packages/graphics/mesa-master/build b/packages/graphics/mesa-master/build deleted file mode 100755 index a0c17abe82..0000000000 --- a/packages/graphics/mesa-master/build +++ /dev/null @@ -1,87 +0,0 @@ -#!/bin/sh - -. config/options $1 - -$SCRIPTS/build libxml2-host -$SCRIPTS/build talloc -$SCRIPTS/build expat -$SCRIPTS/build glproto -$SCRIPTS/build dri2proto -$SCRIPTS/build libdrm -$SCRIPTS/build libXext -$SCRIPTS/build libXdamage -$SCRIPTS/build libXfixes -$SCRIPTS/build libXxf86vm -$SCRIPTS/build libxcb -$SCRIPTS/build libX11 -$SCRIPTS/build xorg-server - -get_graphicdrivers - -# dont use strip because of use from mklib - LDFLAGS=`echo $LDFLAGS | sed -e "s|-s||"` - -MESA_CONFIG=" --disable-gallium --disable-gallium-nouveau --disable-gallium-i915 --disable-gallium-i965" -MESA_CONFIG="$MESA_CONFIG --disable-gallium-radeon --disable-gallium-r600 --disable-gallium-svga --disable-gallium-swrast" - -for drv in $GRAPHIC_DRIVERS; do - [ $drv = i915 ] && \ - MESA_CONFIG=`echo $MESA_CONFIG | sed -e 's/disable-gallium-intel/disable-gallium-intel/'` - - [ $drv = i965 ] && \ - MESA_CONFIG=`echo $MESA_CONFIG | sed -e 's/disable-gallium-intel/disable-gallium-intel/'` - - [ $drv = radeon ] && \ - MESA_CONFIG=`echo $MESA_CONFIG | sed -e 's/disable-gallium-radeon/disable-gallium-radeon/'` - - [ $drv = r600 ] && \ - MESA_CONFIG=`echo $MESA_CONFIG | sed -e 's/disable-gallium-r600/disable-gallium-r600/'` - - [ $drv = nouveau ] && \ - MESA_CONFIG=`echo $MESA_CONFIG | sed -e 's/disable-gallium/enable-gallium/'` && \ - MESA_CONFIG=`echo $MESA_CONFIG | sed -e 's/disable-gallium-nouveau/enable-gallium-nouveau/'` && \ - MESA_CONFIG="$MESA_CONFIG --with-state-trackers=dri,glx,xorg" - - [ $drv = vmware ] && \ - MESA_CONFIG=`echo $MESA_CONFIG | sed -e 's/disable-gallium/enable-gallium/'` && \ - MESA_CONFIG=`echo $MESA_CONFIG | sed -e 's/disable-gallium-svga/enable-gallium-svga/'` && \ - MESA_CONFIG="$MESA_CONFIG --with-state-trackers=dri,glx,xorg" -done - -cd $PKG_BUILD - -make clean - -HOST_CC=$HOST_CC \ -HOST_OPT_FLAGS="$HOST_CFLAGS" \ -X11_INCLUDES= \ -DRI_DRIVER_INSTALL_DIR="$XORG_PATH_DRI" \ -DRI_DRIVER_SEARCH_DIR="$XORG_PATH_DRI" \ -./configure --host=$TARGET_NAME \ - --build=$HOST_NAME \ - --prefix=/usr \ - --sysconfdir=/etc \ - --localstatedir=/var \ - --disable-static \ - --enable-shared \ - --disable-debug \ - --disable-selinux \ - --enable-xcb \ - --disable-glx-tls \ - --enable-driglx-direct \ - --disable-egl \ - --enable-glu \ - --disable-gl-osmesa \ - --disable-glut \ - --disable-glw \ - --disable-motif \ - --with-driver=dri \ - --with-dri-drivers=$MESA_DRIVERS \ - --with-dri-driverdir="$XORG_PATH_DRI" \ - --with-xorg-driver-dir="$XORG_PATH_DRIVERS" \ - $MESA_CONFIG \ - -make - -$MAKEINSTALL -C src/mesa -$MAKEINSTALL -C src/glu diff --git a/packages/graphics/mesa-master/install b/packages/graphics/mesa-master/install deleted file mode 100755 index 781d48a53c..0000000000 --- a/packages/graphics/mesa-master/install +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh - -. config/options $1 - -$SCRIPTS/install libXdamage -$SCRIPTS/install libdrm -$SCRIPTS/install talloc -$SCRIPTS/install expat -$SCRIPTS/install libXext -$SCRIPTS/install libXfixes -$SCRIPTS/install libXxf86vm -$SCRIPTS/install libxcb -$SCRIPTS/install libX11 - -mkdir -p $INSTALL/usr/lib - cp -P $PKG_BUILD/lib/libGL.so.1.2 $INSTALL/usr/lib/libGL_mesa.so.1 # rename for cooperate with nvidia drivers - ln -sf libGL.so.1 $INSTALL/usr/lib/libGL.so - ln -sf /var/lib/libGL.so $INSTALL/usr/lib/libGL.so.1 - cp -P $PKG_BUILD/lib/libGLU.so* $INSTALL/usr/lib - -mkdir -p $INSTALL/usr/lib/dri - cp -P $PKG_BUILD/lib/*_dri.so $INSTALL/usr/lib/dri || true - cp -P $PKG_BUILD/lib/gallium/*_dri.so $INSTALL/usr/lib/dri || true - -mkdir -p $INSTALL/usr/lib/xorg/modules/drivers - cp -P $PKG_BUILD/lib/gallium/*_drv.so $INSTALL/usr/lib/xorg/modules/drivers || true diff --git a/packages/graphics/mesa-master/url b/packages/graphics/mesa-master/url deleted file mode 100644 index 6f1a9370f7..0000000000 --- a/packages/graphics/mesa-master/url +++ /dev/null @@ -1 +0,0 @@ -http://sources.openelec.tv/svn/mesa-master-20101111.tar.bz2 \ No newline at end of file diff --git a/packages/mediacenter/xbmc-dharma/meta b/packages/mediacenter/xbmc-dharma/meta index 84c2be1fda..8c2fe9ebf1 100644 --- a/packages/mediacenter/xbmc-dharma/meta +++ b/packages/mediacenter/xbmc-dharma/meta @@ -5,8 +5,8 @@ PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://www.xbmc.org" PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" -PKG_DEPENDS="boost Python zlib bzip2 lzo pcre alsa-lib libass enca curl libssh rtmpdump dbus libXt libXtst libXmu libXrandr $MESA glew fontconfig fribidi $LIBJPEG libpng tiff freetype jasper libmad libsamplerate libogg libvorbis libcdio libmms libmodplug faad2 flac wavpack libmpeg2 libbluray SDL SDL_mixer SDL_image sqlite mysql samba alsa bc" -PKG_BUILD_DEPENDS="toolchain boost Python zlib bzip2 lzo pcre alsa-lib libass enca curl libssh rtmpdump dbus libXt libXtst libXmu libXrandr $MESA glew fontconfig fribidi $LIBJPEG libpng tiff freetype jasper libmad libsamplerate libogg libvorbis libcdio libmms libmodplug faad2 flac wavpack libmpeg2 libbluray SDL SDL_mixer SDL_image sqlite mysql samba" +PKG_DEPENDS="boost Python zlib bzip2 lzo pcre alsa-lib libass enca curl libssh rtmpdump dbus libXt libXtst libXmu libXrandr Mesa glew fontconfig fribidi $LIBJPEG libpng tiff freetype jasper libmad libsamplerate libogg libvorbis libcdio libmms libmodplug faad2 flac wavpack libmpeg2 libbluray SDL SDL_mixer SDL_image sqlite mysql samba alsa bc" +PKG_BUILD_DEPENDS="toolchain boost Python zlib bzip2 lzo pcre alsa-lib libass enca curl libssh rtmpdump dbus libXt libXtst libXmu libXrandr Mesa glew fontconfig fribidi $LIBJPEG libpng tiff freetype jasper libmad libsamplerate libogg libvorbis libcdio libmms libmodplug faad2 flac wavpack libmpeg2 libbluray SDL SDL_mixer SDL_image sqlite mysql samba" PKG_PRIORITY="optional" PKG_SECTION="mediacenter" PKG_SHORTDESC="xbmc: XBMC Mediacenter" diff --git a/packages/mediacenter/xbmc/meta b/packages/mediacenter/xbmc/meta index 2dd6b6b4ea..68438ad440 100644 --- a/packages/mediacenter/xbmc/meta +++ b/packages/mediacenter/xbmc/meta @@ -5,8 +5,8 @@ PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://www.xbmc.org" PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" -PKG_DEPENDS="boost Python zlib bzip2 lzo pcre alsa-lib libass enca curl libssh rtmpdump dbus libXt libXtst libXmu libXrandr $MESA glew fontconfig fribidi $LIBJPEG libpng tiff freetype jasper libmad libsamplerate libogg libvorbis libcdio libmms libmodplug faad2 flac wavpack libmpeg2 libbluray SDL SDL_mixer SDL_image sqlite mysql samba alsa bc" -PKG_BUILD_DEPENDS="toolchain boost Python zlib bzip2 lzo pcre alsa-lib libass enca curl libssh rtmpdump dbus libXt libXtst libXmu libXrandr $MESA glew fontconfig fribidi $LIBJPEG libpng tiff freetype jasper libmad libsamplerate libogg libvorbis libcdio libmms libmodplug faad2 flac wavpack libmpeg2 libbluray SDL SDL_mixer SDL_image sqlite mysql samba" +PKG_DEPENDS="boost Python zlib bzip2 lzo pcre alsa-lib libass enca curl libssh rtmpdump dbus libXt libXtst libXmu libXrandr Mesa glew fontconfig fribidi $LIBJPEG libpng tiff freetype jasper libmad libsamplerate libogg libvorbis libcdio libmms libmodplug faad2 flac wavpack libmpeg2 libbluray SDL SDL_mixer SDL_image sqlite mysql samba alsa bc" +PKG_BUILD_DEPENDS="toolchain boost Python zlib bzip2 lzo pcre alsa-lib libass enca curl libssh rtmpdump dbus libXt libXtst libXmu libXrandr Mesa glew fontconfig fribidi $LIBJPEG libpng tiff freetype jasper libmad libsamplerate libogg libvorbis libcdio libmms libmodplug faad2 flac wavpack libmpeg2 libbluray SDL SDL_mixer SDL_image sqlite mysql samba" PKG_PRIORITY="optional" PKG_SECTION="mediacenter" PKG_SHORTDESC="xbmc: XBMC Mediacenter" diff --git a/packages/multimedia/SDL/meta b/packages/multimedia/SDL/meta index 8fd26f3018..a70c82005e 100644 --- a/packages/multimedia/SDL/meta +++ b/packages/multimedia/SDL/meta @@ -5,8 +5,8 @@ PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://www.libsdl.org/" PKG_URL="http://www.libsdl.org/release/$PKG_NAME-$PKG_VERSION.tar.gz" -PKG_DEPENDS="alsa-lib libX11 libXrandr $MESA" -PKG_BUILD_DEPENDS="toolchain alsa-lib libX11 libXrandr $MESA" +PKG_DEPENDS="alsa-lib libX11 libXrandr Mesa" +PKG_BUILD_DEPENDS="toolchain alsa-lib libX11 libXrandr Mesa" PKG_PRIORITY="optional" PKG_SECTION="multimedia" PKG_SHORTDESC="libsdl: A cross-platform Graphic API" diff --git a/packages/multimedia/SDL_ttf/build b/packages/multimedia/SDL_ttf/build index 946b9e9162..69ec9db794 100755 --- a/packages/multimedia/SDL_ttf/build +++ b/packages/multimedia/SDL_ttf/build @@ -7,7 +7,7 @@ $SCRIPTS/build SDL $SCRIPTS/build libICE $SCRIPTS/build libX11 $SCRIPTS/build freetype -$SCRIPTS/build $MESA +$SCRIPTS/build Mesa cd $PKG_BUILD ./configure --host=$TARGET_NAME \ diff --git a/packages/multimedia/SDL_ttf/install b/packages/multimedia/SDL_ttf/install index 981955a40c..67e598571a 100755 --- a/packages/multimedia/SDL_ttf/install +++ b/packages/multimedia/SDL_ttf/install @@ -6,7 +6,7 @@ $SCRIPTS/install SDL $SCRIPTS/install libICE $SCRIPTS/install libX11 $SCRIPTS/install freetype -$SCRIPTS/install $MESA +$SCRIPTS/install Mesa mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/multimedia/libva/build b/packages/multimedia/libva/build index 6dc16a9039..e889e0b3b1 100755 --- a/packages/multimedia/libva/build +++ b/packages/multimedia/libva/build @@ -7,7 +7,7 @@ $SCRIPTS/build libX11 $SCRIPTS/build libXext $SCRIPTS/build libXfixes $SCRIPTS/build libdrm -$SCRIPTS/build $MESA +$SCRIPTS/build Mesa cd $PKG_BUILD diff --git a/packages/multimedia/libva/install b/packages/multimedia/libva/install index e42dd8729d..e82f25bb9b 100755 --- a/packages/multimedia/libva/install +++ b/packages/multimedia/libva/install @@ -6,7 +6,7 @@ $SCRIPTS/install libX11 $SCRIPTS/install libXext $SCRIPTS/install libXfixes $SCRIPTS/install libdrm -$SCRIPTS/install $MESA +$SCRIPTS/install Mesa mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/va/.libs/libva*.so* $INSTALL/usr/lib diff --git a/packages/sdk/games-sdk/install b/packages/sdk/games-sdk/install index 2c40deae7f..8d17d6d98e 100755 --- a/packages/sdk/games-sdk/install +++ b/packages/sdk/games-sdk/install @@ -19,4 +19,4 @@ $SCRIPTS/install openal-soft $SCRIPTS/install libX11 $SCRIPTS/install pango $SCRIPTS/install fontconfig -$SCRIPTS/install $MESA +$SCRIPTS/install Mesa diff --git a/packages/x11/driver/xf86-video-nouveau/meta b/packages/x11/driver/xf86-video-nouveau/meta index f5f6f0c699..798c2d2a8f 100644 --- a/packages/x11/driver/xf86-video-nouveau/meta +++ b/packages/x11/driver/xf86-video-nouveau/meta @@ -5,8 +5,8 @@ PKG_ARCH="i386 x86_64" PKG_LICENSE="OSS" PKG_SITE="http://www.x.org/" PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" -PKG_DEPENDS="libXrandr libXrender libdrm libXext libpciaccess udev $MESA" -PKG_BUILD_DEPENDS="toolchain libXrandr libXrender libdrm libXext libpciaccess udev $MESA xorg-server" +PKG_DEPENDS="libXrandr libXrender libdrm libXext libpciaccess udev Mesa" +PKG_BUILD_DEPENDS="toolchain libXrandr libXrender libdrm libXext libpciaccess udev Mesa xorg-server" PKG_PRIORITY="optional" PKG_SECTION="x11/driver" PKG_SHORTDESC="xf86-video-nouveau: Nouveau display driver (experimental)" diff --git a/packages/x11/xserver/xorg-server/build b/packages/x11/xserver/xorg-server/build index c578e56790..6f1655484f 100755 --- a/packages/x11/xserver/xorg-server/build +++ b/packages/x11/xserver/xorg-server/build @@ -25,7 +25,7 @@ $SCRIPTS/build libX11 $SCRIPTS/build libXfont $SCRIPTS/build libxkbfile $SCRIPTS/build libdrm -$SCRIPTS/build ${MESA}-GL +$SCRIPTS/build Mesa-GL $SCRIPTS/build openssl $SCRIPTS/build freetype $SCRIPTS/build pixman diff --git a/packages/x11/xserver/xorg-server/install b/packages/x11/xserver/xorg-server/install index 07a804cd20..d4b352685c 100755 --- a/packages/x11/xserver/xorg-server/install +++ b/packages/x11/xserver/xorg-server/install @@ -10,7 +10,7 @@ $SCRIPTS/install openssl $SCRIPTS/install libX11 $SCRIPTS/install libXfont $SCRIPTS/install libdrm -$SCRIPTS/install $MESA +$SCRIPTS/install Mesa $SCRIPTS/install pixman $SCRIPTS/install udev diff --git a/projects/ATV/options b/projects/ATV/options index d7904ccf8b..ee2a8b8708 100644 --- a/projects/ATV/options +++ b/projects/ATV/options @@ -131,8 +131,8 @@ # use libdrm-master (latest git) instead latest released version LIBDRM_MASTER="yes" -# Mesa to use (Mesa / mesa-master) - MESA="mesa-master" +# use Mesa-master (latest git) instead latest released version + MESA_MASTER="yes" # Use VDPAU video acceleration (needs nVidia driver and a supported card) VDPAU="no" diff --git a/projects/ION/options b/projects/ION/options index 56b6476258..209efb238d 100644 --- a/projects/ION/options +++ b/projects/ION/options @@ -131,8 +131,8 @@ # use libdrm-master (latest git) instead latest released version LIBDRM_MASTER="no" -# Mesa to use (Mesa / mesa-master) - MESA="Mesa" +# use Mesa-master (latest git) instead latest released version + MESA_MASTER="no" # Use VDPAU video acceleration (needs nVidia driver and a supported card) VDPAU="yes" diff --git a/projects/generic/options b/projects/generic/options index 67f3786b36..fe71dad5e9 100644 --- a/projects/generic/options +++ b/projects/generic/options @@ -131,8 +131,8 @@ # use libdrm-master (latest git) instead latest released version LIBDRM_MASTER="no" -# Mesa to use (Mesa / mesa-master) - MESA="Mesa" +# use Mesa-master (latest git) instead latest released version + MESA_MASTER="no" # Use VDPAU video acceleration (needs nVidia driver and a supported card) VDPAU="yes" diff --git a/projects/intel/options b/projects/intel/options index 2313bc5856..8758d44965 100644 --- a/projects/intel/options +++ b/projects/intel/options @@ -131,8 +131,8 @@ # use libdrm-master (latest git) instead latest released version LIBDRM_MASTER="no" -# Mesa to use (Mesa / mesa-master) - MESA="Mesa" +# use Mesa-master (latest git) instead latest released version + MESA_MASTER="no" # Use VDPAU video acceleration (needs nVidia driver and a supported card) VDPAU="no" From a4291957d050b2eba779a85215e1d3be2c9d72d7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 19:24:00 +0100 Subject: [PATCH 138/850] libnl: add metafile support, rename patches Signed-off-by: Stephan Raue --- packages/network/libnl/meta | 14 ++++++++++++++ ...iff => libnl-1.1-fix_missing_include-0.1.patch} | 0 packages/network/libnl/url | 1 - 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/network/libnl/meta rename packages/network/libnl/patches/{libnl-fix_missing_include-0.1.diff => libnl-1.1-fix_missing_include-0.1.patch} (100%) delete mode 100644 packages/network/libnl/url diff --git a/packages/network/libnl/meta b/packages/network/libnl/meta new file mode 100644 index 0000000000..6e3e6a08df --- /dev/null +++ b/packages/network/libnl/meta @@ -0,0 +1,14 @@ +PKG_NAME="libnl" +PKG_VERSION="1.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="LGPL" +PKG_SITE="http://people.suug.ch/~tgr/libnl/" +PKG_URL="https://launchpad.net/ubuntu/hardy/+source/libnl/1.1-1/+files/${PKG_NAME}_${PKG_VERSION}.orig.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="network" +PKG_SHORTDESC="libnl: libnl - netlink library" +PKG_LONGDESC="libnl is a library for applications dealing with netlink socket. It provides an easy to use interface for raw netlink message but also netlink family specific APIs." +PKG_IS_ADDON="no" diff --git a/packages/network/libnl/patches/libnl-fix_missing_include-0.1.diff b/packages/network/libnl/patches/libnl-1.1-fix_missing_include-0.1.patch similarity index 100% rename from packages/network/libnl/patches/libnl-fix_missing_include-0.1.diff rename to packages/network/libnl/patches/libnl-1.1-fix_missing_include-0.1.patch diff --git a/packages/network/libnl/url b/packages/network/libnl/url deleted file mode 100644 index c0e4300eab..0000000000 --- a/packages/network/libnl/url +++ /dev/null @@ -1 +0,0 @@ -https://launchpad.net/ubuntu/hardy/+source/libnl/1.1-1/+files/libnl_1.1.orig.tar.gz \ No newline at end of file From 632506b2b21dcdf481252f1c64ddb1ac347a19fe Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 19:24:29 +0100 Subject: [PATCH 139/850] htop: add metafile support, rename patches Signed-off-by: Stephan Raue --- packages/debug/htop/build | 3 --- packages/debug/htop/install | 2 -- packages/debug/htop/meta | 14 ++++++++++++++ ....1.diff => htop-0.8.3-crosscompiling-0.1.patch} | 0 packages/debug/htop/url | 1 - 5 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 packages/debug/htop/meta rename packages/debug/htop/patches/{htop-0.8.3-crosscompiling-0.1.diff => htop-0.8.3-crosscompiling-0.1.patch} (100%) delete mode 100644 packages/debug/htop/url diff --git a/packages/debug/htop/build b/packages/debug/htop/build index 1e9695f1f4..566f14ab9c 100755 --- a/packages/debug/htop/build +++ b/packages/debug/htop/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build ncurses - cd $PKG_BUILD $AUTORECONF diff --git a/packages/debug/htop/install b/packages/debug/htop/install index c14942e5b1..e5b669e494 100755 --- a/packages/debug/htop/install +++ b/packages/debug/htop/install @@ -2,7 +2,5 @@ . config/options $1 -$SCRIPTS/install ncurses - mkdir -p $INSTALL/usr/bin cp $PKG_BUILD/htop $INSTALL/usr/bin diff --git a/packages/debug/htop/meta b/packages/debug/htop/meta new file mode 100644 index 0000000000..8ef3c5927a --- /dev/null +++ b/packages/debug/htop/meta @@ -0,0 +1,14 @@ +PKG_NAME="htop" +PKG_VERSION="0.8.3" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://htop.sourceforge.net/" +PKG_URL="http://downloads.sourceforge.net/project/$PKG_NAME/$PKG_NAME/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="ncurses" +PKG_BUILD_DEPENDS="toolchain ncurses" +PKG_PRIORITY="optional" +PKG_SECTION="debug" +PKG_SHORTDESC="htop: Htop is an ncurses based interactive process viewer for Linux." +PKG_LONGDESC="Htop is an ncurses based interactive process viewer for Linux." +PKG_IS_ADDON="no" diff --git a/packages/debug/htop/patches/htop-0.8.3-crosscompiling-0.1.diff b/packages/debug/htop/patches/htop-0.8.3-crosscompiling-0.1.patch similarity index 100% rename from packages/debug/htop/patches/htop-0.8.3-crosscompiling-0.1.diff rename to packages/debug/htop/patches/htop-0.8.3-crosscompiling-0.1.patch diff --git a/packages/debug/htop/url b/packages/debug/htop/url deleted file mode 100644 index ac759e4688..0000000000 --- a/packages/debug/htop/url +++ /dev/null @@ -1 +0,0 @@ -http://downloads.sourceforge.net/project/htop/htop/0.8.3/htop-0.8.3.tar.gz \ No newline at end of file From c7d72008bf8f59921aa981929789c68ae762331b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 19:37:40 +0100 Subject: [PATCH 140/850] samba: rename patches Signed-off-by: Stephan Raue --- ...osscompile-0.1.diff => samba-3.5.6-010_crosscompile-0.1.patch} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/network/samba/patches/{010_samba-3.5.3-crosscompile-0.1.diff => samba-3.5.6-010_crosscompile-0.1.patch} (100%) diff --git a/packages/network/samba/patches/010_samba-3.5.3-crosscompile-0.1.diff b/packages/network/samba/patches/samba-3.5.6-010_crosscompile-0.1.patch similarity index 100% rename from packages/network/samba/patches/010_samba-3.5.3-crosscompile-0.1.diff rename to packages/network/samba/patches/samba-3.5.6-010_crosscompile-0.1.patch From 97f1a547dd4b32c5cf708e864c05b05e5896f122 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 19:45:29 +0100 Subject: [PATCH 141/850] bluez: add meta file support Signed-off-by: Stephan Raue --- packages/network/bluez/build | 12 +----------- packages/network/bluez/install | 5 ----- packages/network/bluez/meta | 17 +++++++++++++++++ ...ote_4.76.diff => bluez-4.79-ps3remote.patch} | 0 packages/network/bluez/url | 1 - 5 files changed, 18 insertions(+), 17 deletions(-) create mode 100644 packages/network/bluez/meta rename packages/network/bluez/patches/{bluez_ps3remote_4.76.diff => bluez-4.79-ps3remote.patch} (100%) delete mode 100644 packages/network/bluez/url diff --git a/packages/network/bluez/build b/packages/network/bluez/build index 5a15aff51f..d0f9b4b454 100755 --- a/packages/network/bluez/build +++ b/packages/network/bluez/build @@ -2,15 +2,6 @@ . config/options -$SCRIPTS/build toolchain -$SCRIPTS/build alsa-lib -$SCRIPTS/build libusb-compat -$SCRIPTS/build dbus -$SCRIPTS/build glib -#$SCRIPTS/build gettext - -cd $PKG_BUILD - if [ $DEBUG = yes ]; then DEBUG_CONFIG="--enable-debug" else @@ -22,6 +13,7 @@ else DEVTOOLS_CONFIG="--disable-bccmd --disable-test --disable-tools" fi +cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ @@ -41,7 +33,6 @@ fi --enable-input \ --disable-audio \ --enable-service \ - --disable-mcap \ --disable-pnat \ --disable-attrib \ --disable-gstreamer \ @@ -59,7 +50,6 @@ fi --disable-maemo6 \ --disable-hal \ --disable-capng \ - --disable-netlink \ --with-gnu-ld \ $DEBUG_CONFIG \ $DEVTOOLS_CONFIG diff --git a/packages/network/bluez/install b/packages/network/bluez/install index 7ad6d18a69..eb751ed838 100755 --- a/packages/network/bluez/install +++ b/packages/network/bluez/install @@ -2,11 +2,6 @@ . config/options -$SCRIPTS/install libusb-compat -$SCRIPTS/install dbus -$SCRIPTS/install glib -$SCRIPTS/install alsa-lib - PKG_DIR=`find $PACKAGES -type d -name $1` mkdir -p $INSTALL/etc/bluetooth diff --git a/packages/network/bluez/meta b/packages/network/bluez/meta new file mode 100644 index 0000000000..2642ac2fc8 --- /dev/null +++ b/packages/network/bluez/meta @@ -0,0 +1,17 @@ +PKG_NAME="bluez" +PKG_VERSION="4.79" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.bluez.org/" +PKG_URL="http://www.kernel.org/pub/linux/bluetooth/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="alsa-lib libusb-compat dbus glib" +PKG_BUILD_DEPENDS="toolchain alsa-lib libusb-compat dbus glib" +PKG_PRIORITY="optional" +PKG_SECTION="network" +PKG_SHORTDESC="bluez: Bluetooth Tools and System Daemons for Linux." +PKG_LONGDESC="Bluetooth Tools and System Daemons for Linux." +PKG_IS_ADDON="no" + + + diff --git a/packages/network/bluez/patches/bluez_ps3remote_4.76.diff b/packages/network/bluez/patches/bluez-4.79-ps3remote.patch similarity index 100% rename from packages/network/bluez/patches/bluez_ps3remote_4.76.diff rename to packages/network/bluez/patches/bluez-4.79-ps3remote.patch diff --git a/packages/network/bluez/url b/packages/network/bluez/url deleted file mode 100644 index ad03d658ed..0000000000 --- a/packages/network/bluez/url +++ /dev/null @@ -1 +0,0 @@ -http://www.kernel.org/pub/linux/bluetooth/bluez-4.79.tar.bz2 \ No newline at end of file From 997dd43f869271166b370d7ccfd63b4521d6f85b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 19:46:20 +0100 Subject: [PATCH 142/850] scripts/unpack: versioning patch support Signed-off-by: Stephan Raue --- scripts/unpack | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/unpack b/scripts/unpack index 59f15d193f..11c7e3ecfb 100755 --- a/scripts/unpack +++ b/scripts/unpack @@ -48,11 +48,11 @@ fi [ -f $PKG_DIR/after_unpack ] && $PKG_DIR/after_unpack $@ >&$VERBOSE_OUT -for i in $PKG_DIR/patches/*.diff*; do +for i in $PKG_DIR/patches/*.diff $PKG_DIR/patches/$PKG_NAME-$PKG_VERSION*.patch ; do if [ -f $i ]; then PATCH=`basename $i` PT=`echo $PATCH | sed 's/.*\.\(.*\)$/\1/'` - if [ "$PT" != diff -a "$PT" != "$TARGET_ARCH" -a "$PT" != "$TARGET_PLATFORM" ]; then + if [ "$PT" != patch -a "$PT" != diff -a "$PT" != "$TARGET_ARCH" -a "$PT" != "$TARGET_PLATFORM" ]; then echo "## Skipping patch: $i" continue; else From 516021ef526139d6da89d666ba5264a7fdd1304a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 19:55:26 +0100 Subject: [PATCH 143/850] wpa_supplicant: add meta file support, cleanup Signed-off-by: Stephan Raue --- packages/network/wpa_supplicant/build | 8 ++++---- packages/network/wpa_supplicant/install | 3 --- packages/network/wpa_supplicant/meta | 14 ++++++++++++++ ...=> wpa_supplicant-0.7.3-bcm_custom_event.patch} | 0 packages/network/wpa_supplicant/unpack | 13 ------------- packages/network/wpa_supplicant/url | 1 - 6 files changed, 18 insertions(+), 21 deletions(-) create mode 100644 packages/network/wpa_supplicant/meta rename packages/network/wpa_supplicant/patches/{bcm-custom_event-0.7.2.diff => wpa_supplicant-0.7.3-bcm_custom_event.patch} (100%) delete mode 100755 packages/network/wpa_supplicant/unpack delete mode 100644 packages/network/wpa_supplicant/url diff --git a/packages/network/wpa_supplicant/build b/packages/network/wpa_supplicant/build index f7e57f61ca..30baa014f3 100755 --- a/packages/network/wpa_supplicant/build +++ b/packages/network/wpa_supplicant/build @@ -2,9 +2,9 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build dbus -$SCRIPTS/build libnl +cd $PKG_BUILD/$1 + +cp $ROOT/$PKG_DIR/config/makefile.config .config +[ $DEBUG = no ] && echo "CONFIG_NO_STDOUT_DEBUG=y" >> .config -cd $PKG_BUILD/wpa_supplicant make diff --git a/packages/network/wpa_supplicant/install b/packages/network/wpa_supplicant/install index 9ac0944faf..b14034672f 100755 --- a/packages/network/wpa_supplicant/install +++ b/packages/network/wpa_supplicant/install @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/install dbus -$SCRIPTS/install libnl - mkdir -p $INSTALL/etc/dbus-1/system.d cp $PKG_BUILD/wpa_supplicant/dbus/dbus-wpa_supplicant.conf $INSTALL/etc/dbus-1/system.d diff --git a/packages/network/wpa_supplicant/meta b/packages/network/wpa_supplicant/meta new file mode 100644 index 0000000000..8e0ca3a17b --- /dev/null +++ b/packages/network/wpa_supplicant/meta @@ -0,0 +1,14 @@ +PKG_NAME="wpa_supplicant" +PKG_VERSION="0.7.3" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://hostap.epitest.fi/wpa_supplicant/" +PKG_URL="http://hostap.epitest.fi/releases/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="dbus libnl" +PKG_BUILD_DEPENDS="toolchain dbus libnl" +PKG_PRIORITY="optional" +PKG_SECTION="network" +PKG_SHORTDESC="wpa_supplicant: An IEEE 802.11i supplicant implementation" +PKG_LONGDESC="The wpa_supplicant is a free software implementation of an IEEE 802.11i supplicant. In addition to being a full-featured WPA2 supplicant, it also has support for WPA and older wireless LAN security protocols." +PKG_IS_ADDON="no" diff --git a/packages/network/wpa_supplicant/patches/bcm-custom_event-0.7.2.diff b/packages/network/wpa_supplicant/patches/wpa_supplicant-0.7.3-bcm_custom_event.patch similarity index 100% rename from packages/network/wpa_supplicant/patches/bcm-custom_event-0.7.2.diff rename to packages/network/wpa_supplicant/patches/wpa_supplicant-0.7.3-bcm_custom_event.patch diff --git a/packages/network/wpa_supplicant/unpack b/packages/network/wpa_supplicant/unpack deleted file mode 100755 index 27438d7b98..0000000000 --- a/packages/network/wpa_supplicant/unpack +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -. config/options $1 - -$SCRIPTS/build toolchain - -WPA_SUPPLICANT=`ls -d $PKG_BUILD`/wpa_supplicant - -cp $PKG_DIR/config/makefile.config $WPA_SUPPLICANT/.config - -if [ $DEBUG = no ]; then - echo "CONFIG_NO_STDOUT_DEBUG=y" >> $WPA_SUPPLICANT/.config -fi diff --git a/packages/network/wpa_supplicant/url b/packages/network/wpa_supplicant/url deleted file mode 100644 index 2e1807ae92..0000000000 --- a/packages/network/wpa_supplicant/url +++ /dev/null @@ -1 +0,0 @@ -http://hostap.epitest.fi/releases/wpa_supplicant-0.7.3.tar.gz From 287812cb14c7470eeafad134bc1cfdae6491e1e9 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 20:10:21 +0100 Subject: [PATCH 144/850] linux: rename patches Signed-off-by: Stephan Raue --- ...{000_crosscompile.diff => linux-2.6.36-000_crosscompile.patch} | 0 ...only-feature.diff => linux-2.6.36-002_bash_only_feature.patch} | 0 ...-no_dev_console.diff => linux-2.6.36-003-no_dev_console.patch} | 0 ...t.diff => linux-2.6.36-004_lower_undefined_mode_timeout.patch} | 0 ...timestamp.diff => linux-2.6.36-005_kconfig_no_timestamp.patch} | 0 .../{006-enable-utf8.diff => linux-2.6.36-006_enable_utf8.patch} | 0 ...-die-floppy-die.diff => linux-2.6.36-007_die_floppy_die.patch} | 0 ...ff => linux-2.6.36-008-hda_intel_prealloc_4mb_dmabuffer.patch} | 0 ...ff => linux-2.6.36-009_disable_i8042_check_on_apple_mac.patch} | 0 ...-driver.diff => linux-2.6.36-050_add_appleir_usb_driver.patch} | 0 ...on_cir-0.2.diff => linux-2.6.36-051-add_nuvoton_cir-0.2.patch} | 0 ...rk-0.1.diff => linux-2.6.36-052-aureal_remote_quirk-0.1.patch} | 0 ....diff => linux-2.6.36-110-drm_nouveau_upstream-20101104.patch} | 0 ..._vmware_revert_abb295f3b3db602f91accf58b526b30b48673af1.patch} | 0 14 files changed, 0 insertions(+), 0 deletions(-) rename packages/linux/patches/{000_crosscompile.diff => linux-2.6.36-000_crosscompile.patch} (100%) rename packages/linux/patches/{002-bash-only-feature.diff => linux-2.6.36-002_bash_only_feature.patch} (100%) rename packages/linux/patches/{003-no_dev_console.diff => linux-2.6.36-003-no_dev_console.patch} (100%) rename packages/linux/patches/{004-lower-undefined-mode-timeout.diff => linux-2.6.36-004_lower_undefined_mode_timeout.patch} (100%) rename packages/linux/patches/{005-kconfig-no-timestamp.diff => linux-2.6.36-005_kconfig_no_timestamp.patch} (100%) rename packages/linux/patches/{006-enable-utf8.diff => linux-2.6.36-006_enable_utf8.patch} (100%) rename packages/linux/patches/{007-die-floppy-die.diff => linux-2.6.36-007_die_floppy_die.patch} (100%) rename packages/linux/patches/{008-hda_intel-prealloc-4mb-dmabuffer.diff => linux-2.6.36-008-hda_intel_prealloc_4mb_dmabuffer.patch} (100%) rename packages/linux/patches/{009-disable-i8042-check-on-apple-mac.diff => linux-2.6.36-009_disable_i8042_check_on_apple_mac.patch} (100%) rename packages/linux/patches/{050-add-appleir-usb-driver.diff => linux-2.6.36-050_add_appleir_usb_driver.patch} (100%) rename packages/linux/patches/{051-linux-2.6.36-add_nuvoton_cir-0.2.diff => linux-2.6.36-051-add_nuvoton_cir-0.2.patch} (100%) rename packages/linux/patches/{052-linux-2.6.36-aureal_remote_quirk-0.1.diff => linux-2.6.36-052-aureal_remote_quirk-0.1.patch} (100%) rename packages/linux/patches/{110-linux-2.6.36-drm_nouveau_upstream-20101104.diff => linux-2.6.36-110-drm_nouveau_upstream-20101104.patch} (100%) rename packages/linux/patches/{201-linux-2.6.36-drm_vmware_revert_abb295f3b3db602f91accf58b526b30b48673af1.diff => linux-2.6.36-201-drm_vmware_revert_abb295f3b3db602f91accf58b526b30b48673af1.patch} (100%) diff --git a/packages/linux/patches/000_crosscompile.diff b/packages/linux/patches/linux-2.6.36-000_crosscompile.patch similarity index 100% rename from packages/linux/patches/000_crosscompile.diff rename to packages/linux/patches/linux-2.6.36-000_crosscompile.patch diff --git a/packages/linux/patches/002-bash-only-feature.diff b/packages/linux/patches/linux-2.6.36-002_bash_only_feature.patch similarity index 100% rename from packages/linux/patches/002-bash-only-feature.diff rename to packages/linux/patches/linux-2.6.36-002_bash_only_feature.patch diff --git a/packages/linux/patches/003-no_dev_console.diff b/packages/linux/patches/linux-2.6.36-003-no_dev_console.patch similarity index 100% rename from packages/linux/patches/003-no_dev_console.diff rename to packages/linux/patches/linux-2.6.36-003-no_dev_console.patch diff --git a/packages/linux/patches/004-lower-undefined-mode-timeout.diff b/packages/linux/patches/linux-2.6.36-004_lower_undefined_mode_timeout.patch similarity index 100% rename from packages/linux/patches/004-lower-undefined-mode-timeout.diff rename to packages/linux/patches/linux-2.6.36-004_lower_undefined_mode_timeout.patch diff --git a/packages/linux/patches/005-kconfig-no-timestamp.diff b/packages/linux/patches/linux-2.6.36-005_kconfig_no_timestamp.patch similarity index 100% rename from packages/linux/patches/005-kconfig-no-timestamp.diff rename to packages/linux/patches/linux-2.6.36-005_kconfig_no_timestamp.patch diff --git a/packages/linux/patches/006-enable-utf8.diff b/packages/linux/patches/linux-2.6.36-006_enable_utf8.patch similarity index 100% rename from packages/linux/patches/006-enable-utf8.diff rename to packages/linux/patches/linux-2.6.36-006_enable_utf8.patch diff --git a/packages/linux/patches/007-die-floppy-die.diff b/packages/linux/patches/linux-2.6.36-007_die_floppy_die.patch similarity index 100% rename from packages/linux/patches/007-die-floppy-die.diff rename to packages/linux/patches/linux-2.6.36-007_die_floppy_die.patch diff --git a/packages/linux/patches/008-hda_intel-prealloc-4mb-dmabuffer.diff b/packages/linux/patches/linux-2.6.36-008-hda_intel_prealloc_4mb_dmabuffer.patch similarity index 100% rename from packages/linux/patches/008-hda_intel-prealloc-4mb-dmabuffer.diff rename to packages/linux/patches/linux-2.6.36-008-hda_intel_prealloc_4mb_dmabuffer.patch diff --git a/packages/linux/patches/009-disable-i8042-check-on-apple-mac.diff b/packages/linux/patches/linux-2.6.36-009_disable_i8042_check_on_apple_mac.patch similarity index 100% rename from packages/linux/patches/009-disable-i8042-check-on-apple-mac.diff rename to packages/linux/patches/linux-2.6.36-009_disable_i8042_check_on_apple_mac.patch diff --git a/packages/linux/patches/050-add-appleir-usb-driver.diff b/packages/linux/patches/linux-2.6.36-050_add_appleir_usb_driver.patch similarity index 100% rename from packages/linux/patches/050-add-appleir-usb-driver.diff rename to packages/linux/patches/linux-2.6.36-050_add_appleir_usb_driver.patch diff --git a/packages/linux/patches/051-linux-2.6.36-add_nuvoton_cir-0.2.diff b/packages/linux/patches/linux-2.6.36-051-add_nuvoton_cir-0.2.patch similarity index 100% rename from packages/linux/patches/051-linux-2.6.36-add_nuvoton_cir-0.2.diff rename to packages/linux/patches/linux-2.6.36-051-add_nuvoton_cir-0.2.patch diff --git a/packages/linux/patches/052-linux-2.6.36-aureal_remote_quirk-0.1.diff b/packages/linux/patches/linux-2.6.36-052-aureal_remote_quirk-0.1.patch similarity index 100% rename from packages/linux/patches/052-linux-2.6.36-aureal_remote_quirk-0.1.diff rename to packages/linux/patches/linux-2.6.36-052-aureal_remote_quirk-0.1.patch diff --git a/packages/linux/patches/110-linux-2.6.36-drm_nouveau_upstream-20101104.diff b/packages/linux/patches/linux-2.6.36-110-drm_nouveau_upstream-20101104.patch similarity index 100% rename from packages/linux/patches/110-linux-2.6.36-drm_nouveau_upstream-20101104.diff rename to packages/linux/patches/linux-2.6.36-110-drm_nouveau_upstream-20101104.patch diff --git a/packages/linux/patches/201-linux-2.6.36-drm_vmware_revert_abb295f3b3db602f91accf58b526b30b48673af1.diff b/packages/linux/patches/linux-2.6.36-201-drm_vmware_revert_abb295f3b3db602f91accf58b526b30b48673af1.patch similarity index 100% rename from packages/linux/patches/201-linux-2.6.36-drm_vmware_revert_abb295f3b3db602f91accf58b526b30b48673af1.diff rename to packages/linux/patches/linux-2.6.36-201-drm_vmware_revert_abb295f3b3db602f91accf58b526b30b48673af1.patch From 4c96aecda6044fd5abf093a29896103c333a9726 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 23:14:20 +0100 Subject: [PATCH 145/850] linux: add multiversion support, add linux-2.6.37-rc1 as an second version Signed-off-by: Stephan Raue --- packages/linux/meta | 5 + .../linux-2.6.37-rc1-000_crosscompile.patch | 22 + ...nux-2.6.37-rc1-002_bash_only_feature.patch | 15 + .../linux-2.6.37-rc1-003-no_dev_console.patch | 20 + ...rc1-004_lower_undefined_mode_timeout.patch | 24 + ...-2.6.37-rc1-005_kconfig_no_timestamp.patch | 13 + .../linux-2.6.37-rc1-006_enable_utf8.patch | 25 + .../linux-2.6.37-rc1-007_die_floppy_die.patch | 30 + ...008-hda_intel_prealloc_4mb_dmabuffer.patch | 47 + ...009_disable_i8042_check_on_apple_mac.patch | 59 + ....6.37-rc1-050_add_appleir_usb_driver.patch | 702 + ...6.37-rc1-052-aureal_remote_quirk-0.1.patch | 113 + ...c1-110-drm_nouveau_upstream-20101111.patch | 11929 ++++++++++++++++ projects/ATV/options | 3 + projects/ION/options | 3 + projects/generic/options | 5 +- projects/intel/options | 3 + 17 files changed, 13017 insertions(+), 1 deletion(-) create mode 100644 packages/linux/patches/linux-2.6.37-rc1-000_crosscompile.patch create mode 100644 packages/linux/patches/linux-2.6.37-rc1-002_bash_only_feature.patch create mode 100644 packages/linux/patches/linux-2.6.37-rc1-003-no_dev_console.patch create mode 100644 packages/linux/patches/linux-2.6.37-rc1-004_lower_undefined_mode_timeout.patch create mode 100644 packages/linux/patches/linux-2.6.37-rc1-005_kconfig_no_timestamp.patch create mode 100644 packages/linux/patches/linux-2.6.37-rc1-006_enable_utf8.patch create mode 100644 packages/linux/patches/linux-2.6.37-rc1-007_die_floppy_die.patch create mode 100644 packages/linux/patches/linux-2.6.37-rc1-008-hda_intel_prealloc_4mb_dmabuffer.patch create mode 100644 packages/linux/patches/linux-2.6.37-rc1-009_disable_i8042_check_on_apple_mac.patch create mode 100644 packages/linux/patches/linux-2.6.37-rc1-050_add_appleir_usb_driver.patch create mode 100644 packages/linux/patches/linux-2.6.37-rc1-052-aureal_remote_quirk-0.1.patch create mode 100644 packages/linux/patches/linux-2.6.37-rc1-110-drm_nouveau_upstream-20101111.patch diff --git a/packages/linux/meta b/packages/linux/meta index 1f1a43e872..22e58e429f 100644 --- a/packages/linux/meta +++ b/packages/linux/meta @@ -12,3 +12,8 @@ PKG_SECTION="linux" PKG_SHORTDESC="linux26: The Linux kernel 2.6 precompiled kernel binary image and modules" PKG_LONGDESC="This package contains a precompiled kernel image and the modules." PKG_IS_ADDON="no" + +if [ "$LINUX_NEXT" = "yes" ]; then + PKG_VERSION="2.6.37-rc1" + PKG_URL="http://www.kernel.org/pub/linux/kernel/v2.6/testing/$PKG_NAME-$PKG_VERSION.tar.bz2" +fi diff --git a/packages/linux/patches/linux-2.6.37-rc1-000_crosscompile.patch b/packages/linux/patches/linux-2.6.37-rc1-000_crosscompile.patch new file mode 100644 index 0000000000..b4fc575828 --- /dev/null +++ b/packages/linux/patches/linux-2.6.37-rc1-000_crosscompile.patch @@ -0,0 +1,22 @@ +--- linux-2.6.24-rc2.orig/arch/x86/boot/tools/build.c 2007-10-06 12:26:14.000000000 +0200 ++++ linux-2.6.24-rc2/arch/x86/boot/tools/build.c 2007-10-06 12:27:36.000000000 +0200 +@@ -29,7 +29,6 @@ + #include + #include + #include +-#include + #include + #include + #include +@@ -42,6 +41,11 @@ + #define DEFAULT_MAJOR_ROOT 0 + #define DEFAULT_MINOR_ROOT 0 + ++#undef major ++#define major(dev) ((int)(((dev) >> 8) & 0xff)) ++#undef minor ++#define minor(dev) ((int)((dev) & 0xff)) ++ + /* Minimal number of setup sectors */ + #define SETUP_SECT_MIN 5 + #define SETUP_SECT_MAX 64 diff --git a/packages/linux/patches/linux-2.6.37-rc1-002_bash_only_feature.patch b/packages/linux/patches/linux-2.6.37-rc1-002_bash_only_feature.patch new file mode 100644 index 0000000000..a1028d15aa --- /dev/null +++ b/packages/linux/patches/linux-2.6.37-rc1-002_bash_only_feature.patch @@ -0,0 +1,15 @@ +Index: linux-2.6.16/scripts/gen_initramfs_list.sh +=================================================================== +--- linux-2.6.16.orig/scripts/gen_initramfs_list.sh 2006-03-20 18:41:34.000000000 +0100 ++++ linux-2.6.16/scripts/gen_initramfs_list.sh 2006-03-20 18:42:40.000000000 +0100 +@@ -56,9 +56,7 @@ + + parse() { + local location="$1" +- local name="${location/${srcdir}//}" +- # change '//' into '/' +- name="${name//\/\///}" ++ local name="$(echo "$location" | sed -e 's%$srcdir%%' -e 's%//*%/%g')" + local mode="$2" + local uid="$3" + local gid="$4" diff --git a/packages/linux/patches/linux-2.6.37-rc1-003-no_dev_console.patch b/packages/linux/patches/linux-2.6.37-rc1-003-no_dev_console.patch new file mode 100644 index 0000000000..9b5e51437d --- /dev/null +++ b/packages/linux/patches/linux-2.6.37-rc1-003-no_dev_console.patch @@ -0,0 +1,20 @@ +diff -Naur linux-2.6.34-rc7/init/main.c linux-2.6.34-rc7.patch/init/main.c +--- linux-2.6.34-rc7/init/main.c 2010-05-10 03:36:28.000000000 +0200 ++++ linux-2.6.34-rc7.patch/init/main.c 2010-05-15 12:28:34.767241760 +0200 +@@ -886,8 +886,14 @@ + do_basic_setup(); + + /* Open the /dev/console on the rootfs, this should never fail */ +- if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0) +- printk(KERN_WARNING "Warning: unable to open an initial console.\n"); ++ char *console = "/dev_console"; ++ ++ if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0) { ++ sys_mknod(console, S_IFCHR|0600, (TTYAUX_MAJOR<<8)|1); ++ if (sys_open(console, O_RDWR, 0) < 0) ++ printk(KERN_WARNING "Warning: unable to open an initial console.\n"); ++ sys_unlink(console); ++ } + + (void) sys_dup(0); + (void) sys_dup(0); diff --git a/packages/linux/patches/linux-2.6.37-rc1-004_lower_undefined_mode_timeout.patch b/packages/linux/patches/linux-2.6.37-rc1-004_lower_undefined_mode_timeout.patch new file mode 100644 index 0000000000..a0aca61d23 --- /dev/null +++ b/packages/linux/patches/linux-2.6.37-rc1-004_lower_undefined_mode_timeout.patch @@ -0,0 +1,24 @@ +diff -Naur linux-2.6.23-rc9.orig/arch/i386/boot/tty.c linux-2.6.23-rc9/arch/i386/boot/tty.c +--- linux-2.6.23-rc9.orig/arch/x86/boot/tty.c 2007-10-06 12:26:14.000000000 +0200 ++++ linux-2.6.23-rc9/arch/x86/boot/tty.c 2007-10-06 12:37:47.000000000 +0200 +@@ -92,7 +92,7 @@ + + int getchar_timeout(void) + { +- int cnt = 30; ++ int cnt = 3; + int t0, t1; + + t0 = gettime(); +diff -Naur linux-2.6.23-rc9.orig/arch/i386/boot/video.c linux-2.6.23-rc9/arch/i386/boot/video.c +--- linux-2.6.23-rc9.orig/arch/x86/boot/video.c 2007-10-06 12:26:14.000000000 +0200 ++++ linux-2.6.23-rc9/arch/x86/boot/video.c 2007-10-06 12:36:05.000000000 +0200 +@@ -329,7 +329,7 @@ + unsigned int sel; + + puts("Press to see video modes available, " +- " to continue, or wait 30 sec\n"); ++ " to continue, or wait 3 sec\n"); + + kbd_flush(); + while (1) { diff --git a/packages/linux/patches/linux-2.6.37-rc1-005_kconfig_no_timestamp.patch b/packages/linux/patches/linux-2.6.37-rc1-005_kconfig_no_timestamp.patch new file mode 100644 index 0000000000..332e553831 --- /dev/null +++ b/packages/linux/patches/linux-2.6.37-rc1-005_kconfig_no_timestamp.patch @@ -0,0 +1,13 @@ +Index: linux-2.6.16/scripts/kconfig/confdata.c +=================================================================== +--- linux-2.6.16.orig/scripts/kconfig/confdata.c 2006-03-20 06:53:29.000000000 +0100 ++++ linux-2.6.16/scripts/kconfig/confdata.c 2006-03-20 18:47:06.000000000 +0100 +@@ -340,7 +340,7 @@ + int type, l; + const char *str; + time_t now; +- int use_timestamp = 1; ++ int use_timestamp = 0; + char *env; + + dirname[0] = 0; diff --git a/packages/linux/patches/linux-2.6.37-rc1-006_enable_utf8.patch b/packages/linux/patches/linux-2.6.37-rc1-006_enable_utf8.patch new file mode 100644 index 0000000000..bee1cf3da8 --- /dev/null +++ b/packages/linux/patches/linux-2.6.37-rc1-006_enable_utf8.patch @@ -0,0 +1,25 @@ +diff -Naur linux-2.6.31-rc4.orig/fs/fat/inode.c linux-2.6.31-rc4/fs/fat/inode.c +--- linux-2.6.31-rc4.orig/fs/fat/inode.c 2009-07-25 12:47:41.000000000 +0200 ++++ linux-2.6.31-rc4/fs/fat/inode.c 2009-07-25 13:38:18.000000000 +0200 +@@ -979,7 +979,8 @@ + } + opts->name_check = 'n'; + opts->quiet = opts->showexec = opts->sys_immutable = opts->dotsOK = 0; +- opts->utf8 = opts->unicode_xlate = 0; ++ opts->utf8 = 1; ++ opts->unicode_xlate = 0; + opts->numtail = 1; + opts->usefree = opts->nocase = 0; + opts->tz_utc = 0; +diff -Naur linux-2.6.31-rc4.orig/fs/isofs/inode.c linux-2.6.31-rc4/fs/isofs/inode.c +--- linux-2.6.31-rc4.orig/fs/isofs/inode.c 2009-07-25 12:47:41.000000000 +0200 ++++ linux-2.6.31-rc4/fs/isofs/inode.c 2009-07-25 13:38:49.000000000 +0200 +@@ -377,7 +377,7 @@ + popt->gid = 0; + popt->uid = 0; + popt->iocharset = NULL; +- popt->utf8 = 0; ++ popt->utf8 = 1; + popt->overriderockperm = 0; + popt->session=-1; + popt->sbsector=-1; diff --git a/packages/linux/patches/linux-2.6.37-rc1-007_die_floppy_die.patch b/packages/linux/patches/linux-2.6.37-rc1-007_die_floppy_die.patch new file mode 100644 index 0000000000..76db312182 --- /dev/null +++ b/packages/linux/patches/linux-2.6.37-rc1-007_die_floppy_die.patch @@ -0,0 +1,30 @@ +From 4ff58b642f80dedb20533978123d89b5ac9b1ed5 Mon Sep 17 00:00:00 2001 +From: Kyle McMartin +Date: Tue, 30 Mar 2010 00:04:29 -0400 +Subject: die-floppy-die + +Kill the floppy.ko pnp modalias. We were surviving just fine without +autoloading floppy drivers, tyvm. + +Please feel free to register all complaints in the wastepaper bin. +--- + drivers/block/floppy.c | 3 +-- + 1 files changed, 1 insertions(+), 2 deletions(-) + +diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c +index 90c4038..f4a0b90 100644 +--- a/drivers/block/floppy.c ++++ b/drivers/block/floppy.c +@@ -4619,8 +4619,7 @@ static const struct pnp_device_id floppy_pnpids[] = { + {"PNP0700", 0}, + {} + }; +- +-MODULE_DEVICE_TABLE(pnp, floppy_pnpids); ++/* MODULE_DEVICE_TABLE(pnp, floppy_pnpids); */ + + #else + +-- +1.7.0.1 + diff --git a/packages/linux/patches/linux-2.6.37-rc1-008-hda_intel_prealloc_4mb_dmabuffer.patch b/packages/linux/patches/linux-2.6.37-rc1-008-hda_intel_prealloc_4mb_dmabuffer.patch new file mode 100644 index 0000000000..36e6aca4fa --- /dev/null +++ b/packages/linux/patches/linux-2.6.37-rc1-008-hda_intel_prealloc_4mb_dmabuffer.patch @@ -0,0 +1,47 @@ +From c69fcbd1f60b0842f7c1ad2c95692ffd19c4932b Mon Sep 17 00:00:00 2001 +From: Kyle McMartin +Date: Mon, 29 Mar 2010 23:56:08 -0400 +Subject: hda_intel-prealloc-4mb-dmabuffer + +--- + sound/pci/hda/hda_intel.c | 14 +++++++++++++- + 1 files changed, 13 insertions(+), 1 deletions(-) + +diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c +index 4bb9067..37db515 100644 +--- a/sound/pci/hda/hda_intel.c ++++ b/sound/pci/hda/hda_intel.c +@@ -1986,6 +1986,7 @@ azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec, + struct azx_pcm *apcm; + int pcm_dev = cpcm->device; + int s, err; ++ size_t prealloc_min = 64*1024; /* 64KB */ + + if (pcm_dev >= HDA_MAX_PCMS) { + snd_printk(KERN_ERR SFX "Invalid PCM device number %d\n", +@@ -2019,10 +2020,21 @@ azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec, + if (cpcm->stream[s].substreams) + snd_pcm_set_ops(pcm, s, &azx_pcm_ops); + } ++ + /* buffer pre-allocation */ ++ ++ /* subtle, don't allocate a big buffer for modems... ++ * also, don't just test 32BIT_MASK, since azx supports ++ * 64-bit DMA in some cases. ++ */ ++ /* lennart wants a 2.2MB buffer for 2sec of 48khz */ ++ if (pcm->dev_class == SNDRV_PCM_CLASS_GENERIC && ++ chip->pci->dma_mask >= DMA_32BIT_MASK) ++ prealloc_min = 4 * 1024 * 1024; /* 4MB */ ++ + snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV_SG, + snd_dma_pci_data(chip->pci), +- 1024 * 64, 32 * 1024 * 1024); ++ prealloc_min, 32 * 1024 * 1024); + return 0; + } + +-- +1.7.0.1 + diff --git a/packages/linux/patches/linux-2.6.37-rc1-009_disable_i8042_check_on_apple_mac.patch b/packages/linux/patches/linux-2.6.37-rc1-009_disable_i8042_check_on_apple_mac.patch new file mode 100644 index 0000000000..f99d0f900c --- /dev/null +++ b/packages/linux/patches/linux-2.6.37-rc1-009_disable_i8042_check_on_apple_mac.patch @@ -0,0 +1,59 @@ +From 2a79554c864ac58fa2ad982f0fcee2cc2aa33eb5 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Thu, 20 May 2010 10:30:31 -0400 +Subject: Disable i8042 checks on Intel Apple Macs + +As those computers never had any i8042 controllers, and the +current lookup code could potentially lock up/hang/wait for +timeout for long periods of time. + +Fixes intermittent hangs on boot on a MacbookAir1,1 + +Signed-off-by: Bastien Nocera +--- + drivers/input/serio/i8042.c | 22 ++++++++++++++++++++++ + 1 files changed, 22 insertions(+), 0 deletions(-) + +diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c +index 6440a8f..4d7cf98 100644 +--- a/drivers/input/serio/i8042.c ++++ b/drivers/input/serio/i8042.c +@@ -1451,6 +1451,22 @@ static struct platform_driver i8042_driver = { + .shutdown = i8042_shutdown, + }; + ++#ifdef CONFIG_DMI ++static struct dmi_system_id __initdata dmi_system_table[] = { ++ { ++ .matches = { ++ DMI_MATCH(DMI_BIOS_VENDOR, "Apple Computer, Inc.") ++ }, ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_BIOS_VENDOR, "Apple Inc.") ++ }, ++ }, ++ {} ++}; ++#endif /*CONFIG_DMI*/ ++ + static int __init i8042_init(void) + { + struct platform_device *pdev; +@@ -1458,6 +1474,12 @@ static int __init i8042_init(void) + + dbg_init(); + ++#ifdef CONFIG_DMI ++ /* Intel Apple Macs never have an i8042 controller */ ++ if (dmi_check_system(dmi_system_table) > 0) ++ return -ENODEV; ++#endif /*CONFIG_DMI*/ ++ + err = i8042_platform_init(); + if (err) + return err; +-- +1.7.0.1 + diff --git a/packages/linux/patches/linux-2.6.37-rc1-050_add_appleir_usb_driver.patch b/packages/linux/patches/linux-2.6.37-rc1-050_add_appleir_usb_driver.patch new file mode 100644 index 0000000000..61edb8061e --- /dev/null +++ b/packages/linux/patches/linux-2.6.37-rc1-050_add_appleir_usb_driver.patch @@ -0,0 +1,702 @@ +From e11e9e78799a7641fe0dc5289f35f2604a4b71a3 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Sun, 17 Jan 2010 00:40:15 +0000 +Subject: [PATCH] Input: add appleir USB driver + +This driver was originally written by James McKenzie, updated by +Greg Kroah-Hartman, further updated by myself, with suspend support +added. + +More recent versions of the IR receiver are also supported through +a patch by Alex Karpenko. The patch also adds support for the 2nd +and 5th generation of the controller, and the menu key on newer +brushed metal remotes. + +Tested on a MacbookAir1,1 + +Signed-off-by: Bastien Nocera +--- + Documentation/input/appleir.txt | 46 ++++ + drivers/hid/hid-apple.c | 4 - + drivers/hid/hid-core.c | 7 +- + drivers/hid/hid-ids.h | 5 +- + drivers/input/misc/Kconfig | 13 + + drivers/input/misc/Makefile | 1 + + drivers/input/misc/appleir.c | 519 +++++++++++++++++++++++++++++++++++++++ + 7 files changed, 588 insertions(+), 7 deletions(-) + create mode 100644 Documentation/input/appleir.txt + create mode 100644 drivers/input/misc/appleir.c + +diff --git a/Documentation/input/appleir.txt b/Documentation/input/appleir.txt +new file mode 100644 +index 0000000..db637fb +--- /dev/null ++++ b/Documentation/input/appleir.txt +@@ -0,0 +1,46 @@ ++Apple IR receiver Driver (appleir) ++---------------------------------- ++ Copyright (C) 2009 Bastien Nocera ++ ++The appleir driver is a kernel input driver to handle Apple's IR ++receivers (and associated remotes) in the kernel. ++ ++The driver is an input driver which only handles "official" remotes ++as built and sold by Apple. ++ ++Authors ++------- ++ ++James McKenzie (original driver) ++Alex Karpenko (05ac:8242 support) ++Greg Kroah-Hartman (cleanups and original submission) ++Bastien Nocera (further cleanups, brushed metal "enter" ++button support and suspend support) ++ ++Supported hardware ++------------------ ++ ++- All Apple laptops and desktops from 2005 onwards, except: ++ - the unibody Macbook (2009) ++ - Mac Pro (all versions) ++- Apple TV (all revisions prior to September 2010) ++ ++The remote will only support the 6 (old white) or 7 (brushed metal) buttons ++of the remotes as sold by Apple. See the next section if you want to use ++other remotes or want to use lirc with the device instead of the kernel driver. ++ ++Using lirc (native) instead of the kernel driver ++------------------------------------------------ ++ ++First, you will need to disable the kernel driver for the receiver. ++ ++This can be achieved by passing quirks to the usbhid driver. ++The quirk line would be: ++usbhid.quirks=0x05ac:0x8242:0x40000010 ++ ++With 0x05ac being the vendor ID (Apple, you shouldn't need to change this) ++With 0x8242 being the product ID (check the output of lsusb for your hardware) ++And 0x10 being "HID_QUIRK_HIDDEV_FORCE" and 0x40000000 being "HID_QUIRK_NO_IGNORE" ++ ++This should force the creation of a hiddev device for the receiver, and ++make it usable under lirc. +diff --git a/drivers/hid/hid-apple.c b/drivers/hid/hid-apple.c +index bba05d0..0059d5a 100644 +--- a/drivers/hid/hid-apple.c ++++ b/drivers/hid/hid-apple.c +@@ -361,10 +361,6 @@ static void apple_remove(struct hid_device *hdev) + } + + static const struct hid_device_id apple_devices[] = { +- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ATV_IRCONTROL), +- .driver_data = APPLE_HIDDEV | APPLE_IGNORE_HIDINPUT }, +- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4), +- .driver_data = APPLE_HIDDEV | APPLE_IGNORE_HIDINPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MIGHTYMOUSE), + .driver_data = APPLE_MIGHTYMOUSE | APPLE_INVERT_HWHEEL }, + +diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c +index baa25ad..abc5bd7 100644 +--- a/drivers/hid/hid-core.c ++++ b/drivers/hid/hid-core.c +@@ -1244,8 +1244,6 @@ static const struct hid_device_id hid_blacklist[] = { + #if defined(CONFIG_HID_ACRUX_FF) || defined(CONFIG_HID_ACRUX_FF_MODULE) + { HID_USB_DEVICE(USB_VENDOR_ID_ACRUX, 0x0802) }, + #endif +- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ATV_IRCONTROL) }, +- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MIGHTYMOUSE) }, + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICMOUSE) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI) }, +@@ -1577,6 +1575,11 @@ static const struct hid_device_id hid_ignore_list[] = { + { HID_USB_DEVICE(USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_24) }, + { HID_USB_DEVICE(USB_VENDOR_ID_AIRCABLE, USB_DEVICE_ID_AIRCABLE1) }, + { HID_USB_DEVICE(USB_VENDOR_ID_ALCOR, USB_DEVICE_ID_ALCOR_USBRS232) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL2) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL3) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL5) }, + { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_LCM)}, + { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_LCM2)}, + { HID_USB_DEVICE(USB_VENDOR_ID_AVERMEDIA, USB_DEVICE_ID_AVER_FM_MR800) }, +diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h +index 11af537..360a5ca 100644 +--- a/drivers/hid/hid-ids.h ++++ b/drivers/hid/hid-ids.h +@@ -100,8 +100,11 @@ + #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS 0x023b + #define USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY 0x030a + #define USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY 0x030b +-#define USB_DEVICE_ID_APPLE_ATV_IRCONTROL 0x8241 ++#define USB_DEVICE_ID_APPLE_IRCONTROL 0x8240 ++#define USB_DEVICE_ID_APPLE_IRCONTROL2 0x1440 ++#define USB_DEVICE_ID_APPLE_IRCONTROL3 0x8241 + #define USB_DEVICE_ID_APPLE_IRCONTROL4 0x8242 ++#define USB_DEVICE_ID_APPLE_IRCONTROL5 0x8243 + + #define USB_VENDOR_ID_ASUS 0x0486 + #define USB_DEVICE_ID_ASUS_T91MT 0x0185 +diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig +index 60de906..2f2f2e7 100644 +--- a/drivers/input/misc/Kconfig ++++ b/drivers/input/misc/Kconfig +@@ -209,6 +209,19 @@ config INPUT_KEYSPAN_REMOTE + To compile this driver as a module, choose M here: the module will + be called keyspan_remote. + ++config INPUT_APPLEIR ++ tristate "Apple infrared receiver (built in)" ++ depends on USB_ARCH_HAS_HCD ++ select USB ++ help ++ Say Y here if you want to use a Apple infrared remote control. All ++ the Apple computers from 2005 onwards include such a port, except ++ the unibody Macbook (2009), and Mac Pros. This receiver is also ++ used in the Apple TV set-top box prior to the 2010 model. ++ ++ To compile this driver as a module, choose M here: the module will ++ be called appleir. ++ + config INPUT_POWERMATE + tristate "Griffin PowerMate and Contour Jog support" + depends on USB_ARCH_HAS_HCD +diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile +index 1fe1f6c..d5ef2b9 100644 +--- a/drivers/input/misc/Makefile ++++ b/drivers/input/misc/Makefile +@@ -13,6 +13,7 @@ obj-$(CONFIG_INPUT_ADXL34X) += adxl34x.o + obj-$(CONFIG_INPUT_ADXL34X_I2C) += adxl34x-i2c.o + obj-$(CONFIG_INPUT_ADXL34X_SPI) += adxl34x-spi.o + obj-$(CONFIG_INPUT_APANEL) += apanel.o ++obj-$(CONFIG_INPUT_APPLEIR) += appleir.o + obj-$(CONFIG_INPUT_ATI_REMOTE) += ati_remote.o + obj-$(CONFIG_INPUT_ATI_REMOTE2) += ati_remote2.o + obj-$(CONFIG_INPUT_ATLAS_BTNS) += atlas_btns.o +diff --git a/drivers/input/misc/appleir.c b/drivers/input/misc/appleir.c +new file mode 100644 +index 0000000..3817a3c +--- /dev/null ++++ b/drivers/input/misc/appleir.c +@@ -0,0 +1,519 @@ ++/* ++ * appleir: USB driver for the apple ir device ++ * ++ * Original driver written by James McKenzie ++ * Ported to recent 2.6 kernel versions by Greg Kroah-Hartman ++ * ++ * Copyright (C) 2006 James McKenzie ++ * Copyright (C) 2008 Greg Kroah-Hartman ++ * Copyright (C) 2008 Novell Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License as published by the Free ++ * Software Foundation, version 2. ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define DRIVER_VERSION "v1.2" ++#define DRIVER_AUTHOR "James McKenzie" ++#define DRIVER_DESC "Apple infrared receiver driver" ++#define DRIVER_LICENSE "GPL" ++ ++MODULE_AUTHOR(DRIVER_AUTHOR); ++MODULE_DESCRIPTION(DRIVER_DESC); ++MODULE_LICENSE(DRIVER_LICENSE); ++ ++#define USB_VENDOR_ID_APPLE 0x05ac ++#define USB_DEVICE_ID_APPLE_IRCONTROL 0x8240 ++#define USB_DEVICE_ID_APPLE_IRCONTROL2 0x1440 ++#define USB_DEVICE_ID_APPLE_IRCONTROL3 0x8241 ++#define USB_DEVICE_ID_APPLE_IRCONTROL4 0x8242 ++#define USB_DEVICE_ID_APPLE_IRCONTROL5 0x8243 ++ ++#define URB_SIZE 32 ++ ++#define MAX_KEYS 9 ++#define MAX_KEYS_MASK (MAX_KEYS - 1) ++ ++#define dbginfo(dev, format, arg...) do { if (debug) dev_info(dev , format , ## arg); } while (0) ++ ++static int debug; ++module_param(debug, int, 0644); ++MODULE_PARM_DESC(debug, "Enable extra debug messages and information"); ++ ++/* I have two devices both of which report the following */ ++/* 25 87 ee 83 0a + */ ++/* 25 87 ee 83 0c - */ ++/* 25 87 ee 83 09 << */ ++/* 25 87 ee 83 06 >> */ ++/* 25 87 ee 83 05 >" */ ++/* 25 87 ee 83 03 menu */ ++/* 26 00 00 00 00 for key repeat*/ ++ ++/* Thomas Glanzmann reports the following responses */ ++/* 25 87 ee ca 0b + */ ++/* 25 87 ee ca 0d - */ ++/* 25 87 ee ca 08 << */ ++/* 25 87 ee ca 07 >> */ ++/* 25 87 ee ca 04 >" */ ++/* 25 87 ee ca 02 menu */ ++/* 26 00 00 00 00 for key repeat*/ ++/* He also observes the following event sometimes */ ++/* sent after a key is release, which I interpret */ ++/* as a flat battery message */ ++/* 25 87 e0 ca 06 flat battery */ ++ ++/* Alexandre Karpenko reports the following responses for Device ID 0x8242 */ ++/* 25 87 ee 47 0b + */ ++/* 25 87 ee 47 0d - */ ++/* 25 87 ee 47 08 << */ ++/* 25 87 ee 47 07 >> */ ++/* 25 87 ee 47 04 >" */ ++/* 25 87 ee 47 02 menu */ ++/* 26 87 ee 47 ** for key repeat (** is the code of the key being held) */ ++ ++/* Bastien Nocera's "new" remote */ ++/* 25 87 ee 91 5f followed by ++ * 25 87 ee 91 05 gives you >" ++ * ++ * 25 87 ee 91 5c followed by ++ * 25 87 ee 91 05 gives you the middle button */ ++ ++static const unsigned short appleir_key_table[] = { ++ KEY_RESERVED, ++ KEY_MENU, ++ KEY_PLAYPAUSE, ++ KEY_FORWARD, ++ KEY_BACK, ++ KEY_VOLUMEUP, ++ KEY_VOLUMEDOWN, ++ KEY_ENTER, ++ KEY_RESERVED, ++}; ++ ++struct appleir { ++ struct input_dev *input_dev; ++ unsigned short keymap[ARRAY_SIZE(appleir_key_table)]; ++ u8 *data; ++ dma_addr_t dma_buf; ++ struct usb_device *usbdev; ++ unsigned int flags; ++ struct urb *urb; ++ struct timer_list key_up_timer; ++ int current_key; ++ int prev_key_idx; ++ char phys[32]; ++}; ++ ++static DEFINE_MUTEX(appleir_mutex); ++ ++enum { ++ APPLEIR_OPENED = 0x1, ++ APPLEIR_SUSPENDED = 0x2, ++}; ++ ++static struct usb_device_id appleir_ids[] = { ++ { USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL) }, ++ { USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL2) }, ++ { USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL3) }, ++ { USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4) }, ++ { USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL5) }, ++ {} ++}; ++MODULE_DEVICE_TABLE(usb, appleir_ids); ++ ++static void dump_packet(struct appleir *appleir, char *msg, u8 *data, int len) ++{ ++ int i; ++ ++ printk(KERN_ERR "appleir: %s (%d bytes)", msg, len); ++ ++ for (i = 0; i < len; ++i) ++ printk(" %02x", data[i]); ++ printk(" (should be command %d)\n", (data[4] >> 1) & MAX_KEYS_MASK); ++} ++ ++static int get_key(int data) ++{ ++ switch (data) { ++ case 0x02: ++ case 0x03: ++ /* menu */ ++ return 1; ++ case 0x04: ++ case 0x05: ++ /* >" */ ++ return 2; ++ case 0x06: ++ case 0x07: ++ /* >> */ ++ return 3; ++ case 0x08: ++ case 0x09: ++ /* << */ ++ return 4; ++ case 0x0a: ++ case 0x0b: ++ /* + */ ++ return 5; ++ case 0x0c: ++ case 0x0d: ++ /* - */ ++ return 6; ++ case 0x5c: ++ /* Middle button, on newer remotes, ++ * part of a 2 packet-command */ ++ return -7; ++ default: ++ return -1; ++ } ++} ++ ++static void key_up(struct appleir *appleir, int key) ++{ ++ dbginfo(&appleir->input_dev->dev, "key %d up\n", key); ++ input_report_key(appleir->input_dev, key, 0); ++ input_sync(appleir->input_dev); ++} ++ ++static void key_down(struct appleir *appleir, int key) ++{ ++ dbginfo(&appleir->input_dev->dev, "key %d down\n", key); ++ input_report_key(appleir->input_dev, key, 1); ++ input_sync(appleir->input_dev); ++} ++ ++static void battery_flat(struct appleir *appleir) ++{ ++ dev_err(&appleir->input_dev->dev, "possible flat battery?\n"); ++} ++ ++static void key_up_tick(unsigned long data) ++{ ++ struct appleir *appleir = (struct appleir *)data; ++ ++ if (appleir->current_key) { ++ key_up(appleir, appleir->current_key); ++ appleir->current_key = 0; ++ } ++} ++ ++static void new_data(struct appleir *appleir, u8 *data, int len) ++{ ++ static const u8 keydown[] = { 0x25, 0x87, 0xee }; ++ static const u8 keyrepeat[] = { 0x26, }; ++ static const u8 flatbattery[] = { 0x25, 0x87, 0xe0 }; ++ ++ if (debug) ++ dump_packet(appleir, "received", data, len); ++ ++ if (len != 5) ++ return; ++ ++ if (!memcmp(data, keydown, sizeof(keydown))) { ++ int index; ++ ++ /* If we already have a key down, take it up before marking ++ this one down */ ++ if (appleir->current_key) ++ key_up(appleir, appleir->current_key); ++ ++ /* Handle dual packet commands */ ++ if (appleir->prev_key_idx > 0) ++ index = appleir->prev_key_idx; ++ else ++ index = get_key(data[4]); ++ ++ if (index > 0) { ++ appleir->current_key = appleir->keymap[index]; ++ ++ key_down(appleir, appleir->current_key); ++ /* Remote doesn't do key up, either pull them up, in the test ++ above, or here set a timer which pulls them up after 1/8 s */ ++ mod_timer(&appleir->key_up_timer, jiffies + HZ / 8); ++ appleir->prev_key_idx = 0; ++ return; ++ } else if (index == -7) { ++ /* Remember key for next packet */ ++ appleir->prev_key_idx = 0 - index; ++ return; ++ } ++ } ++ ++ appleir->prev_key_idx = 0; ++ ++ if (!memcmp(data, keyrepeat, sizeof(keyrepeat))) { ++ key_down(appleir, appleir->current_key); ++ /* Remote doesn't do key up, either pull them up, in the test ++ above, or here set a timer which pulls them up after 1/8 s */ ++ mod_timer(&appleir->key_up_timer, jiffies + HZ / 8); ++ return; ++ } ++ ++ if (!memcmp(data, flatbattery, sizeof(flatbattery))) { ++ battery_flat(appleir); ++ /* Fall through */ ++ } ++ ++ dump_packet(appleir, "unknown packet", data, len); ++} ++ ++static void appleir_urb(struct urb *urb) ++{ ++ struct appleir *appleir = urb->context; ++ int status = urb->status; ++ int retval; ++ ++ switch (status) { ++ case 0: ++ new_data(appleir, urb->transfer_buffer, urb->actual_length); ++ break; ++ case -ECONNRESET: ++ case -ENOENT: ++ case -ESHUTDOWN: ++ /* This urb is terminated, clean up */ ++ dbginfo(&appleir->input_dev->dev, "%s - urb shutting down with status: %d", __func__, ++ urb->status); ++ return; ++ default: ++ dbginfo(&appleir->input_dev->dev, "%s - nonzero urb status received: %d", __func__, ++ urb->status); ++ } ++ ++ retval = usb_submit_urb(urb, GFP_ATOMIC); ++ if (retval) ++ err("%s - usb_submit_urb failed with result %d", __func__, ++ retval); ++} ++ ++static int appleir_open(struct input_dev *dev) ++{ ++ struct appleir *appleir = input_get_drvdata(dev); ++ struct usb_interface *intf = usb_ifnum_to_if(appleir->usbdev, 0); ++ int r; ++ ++ r = usb_autopm_get_interface(intf); ++ if (r) { ++ dev_err(&intf->dev, ++ "%s(): usb_autopm_get_interface() = %d\n", __func__, r); ++ return r; ++ } ++ ++ mutex_lock(&appleir_mutex); ++ ++ if (usb_submit_urb(appleir->urb, GFP_ATOMIC)) { ++ r = -EIO; ++ goto fail; ++ } ++ ++ appleir->flags |= APPLEIR_OPENED; ++ ++ mutex_unlock(&appleir_mutex); ++ ++ usb_autopm_put_interface(intf); ++ ++ return 0; ++fail: ++ mutex_unlock(&appleir_mutex); ++ usb_autopm_put_interface(intf); ++ return r; ++} ++ ++static void appleir_close(struct input_dev *dev) ++{ ++ struct appleir *appleir = input_get_drvdata(dev); ++ ++ mutex_lock(&appleir_mutex); ++ ++ if (!(appleir->flags & APPLEIR_SUSPENDED)) { ++ usb_kill_urb(appleir->urb); ++ del_timer_sync(&appleir->key_up_timer); ++ } ++ ++ appleir->flags &= ~APPLEIR_OPENED; ++ ++ mutex_unlock(&appleir_mutex); ++} ++ ++static int appleir_probe(struct usb_interface *intf, ++ const struct usb_device_id *id) ++{ ++ struct usb_device *dev = interface_to_usbdev(intf); ++ struct usb_endpoint_descriptor *endpoint; ++ struct appleir *appleir = NULL; ++ struct input_dev *input_dev; ++ int retval = -ENOMEM; ++ int i; ++ ++ appleir = kzalloc(sizeof(struct appleir), GFP_KERNEL); ++ if (!appleir) ++ goto allocfail; ++ ++ appleir->data = usb_alloc_coherent(dev, URB_SIZE, GFP_KERNEL, ++ &appleir->dma_buf); ++ if (!appleir->data) ++ goto usbfail; ++ ++ appleir->urb = usb_alloc_urb(0, GFP_KERNEL); ++ if (!appleir->urb) ++ goto urbfail; ++ ++ appleir->usbdev = dev; ++ ++ input_dev = input_allocate_device(); ++ if (!input_dev) ++ goto inputfail; ++ ++ appleir->input_dev = input_dev; ++ ++ usb_make_path(dev, appleir->phys, sizeof(appleir->phys)); ++ strlcpy(appleir->phys, "/input0", sizeof(appleir->phys)); ++ ++ input_dev->name = "Apple Infrared Remote Controller"; ++ input_dev->phys = appleir->phys; ++ usb_to_input_id(dev, &input_dev->id); ++ input_dev->dev.parent = &intf->dev; ++ input_dev->keycode = appleir->keymap; ++ input_dev->keycodesize = sizeof(unsigned short); ++ input_dev->keycodemax = ARRAY_SIZE(appleir->keymap); ++ ++ input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP); ++ ++ memcpy(appleir->keymap, appleir_key_table, sizeof(appleir->keymap)); ++ for (i = 0; i < ARRAY_SIZE(appleir_key_table); i++) ++ set_bit(appleir->keymap[i], input_dev->keybit); ++ clear_bit(KEY_RESERVED, input_dev->keybit); ++ ++ input_set_drvdata(input_dev, appleir); ++ input_dev->open = appleir_open; ++ input_dev->close = appleir_close; ++ ++ endpoint = &intf->cur_altsetting->endpoint[0].desc; ++ ++ usb_fill_int_urb(appleir->urb, dev, ++ usb_rcvintpipe(dev, endpoint->bEndpointAddress), ++ appleir->data, 8, ++ appleir_urb, appleir, endpoint->bInterval); ++ ++ appleir->urb->transfer_dma = appleir->dma_buf; ++ appleir->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; ++ ++ setup_timer(&appleir->key_up_timer, ++ key_up_tick, (unsigned long) appleir); ++ ++ retval = input_register_device(appleir->input_dev); ++ if (retval) ++ goto inputfail; ++ ++ usb_set_intfdata(intf, appleir); ++ ++ return 0; ++ ++inputfail: ++ input_free_device(appleir->input_dev); ++ ++urbfail: ++ usb_free_urb(appleir->urb); ++ ++usbfail: ++ usb_free_coherent(dev, URB_SIZE, appleir->data, ++ appleir->dma_buf); ++ ++allocfail: ++ kfree(appleir); ++ ++ return retval; ++} ++ ++static void appleir_disconnect(struct usb_interface *intf) ++{ ++ struct appleir *appleir = usb_get_intfdata(intf); ++ ++ usb_set_intfdata(intf, NULL); ++ input_unregister_device(appleir->input_dev); ++ usb_free_urb(appleir->urb); ++ usb_free_coherent(interface_to_usbdev(intf), URB_SIZE, ++ appleir->data, appleir->dma_buf); ++ kfree(appleir); ++} ++ ++static int appleir_suspend(struct usb_interface *interface, ++ pm_message_t message) ++{ ++ struct appleir *appleir = usb_get_intfdata(interface); ++ ++ mutex_lock(&appleir_mutex); ++ if (appleir->flags & APPLEIR_OPENED) ++ usb_kill_urb(appleir->urb); ++ ++ appleir->flags |= APPLEIR_SUSPENDED; ++ ++ mutex_unlock(&appleir_mutex); ++ ++ return 0; ++} ++ ++static int appleir_resume(struct usb_interface *interface) ++{ ++ struct appleir *appleir; ++ int r = 0; ++ ++ appleir = usb_get_intfdata(interface); ++ ++ mutex_lock(&appleir_mutex); ++ if (appleir->flags & APPLEIR_OPENED) { ++ struct usb_endpoint_descriptor *endpoint; ++ ++ endpoint = &interface->cur_altsetting->endpoint[0].desc; ++ usb_fill_int_urb(appleir->urb, appleir->usbdev, ++ usb_rcvintpipe(appleir->usbdev, endpoint->bEndpointAddress), ++ appleir->data, 8, ++ appleir_urb, appleir, endpoint->bInterval); ++ appleir->urb->transfer_dma = appleir->dma_buf; ++ appleir->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; ++ ++ /* And reset the USB device */ ++ if (usb_submit_urb(appleir->urb, GFP_ATOMIC)) ++ r = -EIO; ++ } ++ ++ appleir->flags &= ~APPLEIR_SUSPENDED; ++ ++ mutex_unlock(&appleir_mutex); ++ ++ return r; ++} ++ ++static struct usb_driver appleir_driver = { ++ .name = "appleir", ++ .probe = appleir_probe, ++ .disconnect = appleir_disconnect, ++ .suspend = appleir_suspend, ++ .resume = appleir_resume, ++ .reset_resume = appleir_resume, ++ .id_table = appleir_ids, ++}; ++ ++static int __init appleir_init(void) ++{ ++ return usb_register(&appleir_driver); ++} ++ ++static void __exit appleir_exit(void) ++{ ++ usb_deregister(&appleir_driver); ++} ++ ++module_init(appleir_init); ++module_exit(appleir_exit); +-- +1.7.2.2 + diff --git a/packages/linux/patches/linux-2.6.37-rc1-052-aureal_remote_quirk-0.1.patch b/packages/linux/patches/linux-2.6.37-rc1-052-aureal_remote_quirk-0.1.patch new file mode 100644 index 0000000000..2cf266aac9 --- /dev/null +++ b/packages/linux/patches/linux-2.6.37-rc1-052-aureal_remote_quirk-0.1.patch @@ -0,0 +1,113 @@ +diff -Naur linux-2.6.36-rc6/drivers/hid/hid-aureal.c linux-2.6.36-rc6.patch/drivers/hid/hid-aureal.c +--- linux-2.6.36-rc6/drivers/hid/hid-aureal.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.36-rc6.patch/drivers/hid/hid-aureal.c 2010-10-05 02:28:50.925421529 +0200 +@@ -0,0 +1,60 @@ ++/* ++ * HID driver for some sunplus "special" devices ++ * ++ * Copyright (c) 1999 Andreas Gal ++ * Copyright (c) 2000-2005 Vojtech Pavlik ++ * Copyright (c) 2005 Michael Haboustak for Concept2, Inc ++ * Copyright (c) 2006-2007 Jiri Kosina ++ * Copyright (c) 2007 Paul Walmsley ++ * Copyright (c) 2008 Jiri Slaby ++ * Copyright (c) 2010 Franco Catrin ++ */ ++ ++/* ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License as published by the Free ++ * Software Foundation; either version 2 of the License, or (at your option) ++ * any later version. ++ */ ++ ++#include ++#include ++#include ++ ++#include "hid-ids.h" ++ ++static void aureal_report_fixup(struct hid_device *hdev, __u8 *rdesc, ++ unsigned int rsize) ++{ ++ if (rsize >= 54 && rdesc[52] == 0x25 && rdesc[53] == 0x01) { ++ dev_info(&hdev->dev, "fixing Aureal Cy se W-01RN USB_V3.1 " ++ "report descriptor. Keyboard Logical Maximum = 101\n"); ++ rdesc[53] = 0x65; ++ } ++} ++ ++static const struct hid_device_id aureal_devices[] = { ++ { HID_USB_DEVICE(USB_VENDOR_ID_AUREAL, USB_DEVICE_ID_AUREAL_W01RN) }, ++ { } ++}; ++MODULE_DEVICE_TABLE(hid, aureal_devices); ++ ++static struct hid_driver aureal_driver = { ++ .name = "aureal", ++ .id_table = aureal_devices, ++ .report_fixup = aureal_report_fixup, ++}; ++ ++static int __init aureal_init(void) ++{ ++ return hid_register_driver(&aureal_driver); ++} ++ ++static void __exit aureal_exit(void) ++{ ++ hid_unregister_driver(&aureal_driver); ++} ++ ++module_init(aureal_init); ++module_exit(aureal_exit); ++MODULE_LICENSE("GPL"); +diff -Naur linux-2.6.36-rc6/drivers/hid/hid-ids.h linux-2.6.36-rc6.patch/drivers/hid/hid-ids.h +--- linux-2.6.36-rc6/drivers/hid/hid-ids.h 2010-09-29 03:01:22.000000000 +0200 ++++ linux-2.6.36-rc6.patch/drivers/hid/hid-ids.h 2010-10-05 02:30:00.651266940 +0200 +@@ -6,6 +6,7 @@ + * Copyright (c) 2005 Michael Haboustak for Concept2, Inc + * Copyright (c) 2006-2007 Jiri Kosina + * Copyright (c) 2007 Paul Walmsley ++ * Copyright (c) 2010 Franco Catrin + */ + + /* +@@ -316,6 +317,9 @@ + #define USB_DEVICE_ID_KYE_ERGO_525V 0x0087 + #define USB_DEVICE_ID_KYE_GPEN_560 0x5003 + ++#define USB_VENDOR_ID_AUREAL 0x0755 ++#define USB_DEVICE_ID_AUREAL_W01RN 0x2626 ++ + #define USB_VENDOR_ID_LABTEC 0x1020 + #define USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD 0x0006 + +diff -Naur linux-2.6.36-rc6/drivers/hid/Kconfig linux-2.6.36-rc6.patch/drivers/hid/Kconfig +--- linux-2.6.36-rc6/drivers/hid/Kconfig 2010-09-29 03:01:22.000000000 +0200 ++++ linux-2.6.36-rc6.patch/drivers/hid/Kconfig 2010-10-05 02:28:50.936421663 +0200 +@@ -87,6 +87,13 @@ + Say Y here if you want support for keyboards of Apple iBooks, PowerBooks, + MacBooks, MacBook Pros and Apple Aluminum. + ++config HID_AUREAL ++ tristate "Aureal" if EMBEDDED ++ depends on USB_HID ++ default !EMBEDDED ++ ---help--- ++ Support for Aureal Cy se W-01RN Remote Controller ++ + config HID_BELKIN + tristate "Belkin" if EMBEDDED + depends on USB_HID +diff -Naur linux-2.6.36-rc6/drivers/hid/Makefile linux-2.6.36-rc6.patch/drivers/hid/Makefile +--- linux-2.6.36-rc6/drivers/hid/Makefile 2010-09-29 03:01:22.000000000 +0200 ++++ linux-2.6.36-rc6.patch/drivers/hid/Makefile 2010-10-05 02:28:50.938421687 +0200 +@@ -26,6 +26,7 @@ + obj-$(CONFIG_HID_A4TECH) += hid-a4tech.o + obj-$(CONFIG_HID_ACRUX_FF) += hid-axff.o + obj-$(CONFIG_HID_APPLE) += hid-apple.o ++obj-$(CONFIG_HID_AUREAL) += hid-aureal.o + obj-$(CONFIG_HID_BELKIN) += hid-belkin.o + obj-$(CONFIG_HID_CANDO) += hid-cando.o + obj-$(CONFIG_HID_CHERRY) += hid-cherry.o diff --git a/packages/linux/patches/linux-2.6.37-rc1-110-drm_nouveau_upstream-20101111.patch b/packages/linux/patches/linux-2.6.37-rc1-110-drm_nouveau_upstream-20101111.patch new file mode 100644 index 0000000000..8a8e34765b --- /dev/null +++ b/packages/linux/patches/linux-2.6.37-rc1-110-drm_nouveau_upstream-20101111.patch @@ -0,0 +1,11929 @@ +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/Makefile linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/Makefile +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/Makefile 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/Makefile 2010-11-12 06:18:06.000000000 +0100 +@@ -5,7 +5,7 @@ + ccflags-y := -Iinclude/drm + nouveau-y := nouveau_drv.o nouveau_state.o nouveau_channel.o nouveau_mem.o \ + nouveau_object.o nouveau_irq.o nouveau_notifier.o \ +- nouveau_sgdma.o nouveau_dma.o \ ++ nouveau_sgdma.o nouveau_dma.o nouveau_util.o \ + nouveau_bo.o nouveau_fence.o nouveau_gem.o nouveau_ttm.o \ + nouveau_hw.o nouveau_calc.o nouveau_bios.o nouveau_i2c.o \ + nouveau_display.o nouveau_connector.o nouveau_fbcon.o \ +@@ -18,8 +18,9 @@ + nv04_graph.o nv10_graph.o nv20_graph.o \ + nv40_graph.o nv50_graph.o nvc0_graph.o \ + nv40_grctx.o nv50_grctx.o \ ++ nv84_crypt.o \ + nv04_instmem.o nv50_instmem.o nvc0_instmem.o \ +- nv50_crtc.o nv50_dac.o nv50_sor.o \ ++ nv50_evo.o nv50_crtc.o nv50_dac.o nv50_sor.o \ + nv50_cursor.o nv50_display.o nv50_fbcon.o \ + nv04_dac.o nv04_dfp.o nv04_tv.o nv17_tv.o nv17_tv_modes.o \ + nv04_crtc.o nv04_display.o nv04_cursor.o nv04_fbcon.o \ +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_backlight.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_backlight.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_backlight.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_backlight.c 2010-11-12 06:18:06.000000000 +0100 +@@ -31,6 +31,7 @@ + */ + + #include ++#include + + #include "drmP.h" + #include "nouveau_drv.h" +@@ -136,6 +137,14 @@ + { + struct drm_nouveau_private *dev_priv = dev->dev_private; + ++#ifdef CONFIG_ACPI ++ if (acpi_video_backlight_support()) { ++ NV_INFO(dev, "ACPI backlight interface available, " ++ "not registering our own\n"); ++ return 0; ++ } ++#endif ++ + switch (dev_priv->card_type) { + case NV_40: + return nouveau_nv40_backlight_init(dev); +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_bios.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_bios.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_bios.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_bios.c 2010-11-12 06:18:06.000000000 +0100 +@@ -6039,7 +6039,6 @@ + if (type != cte->type) + NV_WARN(dev, " -> type 0x%02x\n", cte->type); + } +- + } + } + +@@ -6829,7 +6828,7 @@ + struct drm_nouveau_private *dev_priv = dev->dev_private; + unsigned htotal; + +- if (dev_priv->chipset >= NV_50) { ++ if (dev_priv->card_type >= NV_50) { + if (NVReadVgaCrtc(dev, 0, 0x00) == 0 && + NVReadVgaCrtc(dev, 0, 0x1a) == 0) + return false; +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_bo.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_bo.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_bo.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_bo.c 2010-11-12 06:18:06.000000000 +0100 +@@ -46,9 +46,7 @@ + if (unlikely(nvbo->gem)) + DRM_ERROR("bo %p still attached to GEM object\n", bo); + +- if (nvbo->tile) +- nv10_mem_expire_tiling(dev, nvbo->tile, NULL); +- ++ nv10_mem_put_tile_region(dev, nvbo->tile, NULL); + kfree(nvbo); + } + +@@ -143,8 +141,10 @@ + nvbo->no_vm = no_vm; + nvbo->tile_mode = tile_mode; + nvbo->tile_flags = tile_flags; ++ nvbo->bo.bdev = &dev_priv->ttm.bdev; + +- nouveau_bo_fixup_align(dev, tile_mode, tile_flags, &align, &size); ++ nouveau_bo_fixup_align(dev, tile_mode, nouveau_bo_tile_layout(nvbo), ++ &align, &size); + align >>= PAGE_SHIFT; + + nouveau_bo_placement_set(nvbo, flags, 0); +@@ -176,6 +176,31 @@ + pl[(*n)++] = TTM_PL_FLAG_SYSTEM | flags; + } + ++static void ++set_placement_range(struct nouveau_bo *nvbo, uint32_t type) ++{ ++ struct drm_nouveau_private *dev_priv = nouveau_bdev(nvbo->bo.bdev); ++ ++ if (dev_priv->card_type == NV_10 && ++ nvbo->tile_mode && (type & TTM_PL_FLAG_VRAM)) { ++ /* ++ * Make sure that the color and depth buffers are handled ++ * by independent memory controller units. Up to a 9x ++ * speed up when alpha-blending and depth-test are enabled ++ * at the same time. ++ */ ++ int vram_pages = dev_priv->vram_size >> PAGE_SHIFT; ++ ++ if (nvbo->tile_flags & NOUVEAU_GEM_TILE_ZETA) { ++ nvbo->placement.fpfn = vram_pages / 2; ++ nvbo->placement.lpfn = ~0; ++ } else { ++ nvbo->placement.fpfn = 0; ++ nvbo->placement.lpfn = vram_pages / 2; ++ } ++ } ++} ++ + void + nouveau_bo_placement_set(struct nouveau_bo *nvbo, uint32_t type, uint32_t busy) + { +@@ -190,6 +215,8 @@ + pl->busy_placement = nvbo->busy_placements; + set_placement_list(nvbo->busy_placements, &pl->num_busy_placement, + type | busy, flags); ++ ++ set_placement_range(nvbo, type); + } + + int +@@ -456,16 +483,9 @@ + if (ret) + return ret; + +- if (nvbo->channel) { +- ret = nouveau_fence_sync(fence, nvbo->channel); +- if (ret) +- goto out; +- } +- + ret = ttm_bo_move_accel_cleanup(&nvbo->bo, fence, NULL, evict, + no_wait_reserve, no_wait_gpu, new_mem); +-out: +- nouveau_fence_unref((void *)&fence); ++ nouveau_fence_unref(&fence); + return ret; + } + +@@ -525,7 +545,8 @@ + stride = 16 * 4; + height = amount / stride; + +- if (new_mem->mem_type == TTM_PL_VRAM && nvbo->tile_flags) { ++ if (new_mem->mem_type == TTM_PL_VRAM && ++ nouveau_bo_tile_layout(nvbo)) { + ret = RING_SPACE(chan, 8); + if (ret) + return ret; +@@ -546,7 +567,8 @@ + BEGIN_RING(chan, NvSubM2MF, 0x0200, 1); + OUT_RING (chan, 1); + } +- if (old_mem->mem_type == TTM_PL_VRAM && nvbo->tile_flags) { ++ if (old_mem->mem_type == TTM_PL_VRAM && ++ nouveau_bo_tile_layout(nvbo)) { + ret = RING_SPACE(chan, 8); + if (ret) + return ret; +@@ -652,17 +674,24 @@ + int ret; + + chan = nvbo->channel; +- if (!chan || nvbo->no_vm) ++ if (!chan || nvbo->no_vm) { + chan = dev_priv->channel; ++ mutex_lock_nested(&chan->mutex, NOUVEAU_KCHANNEL_MUTEX); ++ } + + if (dev_priv->card_type < NV_50) + ret = nv04_bo_move_m2mf(chan, bo, &bo->mem, new_mem); + else + ret = nv50_bo_move_m2mf(chan, bo, &bo->mem, new_mem); +- if (ret) +- return ret; ++ if (ret == 0) { ++ ret = nouveau_bo_move_accel_cleanup(chan, nvbo, evict, ++ no_wait_reserve, ++ no_wait_gpu, new_mem); ++ } + +- return nouveau_bo_move_accel_cleanup(chan, nvbo, evict, no_wait_reserve, no_wait_gpu, new_mem); ++ if (chan == dev_priv->channel) ++ mutex_unlock(&chan->mutex); ++ return ret; + } + + static int +@@ -753,14 +782,16 @@ + if (dev_priv->card_type == NV_50) { + ret = nv50_mem_vm_bind_linear(dev, + offset + dev_priv->vm_vram_base, +- new_mem->size, nvbo->tile_flags, ++ new_mem->size, ++ nouveau_bo_tile_layout(nvbo), + offset); + if (ret) + return ret; + + } else if (dev_priv->card_type >= NV_10) { + *new_tile = nv10_mem_set_tiling(dev, offset, new_mem->size, +- nvbo->tile_mode); ++ nvbo->tile_mode, ++ nvbo->tile_flags); + } + + return 0; +@@ -776,9 +807,7 @@ + + if (dev_priv->card_type >= NV_10 && + dev_priv->card_type < NV_50) { +- if (*old_tile) +- nv10_mem_expire_tiling(dev, *old_tile, bo->sync_obj); +- ++ nv10_mem_put_tile_region(dev, *old_tile, bo->sync_obj); + *old_tile = new_tile; + } + } +@@ -894,7 +923,8 @@ + * nothing to do here. + */ + if (bo->mem.mem_type != TTM_PL_VRAM) { +- if (dev_priv->card_type < NV_50 || !nvbo->tile_flags) ++ if (dev_priv->card_type < NV_50 || ++ !nouveau_bo_tile_layout(nvbo)) + return 0; + } + +@@ -909,6 +939,22 @@ + return ttm_bo_validate(bo, &nvbo->placement, false, true, false); + } + ++void ++nouveau_bo_fence(struct nouveau_bo *nvbo, struct nouveau_fence *fence) ++{ ++ struct nouveau_fence *old_fence; ++ ++ if (likely(fence)) ++ nouveau_fence_ref(fence); ++ ++ spin_lock(&nvbo->bo.lock); ++ old_fence = nvbo->bo.sync_obj; ++ nvbo->bo.sync_obj = fence; ++ spin_unlock(&nvbo->bo.lock); ++ ++ nouveau_fence_unref(&old_fence); ++} ++ + struct ttm_bo_driver nouveau_bo_driver = { + .create_ttm_backend_entry = nouveau_bo_create_ttm_backend_entry, + .invalidate_caches = nouveau_bo_invalidate_caches, +@@ -916,11 +962,11 @@ + .evict_flags = nouveau_bo_evict_flags, + .move = nouveau_bo_move, + .verify_access = nouveau_bo_verify_access, +- .sync_obj_signaled = nouveau_fence_signalled, +- .sync_obj_wait = nouveau_fence_wait, +- .sync_obj_flush = nouveau_fence_flush, +- .sync_obj_unref = nouveau_fence_unref, +- .sync_obj_ref = nouveau_fence_ref, ++ .sync_obj_signaled = __nouveau_fence_signalled, ++ .sync_obj_wait = __nouveau_fence_wait, ++ .sync_obj_flush = __nouveau_fence_flush, ++ .sync_obj_unref = __nouveau_fence_unref, ++ .sync_obj_ref = __nouveau_fence_ref, + .fault_reserve_notify = &nouveau_ttm_fault_reserve_notify, + .io_mem_reserve = &nouveau_ttm_io_mem_reserve, + .io_mem_free = &nouveau_ttm_io_mem_free, +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_channel.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_channel.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_channel.c 2010-11-12 06:18:06.000000000 +0100 +@@ -107,53 +107,56 @@ + int + nouveau_channel_alloc(struct drm_device *dev, struct nouveau_channel **chan_ret, + struct drm_file *file_priv, +- uint32_t vram_handle, uint32_t tt_handle) ++ uint32_t vram_handle, uint32_t gart_handle) + { + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; + struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; + struct nouveau_channel *chan; +- int channel, user; +- int ret; ++ unsigned long flags; ++ int user, ret; + +- /* +- * Alright, here is the full story +- * Nvidia cards have multiple hw fifo contexts (praise them for that, +- * no complicated crash-prone context switches) +- * We allocate a new context for each app and let it write to it +- * directly (woo, full userspace command submission !) +- * When there are no more contexts, you lost +- */ +- for (channel = 0; channel < pfifo->channels; channel++) { +- if (dev_priv->fifos[channel] == NULL) ++ /* allocate and lock channel structure */ ++ chan = kzalloc(sizeof(*chan), GFP_KERNEL); ++ if (!chan) ++ return -ENOMEM; ++ chan->dev = dev; ++ chan->file_priv = file_priv; ++ chan->vram_handle = vram_handle; ++ chan->gart_handle = gart_handle; ++ ++ kref_init(&chan->ref); ++ atomic_set(&chan->users, 1); ++ mutex_init(&chan->mutex); ++ mutex_lock(&chan->mutex); ++ ++ /* allocate hw channel id */ ++ spin_lock_irqsave(&dev_priv->channels.lock, flags); ++ for (chan->id = 0; chan->id < pfifo->channels; chan->id++) { ++ if (!dev_priv->channels.ptr[chan->id]) { ++ nouveau_channel_ref(chan, &dev_priv->channels.ptr[chan->id]); + break; ++ } + } ++ spin_unlock_irqrestore(&dev_priv->channels.lock, flags); + +- /* no more fifos. you lost. */ +- if (channel == pfifo->channels) +- return -EINVAL; ++ if (chan->id == pfifo->channels) { ++ mutex_unlock(&chan->mutex); ++ kfree(chan); ++ return -ENODEV; ++ } + +- dev_priv->fifos[channel] = kzalloc(sizeof(struct nouveau_channel), +- GFP_KERNEL); +- if (!dev_priv->fifos[channel]) +- return -ENOMEM; +- chan = dev_priv->fifos[channel]; ++ NV_DEBUG(dev, "initialising channel %d\n", chan->id); + INIT_LIST_HEAD(&chan->nvsw.vbl_wait); ++ INIT_LIST_HEAD(&chan->nvsw.flip); + INIT_LIST_HEAD(&chan->fence.pending); +- chan->dev = dev; +- chan->id = channel; +- chan->file_priv = file_priv; +- chan->vram_handle = vram_handle; +- chan->gart_handle = tt_handle; +- +- NV_INFO(dev, "Allocating FIFO number %d\n", channel); + + /* Allocate DMA push buffer */ + chan->pushbuf_bo = nouveau_channel_user_pushbuf_alloc(dev); + if (!chan->pushbuf_bo) { + ret = -ENOMEM; + NV_ERROR(dev, "pushbuf %d\n", ret); +- nouveau_channel_free(chan); ++ nouveau_channel_put(&chan); + return ret; + } + +@@ -161,18 +164,18 @@ + + /* Locate channel's user control regs */ + if (dev_priv->card_type < NV_40) +- user = NV03_USER(channel); ++ user = NV03_USER(chan->id); + else + if (dev_priv->card_type < NV_50) +- user = NV40_USER(channel); ++ user = NV40_USER(chan->id); + else +- user = NV50_USER(channel); ++ user = NV50_USER(chan->id); + + chan->user = ioremap(pci_resource_start(dev->pdev, 0) + user, + PAGE_SIZE); + if (!chan->user) { + NV_ERROR(dev, "ioremap of regs failed.\n"); +- nouveau_channel_free(chan); ++ nouveau_channel_put(&chan); + return -ENOMEM; + } + chan->user_put = 0x40; +@@ -182,15 +185,15 @@ + ret = nouveau_notifier_init_channel(chan); + if (ret) { + NV_ERROR(dev, "ntfy %d\n", ret); +- nouveau_channel_free(chan); ++ nouveau_channel_put(&chan); + return ret; + } + + /* Setup channel's default objects */ +- ret = nouveau_gpuobj_channel_init(chan, vram_handle, tt_handle); ++ ret = nouveau_gpuobj_channel_init(chan, vram_handle, gart_handle); + if (ret) { + NV_ERROR(dev, "gpuobj %d\n", ret); +- nouveau_channel_free(chan); ++ nouveau_channel_put(&chan); + return ret; + } + +@@ -198,7 +201,7 @@ + ret = nouveau_channel_pushbuf_ctxdma_init(chan); + if (ret) { + NV_ERROR(dev, "pbctxdma %d\n", ret); +- nouveau_channel_free(chan); ++ nouveau_channel_put(&chan); + return ret; + } + +@@ -206,16 +209,18 @@ + pfifo->reassign(dev, false); + + /* Create a graphics context for new channel */ +- ret = pgraph->create_context(chan); +- if (ret) { +- nouveau_channel_free(chan); +- return ret; ++ if (dev_priv->card_type < NV_50) { ++ ret = pgraph->create_context(chan); ++ if (ret) { ++ nouveau_channel_put(&chan); ++ return ret; ++ } + } + + /* Construct inital RAMFC for new channel */ + ret = pfifo->create_context(chan); + if (ret) { +- nouveau_channel_free(chan); ++ nouveau_channel_put(&chan); + return ret; + } + +@@ -225,83 +230,121 @@ + if (!ret) + ret = nouveau_fence_channel_init(chan); + if (ret) { +- nouveau_channel_free(chan); ++ nouveau_channel_put(&chan); + return ret; + } + + nouveau_debugfs_channel_init(chan); + +- NV_INFO(dev, "%s: initialised FIFO %d\n", __func__, channel); ++ NV_DEBUG(dev, "channel %d initialised\n", chan->id); + *chan_ret = chan; + return 0; + } + +-/* stops a fifo */ ++struct nouveau_channel * ++nouveau_channel_get_unlocked(struct nouveau_channel *ref) ++{ ++ struct nouveau_channel *chan = NULL; ++ ++ if (likely(ref && atomic_inc_not_zero(&ref->users))) ++ nouveau_channel_ref(ref, &chan); ++ ++ return chan; ++} ++ ++struct nouveau_channel * ++nouveau_channel_get(struct drm_device *dev, struct drm_file *file_priv, int id) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_channel *chan; ++ unsigned long flags; ++ ++ spin_lock_irqsave(&dev_priv->channels.lock, flags); ++ chan = nouveau_channel_get_unlocked(dev_priv->channels.ptr[id]); ++ spin_unlock_irqrestore(&dev_priv->channels.lock, flags); ++ ++ if (unlikely(!chan)) ++ return ERR_PTR(-EINVAL); ++ ++ if (unlikely(file_priv && chan->file_priv != file_priv)) { ++ nouveau_channel_put_unlocked(&chan); ++ return ERR_PTR(-EINVAL); ++ } ++ ++ mutex_lock(&chan->mutex); ++ return chan; ++} ++ + void +-nouveau_channel_free(struct nouveau_channel *chan) ++nouveau_channel_put_unlocked(struct nouveau_channel **pchan) + { ++ struct nouveau_channel *chan = *pchan; + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; +- struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; + struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; ++ struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; ++ struct nouveau_crypt_engine *pcrypt = &dev_priv->engine.crypt; + unsigned long flags; + int ret; + +- NV_INFO(dev, "%s: freeing fifo %d\n", __func__, chan->id); ++ /* decrement the refcount, and we're done if there's still refs */ ++ if (likely(!atomic_dec_and_test(&chan->users))) { ++ nouveau_channel_ref(NULL, pchan); ++ return; ++ } + ++ /* noone wants the channel anymore */ ++ NV_DEBUG(dev, "freeing channel %d\n", chan->id); + nouveau_debugfs_channel_fini(chan); + +- /* Give outstanding push buffers a chance to complete */ ++ /* give it chance to idle */ + nouveau_fence_update(chan); + if (chan->fence.sequence != chan->fence.sequence_ack) { + struct nouveau_fence *fence = NULL; + + ret = nouveau_fence_new(chan, &fence, true); + if (ret == 0) { +- ret = nouveau_fence_wait(fence, NULL, false, false); +- nouveau_fence_unref((void *)&fence); ++ ret = nouveau_fence_wait(fence, false, false); ++ nouveau_fence_unref(&fence); + } + + if (ret) + NV_ERROR(dev, "Failed to idle channel %d.\n", chan->id); + } + +- /* Ensure all outstanding fences are signaled. They should be if the ++ /* ensure all outstanding fences are signaled. they should be if the + * above attempts at idling were OK, but if we failed this'll tell TTM + * we're done with the buffers. + */ + nouveau_fence_channel_fini(chan); + +- /* This will prevent pfifo from switching channels. */ ++ /* boot it off the hardware */ + pfifo->reassign(dev, false); + +- /* We want to give pgraph a chance to idle and get rid of all potential +- * errors. We need to do this before the lock, otherwise the irq handler +- * is unable to process them. ++ /* We want to give pgraph a chance to idle and get rid of all ++ * potential errors. We need to do this without the context ++ * switch lock held, otherwise the irq handler is unable to ++ * process them. + */ + if (pgraph->channel(dev) == chan) + nouveau_wait_for_idle(dev); + +- spin_lock_irqsave(&dev_priv->context_switch_lock, flags); +- +- pgraph->fifo_access(dev, false); +- if (pgraph->channel(dev) == chan) +- pgraph->unload_context(dev); +- pgraph->destroy_context(chan); +- pgraph->fifo_access(dev, true); +- +- if (pfifo->channel_id(dev) == chan->id) { +- pfifo->disable(dev); +- pfifo->unload_context(dev); +- pfifo->enable(dev); +- } ++ /* destroy the engine specific contexts */ + pfifo->destroy_context(chan); ++ pgraph->destroy_context(chan); ++ if (pcrypt->destroy_context) ++ pcrypt->destroy_context(chan); + + pfifo->reassign(dev, true); + +- spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); ++ /* aside from its resources, the channel should now be dead, ++ * remove it from the channel list ++ */ ++ spin_lock_irqsave(&dev_priv->channels.lock, flags); ++ nouveau_channel_ref(NULL, &dev_priv->channels.ptr[chan->id]); ++ spin_unlock_irqrestore(&dev_priv->channels.lock, flags); + +- /* Release the channel's resources */ ++ /* destroy any resources the channel owned */ + nouveau_gpuobj_ref(NULL, &chan->pushbuf); + if (chan->pushbuf_bo) { + nouveau_bo_unmap(chan->pushbuf_bo); +@@ -310,44 +353,62 @@ + } + nouveau_gpuobj_channel_takedown(chan); + nouveau_notifier_takedown_channel(chan); ++ ++ nouveau_channel_ref(NULL, pchan); ++} ++ ++void ++nouveau_channel_put(struct nouveau_channel **pchan) ++{ ++ mutex_unlock(&(*pchan)->mutex); ++ nouveau_channel_put_unlocked(pchan); ++} ++ ++static void ++nouveau_channel_del(struct kref *ref) ++{ ++ struct nouveau_channel *chan = ++ container_of(ref, struct nouveau_channel, ref); ++ + if (chan->user) + iounmap(chan->user); + +- dev_priv->fifos[chan->id] = NULL; + kfree(chan); + } + ++void ++nouveau_channel_ref(struct nouveau_channel *chan, ++ struct nouveau_channel **pchan) ++{ ++ if (chan) ++ kref_get(&chan->ref); ++ ++ if (*pchan) ++ kref_put(&(*pchan)->ref, nouveau_channel_del); ++ ++ *pchan = chan; ++} ++ + /* cleans up all the fifos from file_priv */ + void + nouveau_channel_cleanup(struct drm_device *dev, struct drm_file *file_priv) + { + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_engine *engine = &dev_priv->engine; ++ struct nouveau_channel *chan; + int i; + + NV_DEBUG(dev, "clearing FIFO enables from file_priv\n"); + for (i = 0; i < engine->fifo.channels; i++) { +- struct nouveau_channel *chan = dev_priv->fifos[i]; ++ chan = nouveau_channel_get(dev, file_priv, i); ++ if (IS_ERR(chan)) ++ continue; + +- if (chan && chan->file_priv == file_priv) +- nouveau_channel_free(chan); ++ atomic_dec(&chan->users); ++ nouveau_channel_put(&chan); + } + } + +-int +-nouveau_channel_owner(struct drm_device *dev, struct drm_file *file_priv, +- int channel) +-{ +- struct drm_nouveau_private *dev_priv = dev->dev_private; +- struct nouveau_engine *engine = &dev_priv->engine; +- +- if (channel >= engine->fifo.channels) +- return 0; +- if (dev_priv->fifos[channel] == NULL) +- return 0; +- +- return (dev_priv->fifos[channel]->file_priv == file_priv); +-} + + /*********************************** + * ioctls wrapping the functions +@@ -395,24 +456,26 @@ + /* Named memory object area */ + ret = drm_gem_handle_create(file_priv, chan->notifier_bo->gem, + &init->notifier_handle); +- if (ret) { +- nouveau_channel_free(chan); +- return ret; +- } + +- return 0; ++ if (ret == 0) ++ atomic_inc(&chan->users); /* userspace reference */ ++ nouveau_channel_put(&chan); ++ return ret; + } + + static int + nouveau_ioctl_fifo_free(struct drm_device *dev, void *data, + struct drm_file *file_priv) + { +- struct drm_nouveau_channel_free *cfree = data; ++ struct drm_nouveau_channel_free *req = data; + struct nouveau_channel *chan; + +- NOUVEAU_GET_USER_CHANNEL_WITH_RETURN(cfree->channel, file_priv, chan); ++ chan = nouveau_channel_get(dev, file_priv, req->channel); ++ if (IS_ERR(chan)) ++ return PTR_ERR(chan); + +- nouveau_channel_free(chan); ++ atomic_dec(&chan->users); ++ nouveau_channel_put(&chan); + return 0; + } + +@@ -421,18 +484,18 @@ + ***********************************/ + + struct drm_ioctl_desc nouveau_ioctls[] = { +- DRM_IOCTL_DEF_DRV(NOUVEAU_GETPARAM, nouveau_ioctl_getparam, DRM_AUTH), +- DRM_IOCTL_DEF_DRV(NOUVEAU_SETPARAM, nouveau_ioctl_setparam, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), +- DRM_IOCTL_DEF_DRV(NOUVEAU_CHANNEL_ALLOC, nouveau_ioctl_fifo_alloc, DRM_AUTH), +- DRM_IOCTL_DEF_DRV(NOUVEAU_CHANNEL_FREE, nouveau_ioctl_fifo_free, DRM_AUTH), +- DRM_IOCTL_DEF_DRV(NOUVEAU_GROBJ_ALLOC, nouveau_ioctl_grobj_alloc, DRM_AUTH), +- DRM_IOCTL_DEF_DRV(NOUVEAU_NOTIFIEROBJ_ALLOC, nouveau_ioctl_notifier_alloc, DRM_AUTH), +- DRM_IOCTL_DEF_DRV(NOUVEAU_GPUOBJ_FREE, nouveau_ioctl_gpuobj_free, DRM_AUTH), +- DRM_IOCTL_DEF_DRV(NOUVEAU_GEM_NEW, nouveau_gem_ioctl_new, DRM_AUTH), +- DRM_IOCTL_DEF_DRV(NOUVEAU_GEM_PUSHBUF, nouveau_gem_ioctl_pushbuf, DRM_AUTH), +- DRM_IOCTL_DEF_DRV(NOUVEAU_GEM_CPU_PREP, nouveau_gem_ioctl_cpu_prep, DRM_AUTH), +- DRM_IOCTL_DEF_DRV(NOUVEAU_GEM_CPU_FINI, nouveau_gem_ioctl_cpu_fini, DRM_AUTH), +- DRM_IOCTL_DEF_DRV(NOUVEAU_GEM_INFO, nouveau_gem_ioctl_info, DRM_AUTH), ++ DRM_IOCTL_DEF_DRV(NOUVEAU_GETPARAM, nouveau_ioctl_getparam, DRM_UNLOCKED|DRM_AUTH), ++ DRM_IOCTL_DEF_DRV(NOUVEAU_SETPARAM, nouveau_ioctl_setparam, DRM_UNLOCKED|DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), ++ DRM_IOCTL_DEF_DRV(NOUVEAU_CHANNEL_ALLOC, nouveau_ioctl_fifo_alloc, DRM_UNLOCKED|DRM_AUTH), ++ DRM_IOCTL_DEF_DRV(NOUVEAU_CHANNEL_FREE, nouveau_ioctl_fifo_free, DRM_UNLOCKED|DRM_AUTH), ++ DRM_IOCTL_DEF_DRV(NOUVEAU_GROBJ_ALLOC, nouveau_ioctl_grobj_alloc, DRM_UNLOCKED|DRM_AUTH), ++ DRM_IOCTL_DEF_DRV(NOUVEAU_NOTIFIEROBJ_ALLOC, nouveau_ioctl_notifier_alloc, DRM_UNLOCKED|DRM_AUTH), ++ DRM_IOCTL_DEF_DRV(NOUVEAU_GPUOBJ_FREE, nouveau_ioctl_gpuobj_free, DRM_UNLOCKED|DRM_AUTH), ++ DRM_IOCTL_DEF_DRV(NOUVEAU_GEM_NEW, nouveau_gem_ioctl_new, DRM_UNLOCKED|DRM_AUTH), ++ DRM_IOCTL_DEF_DRV(NOUVEAU_GEM_PUSHBUF, nouveau_gem_ioctl_pushbuf, DRM_UNLOCKED|DRM_AUTH), ++ DRM_IOCTL_DEF_DRV(NOUVEAU_GEM_CPU_PREP, nouveau_gem_ioctl_cpu_prep, DRM_UNLOCKED|DRM_AUTH), ++ DRM_IOCTL_DEF_DRV(NOUVEAU_GEM_CPU_FINI, nouveau_gem_ioctl_cpu_fini, DRM_UNLOCKED|DRM_AUTH), ++ DRM_IOCTL_DEF_DRV(NOUVEAU_GEM_INFO, nouveau_gem_ioctl_info, DRM_UNLOCKED|DRM_AUTH), + }; + + int nouveau_max_ioctl = DRM_ARRAY_SIZE(nouveau_ioctls); +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_connector.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_connector.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.c 2010-11-12 06:18:06.000000000 +0100 +@@ -37,6 +37,8 @@ + #include "nouveau_connector.h" + #include "nouveau_hw.h" + ++static void nouveau_connector_hotplug(void *, int); ++ + static struct nouveau_encoder * + find_encoder_by_type(struct drm_connector *connector, int type) + { +@@ -94,22 +96,30 @@ + } + + static void +-nouveau_connector_destroy(struct drm_connector *drm_connector) ++nouveau_connector_destroy(struct drm_connector *connector) + { +- struct nouveau_connector *nv_connector = +- nouveau_connector(drm_connector); ++ struct nouveau_connector *nv_connector = nouveau_connector(connector); ++ struct drm_nouveau_private *dev_priv; ++ struct nouveau_gpio_engine *pgpio; + struct drm_device *dev; + + if (!nv_connector) + return; + + dev = nv_connector->base.dev; ++ dev_priv = dev->dev_private; + NV_DEBUG_KMS(dev, "\n"); + ++ pgpio = &dev_priv->engine.gpio; ++ if (pgpio->irq_unregister) { ++ pgpio->irq_unregister(dev, nv_connector->dcb->gpio_tag, ++ nouveau_connector_hotplug, connector); ++ } ++ + kfree(nv_connector->edid); +- drm_sysfs_connector_remove(drm_connector); +- drm_connector_cleanup(drm_connector); +- kfree(drm_connector); ++ drm_sysfs_connector_remove(connector); ++ drm_connector_cleanup(connector); ++ kfree(connector); + } + + static struct nouveau_i2c_chan * +@@ -281,7 +291,7 @@ + nv_encoder = find_encoder_by_type(connector, OUTPUT_ANALOG); + if (!nv_encoder && !nouveau_tv_disable) + nv_encoder = find_encoder_by_type(connector, OUTPUT_TV); +- if (nv_encoder) { ++ if (nv_encoder && force) { + struct drm_encoder *encoder = to_drm_encoder(nv_encoder); + struct drm_encoder_helper_funcs *helper = + encoder->helper_private; +@@ -641,11 +651,28 @@ + return ret; + } + ++static unsigned ++get_tmds_link_bandwidth(struct drm_connector *connector) ++{ ++ struct nouveau_connector *nv_connector = nouveau_connector(connector); ++ struct drm_nouveau_private *dev_priv = connector->dev->dev_private; ++ struct dcb_entry *dcb = nv_connector->detected_encoder->dcb; ++ ++ if (dcb->location != DCB_LOC_ON_CHIP || ++ dev_priv->chipset >= 0x46) ++ return 165000; ++ else if (dev_priv->chipset >= 0x40) ++ return 155000; ++ else if (dev_priv->chipset >= 0x18) ++ return 135000; ++ else ++ return 112000; ++} ++ + static int + nouveau_connector_mode_valid(struct drm_connector *connector, + struct drm_display_mode *mode) + { +- struct drm_nouveau_private *dev_priv = connector->dev->dev_private; + struct nouveau_connector *nv_connector = nouveau_connector(connector); + struct nouveau_encoder *nv_encoder = nv_connector->detected_encoder; + struct drm_encoder *encoder = to_drm_encoder(nv_encoder); +@@ -663,11 +690,9 @@ + max_clock = 400000; + break; + case OUTPUT_TMDS: +- if ((dev_priv->card_type >= NV_50 && !nouveau_duallink) || +- !nv_encoder->dcb->duallink_possible) +- max_clock = 165000; +- else +- max_clock = 330000; ++ max_clock = get_tmds_link_bandwidth(connector); ++ if (nouveau_duallink && nv_encoder->dcb->duallink_possible) ++ max_clock *= 2; + break; + case OUTPUT_ANALOG: + max_clock = nv_encoder->dcb->crtconf.maxfreq; +@@ -709,44 +734,6 @@ + return NULL; + } + +-void +-nouveau_connector_set_polling(struct drm_connector *connector) +-{ +- struct drm_device *dev = connector->dev; +- struct drm_nouveau_private *dev_priv = dev->dev_private; +- struct drm_crtc *crtc; +- bool spare_crtc = false; +- +- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) +- spare_crtc |= !crtc->enabled; +- +- connector->polled = 0; +- +- switch (connector->connector_type) { +- case DRM_MODE_CONNECTOR_VGA: +- case DRM_MODE_CONNECTOR_TV: +- if (dev_priv->card_type >= NV_50 || +- (nv_gf4_disp_arch(dev) && spare_crtc)) +- connector->polled = DRM_CONNECTOR_POLL_CONNECT; +- break; +- +- case DRM_MODE_CONNECTOR_DVII: +- case DRM_MODE_CONNECTOR_DVID: +- case DRM_MODE_CONNECTOR_HDMIA: +- case DRM_MODE_CONNECTOR_DisplayPort: +- case DRM_MODE_CONNECTOR_eDP: +- if (dev_priv->card_type >= NV_50) +- connector->polled = DRM_CONNECTOR_POLL_HPD; +- else if (connector->connector_type == DRM_MODE_CONNECTOR_DVID || +- spare_crtc) +- connector->polled = DRM_CONNECTOR_POLL_CONNECT; +- break; +- +- default: +- break; +- } +-} +- + static const struct drm_connector_helper_funcs + nouveau_connector_helper_funcs = { + .get_modes = nouveau_connector_get_modes, +@@ -783,6 +770,7 @@ + { + const struct drm_connector_funcs *funcs = &nouveau_connector_funcs; + struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_gpio_engine *pgpio = &dev_priv->engine.gpio; + struct nouveau_connector *nv_connector = NULL; + struct dcb_connector_table_entry *dcb = NULL; + struct drm_connector *connector; +@@ -872,6 +860,7 @@ + dev->mode_config.scaling_mode_property, + nv_connector->scaling_mode); + } ++ connector->polled = DRM_CONNECTOR_POLL_CONNECT; + /* fall-through */ + case DCB_CONNECTOR_TV_0: + case DCB_CONNECTOR_TV_1: +@@ -888,10 +877,20 @@ + dev->mode_config.dithering_mode_property, + nv_connector->use_dithering ? + DRM_MODE_DITHERING_ON : DRM_MODE_DITHERING_OFF); ++ ++ if (dcb->type != DCB_CONNECTOR_LVDS) { ++ if (dev_priv->card_type >= NV_50) ++ connector->polled = DRM_CONNECTOR_POLL_HPD; ++ else ++ connector->polled = DRM_CONNECTOR_POLL_CONNECT; ++ } + break; + } + +- nouveau_connector_set_polling(connector); ++ if (pgpio->irq_register) { ++ pgpio->irq_register(dev, nv_connector->dcb->gpio_tag, ++ nouveau_connector_hotplug, connector); ++ } + + drm_sysfs_connector_add(connector); + dcb->drm = connector; +@@ -903,3 +902,29 @@ + return ERR_PTR(ret); + + } ++ ++static void ++nouveau_connector_hotplug(void *data, int plugged) ++{ ++ struct drm_connector *connector = data; ++ struct drm_device *dev = connector->dev; ++ ++ NV_INFO(dev, "%splugged %s\n", plugged ? "" : "un", ++ drm_get_connector_name(connector)); ++ ++ if (connector->encoder && connector->encoder->crtc && ++ connector->encoder->crtc->enabled) { ++ struct nouveau_encoder *nv_encoder = nouveau_encoder(connector->encoder); ++ struct drm_encoder_helper_funcs *helper = ++ connector->encoder->helper_private; ++ ++ if (nv_encoder->dcb->type == OUTPUT_DP) { ++ if (plugged) ++ helper->dpms(connector->encoder, DRM_MODE_DPMS_ON); ++ else ++ helper->dpms(connector->encoder, DRM_MODE_DPMS_OFF); ++ } ++ } ++ ++ drm_helper_hpd_irq_event(dev); ++} +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_connector.h linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.h +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_connector.h 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.h 2010-11-12 06:18:06.000000000 +0100 +@@ -52,9 +52,6 @@ + struct drm_connector * + nouveau_connector_create(struct drm_device *, int index); + +-void +-nouveau_connector_set_polling(struct drm_connector *); +- + int + nouveau_connector_bpp(struct drm_connector *); + +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_display.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_display.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_display.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_display.c 2010-11-12 06:18:06.000000000 +0100 +@@ -29,6 +29,9 @@ + #include "nouveau_drv.h" + #include "nouveau_fb.h" + #include "nouveau_fbcon.h" ++#include "nouveau_hw.h" ++#include "nouveau_crtc.h" ++#include "nouveau_dma.h" + + static void + nouveau_user_framebuffer_destroy(struct drm_framebuffer *drm_fb) +@@ -104,3 +107,207 @@ + .output_poll_changed = nouveau_fbcon_output_poll_changed, + }; + ++int ++nouveau_vblank_enable(struct drm_device *dev, int crtc) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ ++ if (dev_priv->card_type >= NV_50) ++ nv_mask(dev, NV50_PDISPLAY_INTR_EN_1, 0, ++ NV50_PDISPLAY_INTR_EN_1_VBLANK_CRTC_(crtc)); ++ else ++ NVWriteCRTC(dev, crtc, NV_PCRTC_INTR_EN_0, ++ NV_PCRTC_INTR_0_VBLANK); ++ ++ return 0; ++} ++ ++void ++nouveau_vblank_disable(struct drm_device *dev, int crtc) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ ++ if (dev_priv->card_type >= NV_50) ++ nv_mask(dev, NV50_PDISPLAY_INTR_EN_1, ++ NV50_PDISPLAY_INTR_EN_1_VBLANK_CRTC_(crtc), 0); ++ else ++ NVWriteCRTC(dev, crtc, NV_PCRTC_INTR_EN_0, 0); ++} ++ ++static int ++nouveau_page_flip_reserve(struct nouveau_bo *old_bo, ++ struct nouveau_bo *new_bo) ++{ ++ int ret; ++ ++ ret = nouveau_bo_pin(new_bo, TTM_PL_FLAG_VRAM); ++ if (ret) ++ return ret; ++ ++ ret = ttm_bo_reserve(&new_bo->bo, false, false, false, 0); ++ if (ret) ++ goto fail; ++ ++ ret = ttm_bo_reserve(&old_bo->bo, false, false, false, 0); ++ if (ret) ++ goto fail_unreserve; ++ ++ return 0; ++ ++fail_unreserve: ++ ttm_bo_unreserve(&new_bo->bo); ++fail: ++ nouveau_bo_unpin(new_bo); ++ return ret; ++} ++ ++static void ++nouveau_page_flip_unreserve(struct nouveau_bo *old_bo, ++ struct nouveau_bo *new_bo, ++ struct nouveau_fence *fence) ++{ ++ nouveau_bo_fence(new_bo, fence); ++ ttm_bo_unreserve(&new_bo->bo); ++ ++ nouveau_bo_fence(old_bo, fence); ++ ttm_bo_unreserve(&old_bo->bo); ++ ++ nouveau_bo_unpin(old_bo); ++} ++ ++static int ++nouveau_page_flip_emit(struct nouveau_channel *chan, ++ struct nouveau_bo *old_bo, ++ struct nouveau_bo *new_bo, ++ struct nouveau_page_flip_state *s, ++ struct nouveau_fence **pfence) ++{ ++ struct drm_device *dev = chan->dev; ++ unsigned long flags; ++ int ret; ++ ++ /* Queue it to the pending list */ ++ spin_lock_irqsave(&dev->event_lock, flags); ++ list_add_tail(&s->head, &chan->nvsw.flip); ++ spin_unlock_irqrestore(&dev->event_lock, flags); ++ ++ /* Synchronize with the old framebuffer */ ++ ret = nouveau_fence_sync(old_bo->bo.sync_obj, chan); ++ if (ret) ++ goto fail; ++ ++ /* Emit the pageflip */ ++ ret = RING_SPACE(chan, 2); ++ if (ret) ++ goto fail; ++ ++ BEGIN_RING(chan, NvSubSw, NV_SW_PAGE_FLIP, 1); ++ OUT_RING(chan, 0); ++ FIRE_RING(chan); ++ ++ ret = nouveau_fence_new(chan, pfence, true); ++ if (ret) ++ goto fail; ++ ++ return 0; ++fail: ++ spin_lock_irqsave(&dev->event_lock, flags); ++ list_del(&s->head); ++ spin_unlock_irqrestore(&dev->event_lock, flags); ++ return ret; ++} ++ ++int ++nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb, ++ struct drm_pending_vblank_event *event) ++{ ++ struct drm_device *dev = crtc->dev; ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_bo *old_bo = nouveau_framebuffer(crtc->fb)->nvbo; ++ struct nouveau_bo *new_bo = nouveau_framebuffer(fb)->nvbo; ++ struct nouveau_page_flip_state *s; ++ struct nouveau_channel *chan; ++ struct nouveau_fence *fence; ++ int ret; ++ ++ if (dev_priv->engine.graph.accel_blocked) ++ return -ENODEV; ++ ++ s = kzalloc(sizeof(*s), GFP_KERNEL); ++ if (!s) ++ return -ENOMEM; ++ ++ /* Don't let the buffers go away while we flip */ ++ ret = nouveau_page_flip_reserve(old_bo, new_bo); ++ if (ret) ++ goto fail_free; ++ ++ /* Initialize a page flip struct */ ++ *s = (struct nouveau_page_flip_state) ++ { { }, s->event, nouveau_crtc(crtc)->index, ++ fb->bits_per_pixel, fb->pitch, crtc->x, crtc->y, ++ new_bo->bo.offset }; ++ ++ /* Choose the channel the flip will be handled in */ ++ chan = nouveau_fence_channel(new_bo->bo.sync_obj); ++ if (!chan) ++ chan = nouveau_channel_get_unlocked(dev_priv->channel); ++ mutex_lock(&chan->mutex); ++ ++ /* Emit a page flip */ ++ ret = nouveau_page_flip_emit(chan, old_bo, new_bo, s, &fence); ++ nouveau_channel_put(&chan); ++ if (ret) ++ goto fail_unreserve; ++ ++ /* Update the crtc struct and cleanup */ ++ crtc->fb = fb; ++ ++ nouveau_page_flip_unreserve(old_bo, new_bo, fence); ++ nouveau_fence_unref(&fence); ++ return 0; ++ ++fail_unreserve: ++ nouveau_page_flip_unreserve(old_bo, new_bo, NULL); ++fail_free: ++ kfree(s); ++ return ret; ++} ++ ++int ++nouveau_finish_page_flip(struct nouveau_channel *chan, ++ struct nouveau_page_flip_state *ps) ++{ ++ struct drm_device *dev = chan->dev; ++ struct nouveau_page_flip_state *s; ++ unsigned long flags; ++ ++ spin_lock_irqsave(&dev->event_lock, flags); ++ ++ if (list_empty(&chan->nvsw.flip)) { ++ NV_ERROR(dev, "Unexpected pageflip in channel %d.\n", chan->id); ++ spin_unlock_irqrestore(&dev->event_lock, flags); ++ return -EINVAL; ++ } ++ ++ s = list_first_entry(&chan->nvsw.flip, ++ struct nouveau_page_flip_state, head); ++ if (s->event) { ++ struct drm_pending_vblank_event *e = s->event; ++ struct timeval now; ++ ++ do_gettimeofday(&now); ++ e->event.sequence = 0; ++ e->event.tv_sec = now.tv_sec; ++ e->event.tv_usec = now.tv_usec; ++ list_add_tail(&e->base.link, &e->base.file_priv->event_list); ++ wake_up_interruptible(&e->base.file_priv->event_wait); ++ } ++ ++ list_del(&s->head); ++ *ps = *s; ++ kfree(s); ++ ++ spin_unlock_irqrestore(&dev->event_lock, flags); ++ return 0; ++} +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_dp.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_dp.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_dp.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_dp.c 2010-11-12 06:18:06.000000000 +0100 +@@ -279,7 +279,7 @@ + struct bit_displayport_encoder_table *dpe; + int dpe_headerlen; + uint8_t config[4], status[3]; +- bool cr_done, cr_max_vs, eq_done; ++ bool cr_done, cr_max_vs, eq_done, hpd_state; + int ret = 0, i, tries, voltage; + + NV_DEBUG_KMS(dev, "link training!!\n"); +@@ -297,7 +297,7 @@ + /* disable hotplug detect, this flips around on some panels during + * link training. + */ +- pgpio->irq_enable(dev, nv_connector->dcb->gpio_tag, false); ++ hpd_state = pgpio->irq_enable(dev, nv_connector->dcb->gpio_tag, false); + + if (dpe->script0) { + NV_DEBUG_KMS(dev, "SOR-%d: running DP script 0\n", nv_encoder->or); +@@ -439,7 +439,7 @@ + } + + /* re-enable hotplug detect */ +- pgpio->irq_enable(dev, nv_connector->dcb->gpio_tag, true); ++ pgpio->irq_enable(dev, nv_connector->dcb->gpio_tag, hpd_state); + + return eq_done; + } +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.c 2010-11-12 06:18:06.000000000 +0100 +@@ -115,6 +115,10 @@ + int nouveau_perflvl_wr; + module_param_named(perflvl_wr, nouveau_perflvl_wr, int, 0400); + ++MODULE_PARM_DESC(msi, "Enable MSI (default: off)\n"); ++int nouveau_msi; ++module_param_named(msi, nouveau_msi, int, 0400); ++ + int nouveau_fbpercrtc; + #if 0 + module_param_named(fbpercrtc, nouveau_fbpercrtc, int, 0400); +@@ -195,15 +199,14 @@ + for (i = 0; i < pfifo->channels; i++) { + struct nouveau_fence *fence = NULL; + +- chan = dev_priv->fifos[i]; +- if (!chan || (dev_priv->card_type >= NV_50 && +- chan == dev_priv->fifos[0])) ++ chan = dev_priv->channels.ptr[i]; ++ if (!chan || !chan->pushbuf_bo) + continue; + + ret = nouveau_fence_new(chan, &fence, true); + if (ret == 0) { +- ret = nouveau_fence_wait(fence, NULL, false, false); +- nouveau_fence_unref((void *)&fence); ++ ret = nouveau_fence_wait(fence, false, false); ++ nouveau_fence_unref(&fence); + } + + if (ret) { +@@ -219,17 +222,17 @@ + pfifo->unload_context(dev); + pgraph->unload_context(dev); + +- NV_INFO(dev, "Suspending GPU objects...\n"); +- ret = nouveau_gpuobj_suspend(dev); ++ ret = pinstmem->suspend(dev); + if (ret) { + NV_ERROR(dev, "... failed: %d\n", ret); + goto out_abort; + } + +- ret = pinstmem->suspend(dev); ++ NV_INFO(dev, "Suspending GPU objects...\n"); ++ ret = nouveau_gpuobj_suspend(dev); + if (ret) { + NV_ERROR(dev, "... failed: %d\n", ret); +- nouveau_gpuobj_suspend_cleanup(dev); ++ pinstmem->resume(dev); + goto out_abort; + } + +@@ -294,17 +297,18 @@ + } + } + ++ NV_INFO(dev, "Restoring GPU objects...\n"); ++ nouveau_gpuobj_resume(dev); ++ + NV_INFO(dev, "Reinitialising engines...\n"); + engine->instmem.resume(dev); + engine->mc.init(dev); + engine->timer.init(dev); + engine->fb.init(dev); + engine->graph.init(dev); ++ engine->crypt.init(dev); + engine->fifo.init(dev); + +- NV_INFO(dev, "Restoring GPU objects...\n"); +- nouveau_gpuobj_resume(dev); +- + nouveau_irq_postinstall(dev); + + /* Re-write SKIPS, they'll have been lost over the suspend */ +@@ -313,7 +317,7 @@ + int j; + + for (i = 0; i < dev_priv->engine.fifo.channels; i++) { +- chan = dev_priv->fifos[i]; ++ chan = dev_priv->channels.ptr[i]; + if (!chan || !chan->pushbuf_bo) + continue; + +@@ -393,6 +397,9 @@ + .irq_postinstall = nouveau_irq_postinstall, + .irq_uninstall = nouveau_irq_uninstall, + .irq_handler = nouveau_irq_handler, ++ .get_vblank_counter = drm_vblank_count, ++ .enable_vblank = nouveau_vblank_enable, ++ .disable_vblank = nouveau_vblank_disable, + .reclaim_buffers = drm_core_reclaim_buffers, + .ioctls = nouveau_ioctls, + .fops = { +@@ -403,6 +410,7 @@ + .mmap = nouveau_ttm_mmap, + .poll = drm_poll, + .fasync = drm_fasync, ++ .read = drm_read, + #if defined(CONFIG_COMPAT) + .compat_ioctl = nouveau_compat_ioctl, + #endif +@@ -448,6 +456,12 @@ + if (!nouveau_modeset) + return 0; + ++#if defined(CONFIG_FRAMEBUFFER_CONSOLE_MODULE) ++ request_module("fbcon"); ++#elif !defined(CONFIG_FRAMEBUFFER_CONSOLE) ++ printk(KERN_INFO "CONFIG_FRAMEBUFFER_CONSOLE was not enabled. You won't get any console output.\n"); ++#endif ++ + nouveau_register_dsm_handler(); + return drm_init(&driver); + } +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.h +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.h 2010-11-12 06:18:06.000000000 +0100 +@@ -54,6 +54,7 @@ + #include "nouveau_drm.h" + #include "nouveau_reg.h" + #include "nouveau_bios.h" ++#include "nouveau_util.h" + struct nouveau_grctx; + + #define MAX_NUM_DCB_ENTRIES 16 +@@ -66,10 +67,13 @@ + #define NV50_VM_VRAM_NR (NV50_VM_MAX_VRAM / NV50_VM_BLOCK) + + struct nouveau_tile_reg { +- struct nouveau_fence *fence; +- uint32_t addr; +- uint32_t size; + bool used; ++ uint32_t addr; ++ uint32_t limit; ++ uint32_t pitch; ++ uint32_t zcomp; ++ struct drm_mm_node *tag_mem; ++ struct nouveau_fence *fence; + }; + + struct nouveau_bo { +@@ -96,10 +100,12 @@ + struct nouveau_tile_reg *tile; + + struct drm_gem_object *gem; +- struct drm_file *cpu_filp; + int pin_refcnt; + }; + ++#define nouveau_bo_tile_layout(nvbo) \ ++ ((nvbo)->tile_flags & NOUVEAU_GEM_TILE_LAYOUT_MASK) ++ + static inline struct nouveau_bo * + nouveau_bo(struct ttm_buffer_object *bo) + { +@@ -130,20 +136,26 @@ + + #define NVOBJ_ENGINE_SW 0 + #define NVOBJ_ENGINE_GR 1 +-#define NVOBJ_ENGINE_DISPLAY 2 ++#define NVOBJ_ENGINE_PPP 2 ++#define NVOBJ_ENGINE_COPY 3 ++#define NVOBJ_ENGINE_VP 4 ++#define NVOBJ_ENGINE_CRYPT 5 ++#define NVOBJ_ENGINE_BSP 6 ++#define NVOBJ_ENGINE_DISPLAY 0xcafe0001 + #define NVOBJ_ENGINE_INT 0xdeadbeef + + #define NVOBJ_FLAG_ZERO_ALLOC (1 << 1) + #define NVOBJ_FLAG_ZERO_FREE (1 << 2) ++ ++#define NVOBJ_CINST_GLOBAL 0xdeadbeef ++ + struct nouveau_gpuobj { + struct drm_device *dev; + struct kref refcount; + struct list_head list; + +- struct drm_mm_node *im_pramin; +- struct nouveau_bo *im_backing; +- uint32_t *im_backing_suspend; +- int im_bound; ++ void *node; ++ u32 *suspend; + + uint32_t flags; + +@@ -159,10 +171,29 @@ + void *priv; + }; + ++struct nouveau_page_flip_state { ++ struct list_head head; ++ struct drm_pending_vblank_event *event; ++ int crtc, bpp, pitch, x, y; ++ uint64_t offset; ++}; ++ ++enum nouveau_channel_mutex_class { ++ NOUVEAU_UCHANNEL_MUTEX, ++ NOUVEAU_KCHANNEL_MUTEX ++}; ++ + struct nouveau_channel { + struct drm_device *dev; + int id; + ++ /* references to the channel data structure */ ++ struct kref ref; ++ /* users of the hardware channel resources, the hardware ++ * context will be kicked off when it reaches zero. */ ++ atomic_t users; ++ struct mutex mutex; ++ + /* owner of this fifo */ + struct drm_file *file_priv; + /* mapping of the fifo itself */ +@@ -199,6 +230,7 @@ + /* PGRAPH context */ + /* XXX may be merge 2 pointers as private data ??? */ + struct nouveau_gpuobj *ramin_grctx; ++ struct nouveau_gpuobj *crypt_ctx; + void *pgraph_ctx; + + /* NV50 VM */ +@@ -235,9 +267,11 @@ + + struct { + struct nouveau_gpuobj *vblsem; ++ uint32_t vblsem_head; + uint32_t vblsem_offset; + uint32_t vblsem_rval; + struct list_head vbl_wait; ++ struct list_head flip; + } nvsw; + + struct { +@@ -255,11 +289,11 @@ + int (*suspend)(struct drm_device *dev); + void (*resume)(struct drm_device *dev); + +- int (*populate)(struct drm_device *, struct nouveau_gpuobj *, +- uint32_t *size); +- void (*clear)(struct drm_device *, struct nouveau_gpuobj *); +- int (*bind)(struct drm_device *, struct nouveau_gpuobj *); +- int (*unbind)(struct drm_device *, struct nouveau_gpuobj *); ++ int (*get)(struct nouveau_gpuobj *, u32 size, u32 align); ++ void (*put)(struct nouveau_gpuobj *); ++ int (*map)(struct nouveau_gpuobj *); ++ void (*unmap)(struct nouveau_gpuobj *); ++ + void (*flush)(struct drm_device *); + }; + +@@ -276,12 +310,16 @@ + + struct nouveau_fb_engine { + int num_tiles; ++ struct drm_mm tag_heap; + + int (*init)(struct drm_device *dev); + void (*takedown)(struct drm_device *dev); + +- void (*set_region_tiling)(struct drm_device *dev, int i, uint32_t addr, +- uint32_t size, uint32_t pitch); ++ void (*init_tile_region)(struct drm_device *dev, int i, ++ uint32_t addr, uint32_t size, ++ uint32_t pitch, uint32_t flags); ++ void (*set_tile_region)(struct drm_device *dev, int i); ++ void (*free_tile_region)(struct drm_device *dev, int i); + }; + + struct nouveau_fifo_engine { +@@ -304,23 +342,12 @@ + void (*destroy_context)(struct nouveau_channel *); + int (*load_context)(struct nouveau_channel *); + int (*unload_context)(struct drm_device *); +-}; +- +-struct nouveau_pgraph_object_method { +- int id; +- int (*exec)(struct nouveau_channel *chan, int grclass, int mthd, +- uint32_t data); +-}; +- +-struct nouveau_pgraph_object_class { +- int id; +- bool software; +- struct nouveau_pgraph_object_method *methods; ++ void (*tlb_flush)(struct drm_device *dev); + }; + + struct nouveau_pgraph_engine { +- struct nouveau_pgraph_object_class *grclass; + bool accel_blocked; ++ bool registered; + int grctx_size; + + /* NV2x/NV3x context table (0x400780) */ +@@ -336,9 +363,9 @@ + void (*destroy_context)(struct nouveau_channel *); + int (*load_context)(struct nouveau_channel *); + int (*unload_context)(struct drm_device *); ++ void (*tlb_flush)(struct drm_device *dev); + +- void (*set_region_tiling)(struct drm_device *dev, int i, uint32_t addr, +- uint32_t size, uint32_t pitch); ++ void (*set_tile_region)(struct drm_device *dev, int i); + }; + + struct nouveau_display_engine { +@@ -350,13 +377,19 @@ + }; + + struct nouveau_gpio_engine { ++ void *priv; ++ + int (*init)(struct drm_device *); + void (*takedown)(struct drm_device *); + + int (*get)(struct drm_device *, enum dcb_gpio_tag); + int (*set)(struct drm_device *, enum dcb_gpio_tag, int state); + +- void (*irq_enable)(struct drm_device *, enum dcb_gpio_tag, bool on); ++ int (*irq_register)(struct drm_device *, enum dcb_gpio_tag, ++ void (*)(void *, int), void *); ++ void (*irq_unregister)(struct drm_device *, enum dcb_gpio_tag, ++ void (*)(void *, int), void *); ++ bool (*irq_enable)(struct drm_device *, enum dcb_gpio_tag, bool on); + }; + + struct nouveau_pm_voltage_level { +@@ -432,6 +465,7 @@ + struct nouveau_pm_level *cur; + + struct device *hwmon; ++ struct notifier_block acpi_nb; + + int (*clock_get)(struct drm_device *, u32 id); + void *(*clock_pre)(struct drm_device *, struct nouveau_pm_level *, +@@ -444,6 +478,16 @@ + int (*temp_get)(struct drm_device *); + }; + ++struct nouveau_crypt_engine { ++ bool registered; ++ ++ int (*init)(struct drm_device *); ++ void (*takedown)(struct drm_device *); ++ int (*create_context)(struct nouveau_channel *); ++ void (*destroy_context)(struct nouveau_channel *); ++ void (*tlb_flush)(struct drm_device *dev); ++}; ++ + struct nouveau_engine { + struct nouveau_instmem_engine instmem; + struct nouveau_mc_engine mc; +@@ -454,6 +498,7 @@ + struct nouveau_display_engine display; + struct nouveau_gpio_engine gpio; + struct nouveau_pm_engine pm; ++ struct nouveau_crypt_engine crypt; + }; + + struct nouveau_pll_vals { +@@ -485,13 +530,13 @@ + }; + + struct nv04_crtc_reg { +- unsigned char MiscOutReg; /* */ ++ unsigned char MiscOutReg; + uint8_t CRTC[0xa0]; + uint8_t CR58[0x10]; + uint8_t Sequencer[5]; + uint8_t Graphics[9]; + uint8_t Attribute[21]; +- unsigned char DAC[768]; /* Internal Colorlookuptable */ ++ unsigned char DAC[768]; + + /* PCRTC regs */ + uint32_t fb_start; +@@ -539,43 +584,9 @@ + }; + + struct nv04_mode_state { +- uint32_t bpp; +- uint32_t width; +- uint32_t height; +- uint32_t interlace; +- uint32_t repaint0; +- uint32_t repaint1; +- uint32_t screen; +- uint32_t scale; +- uint32_t dither; +- uint32_t extra; +- uint32_t fifo; +- uint32_t pixel; +- uint32_t horiz; +- int arbitration0; +- int arbitration1; +- uint32_t pll; +- uint32_t pllB; +- uint32_t vpll; +- uint32_t vpll2; +- uint32_t vpllB; +- uint32_t vpll2B; ++ struct nv04_crtc_reg crtc_reg[2]; + uint32_t pllsel; + uint32_t sel_clk; +- uint32_t general; +- uint32_t crtcOwner; +- uint32_t head; +- uint32_t head2; +- uint32_t cursorConfig; +- uint32_t cursor0; +- uint32_t cursor1; +- uint32_t cursor2; +- uint32_t timingH; +- uint32_t timingV; +- uint32_t displayV; +- uint32_t crtcSync; +- +- struct nv04_crtc_reg crtc_reg[2]; + }; + + enum nouveau_card_type { +@@ -606,12 +617,15 @@ + bool ramin_available; + struct drm_mm ramin_heap; + struct list_head gpuobj_list; ++ struct list_head classes; + + struct nouveau_bo *vga_ram; + ++ /* interrupt handling */ ++ void (*irq_handler[32])(struct drm_device *); ++ bool msi_enabled; + struct workqueue_struct *wq; + struct work_struct irq_work; +- struct work_struct hpd_work; + + struct list_head vbl_waiting; + +@@ -628,8 +642,10 @@ + struct nouveau_bo *bo; + } fence; + +- int fifo_alloc_count; +- struct nouveau_channel *fifos[NOUVEAU_MAX_CHANNEL_NR]; ++ struct { ++ spinlock_t lock; ++ struct nouveau_channel *ptr[NOUVEAU_MAX_CHANNEL_NR]; ++ } channels; + + struct nouveau_engine engine; + struct nouveau_channel *channel; +@@ -660,7 +676,10 @@ + } gart_info; + + /* nv10-nv40 tiling regions */ +- struct nouveau_tile_reg tile[NOUVEAU_MAX_TILE_NR]; ++ struct { ++ struct nouveau_tile_reg reg[NOUVEAU_MAX_TILE_NR]; ++ spinlock_t lock; ++ } tile; + + /* VRAM/fb configuration */ + uint64_t vram_size; +@@ -697,6 +716,7 @@ + struct backlight_device *backlight; + + struct nouveau_channel *evo; ++ u32 evo_alloc; + struct { + struct dcb_entry *dcb; + u16 script; +@@ -742,16 +762,6 @@ + return 0; + } + +-#define NOUVEAU_GET_USER_CHANNEL_WITH_RETURN(id, cl, ch) do { \ +- struct drm_nouveau_private *nv = dev->dev_private; \ +- if (!nouveau_channel_owner(dev, (cl), (id))) { \ +- NV_ERROR(dev, "pid %d doesn't own channel %d\n", \ +- DRM_CURRENTPID, (id)); \ +- return -EPERM; \ +- } \ +- (ch) = nv->fifos[(id)]; \ +-} while (0) +- + /* nouveau_drv.c */ + extern int nouveau_agpmode; + extern int nouveau_duallink; +@@ -771,6 +781,7 @@ + extern int nouveau_override_conntype; + extern char *nouveau_perflvl; + extern int nouveau_perflvl_wr; ++extern int nouveau_msi; + + extern int nouveau_pci_suspend(struct pci_dev *pdev, pm_message_t pm_state); + extern int nouveau_pci_resume(struct pci_dev *pdev); +@@ -798,13 +809,12 @@ + extern int nouveau_mem_init_agp(struct drm_device *); + extern int nouveau_mem_reset_agp(struct drm_device *); + extern void nouveau_mem_close(struct drm_device *); +-extern struct nouveau_tile_reg *nv10_mem_set_tiling(struct drm_device *dev, +- uint32_t addr, +- uint32_t size, +- uint32_t pitch); +-extern void nv10_mem_expire_tiling(struct drm_device *dev, +- struct nouveau_tile_reg *tile, +- struct nouveau_fence *fence); ++extern struct nouveau_tile_reg *nv10_mem_set_tiling( ++ struct drm_device *dev, uint32_t addr, uint32_t size, ++ uint32_t pitch, uint32_t flags); ++extern void nv10_mem_put_tile_region(struct drm_device *dev, ++ struct nouveau_tile_reg *tile, ++ struct nouveau_fence *fence); + extern int nv50_mem_vm_bind_linear(struct drm_device *, uint64_t virt, + uint32_t size, uint32_t flags, + uint64_t phys); +@@ -826,21 +836,43 @@ + extern struct drm_ioctl_desc nouveau_ioctls[]; + extern int nouveau_max_ioctl; + extern void nouveau_channel_cleanup(struct drm_device *, struct drm_file *); +-extern int nouveau_channel_owner(struct drm_device *, struct drm_file *, +- int channel); + extern int nouveau_channel_alloc(struct drm_device *dev, + struct nouveau_channel **chan, + struct drm_file *file_priv, + uint32_t fb_ctxdma, uint32_t tt_ctxdma); +-extern void nouveau_channel_free(struct nouveau_channel *); ++extern struct nouveau_channel * ++nouveau_channel_get_unlocked(struct nouveau_channel *); ++extern struct nouveau_channel * ++nouveau_channel_get(struct drm_device *, struct drm_file *, int id); ++extern void nouveau_channel_put_unlocked(struct nouveau_channel **); ++extern void nouveau_channel_put(struct nouveau_channel **); ++extern void nouveau_channel_ref(struct nouveau_channel *chan, ++ struct nouveau_channel **pchan); + + /* nouveau_object.c */ ++#define NVOBJ_CLASS(d,c,e) do { \ ++ int ret = nouveau_gpuobj_class_new((d), (c), NVOBJ_ENGINE_##e); \ ++ if (ret) \ ++ return ret; \ ++} while(0) ++ ++#define NVOBJ_MTHD(d,c,m,e) do { \ ++ int ret = nouveau_gpuobj_mthd_new((d), (c), (m), (e)); \ ++ if (ret) \ ++ return ret; \ ++} while(0) ++ + extern int nouveau_gpuobj_early_init(struct drm_device *); + extern int nouveau_gpuobj_init(struct drm_device *); + extern void nouveau_gpuobj_takedown(struct drm_device *); + extern int nouveau_gpuobj_suspend(struct drm_device *dev); +-extern void nouveau_gpuobj_suspend_cleanup(struct drm_device *dev); + extern void nouveau_gpuobj_resume(struct drm_device *dev); ++extern int nouveau_gpuobj_class_new(struct drm_device *, u32 class, u32 eng); ++extern int nouveau_gpuobj_mthd_new(struct drm_device *, u32 class, u32 mthd, ++ int (*exec)(struct nouveau_channel *, ++ u32 class, u32 mthd, u32 data)); ++extern int nouveau_gpuobj_mthd_call(struct nouveau_channel *, u32, u32, u32); ++extern int nouveau_gpuobj_mthd_call2(struct drm_device *, int, u32, u32, u32); + extern int nouveau_gpuobj_channel_init(struct nouveau_channel *, + uint32_t vram_h, uint32_t tt_h); + extern void nouveau_gpuobj_channel_takedown(struct nouveau_channel *); +@@ -861,15 +893,18 @@ + uint32_t *o_ret); + extern int nouveau_gpuobj_gr_new(struct nouveau_channel *, int class, + struct nouveau_gpuobj **); +-extern int nouveau_gpuobj_sw_new(struct nouveau_channel *, int class, +- struct nouveau_gpuobj **); + extern int nouveau_ioctl_grobj_alloc(struct drm_device *, void *data, + struct drm_file *); + extern int nouveau_ioctl_gpuobj_free(struct drm_device *, void *data, + struct drm_file *); + + /* nouveau_irq.c */ ++extern int nouveau_irq_init(struct drm_device *); ++extern void nouveau_irq_fini(struct drm_device *); + extern irqreturn_t nouveau_irq_handler(DRM_IRQ_ARGS); ++extern void nouveau_irq_register(struct drm_device *, int status_bit, ++ void (*)(struct drm_device *)); ++extern void nouveau_irq_unregister(struct drm_device *, int status_bit); + extern void nouveau_irq_preinstall(struct drm_device *); + extern int nouveau_irq_postinstall(struct drm_device *); + extern void nouveau_irq_uninstall(struct drm_device *); +@@ -989,18 +1024,25 @@ + /* nv10_fb.c */ + extern int nv10_fb_init(struct drm_device *); + extern void nv10_fb_takedown(struct drm_device *); +-extern void nv10_fb_set_region_tiling(struct drm_device *, int, uint32_t, +- uint32_t, uint32_t); ++extern void nv10_fb_init_tile_region(struct drm_device *dev, int i, ++ uint32_t addr, uint32_t size, ++ uint32_t pitch, uint32_t flags); ++extern void nv10_fb_set_tile_region(struct drm_device *dev, int i); ++extern void nv10_fb_free_tile_region(struct drm_device *dev, int i); + + /* nv30_fb.c */ + extern int nv30_fb_init(struct drm_device *); + extern void nv30_fb_takedown(struct drm_device *); ++extern void nv30_fb_init_tile_region(struct drm_device *dev, int i, ++ uint32_t addr, uint32_t size, ++ uint32_t pitch, uint32_t flags); ++extern void nv30_fb_free_tile_region(struct drm_device *dev, int i); + + /* nv40_fb.c */ + extern int nv40_fb_init(struct drm_device *); + extern void nv40_fb_takedown(struct drm_device *); +-extern void nv40_fb_set_region_tiling(struct drm_device *, int, uint32_t, +- uint32_t, uint32_t); ++extern void nv40_fb_set_tile_region(struct drm_device *dev, int i); ++ + /* nv50_fb.c */ + extern int nv50_fb_init(struct drm_device *); + extern void nv50_fb_takedown(struct drm_device *); +@@ -1012,6 +1054,7 @@ + + /* nv04_fifo.c */ + extern int nv04_fifo_init(struct drm_device *); ++extern void nv04_fifo_fini(struct drm_device *); + extern void nv04_fifo_disable(struct drm_device *); + extern void nv04_fifo_enable(struct drm_device *); + extern bool nv04_fifo_reassign(struct drm_device *, bool); +@@ -1021,19 +1064,18 @@ + extern void nv04_fifo_destroy_context(struct nouveau_channel *); + extern int nv04_fifo_load_context(struct nouveau_channel *); + extern int nv04_fifo_unload_context(struct drm_device *); ++extern void nv04_fifo_isr(struct drm_device *); + + /* nv10_fifo.c */ + extern int nv10_fifo_init(struct drm_device *); + extern int nv10_fifo_channel_id(struct drm_device *); + extern int nv10_fifo_create_context(struct nouveau_channel *); +-extern void nv10_fifo_destroy_context(struct nouveau_channel *); + extern int nv10_fifo_load_context(struct nouveau_channel *); + extern int nv10_fifo_unload_context(struct drm_device *); + + /* nv40_fifo.c */ + extern int nv40_fifo_init(struct drm_device *); + extern int nv40_fifo_create_context(struct nouveau_channel *); +-extern void nv40_fifo_destroy_context(struct nouveau_channel *); + extern int nv40_fifo_load_context(struct nouveau_channel *); + extern int nv40_fifo_unload_context(struct drm_device *); + +@@ -1045,6 +1087,7 @@ + extern void nv50_fifo_destroy_context(struct nouveau_channel *); + extern int nv50_fifo_load_context(struct nouveau_channel *); + extern int nv50_fifo_unload_context(struct drm_device *); ++extern void nv50_fifo_tlb_flush(struct drm_device *dev); + + /* nvc0_fifo.c */ + extern int nvc0_fifo_init(struct drm_device *); +@@ -1060,7 +1103,6 @@ + extern int nvc0_fifo_unload_context(struct drm_device *); + + /* nv04_graph.c */ +-extern struct nouveau_pgraph_object_class nv04_graph_grclass[]; + extern int nv04_graph_init(struct drm_device *); + extern void nv04_graph_takedown(struct drm_device *); + extern void nv04_graph_fifo_access(struct drm_device *, bool); +@@ -1069,10 +1111,11 @@ + extern void nv04_graph_destroy_context(struct nouveau_channel *); + extern int nv04_graph_load_context(struct nouveau_channel *); + extern int nv04_graph_unload_context(struct drm_device *); +-extern void nv04_graph_context_switch(struct drm_device *); ++extern int nv04_graph_mthd_page_flip(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data); ++extern struct nouveau_bitfield nv04_graph_nsource[]; + + /* nv10_graph.c */ +-extern struct nouveau_pgraph_object_class nv10_graph_grclass[]; + extern int nv10_graph_init(struct drm_device *); + extern void nv10_graph_takedown(struct drm_device *); + extern struct nouveau_channel *nv10_graph_channel(struct drm_device *); +@@ -1080,13 +1123,11 @@ + extern void nv10_graph_destroy_context(struct nouveau_channel *); + extern int nv10_graph_load_context(struct nouveau_channel *); + extern int nv10_graph_unload_context(struct drm_device *); +-extern void nv10_graph_context_switch(struct drm_device *); +-extern void nv10_graph_set_region_tiling(struct drm_device *, int, uint32_t, +- uint32_t, uint32_t); ++extern void nv10_graph_set_tile_region(struct drm_device *dev, int i); ++extern struct nouveau_bitfield nv10_graph_intr[]; ++extern struct nouveau_bitfield nv10_graph_nstatus[]; + + /* nv20_graph.c */ +-extern struct nouveau_pgraph_object_class nv20_graph_grclass[]; +-extern struct nouveau_pgraph_object_class nv30_graph_grclass[]; + extern int nv20_graph_create_context(struct nouveau_channel *); + extern void nv20_graph_destroy_context(struct nouveau_channel *); + extern int nv20_graph_load_context(struct nouveau_channel *); +@@ -1094,11 +1135,9 @@ + extern int nv20_graph_init(struct drm_device *); + extern void nv20_graph_takedown(struct drm_device *); + extern int nv30_graph_init(struct drm_device *); +-extern void nv20_graph_set_region_tiling(struct drm_device *, int, uint32_t, +- uint32_t, uint32_t); ++extern void nv20_graph_set_tile_region(struct drm_device *dev, int i); + + /* nv40_graph.c */ +-extern struct nouveau_pgraph_object_class nv40_graph_grclass[]; + extern int nv40_graph_init(struct drm_device *); + extern void nv40_graph_takedown(struct drm_device *); + extern struct nouveau_channel *nv40_graph_channel(struct drm_device *); +@@ -1107,11 +1146,9 @@ + extern int nv40_graph_load_context(struct nouveau_channel *); + extern int nv40_graph_unload_context(struct drm_device *); + extern void nv40_grctx_init(struct nouveau_grctx *); +-extern void nv40_graph_set_region_tiling(struct drm_device *, int, uint32_t, +- uint32_t, uint32_t); ++extern void nv40_graph_set_tile_region(struct drm_device *dev, int i); + + /* nv50_graph.c */ +-extern struct nouveau_pgraph_object_class nv50_graph_grclass[]; + extern int nv50_graph_init(struct drm_device *); + extern void nv50_graph_takedown(struct drm_device *); + extern void nv50_graph_fifo_access(struct drm_device *, bool); +@@ -1120,8 +1157,9 @@ + extern void nv50_graph_destroy_context(struct nouveau_channel *); + extern int nv50_graph_load_context(struct nouveau_channel *); + extern int nv50_graph_unload_context(struct drm_device *); +-extern void nv50_graph_context_switch(struct drm_device *); + extern int nv50_grctx_init(struct nouveau_grctx *); ++extern void nv50_graph_tlb_flush(struct drm_device *dev); ++extern void nv86_graph_tlb_flush(struct drm_device *dev); + + /* nvc0_graph.c */ + extern int nvc0_graph_init(struct drm_device *); +@@ -1133,16 +1171,22 @@ + extern int nvc0_graph_load_context(struct nouveau_channel *); + extern int nvc0_graph_unload_context(struct drm_device *); + ++/* nv84_crypt.c */ ++extern int nv84_crypt_init(struct drm_device *dev); ++extern void nv84_crypt_fini(struct drm_device *dev); ++extern int nv84_crypt_create_context(struct nouveau_channel *); ++extern void nv84_crypt_destroy_context(struct nouveau_channel *); ++extern void nv84_crypt_tlb_flush(struct drm_device *dev); ++ + /* nv04_instmem.c */ + extern int nv04_instmem_init(struct drm_device *); + extern void nv04_instmem_takedown(struct drm_device *); + extern int nv04_instmem_suspend(struct drm_device *); + extern void nv04_instmem_resume(struct drm_device *); +-extern int nv04_instmem_populate(struct drm_device *, struct nouveau_gpuobj *, +- uint32_t *size); +-extern void nv04_instmem_clear(struct drm_device *, struct nouveau_gpuobj *); +-extern int nv04_instmem_bind(struct drm_device *, struct nouveau_gpuobj *); +-extern int nv04_instmem_unbind(struct drm_device *, struct nouveau_gpuobj *); ++extern int nv04_instmem_get(struct nouveau_gpuobj *, u32 size, u32 align); ++extern void nv04_instmem_put(struct nouveau_gpuobj *); ++extern int nv04_instmem_map(struct nouveau_gpuobj *); ++extern void nv04_instmem_unmap(struct nouveau_gpuobj *); + extern void nv04_instmem_flush(struct drm_device *); + + /* nv50_instmem.c */ +@@ -1150,11 +1194,10 @@ + extern void nv50_instmem_takedown(struct drm_device *); + extern int nv50_instmem_suspend(struct drm_device *); + extern void nv50_instmem_resume(struct drm_device *); +-extern int nv50_instmem_populate(struct drm_device *, struct nouveau_gpuobj *, +- uint32_t *size); +-extern void nv50_instmem_clear(struct drm_device *, struct nouveau_gpuobj *); +-extern int nv50_instmem_bind(struct drm_device *, struct nouveau_gpuobj *); +-extern int nv50_instmem_unbind(struct drm_device *, struct nouveau_gpuobj *); ++extern int nv50_instmem_get(struct nouveau_gpuobj *, u32 size, u32 align); ++extern void nv50_instmem_put(struct nouveau_gpuobj *); ++extern int nv50_instmem_map(struct nouveau_gpuobj *); ++extern void nv50_instmem_unmap(struct nouveau_gpuobj *); + extern void nv50_instmem_flush(struct drm_device *); + extern void nv84_instmem_flush(struct drm_device *); + extern void nv50_vm_flush(struct drm_device *, int engine); +@@ -1164,11 +1207,10 @@ + extern void nvc0_instmem_takedown(struct drm_device *); + extern int nvc0_instmem_suspend(struct drm_device *); + extern void nvc0_instmem_resume(struct drm_device *); +-extern int nvc0_instmem_populate(struct drm_device *, struct nouveau_gpuobj *, +- uint32_t *size); +-extern void nvc0_instmem_clear(struct drm_device *, struct nouveau_gpuobj *); +-extern int nvc0_instmem_bind(struct drm_device *, struct nouveau_gpuobj *); +-extern int nvc0_instmem_unbind(struct drm_device *, struct nouveau_gpuobj *); ++extern int nvc0_instmem_get(struct nouveau_gpuobj *, u32 size, u32 align); ++extern void nvc0_instmem_put(struct nouveau_gpuobj *); ++extern int nvc0_instmem_map(struct nouveau_gpuobj *); ++extern void nvc0_instmem_unmap(struct nouveau_gpuobj *); + extern void nvc0_instmem_flush(struct drm_device *); + + /* nv04_mc.c */ +@@ -1239,7 +1281,7 @@ + extern void nouveau_bo_wr16(struct nouveau_bo *nvbo, unsigned index, u16 val); + extern u32 nouveau_bo_rd32(struct nouveau_bo *nvbo, unsigned index); + extern void nouveau_bo_wr32(struct nouveau_bo *nvbo, unsigned index, u32 val); +-extern int nouveau_bo_sync_gpu(struct nouveau_bo *, struct nouveau_channel *); ++extern void nouveau_bo_fence(struct nouveau_bo *, struct nouveau_fence *); + + /* nouveau_fence.c */ + struct nouveau_fence; +@@ -1255,12 +1297,35 @@ + void (*work)(void *priv, bool signalled), + void *priv); + struct nouveau_channel *nouveau_fence_channel(struct nouveau_fence *); +-extern bool nouveau_fence_signalled(void *obj, void *arg); +-extern int nouveau_fence_wait(void *obj, void *arg, bool lazy, bool intr); ++ ++extern bool __nouveau_fence_signalled(void *obj, void *arg); ++extern int __nouveau_fence_wait(void *obj, void *arg, bool lazy, bool intr); ++extern int __nouveau_fence_flush(void *obj, void *arg); ++extern void __nouveau_fence_unref(void **obj); ++extern void *__nouveau_fence_ref(void *obj); ++ ++static inline bool nouveau_fence_signalled(struct nouveau_fence *obj) ++{ ++ return __nouveau_fence_signalled(obj, NULL); ++} ++static inline int ++nouveau_fence_wait(struct nouveau_fence *obj, bool lazy, bool intr) ++{ ++ return __nouveau_fence_wait(obj, NULL, lazy, intr); ++} + extern int nouveau_fence_sync(struct nouveau_fence *, struct nouveau_channel *); +-extern int nouveau_fence_flush(void *obj, void *arg); +-extern void nouveau_fence_unref(void **obj); +-extern void *nouveau_fence_ref(void *obj); ++static inline int nouveau_fence_flush(struct nouveau_fence *obj) ++{ ++ return __nouveau_fence_flush(obj, NULL); ++} ++static inline void nouveau_fence_unref(struct nouveau_fence **obj) ++{ ++ __nouveau_fence_unref((void **)obj); ++} ++static inline struct nouveau_fence *nouveau_fence_ref(struct nouveau_fence *obj) ++{ ++ return __nouveau_fence_ref(obj); ++} + + /* nouveau_gem.c */ + extern int nouveau_gem_new(struct drm_device *, struct nouveau_channel *, +@@ -1280,15 +1345,28 @@ + extern int nouveau_gem_ioctl_info(struct drm_device *, void *, + struct drm_file *); + ++/* nouveau_display.c */ ++int nouveau_vblank_enable(struct drm_device *dev, int crtc); ++void nouveau_vblank_disable(struct drm_device *dev, int crtc); ++int nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb, ++ struct drm_pending_vblank_event *event); ++int nouveau_finish_page_flip(struct nouveau_channel *, ++ struct nouveau_page_flip_state *); ++ + /* nv10_gpio.c */ + int nv10_gpio_get(struct drm_device *dev, enum dcb_gpio_tag tag); + int nv10_gpio_set(struct drm_device *dev, enum dcb_gpio_tag tag, int state); + + /* nv50_gpio.c */ + int nv50_gpio_init(struct drm_device *dev); ++void nv50_gpio_fini(struct drm_device *dev); + int nv50_gpio_get(struct drm_device *dev, enum dcb_gpio_tag tag); + int nv50_gpio_set(struct drm_device *dev, enum dcb_gpio_tag tag, int state); +-void nv50_gpio_irq_enable(struct drm_device *, enum dcb_gpio_tag, bool on); ++int nv50_gpio_irq_register(struct drm_device *, enum dcb_gpio_tag, ++ void (*)(void *, int), void *); ++void nv50_gpio_irq_unregister(struct drm_device *, enum dcb_gpio_tag, ++ void (*)(void *, int), void *); ++bool nv50_gpio_irq_enable(struct drm_device *, enum dcb_gpio_tag, bool on); + + /* nv50_calc. */ + int nv50_calc_pll(struct drm_device *, struct pll_lims *, int clk, +@@ -1478,5 +1556,6 @@ + #define NV_SW_VBLSEM_OFFSET 0x00000400 + #define NV_SW_VBLSEM_RELEASE_VALUE 0x00000404 + #define NV_SW_VBLSEM_RELEASE 0x00000408 ++#define NV_SW_PAGE_FLIP 0x00000500 + + #endif /* __NOUVEAU_DRV_H__ */ +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_fbcon.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_fbcon.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.c 2010-11-12 06:18:06.000000000 +0100 +@@ -49,6 +49,96 @@ + #include "nouveau_fbcon.h" + #include "nouveau_dma.h" + ++static void ++nouveau_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect) ++{ ++ struct nouveau_fbdev *nfbdev = info->par; ++ struct drm_device *dev = nfbdev->dev; ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ int ret; ++ ++ if (info->state != FBINFO_STATE_RUNNING) ++ return; ++ ++ ret = -ENODEV; ++ if (!in_interrupt() && !(info->flags & FBINFO_HWACCEL_DISABLED) && ++ mutex_trylock(&dev_priv->channel->mutex)) { ++ if (dev_priv->card_type < NV_50) ++ ret = nv04_fbcon_fillrect(info, rect); ++ else ++ if (dev_priv->card_type < NV_C0) ++ ret = nv50_fbcon_fillrect(info, rect); ++ mutex_unlock(&dev_priv->channel->mutex); ++ } ++ ++ if (ret == 0) ++ return; ++ ++ if (ret != -ENODEV) ++ nouveau_fbcon_gpu_lockup(info); ++ cfb_fillrect(info, rect); ++} ++ ++static void ++nouveau_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *image) ++{ ++ struct nouveau_fbdev *nfbdev = info->par; ++ struct drm_device *dev = nfbdev->dev; ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ int ret; ++ ++ if (info->state != FBINFO_STATE_RUNNING) ++ return; ++ ++ ret = -ENODEV; ++ if (!in_interrupt() && !(info->flags & FBINFO_HWACCEL_DISABLED) && ++ mutex_trylock(&dev_priv->channel->mutex)) { ++ if (dev_priv->card_type < NV_50) ++ ret = nv04_fbcon_copyarea(info, image); ++ else ++ if (dev_priv->card_type < NV_C0) ++ ret = nv50_fbcon_copyarea(info, image); ++ mutex_unlock(&dev_priv->channel->mutex); ++ } ++ ++ if (ret == 0) ++ return; ++ ++ if (ret != -ENODEV) ++ nouveau_fbcon_gpu_lockup(info); ++ cfb_copyarea(info, image); ++} ++ ++static void ++nouveau_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) ++{ ++ struct nouveau_fbdev *nfbdev = info->par; ++ struct drm_device *dev = nfbdev->dev; ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ int ret; ++ ++ if (info->state != FBINFO_STATE_RUNNING) ++ return; ++ ++ ret = -ENODEV; ++ if (!in_interrupt() && !(info->flags & FBINFO_HWACCEL_DISABLED) && ++ mutex_trylock(&dev_priv->channel->mutex)) { ++ if (dev_priv->card_type < NV_50) ++ ret = nv04_fbcon_imageblit(info, image); ++ else ++ if (dev_priv->card_type < NV_C0) ++ ret = nv50_fbcon_imageblit(info, image); ++ mutex_unlock(&dev_priv->channel->mutex); ++ } ++ ++ if (ret == 0) ++ return; ++ ++ if (ret != -ENODEV) ++ nouveau_fbcon_gpu_lockup(info); ++ cfb_imageblit(info, image); ++} ++ + static int + nouveau_fbcon_sync(struct fb_info *info) + { +@@ -58,12 +148,17 @@ + struct nouveau_channel *chan = dev_priv->channel; + int ret, i; + +- if (!chan || !chan->accel_done || ++ if (!chan || !chan->accel_done || in_interrupt() || + info->state != FBINFO_STATE_RUNNING || + info->flags & FBINFO_HWACCEL_DISABLED) + return 0; + +- if (RING_SPACE(chan, 4)) { ++ if (!mutex_trylock(&chan->mutex)) ++ return 0; ++ ++ ret = RING_SPACE(chan, 4); ++ if (ret) { ++ mutex_unlock(&chan->mutex); + nouveau_fbcon_gpu_lockup(info); + return 0; + } +@@ -74,6 +169,7 @@ + OUT_RING(chan, 0); + nouveau_bo_wr32(chan->notifier_bo, chan->m2mf_ntfy + 3, 0xffffffff); + FIRE_RING(chan); ++ mutex_unlock(&chan->mutex); + + ret = -EBUSY; + for (i = 0; i < 100000; i++) { +@@ -97,24 +193,9 @@ + .owner = THIS_MODULE, + .fb_check_var = drm_fb_helper_check_var, + .fb_set_par = drm_fb_helper_set_par, +- .fb_fillrect = cfb_fillrect, +- .fb_copyarea = cfb_copyarea, +- .fb_imageblit = cfb_imageblit, +- .fb_sync = nouveau_fbcon_sync, +- .fb_pan_display = drm_fb_helper_pan_display, +- .fb_blank = drm_fb_helper_blank, +- .fb_setcmap = drm_fb_helper_setcmap, +- .fb_debug_enter = drm_fb_helper_debug_enter, +- .fb_debug_leave = drm_fb_helper_debug_leave, +-}; +- +-static struct fb_ops nv04_fbcon_ops = { +- .owner = THIS_MODULE, +- .fb_check_var = drm_fb_helper_check_var, +- .fb_set_par = drm_fb_helper_set_par, +- .fb_fillrect = nv04_fbcon_fillrect, +- .fb_copyarea = nv04_fbcon_copyarea, +- .fb_imageblit = nv04_fbcon_imageblit, ++ .fb_fillrect = nouveau_fbcon_fillrect, ++ .fb_copyarea = nouveau_fbcon_copyarea, ++ .fb_imageblit = nouveau_fbcon_imageblit, + .fb_sync = nouveau_fbcon_sync, + .fb_pan_display = drm_fb_helper_pan_display, + .fb_blank = drm_fb_helper_blank, +@@ -123,14 +204,13 @@ + .fb_debug_leave = drm_fb_helper_debug_leave, + }; + +-static struct fb_ops nv50_fbcon_ops = { ++static struct fb_ops nouveau_fbcon_sw_ops = { + .owner = THIS_MODULE, + .fb_check_var = drm_fb_helper_check_var, + .fb_set_par = drm_fb_helper_set_par, +- .fb_fillrect = nv50_fbcon_fillrect, +- .fb_copyarea = nv50_fbcon_copyarea, +- .fb_imageblit = nv50_fbcon_imageblit, +- .fb_sync = nouveau_fbcon_sync, ++ .fb_fillrect = cfb_fillrect, ++ .fb_copyarea = cfb_copyarea, ++ .fb_imageblit = cfb_imageblit, + .fb_pan_display = drm_fb_helper_pan_display, + .fb_blank = drm_fb_helper_blank, + .fb_setcmap = drm_fb_helper_setcmap, +@@ -257,7 +337,7 @@ + FBINFO_HWACCEL_FILLRECT | + FBINFO_HWACCEL_IMAGEBLIT; + info->flags |= FBINFO_CAN_FORCE_OUTPUT; +- info->fbops = &nouveau_fbcon_ops; ++ info->fbops = &nouveau_fbcon_sw_ops; + info->fix.smem_start = dev->mode_config.fb_base + nvbo->bo.offset - + dev_priv->vm_vram_base; + info->fix.smem_len = size; +@@ -285,19 +365,18 @@ + info->pixmap.flags = FB_PIXMAP_SYSTEM; + info->pixmap.scan_align = 1; + ++ mutex_unlock(&dev->struct_mutex); ++ + if (dev_priv->channel && !nouveau_nofbaccel) { +- switch (dev_priv->card_type) { +- case NV_C0: +- break; +- case NV_50: +- nv50_fbcon_accel_init(info); +- info->fbops = &nv50_fbcon_ops; +- break; +- default: +- nv04_fbcon_accel_init(info); +- info->fbops = &nv04_fbcon_ops; +- break; +- }; ++ ret = -ENODEV; ++ if (dev_priv->card_type < NV_50) ++ ret = nv04_fbcon_accel_init(info); ++ else ++ if (dev_priv->card_type < NV_C0) ++ ret = nv50_fbcon_accel_init(info); ++ ++ if (ret == 0) ++ info->fbops = &nouveau_fbcon_ops; + } + + nouveau_fbcon_zfill(dev, nfbdev); +@@ -308,7 +387,6 @@ + nouveau_fb->base.height, + nvbo->bo.offset, nvbo); + +- mutex_unlock(&dev->struct_mutex); + vga_switcheroo_client_fb_set(dev->pdev, info); + return 0; + +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_fbcon.h linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.h +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_fbcon.h 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.h 2010-11-12 06:18:06.000000000 +0100 +@@ -40,13 +40,13 @@ + + void nouveau_fbcon_restore(void); + +-void nv04_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region); +-void nv04_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect); +-void nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image); ++int nv04_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region); ++int nv04_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect); ++int nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image); + int nv04_fbcon_accel_init(struct fb_info *info); +-void nv50_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect); +-void nv50_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region); +-void nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image); ++int nv50_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect); ++int nv50_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region); ++int nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image); + int nv50_fbcon_accel_init(struct fb_info *info); + + void nouveau_fbcon_gpu_lockup(struct fb_info *info); +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_fence.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_fence.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_fence.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_fence.c 2010-11-12 06:18:06.000000000 +0100 +@@ -64,6 +64,7 @@ + struct nouveau_fence *fence = + container_of(ref, struct nouveau_fence, refcount); + ++ nouveau_channel_ref(NULL, &fence->channel); + kfree(fence); + } + +@@ -113,13 +114,13 @@ + if (!fence) + return -ENOMEM; + kref_init(&fence->refcount); +- fence->channel = chan; ++ nouveau_channel_ref(chan, &fence->channel); + + if (emit) + ret = nouveau_fence_emit(fence); + + if (ret) +- nouveau_fence_unref((void *)&fence); ++ nouveau_fence_unref(&fence); + *pfence = fence; + return ret; + } +@@ -127,7 +128,7 @@ + struct nouveau_channel * + nouveau_fence_channel(struct nouveau_fence *fence) + { +- return fence ? fence->channel : NULL; ++ return fence ? nouveau_channel_get_unlocked(fence->channel) : NULL; + } + + int +@@ -182,7 +183,7 @@ + } + + void +-nouveau_fence_unref(void **sync_obj) ++__nouveau_fence_unref(void **sync_obj) + { + struct nouveau_fence *fence = nouveau_fence(*sync_obj); + +@@ -192,7 +193,7 @@ + } + + void * +-nouveau_fence_ref(void *sync_obj) ++__nouveau_fence_ref(void *sync_obj) + { + struct nouveau_fence *fence = nouveau_fence(sync_obj); + +@@ -201,7 +202,7 @@ + } + + bool +-nouveau_fence_signalled(void *sync_obj, void *sync_arg) ++__nouveau_fence_signalled(void *sync_obj, void *sync_arg) + { + struct nouveau_fence *fence = nouveau_fence(sync_obj); + struct nouveau_channel *chan = fence->channel; +@@ -214,13 +215,13 @@ + } + + int +-nouveau_fence_wait(void *sync_obj, void *sync_arg, bool lazy, bool intr) ++__nouveau_fence_wait(void *sync_obj, void *sync_arg, bool lazy, bool intr) + { + unsigned long timeout = jiffies + (3 * DRM_HZ); + int ret = 0; + + while (1) { +- if (nouveau_fence_signalled(sync_obj, sync_arg)) ++ if (__nouveau_fence_signalled(sync_obj, sync_arg)) + break; + + if (time_after_eq(jiffies, timeout)) { +@@ -249,6 +250,7 @@ + { + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_semaphore *sema; ++ int ret; + + if (!USE_SEMA(dev)) + return NULL; +@@ -257,10 +259,14 @@ + if (!sema) + goto fail; + ++ ret = drm_mm_pre_get(&dev_priv->fence.heap); ++ if (ret) ++ goto fail; ++ + spin_lock(&dev_priv->fence.lock); + sema->mem = drm_mm_search_free(&dev_priv->fence.heap, 4, 0, 0); + if (sema->mem) +- sema->mem = drm_mm_get_block(sema->mem, 4, 0); ++ sema->mem = drm_mm_get_block_atomic(sema->mem, 4, 0); + spin_unlock(&dev_priv->fence.lock); + + if (!sema->mem) +@@ -363,7 +369,7 @@ + + kref_get(&sema->ref); + nouveau_fence_work(fence, semaphore_work, sema); +- nouveau_fence_unref((void *)&fence); ++ nouveau_fence_unref(&fence); + + return 0; + } +@@ -375,33 +381,49 @@ + struct nouveau_channel *chan = nouveau_fence_channel(fence); + struct drm_device *dev = wchan->dev; + struct nouveau_semaphore *sema; +- int ret; ++ int ret = 0; + +- if (likely(!fence || chan == wchan || +- nouveau_fence_signalled(fence, NULL))) +- return 0; ++ if (likely(!chan || chan == wchan || ++ nouveau_fence_signalled(fence))) ++ goto out; + + sema = alloc_semaphore(dev); + if (!sema) { + /* Early card or broken userspace, fall back to + * software sync. */ +- return nouveau_fence_wait(fence, NULL, false, false); ++ ret = nouveau_fence_wait(fence, true, false); ++ goto out; ++ } ++ ++ /* try to take chan's mutex, if we can't take it right away ++ * we have to fallback to software sync to prevent locking ++ * order issues ++ */ ++ if (!mutex_trylock(&chan->mutex)) { ++ ret = nouveau_fence_wait(fence, true, false); ++ goto out_unref; + } + + /* Make wchan wait until it gets signalled */ + ret = emit_semaphore(wchan, NV_SW_SEMAPHORE_ACQUIRE, sema); + if (ret) +- goto out; ++ goto out_unlock; + + /* Signal the semaphore from chan */ + ret = emit_semaphore(chan, NV_SW_SEMAPHORE_RELEASE, sema); +-out: ++ ++out_unlock: ++ mutex_unlock(&chan->mutex); ++out_unref: + kref_put(&sema->ref, free_semaphore); ++out: ++ if (chan) ++ nouveau_channel_put_unlocked(&chan); + return ret; + } + + int +-nouveau_fence_flush(void *sync_obj, void *sync_arg) ++__nouveau_fence_flush(void *sync_obj, void *sync_arg) + { + return 0; + } +@@ -415,7 +437,7 @@ + int ret; + + /* Create an NV_SW object for various sync purposes */ +- ret = nouveau_gpuobj_sw_new(chan, NV_SW, &obj); ++ ret = nouveau_gpuobj_gr_new(chan, NV_SW, &obj); + if (ret) + return ret; + +@@ -468,6 +490,8 @@ + { + struct nouveau_fence *tmp, *fence; + ++ spin_lock(&chan->fence.lock); ++ + list_for_each_entry_safe(fence, tmp, &chan->fence.pending, entry) { + fence->signalled = true; + list_del(&fence->entry); +@@ -477,6 +501,8 @@ + + kref_put(&fence->refcount, nouveau_fence_del); + } ++ ++ spin_unlock(&chan->fence.lock); + } + + int +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_gem.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_gem.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_gem.c 2010-11-12 06:18:06.000000000 +0100 +@@ -48,9 +48,6 @@ + return; + nvbo->gem = NULL; + +- if (unlikely(nvbo->cpu_filp)) +- ttm_bo_synccpu_write_release(bo); +- + if (unlikely(nvbo->pin_refcnt)) { + nvbo->pin_refcnt = 1; + nouveau_bo_unpin(nvbo); +@@ -107,23 +104,29 @@ + } + + static bool +-nouveau_gem_tile_flags_valid(struct drm_device *dev, uint32_t tile_flags) { +- switch (tile_flags) { +- case 0x0000: +- case 0x1800: +- case 0x2800: +- case 0x4800: +- case 0x7000: +- case 0x7400: +- case 0x7a00: +- case 0xe000: +- break; +- default: +- NV_ERROR(dev, "bad page flags: 0x%08x\n", tile_flags); +- return false; ++nouveau_gem_tile_flags_valid(struct drm_device *dev, uint32_t tile_flags) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ ++ if (dev_priv->card_type >= NV_50) { ++ switch (tile_flags & NOUVEAU_GEM_TILE_LAYOUT_MASK) { ++ case 0x0000: ++ case 0x1800: ++ case 0x2800: ++ case 0x4800: ++ case 0x7000: ++ case 0x7400: ++ case 0x7a00: ++ case 0xe000: ++ return true; ++ } ++ } else { ++ if (!(tile_flags & NOUVEAU_GEM_TILE_LAYOUT_MASK)) ++ return true; + } + +- return true; ++ NV_ERROR(dev, "bad page flags: 0x%08x\n", tile_flags); ++ return false; + } + + int +@@ -140,11 +143,6 @@ + if (unlikely(dev_priv->ttm.bdev.dev_mapping == NULL)) + dev_priv->ttm.bdev.dev_mapping = dev_priv->dev->dev_mapping; + +- if (req->channel_hint) { +- NOUVEAU_GET_USER_CHANNEL_WITH_RETURN(req->channel_hint, +- file_priv, chan); +- } +- + if (req->info.domain & NOUVEAU_GEM_DOMAIN_VRAM) + flags |= TTM_PL_FLAG_VRAM; + if (req->info.domain & NOUVEAU_GEM_DOMAIN_GART) +@@ -155,10 +153,18 @@ + if (!nouveau_gem_tile_flags_valid(dev, req->info.tile_flags)) + return -EINVAL; + ++ if (req->channel_hint) { ++ chan = nouveau_channel_get(dev, file_priv, req->channel_hint); ++ if (IS_ERR(chan)) ++ return PTR_ERR(chan); ++ } ++ + ret = nouveau_gem_new(dev, chan, req->info.size, req->align, flags, + req->info.tile_mode, req->info.tile_flags, false, + (req->info.domain & NOUVEAU_GEM_DOMAIN_MAPPABLE), + &nvbo); ++ if (chan) ++ nouveau_channel_put(&chan); + if (ret) + return ret; + +@@ -225,15 +231,8 @@ + + list_for_each_safe(entry, tmp, list) { + nvbo = list_entry(entry, struct nouveau_bo, entry); +- if (likely(fence)) { +- struct nouveau_fence *prev_fence; + +- spin_lock(&nvbo->bo.lock); +- prev_fence = nvbo->bo.sync_obj; +- nvbo->bo.sync_obj = nouveau_fence_ref(fence); +- spin_unlock(&nvbo->bo.lock); +- nouveau_fence_unref((void *)&prev_fence); +- } ++ nouveau_bo_fence(nvbo, fence); + + if (unlikely(nvbo->validate_mapped)) { + ttm_bo_kunmap(&nvbo->kmap); +@@ -293,14 +292,15 @@ + return -EINVAL; + } + +- ret = ttm_bo_reserve(&nvbo->bo, false, false, true, sequence); ++ ret = ttm_bo_reserve(&nvbo->bo, true, false, true, sequence); + if (ret) { + validate_fini(op, NULL); +- if (ret == -EAGAIN) +- ret = ttm_bo_wait_unreserved(&nvbo->bo, false); ++ if (unlikely(ret == -EAGAIN)) ++ ret = ttm_bo_wait_unreserved(&nvbo->bo, true); + drm_gem_object_unreference_unlocked(gem); +- if (ret) { +- NV_ERROR(dev, "fail reserve\n"); ++ if (unlikely(ret)) { ++ if (ret != -ERESTARTSYS) ++ NV_ERROR(dev, "fail reserve\n"); + return ret; + } + goto retry; +@@ -325,25 +325,6 @@ + validate_fini(op, NULL); + return -EINVAL; + } +- +- if (unlikely(atomic_read(&nvbo->bo.cpu_writers) > 0)) { +- validate_fini(op, NULL); +- +- if (nvbo->cpu_filp == file_priv) { +- NV_ERROR(dev, "bo %p mapped by process trying " +- "to validate it!\n", nvbo); +- return -EINVAL; +- } +- +- mutex_unlock(&drm_global_mutex); +- ret = ttm_bo_wait_cpu(&nvbo->bo, false); +- mutex_lock(&drm_global_mutex); +- if (ret) { +- NV_ERROR(dev, "fail wait_cpu\n"); +- return ret; +- } +- goto retry; +- } + } + + return 0; +@@ -378,10 +359,11 @@ + + nvbo->channel = (b->read_domains & (1 << 31)) ? NULL : chan; + ret = ttm_bo_validate(&nvbo->bo, &nvbo->placement, +- false, false, false); ++ true, false, false); + nvbo->channel = NULL; + if (unlikely(ret)) { +- NV_ERROR(dev, "fail ttm_validate\n"); ++ if (ret != -ERESTARTSYS) ++ NV_ERROR(dev, "fail ttm_validate\n"); + return ret; + } + +@@ -433,13 +415,15 @@ + + ret = validate_init(chan, file_priv, pbbo, nr_buffers, op); + if (unlikely(ret)) { +- NV_ERROR(dev, "validate_init\n"); ++ if (ret != -ERESTARTSYS) ++ NV_ERROR(dev, "validate_init\n"); + return ret; + } + + ret = validate_list(chan, &op->vram_list, pbbo, user_buffers); + if (unlikely(ret < 0)) { +- NV_ERROR(dev, "validate vram_list\n"); ++ if (ret != -ERESTARTSYS) ++ NV_ERROR(dev, "validate vram_list\n"); + validate_fini(op, NULL); + return ret; + } +@@ -447,7 +431,8 @@ + + ret = validate_list(chan, &op->gart_list, pbbo, user_buffers); + if (unlikely(ret < 0)) { +- NV_ERROR(dev, "validate gart_list\n"); ++ if (ret != -ERESTARTSYS) ++ NV_ERROR(dev, "validate gart_list\n"); + validate_fini(op, NULL); + return ret; + } +@@ -455,7 +440,8 @@ + + ret = validate_list(chan, &op->both_list, pbbo, user_buffers); + if (unlikely(ret < 0)) { +- NV_ERROR(dev, "validate both_list\n"); ++ if (ret != -ERESTARTSYS) ++ NV_ERROR(dev, "validate both_list\n"); + validate_fini(op, NULL); + return ret; + } +@@ -579,7 +565,9 @@ + struct nouveau_fence *fence = NULL; + int i, j, ret = 0, do_reloc = 0; + +- NOUVEAU_GET_USER_CHANNEL_WITH_RETURN(req->channel, file_priv, chan); ++ chan = nouveau_channel_get(dev, file_priv, req->channel); ++ if (IS_ERR(chan)) ++ return PTR_ERR(chan); + + req->vram_available = dev_priv->fb_aper_free; + req->gart_available = dev_priv->gart_info.aper_free; +@@ -589,28 +577,34 @@ + if (unlikely(req->nr_push > NOUVEAU_GEM_MAX_PUSH)) { + NV_ERROR(dev, "pushbuf push count exceeds limit: %d max %d\n", + req->nr_push, NOUVEAU_GEM_MAX_PUSH); ++ nouveau_channel_put(&chan); + return -EINVAL; + } + + if (unlikely(req->nr_buffers > NOUVEAU_GEM_MAX_BUFFERS)) { + NV_ERROR(dev, "pushbuf bo count exceeds limit: %d max %d\n", + req->nr_buffers, NOUVEAU_GEM_MAX_BUFFERS); ++ nouveau_channel_put(&chan); + return -EINVAL; + } + + if (unlikely(req->nr_relocs > NOUVEAU_GEM_MAX_RELOCS)) { + NV_ERROR(dev, "pushbuf reloc count exceeds limit: %d max %d\n", + req->nr_relocs, NOUVEAU_GEM_MAX_RELOCS); ++ nouveau_channel_put(&chan); + return -EINVAL; + } + + push = u_memcpya(req->push, req->nr_push, sizeof(*push)); +- if (IS_ERR(push)) ++ if (IS_ERR(push)) { ++ nouveau_channel_put(&chan); + return PTR_ERR(push); ++ } + + bo = u_memcpya(req->buffers, req->nr_buffers, sizeof(*bo)); + if (IS_ERR(bo)) { + kfree(push); ++ nouveau_channel_put(&chan); + return PTR_ERR(bo); + } + +@@ -633,7 +627,8 @@ + ret = nouveau_gem_pushbuf_validate(chan, file_priv, bo, req->buffers, + req->nr_buffers, &op, &do_reloc); + if (ret) { +- NV_ERROR(dev, "validate: %d\n", ret); ++ if (ret != -ERESTARTSYS) ++ NV_ERROR(dev, "validate: %d\n", ret); + goto out; + } + +@@ -726,7 +721,7 @@ + + out: + validate_fini(&op, fence); +- nouveau_fence_unref((void**)&fence); ++ nouveau_fence_unref(&fence); + kfree(bo); + kfree(push); + +@@ -744,6 +739,7 @@ + req->suffix1 = 0x00000000; + } + ++ nouveau_channel_put(&chan); + return ret; + } + +@@ -775,26 +771,9 @@ + return -ENOENT; + nvbo = nouveau_gem_object(gem); + +- if (nvbo->cpu_filp) { +- if (nvbo->cpu_filp == file_priv) +- goto out; +- +- ret = ttm_bo_wait_cpu(&nvbo->bo, no_wait); +- if (ret) +- goto out; +- } +- +- if (req->flags & NOUVEAU_GEM_CPU_PREP_NOBLOCK) { +- spin_lock(&nvbo->bo.lock); +- ret = ttm_bo_wait(&nvbo->bo, false, false, no_wait); +- spin_unlock(&nvbo->bo.lock); +- } else { +- ret = ttm_bo_synccpu_write_grab(&nvbo->bo, no_wait); +- if (ret == 0) +- nvbo->cpu_filp = file_priv; +- } +- +-out: ++ spin_lock(&nvbo->bo.lock); ++ ret = ttm_bo_wait(&nvbo->bo, true, true, no_wait); ++ spin_unlock(&nvbo->bo.lock); + drm_gem_object_unreference_unlocked(gem); + return ret; + } +@@ -803,26 +782,7 @@ + nouveau_gem_ioctl_cpu_fini(struct drm_device *dev, void *data, + struct drm_file *file_priv) + { +- struct drm_nouveau_gem_cpu_prep *req = data; +- struct drm_gem_object *gem; +- struct nouveau_bo *nvbo; +- int ret = -EINVAL; +- +- gem = drm_gem_object_lookup(dev, file_priv, req->handle); +- if (!gem) +- return -ENOENT; +- nvbo = nouveau_gem_object(gem); +- +- if (nvbo->cpu_filp != file_priv) +- goto out; +- nvbo->cpu_filp = NULL; +- +- ttm_bo_synccpu_write_release(&nvbo->bo); +- ret = 0; +- +-out: +- drm_gem_object_unreference_unlocked(gem); +- return ret; ++ return 0; + } + + int +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_hw.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_hw.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.c 2010-11-12 06:18:06.000000000 +0100 +@@ -519,11 +519,11 @@ + + struct pll_lims pll_lim; + struct nouveau_pll_vals pv; +- uint32_t pllreg = head ? NV_RAMDAC_VPLL2 : NV_PRAMDAC_VPLL_COEFF; ++ enum pll_types pll = head ? PLL_VPLL1 : PLL_VPLL0; + +- if (get_pll_limits(dev, pllreg, &pll_lim)) ++ if (get_pll_limits(dev, pll, &pll_lim)) + return; +- nouveau_hw_get_pllvals(dev, pllreg, &pv); ++ nouveau_hw_get_pllvals(dev, pll, &pv); + + if (pv.M1 >= pll_lim.vco1.min_m && pv.M1 <= pll_lim.vco1.max_m && + pv.N1 >= pll_lim.vco1.min_n && pv.N1 <= pll_lim.vco1.max_n && +@@ -536,7 +536,7 @@ + pv.M1 = pll_lim.vco1.max_m; + pv.N1 = pll_lim.vco1.min_n; + pv.log2P = pll_lim.max_usable_log2p; +- nouveau_hw_setpll(dev, pllreg, &pv); ++ nouveau_hw_setpll(dev, pll_lim.reg, &pv); + } + + /* +@@ -953,7 +953,7 @@ + NVWriteCRTC(dev, head, NV_PCRTC_850, regp->crtc_850); + + reg900 = NVReadRAMDAC(dev, head, NV_PRAMDAC_900); +- if (regp->crtc_cfg == NV_PCRTC_CONFIG_START_ADDRESS_HSYNC) ++ if (regp->crtc_cfg == NV10_PCRTC_CONFIG_START_ADDRESS_HSYNC) + NVWriteRAMDAC(dev, head, NV_PRAMDAC_900, reg900 | 0x10000); + else + NVWriteRAMDAC(dev, head, NV_PRAMDAC_900, reg900 & ~0x10000); +@@ -1017,8 +1017,9 @@ + + NVWriteCRTC(dev, head, NV_PCRTC_START, regp->fb_start); + +- /* Setting 1 on this value gives you interrupts for every vblank period. */ +- NVWriteCRTC(dev, head, NV_PCRTC_INTR_EN_0, 0); ++ /* Enable vblank interrupts. */ ++ NVWriteCRTC(dev, head, NV_PCRTC_INTR_EN_0, ++ (dev->vblank_enabled[head] ? 1 : 0)); + NVWriteCRTC(dev, head, NV_PCRTC_INTR_0, NV_PCRTC_INTR_0_VBLANK); + } + +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_hw.h linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.h +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_hw.h 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.h 2010-11-12 06:18:06.000000000 +0100 +@@ -416,6 +416,25 @@ + } + + static inline void ++nv_set_crtc_base(struct drm_device *dev, int head, uint32_t offset) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ ++ NVWriteCRTC(dev, head, NV_PCRTC_START, offset); ++ ++ if (dev_priv->card_type == NV_04) { ++ /* ++ * Hilarious, the 24th bit doesn't want to stick to ++ * PCRTC_START... ++ */ ++ int cre_heb = NVReadVgaCrtc(dev, head, NV_CIO_CRE_HEB__INDEX); ++ ++ NVWriteVgaCrtc(dev, head, NV_CIO_CRE_HEB__INDEX, ++ (cre_heb & ~0x40) | ((offset >> 18) & 0x40)); ++ } ++} ++ ++static inline void + nv_show_cursor(struct drm_device *dev, int head, bool show) + { + struct drm_nouveau_private *dev_priv = dev->dev_private; +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_i2c.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_i2c.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_i2c.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_i2c.c 2010-11-12 06:18:06.000000000 +0100 +@@ -256,7 +256,7 @@ + if (index >= DCB_MAX_NUM_I2C_ENTRIES) + return NULL; + +- if (dev_priv->chipset >= NV_50 && (i2c->entry & 0x00000100)) { ++ if (dev_priv->card_type >= NV_50 && (i2c->entry & 0x00000100)) { + uint32_t reg = 0xe500, val; + + if (i2c->port_type == 6) { +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_irq.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_irq.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_irq.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_irq.c 2010-11-12 06:18:06.000000000 +0100 +@@ -36,11 +36,7 @@ + #include "nouveau_drv.h" + #include "nouveau_reg.h" + #include "nouveau_ramht.h" +-#include +- +-/* needed for hotplug irq */ +-#include "nouveau_connector.h" +-#include "nv50_display.h" ++#include "nouveau_util.h" + + void + nouveau_irq_preinstall(struct drm_device *dev) +@@ -50,18 +46,19 @@ + /* Master disable */ + nv_wr32(dev, NV03_PMC_INTR_EN_0, 0); + +- if (dev_priv->card_type >= NV_50) { +- INIT_WORK(&dev_priv->irq_work, nv50_display_irq_handler_bh); +- INIT_WORK(&dev_priv->hpd_work, nv50_display_irq_hotplug_bh); +- INIT_LIST_HEAD(&dev_priv->vbl_waiting); +- } ++ INIT_LIST_HEAD(&dev_priv->vbl_waiting); + } + + int + nouveau_irq_postinstall(struct drm_device *dev) + { ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ + /* Master enable */ + nv_wr32(dev, NV03_PMC_INTR_EN_0, NV_PMC_INTR_EN_0_MASTER_ENABLE); ++ if (dev_priv->msi_enabled) ++ nv_wr08(dev, 0x00088068, 0xff); ++ + return 0; + } + +@@ -72,1182 +69,83 @@ + nv_wr32(dev, NV03_PMC_INTR_EN_0, 0); + } + +-static int +-nouveau_call_method(struct nouveau_channel *chan, int class, int mthd, int data) +-{ +- struct drm_nouveau_private *dev_priv = chan->dev->dev_private; +- struct nouveau_pgraph_object_method *grm; +- struct nouveau_pgraph_object_class *grc; +- +- grc = dev_priv->engine.graph.grclass; +- while (grc->id) { +- if (grc->id == class) +- break; +- grc++; +- } +- +- if (grc->id != class || !grc->methods) +- return -ENOENT; +- +- grm = grc->methods; +- while (grm->id) { +- if (grm->id == mthd) +- return grm->exec(chan, class, mthd, data); +- grm++; +- } +- +- return -ENOENT; +-} +- +-static bool +-nouveau_fifo_swmthd(struct nouveau_channel *chan, uint32_t addr, uint32_t data) +-{ +- struct drm_device *dev = chan->dev; +- const int subc = (addr >> 13) & 0x7; +- const int mthd = addr & 0x1ffc; +- +- if (mthd == 0x0000) { +- struct nouveau_gpuobj *gpuobj; +- +- gpuobj = nouveau_ramht_find(chan, data); +- if (!gpuobj) +- return false; +- +- if (gpuobj->engine != NVOBJ_ENGINE_SW) +- return false; +- +- chan->sw_subchannel[subc] = gpuobj->class; +- nv_wr32(dev, NV04_PFIFO_CACHE1_ENGINE, nv_rd32(dev, +- NV04_PFIFO_CACHE1_ENGINE) & ~(0xf << subc * 4)); +- return true; +- } +- +- /* hw object */ +- if (nv_rd32(dev, NV04_PFIFO_CACHE1_ENGINE) & (1 << (subc*4))) +- return false; +- +- if (nouveau_call_method(chan, chan->sw_subchannel[subc], mthd, data)) +- return false; +- +- return true; +-} +- +-static void +-nouveau_fifo_irq_handler(struct drm_device *dev) +-{ +- struct drm_nouveau_private *dev_priv = dev->dev_private; +- struct nouveau_engine *engine = &dev_priv->engine; +- uint32_t status, reassign; +- int cnt = 0; +- +- reassign = nv_rd32(dev, NV03_PFIFO_CACHES) & 1; +- while ((status = nv_rd32(dev, NV03_PFIFO_INTR_0)) && (cnt++ < 100)) { +- struct nouveau_channel *chan = NULL; +- uint32_t chid, get; +- +- nv_wr32(dev, NV03_PFIFO_CACHES, 0); +- +- chid = engine->fifo.channel_id(dev); +- if (chid >= 0 && chid < engine->fifo.channels) +- chan = dev_priv->fifos[chid]; +- get = nv_rd32(dev, NV03_PFIFO_CACHE1_GET); +- +- if (status & NV_PFIFO_INTR_CACHE_ERROR) { +- uint32_t mthd, data; +- int ptr; +- +- /* NV_PFIFO_CACHE1_GET actually goes to 0xffc before +- * wrapping on my G80 chips, but CACHE1 isn't big +- * enough for this much data.. Tests show that it +- * wraps around to the start at GET=0x800.. No clue +- * as to why.. +- */ +- ptr = (get & 0x7ff) >> 2; +- +- if (dev_priv->card_type < NV_40) { +- mthd = nv_rd32(dev, +- NV04_PFIFO_CACHE1_METHOD(ptr)); +- data = nv_rd32(dev, +- NV04_PFIFO_CACHE1_DATA(ptr)); +- } else { +- mthd = nv_rd32(dev, +- NV40_PFIFO_CACHE1_METHOD(ptr)); +- data = nv_rd32(dev, +- NV40_PFIFO_CACHE1_DATA(ptr)); +- } +- +- if (!chan || !nouveau_fifo_swmthd(chan, mthd, data)) { +- NV_INFO(dev, "PFIFO_CACHE_ERROR - Ch %d/%d " +- "Mthd 0x%04x Data 0x%08x\n", +- chid, (mthd >> 13) & 7, mthd & 0x1ffc, +- data); +- } +- +- nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_PUSH, 0); +- nv_wr32(dev, NV03_PFIFO_INTR_0, +- NV_PFIFO_INTR_CACHE_ERROR); +- +- nv_wr32(dev, NV03_PFIFO_CACHE1_PUSH0, +- nv_rd32(dev, NV03_PFIFO_CACHE1_PUSH0) & ~1); +- nv_wr32(dev, NV03_PFIFO_CACHE1_GET, get + 4); +- nv_wr32(dev, NV03_PFIFO_CACHE1_PUSH0, +- nv_rd32(dev, NV03_PFIFO_CACHE1_PUSH0) | 1); +- nv_wr32(dev, NV04_PFIFO_CACHE1_HASH, 0); +- +- nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_PUSH, +- nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_PUSH) | 1); +- nv_wr32(dev, NV04_PFIFO_CACHE1_PULL0, 1); +- +- status &= ~NV_PFIFO_INTR_CACHE_ERROR; +- } +- +- if (status & NV_PFIFO_INTR_DMA_PUSHER) { +- u32 get = nv_rd32(dev, 0x003244); +- u32 put = nv_rd32(dev, 0x003240); +- u32 push = nv_rd32(dev, 0x003220); +- u32 state = nv_rd32(dev, 0x003228); +- +- if (dev_priv->card_type == NV_50) { +- u32 ho_get = nv_rd32(dev, 0x003328); +- u32 ho_put = nv_rd32(dev, 0x003320); +- u32 ib_get = nv_rd32(dev, 0x003334); +- u32 ib_put = nv_rd32(dev, 0x003330); +- +- NV_INFO(dev, "PFIFO_DMA_PUSHER - Ch %d Get 0x%02x%08x " +- "Put 0x%02x%08x IbGet 0x%08x IbPut 0x%08x " +- "State 0x%08x Push 0x%08x\n", +- chid, ho_get, get, ho_put, put, ib_get, ib_put, +- state, push); +- +- /* METHOD_COUNT, in DMA_STATE on earlier chipsets */ +- nv_wr32(dev, 0x003364, 0x00000000); +- if (get != put || ho_get != ho_put) { +- nv_wr32(dev, 0x003244, put); +- nv_wr32(dev, 0x003328, ho_put); +- } else +- if (ib_get != ib_put) { +- nv_wr32(dev, 0x003334, ib_put); +- } +- } else { +- NV_INFO(dev, "PFIFO_DMA_PUSHER - Ch %d Get 0x%08x " +- "Put 0x%08x State 0x%08x Push 0x%08x\n", +- chid, get, put, state, push); +- +- if (get != put) +- nv_wr32(dev, 0x003244, put); +- } +- +- nv_wr32(dev, 0x003228, 0x00000000); +- nv_wr32(dev, 0x003220, 0x00000001); +- nv_wr32(dev, 0x002100, NV_PFIFO_INTR_DMA_PUSHER); +- status &= ~NV_PFIFO_INTR_DMA_PUSHER; +- } +- +- if (status & NV_PFIFO_INTR_SEMAPHORE) { +- uint32_t sem; +- +- status &= ~NV_PFIFO_INTR_SEMAPHORE; +- nv_wr32(dev, NV03_PFIFO_INTR_0, +- NV_PFIFO_INTR_SEMAPHORE); +- +- sem = nv_rd32(dev, NV10_PFIFO_CACHE1_SEMAPHORE); +- nv_wr32(dev, NV10_PFIFO_CACHE1_SEMAPHORE, sem | 0x1); +- +- nv_wr32(dev, NV03_PFIFO_CACHE1_GET, get + 4); +- nv_wr32(dev, NV04_PFIFO_CACHE1_PULL0, 1); +- } +- +- if (dev_priv->card_type == NV_50) { +- if (status & 0x00000010) { +- nv50_fb_vm_trap(dev, 1, "PFIFO_BAR_FAULT"); +- status &= ~0x00000010; +- nv_wr32(dev, 0x002100, 0x00000010); +- } +- } +- +- if (status) { +- NV_INFO(dev, "PFIFO_INTR 0x%08x - Ch %d\n", +- status, chid); +- nv_wr32(dev, NV03_PFIFO_INTR_0, status); +- status = 0; +- } +- +- nv_wr32(dev, NV03_PFIFO_CACHES, reassign); +- } +- +- if (status) { +- NV_INFO(dev, "PFIFO still angry after %d spins, halt\n", cnt); +- nv_wr32(dev, 0x2140, 0); +- nv_wr32(dev, 0x140, 0); +- } +- +- nv_wr32(dev, NV03_PMC_INTR_0, NV_PMC_INTR_0_PFIFO_PENDING); +-} +- +-struct nouveau_bitfield_names { +- uint32_t mask; +- const char *name; +-}; +- +-static struct nouveau_bitfield_names nstatus_names[] = +-{ +- { NV04_PGRAPH_NSTATUS_STATE_IN_USE, "STATE_IN_USE" }, +- { NV04_PGRAPH_NSTATUS_INVALID_STATE, "INVALID_STATE" }, +- { NV04_PGRAPH_NSTATUS_BAD_ARGUMENT, "BAD_ARGUMENT" }, +- { NV04_PGRAPH_NSTATUS_PROTECTION_FAULT, "PROTECTION_FAULT" } +-}; +- +-static struct nouveau_bitfield_names nstatus_names_nv10[] = +-{ +- { NV10_PGRAPH_NSTATUS_STATE_IN_USE, "STATE_IN_USE" }, +- { NV10_PGRAPH_NSTATUS_INVALID_STATE, "INVALID_STATE" }, +- { NV10_PGRAPH_NSTATUS_BAD_ARGUMENT, "BAD_ARGUMENT" }, +- { NV10_PGRAPH_NSTATUS_PROTECTION_FAULT, "PROTECTION_FAULT" } +-}; +- +-static struct nouveau_bitfield_names nsource_names[] = +-{ +- { NV03_PGRAPH_NSOURCE_NOTIFICATION, "NOTIFICATION" }, +- { NV03_PGRAPH_NSOURCE_DATA_ERROR, "DATA_ERROR" }, +- { NV03_PGRAPH_NSOURCE_PROTECTION_ERROR, "PROTECTION_ERROR" }, +- { NV03_PGRAPH_NSOURCE_RANGE_EXCEPTION, "RANGE_EXCEPTION" }, +- { NV03_PGRAPH_NSOURCE_LIMIT_COLOR, "LIMIT_COLOR" }, +- { NV03_PGRAPH_NSOURCE_LIMIT_ZETA, "LIMIT_ZETA" }, +- { NV03_PGRAPH_NSOURCE_ILLEGAL_MTHD, "ILLEGAL_MTHD" }, +- { NV03_PGRAPH_NSOURCE_DMA_R_PROTECTION, "DMA_R_PROTECTION" }, +- { NV03_PGRAPH_NSOURCE_DMA_W_PROTECTION, "DMA_W_PROTECTION" }, +- { NV03_PGRAPH_NSOURCE_FORMAT_EXCEPTION, "FORMAT_EXCEPTION" }, +- { NV03_PGRAPH_NSOURCE_PATCH_EXCEPTION, "PATCH_EXCEPTION" }, +- { NV03_PGRAPH_NSOURCE_STATE_INVALID, "STATE_INVALID" }, +- { NV03_PGRAPH_NSOURCE_DOUBLE_NOTIFY, "DOUBLE_NOTIFY" }, +- { NV03_PGRAPH_NSOURCE_NOTIFY_IN_USE, "NOTIFY_IN_USE" }, +- { NV03_PGRAPH_NSOURCE_METHOD_CNT, "METHOD_CNT" }, +- { NV03_PGRAPH_NSOURCE_BFR_NOTIFICATION, "BFR_NOTIFICATION" }, +- { NV03_PGRAPH_NSOURCE_DMA_VTX_PROTECTION, "DMA_VTX_PROTECTION" }, +- { NV03_PGRAPH_NSOURCE_DMA_WIDTH_A, "DMA_WIDTH_A" }, +- { NV03_PGRAPH_NSOURCE_DMA_WIDTH_B, "DMA_WIDTH_B" }, +-}; +- +-static void +-nouveau_print_bitfield_names_(uint32_t value, +- const struct nouveau_bitfield_names *namelist, +- const int namelist_len) +-{ +- /* +- * Caller must have already printed the KERN_* log level for us. +- * Also the caller is responsible for adding the newline. +- */ +- int i; +- for (i = 0; i < namelist_len; ++i) { +- uint32_t mask = namelist[i].mask; +- if (value & mask) { +- printk(" %s", namelist[i].name); +- value &= ~mask; +- } +- } +- if (value) +- printk(" (unknown bits 0x%08x)", value); +-} +-#define nouveau_print_bitfield_names(val, namelist) \ +- nouveau_print_bitfield_names_((val), (namelist), ARRAY_SIZE(namelist)) +- +-struct nouveau_enum_names { +- uint32_t value; +- const char *name; +-}; +- +-static void +-nouveau_print_enum_names_(uint32_t value, +- const struct nouveau_enum_names *namelist, +- const int namelist_len) +-{ +- /* +- * Caller must have already printed the KERN_* log level for us. +- * Also the caller is responsible for adding the newline. +- */ +- int i; +- for (i = 0; i < namelist_len; ++i) { +- if (value == namelist[i].value) { +- printk("%s", namelist[i].name); +- return; +- } +- } +- printk("unknown value 0x%08x", value); +-} +-#define nouveau_print_enum_names(val, namelist) \ +- nouveau_print_enum_names_((val), (namelist), ARRAY_SIZE(namelist)) +- +-static int +-nouveau_graph_chid_from_grctx(struct drm_device *dev) ++irqreturn_t ++nouveau_irq_handler(DRM_IRQ_ARGS) + { ++ struct drm_device *dev = (struct drm_device *)arg; + struct drm_nouveau_private *dev_priv = dev->dev_private; +- uint32_t inst; ++ unsigned long flags; ++ u32 stat; + int i; + +- if (dev_priv->card_type < NV_40) +- return dev_priv->engine.fifo.channels; +- else +- if (dev_priv->card_type < NV_50) { +- inst = (nv_rd32(dev, 0x40032c) & 0xfffff) << 4; +- +- for (i = 0; i < dev_priv->engine.fifo.channels; i++) { +- struct nouveau_channel *chan = dev_priv->fifos[i]; +- +- if (!chan || !chan->ramin_grctx) +- continue; +- +- if (inst == chan->ramin_grctx->pinst) +- break; +- } +- } else { +- inst = (nv_rd32(dev, 0x40032c) & 0xfffff) << 12; +- +- for (i = 0; i < dev_priv->engine.fifo.channels; i++) { +- struct nouveau_channel *chan = dev_priv->fifos[i]; +- +- if (!chan || !chan->ramin) +- continue; +- +- if (inst == chan->ramin->vinst) +- break; +- } +- } +- +- +- return i; +-} +- +-static int +-nouveau_graph_trapped_channel(struct drm_device *dev, int *channel_ret) +-{ +- struct drm_nouveau_private *dev_priv = dev->dev_private; +- struct nouveau_engine *engine = &dev_priv->engine; +- int channel; +- +- if (dev_priv->card_type < NV_10) +- channel = (nv_rd32(dev, NV04_PGRAPH_TRAPPED_ADDR) >> 24) & 0xf; +- else +- if (dev_priv->card_type < NV_40) +- channel = (nv_rd32(dev, NV04_PGRAPH_TRAPPED_ADDR) >> 20) & 0x1f; +- else +- channel = nouveau_graph_chid_from_grctx(dev); +- +- if (channel >= engine->fifo.channels || !dev_priv->fifos[channel]) { +- NV_ERROR(dev, "AIII, invalid/inactive channel id %d\n", channel); +- return -EINVAL; +- } +- +- *channel_ret = channel; +- return 0; +-} +- +-struct nouveau_pgraph_trap { +- int channel; +- int class; +- int subc, mthd, size; +- uint32_t data, data2; +- uint32_t nsource, nstatus; +-}; +- +-static void +-nouveau_graph_trap_info(struct drm_device *dev, +- struct nouveau_pgraph_trap *trap) +-{ +- struct drm_nouveau_private *dev_priv = dev->dev_private; +- uint32_t address; +- +- trap->nsource = trap->nstatus = 0; +- if (dev_priv->card_type < NV_50) { +- trap->nsource = nv_rd32(dev, NV03_PGRAPH_NSOURCE); +- trap->nstatus = nv_rd32(dev, NV03_PGRAPH_NSTATUS); +- } +- +- if (nouveau_graph_trapped_channel(dev, &trap->channel)) +- trap->channel = -1; +- address = nv_rd32(dev, NV04_PGRAPH_TRAPPED_ADDR); +- +- trap->mthd = address & 0x1FFC; +- trap->data = nv_rd32(dev, NV04_PGRAPH_TRAPPED_DATA); +- if (dev_priv->card_type < NV_10) { +- trap->subc = (address >> 13) & 0x7; +- } else { +- trap->subc = (address >> 16) & 0x7; +- trap->data2 = nv_rd32(dev, NV10_PGRAPH_TRAPPED_DATA_HIGH); +- } +- +- if (dev_priv->card_type < NV_10) +- trap->class = nv_rd32(dev, 0x400180 + trap->subc*4) & 0xFF; +- else if (dev_priv->card_type < NV_40) +- trap->class = nv_rd32(dev, 0x400160 + trap->subc*4) & 0xFFF; +- else if (dev_priv->card_type < NV_50) +- trap->class = nv_rd32(dev, 0x400160 + trap->subc*4) & 0xFFFF; +- else +- trap->class = nv_rd32(dev, 0x400814); +-} +- +-static void +-nouveau_graph_dump_trap_info(struct drm_device *dev, const char *id, +- struct nouveau_pgraph_trap *trap) +-{ +- struct drm_nouveau_private *dev_priv = dev->dev_private; +- uint32_t nsource = trap->nsource, nstatus = trap->nstatus; +- +- if (dev_priv->card_type < NV_50) { +- NV_INFO(dev, "%s - nSource:", id); +- nouveau_print_bitfield_names(nsource, nsource_names); +- printk(", nStatus:"); +- if (dev_priv->card_type < NV_10) +- nouveau_print_bitfield_names(nstatus, nstatus_names); +- else +- nouveau_print_bitfield_names(nstatus, nstatus_names_nv10); +- printk("\n"); +- } +- +- NV_INFO(dev, "%s - Ch %d/%d Class 0x%04x Mthd 0x%04x " +- "Data 0x%08x:0x%08x\n", +- id, trap->channel, trap->subc, +- trap->class, trap->mthd, +- trap->data2, trap->data); +-} +- +-static int +-nouveau_pgraph_intr_swmthd(struct drm_device *dev, +- struct nouveau_pgraph_trap *trap) +-{ +- struct drm_nouveau_private *dev_priv = dev->dev_private; +- +- if (trap->channel < 0 || +- trap->channel >= dev_priv->engine.fifo.channels || +- !dev_priv->fifos[trap->channel]) +- return -ENODEV; +- +- return nouveau_call_method(dev_priv->fifos[trap->channel], +- trap->class, trap->mthd, trap->data); +-} +- +-static inline void +-nouveau_pgraph_intr_notify(struct drm_device *dev, uint32_t nsource) +-{ +- struct nouveau_pgraph_trap trap; +- int unhandled = 0; ++ stat = nv_rd32(dev, NV03_PMC_INTR_0); ++ if (!stat) ++ return IRQ_NONE; + +- nouveau_graph_trap_info(dev, &trap); ++ spin_lock_irqsave(&dev_priv->context_switch_lock, flags); ++ for (i = 0; i < 32 && stat; i++) { ++ if (!(stat & (1 << i)) || !dev_priv->irq_handler[i]) ++ continue; + +- if (nsource & NV03_PGRAPH_NSOURCE_ILLEGAL_MTHD) { +- if (nouveau_pgraph_intr_swmthd(dev, &trap)) +- unhandled = 1; +- } else { +- unhandled = 1; ++ dev_priv->irq_handler[i](dev); ++ stat &= ~(1 << i); + } + +- if (unhandled) +- nouveau_graph_dump_trap_info(dev, "PGRAPH_NOTIFY", &trap); +-} +- +-static DEFINE_RATELIMIT_STATE(nouveau_ratelimit_state, 3 * HZ, 20); +- +-static int nouveau_ratelimit(void) +-{ +- return __ratelimit(&nouveau_ratelimit_state); +-} +- +- +-static inline void +-nouveau_pgraph_intr_error(struct drm_device *dev, uint32_t nsource) +-{ +- struct nouveau_pgraph_trap trap; +- int unhandled = 0; +- +- nouveau_graph_trap_info(dev, &trap); +- trap.nsource = nsource; +- +- if (nsource & NV03_PGRAPH_NSOURCE_ILLEGAL_MTHD) { +- if (nouveau_pgraph_intr_swmthd(dev, &trap)) +- unhandled = 1; +- } else if (nsource & NV03_PGRAPH_NSOURCE_DMA_VTX_PROTECTION) { +- uint32_t v = nv_rd32(dev, 0x402000); +- nv_wr32(dev, 0x402000, v); +- +- /* dump the error anyway for now: it's useful for +- Gallium development */ +- unhandled = 1; +- } else { +- unhandled = 1; +- } ++ if (dev_priv->msi_enabled) ++ nv_wr08(dev, 0x00088068, 0xff); ++ spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); + +- if (unhandled && nouveau_ratelimit()) +- nouveau_graph_dump_trap_info(dev, "PGRAPH_ERROR", &trap); ++ if (stat && nouveau_ratelimit()) ++ NV_ERROR(dev, "PMC - unhandled INTR 0x%08x\n", stat); ++ return IRQ_HANDLED; + } + +-static inline void +-nouveau_pgraph_intr_context_switch(struct drm_device *dev) ++int ++nouveau_irq_init(struct drm_device *dev) + { + struct drm_nouveau_private *dev_priv = dev->dev_private; +- struct nouveau_engine *engine = &dev_priv->engine; +- uint32_t chid; +- +- chid = engine->fifo.channel_id(dev); +- NV_DEBUG(dev, "PGRAPH context switch interrupt channel %x\n", chid); +- +- switch (dev_priv->card_type) { +- case NV_04: +- nv04_graph_context_switch(dev); +- break; +- case NV_10: +- nv10_graph_context_switch(dev); +- break; +- default: +- NV_ERROR(dev, "Context switch not implemented\n"); +- break; +- } +-} +- +-static void +-nouveau_pgraph_irq_handler(struct drm_device *dev) +-{ +- uint32_t status; +- +- while ((status = nv_rd32(dev, NV03_PGRAPH_INTR))) { +- uint32_t nsource = nv_rd32(dev, NV03_PGRAPH_NSOURCE); +- +- if (status & NV_PGRAPH_INTR_NOTIFY) { +- nouveau_pgraph_intr_notify(dev, nsource); +- +- status &= ~NV_PGRAPH_INTR_NOTIFY; +- nv_wr32(dev, NV03_PGRAPH_INTR, NV_PGRAPH_INTR_NOTIFY); +- } +- +- if (status & NV_PGRAPH_INTR_ERROR) { +- nouveau_pgraph_intr_error(dev, nsource); +- +- status &= ~NV_PGRAPH_INTR_ERROR; +- nv_wr32(dev, NV03_PGRAPH_INTR, NV_PGRAPH_INTR_ERROR); +- } +- +- if (status & NV_PGRAPH_INTR_CONTEXT_SWITCH) { +- status &= ~NV_PGRAPH_INTR_CONTEXT_SWITCH; +- nv_wr32(dev, NV03_PGRAPH_INTR, +- NV_PGRAPH_INTR_CONTEXT_SWITCH); ++ int ret; + +- nouveau_pgraph_intr_context_switch(dev); ++ if (nouveau_msi != 0 && dev_priv->card_type >= NV_50) { ++ ret = pci_enable_msi(dev->pdev); ++ if (ret == 0) { ++ NV_INFO(dev, "enabled MSI\n"); ++ dev_priv->msi_enabled = true; + } +- +- if (status) { +- NV_INFO(dev, "Unhandled PGRAPH_INTR - 0x%08x\n", status); +- nv_wr32(dev, NV03_PGRAPH_INTR, status); +- } +- +- if ((nv_rd32(dev, NV04_PGRAPH_FIFO) & (1 << 0)) == 0) +- nv_wr32(dev, NV04_PGRAPH_FIFO, 1); + } + +- nv_wr32(dev, NV03_PMC_INTR_0, NV_PMC_INTR_0_PGRAPH_PENDING); ++ return drm_irq_install(dev); + } + +-static struct nouveau_enum_names nv50_mp_exec_error_names[] = +-{ +- { 3, "STACK_UNDERFLOW" }, +- { 4, "QUADON_ACTIVE" }, +- { 8, "TIMEOUT" }, +- { 0x10, "INVALID_OPCODE" }, +- { 0x40, "BREAKPOINT" }, +-}; +- +-static void +-nv50_pgraph_mp_trap(struct drm_device *dev, int tpid, int display) +-{ +- struct drm_nouveau_private *dev_priv = dev->dev_private; +- uint32_t units = nv_rd32(dev, 0x1540); +- uint32_t addr, mp10, status, pc, oplow, ophigh; +- int i; +- int mps = 0; +- for (i = 0; i < 4; i++) { +- if (!(units & 1 << (i+24))) +- continue; +- if (dev_priv->chipset < 0xa0) +- addr = 0x408200 + (tpid << 12) + (i << 7); +- else +- addr = 0x408100 + (tpid << 11) + (i << 7); +- mp10 = nv_rd32(dev, addr + 0x10); +- status = nv_rd32(dev, addr + 0x14); +- if (!status) +- continue; +- if (display) { +- nv_rd32(dev, addr + 0x20); +- pc = nv_rd32(dev, addr + 0x24); +- oplow = nv_rd32(dev, addr + 0x70); +- ophigh= nv_rd32(dev, addr + 0x74); +- NV_INFO(dev, "PGRAPH_TRAP_MP_EXEC - " +- "TP %d MP %d: ", tpid, i); +- nouveau_print_enum_names(status, +- nv50_mp_exec_error_names); +- printk(" at %06x warp %d, opcode %08x %08x\n", +- pc&0xffffff, pc >> 24, +- oplow, ophigh); +- } +- nv_wr32(dev, addr + 0x10, mp10); +- nv_wr32(dev, addr + 0x14, 0); +- mps++; +- } +- if (!mps && display) +- NV_INFO(dev, "PGRAPH_TRAP_MP_EXEC - TP %d: " +- "No MPs claiming errors?\n", tpid); +-} +- +-static void +-nv50_pgraph_tp_trap(struct drm_device *dev, int type, uint32_t ustatus_old, +- uint32_t ustatus_new, int display, const char *name) ++void ++nouveau_irq_fini(struct drm_device *dev) + { + struct drm_nouveau_private *dev_priv = dev->dev_private; +- int tps = 0; +- uint32_t units = nv_rd32(dev, 0x1540); +- int i, r; +- uint32_t ustatus_addr, ustatus; +- for (i = 0; i < 16; i++) { +- if (!(units & (1 << i))) +- continue; +- if (dev_priv->chipset < 0xa0) +- ustatus_addr = ustatus_old + (i << 12); +- else +- ustatus_addr = ustatus_new + (i << 11); +- ustatus = nv_rd32(dev, ustatus_addr) & 0x7fffffff; +- if (!ustatus) +- continue; +- tps++; +- switch (type) { +- case 6: /* texture error... unknown for now */ +- nv50_fb_vm_trap(dev, display, name); +- if (display) { +- NV_ERROR(dev, "magic set %d:\n", i); +- for (r = ustatus_addr + 4; r <= ustatus_addr + 0x10; r += 4) +- NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r, +- nv_rd32(dev, r)); +- } +- break; +- case 7: /* MP error */ +- if (ustatus & 0x00010000) { +- nv50_pgraph_mp_trap(dev, i, display); +- ustatus &= ~0x00010000; +- } +- break; +- case 8: /* TPDMA error */ +- { +- uint32_t e0c = nv_rd32(dev, ustatus_addr + 4); +- uint32_t e10 = nv_rd32(dev, ustatus_addr + 8); +- uint32_t e14 = nv_rd32(dev, ustatus_addr + 0xc); +- uint32_t e18 = nv_rd32(dev, ustatus_addr + 0x10); +- uint32_t e1c = nv_rd32(dev, ustatus_addr + 0x14); +- uint32_t e20 = nv_rd32(dev, ustatus_addr + 0x18); +- uint32_t e24 = nv_rd32(dev, ustatus_addr + 0x1c); +- nv50_fb_vm_trap(dev, display, name); +- /* 2d engine destination */ +- if (ustatus & 0x00000010) { +- if (display) { +- NV_INFO(dev, "PGRAPH_TRAP_TPDMA_2D - TP %d - Unknown fault at address %02x%08x\n", +- i, e14, e10); +- NV_INFO(dev, "PGRAPH_TRAP_TPDMA_2D - TP %d - e0c: %08x, e18: %08x, e1c: %08x, e20: %08x, e24: %08x\n", +- i, e0c, e18, e1c, e20, e24); +- } +- ustatus &= ~0x00000010; +- } +- /* Render target */ +- if (ustatus & 0x00000040) { +- if (display) { +- NV_INFO(dev, "PGRAPH_TRAP_TPDMA_RT - TP %d - Unknown fault at address %02x%08x\n", +- i, e14, e10); +- NV_INFO(dev, "PGRAPH_TRAP_TPDMA_RT - TP %d - e0c: %08x, e18: %08x, e1c: %08x, e20: %08x, e24: %08x\n", +- i, e0c, e18, e1c, e20, e24); +- } +- ustatus &= ~0x00000040; +- } +- /* CUDA memory: l[], g[] or stack. */ +- if (ustatus & 0x00000080) { +- if (display) { +- if (e18 & 0x80000000) { +- /* g[] read fault? */ +- NV_INFO(dev, "PGRAPH_TRAP_TPDMA - TP %d - Global read fault at address %02x%08x\n", +- i, e14, e10 | ((e18 >> 24) & 0x1f)); +- e18 &= ~0x1f000000; +- } else if (e18 & 0xc) { +- /* g[] write fault? */ +- NV_INFO(dev, "PGRAPH_TRAP_TPDMA - TP %d - Global write fault at address %02x%08x\n", +- i, e14, e10 | ((e18 >> 7) & 0x1f)); +- e18 &= ~0x00000f80; +- } else { +- NV_INFO(dev, "PGRAPH_TRAP_TPDMA - TP %d - Unknown CUDA fault at address %02x%08x\n", +- i, e14, e10); +- } +- NV_INFO(dev, "PGRAPH_TRAP_TPDMA - TP %d - e0c: %08x, e18: %08x, e1c: %08x, e20: %08x, e24: %08x\n", +- i, e0c, e18, e1c, e20, e24); +- } +- ustatus &= ~0x00000080; +- } +- } +- break; +- } +- if (ustatus) { +- if (display) +- NV_INFO(dev, "%s - TP%d: Unhandled ustatus 0x%08x\n", name, i, ustatus); +- } +- nv_wr32(dev, ustatus_addr, 0xc0000000); +- } +- +- if (!tps && display) +- NV_INFO(dev, "%s - No TPs claiming errors?\n", name); +-} +- +-static void +-nv50_pgraph_trap_handler(struct drm_device *dev) +-{ +- struct nouveau_pgraph_trap trap; +- uint32_t status = nv_rd32(dev, 0x400108); +- uint32_t ustatus; +- int display = nouveau_ratelimit(); +- +- +- if (!status && display) { +- nouveau_graph_trap_info(dev, &trap); +- nouveau_graph_dump_trap_info(dev, "PGRAPH_TRAP", &trap); +- NV_INFO(dev, "PGRAPH_TRAP - no units reporting traps?\n"); +- } +- +- /* DISPATCH: Relays commands to other units and handles NOTIFY, +- * COND, QUERY. If you get a trap from it, the command is still stuck +- * in DISPATCH and you need to do something about it. */ +- if (status & 0x001) { +- ustatus = nv_rd32(dev, 0x400804) & 0x7fffffff; +- if (!ustatus && display) { +- NV_INFO(dev, "PGRAPH_TRAP_DISPATCH - no ustatus?\n"); +- } +- +- /* Known to be triggered by screwed up NOTIFY and COND... */ +- if (ustatus & 0x00000001) { +- nv50_fb_vm_trap(dev, display, "PGRAPH_TRAP_DISPATCH_FAULT"); +- nv_wr32(dev, 0x400500, 0); +- if (nv_rd32(dev, 0x400808) & 0x80000000) { +- if (display) { +- if (nouveau_graph_trapped_channel(dev, &trap.channel)) +- trap.channel = -1; +- trap.class = nv_rd32(dev, 0x400814); +- trap.mthd = nv_rd32(dev, 0x400808) & 0x1ffc; +- trap.subc = (nv_rd32(dev, 0x400808) >> 16) & 0x7; +- trap.data = nv_rd32(dev, 0x40080c); +- trap.data2 = nv_rd32(dev, 0x400810); +- nouveau_graph_dump_trap_info(dev, +- "PGRAPH_TRAP_DISPATCH_FAULT", &trap); +- NV_INFO(dev, "PGRAPH_TRAP_DISPATCH_FAULT - 400808: %08x\n", nv_rd32(dev, 0x400808)); +- NV_INFO(dev, "PGRAPH_TRAP_DISPATCH_FAULT - 400848: %08x\n", nv_rd32(dev, 0x400848)); +- } +- nv_wr32(dev, 0x400808, 0); +- } else if (display) { +- NV_INFO(dev, "PGRAPH_TRAP_DISPATCH_FAULT - No stuck command?\n"); +- } +- nv_wr32(dev, 0x4008e8, nv_rd32(dev, 0x4008e8) & 3); +- nv_wr32(dev, 0x400848, 0); +- ustatus &= ~0x00000001; +- } +- if (ustatus & 0x00000002) { +- nv50_fb_vm_trap(dev, display, "PGRAPH_TRAP_DISPATCH_QUERY"); +- nv_wr32(dev, 0x400500, 0); +- if (nv_rd32(dev, 0x40084c) & 0x80000000) { +- if (display) { +- if (nouveau_graph_trapped_channel(dev, &trap.channel)) +- trap.channel = -1; +- trap.class = nv_rd32(dev, 0x400814); +- trap.mthd = nv_rd32(dev, 0x40084c) & 0x1ffc; +- trap.subc = (nv_rd32(dev, 0x40084c) >> 16) & 0x7; +- trap.data = nv_rd32(dev, 0x40085c); +- trap.data2 = 0; +- nouveau_graph_dump_trap_info(dev, +- "PGRAPH_TRAP_DISPATCH_QUERY", &trap); +- NV_INFO(dev, "PGRAPH_TRAP_DISPATCH_QUERY - 40084c: %08x\n", nv_rd32(dev, 0x40084c)); +- } +- nv_wr32(dev, 0x40084c, 0); +- } else if (display) { +- NV_INFO(dev, "PGRAPH_TRAP_DISPATCH_QUERY - No stuck command?\n"); +- } +- ustatus &= ~0x00000002; +- } +- if (ustatus && display) +- NV_INFO(dev, "PGRAPH_TRAP_DISPATCH - Unhandled ustatus 0x%08x\n", ustatus); +- nv_wr32(dev, 0x400804, 0xc0000000); +- nv_wr32(dev, 0x400108, 0x001); +- status &= ~0x001; +- } +- +- /* TRAPs other than dispatch use the "normal" trap regs. */ +- if (status && display) { +- nouveau_graph_trap_info(dev, &trap); +- nouveau_graph_dump_trap_info(dev, +- "PGRAPH_TRAP", &trap); +- } +- +- /* M2MF: Memory to memory copy engine. */ +- if (status & 0x002) { +- ustatus = nv_rd32(dev, 0x406800) & 0x7fffffff; +- if (!ustatus && display) { +- NV_INFO(dev, "PGRAPH_TRAP_M2MF - no ustatus?\n"); +- } +- if (ustatus & 0x00000001) { +- nv50_fb_vm_trap(dev, display, "PGRAPH_TRAP_M2MF_NOTIFY"); +- ustatus &= ~0x00000001; +- } +- if (ustatus & 0x00000002) { +- nv50_fb_vm_trap(dev, display, "PGRAPH_TRAP_M2MF_IN"); +- ustatus &= ~0x00000002; +- } +- if (ustatus & 0x00000004) { +- nv50_fb_vm_trap(dev, display, "PGRAPH_TRAP_M2MF_OUT"); +- ustatus &= ~0x00000004; +- } +- NV_INFO (dev, "PGRAPH_TRAP_M2MF - %08x %08x %08x %08x\n", +- nv_rd32(dev, 0x406804), +- nv_rd32(dev, 0x406808), +- nv_rd32(dev, 0x40680c), +- nv_rd32(dev, 0x406810)); +- if (ustatus && display) +- NV_INFO(dev, "PGRAPH_TRAP_M2MF - Unhandled ustatus 0x%08x\n", ustatus); +- /* No sane way found yet -- just reset the bugger. */ +- nv_wr32(dev, 0x400040, 2); +- nv_wr32(dev, 0x400040, 0); +- nv_wr32(dev, 0x406800, 0xc0000000); +- nv_wr32(dev, 0x400108, 0x002); +- status &= ~0x002; +- } +- +- /* VFETCH: Fetches data from vertex buffers. */ +- if (status & 0x004) { +- ustatus = nv_rd32(dev, 0x400c04) & 0x7fffffff; +- if (!ustatus && display) { +- NV_INFO(dev, "PGRAPH_TRAP_VFETCH - no ustatus?\n"); +- } +- if (ustatus & 0x00000001) { +- nv50_fb_vm_trap(dev, display, "PGRAPH_TRAP_VFETCH_FAULT"); +- NV_INFO (dev, "PGRAPH_TRAP_VFETCH_FAULT - %08x %08x %08x %08x\n", +- nv_rd32(dev, 0x400c00), +- nv_rd32(dev, 0x400c08), +- nv_rd32(dev, 0x400c0c), +- nv_rd32(dev, 0x400c10)); +- ustatus &= ~0x00000001; +- } +- if (ustatus && display) +- NV_INFO(dev, "PGRAPH_TRAP_VFETCH - Unhandled ustatus 0x%08x\n", ustatus); +- nv_wr32(dev, 0x400c04, 0xc0000000); +- nv_wr32(dev, 0x400108, 0x004); +- status &= ~0x004; +- } +- +- /* STRMOUT: DirectX streamout / OpenGL transform feedback. */ +- if (status & 0x008) { +- ustatus = nv_rd32(dev, 0x401800) & 0x7fffffff; +- if (!ustatus && display) { +- NV_INFO(dev, "PGRAPH_TRAP_STRMOUT - no ustatus?\n"); +- } +- if (ustatus & 0x00000001) { +- nv50_fb_vm_trap(dev, display, "PGRAPH_TRAP_STRMOUT_FAULT"); +- NV_INFO (dev, "PGRAPH_TRAP_STRMOUT_FAULT - %08x %08x %08x %08x\n", +- nv_rd32(dev, 0x401804), +- nv_rd32(dev, 0x401808), +- nv_rd32(dev, 0x40180c), +- nv_rd32(dev, 0x401810)); +- ustatus &= ~0x00000001; +- } +- if (ustatus && display) +- NV_INFO(dev, "PGRAPH_TRAP_STRMOUT - Unhandled ustatus 0x%08x\n", ustatus); +- /* No sane way found yet -- just reset the bugger. */ +- nv_wr32(dev, 0x400040, 0x80); +- nv_wr32(dev, 0x400040, 0); +- nv_wr32(dev, 0x401800, 0xc0000000); +- nv_wr32(dev, 0x400108, 0x008); +- status &= ~0x008; +- } +- +- /* CCACHE: Handles code and c[] caches and fills them. */ +- if (status & 0x010) { +- ustatus = nv_rd32(dev, 0x405018) & 0x7fffffff; +- if (!ustatus && display) { +- NV_INFO(dev, "PGRAPH_TRAP_CCACHE - no ustatus?\n"); +- } +- if (ustatus & 0x00000001) { +- nv50_fb_vm_trap(dev, display, "PGRAPH_TRAP_CCACHE_FAULT"); +- NV_INFO (dev, "PGRAPH_TRAP_CCACHE_FAULT - %08x %08x %08x %08x %08x %08x %08x\n", +- nv_rd32(dev, 0x405800), +- nv_rd32(dev, 0x405804), +- nv_rd32(dev, 0x405808), +- nv_rd32(dev, 0x40580c), +- nv_rd32(dev, 0x405810), +- nv_rd32(dev, 0x405814), +- nv_rd32(dev, 0x40581c)); +- ustatus &= ~0x00000001; +- } +- if (ustatus && display) +- NV_INFO(dev, "PGRAPH_TRAP_CCACHE - Unhandled ustatus 0x%08x\n", ustatus); +- nv_wr32(dev, 0x405018, 0xc0000000); +- nv_wr32(dev, 0x400108, 0x010); +- status &= ~0x010; +- } +- +- /* Unknown, not seen yet... 0x402000 is the only trap status reg +- * remaining, so try to handle it anyway. Perhaps related to that +- * unknown DMA slot on tesla? */ +- if (status & 0x20) { +- nv50_fb_vm_trap(dev, display, "PGRAPH_TRAP_UNKC04"); +- ustatus = nv_rd32(dev, 0x402000) & 0x7fffffff; +- if (display) +- NV_INFO(dev, "PGRAPH_TRAP_UNKC04 - Unhandled ustatus 0x%08x\n", ustatus); +- nv_wr32(dev, 0x402000, 0xc0000000); +- /* no status modifiction on purpose */ +- } +- +- /* TEXTURE: CUDA texturing units */ +- if (status & 0x040) { +- nv50_pgraph_tp_trap (dev, 6, 0x408900, 0x408600, display, +- "PGRAPH_TRAP_TEXTURE"); +- nv_wr32(dev, 0x400108, 0x040); +- status &= ~0x040; +- } +- +- /* MP: CUDA execution engines. */ +- if (status & 0x080) { +- nv50_pgraph_tp_trap (dev, 7, 0x408314, 0x40831c, display, +- "PGRAPH_TRAP_MP"); +- nv_wr32(dev, 0x400108, 0x080); +- status &= ~0x080; +- } +- +- /* TPDMA: Handles TP-initiated uncached memory accesses: +- * l[], g[], stack, 2d surfaces, render targets. */ +- if (status & 0x100) { +- nv50_pgraph_tp_trap (dev, 8, 0x408e08, 0x408708, display, +- "PGRAPH_TRAP_TPDMA"); +- nv_wr32(dev, 0x400108, 0x100); +- status &= ~0x100; +- } + +- if (status) { +- if (display) +- NV_INFO(dev, "PGRAPH_TRAP - Unknown trap 0x%08x\n", +- status); +- nv_wr32(dev, 0x400108, status); +- } ++ drm_irq_uninstall(dev); ++ if (dev_priv->msi_enabled) ++ pci_disable_msi(dev->pdev); + } + +-/* There must be a *lot* of these. Will take some time to gather them up. */ +-static struct nouveau_enum_names nv50_data_error_names[] = +-{ +- { 4, "INVALID_VALUE" }, +- { 5, "INVALID_ENUM" }, +- { 8, "INVALID_OBJECT" }, +- { 0xc, "INVALID_BITFIELD" }, +- { 0x28, "MP_NO_REG_SPACE" }, +- { 0x2b, "MP_BLOCK_SIZE_MISMATCH" }, +-}; +- +-static void +-nv50_pgraph_irq_handler(struct drm_device *dev) +-{ +- struct nouveau_pgraph_trap trap; +- int unhandled = 0; +- uint32_t status; +- +- while ((status = nv_rd32(dev, NV03_PGRAPH_INTR))) { +- /* NOTIFY: You've set a NOTIFY an a command and it's done. */ +- if (status & 0x00000001) { +- nouveau_graph_trap_info(dev, &trap); +- if (nouveau_ratelimit()) +- nouveau_graph_dump_trap_info(dev, +- "PGRAPH_NOTIFY", &trap); +- status &= ~0x00000001; +- nv_wr32(dev, NV03_PGRAPH_INTR, 0x00000001); +- } +- +- /* COMPUTE_QUERY: Purpose and exact cause unknown, happens +- * when you write 0x200 to 0x50c0 method 0x31c. */ +- if (status & 0x00000002) { +- nouveau_graph_trap_info(dev, &trap); +- if (nouveau_ratelimit()) +- nouveau_graph_dump_trap_info(dev, +- "PGRAPH_COMPUTE_QUERY", &trap); +- status &= ~0x00000002; +- nv_wr32(dev, NV03_PGRAPH_INTR, 0x00000002); +- } +- +- /* Unknown, never seen: 0x4 */ +- +- /* ILLEGAL_MTHD: You used a wrong method for this class. */ +- if (status & 0x00000010) { +- nouveau_graph_trap_info(dev, &trap); +- if (nouveau_pgraph_intr_swmthd(dev, &trap)) +- unhandled = 1; +- if (unhandled && nouveau_ratelimit()) +- nouveau_graph_dump_trap_info(dev, +- "PGRAPH_ILLEGAL_MTHD", &trap); +- status &= ~0x00000010; +- nv_wr32(dev, NV03_PGRAPH_INTR, 0x00000010); +- } +- +- /* ILLEGAL_CLASS: You used a wrong class. */ +- if (status & 0x00000020) { +- nouveau_graph_trap_info(dev, &trap); +- if (nouveau_ratelimit()) +- nouveau_graph_dump_trap_info(dev, +- "PGRAPH_ILLEGAL_CLASS", &trap); +- status &= ~0x00000020; +- nv_wr32(dev, NV03_PGRAPH_INTR, 0x00000020); +- } +- +- /* DOUBLE_NOTIFY: You tried to set a NOTIFY on another NOTIFY. */ +- if (status & 0x00000040) { +- nouveau_graph_trap_info(dev, &trap); +- if (nouveau_ratelimit()) +- nouveau_graph_dump_trap_info(dev, +- "PGRAPH_DOUBLE_NOTIFY", &trap); +- status &= ~0x00000040; +- nv_wr32(dev, NV03_PGRAPH_INTR, 0x00000040); +- } +- +- /* CONTEXT_SWITCH: PGRAPH needs us to load a new context */ +- if (status & 0x00001000) { +- nv_wr32(dev, 0x400500, 0x00000000); +- nv_wr32(dev, NV03_PGRAPH_INTR, +- NV_PGRAPH_INTR_CONTEXT_SWITCH); +- nv_wr32(dev, NV40_PGRAPH_INTR_EN, nv_rd32(dev, +- NV40_PGRAPH_INTR_EN) & +- ~NV_PGRAPH_INTR_CONTEXT_SWITCH); +- nv_wr32(dev, 0x400500, 0x00010001); +- +- nv50_graph_context_switch(dev); +- +- status &= ~NV_PGRAPH_INTR_CONTEXT_SWITCH; +- } +- +- /* BUFFER_NOTIFY: Your m2mf transfer finished */ +- if (status & 0x00010000) { +- nouveau_graph_trap_info(dev, &trap); +- if (nouveau_ratelimit()) +- nouveau_graph_dump_trap_info(dev, +- "PGRAPH_BUFFER_NOTIFY", &trap); +- status &= ~0x00010000; +- nv_wr32(dev, NV03_PGRAPH_INTR, 0x00010000); +- } +- +- /* DATA_ERROR: Invalid value for this method, or invalid +- * state in current PGRAPH context for this operation */ +- if (status & 0x00100000) { +- nouveau_graph_trap_info(dev, &trap); +- if (nouveau_ratelimit()) { +- nouveau_graph_dump_trap_info(dev, +- "PGRAPH_DATA_ERROR", &trap); +- NV_INFO (dev, "PGRAPH_DATA_ERROR - "); +- nouveau_print_enum_names(nv_rd32(dev, 0x400110), +- nv50_data_error_names); +- printk("\n"); +- } +- status &= ~0x00100000; +- nv_wr32(dev, NV03_PGRAPH_INTR, 0x00100000); +- } +- +- /* TRAP: Something bad happened in the middle of command +- * execution. Has a billion types, subtypes, and even +- * subsubtypes. */ +- if (status & 0x00200000) { +- nv50_pgraph_trap_handler(dev); +- status &= ~0x00200000; +- nv_wr32(dev, NV03_PGRAPH_INTR, 0x00200000); +- } +- +- /* Unknown, never seen: 0x00400000 */ +- +- /* SINGLE_STEP: Happens on every method if you turned on +- * single stepping in 40008c */ +- if (status & 0x01000000) { +- nouveau_graph_trap_info(dev, &trap); +- if (nouveau_ratelimit()) +- nouveau_graph_dump_trap_info(dev, +- "PGRAPH_SINGLE_STEP", &trap); +- status &= ~0x01000000; +- nv_wr32(dev, NV03_PGRAPH_INTR, 0x01000000); +- } +- +- /* 0x02000000 happens when you pause a ctxprog... +- * but the only way this can happen that I know is by +- * poking the relevant MMIO register, and we don't +- * do that. */ +- +- if (status) { +- NV_INFO(dev, "Unhandled PGRAPH_INTR - 0x%08x\n", +- status); +- nv_wr32(dev, NV03_PGRAPH_INTR, status); +- } +- +- { +- const int isb = (1 << 16) | (1 << 0); +- +- if ((nv_rd32(dev, 0x400500) & isb) != isb) +- nv_wr32(dev, 0x400500, +- nv_rd32(dev, 0x400500) | isb); +- } +- } +- +- nv_wr32(dev, NV03_PMC_INTR_0, NV_PMC_INTR_0_PGRAPH_PENDING); +- if (nv_rd32(dev, 0x400824) & (1 << 31)) +- nv_wr32(dev, 0x400824, nv_rd32(dev, 0x400824) & ~(1 << 31)); +-} +- +-static void +-nouveau_crtc_irq_handler(struct drm_device *dev, int crtc) ++void ++nouveau_irq_register(struct drm_device *dev, int status_bit, ++ void (*handler)(struct drm_device *)) + { +- if (crtc & 1) +- nv_wr32(dev, NV_CRTC0_INTSTAT, NV_CRTC_INTR_VBLANK); ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ unsigned long flags; + +- if (crtc & 2) +- nv_wr32(dev, NV_CRTC1_INTSTAT, NV_CRTC_INTR_VBLANK); ++ spin_lock_irqsave(&dev_priv->context_switch_lock, flags); ++ dev_priv->irq_handler[status_bit] = handler; ++ spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); + } + +-irqreturn_t +-nouveau_irq_handler(DRM_IRQ_ARGS) ++void ++nouveau_irq_unregister(struct drm_device *dev, int status_bit) + { +- struct drm_device *dev = (struct drm_device *)arg; + struct drm_nouveau_private *dev_priv = dev->dev_private; +- uint32_t status; + unsigned long flags; + +- status = nv_rd32(dev, NV03_PMC_INTR_0); +- if (!status) +- return IRQ_NONE; +- + spin_lock_irqsave(&dev_priv->context_switch_lock, flags); +- +- if (status & NV_PMC_INTR_0_PFIFO_PENDING) { +- nouveau_fifo_irq_handler(dev); +- status &= ~NV_PMC_INTR_0_PFIFO_PENDING; +- } +- +- if (status & NV_PMC_INTR_0_PGRAPH_PENDING) { +- if (dev_priv->card_type >= NV_50) +- nv50_pgraph_irq_handler(dev); +- else +- nouveau_pgraph_irq_handler(dev); +- +- status &= ~NV_PMC_INTR_0_PGRAPH_PENDING; +- } +- +- if (status & NV_PMC_INTR_0_CRTCn_PENDING) { +- nouveau_crtc_irq_handler(dev, (status>>24)&3); +- status &= ~NV_PMC_INTR_0_CRTCn_PENDING; +- } +- +- if (status & (NV_PMC_INTR_0_NV50_DISPLAY_PENDING | +- NV_PMC_INTR_0_NV50_I2C_PENDING)) { +- nv50_display_irq_handler(dev); +- status &= ~(NV_PMC_INTR_0_NV50_DISPLAY_PENDING | +- NV_PMC_INTR_0_NV50_I2C_PENDING); +- } +- +- if (status) +- NV_ERROR(dev, "Unhandled PMC INTR status bits 0x%08x\n", status); +- ++ dev_priv->irq_handler[status_bit] = NULL; + spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); +- +- return IRQ_HANDLED; + } +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_mem.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_mem.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_mem.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_mem.c 2010-11-12 06:18:06.000000000 +0100 +@@ -33,92 +33,113 @@ + #include "drmP.h" + #include "drm.h" + #include "drm_sarea.h" +-#include "nouveau_drv.h" + +-#define MIN(a,b) a < b ? a : b ++#include "nouveau_drv.h" ++#include "nouveau_pm.h" + + /* + * NV10-NV40 tiling helpers + */ + + static void +-nv10_mem_set_region_tiling(struct drm_device *dev, int i, uint32_t addr, +- uint32_t size, uint32_t pitch) ++nv10_mem_update_tile_region(struct drm_device *dev, ++ struct nouveau_tile_reg *tile, uint32_t addr, ++ uint32_t size, uint32_t pitch, uint32_t flags) + { + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; + struct nouveau_fb_engine *pfb = &dev_priv->engine.fb; + struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; +- struct nouveau_tile_reg *tile = &dev_priv->tile[i]; ++ int i = tile - dev_priv->tile.reg; ++ unsigned long save; ++ ++ nouveau_fence_unref(&tile->fence); ++ ++ if (tile->pitch) ++ pfb->free_tile_region(dev, i); + +- tile->addr = addr; +- tile->size = size; +- tile->used = !!pitch; +- nouveau_fence_unref((void **)&tile->fence); ++ if (pitch) ++ pfb->init_tile_region(dev, i, addr, size, pitch, flags); + ++ spin_lock_irqsave(&dev_priv->context_switch_lock, save); + pfifo->reassign(dev, false); + pfifo->cache_pull(dev, false); + + nouveau_wait_for_idle(dev); + +- pgraph->set_region_tiling(dev, i, addr, size, pitch); +- pfb->set_region_tiling(dev, i, addr, size, pitch); ++ pfb->set_tile_region(dev, i); ++ pgraph->set_tile_region(dev, i); + + pfifo->cache_pull(dev, true); + pfifo->reassign(dev, true); ++ spin_unlock_irqrestore(&dev_priv->context_switch_lock, save); + } + +-struct nouveau_tile_reg * +-nv10_mem_set_tiling(struct drm_device *dev, uint32_t addr, uint32_t size, +- uint32_t pitch) ++static struct nouveau_tile_reg * ++nv10_mem_get_tile_region(struct drm_device *dev, int i) + { + struct drm_nouveau_private *dev_priv = dev->dev_private; +- struct nouveau_fb_engine *pfb = &dev_priv->engine.fb; +- struct nouveau_tile_reg *found = NULL; +- unsigned long i, flags; ++ struct nouveau_tile_reg *tile = &dev_priv->tile.reg[i]; + +- spin_lock_irqsave(&dev_priv->context_switch_lock, flags); ++ spin_lock(&dev_priv->tile.lock); + +- for (i = 0; i < pfb->num_tiles; i++) { +- struct nouveau_tile_reg *tile = &dev_priv->tile[i]; +- +- if (tile->used) +- /* Tile region in use. */ +- continue; ++ if (!tile->used && ++ (!tile->fence || nouveau_fence_signalled(tile->fence))) ++ tile->used = true; ++ else ++ tile = NULL; + +- if (tile->fence && +- !nouveau_fence_signalled(tile->fence, NULL)) +- /* Pending tile region. */ +- continue; ++ spin_unlock(&dev_priv->tile.lock); ++ return tile; ++} + +- if (max(tile->addr, addr) < +- min(tile->addr + tile->size, addr + size)) +- /* Kill an intersecting tile region. */ +- nv10_mem_set_region_tiling(dev, i, 0, 0, 0); ++void ++nv10_mem_put_tile_region(struct drm_device *dev, struct nouveau_tile_reg *tile, ++ struct nouveau_fence *fence) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; + +- if (pitch && !found) { +- /* Free tile region. */ +- nv10_mem_set_region_tiling(dev, i, addr, size, pitch); +- found = tile; ++ if (tile) { ++ spin_lock(&dev_priv->tile.lock); ++ if (fence) { ++ /* Mark it as pending. */ ++ tile->fence = fence; ++ nouveau_fence_ref(fence); + } +- } + +- spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); +- +- return found; ++ tile->used = false; ++ spin_unlock(&dev_priv->tile.lock); ++ } + } + +-void +-nv10_mem_expire_tiling(struct drm_device *dev, struct nouveau_tile_reg *tile, +- struct nouveau_fence *fence) ++struct nouveau_tile_reg * ++nv10_mem_set_tiling(struct drm_device *dev, uint32_t addr, uint32_t size, ++ uint32_t pitch, uint32_t flags) + { +- if (fence) { +- /* Mark it as pending. */ +- tile->fence = fence; +- nouveau_fence_ref(fence); ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_fb_engine *pfb = &dev_priv->engine.fb; ++ struct nouveau_tile_reg *tile, *found = NULL; ++ int i; ++ ++ for (i = 0; i < pfb->num_tiles; i++) { ++ tile = nv10_mem_get_tile_region(dev, i); ++ ++ if (pitch && !found) { ++ found = tile; ++ continue; ++ ++ } else if (tile && tile->pitch) { ++ /* Kill an unused tile region. */ ++ nv10_mem_update_tile_region(dev, tile, 0, 0, 0, 0); ++ } ++ ++ nv10_mem_put_tile_region(dev, tile, NULL); + } + +- tile->used = false; ++ if (found) ++ nv10_mem_update_tile_region(dev, found, addr, size, ++ pitch, flags); ++ return found; + } + + /* +@@ -177,9 +198,9 @@ + } + dev_priv->engine.instmem.flush(dev); + +- nv50_vm_flush(dev, 5); +- nv50_vm_flush(dev, 0); +- nv50_vm_flush(dev, 4); ++ dev_priv->engine.instmem.flush(dev); ++ dev_priv->engine.fifo.tlb_flush(dev); ++ dev_priv->engine.graph.tlb_flush(dev); + nv50_vm_flush(dev, 6); + return 0; + } +@@ -209,11 +230,10 @@ + pte++; + } + } +- dev_priv->engine.instmem.flush(dev); + +- nv50_vm_flush(dev, 5); +- nv50_vm_flush(dev, 0); +- nv50_vm_flush(dev, 4); ++ dev_priv->engine.instmem.flush(dev); ++ dev_priv->engine.fifo.tlb_flush(dev); ++ dev_priv->engine.graph.tlb_flush(dev); + nv50_vm_flush(dev, 6); + } + +@@ -653,6 +673,7 @@ + void + nouveau_mem_timing_init(struct drm_device *dev) + { ++ /* cards < NVC0 only */ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_pm_engine *pm = &dev_priv->engine.pm; + struct nouveau_pm_memtimings *memtimings = &pm->memtimings; +@@ -719,14 +740,14 @@ + tUNK_19 = 1; + tUNK_20 = 0; + tUNK_21 = 0; +- switch (MIN(recordlen,21)) { +- case 21: ++ switch (min(recordlen, 22)) { ++ case 22: + tUNK_21 = entry[21]; +- case 20: ++ case 21: + tUNK_20 = entry[20]; +- case 19: ++ case 20: + tUNK_19 = entry[19]; +- case 18: ++ case 19: + tUNK_18 = entry[18]; + default: + tUNK_0 = entry[0]; +@@ -756,24 +777,30 @@ + timing->reg_100228 = (tUNK_12 << 16 | tUNK_11 << 8 | tUNK_10); + if(recordlen > 19) { + timing->reg_100228 += (tUNK_19 - 1) << 24; +- } else { ++ }/* I cannot back-up this else-statement right now ++ else { + timing->reg_100228 += tUNK_12 << 24; +- } ++ }*/ + + /* XXX: reg_10022c */ ++ timing->reg_10022c = tUNK_2 - 1; + + timing->reg_100230 = (tUNK_20 << 24 | tUNK_21 << 16 | + tUNK_13 << 8 | tUNK_13); + + /* XXX: +6? */ + timing->reg_100234 = (tRAS << 24 | (tUNK_19 + 6) << 8 | tRC); +- if(tUNK_10 > tUNK_11) { +- timing->reg_100234 += tUNK_10 << 16; +- } else { +- timing->reg_100234 += tUNK_11 << 16; ++ timing->reg_100234 += max(tUNK_10,tUNK_11) << 16; ++ ++ /* XXX; reg_100238, reg_10023c ++ * reg: 0x00?????? ++ * reg_10023c: ++ * 0 for pre-NV50 cards ++ * 0x????0202 for NV50+ cards (empirical evidence) */ ++ if(dev_priv->card_type >= NV_50) { ++ timing->reg_10023c = 0x202; + } + +- /* XXX; reg_100238, reg_10023c */ + NV_DEBUG(dev, "Entry %d: 220: %08x %08x %08x %08x\n", i, + timing->reg_100220, timing->reg_100224, + timing->reg_100228, timing->reg_10022c); +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_notifier.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_notifier.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_notifier.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_notifier.c 2010-11-12 06:18:06.000000000 +0100 +@@ -185,11 +185,11 @@ + struct nouveau_channel *chan; + int ret; + +- NOUVEAU_GET_USER_CHANNEL_WITH_RETURN(na->channel, file_priv, chan); ++ chan = nouveau_channel_get(dev, file_priv, na->channel); ++ if (IS_ERR(chan)) ++ return PTR_ERR(chan); + + ret = nouveau_notifier_alloc(chan, na->handle, na->size, &na->offset); +- if (ret) +- return ret; +- +- return 0; ++ nouveau_channel_put(&chan); ++ return ret; + } +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_object.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_object.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_object.c 2010-11-12 06:18:06.000000000 +0100 +@@ -36,6 +36,101 @@ + #include "nouveau_drm.h" + #include "nouveau_ramht.h" + ++struct nouveau_gpuobj_method { ++ struct list_head head; ++ u32 mthd; ++ int (*exec)(struct nouveau_channel *, u32 class, u32 mthd, u32 data); ++}; ++ ++struct nouveau_gpuobj_class { ++ struct list_head head; ++ struct list_head methods; ++ u32 id; ++ u32 engine; ++}; ++ ++int ++nouveau_gpuobj_class_new(struct drm_device *dev, u32 class, u32 engine) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_gpuobj_class *oc; ++ ++ oc = kzalloc(sizeof(*oc), GFP_KERNEL); ++ if (!oc) ++ return -ENOMEM; ++ ++ INIT_LIST_HEAD(&oc->methods); ++ oc->id = class; ++ oc->engine = engine; ++ list_add(&oc->head, &dev_priv->classes); ++ return 0; ++} ++ ++int ++nouveau_gpuobj_mthd_new(struct drm_device *dev, u32 class, u32 mthd, ++ int (*exec)(struct nouveau_channel *, u32, u32, u32)) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_gpuobj_method *om; ++ struct nouveau_gpuobj_class *oc; ++ ++ list_for_each_entry(oc, &dev_priv->classes, head) { ++ if (oc->id == class) ++ goto found; ++ } ++ ++ return -EINVAL; ++ ++found: ++ om = kzalloc(sizeof(*om), GFP_KERNEL); ++ if (!om) ++ return -ENOMEM; ++ ++ om->mthd = mthd; ++ om->exec = exec; ++ list_add(&om->head, &oc->methods); ++ return 0; ++} ++ ++int ++nouveau_gpuobj_mthd_call(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data) ++{ ++ struct drm_nouveau_private *dev_priv = chan->dev->dev_private; ++ struct nouveau_gpuobj_method *om; ++ struct nouveau_gpuobj_class *oc; ++ ++ list_for_each_entry(oc, &dev_priv->classes, head) { ++ if (oc->id != class) ++ continue; ++ ++ list_for_each_entry(om, &oc->methods, head) { ++ if (om->mthd == mthd) ++ return om->exec(chan, class, mthd, data); ++ } ++ } ++ ++ return -ENOENT; ++} ++ ++int ++nouveau_gpuobj_mthd_call2(struct drm_device *dev, int chid, ++ u32 class, u32 mthd, u32 data) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_channel *chan = NULL; ++ unsigned long flags; ++ int ret = -EINVAL; ++ ++ spin_lock_irqsave(&dev_priv->channels.lock, flags); ++ if (chid > 0 && chid < dev_priv->engine.fifo.channels) ++ chan = dev_priv->channels.ptr[chid]; ++ if (chan) ++ ret = nouveau_gpuobj_mthd_call(chan, class, mthd, data); ++ spin_unlock_irqrestore(&dev_priv->channels.lock, flags); ++ return ret; ++} ++ + /* NVidia uses context objects to drive drawing operations. + + Context objects can be selected into 8 subchannels in the FIFO, +@@ -73,17 +168,14 @@ + struct nouveau_gpuobj **gpuobj_ret) + { + struct drm_nouveau_private *dev_priv = dev->dev_private; +- struct nouveau_engine *engine = &dev_priv->engine; ++ struct nouveau_instmem_engine *instmem = &dev_priv->engine.instmem; + struct nouveau_gpuobj *gpuobj; + struct drm_mm_node *ramin = NULL; +- int ret; ++ int ret, i; + + NV_DEBUG(dev, "ch%d size=%u align=%d flags=0x%08x\n", + chan ? chan->id : -1, size, align, flags); + +- if (!dev_priv || !gpuobj_ret || *gpuobj_ret != NULL) +- return -EINVAL; +- + gpuobj = kzalloc(sizeof(*gpuobj), GFP_KERNEL); + if (!gpuobj) + return -ENOMEM; +@@ -98,88 +190,45 @@ + spin_unlock(&dev_priv->ramin_lock); + + if (chan) { +- NV_DEBUG(dev, "channel heap\n"); +- + ramin = drm_mm_search_free(&chan->ramin_heap, size, align, 0); + if (ramin) + ramin = drm_mm_get_block(ramin, size, align); +- + if (!ramin) { + nouveau_gpuobj_ref(NULL, &gpuobj); + return -ENOMEM; + } +- } else { +- NV_DEBUG(dev, "global heap\n"); +- +- /* allocate backing pages, sets vinst */ +- ret = engine->instmem.populate(dev, gpuobj, &size); +- if (ret) { +- nouveau_gpuobj_ref(NULL, &gpuobj); +- return ret; +- } +- +- /* try and get aperture space */ +- do { +- if (drm_mm_pre_get(&dev_priv->ramin_heap)) +- return -ENOMEM; + +- spin_lock(&dev_priv->ramin_lock); +- ramin = drm_mm_search_free(&dev_priv->ramin_heap, size, +- align, 0); +- if (ramin == NULL) { +- spin_unlock(&dev_priv->ramin_lock); +- nouveau_gpuobj_ref(NULL, &gpuobj); +- return ret; +- } +- +- ramin = drm_mm_get_block_atomic(ramin, size, align); +- spin_unlock(&dev_priv->ramin_lock); +- } while (ramin == NULL); ++ gpuobj->pinst = chan->ramin->pinst; ++ if (gpuobj->pinst != ~0) ++ gpuobj->pinst += ramin->start; + +- /* on nv50 it's ok to fail, we have a fallback path */ +- if (!ramin && dev_priv->card_type < NV_50) { +- nouveau_gpuobj_ref(NULL, &gpuobj); +- return -ENOMEM; +- } +- } ++ if (dev_priv->card_type < NV_50) ++ gpuobj->cinst = gpuobj->pinst; ++ else ++ gpuobj->cinst = ramin->start; + +- /* if we got a chunk of the aperture, map pages into it */ +- gpuobj->im_pramin = ramin; +- if (!chan && gpuobj->im_pramin && dev_priv->ramin_available) { +- ret = engine->instmem.bind(dev, gpuobj); ++ gpuobj->vinst = ramin->start + chan->ramin->vinst; ++ gpuobj->node = ramin; ++ } else { ++ ret = instmem->get(gpuobj, size, align); + if (ret) { + nouveau_gpuobj_ref(NULL, &gpuobj); + return ret; + } +- } + +- /* calculate the various different addresses for the object */ +- if (chan) { +- gpuobj->pinst = chan->ramin->pinst; +- if (gpuobj->pinst != ~0) +- gpuobj->pinst += gpuobj->im_pramin->start; +- +- if (dev_priv->card_type < NV_50) { +- gpuobj->cinst = gpuobj->pinst; +- } else { +- gpuobj->cinst = gpuobj->im_pramin->start; +- gpuobj->vinst = gpuobj->im_pramin->start + +- chan->ramin->vinst; +- } +- } else { +- if (gpuobj->im_pramin) +- gpuobj->pinst = gpuobj->im_pramin->start; +- else ++ ret = -ENOSYS; ++ if (dev_priv->ramin_available) ++ ret = instmem->map(gpuobj); ++ if (ret) + gpuobj->pinst = ~0; +- gpuobj->cinst = 0xdeadbeef; ++ ++ gpuobj->cinst = NVOBJ_CINST_GLOBAL; + } + + if (gpuobj->flags & NVOBJ_FLAG_ZERO_ALLOC) { +- int i; +- + for (i = 0; i < gpuobj->size; i += 4) + nv_wo32(gpuobj, i, 0); +- engine->instmem.flush(dev); ++ instmem->flush(dev); + } + + +@@ -195,6 +244,7 @@ + NV_DEBUG(dev, "\n"); + + INIT_LIST_HEAD(&dev_priv->gpuobj_list); ++ INIT_LIST_HEAD(&dev_priv->classes); + spin_lock_init(&dev_priv->ramin_lock); + dev_priv->ramin_base = ~0; + +@@ -205,13 +255,23 @@ + nouveau_gpuobj_takedown(struct drm_device *dev) + { + struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_gpuobj_method *om, *tm; ++ struct nouveau_gpuobj_class *oc, *tc; + + NV_DEBUG(dev, "\n"); + ++ list_for_each_entry_safe(oc, tc, &dev_priv->classes, head) { ++ list_for_each_entry_safe(om, tm, &oc->methods, head) { ++ list_del(&om->head); ++ kfree(om); ++ } ++ list_del(&oc->head); ++ kfree(oc); ++ } ++ + BUG_ON(!list_empty(&dev_priv->gpuobj_list)); + } + +- + static void + nouveau_gpuobj_del(struct kref *ref) + { +@@ -219,26 +279,34 @@ + container_of(ref, struct nouveau_gpuobj, refcount); + struct drm_device *dev = gpuobj->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; +- struct nouveau_engine *engine = &dev_priv->engine; ++ struct nouveau_instmem_engine *instmem = &dev_priv->engine.instmem; + int i; + + NV_DEBUG(dev, "gpuobj %p\n", gpuobj); + +- if (gpuobj->im_pramin && (gpuobj->flags & NVOBJ_FLAG_ZERO_FREE)) { ++ if (gpuobj->node && (gpuobj->flags & NVOBJ_FLAG_ZERO_FREE)) { + for (i = 0; i < gpuobj->size; i += 4) + nv_wo32(gpuobj, i, 0); +- engine->instmem.flush(dev); ++ instmem->flush(dev); + } + + if (gpuobj->dtor) + gpuobj->dtor(dev, gpuobj); + +- if (gpuobj->im_backing) +- engine->instmem.clear(dev, gpuobj); ++ if (gpuobj->cinst == NVOBJ_CINST_GLOBAL) { ++ if (gpuobj->node) { ++ instmem->unmap(gpuobj); ++ instmem->put(gpuobj); ++ } ++ } else { ++ if (gpuobj->node) { ++ spin_lock(&dev_priv->ramin_lock); ++ drm_mm_put_block(gpuobj->node); ++ spin_unlock(&dev_priv->ramin_lock); ++ } ++ } + + spin_lock(&dev_priv->ramin_lock); +- if (gpuobj->im_pramin) +- drm_mm_put_block(gpuobj->im_pramin); + list_del(&gpuobj->list); + spin_unlock(&dev_priv->ramin_lock); + +@@ -278,7 +346,7 @@ + kref_init(&gpuobj->refcount); + gpuobj->size = size; + gpuobj->pinst = pinst; +- gpuobj->cinst = 0xdeadbeef; ++ gpuobj->cinst = NVOBJ_CINST_GLOBAL; + gpuobj->vinst = vinst; + + if (gpuobj->flags & NVOBJ_FLAG_ZERO_ALLOC) { +@@ -495,23 +563,86 @@ + entry[5]: + set to 0? + */ ++static int ++nouveau_gpuobj_sw_new(struct nouveau_channel *chan, int class, ++ struct nouveau_gpuobj **gpuobj_ret) ++{ ++ struct drm_nouveau_private *dev_priv; ++ struct nouveau_gpuobj *gpuobj; ++ ++ if (!chan || !gpuobj_ret || *gpuobj_ret != NULL) ++ return -EINVAL; ++ dev_priv = chan->dev->dev_private; ++ ++ gpuobj = kzalloc(sizeof(*gpuobj), GFP_KERNEL); ++ if (!gpuobj) ++ return -ENOMEM; ++ gpuobj->dev = chan->dev; ++ gpuobj->engine = NVOBJ_ENGINE_SW; ++ gpuobj->class = class; ++ kref_init(&gpuobj->refcount); ++ gpuobj->cinst = 0x40; ++ ++ spin_lock(&dev_priv->ramin_lock); ++ list_add_tail(&gpuobj->list, &dev_priv->gpuobj_list); ++ spin_unlock(&dev_priv->ramin_lock); ++ *gpuobj_ret = gpuobj; ++ return 0; ++} ++ + int + nouveau_gpuobj_gr_new(struct nouveau_channel *chan, int class, + struct nouveau_gpuobj **gpuobj) + { ++ struct drm_nouveau_private *dev_priv = chan->dev->dev_private; + struct drm_device *dev = chan->dev; +- struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_gpuobj_class *oc; + int ret; + + NV_DEBUG(dev, "ch%d class=0x%04x\n", chan->id, class); + ++ list_for_each_entry(oc, &dev_priv->classes, head) { ++ if (oc->id == class) ++ goto found; ++ } ++ ++ NV_ERROR(dev, "illegal object class: 0x%x\n", class); ++ return -EINVAL; ++ ++found: ++ if (oc->engine == NVOBJ_ENGINE_SW) ++ return nouveau_gpuobj_sw_new(chan, class, gpuobj); ++ ++ switch (oc->engine) { ++ case NVOBJ_ENGINE_GR: ++ if (dev_priv->card_type >= NV_50 && !chan->ramin_grctx) { ++ struct nouveau_pgraph_engine *pgraph = ++ &dev_priv->engine.graph; ++ ++ ret = pgraph->create_context(chan); ++ if (ret) ++ return ret; ++ } ++ break; ++ case NVOBJ_ENGINE_CRYPT: ++ if (!chan->crypt_ctx) { ++ struct nouveau_crypt_engine *pcrypt = ++ &dev_priv->engine.crypt; ++ ++ ret = pcrypt->create_context(chan); ++ if (ret) ++ return ret; ++ } ++ break; ++ } ++ + ret = nouveau_gpuobj_new(dev, chan, + nouveau_gpuobj_class_instmem_size(dev, class), + 16, + NVOBJ_FLAG_ZERO_ALLOC | NVOBJ_FLAG_ZERO_FREE, + gpuobj); + if (ret) { +- NV_ERROR(dev, "Error creating gpuobj: %d\n", ret); ++ NV_ERROR(dev, "error creating gpuobj: %d\n", ret); + return ret; + } + +@@ -541,35 +672,8 @@ + } + dev_priv->engine.instmem.flush(dev); + +- (*gpuobj)->engine = NVOBJ_ENGINE_GR; +- (*gpuobj)->class = class; +- return 0; +-} +- +-int +-nouveau_gpuobj_sw_new(struct nouveau_channel *chan, int class, +- struct nouveau_gpuobj **gpuobj_ret) +-{ +- struct drm_nouveau_private *dev_priv; +- struct nouveau_gpuobj *gpuobj; +- +- if (!chan || !gpuobj_ret || *gpuobj_ret != NULL) +- return -EINVAL; +- dev_priv = chan->dev->dev_private; +- +- gpuobj = kzalloc(sizeof(*gpuobj), GFP_KERNEL); +- if (!gpuobj) +- return -ENOMEM; +- gpuobj->dev = chan->dev; +- gpuobj->engine = NVOBJ_ENGINE_SW; +- gpuobj->class = class; +- kref_init(&gpuobj->refcount); +- gpuobj->cinst = 0x40; +- +- spin_lock(&dev_priv->ramin_lock); +- list_add_tail(&gpuobj->list, &dev_priv->gpuobj_list); +- spin_unlock(&dev_priv->ramin_lock); +- *gpuobj_ret = gpuobj; ++ (*gpuobj)->engine = oc->engine; ++ (*gpuobj)->class = oc->id; + return 0; + } + +@@ -585,7 +689,7 @@ + NV_DEBUG(dev, "ch%d\n", chan->id); + + /* Base amount for object storage (4KiB enough?) */ +- size = 0x1000; ++ size = 0x2000; + base = 0; + + /* PGRAPH context */ +@@ -791,119 +895,69 @@ + struct nouveau_gpuobj *gpuobj; + int i; + +- if (dev_priv->card_type < NV_50) { +- dev_priv->susres.ramin_copy = vmalloc(dev_priv->ramin_rsvd_vram); +- if (!dev_priv->susres.ramin_copy) +- return -ENOMEM; +- +- for (i = 0; i < dev_priv->ramin_rsvd_vram; i += 4) +- dev_priv->susres.ramin_copy[i/4] = nv_ri32(dev, i); +- return 0; +- } +- + list_for_each_entry(gpuobj, &dev_priv->gpuobj_list, list) { +- if (!gpuobj->im_backing) ++ if (gpuobj->cinst != NVOBJ_CINST_GLOBAL) + continue; + +- gpuobj->im_backing_suspend = vmalloc(gpuobj->size); +- if (!gpuobj->im_backing_suspend) { ++ gpuobj->suspend = vmalloc(gpuobj->size); ++ if (!gpuobj->suspend) { + nouveau_gpuobj_resume(dev); + return -ENOMEM; + } + + for (i = 0; i < gpuobj->size; i += 4) +- gpuobj->im_backing_suspend[i/4] = nv_ro32(gpuobj, i); ++ gpuobj->suspend[i/4] = nv_ro32(gpuobj, i); + } + + return 0; + } + + void +-nouveau_gpuobj_suspend_cleanup(struct drm_device *dev) +-{ +- struct drm_nouveau_private *dev_priv = dev->dev_private; +- struct nouveau_gpuobj *gpuobj; +- +- if (dev_priv->card_type < NV_50) { +- vfree(dev_priv->susres.ramin_copy); +- dev_priv->susres.ramin_copy = NULL; +- return; +- } +- +- list_for_each_entry(gpuobj, &dev_priv->gpuobj_list, list) { +- if (!gpuobj->im_backing_suspend) +- continue; +- +- vfree(gpuobj->im_backing_suspend); +- gpuobj->im_backing_suspend = NULL; +- } +-} +- +-void + nouveau_gpuobj_resume(struct drm_device *dev) + { + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_gpuobj *gpuobj; + int i; + +- if (dev_priv->card_type < NV_50) { +- for (i = 0; i < dev_priv->ramin_rsvd_vram; i += 4) +- nv_wi32(dev, i, dev_priv->susres.ramin_copy[i/4]); +- nouveau_gpuobj_suspend_cleanup(dev); +- return; +- } +- + list_for_each_entry(gpuobj, &dev_priv->gpuobj_list, list) { +- if (!gpuobj->im_backing_suspend) ++ if (!gpuobj->suspend) + continue; + + for (i = 0; i < gpuobj->size; i += 4) +- nv_wo32(gpuobj, i, gpuobj->im_backing_suspend[i/4]); +- dev_priv->engine.instmem.flush(dev); ++ nv_wo32(gpuobj, i, gpuobj->suspend[i/4]); ++ ++ vfree(gpuobj->suspend); ++ gpuobj->suspend = NULL; + } + +- nouveau_gpuobj_suspend_cleanup(dev); ++ dev_priv->engine.instmem.flush(dev); + } + + int nouveau_ioctl_grobj_alloc(struct drm_device *dev, void *data, + struct drm_file *file_priv) + { +- struct drm_nouveau_private *dev_priv = dev->dev_private; + struct drm_nouveau_grobj_alloc *init = data; +- struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; +- struct nouveau_pgraph_object_class *grc; + struct nouveau_gpuobj *gr = NULL; + struct nouveau_channel *chan; + int ret; + +- NOUVEAU_GET_USER_CHANNEL_WITH_RETURN(init->channel, file_priv, chan); +- + if (init->handle == ~0) + return -EINVAL; + +- grc = pgraph->grclass; +- while (grc->id) { +- if (grc->id == init->class) +- break; +- grc++; +- } ++ chan = nouveau_channel_get(dev, file_priv, init->channel); ++ if (IS_ERR(chan)) ++ return PTR_ERR(chan); + +- if (!grc->id) { +- NV_ERROR(dev, "Illegal object class: 0x%x\n", init->class); +- return -EPERM; ++ if (nouveau_ramht_find(chan, init->handle)) { ++ ret = -EEXIST; ++ goto out; + } + +- if (nouveau_ramht_find(chan, init->handle)) +- return -EEXIST; +- +- if (!grc->software) +- ret = nouveau_gpuobj_gr_new(chan, grc->id, &gr); +- else +- ret = nouveau_gpuobj_sw_new(chan, grc->id, &gr); ++ ret = nouveau_gpuobj_gr_new(chan, init->class, &gr); + if (ret) { + NV_ERROR(dev, "Error creating object: %d (%d/0x%08x)\n", + ret, init->channel, init->handle); +- return ret; ++ goto out; + } + + ret = nouveau_ramht_insert(chan, init->handle, gr); +@@ -911,27 +965,27 @@ + if (ret) { + NV_ERROR(dev, "Error referencing object: %d (%d/0x%08x)\n", + ret, init->channel, init->handle); +- return ret; + } + +- return 0; ++out: ++ nouveau_channel_put(&chan); ++ return ret; + } + + int nouveau_ioctl_gpuobj_free(struct drm_device *dev, void *data, + struct drm_file *file_priv) + { + struct drm_nouveau_gpuobj_free *objfree = data; +- struct nouveau_gpuobj *gpuobj; + struct nouveau_channel *chan; ++ int ret; + +- NOUVEAU_GET_USER_CHANNEL_WITH_RETURN(objfree->channel, file_priv, chan); +- +- gpuobj = nouveau_ramht_find(chan, objfree->handle); +- if (!gpuobj) +- return -ENOENT; ++ chan = nouveau_channel_get(dev, file_priv, objfree->channel); ++ if (IS_ERR(chan)) ++ return PTR_ERR(chan); + +- nouveau_ramht_remove(chan, objfree->handle); +- return 0; ++ ret = nouveau_ramht_remove(chan, objfree->handle); ++ nouveau_channel_put(&chan); ++ return ret; + } + + u32 +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_pm.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_pm.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_pm.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_pm.c 2010-11-12 06:18:06.000000000 +0100 +@@ -27,6 +27,10 @@ + #include "nouveau_drv.h" + #include "nouveau_pm.h" + ++#ifdef CONFIG_ACPI ++#include ++#endif ++#include + #include + #include + +@@ -284,6 +288,7 @@ + } + } + ++#ifdef CONFIG_HWMON + static ssize_t + nouveau_hwmon_show_temp(struct device *d, struct device_attribute *a, char *buf) + { +@@ -395,10 +400,12 @@ + static const struct attribute_group hwmon_attrgroup = { + .attrs = hwmon_attributes, + }; ++#endif + + static int + nouveau_hwmon_init(struct drm_device *dev) + { ++#ifdef CONFIG_HWMON + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_pm_engine *pm = &dev_priv->engine.pm; + struct device *hwmon_dev; +@@ -425,13 +432,14 @@ + } + + pm->hwmon = hwmon_dev; +- ++#endif + return 0; + } + + static void + nouveau_hwmon_fini(struct drm_device *dev) + { ++#ifdef CONFIG_HWMON + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_pm_engine *pm = &dev_priv->engine.pm; + +@@ -439,7 +447,27 @@ + sysfs_remove_group(&pm->hwmon->kobj, &hwmon_attrgroup); + hwmon_device_unregister(pm->hwmon); + } ++#endif ++} ++ ++#ifdef CONFIG_ACPI ++static int ++nouveau_pm_acpi_event(struct notifier_block *nb, unsigned long val, void *data) ++{ ++ struct drm_nouveau_private *dev_priv = ++ container_of(nb, struct drm_nouveau_private, engine.pm.acpi_nb); ++ struct drm_device *dev = dev_priv->dev; ++ struct acpi_bus_event *entry = (struct acpi_bus_event *)data; ++ ++ if (strcmp(entry->device_class, "ac_adapter") == 0) { ++ bool ac = power_supply_is_system_supplied(); ++ ++ NV_DEBUG(dev, "power supply changed: %s\n", ac ? "AC" : "DC"); ++ } ++ ++ return NOTIFY_OK; + } ++#endif + + int + nouveau_pm_init(struct drm_device *dev) +@@ -480,6 +508,10 @@ + + nouveau_sysfs_init(dev); + nouveau_hwmon_init(dev); ++#ifdef CONFIG_ACPI ++ pm->acpi_nb.notifier_call = nouveau_pm_acpi_event; ++ register_acpi_notifier(&pm->acpi_nb); ++#endif + + return 0; + } +@@ -498,6 +530,9 @@ + nouveau_perf_fini(dev); + nouveau_volt_fini(dev); + ++#ifdef CONFIG_ACPI ++ unregister_acpi_notifier(&pm->acpi_nb); ++#endif + nouveau_hwmon_fini(dev); + nouveau_sysfs_fini(dev); + } +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_ramht.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_ramht.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.c 2010-11-12 06:18:06.000000000 +0100 +@@ -114,7 +114,7 @@ + (gpuobj->engine << NV40_RAMHT_CONTEXT_ENGINE_SHIFT); + } else { + if (gpuobj->engine == NVOBJ_ENGINE_DISPLAY) { +- ctx = (gpuobj->cinst << 10) | 2; ++ ctx = (gpuobj->cinst << 10) | chan->id; + } else { + ctx = (gpuobj->cinst >> 4) | + ((gpuobj->engine << +@@ -153,26 +153,42 @@ + return -ENOMEM; + } + ++static struct nouveau_ramht_entry * ++nouveau_ramht_remove_entry(struct nouveau_channel *chan, u32 handle) ++{ ++ struct nouveau_ramht *ramht = chan ? chan->ramht : NULL; ++ struct nouveau_ramht_entry *entry; ++ unsigned long flags; ++ ++ if (!ramht) ++ return NULL; ++ ++ spin_lock_irqsave(&ramht->lock, flags); ++ list_for_each_entry(entry, &ramht->entries, head) { ++ if (entry->channel == chan && ++ (!handle || entry->handle == handle)) { ++ list_del(&entry->head); ++ spin_unlock_irqrestore(&ramht->lock, flags); ++ ++ return entry; ++ } ++ } ++ spin_unlock_irqrestore(&ramht->lock, flags); ++ ++ return NULL; ++} ++ + static void +-nouveau_ramht_remove_locked(struct nouveau_channel *chan, u32 handle) ++nouveau_ramht_remove_hash(struct nouveau_channel *chan, u32 handle) + { + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_instmem_engine *instmem = &dev_priv->engine.instmem; + struct nouveau_gpuobj *ramht = chan->ramht->gpuobj; +- struct nouveau_ramht_entry *entry, *tmp; ++ unsigned long flags; + u32 co, ho; + +- list_for_each_entry_safe(entry, tmp, &chan->ramht->entries, head) { +- if (entry->channel != chan || entry->handle != handle) +- continue; +- +- nouveau_gpuobj_ref(NULL, &entry->gpuobj); +- list_del(&entry->head); +- kfree(entry); +- break; +- } +- ++ spin_lock_irqsave(&chan->ramht->lock, flags); + co = ho = nouveau_ramht_hash_handle(chan, handle); + do { + if (nouveau_ramht_entry_valid(dev, ramht, co) && +@@ -184,7 +200,7 @@ + nv_wo32(ramht, co + 0, 0x00000000); + nv_wo32(ramht, co + 4, 0x00000000); + instmem->flush(dev); +- return; ++ goto out; + } + + co += 8; +@@ -194,17 +210,23 @@ + + NV_ERROR(dev, "RAMHT entry not found. ch=%d, handle=0x%08x\n", + chan->id, handle); ++out: ++ spin_unlock_irqrestore(&chan->ramht->lock, flags); + } + +-void ++int + nouveau_ramht_remove(struct nouveau_channel *chan, u32 handle) + { +- struct nouveau_ramht *ramht = chan->ramht; +- unsigned long flags; ++ struct nouveau_ramht_entry *entry; + +- spin_lock_irqsave(&ramht->lock, flags); +- nouveau_ramht_remove_locked(chan, handle); +- spin_unlock_irqrestore(&ramht->lock, flags); ++ entry = nouveau_ramht_remove_entry(chan, handle); ++ if (!entry) ++ return -ENOENT; ++ ++ nouveau_ramht_remove_hash(chan, entry->handle); ++ nouveau_gpuobj_ref(NULL, &entry->gpuobj); ++ kfree(entry); ++ return 0; + } + + struct nouveau_gpuobj * +@@ -265,23 +287,19 @@ + nouveau_ramht_ref(struct nouveau_ramht *ref, struct nouveau_ramht **ptr, + struct nouveau_channel *chan) + { +- struct nouveau_ramht_entry *entry, *tmp; ++ struct nouveau_ramht_entry *entry; + struct nouveau_ramht *ramht; +- unsigned long flags; + + if (ref) + kref_get(&ref->refcount); + + ramht = *ptr; + if (ramht) { +- spin_lock_irqsave(&ramht->lock, flags); +- list_for_each_entry_safe(entry, tmp, &ramht->entries, head) { +- if (entry->channel != chan) +- continue; +- +- nouveau_ramht_remove_locked(chan, entry->handle); ++ while ((entry = nouveau_ramht_remove_entry(chan, 0))) { ++ nouveau_ramht_remove_hash(chan, entry->handle); ++ nouveau_gpuobj_ref(NULL, &entry->gpuobj); ++ kfree(entry); + } +- spin_unlock_irqrestore(&ramht->lock, flags); + + kref_put(&ramht->refcount, nouveau_ramht_del); + } +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_ramht.h linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.h +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_ramht.h 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.h 2010-11-12 06:18:06.000000000 +0100 +@@ -48,7 +48,7 @@ + + extern int nouveau_ramht_insert(struct nouveau_channel *, u32 handle, + struct nouveau_gpuobj *); +-extern void nouveau_ramht_remove(struct nouveau_channel *, u32 handle); ++extern int nouveau_ramht_remove(struct nouveau_channel *, u32 handle); + extern struct nouveau_gpuobj * + nouveau_ramht_find(struct nouveau_channel *chan, u32 handle); + +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_reg.h linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_reg.h +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_reg.h 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_reg.h 2010-11-12 06:18:06.000000000 +0100 +@@ -45,6 +45,11 @@ + # define NV04_PFB_REF_CMD_REFRESH (1 << 0) + #define NV04_PFB_PRE 0x001002d4 + # define NV04_PFB_PRE_CMD_PRECHARGE (1 << 0) ++#define NV20_PFB_ZCOMP(i) (0x00100300 + 4*(i)) ++# define NV20_PFB_ZCOMP_MODE_32 (4 << 24) ++# define NV20_PFB_ZCOMP_EN (1 << 31) ++# define NV25_PFB_ZCOMP_MODE_16 (1 << 20) ++# define NV25_PFB_ZCOMP_MODE_32 (2 << 20) + #define NV10_PFB_CLOSE_PAGE2 0x0010033c + #define NV04_PFB_SCRAMBLE(i) (0x00100400 + 4 * (i)) + #define NV40_PFB_TILE(i) (0x00100600 + (i*16)) +@@ -332,6 +337,7 @@ + #define NV04_PGRAPH_BSWIZZLE5 0x004006A0 + #define NV03_PGRAPH_STATUS 0x004006B0 + #define NV04_PGRAPH_STATUS 0x00400700 ++# define NV40_PGRAPH_STATUS_SYNC_STALL 0x00004000 + #define NV04_PGRAPH_TRAPPED_ADDR 0x00400704 + #define NV04_PGRAPH_TRAPPED_DATA 0x00400708 + #define NV04_PGRAPH_SURFACE 0x0040070C +@@ -378,6 +384,7 @@ + #define NV20_PGRAPH_TLIMIT(i) (0x00400904 + (i*16)) + #define NV20_PGRAPH_TSIZE(i) (0x00400908 + (i*16)) + #define NV20_PGRAPH_TSTATUS(i) (0x0040090C + (i*16)) ++#define NV20_PGRAPH_ZCOMP(i) (0x00400980 + 4*(i)) + #define NV10_PGRAPH_TILE(i) (0x00400B00 + (i*16)) + #define NV10_PGRAPH_TLIMIT(i) (0x00400B04 + (i*16)) + #define NV10_PGRAPH_TSIZE(i) (0x00400B08 + (i*16)) +@@ -714,31 +721,32 @@ + #define NV50_PDISPLAY_INTR_1_CLK_UNK10 0x00000010 + #define NV50_PDISPLAY_INTR_1_CLK_UNK20 0x00000020 + #define NV50_PDISPLAY_INTR_1_CLK_UNK40 0x00000040 +-#define NV50_PDISPLAY_INTR_EN 0x0061002c +-#define NV50_PDISPLAY_INTR_EN_VBLANK_CRTC 0x0000000c +-#define NV50_PDISPLAY_INTR_EN_VBLANK_CRTC_(n) (1 << ((n) + 2)) +-#define NV50_PDISPLAY_INTR_EN_VBLANK_CRTC_0 0x00000004 +-#define NV50_PDISPLAY_INTR_EN_VBLANK_CRTC_1 0x00000008 +-#define NV50_PDISPLAY_INTR_EN_CLK_UNK10 0x00000010 +-#define NV50_PDISPLAY_INTR_EN_CLK_UNK20 0x00000020 +-#define NV50_PDISPLAY_INTR_EN_CLK_UNK40 0x00000040 ++#define NV50_PDISPLAY_INTR_EN_0 0x00610028 ++#define NV50_PDISPLAY_INTR_EN_1 0x0061002c ++#define NV50_PDISPLAY_INTR_EN_1_VBLANK_CRTC 0x0000000c ++#define NV50_PDISPLAY_INTR_EN_1_VBLANK_CRTC_(n) (1 << ((n) + 2)) ++#define NV50_PDISPLAY_INTR_EN_1_VBLANK_CRTC_0 0x00000004 ++#define NV50_PDISPLAY_INTR_EN_1_VBLANK_CRTC_1 0x00000008 ++#define NV50_PDISPLAY_INTR_EN_1_CLK_UNK10 0x00000010 ++#define NV50_PDISPLAY_INTR_EN_1_CLK_UNK20 0x00000020 ++#define NV50_PDISPLAY_INTR_EN_1_CLK_UNK40 0x00000040 + #define NV50_PDISPLAY_UNK30_CTRL 0x00610030 + #define NV50_PDISPLAY_UNK30_CTRL_UPDATE_VCLK0 0x00000200 + #define NV50_PDISPLAY_UNK30_CTRL_UPDATE_VCLK1 0x00000400 + #define NV50_PDISPLAY_UNK30_CTRL_PENDING 0x80000000 +-#define NV50_PDISPLAY_TRAPPED_ADDR 0x00610080 +-#define NV50_PDISPLAY_TRAPPED_DATA 0x00610084 +-#define NV50_PDISPLAY_CHANNEL_STAT(i) ((i) * 0x10 + 0x00610200) +-#define NV50_PDISPLAY_CHANNEL_STAT_DMA 0x00000010 +-#define NV50_PDISPLAY_CHANNEL_STAT_DMA_DISABLED 0x00000000 +-#define NV50_PDISPLAY_CHANNEL_STAT_DMA_ENABLED 0x00000010 +-#define NV50_PDISPLAY_CHANNEL_DMA_CB(i) ((i) * 0x10 + 0x00610204) +-#define NV50_PDISPLAY_CHANNEL_DMA_CB_LOCATION 0x00000002 +-#define NV50_PDISPLAY_CHANNEL_DMA_CB_LOCATION_VRAM 0x00000000 +-#define NV50_PDISPLAY_CHANNEL_DMA_CB_LOCATION_SYSTEM 0x00000002 +-#define NV50_PDISPLAY_CHANNEL_DMA_CB_VALID 0x00000001 +-#define NV50_PDISPLAY_CHANNEL_UNK2(i) ((i) * 0x10 + 0x00610208) +-#define NV50_PDISPLAY_CHANNEL_UNK3(i) ((i) * 0x10 + 0x0061020c) ++#define NV50_PDISPLAY_TRAPPED_ADDR(i) ((i) * 0x08 + 0x00610080) ++#define NV50_PDISPLAY_TRAPPED_DATA(i) ((i) * 0x08 + 0x00610084) ++#define NV50_PDISPLAY_EVO_CTRL(i) ((i) * 0x10 + 0x00610200) ++#define NV50_PDISPLAY_EVO_CTRL_DMA 0x00000010 ++#define NV50_PDISPLAY_EVO_CTRL_DMA_DISABLED 0x00000000 ++#define NV50_PDISPLAY_EVO_CTRL_DMA_ENABLED 0x00000010 ++#define NV50_PDISPLAY_EVO_DMA_CB(i) ((i) * 0x10 + 0x00610204) ++#define NV50_PDISPLAY_EVO_DMA_CB_LOCATION 0x00000002 ++#define NV50_PDISPLAY_EVO_DMA_CB_LOCATION_VRAM 0x00000000 ++#define NV50_PDISPLAY_EVO_DMA_CB_LOCATION_SYSTEM 0x00000002 ++#define NV50_PDISPLAY_EVO_DMA_CB_VALID 0x00000001 ++#define NV50_PDISPLAY_EVO_UNK2(i) ((i) * 0x10 + 0x00610208) ++#define NV50_PDISPLAY_EVO_HASH_TAG(i) ((i) * 0x10 + 0x0061020c) + + #define NV50_PDISPLAY_CURSOR 0x00610270 + #define NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(i) ((i) * 0x10 + 0x00610270) +@@ -746,15 +754,11 @@ + #define NV50_PDISPLAY_CURSOR_CURSOR_CTRL2_STATUS 0x00030000 + #define NV50_PDISPLAY_CURSOR_CURSOR_CTRL2_STATUS_ACTIVE 0x00010000 + +-#define NV50_PDISPLAY_CTRL_STATE 0x00610300 +-#define NV50_PDISPLAY_CTRL_STATE_PENDING 0x80000000 +-#define NV50_PDISPLAY_CTRL_STATE_METHOD 0x00001ffc +-#define NV50_PDISPLAY_CTRL_STATE_ENABLE 0x00000001 +-#define NV50_PDISPLAY_CTRL_VAL 0x00610304 +-#define NV50_PDISPLAY_UNK_380 0x00610380 +-#define NV50_PDISPLAY_RAM_AMOUNT 0x00610384 +-#define NV50_PDISPLAY_UNK_388 0x00610388 +-#define NV50_PDISPLAY_UNK_38C 0x0061038c ++#define NV50_PDISPLAY_PIO_CTRL 0x00610300 ++#define NV50_PDISPLAY_PIO_CTRL_PENDING 0x80000000 ++#define NV50_PDISPLAY_PIO_CTRL_MTHD 0x00001ffc ++#define NV50_PDISPLAY_PIO_CTRL_ENABLED 0x00000001 ++#define NV50_PDISPLAY_PIO_DATA 0x00610304 + + #define NV50_PDISPLAY_CRTC_P(i, r) ((i) * 0x540 + NV50_PDISPLAY_CRTC_##r) + #define NV50_PDISPLAY_CRTC_C(i, r) (4 + (i) * 0x540 + NV50_PDISPLAY_CRTC_##r) +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_sgdma.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_sgdma.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_sgdma.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_sgdma.c 2010-11-12 06:18:06.000000000 +0100 +@@ -120,8 +120,8 @@ + dev_priv->engine.instmem.flush(nvbe->dev); + + if (dev_priv->card_type == NV_50) { +- nv50_vm_flush(dev, 5); /* PGRAPH */ +- nv50_vm_flush(dev, 0); /* PFIFO */ ++ dev_priv->engine.fifo.tlb_flush(dev); ++ dev_priv->engine.graph.tlb_flush(dev); + } + + nvbe->bound = true; +@@ -162,8 +162,8 @@ + dev_priv->engine.instmem.flush(nvbe->dev); + + if (dev_priv->card_type == NV_50) { +- nv50_vm_flush(dev, 5); +- nv50_vm_flush(dev, 0); ++ dev_priv->engine.fifo.tlb_flush(dev); ++ dev_priv->engine.graph.tlb_flush(dev); + } + + nvbe->bound = false; +@@ -224,7 +224,11 @@ + int i, ret; + + if (dev_priv->card_type < NV_50) { +- aper_size = (64 * 1024 * 1024); ++ if(dev_priv->ramin_rsvd_vram < 2 * 1024 * 1024) ++ aper_size = 64 * 1024 * 1024; ++ else ++ aper_size = 512 * 1024 * 1024; ++ + obj_size = (aper_size >> NV_CTXDMA_PAGE_SHIFT) * 4; + obj_size += 8; /* ctxdma header */ + } else { +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_state.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_state.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_state.c 2010-11-12 06:18:06.000000000 +0100 +@@ -53,10 +53,10 @@ + engine->instmem.takedown = nv04_instmem_takedown; + engine->instmem.suspend = nv04_instmem_suspend; + engine->instmem.resume = nv04_instmem_resume; +- engine->instmem.populate = nv04_instmem_populate; +- engine->instmem.clear = nv04_instmem_clear; +- engine->instmem.bind = nv04_instmem_bind; +- engine->instmem.unbind = nv04_instmem_unbind; ++ engine->instmem.get = nv04_instmem_get; ++ engine->instmem.put = nv04_instmem_put; ++ engine->instmem.map = nv04_instmem_map; ++ engine->instmem.unmap = nv04_instmem_unmap; + engine->instmem.flush = nv04_instmem_flush; + engine->mc.init = nv04_mc_init; + engine->mc.takedown = nv04_mc_takedown; +@@ -65,7 +65,6 @@ + engine->timer.takedown = nv04_timer_takedown; + engine->fb.init = nv04_fb_init; + engine->fb.takedown = nv04_fb_takedown; +- engine->graph.grclass = nv04_graph_grclass; + engine->graph.init = nv04_graph_init; + engine->graph.takedown = nv04_graph_takedown; + engine->graph.fifo_access = nv04_graph_fifo_access; +@@ -76,7 +75,7 @@ + engine->graph.unload_context = nv04_graph_unload_context; + engine->fifo.channels = 16; + engine->fifo.init = nv04_fifo_init; +- engine->fifo.takedown = nouveau_stub_takedown; ++ engine->fifo.takedown = nv04_fifo_fini; + engine->fifo.disable = nv04_fifo_disable; + engine->fifo.enable = nv04_fifo_enable; + engine->fifo.reassign = nv04_fifo_reassign; +@@ -99,16 +98,18 @@ + engine->pm.clock_get = nv04_pm_clock_get; + engine->pm.clock_pre = nv04_pm_clock_pre; + engine->pm.clock_set = nv04_pm_clock_set; ++ engine->crypt.init = nouveau_stub_init; ++ engine->crypt.takedown = nouveau_stub_takedown; + break; + case 0x10: + engine->instmem.init = nv04_instmem_init; + engine->instmem.takedown = nv04_instmem_takedown; + engine->instmem.suspend = nv04_instmem_suspend; + engine->instmem.resume = nv04_instmem_resume; +- engine->instmem.populate = nv04_instmem_populate; +- engine->instmem.clear = nv04_instmem_clear; +- engine->instmem.bind = nv04_instmem_bind; +- engine->instmem.unbind = nv04_instmem_unbind; ++ engine->instmem.get = nv04_instmem_get; ++ engine->instmem.put = nv04_instmem_put; ++ engine->instmem.map = nv04_instmem_map; ++ engine->instmem.unmap = nv04_instmem_unmap; + engine->instmem.flush = nv04_instmem_flush; + engine->mc.init = nv04_mc_init; + engine->mc.takedown = nv04_mc_takedown; +@@ -117,8 +118,9 @@ + engine->timer.takedown = nv04_timer_takedown; + engine->fb.init = nv10_fb_init; + engine->fb.takedown = nv10_fb_takedown; +- engine->fb.set_region_tiling = nv10_fb_set_region_tiling; +- engine->graph.grclass = nv10_graph_grclass; ++ engine->fb.init_tile_region = nv10_fb_init_tile_region; ++ engine->fb.set_tile_region = nv10_fb_set_tile_region; ++ engine->fb.free_tile_region = nv10_fb_free_tile_region; + engine->graph.init = nv10_graph_init; + engine->graph.takedown = nv10_graph_takedown; + engine->graph.channel = nv10_graph_channel; +@@ -127,17 +129,17 @@ + engine->graph.fifo_access = nv04_graph_fifo_access; + engine->graph.load_context = nv10_graph_load_context; + engine->graph.unload_context = nv10_graph_unload_context; +- engine->graph.set_region_tiling = nv10_graph_set_region_tiling; ++ engine->graph.set_tile_region = nv10_graph_set_tile_region; + engine->fifo.channels = 32; + engine->fifo.init = nv10_fifo_init; +- engine->fifo.takedown = nouveau_stub_takedown; ++ engine->fifo.takedown = nv04_fifo_fini; + engine->fifo.disable = nv04_fifo_disable; + engine->fifo.enable = nv04_fifo_enable; + engine->fifo.reassign = nv04_fifo_reassign; + engine->fifo.cache_pull = nv04_fifo_cache_pull; + engine->fifo.channel_id = nv10_fifo_channel_id; + engine->fifo.create_context = nv10_fifo_create_context; +- engine->fifo.destroy_context = nv10_fifo_destroy_context; ++ engine->fifo.destroy_context = nv04_fifo_destroy_context; + engine->fifo.load_context = nv10_fifo_load_context; + engine->fifo.unload_context = nv10_fifo_unload_context; + engine->display.early_init = nv04_display_early_init; +@@ -153,16 +155,18 @@ + engine->pm.clock_get = nv04_pm_clock_get; + engine->pm.clock_pre = nv04_pm_clock_pre; + engine->pm.clock_set = nv04_pm_clock_set; ++ engine->crypt.init = nouveau_stub_init; ++ engine->crypt.takedown = nouveau_stub_takedown; + break; + case 0x20: + engine->instmem.init = nv04_instmem_init; + engine->instmem.takedown = nv04_instmem_takedown; + engine->instmem.suspend = nv04_instmem_suspend; + engine->instmem.resume = nv04_instmem_resume; +- engine->instmem.populate = nv04_instmem_populate; +- engine->instmem.clear = nv04_instmem_clear; +- engine->instmem.bind = nv04_instmem_bind; +- engine->instmem.unbind = nv04_instmem_unbind; ++ engine->instmem.get = nv04_instmem_get; ++ engine->instmem.put = nv04_instmem_put; ++ engine->instmem.map = nv04_instmem_map; ++ engine->instmem.unmap = nv04_instmem_unmap; + engine->instmem.flush = nv04_instmem_flush; + engine->mc.init = nv04_mc_init; + engine->mc.takedown = nv04_mc_takedown; +@@ -171,8 +175,9 @@ + engine->timer.takedown = nv04_timer_takedown; + engine->fb.init = nv10_fb_init; + engine->fb.takedown = nv10_fb_takedown; +- engine->fb.set_region_tiling = nv10_fb_set_region_tiling; +- engine->graph.grclass = nv20_graph_grclass; ++ engine->fb.init_tile_region = nv10_fb_init_tile_region; ++ engine->fb.set_tile_region = nv10_fb_set_tile_region; ++ engine->fb.free_tile_region = nv10_fb_free_tile_region; + engine->graph.init = nv20_graph_init; + engine->graph.takedown = nv20_graph_takedown; + engine->graph.channel = nv10_graph_channel; +@@ -181,17 +186,17 @@ + engine->graph.fifo_access = nv04_graph_fifo_access; + engine->graph.load_context = nv20_graph_load_context; + engine->graph.unload_context = nv20_graph_unload_context; +- engine->graph.set_region_tiling = nv20_graph_set_region_tiling; ++ engine->graph.set_tile_region = nv20_graph_set_tile_region; + engine->fifo.channels = 32; + engine->fifo.init = nv10_fifo_init; +- engine->fifo.takedown = nouveau_stub_takedown; ++ engine->fifo.takedown = nv04_fifo_fini; + engine->fifo.disable = nv04_fifo_disable; + engine->fifo.enable = nv04_fifo_enable; + engine->fifo.reassign = nv04_fifo_reassign; + engine->fifo.cache_pull = nv04_fifo_cache_pull; + engine->fifo.channel_id = nv10_fifo_channel_id; + engine->fifo.create_context = nv10_fifo_create_context; +- engine->fifo.destroy_context = nv10_fifo_destroy_context; ++ engine->fifo.destroy_context = nv04_fifo_destroy_context; + engine->fifo.load_context = nv10_fifo_load_context; + engine->fifo.unload_context = nv10_fifo_unload_context; + engine->display.early_init = nv04_display_early_init; +@@ -207,16 +212,18 @@ + engine->pm.clock_get = nv04_pm_clock_get; + engine->pm.clock_pre = nv04_pm_clock_pre; + engine->pm.clock_set = nv04_pm_clock_set; ++ engine->crypt.init = nouveau_stub_init; ++ engine->crypt.takedown = nouveau_stub_takedown; + break; + case 0x30: + engine->instmem.init = nv04_instmem_init; + engine->instmem.takedown = nv04_instmem_takedown; + engine->instmem.suspend = nv04_instmem_suspend; + engine->instmem.resume = nv04_instmem_resume; +- engine->instmem.populate = nv04_instmem_populate; +- engine->instmem.clear = nv04_instmem_clear; +- engine->instmem.bind = nv04_instmem_bind; +- engine->instmem.unbind = nv04_instmem_unbind; ++ engine->instmem.get = nv04_instmem_get; ++ engine->instmem.put = nv04_instmem_put; ++ engine->instmem.map = nv04_instmem_map; ++ engine->instmem.unmap = nv04_instmem_unmap; + engine->instmem.flush = nv04_instmem_flush; + engine->mc.init = nv04_mc_init; + engine->mc.takedown = nv04_mc_takedown; +@@ -225,8 +232,9 @@ + engine->timer.takedown = nv04_timer_takedown; + engine->fb.init = nv30_fb_init; + engine->fb.takedown = nv30_fb_takedown; +- engine->fb.set_region_tiling = nv10_fb_set_region_tiling; +- engine->graph.grclass = nv30_graph_grclass; ++ engine->fb.init_tile_region = nv30_fb_init_tile_region; ++ engine->fb.set_tile_region = nv10_fb_set_tile_region; ++ engine->fb.free_tile_region = nv30_fb_free_tile_region; + engine->graph.init = nv30_graph_init; + engine->graph.takedown = nv20_graph_takedown; + engine->graph.fifo_access = nv04_graph_fifo_access; +@@ -235,17 +243,17 @@ + engine->graph.destroy_context = nv20_graph_destroy_context; + engine->graph.load_context = nv20_graph_load_context; + engine->graph.unload_context = nv20_graph_unload_context; +- engine->graph.set_region_tiling = nv20_graph_set_region_tiling; ++ engine->graph.set_tile_region = nv20_graph_set_tile_region; + engine->fifo.channels = 32; + engine->fifo.init = nv10_fifo_init; +- engine->fifo.takedown = nouveau_stub_takedown; ++ engine->fifo.takedown = nv04_fifo_fini; + engine->fifo.disable = nv04_fifo_disable; + engine->fifo.enable = nv04_fifo_enable; + engine->fifo.reassign = nv04_fifo_reassign; + engine->fifo.cache_pull = nv04_fifo_cache_pull; + engine->fifo.channel_id = nv10_fifo_channel_id; + engine->fifo.create_context = nv10_fifo_create_context; +- engine->fifo.destroy_context = nv10_fifo_destroy_context; ++ engine->fifo.destroy_context = nv04_fifo_destroy_context; + engine->fifo.load_context = nv10_fifo_load_context; + engine->fifo.unload_context = nv10_fifo_unload_context; + engine->display.early_init = nv04_display_early_init; +@@ -263,6 +271,8 @@ + engine->pm.clock_set = nv04_pm_clock_set; + engine->pm.voltage_get = nouveau_voltage_gpio_get; + engine->pm.voltage_set = nouveau_voltage_gpio_set; ++ engine->crypt.init = nouveau_stub_init; ++ engine->crypt.takedown = nouveau_stub_takedown; + break; + case 0x40: + case 0x60: +@@ -270,10 +280,10 @@ + engine->instmem.takedown = nv04_instmem_takedown; + engine->instmem.suspend = nv04_instmem_suspend; + engine->instmem.resume = nv04_instmem_resume; +- engine->instmem.populate = nv04_instmem_populate; +- engine->instmem.clear = nv04_instmem_clear; +- engine->instmem.bind = nv04_instmem_bind; +- engine->instmem.unbind = nv04_instmem_unbind; ++ engine->instmem.get = nv04_instmem_get; ++ engine->instmem.put = nv04_instmem_put; ++ engine->instmem.map = nv04_instmem_map; ++ engine->instmem.unmap = nv04_instmem_unmap; + engine->instmem.flush = nv04_instmem_flush; + engine->mc.init = nv40_mc_init; + engine->mc.takedown = nv40_mc_takedown; +@@ -282,8 +292,9 @@ + engine->timer.takedown = nv04_timer_takedown; + engine->fb.init = nv40_fb_init; + engine->fb.takedown = nv40_fb_takedown; +- engine->fb.set_region_tiling = nv40_fb_set_region_tiling; +- engine->graph.grclass = nv40_graph_grclass; ++ engine->fb.init_tile_region = nv30_fb_init_tile_region; ++ engine->fb.set_tile_region = nv40_fb_set_tile_region; ++ engine->fb.free_tile_region = nv30_fb_free_tile_region; + engine->graph.init = nv40_graph_init; + engine->graph.takedown = nv40_graph_takedown; + engine->graph.fifo_access = nv04_graph_fifo_access; +@@ -292,17 +303,17 @@ + engine->graph.destroy_context = nv40_graph_destroy_context; + engine->graph.load_context = nv40_graph_load_context; + engine->graph.unload_context = nv40_graph_unload_context; +- engine->graph.set_region_tiling = nv40_graph_set_region_tiling; ++ engine->graph.set_tile_region = nv40_graph_set_tile_region; + engine->fifo.channels = 32; + engine->fifo.init = nv40_fifo_init; +- engine->fifo.takedown = nouveau_stub_takedown; ++ engine->fifo.takedown = nv04_fifo_fini; + engine->fifo.disable = nv04_fifo_disable; + engine->fifo.enable = nv04_fifo_enable; + engine->fifo.reassign = nv04_fifo_reassign; + engine->fifo.cache_pull = nv04_fifo_cache_pull; + engine->fifo.channel_id = nv10_fifo_channel_id; + engine->fifo.create_context = nv40_fifo_create_context; +- engine->fifo.destroy_context = nv40_fifo_destroy_context; ++ engine->fifo.destroy_context = nv04_fifo_destroy_context; + engine->fifo.load_context = nv40_fifo_load_context; + engine->fifo.unload_context = nv40_fifo_unload_context; + engine->display.early_init = nv04_display_early_init; +@@ -321,6 +332,8 @@ + engine->pm.voltage_get = nouveau_voltage_gpio_get; + engine->pm.voltage_set = nouveau_voltage_gpio_set; + engine->pm.temp_get = nv40_temp_get; ++ engine->crypt.init = nouveau_stub_init; ++ engine->crypt.takedown = nouveau_stub_takedown; + break; + case 0x50: + case 0x80: /* gotta love NVIDIA's consistency.. */ +@@ -330,10 +343,10 @@ + engine->instmem.takedown = nv50_instmem_takedown; + engine->instmem.suspend = nv50_instmem_suspend; + engine->instmem.resume = nv50_instmem_resume; +- engine->instmem.populate = nv50_instmem_populate; +- engine->instmem.clear = nv50_instmem_clear; +- engine->instmem.bind = nv50_instmem_bind; +- engine->instmem.unbind = nv50_instmem_unbind; ++ engine->instmem.get = nv50_instmem_get; ++ engine->instmem.put = nv50_instmem_put; ++ engine->instmem.map = nv50_instmem_map; ++ engine->instmem.unmap = nv50_instmem_unmap; + if (dev_priv->chipset == 0x50) + engine->instmem.flush = nv50_instmem_flush; + else +@@ -345,7 +358,6 @@ + engine->timer.takedown = nv04_timer_takedown; + engine->fb.init = nv50_fb_init; + engine->fb.takedown = nv50_fb_takedown; +- engine->graph.grclass = nv50_graph_grclass; + engine->graph.init = nv50_graph_init; + engine->graph.takedown = nv50_graph_takedown; + engine->graph.fifo_access = nv50_graph_fifo_access; +@@ -354,6 +366,15 @@ + engine->graph.destroy_context = nv50_graph_destroy_context; + engine->graph.load_context = nv50_graph_load_context; + engine->graph.unload_context = nv50_graph_unload_context; ++ if (dev_priv->chipset != 0x86) ++ engine->graph.tlb_flush = nv50_graph_tlb_flush; ++ else { ++ /* from what i can see nvidia do this on every ++ * pre-NVA3 board except NVAC, but, we've only ++ * ever seen problems on NV86 ++ */ ++ engine->graph.tlb_flush = nv86_graph_tlb_flush; ++ } + engine->fifo.channels = 128; + engine->fifo.init = nv50_fifo_init; + engine->fifo.takedown = nv50_fifo_takedown; +@@ -365,30 +386,39 @@ + engine->fifo.destroy_context = nv50_fifo_destroy_context; + engine->fifo.load_context = nv50_fifo_load_context; + engine->fifo.unload_context = nv50_fifo_unload_context; ++ engine->fifo.tlb_flush = nv50_fifo_tlb_flush; + engine->display.early_init = nv50_display_early_init; + engine->display.late_takedown = nv50_display_late_takedown; + engine->display.create = nv50_display_create; + engine->display.init = nv50_display_init; + engine->display.destroy = nv50_display_destroy; + engine->gpio.init = nv50_gpio_init; +- engine->gpio.takedown = nouveau_stub_takedown; ++ engine->gpio.takedown = nv50_gpio_fini; + engine->gpio.get = nv50_gpio_get; + engine->gpio.set = nv50_gpio_set; ++ engine->gpio.irq_register = nv50_gpio_irq_register; ++ engine->gpio.irq_unregister = nv50_gpio_irq_unregister; + engine->gpio.irq_enable = nv50_gpio_irq_enable; + switch (dev_priv->chipset) { +- case 0xa3: +- case 0xa5: +- case 0xa8: +- case 0xaf: +- engine->pm.clock_get = nva3_pm_clock_get; +- engine->pm.clock_pre = nva3_pm_clock_pre; +- engine->pm.clock_set = nva3_pm_clock_set; +- break; +- default: ++ case 0x84: ++ case 0x86: ++ case 0x92: ++ case 0x94: ++ case 0x96: ++ case 0x98: ++ case 0xa0: ++ case 0xaa: ++ case 0xac: ++ case 0x50: + engine->pm.clock_get = nv50_pm_clock_get; + engine->pm.clock_pre = nv50_pm_clock_pre; + engine->pm.clock_set = nv50_pm_clock_set; + break; ++ default: ++ engine->pm.clock_get = nva3_pm_clock_get; ++ engine->pm.clock_pre = nva3_pm_clock_pre; ++ engine->pm.clock_set = nva3_pm_clock_set; ++ break; + } + engine->pm.voltage_get = nouveau_voltage_gpio_get; + engine->pm.voltage_set = nouveau_voltage_gpio_set; +@@ -396,16 +426,33 @@ + engine->pm.temp_get = nv84_temp_get; + else + engine->pm.temp_get = nv40_temp_get; ++ switch (dev_priv->chipset) { ++ case 0x84: ++ case 0x86: ++ case 0x92: ++ case 0x94: ++ case 0x96: ++ case 0xa0: ++ engine->crypt.init = nv84_crypt_init; ++ engine->crypt.takedown = nv84_crypt_fini; ++ engine->crypt.create_context = nv84_crypt_create_context; ++ engine->crypt.destroy_context = nv84_crypt_destroy_context; ++ break; ++ default: ++ engine->crypt.init = nouveau_stub_init; ++ engine->crypt.takedown = nouveau_stub_takedown; ++ break; ++ } + break; + case 0xC0: + engine->instmem.init = nvc0_instmem_init; + engine->instmem.takedown = nvc0_instmem_takedown; + engine->instmem.suspend = nvc0_instmem_suspend; + engine->instmem.resume = nvc0_instmem_resume; +- engine->instmem.populate = nvc0_instmem_populate; +- engine->instmem.clear = nvc0_instmem_clear; +- engine->instmem.bind = nvc0_instmem_bind; +- engine->instmem.unbind = nvc0_instmem_unbind; ++ engine->instmem.get = nvc0_instmem_get; ++ engine->instmem.put = nvc0_instmem_put; ++ engine->instmem.map = nvc0_instmem_map; ++ engine->instmem.unmap = nvc0_instmem_unmap; + engine->instmem.flush = nvc0_instmem_flush; + engine->mc.init = nv50_mc_init; + engine->mc.takedown = nv50_mc_takedown; +@@ -414,7 +461,6 @@ + engine->timer.takedown = nv04_timer_takedown; + engine->fb.init = nvc0_fb_init; + engine->fb.takedown = nvc0_fb_takedown; +- engine->graph.grclass = NULL; //nvc0_graph_grclass; + engine->graph.init = nvc0_graph_init; + engine->graph.takedown = nvc0_graph_takedown; + engine->graph.fifo_access = nvc0_graph_fifo_access; +@@ -443,7 +489,11 @@ + engine->gpio.takedown = nouveau_stub_takedown; + engine->gpio.get = nv50_gpio_get; + engine->gpio.set = nv50_gpio_set; ++ engine->gpio.irq_register = nv50_gpio_irq_register; ++ engine->gpio.irq_unregister = nv50_gpio_irq_unregister; + engine->gpio.irq_enable = nv50_gpio_irq_enable; ++ engine->crypt.init = nouveau_stub_init; ++ engine->crypt.takedown = nouveau_stub_takedown; + break; + default: + NV_ERROR(dev, "NV%02x unsupported\n", dev_priv->chipset); +@@ -506,11 +556,11 @@ + if (ret) + goto out_err; + ++ mutex_unlock(&dev_priv->channel->mutex); + return 0; + + out_err: +- nouveau_channel_free(dev_priv->channel); +- dev_priv->channel = NULL; ++ nouveau_channel_put(&dev_priv->channel); + return ret; + } + +@@ -557,6 +607,8 @@ + if (ret) + goto out; + engine = &dev_priv->engine; ++ spin_lock_init(&dev_priv->channels.lock); ++ spin_lock_init(&dev_priv->tile.lock); + spin_lock_init(&dev_priv->context_switch_lock); + + /* Make the CRTCs and I2C buses accessible */ +@@ -615,26 +667,28 @@ + if (ret) + goto out_fb; + ++ /* PCRYPT */ ++ ret = engine->crypt.init(dev); ++ if (ret) ++ goto out_graph; ++ + /* PFIFO */ + ret = engine->fifo.init(dev); + if (ret) +- goto out_graph; ++ goto out_crypt; + } + + ret = engine->display.create(dev); + if (ret) + goto out_fifo; + +- /* this call irq_preinstall, register irq handler and +- * call irq_postinstall +- */ +- ret = drm_irq_install(dev); ++ ret = drm_vblank_init(dev, nv_two_heads(dev) ? 2 : 1); + if (ret) +- goto out_display; ++ goto out_vblank; + +- ret = drm_vblank_init(dev, 0); ++ ret = nouveau_irq_init(dev); + if (ret) +- goto out_irq; ++ goto out_vblank; + + /* what about PVIDEO/PCRTC/PRAMDAC etc? */ + +@@ -659,12 +713,16 @@ + out_fence: + nouveau_fence_fini(dev); + out_irq: +- drm_irq_uninstall(dev); +-out_display: ++ nouveau_irq_fini(dev); ++out_vblank: ++ drm_vblank_cleanup(dev); + engine->display.destroy(dev); + out_fifo: + if (!nouveau_noaccel) + engine->fifo.takedown(dev); ++out_crypt: ++ if (!nouveau_noaccel) ++ engine->crypt.takedown(dev); + out_graph: + if (!nouveau_noaccel) + engine->graph.takedown(dev); +@@ -703,12 +761,12 @@ + + if (!engine->graph.accel_blocked) { + nouveau_fence_fini(dev); +- nouveau_channel_free(dev_priv->channel); +- dev_priv->channel = NULL; ++ nouveau_channel_put_unlocked(&dev_priv->channel); + } + + if (!nouveau_noaccel) { + engine->fifo.takedown(dev); ++ engine->crypt.takedown(dev); + engine->graph.takedown(dev); + } + engine->fb.takedown(dev); +@@ -727,7 +785,8 @@ + nouveau_gpuobj_takedown(dev); + nouveau_mem_vram_fini(dev); + +- drm_irq_uninstall(dev); ++ nouveau_irq_fini(dev); ++ drm_vblank_cleanup(dev); + + nouveau_pm_fini(dev); + nouveau_bios_takedown(dev); +@@ -1041,6 +1100,12 @@ + case NOUVEAU_GETPARAM_PTIMER_TIME: + getparam->value = dev_priv->engine.timer.read(dev); + break; ++ case NOUVEAU_GETPARAM_HAS_BO_USAGE: ++ getparam->value = 1; ++ break; ++ case NOUVEAU_GETPARAM_HAS_PAGEFLIP: ++ getparam->value = (dev_priv->card_type < NV_50); ++ break; + case NOUVEAU_GETPARAM_GRAPH_UNITS: + /* NV40 and NV50 versions are quite different, but register + * address is the same. User is supposed to know the card +@@ -1051,7 +1116,7 @@ + } + /* FALLTHRU */ + default: +- NV_ERROR(dev, "unknown parameter %lld\n", getparam->param); ++ NV_DEBUG(dev, "unknown parameter %lld\n", getparam->param); + return -EINVAL; + } + +@@ -1066,7 +1131,7 @@ + + switch (setparam->param) { + default: +- NV_ERROR(dev, "unknown parameter %lld\n", setparam->param); ++ NV_DEBUG(dev, "unknown parameter %lld\n", setparam->param); + return -EINVAL; + } + +@@ -1092,7 +1157,13 @@ + /* Waits for PGRAPH to go completely idle */ + bool nouveau_wait_for_idle(struct drm_device *dev) + { +- if (!nv_wait(dev, NV04_PGRAPH_STATUS, 0xffffffff, 0x00000000)) { ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ uint32_t mask = ~0; ++ ++ if (dev_priv->card_type == NV_40) ++ mask &= ~NV40_PGRAPH_STATUS_SYNC_STALL; ++ ++ if (!nv_wait(dev, NV04_PGRAPH_STATUS, mask, 0)) { + NV_ERROR(dev, "PGRAPH idle timed out with status 0x%08x\n", + nv_rd32(dev, NV04_PGRAPH_STATUS)); + return false; +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_temp.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_temp.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_temp.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_temp.c 2010-11-12 06:18:06.000000000 +0100 +@@ -191,7 +191,7 @@ + int offset = sensor->offset_mult / sensor->offset_div; + int core_temp; + +- if (dev_priv->chipset >= 0x50) { ++ if (dev_priv->card_type >= NV_50) { + core_temp = nv_rd32(dev, 0x20008); + } else { + core_temp = nv_rd32(dev, 0x0015b4) & 0x1fff; +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_util.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_util.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_util.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_util.c 2010-11-12 06:18:06.000000000 +0100 +@@ -0,0 +1,69 @@ ++/* ++ * Copyright (C) 2010 Nouveau Project ++ * ++ * All Rights Reserved. ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining ++ * a copy of this software and associated documentation files (the ++ * "Software"), to deal in the Software without restriction, including ++ * without limitation the rights to use, copy, modify, merge, publish, ++ * distribute, sublicense, and/or sell copies of the Software, and to ++ * permit persons to whom the Software is furnished to do so, subject to ++ * the following conditions: ++ * ++ * The above copyright notice and this permission notice (including the ++ * next paragraph) shall be included in all copies or substantial ++ * portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ++ * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE ++ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION ++ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ * ++ */ ++ ++#include ++ ++#include "nouveau_util.h" ++ ++static DEFINE_RATELIMIT_STATE(nouveau_ratelimit_state, 3 * HZ, 20); ++ ++void ++nouveau_bitfield_print(const struct nouveau_bitfield *bf, u32 value) ++{ ++ while (bf->name) { ++ if (value & bf->mask) { ++ printk(" %s", bf->name); ++ value &= ~bf->mask; ++ } ++ ++ bf++; ++ } ++ ++ if (value) ++ printk(" (unknown bits 0x%08x)", value); ++} ++ ++void ++nouveau_enum_print(const struct nouveau_enum *en, u32 value) ++{ ++ while (en->name) { ++ if (value == en->value) { ++ printk("%s", en->name); ++ return; ++ } ++ ++ en++; ++ } ++ ++ printk("(unknown enum 0x%08x)", value); ++} ++ ++int ++nouveau_ratelimit(void) ++{ ++ return __ratelimit(&nouveau_ratelimit_state); ++} +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_util.h linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_util.h +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_util.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_util.h 2010-11-12 06:18:06.000000000 +0100 +@@ -0,0 +1,45 @@ ++/* ++ * Copyright (C) 2010 Nouveau Project ++ * ++ * All Rights Reserved. ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining ++ * a copy of this software and associated documentation files (the ++ * "Software"), to deal in the Software without restriction, including ++ * without limitation the rights to use, copy, modify, merge, publish, ++ * distribute, sublicense, and/or sell copies of the Software, and to ++ * permit persons to whom the Software is furnished to do so, subject to ++ * the following conditions: ++ * ++ * The above copyright notice and this permission notice (including the ++ * next paragraph) shall be included in all copies or substantial ++ * portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ++ * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE ++ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION ++ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ * ++ */ ++ ++#ifndef __NOUVEAU_UTIL_H__ ++#define __NOUVEAU_UTIL_H__ ++ ++struct nouveau_bitfield { ++ u32 mask; ++ const char *name; ++}; ++ ++struct nouveau_enum { ++ u32 value; ++ const char *name; ++}; ++ ++void nouveau_bitfield_print(const struct nouveau_bitfield *, u32 value); ++void nouveau_enum_print(const struct nouveau_enum *, u32 value); ++int nouveau_ratelimit(void); ++ ++#endif +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_crtc.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_crtc.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_crtc.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_crtc.c 2010-11-12 06:18:06.000000000 +0100 +@@ -158,7 +158,6 @@ + { + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + struct drm_device *dev = crtc->dev; +- struct drm_connector *connector; + unsigned char seq1 = 0, crtc17 = 0; + unsigned char crtc1A; + +@@ -213,10 +212,6 @@ + NVVgaSeqReset(dev, nv_crtc->index, false); + + NVWriteVgaCrtc(dev, nv_crtc->index, NV_CIO_CRE_RPC1_INDEX, crtc1A); +- +- /* Update connector polling modes */ +- list_for_each_entry(connector, &dev->mode_config.connector_list, head) +- nouveau_connector_set_polling(connector); + } + + static bool +@@ -556,7 +551,10 @@ + if (dev_priv->card_type >= NV_30) + regp->gpio_ext = NVReadCRTC(dev, 0, NV_PCRTC_GPIO_EXT); + +- regp->crtc_cfg = NV_PCRTC_CONFIG_START_ADDRESS_HSYNC; ++ if (dev_priv->card_type >= NV_10) ++ regp->crtc_cfg = NV10_PCRTC_CONFIG_START_ADDRESS_HSYNC; ++ else ++ regp->crtc_cfg = NV04_PCRTC_CONFIG_START_ADDRESS_HSYNC; + + /* Some misc regs */ + if (dev_priv->card_type == NV_40) { +@@ -674,6 +672,7 @@ + if (nv_two_heads(dev)) + NVSetOwner(dev, nv_crtc->index); + ++ drm_vblank_pre_modeset(dev, nv_crtc->index); + funcs->dpms(crtc, DRM_MODE_DPMS_OFF); + + NVBlankScreen(dev, nv_crtc->index, true); +@@ -706,6 +705,7 @@ + #endif + + funcs->dpms(crtc, DRM_MODE_DPMS_ON); ++ drm_vblank_post_modeset(dev, nv_crtc->index); + } + + static void nv_crtc_destroy(struct drm_crtc *crtc) +@@ -831,7 +831,7 @@ + /* Update the framebuffer location. */ + regp->fb_start = nv_crtc->fb.offset & ~3; + regp->fb_start += (y * drm_fb->pitch) + (x * drm_fb->bits_per_pixel / 8); +- NVWriteCRTC(dev, nv_crtc->index, NV_PCRTC_START, regp->fb_start); ++ nv_set_crtc_base(dev, nv_crtc->index, regp->fb_start); + + /* Update the arbitration parameters. */ + nouveau_calc_arb(dev, crtc->mode.clock, drm_fb->bits_per_pixel, +@@ -991,6 +991,7 @@ + .cursor_move = nv04_crtc_cursor_move, + .gamma_set = nv_crtc_gamma_set, + .set_config = drm_crtc_helper_set_config, ++ .page_flip = nouveau_crtc_page_flip, + .destroy = nv_crtc_destroy, + }; + +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_dfp.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_dfp.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_dfp.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_dfp.c 2010-11-12 06:18:06.000000000 +0100 +@@ -185,14 +185,15 @@ + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct nouveau_connector *nv_connector = nouveau_encoder_connector_get(nv_encoder); + +- /* For internal panels and gpu scaling on DVI we need the native mode */ +- if (nv_connector->scaling_mode != DRM_MODE_SCALE_NONE) { +- if (!nv_connector->native_mode) +- return false; ++ if (!nv_connector->native_mode || ++ nv_connector->scaling_mode == DRM_MODE_SCALE_NONE || ++ mode->hdisplay > nv_connector->native_mode->hdisplay || ++ mode->vdisplay > nv_connector->native_mode->vdisplay) { ++ nv_encoder->mode = *adjusted_mode; ++ ++ } else { + nv_encoder->mode = *nv_connector->native_mode; + adjusted_mode->clock = nv_connector->native_mode->clock; +- } else { +- nv_encoder->mode = *adjusted_mode; + } + + return true; +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_display.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_display.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_display.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_display.c 2010-11-12 06:18:06.000000000 +0100 +@@ -32,6 +32,9 @@ + #include "nouveau_encoder.h" + #include "nouveau_connector.h" + ++static void nv04_vblank_crtc0_isr(struct drm_device *); ++static void nv04_vblank_crtc1_isr(struct drm_device *); ++ + static void + nv04_display_store_initial_head_owner(struct drm_device *dev) + { +@@ -197,6 +200,8 @@ + func->save(encoder); + } + ++ nouveau_irq_register(dev, 24, nv04_vblank_crtc0_isr); ++ nouveau_irq_register(dev, 25, nv04_vblank_crtc1_isr); + return 0; + } + +@@ -208,6 +213,9 @@ + + NV_DEBUG_KMS(dev, "\n"); + ++ nouveau_irq_unregister(dev, 24); ++ nouveau_irq_unregister(dev, 25); ++ + /* Turn every CRTC off. */ + list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { + struct drm_mode_set modeset = { +@@ -258,3 +266,16 @@ + return 0; + } + ++static void ++nv04_vblank_crtc0_isr(struct drm_device *dev) ++{ ++ nv_wr32(dev, NV_CRTC0_INTSTAT, NV_CRTC_INTR_VBLANK); ++ drm_handle_vblank(dev, 0); ++} ++ ++static void ++nv04_vblank_crtc1_isr(struct drm_device *dev) ++{ ++ nv_wr32(dev, NV_CRTC1_INTSTAT, NV_CRTC_INTR_VBLANK); ++ drm_handle_vblank(dev, 1); ++} +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_fbcon.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_fbcon.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_fbcon.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_fbcon.c 2010-11-12 06:18:06.000000000 +0100 +@@ -28,52 +28,39 @@ + #include "nouveau_ramht.h" + #include "nouveau_fbcon.h" + +-void ++int + nv04_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region) + { + struct nouveau_fbdev *nfbdev = info->par; + struct drm_device *dev = nfbdev->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *chan = dev_priv->channel; ++ int ret; + +- if (info->state != FBINFO_STATE_RUNNING) +- return; +- +- if (!(info->flags & FBINFO_HWACCEL_DISABLED) && RING_SPACE(chan, 4)) { +- nouveau_fbcon_gpu_lockup(info); +- } +- +- if (info->flags & FBINFO_HWACCEL_DISABLED) { +- cfb_copyarea(info, region); +- return; +- } ++ ret = RING_SPACE(chan, 4); ++ if (ret) ++ return ret; + + BEGIN_RING(chan, NvSubImageBlit, 0x0300, 3); + OUT_RING(chan, (region->sy << 16) | region->sx); + OUT_RING(chan, (region->dy << 16) | region->dx); + OUT_RING(chan, (region->height << 16) | region->width); + FIRE_RING(chan); ++ return 0; + } + +-void ++int + nv04_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect) + { + struct nouveau_fbdev *nfbdev = info->par; + struct drm_device *dev = nfbdev->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *chan = dev_priv->channel; ++ int ret; + +- if (info->state != FBINFO_STATE_RUNNING) +- return; +- +- if (!(info->flags & FBINFO_HWACCEL_DISABLED) && RING_SPACE(chan, 7)) { +- nouveau_fbcon_gpu_lockup(info); +- } +- +- if (info->flags & FBINFO_HWACCEL_DISABLED) { +- cfb_fillrect(info, rect); +- return; +- } ++ ret = RING_SPACE(chan, 7); ++ if (ret) ++ return ret; + + BEGIN_RING(chan, NvSubGdiRect, 0x02fc, 1); + OUT_RING(chan, (rect->rop != ROP_COPY) ? 1 : 3); +@@ -87,9 +74,10 @@ + OUT_RING(chan, (rect->dx << 16) | rect->dy); + OUT_RING(chan, (rect->width << 16) | rect->height); + FIRE_RING(chan); ++ return 0; + } + +-void ++int + nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) + { + struct nouveau_fbdev *nfbdev = info->par; +@@ -101,23 +89,14 @@ + uint32_t dsize; + uint32_t width; + uint32_t *data = (uint32_t *)image->data; ++ int ret; + +- if (info->state != FBINFO_STATE_RUNNING) +- return; +- +- if (image->depth != 1) { +- cfb_imageblit(info, image); +- return; +- } +- +- if (!(info->flags & FBINFO_HWACCEL_DISABLED) && RING_SPACE(chan, 8)) { +- nouveau_fbcon_gpu_lockup(info); +- } ++ if (image->depth != 1) ++ return -ENODEV; + +- if (info->flags & FBINFO_HWACCEL_DISABLED) { +- cfb_imageblit(info, image); +- return; +- } ++ ret = RING_SPACE(chan, 8); ++ if (ret) ++ return ret; + + width = ALIGN(image->width, 8); + dsize = ALIGN(width * image->height, 32) >> 5; +@@ -144,11 +123,9 @@ + while (dsize) { + int iter_len = dsize > 128 ? 128 : dsize; + +- if (RING_SPACE(chan, iter_len + 1)) { +- nouveau_fbcon_gpu_lockup(info); +- cfb_imageblit(info, image); +- return; +- } ++ ret = RING_SPACE(chan, iter_len + 1); ++ if (ret) ++ return ret; + + BEGIN_RING(chan, NvSubGdiRect, 0x0c00, iter_len); + OUT_RINGp(chan, data, iter_len); +@@ -157,6 +134,7 @@ + } + + FIRE_RING(chan); ++ return 0; + } + + static int +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_fifo.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_fifo.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_fifo.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_fifo.c 2010-11-12 06:18:06.000000000 +0100 +@@ -28,6 +28,7 @@ + #include "drm.h" + #include "nouveau_drv.h" + #include "nouveau_ramht.h" ++#include "nouveau_util.h" + + #define NV04_RAMFC(c) (dev_priv->ramfc->pinst + ((c) * NV04_RAMFC__SIZE)) + #define NV04_RAMFC__SIZE 32 +@@ -151,10 +152,27 @@ + nv04_fifo_destroy_context(struct nouveau_channel *chan) + { + struct drm_device *dev = chan->dev; ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; ++ unsigned long flags; + +- nv_wr32(dev, NV04_PFIFO_MODE, +- nv_rd32(dev, NV04_PFIFO_MODE) & ~(1 << chan->id)); ++ spin_lock_irqsave(&dev_priv->context_switch_lock, flags); ++ pfifo->reassign(dev, false); ++ ++ /* Unload the context if it's the currently active one */ ++ if (pfifo->channel_id(dev) == chan->id) { ++ pfifo->disable(dev); ++ pfifo->unload_context(dev); ++ pfifo->enable(dev); ++ } + ++ /* Keep it from being rescheduled */ ++ nv_mask(dev, NV04_PFIFO_MODE, 1 << chan->id, 0); ++ ++ pfifo->reassign(dev, true); ++ spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); ++ ++ /* Free the channel resources */ + nouveau_gpuobj_ref(NULL, &chan->ramfc); + } + +@@ -208,7 +226,7 @@ + if (chid < 0 || chid >= dev_priv->engine.fifo.channels) + return 0; + +- chan = dev_priv->fifos[chid]; ++ chan = dev_priv->channels.ptr[chid]; + if (!chan) { + NV_ERROR(dev, "Inactive channel on PFIFO: %d\n", chid); + return -EINVAL; +@@ -267,6 +285,7 @@ + static void + nv04_fifo_init_intr(struct drm_device *dev) + { ++ nouveau_irq_register(dev, 8, nv04_fifo_isr); + nv_wr32(dev, 0x002100, 0xffffffff); + nv_wr32(dev, 0x002140, 0xffffffff); + } +@@ -289,7 +308,7 @@ + pfifo->reassign(dev, true); + + for (i = 0; i < dev_priv->engine.fifo.channels; i++) { +- if (dev_priv->fifos[i]) { ++ if (dev_priv->channels.ptr[i]) { + uint32_t mode = nv_rd32(dev, NV04_PFIFO_MODE); + nv_wr32(dev, NV04_PFIFO_MODE, mode | (1 << i)); + } +@@ -298,3 +317,207 @@ + return 0; + } + ++void ++nv04_fifo_fini(struct drm_device *dev) ++{ ++ nv_wr32(dev, 0x2140, 0x00000000); ++ nouveau_irq_unregister(dev, 8); ++} ++ ++static bool ++nouveau_fifo_swmthd(struct drm_device *dev, u32 chid, u32 addr, u32 data) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_channel *chan = NULL; ++ struct nouveau_gpuobj *obj; ++ unsigned long flags; ++ const int subc = (addr >> 13) & 0x7; ++ const int mthd = addr & 0x1ffc; ++ bool handled = false; ++ u32 engine; ++ ++ spin_lock_irqsave(&dev_priv->channels.lock, flags); ++ if (likely(chid >= 0 && chid < dev_priv->engine.fifo.channels)) ++ chan = dev_priv->channels.ptr[chid]; ++ if (unlikely(!chan)) ++ goto out; ++ ++ switch (mthd) { ++ case 0x0000: /* bind object to subchannel */ ++ obj = nouveau_ramht_find(chan, data); ++ if (unlikely(!obj || obj->engine != NVOBJ_ENGINE_SW)) ++ break; ++ ++ chan->sw_subchannel[subc] = obj->class; ++ engine = 0x0000000f << (subc * 4); ++ ++ nv_mask(dev, NV04_PFIFO_CACHE1_ENGINE, engine, 0x00000000); ++ handled = true; ++ break; ++ default: ++ engine = nv_rd32(dev, NV04_PFIFO_CACHE1_ENGINE); ++ if (unlikely(((engine >> (subc * 4)) & 0xf) != 0)) ++ break; ++ ++ if (!nouveau_gpuobj_mthd_call(chan, chan->sw_subchannel[subc], ++ mthd, data)) ++ handled = true; ++ break; ++ } ++ ++out: ++ spin_unlock_irqrestore(&dev_priv->channels.lock, flags); ++ return handled; ++} ++ ++void ++nv04_fifo_isr(struct drm_device *dev) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_engine *engine = &dev_priv->engine; ++ uint32_t status, reassign; ++ int cnt = 0; ++ ++ reassign = nv_rd32(dev, NV03_PFIFO_CACHES) & 1; ++ while ((status = nv_rd32(dev, NV03_PFIFO_INTR_0)) && (cnt++ < 100)) { ++ uint32_t chid, get; ++ ++ nv_wr32(dev, NV03_PFIFO_CACHES, 0); ++ ++ chid = engine->fifo.channel_id(dev); ++ get = nv_rd32(dev, NV03_PFIFO_CACHE1_GET); ++ ++ if (status & NV_PFIFO_INTR_CACHE_ERROR) { ++ uint32_t mthd, data; ++ int ptr; ++ ++ /* NV_PFIFO_CACHE1_GET actually goes to 0xffc before ++ * wrapping on my G80 chips, but CACHE1 isn't big ++ * enough for this much data.. Tests show that it ++ * wraps around to the start at GET=0x800.. No clue ++ * as to why.. ++ */ ++ ptr = (get & 0x7ff) >> 2; ++ ++ if (dev_priv->card_type < NV_40) { ++ mthd = nv_rd32(dev, ++ NV04_PFIFO_CACHE1_METHOD(ptr)); ++ data = nv_rd32(dev, ++ NV04_PFIFO_CACHE1_DATA(ptr)); ++ } else { ++ mthd = nv_rd32(dev, ++ NV40_PFIFO_CACHE1_METHOD(ptr)); ++ data = nv_rd32(dev, ++ NV40_PFIFO_CACHE1_DATA(ptr)); ++ } ++ ++ if (!nouveau_fifo_swmthd(dev, chid, mthd, data)) { ++ NV_INFO(dev, "PFIFO_CACHE_ERROR - Ch %d/%d " ++ "Mthd 0x%04x Data 0x%08x\n", ++ chid, (mthd >> 13) & 7, mthd & 0x1ffc, ++ data); ++ } ++ ++ nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_PUSH, 0); ++ nv_wr32(dev, NV03_PFIFO_INTR_0, ++ NV_PFIFO_INTR_CACHE_ERROR); ++ ++ nv_wr32(dev, NV03_PFIFO_CACHE1_PUSH0, ++ nv_rd32(dev, NV03_PFIFO_CACHE1_PUSH0) & ~1); ++ nv_wr32(dev, NV03_PFIFO_CACHE1_GET, get + 4); ++ nv_wr32(dev, NV03_PFIFO_CACHE1_PUSH0, ++ nv_rd32(dev, NV03_PFIFO_CACHE1_PUSH0) | 1); ++ nv_wr32(dev, NV04_PFIFO_CACHE1_HASH, 0); ++ ++ nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_PUSH, ++ nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_PUSH) | 1); ++ nv_wr32(dev, NV04_PFIFO_CACHE1_PULL0, 1); ++ ++ status &= ~NV_PFIFO_INTR_CACHE_ERROR; ++ } ++ ++ if (status & NV_PFIFO_INTR_DMA_PUSHER) { ++ u32 dma_get = nv_rd32(dev, 0x003244); ++ u32 dma_put = nv_rd32(dev, 0x003240); ++ u32 push = nv_rd32(dev, 0x003220); ++ u32 state = nv_rd32(dev, 0x003228); ++ ++ if (dev_priv->card_type == NV_50) { ++ u32 ho_get = nv_rd32(dev, 0x003328); ++ u32 ho_put = nv_rd32(dev, 0x003320); ++ u32 ib_get = nv_rd32(dev, 0x003334); ++ u32 ib_put = nv_rd32(dev, 0x003330); ++ ++ if (nouveau_ratelimit()) ++ NV_INFO(dev, "PFIFO_DMA_PUSHER - Ch %d Get 0x%02x%08x " ++ "Put 0x%02x%08x IbGet 0x%08x IbPut 0x%08x " ++ "State 0x%08x Push 0x%08x\n", ++ chid, ho_get, dma_get, ho_put, ++ dma_put, ib_get, ib_put, state, ++ push); ++ ++ /* METHOD_COUNT, in DMA_STATE on earlier chipsets */ ++ nv_wr32(dev, 0x003364, 0x00000000); ++ if (dma_get != dma_put || ho_get != ho_put) { ++ nv_wr32(dev, 0x003244, dma_put); ++ nv_wr32(dev, 0x003328, ho_put); ++ } else ++ if (ib_get != ib_put) { ++ nv_wr32(dev, 0x003334, ib_put); ++ } ++ } else { ++ NV_INFO(dev, "PFIFO_DMA_PUSHER - Ch %d Get 0x%08x " ++ "Put 0x%08x State 0x%08x Push 0x%08x\n", ++ chid, dma_get, dma_put, state, push); ++ ++ if (dma_get != dma_put) ++ nv_wr32(dev, 0x003244, dma_put); ++ } ++ ++ nv_wr32(dev, 0x003228, 0x00000000); ++ nv_wr32(dev, 0x003220, 0x00000001); ++ nv_wr32(dev, 0x002100, NV_PFIFO_INTR_DMA_PUSHER); ++ status &= ~NV_PFIFO_INTR_DMA_PUSHER; ++ } ++ ++ if (status & NV_PFIFO_INTR_SEMAPHORE) { ++ uint32_t sem; ++ ++ status &= ~NV_PFIFO_INTR_SEMAPHORE; ++ nv_wr32(dev, NV03_PFIFO_INTR_0, ++ NV_PFIFO_INTR_SEMAPHORE); ++ ++ sem = nv_rd32(dev, NV10_PFIFO_CACHE1_SEMAPHORE); ++ nv_wr32(dev, NV10_PFIFO_CACHE1_SEMAPHORE, sem | 0x1); ++ ++ nv_wr32(dev, NV03_PFIFO_CACHE1_GET, get + 4); ++ nv_wr32(dev, NV04_PFIFO_CACHE1_PULL0, 1); ++ } ++ ++ if (dev_priv->card_type == NV_50) { ++ if (status & 0x00000010) { ++ nv50_fb_vm_trap(dev, 1, "PFIFO_BAR_FAULT"); ++ status &= ~0x00000010; ++ nv_wr32(dev, 0x002100, 0x00000010); ++ } ++ } ++ ++ if (status) { ++ if (nouveau_ratelimit()) ++ NV_INFO(dev, "PFIFO_INTR 0x%08x - Ch %d\n", ++ status, chid); ++ nv_wr32(dev, NV03_PFIFO_INTR_0, status); ++ status = 0; ++ } ++ ++ nv_wr32(dev, NV03_PFIFO_CACHES, reassign); ++ } ++ ++ if (status) { ++ NV_INFO(dev, "PFIFO still angry after %d spins, halt\n", cnt); ++ nv_wr32(dev, 0x2140, 0); ++ nv_wr32(dev, 0x140, 0); ++ } ++ ++ nv_wr32(dev, NV03_PMC_INTR_0, NV_PMC_INTR_0_PFIFO_PENDING); ++} +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_graph.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_graph.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_graph.c 2010-11-12 06:18:06.000000000 +0100 +@@ -26,6 +26,11 @@ + #include "drm.h" + #include "nouveau_drm.h" + #include "nouveau_drv.h" ++#include "nouveau_hw.h" ++#include "nouveau_util.h" ++ ++static int nv04_graph_register(struct drm_device *dev); ++static void nv04_graph_isr(struct drm_device *dev); + + static uint32_t nv04_graph_ctx_regs[] = { + 0x0040053c, +@@ -357,10 +362,10 @@ + if (chid >= dev_priv->engine.fifo.channels) + return NULL; + +- return dev_priv->fifos[chid]; ++ return dev_priv->channels.ptr[chid]; + } + +-void ++static void + nv04_graph_context_switch(struct drm_device *dev) + { + struct drm_nouveau_private *dev_priv = dev->dev_private; +@@ -376,7 +381,7 @@ + + /* Load context for next channel */ + chid = dev_priv->engine.fifo.channel_id(dev); +- chan = dev_priv->fifos[chid]; ++ chan = dev_priv->channels.ptr[chid]; + if (chan) + nv04_graph_load_context(chan); + +@@ -412,10 +417,25 @@ + + void nv04_graph_destroy_context(struct nouveau_channel *chan) + { ++ struct drm_device *dev = chan->dev; ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; + struct graph_state *pgraph_ctx = chan->pgraph_ctx; ++ unsigned long flags; ++ ++ spin_lock_irqsave(&dev_priv->context_switch_lock, flags); ++ pgraph->fifo_access(dev, false); ++ ++ /* Unload the context if it's the currently active one */ ++ if (pgraph->channel(dev) == chan) ++ pgraph->unload_context(dev); + ++ /* Free the context resources */ + kfree(pgraph_ctx); + chan->pgraph_ctx = NULL; ++ ++ pgraph->fifo_access(dev, true); ++ spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); + } + + int nv04_graph_load_context(struct nouveau_channel *chan) +@@ -468,13 +488,19 @@ + { + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t tmp; ++ int ret; + + nv_wr32(dev, NV03_PMC_ENABLE, nv_rd32(dev, NV03_PMC_ENABLE) & + ~NV_PMC_ENABLE_PGRAPH); + nv_wr32(dev, NV03_PMC_ENABLE, nv_rd32(dev, NV03_PMC_ENABLE) | + NV_PMC_ENABLE_PGRAPH); + ++ ret = nv04_graph_register(dev); ++ if (ret) ++ return ret; ++ + /* Enable PGRAPH interrupts */ ++ nouveau_irq_register(dev, 12, nv04_graph_isr); + nv_wr32(dev, NV03_PGRAPH_INTR, 0xFFFFFFFF); + nv_wr32(dev, NV03_PGRAPH_INTR_EN, 0xFFFFFFFF); + +@@ -510,6 +536,8 @@ + + void nv04_graph_takedown(struct drm_device *dev) + { ++ nv_wr32(dev, NV03_PGRAPH_INTR_EN, 0x00000000); ++ nouveau_irq_unregister(dev, 12); + } + + void +@@ -524,13 +552,27 @@ + } + + static int +-nv04_graph_mthd_set_ref(struct nouveau_channel *chan, int grclass, +- int mthd, uint32_t data) ++nv04_graph_mthd_set_ref(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data) + { + atomic_set(&chan->fence.last_sequence_irq, data); + return 0; + } + ++int ++nv04_graph_mthd_page_flip(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data) ++{ ++ struct drm_device *dev = chan->dev; ++ struct nouveau_page_flip_state s; ++ ++ if (!nouveau_finish_page_flip(chan, &s)) ++ nv_set_crtc_base(dev, s.crtc, ++ s.offset + s.y * s.pitch + s.x * s.bpp / 8); ++ ++ return 0; ++} ++ + /* + * Software methods, why they are needed, and how they all work: + * +@@ -606,12 +648,12 @@ + */ + + static void +-nv04_graph_set_ctx1(struct nouveau_channel *chan, uint32_t mask, uint32_t value) ++nv04_graph_set_ctx1(struct nouveau_channel *chan, u32 mask, u32 value) + { + struct drm_device *dev = chan->dev; +- uint32_t instance = (nv_rd32(dev, NV04_PGRAPH_CTX_SWITCH4) & 0xffff) << 4; ++ u32 instance = (nv_rd32(dev, NV04_PGRAPH_CTX_SWITCH4) & 0xffff) << 4; + int subc = (nv_rd32(dev, NV04_PGRAPH_TRAPPED_ADDR) >> 13) & 0x7; +- uint32_t tmp; ++ u32 tmp; + + tmp = nv_ri32(dev, instance); + tmp &= ~mask; +@@ -623,11 +665,11 @@ + } + + static void +-nv04_graph_set_ctx_val(struct nouveau_channel *chan, uint32_t mask, uint32_t value) ++nv04_graph_set_ctx_val(struct nouveau_channel *chan, u32 mask, u32 value) + { + struct drm_device *dev = chan->dev; +- uint32_t instance = (nv_rd32(dev, NV04_PGRAPH_CTX_SWITCH4) & 0xffff) << 4; +- uint32_t tmp, ctx1; ++ u32 instance = (nv_rd32(dev, NV04_PGRAPH_CTX_SWITCH4) & 0xffff) << 4; ++ u32 tmp, ctx1; + int class, op, valid = 1; + + ctx1 = nv_ri32(dev, instance); +@@ -672,13 +714,13 @@ + } + + static int +-nv04_graph_mthd_set_operation(struct nouveau_channel *chan, int grclass, +- int mthd, uint32_t data) ++nv04_graph_mthd_set_operation(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data) + { + if (data > 5) + return 1; + /* Old versions of the objects only accept first three operations. */ +- if (data > 2 && grclass < 0x40) ++ if (data > 2 && class < 0x40) + return 1; + nv04_graph_set_ctx1(chan, 0x00038000, data << 15); + /* changing operation changes set of objects needed for validation */ +@@ -687,8 +729,8 @@ + } + + static int +-nv04_graph_mthd_surf3d_clip_h(struct nouveau_channel *chan, int grclass, +- int mthd, uint32_t data) ++nv04_graph_mthd_surf3d_clip_h(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data) + { + uint32_t min = data & 0xffff, max; + uint32_t w = data >> 16; +@@ -706,8 +748,8 @@ + } + + static int +-nv04_graph_mthd_surf3d_clip_v(struct nouveau_channel *chan, int grclass, +- int mthd, uint32_t data) ++nv04_graph_mthd_surf3d_clip_v(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data) + { + uint32_t min = data & 0xffff, max; + uint32_t w = data >> 16; +@@ -725,8 +767,8 @@ + } + + static int +-nv04_graph_mthd_bind_surf2d(struct nouveau_channel *chan, int grclass, +- int mthd, uint32_t data) ++nv04_graph_mthd_bind_surf2d(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data) + { + switch (nv_ri32(chan->dev, data << 4) & 0xff) { + case 0x30: +@@ -742,8 +784,8 @@ + } + + static int +-nv04_graph_mthd_bind_surf2d_swzsurf(struct nouveau_channel *chan, int grclass, +- int mthd, uint32_t data) ++nv04_graph_mthd_bind_surf2d_swzsurf(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data) + { + switch (nv_ri32(chan->dev, data << 4) & 0xff) { + case 0x30: +@@ -763,8 +805,8 @@ + } + + static int +-nv04_graph_mthd_bind_nv01_patt(struct nouveau_channel *chan, int grclass, +- int mthd, uint32_t data) ++nv04_graph_mthd_bind_nv01_patt(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data) + { + switch (nv_ri32(chan->dev, data << 4) & 0xff) { + case 0x30: +@@ -778,8 +820,8 @@ + } + + static int +-nv04_graph_mthd_bind_nv04_patt(struct nouveau_channel *chan, int grclass, +- int mthd, uint32_t data) ++nv04_graph_mthd_bind_nv04_patt(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data) + { + switch (nv_ri32(chan->dev, data << 4) & 0xff) { + case 0x30: +@@ -793,8 +835,8 @@ + } + + static int +-nv04_graph_mthd_bind_rop(struct nouveau_channel *chan, int grclass, +- int mthd, uint32_t data) ++nv04_graph_mthd_bind_rop(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data) + { + switch (nv_ri32(chan->dev, data << 4) & 0xff) { + case 0x30: +@@ -808,8 +850,8 @@ + } + + static int +-nv04_graph_mthd_bind_beta1(struct nouveau_channel *chan, int grclass, +- int mthd, uint32_t data) ++nv04_graph_mthd_bind_beta1(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data) + { + switch (nv_ri32(chan->dev, data << 4) & 0xff) { + case 0x30: +@@ -823,8 +865,8 @@ + } + + static int +-nv04_graph_mthd_bind_beta4(struct nouveau_channel *chan, int grclass, +- int mthd, uint32_t data) ++nv04_graph_mthd_bind_beta4(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data) + { + switch (nv_ri32(chan->dev, data << 4) & 0xff) { + case 0x30: +@@ -838,8 +880,8 @@ + } + + static int +-nv04_graph_mthd_bind_surf_dst(struct nouveau_channel *chan, int grclass, +- int mthd, uint32_t data) ++nv04_graph_mthd_bind_surf_dst(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data) + { + switch (nv_ri32(chan->dev, data << 4) & 0xff) { + case 0x30: +@@ -853,8 +895,8 @@ + } + + static int +-nv04_graph_mthd_bind_surf_src(struct nouveau_channel *chan, int grclass, +- int mthd, uint32_t data) ++nv04_graph_mthd_bind_surf_src(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data) + { + switch (nv_ri32(chan->dev, data << 4) & 0xff) { + case 0x30: +@@ -868,8 +910,8 @@ + } + + static int +-nv04_graph_mthd_bind_surf_color(struct nouveau_channel *chan, int grclass, +- int mthd, uint32_t data) ++nv04_graph_mthd_bind_surf_color(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data) + { + switch (nv_ri32(chan->dev, data << 4) & 0xff) { + case 0x30: +@@ -883,8 +925,8 @@ + } + + static int +-nv04_graph_mthd_bind_surf_zeta(struct nouveau_channel *chan, int grclass, +- int mthd, uint32_t data) ++nv04_graph_mthd_bind_surf_zeta(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data) + { + switch (nv_ri32(chan->dev, data << 4) & 0xff) { + case 0x30: +@@ -898,8 +940,8 @@ + } + + static int +-nv04_graph_mthd_bind_clip(struct nouveau_channel *chan, int grclass, +- int mthd, uint32_t data) ++nv04_graph_mthd_bind_clip(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data) + { + switch (nv_ri32(chan->dev, data << 4) & 0xff) { + case 0x30: +@@ -913,8 +955,8 @@ + } + + static int +-nv04_graph_mthd_bind_chroma(struct nouveau_channel *chan, int grclass, +- int mthd, uint32_t data) ++nv04_graph_mthd_bind_chroma(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data) + { + switch (nv_ri32(chan->dev, data << 4) & 0xff) { + case 0x30: +@@ -930,194 +972,346 @@ + return 1; + } + +-static struct nouveau_pgraph_object_method nv04_graph_mthds_sw[] = { +- { 0x0150, nv04_graph_mthd_set_ref }, +- {} +-}; +- +-static struct nouveau_pgraph_object_method nv04_graph_mthds_nv03_gdirect[] = { +- { 0x0184, nv04_graph_mthd_bind_nv01_patt }, +- { 0x0188, nv04_graph_mthd_bind_rop }, +- { 0x018c, nv04_graph_mthd_bind_beta1 }, +- { 0x0190, nv04_graph_mthd_bind_surf_dst }, +- { 0x02fc, nv04_graph_mthd_set_operation }, +- {}, +-}; +- +-static struct nouveau_pgraph_object_method nv04_graph_mthds_nv04_gdirect[] = { +- { 0x0188, nv04_graph_mthd_bind_nv04_patt }, +- { 0x018c, nv04_graph_mthd_bind_rop }, +- { 0x0190, nv04_graph_mthd_bind_beta1 }, +- { 0x0194, nv04_graph_mthd_bind_beta4 }, +- { 0x0198, nv04_graph_mthd_bind_surf2d }, +- { 0x02fc, nv04_graph_mthd_set_operation }, +- {}, +-}; +- +-static struct nouveau_pgraph_object_method nv04_graph_mthds_nv01_imageblit[] = { +- { 0x0184, nv04_graph_mthd_bind_chroma }, +- { 0x0188, nv04_graph_mthd_bind_clip }, +- { 0x018c, nv04_graph_mthd_bind_nv01_patt }, +- { 0x0190, nv04_graph_mthd_bind_rop }, +- { 0x0194, nv04_graph_mthd_bind_beta1 }, +- { 0x0198, nv04_graph_mthd_bind_surf_dst }, +- { 0x019c, nv04_graph_mthd_bind_surf_src }, +- { 0x02fc, nv04_graph_mthd_set_operation }, +- {}, +-}; +- +-static struct nouveau_pgraph_object_method nv04_graph_mthds_nv04_imageblit_ifc[] = { +- { 0x0184, nv04_graph_mthd_bind_chroma }, +- { 0x0188, nv04_graph_mthd_bind_clip }, +- { 0x018c, nv04_graph_mthd_bind_nv04_patt }, +- { 0x0190, nv04_graph_mthd_bind_rop }, +- { 0x0194, nv04_graph_mthd_bind_beta1 }, +- { 0x0198, nv04_graph_mthd_bind_beta4 }, +- { 0x019c, nv04_graph_mthd_bind_surf2d }, +- { 0x02fc, nv04_graph_mthd_set_operation }, +- {}, +-}; +- +-static struct nouveau_pgraph_object_method nv04_graph_mthds_nv04_iifc[] = { +- { 0x0188, nv04_graph_mthd_bind_chroma }, +- { 0x018c, nv04_graph_mthd_bind_clip }, +- { 0x0190, nv04_graph_mthd_bind_nv04_patt }, +- { 0x0194, nv04_graph_mthd_bind_rop }, +- { 0x0198, nv04_graph_mthd_bind_beta1 }, +- { 0x019c, nv04_graph_mthd_bind_beta4 }, +- { 0x01a0, nv04_graph_mthd_bind_surf2d_swzsurf }, +- { 0x03e4, nv04_graph_mthd_set_operation }, +- {}, +-}; ++static int ++nv04_graph_register(struct drm_device *dev) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; + +-static struct nouveau_pgraph_object_method nv04_graph_mthds_nv01_ifc[] = { +- { 0x0184, nv04_graph_mthd_bind_chroma }, +- { 0x0188, nv04_graph_mthd_bind_clip }, +- { 0x018c, nv04_graph_mthd_bind_nv01_patt }, +- { 0x0190, nv04_graph_mthd_bind_rop }, +- { 0x0194, nv04_graph_mthd_bind_beta1 }, +- { 0x0198, nv04_graph_mthd_bind_surf_dst }, +- { 0x02fc, nv04_graph_mthd_set_operation }, +- {}, +-}; ++ if (dev_priv->engine.graph.registered) ++ return 0; + +-static struct nouveau_pgraph_object_method nv04_graph_mthds_nv03_sifc[] = { +- { 0x0184, nv04_graph_mthd_bind_chroma }, +- { 0x0188, nv04_graph_mthd_bind_nv01_patt }, +- { 0x018c, nv04_graph_mthd_bind_rop }, +- { 0x0190, nv04_graph_mthd_bind_beta1 }, +- { 0x0194, nv04_graph_mthd_bind_surf_dst }, +- { 0x02fc, nv04_graph_mthd_set_operation }, +- {}, +-}; ++ /* dvd subpicture */ ++ NVOBJ_CLASS(dev, 0x0038, GR); + +-static struct nouveau_pgraph_object_method nv04_graph_mthds_nv04_sifc[] = { +- { 0x0184, nv04_graph_mthd_bind_chroma }, +- { 0x0188, nv04_graph_mthd_bind_nv04_patt }, +- { 0x018c, nv04_graph_mthd_bind_rop }, +- { 0x0190, nv04_graph_mthd_bind_beta1 }, +- { 0x0194, nv04_graph_mthd_bind_beta4 }, +- { 0x0198, nv04_graph_mthd_bind_surf2d }, +- { 0x02fc, nv04_graph_mthd_set_operation }, +- {}, +-}; ++ /* m2mf */ ++ NVOBJ_CLASS(dev, 0x0039, GR); + +-static struct nouveau_pgraph_object_method nv04_graph_mthds_nv03_sifm[] = { +- { 0x0188, nv04_graph_mthd_bind_nv01_patt }, +- { 0x018c, nv04_graph_mthd_bind_rop }, +- { 0x0190, nv04_graph_mthd_bind_beta1 }, +- { 0x0194, nv04_graph_mthd_bind_surf_dst }, +- { 0x0304, nv04_graph_mthd_set_operation }, +- {}, +-}; ++ /* nv03 gdirect */ ++ NVOBJ_CLASS(dev, 0x004b, GR); ++ NVOBJ_MTHD (dev, 0x004b, 0x0184, nv04_graph_mthd_bind_nv01_patt); ++ NVOBJ_MTHD (dev, 0x004b, 0x0188, nv04_graph_mthd_bind_rop); ++ NVOBJ_MTHD (dev, 0x004b, 0x018c, nv04_graph_mthd_bind_beta1); ++ NVOBJ_MTHD (dev, 0x004b, 0x0190, nv04_graph_mthd_bind_surf_dst); ++ NVOBJ_MTHD (dev, 0x004b, 0x02fc, nv04_graph_mthd_set_operation); ++ ++ /* nv04 gdirect */ ++ NVOBJ_CLASS(dev, 0x004a, GR); ++ NVOBJ_MTHD (dev, 0x004a, 0x0188, nv04_graph_mthd_bind_nv04_patt); ++ NVOBJ_MTHD (dev, 0x004a, 0x018c, nv04_graph_mthd_bind_rop); ++ NVOBJ_MTHD (dev, 0x004a, 0x0190, nv04_graph_mthd_bind_beta1); ++ NVOBJ_MTHD (dev, 0x004a, 0x0194, nv04_graph_mthd_bind_beta4); ++ NVOBJ_MTHD (dev, 0x004a, 0x0198, nv04_graph_mthd_bind_surf2d); ++ NVOBJ_MTHD (dev, 0x004a, 0x02fc, nv04_graph_mthd_set_operation); ++ ++ /* nv01 imageblit */ ++ NVOBJ_CLASS(dev, 0x001f, GR); ++ NVOBJ_MTHD (dev, 0x001f, 0x0184, nv04_graph_mthd_bind_chroma); ++ NVOBJ_MTHD (dev, 0x001f, 0x0188, nv04_graph_mthd_bind_clip); ++ NVOBJ_MTHD (dev, 0x001f, 0x018c, nv04_graph_mthd_bind_nv01_patt); ++ NVOBJ_MTHD (dev, 0x001f, 0x0190, nv04_graph_mthd_bind_rop); ++ NVOBJ_MTHD (dev, 0x001f, 0x0194, nv04_graph_mthd_bind_beta1); ++ NVOBJ_MTHD (dev, 0x001f, 0x0198, nv04_graph_mthd_bind_surf_dst); ++ NVOBJ_MTHD (dev, 0x001f, 0x019c, nv04_graph_mthd_bind_surf_src); ++ NVOBJ_MTHD (dev, 0x001f, 0x02fc, nv04_graph_mthd_set_operation); ++ ++ /* nv04 imageblit */ ++ NVOBJ_CLASS(dev, 0x005f, GR); ++ NVOBJ_MTHD (dev, 0x005f, 0x0184, nv04_graph_mthd_bind_chroma); ++ NVOBJ_MTHD (dev, 0x005f, 0x0188, nv04_graph_mthd_bind_clip); ++ NVOBJ_MTHD (dev, 0x005f, 0x018c, nv04_graph_mthd_bind_nv04_patt); ++ NVOBJ_MTHD (dev, 0x005f, 0x0190, nv04_graph_mthd_bind_rop); ++ NVOBJ_MTHD (dev, 0x005f, 0x0194, nv04_graph_mthd_bind_beta1); ++ NVOBJ_MTHD (dev, 0x005f, 0x0198, nv04_graph_mthd_bind_beta4); ++ NVOBJ_MTHD (dev, 0x005f, 0x019c, nv04_graph_mthd_bind_surf2d); ++ NVOBJ_MTHD (dev, 0x005f, 0x02fc, nv04_graph_mthd_set_operation); ++ ++ /* nv04 iifc */ ++ NVOBJ_CLASS(dev, 0x0060, GR); ++ NVOBJ_MTHD (dev, 0x0060, 0x0188, nv04_graph_mthd_bind_chroma); ++ NVOBJ_MTHD (dev, 0x0060, 0x018c, nv04_graph_mthd_bind_clip); ++ NVOBJ_MTHD (dev, 0x0060, 0x0190, nv04_graph_mthd_bind_nv04_patt); ++ NVOBJ_MTHD (dev, 0x0060, 0x0194, nv04_graph_mthd_bind_rop); ++ NVOBJ_MTHD (dev, 0x0060, 0x0198, nv04_graph_mthd_bind_beta1); ++ NVOBJ_MTHD (dev, 0x0060, 0x019c, nv04_graph_mthd_bind_beta4); ++ NVOBJ_MTHD (dev, 0x0060, 0x01a0, nv04_graph_mthd_bind_surf2d_swzsurf); ++ NVOBJ_MTHD (dev, 0x0060, 0x03e4, nv04_graph_mthd_set_operation); ++ ++ /* nv05 iifc */ ++ NVOBJ_CLASS(dev, 0x0064, GR); ++ ++ /* nv01 ifc */ ++ NVOBJ_CLASS(dev, 0x0021, GR); ++ NVOBJ_MTHD (dev, 0x0021, 0x0184, nv04_graph_mthd_bind_chroma); ++ NVOBJ_MTHD (dev, 0x0021, 0x0188, nv04_graph_mthd_bind_clip); ++ NVOBJ_MTHD (dev, 0x0021, 0x018c, nv04_graph_mthd_bind_nv01_patt); ++ NVOBJ_MTHD (dev, 0x0021, 0x0190, nv04_graph_mthd_bind_rop); ++ NVOBJ_MTHD (dev, 0x0021, 0x0194, nv04_graph_mthd_bind_beta1); ++ NVOBJ_MTHD (dev, 0x0021, 0x0198, nv04_graph_mthd_bind_surf_dst); ++ NVOBJ_MTHD (dev, 0x0021, 0x02fc, nv04_graph_mthd_set_operation); ++ ++ /* nv04 ifc */ ++ NVOBJ_CLASS(dev, 0x0061, GR); ++ NVOBJ_MTHD (dev, 0x0061, 0x0184, nv04_graph_mthd_bind_chroma); ++ NVOBJ_MTHD (dev, 0x0061, 0x0188, nv04_graph_mthd_bind_clip); ++ NVOBJ_MTHD (dev, 0x0061, 0x018c, nv04_graph_mthd_bind_nv04_patt); ++ NVOBJ_MTHD (dev, 0x0061, 0x0190, nv04_graph_mthd_bind_rop); ++ NVOBJ_MTHD (dev, 0x0061, 0x0194, nv04_graph_mthd_bind_beta1); ++ NVOBJ_MTHD (dev, 0x0061, 0x0198, nv04_graph_mthd_bind_beta4); ++ NVOBJ_MTHD (dev, 0x0061, 0x019c, nv04_graph_mthd_bind_surf2d); ++ NVOBJ_MTHD (dev, 0x0061, 0x02fc, nv04_graph_mthd_set_operation); ++ ++ /* nv05 ifc */ ++ NVOBJ_CLASS(dev, 0x0065, GR); ++ ++ /* nv03 sifc */ ++ NVOBJ_CLASS(dev, 0x0036, GR); ++ NVOBJ_MTHD (dev, 0x0036, 0x0184, nv04_graph_mthd_bind_chroma); ++ NVOBJ_MTHD (dev, 0x0036, 0x0188, nv04_graph_mthd_bind_nv01_patt); ++ NVOBJ_MTHD (dev, 0x0036, 0x018c, nv04_graph_mthd_bind_rop); ++ NVOBJ_MTHD (dev, 0x0036, 0x0190, nv04_graph_mthd_bind_beta1); ++ NVOBJ_MTHD (dev, 0x0036, 0x0194, nv04_graph_mthd_bind_surf_dst); ++ NVOBJ_MTHD (dev, 0x0036, 0x02fc, nv04_graph_mthd_set_operation); ++ ++ /* nv04 sifc */ ++ NVOBJ_CLASS(dev, 0x0076, GR); ++ NVOBJ_MTHD (dev, 0x0076, 0x0184, nv04_graph_mthd_bind_chroma); ++ NVOBJ_MTHD (dev, 0x0076, 0x0188, nv04_graph_mthd_bind_nv04_patt); ++ NVOBJ_MTHD (dev, 0x0076, 0x018c, nv04_graph_mthd_bind_rop); ++ NVOBJ_MTHD (dev, 0x0076, 0x0190, nv04_graph_mthd_bind_beta1); ++ NVOBJ_MTHD (dev, 0x0076, 0x0194, nv04_graph_mthd_bind_beta4); ++ NVOBJ_MTHD (dev, 0x0076, 0x0198, nv04_graph_mthd_bind_surf2d); ++ NVOBJ_MTHD (dev, 0x0076, 0x02fc, nv04_graph_mthd_set_operation); ++ ++ /* nv05 sifc */ ++ NVOBJ_CLASS(dev, 0x0066, GR); ++ ++ /* nv03 sifm */ ++ NVOBJ_CLASS(dev, 0x0037, GR); ++ NVOBJ_MTHD (dev, 0x0037, 0x0188, nv04_graph_mthd_bind_nv01_patt); ++ NVOBJ_MTHD (dev, 0x0037, 0x018c, nv04_graph_mthd_bind_rop); ++ NVOBJ_MTHD (dev, 0x0037, 0x0190, nv04_graph_mthd_bind_beta1); ++ NVOBJ_MTHD (dev, 0x0037, 0x0194, nv04_graph_mthd_bind_surf_dst); ++ NVOBJ_MTHD (dev, 0x0037, 0x0304, nv04_graph_mthd_set_operation); ++ ++ /* nv04 sifm */ ++ NVOBJ_CLASS(dev, 0x0077, GR); ++ NVOBJ_MTHD (dev, 0x0077, 0x0188, nv04_graph_mthd_bind_nv04_patt); ++ NVOBJ_MTHD (dev, 0x0077, 0x018c, nv04_graph_mthd_bind_rop); ++ NVOBJ_MTHD (dev, 0x0077, 0x0190, nv04_graph_mthd_bind_beta1); ++ NVOBJ_MTHD (dev, 0x0077, 0x0194, nv04_graph_mthd_bind_beta4); ++ NVOBJ_MTHD (dev, 0x0077, 0x0198, nv04_graph_mthd_bind_surf2d_swzsurf); ++ NVOBJ_MTHD (dev, 0x0077, 0x0304, nv04_graph_mthd_set_operation); ++ ++ /* null */ ++ NVOBJ_CLASS(dev, 0x0030, GR); ++ ++ /* surf2d */ ++ NVOBJ_CLASS(dev, 0x0042, GR); ++ ++ /* rop */ ++ NVOBJ_CLASS(dev, 0x0043, GR); ++ ++ /* beta1 */ ++ NVOBJ_CLASS(dev, 0x0012, GR); ++ ++ /* beta4 */ ++ NVOBJ_CLASS(dev, 0x0072, GR); ++ ++ /* cliprect */ ++ NVOBJ_CLASS(dev, 0x0019, GR); ++ ++ /* nv01 pattern */ ++ NVOBJ_CLASS(dev, 0x0018, GR); ++ ++ /* nv04 pattern */ ++ NVOBJ_CLASS(dev, 0x0044, GR); ++ ++ /* swzsurf */ ++ NVOBJ_CLASS(dev, 0x0052, GR); ++ ++ /* surf3d */ ++ NVOBJ_CLASS(dev, 0x0053, GR); ++ NVOBJ_MTHD (dev, 0x0053, 0x02f8, nv04_graph_mthd_surf3d_clip_h); ++ NVOBJ_MTHD (dev, 0x0053, 0x02fc, nv04_graph_mthd_surf3d_clip_v); ++ ++ /* nv03 tex_tri */ ++ NVOBJ_CLASS(dev, 0x0048, GR); ++ NVOBJ_MTHD (dev, 0x0048, 0x0188, nv04_graph_mthd_bind_clip); ++ NVOBJ_MTHD (dev, 0x0048, 0x018c, nv04_graph_mthd_bind_surf_color); ++ NVOBJ_MTHD (dev, 0x0048, 0x0190, nv04_graph_mthd_bind_surf_zeta); ++ ++ /* tex_tri */ ++ NVOBJ_CLASS(dev, 0x0054, GR); ++ ++ /* multitex_tri */ ++ NVOBJ_CLASS(dev, 0x0055, GR); ++ ++ /* nv01 chroma */ ++ NVOBJ_CLASS(dev, 0x0017, GR); ++ ++ /* nv04 chroma */ ++ NVOBJ_CLASS(dev, 0x0057, GR); ++ ++ /* surf_dst */ ++ NVOBJ_CLASS(dev, 0x0058, GR); ++ ++ /* surf_src */ ++ NVOBJ_CLASS(dev, 0x0059, GR); ++ ++ /* surf_color */ ++ NVOBJ_CLASS(dev, 0x005a, GR); ++ ++ /* surf_zeta */ ++ NVOBJ_CLASS(dev, 0x005b, GR); ++ ++ /* nv01 line */ ++ NVOBJ_CLASS(dev, 0x001c, GR); ++ NVOBJ_MTHD (dev, 0x001c, 0x0184, nv04_graph_mthd_bind_clip); ++ NVOBJ_MTHD (dev, 0x001c, 0x0188, nv04_graph_mthd_bind_nv01_patt); ++ NVOBJ_MTHD (dev, 0x001c, 0x018c, nv04_graph_mthd_bind_rop); ++ NVOBJ_MTHD (dev, 0x001c, 0x0190, nv04_graph_mthd_bind_beta1); ++ NVOBJ_MTHD (dev, 0x001c, 0x0194, nv04_graph_mthd_bind_surf_dst); ++ NVOBJ_MTHD (dev, 0x001c, 0x02fc, nv04_graph_mthd_set_operation); ++ ++ /* nv04 line */ ++ NVOBJ_CLASS(dev, 0x005c, GR); ++ NVOBJ_MTHD (dev, 0x005c, 0x0184, nv04_graph_mthd_bind_clip); ++ NVOBJ_MTHD (dev, 0x005c, 0x0188, nv04_graph_mthd_bind_nv04_patt); ++ NVOBJ_MTHD (dev, 0x005c, 0x018c, nv04_graph_mthd_bind_rop); ++ NVOBJ_MTHD (dev, 0x005c, 0x0190, nv04_graph_mthd_bind_beta1); ++ NVOBJ_MTHD (dev, 0x005c, 0x0194, nv04_graph_mthd_bind_beta4); ++ NVOBJ_MTHD (dev, 0x005c, 0x0198, nv04_graph_mthd_bind_surf2d); ++ NVOBJ_MTHD (dev, 0x005c, 0x02fc, nv04_graph_mthd_set_operation); ++ ++ /* nv01 tri */ ++ NVOBJ_CLASS(dev, 0x001d, GR); ++ NVOBJ_MTHD (dev, 0x001d, 0x0184, nv04_graph_mthd_bind_clip); ++ NVOBJ_MTHD (dev, 0x001d, 0x0188, nv04_graph_mthd_bind_nv01_patt); ++ NVOBJ_MTHD (dev, 0x001d, 0x018c, nv04_graph_mthd_bind_rop); ++ NVOBJ_MTHD (dev, 0x001d, 0x0190, nv04_graph_mthd_bind_beta1); ++ NVOBJ_MTHD (dev, 0x001d, 0x0194, nv04_graph_mthd_bind_surf_dst); ++ NVOBJ_MTHD (dev, 0x001d, 0x02fc, nv04_graph_mthd_set_operation); ++ ++ /* nv04 tri */ ++ NVOBJ_CLASS(dev, 0x005d, GR); ++ NVOBJ_MTHD (dev, 0x005d, 0x0184, nv04_graph_mthd_bind_clip); ++ NVOBJ_MTHD (dev, 0x005d, 0x0188, nv04_graph_mthd_bind_nv04_patt); ++ NVOBJ_MTHD (dev, 0x005d, 0x018c, nv04_graph_mthd_bind_rop); ++ NVOBJ_MTHD (dev, 0x005d, 0x0190, nv04_graph_mthd_bind_beta1); ++ NVOBJ_MTHD (dev, 0x005d, 0x0194, nv04_graph_mthd_bind_beta4); ++ NVOBJ_MTHD (dev, 0x005d, 0x0198, nv04_graph_mthd_bind_surf2d); ++ NVOBJ_MTHD (dev, 0x005d, 0x02fc, nv04_graph_mthd_set_operation); ++ ++ /* nv01 rect */ ++ NVOBJ_CLASS(dev, 0x001e, GR); ++ NVOBJ_MTHD (dev, 0x001e, 0x0184, nv04_graph_mthd_bind_clip); ++ NVOBJ_MTHD (dev, 0x001e, 0x0188, nv04_graph_mthd_bind_nv01_patt); ++ NVOBJ_MTHD (dev, 0x001e, 0x018c, nv04_graph_mthd_bind_rop); ++ NVOBJ_MTHD (dev, 0x001e, 0x0190, nv04_graph_mthd_bind_beta1); ++ NVOBJ_MTHD (dev, 0x001e, 0x0194, nv04_graph_mthd_bind_surf_dst); ++ NVOBJ_MTHD (dev, 0x001e, 0x02fc, nv04_graph_mthd_set_operation); ++ ++ /* nv04 rect */ ++ NVOBJ_CLASS(dev, 0x005e, GR); ++ NVOBJ_MTHD (dev, 0x005e, 0x0184, nv04_graph_mthd_bind_clip); ++ NVOBJ_MTHD (dev, 0x005e, 0x0188, nv04_graph_mthd_bind_nv04_patt); ++ NVOBJ_MTHD (dev, 0x005e, 0x018c, nv04_graph_mthd_bind_rop); ++ NVOBJ_MTHD (dev, 0x005e, 0x0190, nv04_graph_mthd_bind_beta1); ++ NVOBJ_MTHD (dev, 0x005e, 0x0194, nv04_graph_mthd_bind_beta4); ++ NVOBJ_MTHD (dev, 0x005e, 0x0198, nv04_graph_mthd_bind_surf2d); ++ NVOBJ_MTHD (dev, 0x005e, 0x02fc, nv04_graph_mthd_set_operation); ++ ++ /* nvsw */ ++ NVOBJ_CLASS(dev, 0x506e, SW); ++ NVOBJ_MTHD (dev, 0x506e, 0x0150, nv04_graph_mthd_set_ref); ++ NVOBJ_MTHD (dev, 0x506e, 0x0500, nv04_graph_mthd_page_flip); + +-static struct nouveau_pgraph_object_method nv04_graph_mthds_nv04_sifm[] = { +- { 0x0188, nv04_graph_mthd_bind_nv04_patt }, +- { 0x018c, nv04_graph_mthd_bind_rop }, +- { 0x0190, nv04_graph_mthd_bind_beta1 }, +- { 0x0194, nv04_graph_mthd_bind_beta4 }, +- { 0x0198, nv04_graph_mthd_bind_surf2d_swzsurf }, +- { 0x0304, nv04_graph_mthd_set_operation }, +- {}, +-}; +- +-static struct nouveau_pgraph_object_method nv04_graph_mthds_nv01_shape[] = { +- { 0x0184, nv04_graph_mthd_bind_clip }, +- { 0x0188, nv04_graph_mthd_bind_nv01_patt }, +- { 0x018c, nv04_graph_mthd_bind_rop }, +- { 0x0190, nv04_graph_mthd_bind_beta1 }, +- { 0x0194, nv04_graph_mthd_bind_surf_dst }, +- { 0x02fc, nv04_graph_mthd_set_operation }, +- {}, +-}; +- +-static struct nouveau_pgraph_object_method nv04_graph_mthds_nv04_shape[] = { +- { 0x0184, nv04_graph_mthd_bind_clip }, +- { 0x0188, nv04_graph_mthd_bind_nv04_patt }, +- { 0x018c, nv04_graph_mthd_bind_rop }, +- { 0x0190, nv04_graph_mthd_bind_beta1 }, +- { 0x0194, nv04_graph_mthd_bind_beta4 }, +- { 0x0198, nv04_graph_mthd_bind_surf2d }, +- { 0x02fc, nv04_graph_mthd_set_operation }, +- {}, ++ dev_priv->engine.graph.registered = true; ++ return 0; + }; + +-static struct nouveau_pgraph_object_method nv04_graph_mthds_nv03_tex_tri[] = { +- { 0x0188, nv04_graph_mthd_bind_clip }, +- { 0x018c, nv04_graph_mthd_bind_surf_color }, +- { 0x0190, nv04_graph_mthd_bind_surf_zeta }, +- {}, ++static struct nouveau_bitfield nv04_graph_intr[] = { ++ { NV_PGRAPH_INTR_NOTIFY, "NOTIFY" }, ++ {} + }; + +-static struct nouveau_pgraph_object_method nv04_graph_mthds_surf3d[] = { +- { 0x02f8, nv04_graph_mthd_surf3d_clip_h }, +- { 0x02fc, nv04_graph_mthd_surf3d_clip_v }, +- {}, ++static struct nouveau_bitfield nv04_graph_nstatus[] = ++{ ++ { NV04_PGRAPH_NSTATUS_STATE_IN_USE, "STATE_IN_USE" }, ++ { NV04_PGRAPH_NSTATUS_INVALID_STATE, "INVALID_STATE" }, ++ { NV04_PGRAPH_NSTATUS_BAD_ARGUMENT, "BAD_ARGUMENT" }, ++ { NV04_PGRAPH_NSTATUS_PROTECTION_FAULT, "PROTECTION_FAULT" }, ++ {} + }; + +-struct nouveau_pgraph_object_class nv04_graph_grclass[] = { +- { 0x0038, false, NULL }, /* dvd subpicture */ +- { 0x0039, false, NULL }, /* m2mf */ +- { 0x004b, false, nv04_graph_mthds_nv03_gdirect }, /* nv03 gdirect */ +- { 0x004a, false, nv04_graph_mthds_nv04_gdirect }, /* nv04 gdirect */ +- { 0x001f, false, nv04_graph_mthds_nv01_imageblit }, /* nv01 imageblit */ +- { 0x005f, false, nv04_graph_mthds_nv04_imageblit_ifc }, /* nv04 imageblit */ +- { 0x0060, false, nv04_graph_mthds_nv04_iifc }, /* nv04 iifc */ +- { 0x0064, false, NULL }, /* nv05 iifc */ +- { 0x0021, false, nv04_graph_mthds_nv01_ifc }, /* nv01 ifc */ +- { 0x0061, false, nv04_graph_mthds_nv04_imageblit_ifc }, /* nv04 ifc */ +- { 0x0065, false, NULL }, /* nv05 ifc */ +- { 0x0036, false, nv04_graph_mthds_nv03_sifc }, /* nv03 sifc */ +- { 0x0076, false, nv04_graph_mthds_nv04_sifc }, /* nv04 sifc */ +- { 0x0066, false, NULL }, /* nv05 sifc */ +- { 0x0037, false, nv04_graph_mthds_nv03_sifm }, /* nv03 sifm */ +- { 0x0077, false, nv04_graph_mthds_nv04_sifm }, /* nv04 sifm */ +- { 0x0030, false, NULL }, /* null */ +- { 0x0042, false, NULL }, /* surf2d */ +- { 0x0043, false, NULL }, /* rop */ +- { 0x0012, false, NULL }, /* beta1 */ +- { 0x0072, false, NULL }, /* beta4 */ +- { 0x0019, false, NULL }, /* cliprect */ +- { 0x0018, false, NULL }, /* nv01 pattern */ +- { 0x0044, false, NULL }, /* nv04 pattern */ +- { 0x0052, false, NULL }, /* swzsurf */ +- { 0x0053, false, nv04_graph_mthds_surf3d }, /* surf3d */ +- { 0x0048, false, nv04_graph_mthds_nv03_tex_tri }, /* nv03 tex_tri */ +- { 0x0054, false, NULL }, /* tex_tri */ +- { 0x0055, false, NULL }, /* multitex_tri */ +- { 0x0017, false, NULL }, /* nv01 chroma */ +- { 0x0057, false, NULL }, /* nv04 chroma */ +- { 0x0058, false, NULL }, /* surf_dst */ +- { 0x0059, false, NULL }, /* surf_src */ +- { 0x005a, false, NULL }, /* surf_color */ +- { 0x005b, false, NULL }, /* surf_zeta */ +- { 0x001c, false, nv04_graph_mthds_nv01_shape }, /* nv01 line */ +- { 0x005c, false, nv04_graph_mthds_nv04_shape }, /* nv04 line */ +- { 0x001d, false, nv04_graph_mthds_nv01_shape }, /* nv01 tri */ +- { 0x005d, false, nv04_graph_mthds_nv04_shape }, /* nv04 tri */ +- { 0x001e, false, nv04_graph_mthds_nv01_shape }, /* nv01 rect */ +- { 0x005e, false, nv04_graph_mthds_nv04_shape }, /* nv04 rect */ +- { 0x506e, true, nv04_graph_mthds_sw }, ++struct nouveau_bitfield nv04_graph_nsource[] = ++{ ++ { NV03_PGRAPH_NSOURCE_NOTIFICATION, "NOTIFICATION" }, ++ { NV03_PGRAPH_NSOURCE_DATA_ERROR, "DATA_ERROR" }, ++ { NV03_PGRAPH_NSOURCE_PROTECTION_ERROR, "PROTECTION_ERROR" }, ++ { NV03_PGRAPH_NSOURCE_RANGE_EXCEPTION, "RANGE_EXCEPTION" }, ++ { NV03_PGRAPH_NSOURCE_LIMIT_COLOR, "LIMIT_COLOR" }, ++ { NV03_PGRAPH_NSOURCE_LIMIT_ZETA, "LIMIT_ZETA" }, ++ { NV03_PGRAPH_NSOURCE_ILLEGAL_MTHD, "ILLEGAL_MTHD" }, ++ { NV03_PGRAPH_NSOURCE_DMA_R_PROTECTION, "DMA_R_PROTECTION" }, ++ { NV03_PGRAPH_NSOURCE_DMA_W_PROTECTION, "DMA_W_PROTECTION" }, ++ { NV03_PGRAPH_NSOURCE_FORMAT_EXCEPTION, "FORMAT_EXCEPTION" }, ++ { NV03_PGRAPH_NSOURCE_PATCH_EXCEPTION, "PATCH_EXCEPTION" }, ++ { NV03_PGRAPH_NSOURCE_STATE_INVALID, "STATE_INVALID" }, ++ { NV03_PGRAPH_NSOURCE_DOUBLE_NOTIFY, "DOUBLE_NOTIFY" }, ++ { NV03_PGRAPH_NSOURCE_NOTIFY_IN_USE, "NOTIFY_IN_USE" }, ++ { NV03_PGRAPH_NSOURCE_METHOD_CNT, "METHOD_CNT" }, ++ { NV03_PGRAPH_NSOURCE_BFR_NOTIFICATION, "BFR_NOTIFICATION" }, ++ { NV03_PGRAPH_NSOURCE_DMA_VTX_PROTECTION, "DMA_VTX_PROTECTION" }, ++ { NV03_PGRAPH_NSOURCE_DMA_WIDTH_A, "DMA_WIDTH_A" }, ++ { NV03_PGRAPH_NSOURCE_DMA_WIDTH_B, "DMA_WIDTH_B" }, + {} + }; + ++static void ++nv04_graph_isr(struct drm_device *dev) ++{ ++ u32 stat; ++ ++ while ((stat = nv_rd32(dev, NV03_PGRAPH_INTR))) { ++ u32 nsource = nv_rd32(dev, NV03_PGRAPH_NSOURCE); ++ u32 nstatus = nv_rd32(dev, NV03_PGRAPH_NSTATUS); ++ u32 addr = nv_rd32(dev, NV04_PGRAPH_TRAPPED_ADDR); ++ u32 chid = (addr & 0x0f000000) >> 24; ++ u32 subc = (addr & 0x0000e000) >> 13; ++ u32 mthd = (addr & 0x00001ffc); ++ u32 data = nv_rd32(dev, NV04_PGRAPH_TRAPPED_DATA); ++ u32 class = nv_rd32(dev, 0x400180 + subc * 4) & 0xff; ++ u32 show = stat; ++ ++ if (stat & NV_PGRAPH_INTR_NOTIFY) { ++ if (nsource & NV03_PGRAPH_NSOURCE_ILLEGAL_MTHD) { ++ if (!nouveau_gpuobj_mthd_call2(dev, chid, class, mthd, data)) ++ show &= ~NV_PGRAPH_INTR_NOTIFY; ++ } ++ } ++ ++ if (stat & NV_PGRAPH_INTR_CONTEXT_SWITCH) { ++ nv_wr32(dev, NV03_PGRAPH_INTR, NV_PGRAPH_INTR_CONTEXT_SWITCH); ++ stat &= ~NV_PGRAPH_INTR_CONTEXT_SWITCH; ++ show &= ~NV_PGRAPH_INTR_CONTEXT_SWITCH; ++ nv04_graph_context_switch(dev); ++ } ++ ++ nv_wr32(dev, NV03_PGRAPH_INTR, stat); ++ nv_wr32(dev, NV04_PGRAPH_FIFO, 0x00000001); ++ ++ if (show && nouveau_ratelimit()) { ++ NV_INFO(dev, "PGRAPH -"); ++ nouveau_bitfield_print(nv04_graph_intr, show); ++ printk(" nsource:"); ++ nouveau_bitfield_print(nv04_graph_nsource, nsource); ++ printk(" nstatus:"); ++ nouveau_bitfield_print(nv04_graph_nstatus, nstatus); ++ printk("\n"); ++ NV_INFO(dev, "PGRAPH - ch %d/%d class 0x%04x " ++ "mthd 0x%04x data 0x%08x\n", ++ chid, subc, class, mthd, data); ++ } ++ } ++} +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_instmem.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_instmem.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_instmem.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_instmem.c 2010-11-12 06:18:06.000000000 +0100 +@@ -98,42 +98,66 @@ + } + + int +-nv04_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj, +- uint32_t *sz) ++nv04_instmem_suspend(struct drm_device *dev) + { + return 0; + } + + void +-nv04_instmem_clear(struct drm_device *dev, struct nouveau_gpuobj *gpuobj) ++nv04_instmem_resume(struct drm_device *dev) + { + } + + int +-nv04_instmem_bind(struct drm_device *dev, struct nouveau_gpuobj *gpuobj) ++nv04_instmem_get(struct nouveau_gpuobj *gpuobj, u32 size, u32 align) + { +- return 0; +-} ++ struct drm_nouveau_private *dev_priv = gpuobj->dev->dev_private; ++ struct drm_mm_node *ramin = NULL; + +-int +-nv04_instmem_unbind(struct drm_device *dev, struct nouveau_gpuobj *gpuobj) +-{ ++ do { ++ if (drm_mm_pre_get(&dev_priv->ramin_heap)) ++ return -ENOMEM; ++ ++ spin_lock(&dev_priv->ramin_lock); ++ ramin = drm_mm_search_free(&dev_priv->ramin_heap, size, align, 0); ++ if (ramin == NULL) { ++ spin_unlock(&dev_priv->ramin_lock); ++ return -ENOMEM; ++ } ++ ++ ramin = drm_mm_get_block_atomic(ramin, size, align); ++ spin_unlock(&dev_priv->ramin_lock); ++ } while (ramin == NULL); ++ ++ gpuobj->node = ramin; ++ gpuobj->vinst = ramin->start; + return 0; + } + + void +-nv04_instmem_flush(struct drm_device *dev) ++nv04_instmem_put(struct nouveau_gpuobj *gpuobj) + { ++ struct drm_nouveau_private *dev_priv = gpuobj->dev->dev_private; ++ ++ spin_lock(&dev_priv->ramin_lock); ++ drm_mm_put_block(gpuobj->node); ++ gpuobj->node = NULL; ++ spin_unlock(&dev_priv->ramin_lock); + } + + int +-nv04_instmem_suspend(struct drm_device *dev) ++nv04_instmem_map(struct nouveau_gpuobj *gpuobj) + { ++ gpuobj->pinst = gpuobj->vinst; + return 0; + } + + void +-nv04_instmem_resume(struct drm_device *dev) ++nv04_instmem_unmap(struct nouveau_gpuobj *gpuobj) + { + } + ++void ++nv04_instmem_flush(struct drm_device *dev) ++{ ++} +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_pm.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_pm.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_pm.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_pm.c 2010-11-12 06:18:06.000000000 +0100 +@@ -76,6 +76,15 @@ + reg += 4; + + nouveau_hw_setpll(dev, reg, &state->calc); ++ ++ if (dev_priv->card_type < NV_30 && reg == NV_PRAMDAC_MPLL_COEFF) { ++ if (dev_priv->card_type == NV_20) ++ nv_mask(dev, 0x1002c4, 0, 1 << 20); ++ ++ /* Reset the DLLs */ ++ nv_mask(dev, 0x1002c0, 0, 1 << 8); ++ } ++ + kfree(state); + } + +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv10_fb.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv10_fb.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv10_fb.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv10_fb.c 2010-11-12 06:18:06.000000000 +0100 +@@ -3,23 +3,109 @@ + #include "nouveau_drv.h" + #include "nouveau_drm.h" + ++static struct drm_mm_node * ++nv20_fb_alloc_tag(struct drm_device *dev, uint32_t size) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_fb_engine *pfb = &dev_priv->engine.fb; ++ struct drm_mm_node *mem; ++ int ret; ++ ++ ret = drm_mm_pre_get(&pfb->tag_heap); ++ if (ret) ++ return NULL; ++ ++ spin_lock(&dev_priv->tile.lock); ++ mem = drm_mm_search_free(&pfb->tag_heap, size, 0, 0); ++ if (mem) ++ mem = drm_mm_get_block_atomic(mem, size, 0); ++ spin_unlock(&dev_priv->tile.lock); ++ ++ return mem; ++} ++ ++static void ++nv20_fb_free_tag(struct drm_device *dev, struct drm_mm_node *mem) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ ++ spin_lock(&dev_priv->tile.lock); ++ drm_mm_put_block(mem); ++ spin_unlock(&dev_priv->tile.lock); ++} ++ ++void ++nv10_fb_init_tile_region(struct drm_device *dev, int i, uint32_t addr, ++ uint32_t size, uint32_t pitch, uint32_t flags) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_tile_reg *tile = &dev_priv->tile.reg[i]; ++ int bpp = (flags & NOUVEAU_GEM_TILE_32BPP ? 32 : 16); ++ ++ tile->addr = addr; ++ tile->limit = max(1u, addr + size) - 1; ++ tile->pitch = pitch; ++ ++ if (dev_priv->card_type == NV_20) { ++ if (flags & NOUVEAU_GEM_TILE_ZETA) { ++ /* ++ * Allocate some of the on-die tag memory, ++ * used to store Z compression meta-data (most ++ * likely just a bitmap determining if a given ++ * tile is compressed or not). ++ */ ++ tile->tag_mem = nv20_fb_alloc_tag(dev, size / 256); ++ ++ if (tile->tag_mem) { ++ /* Enable Z compression */ ++ if (dev_priv->chipset >= 0x25) ++ tile->zcomp = tile->tag_mem->start | ++ (bpp == 16 ? ++ NV25_PFB_ZCOMP_MODE_16 : ++ NV25_PFB_ZCOMP_MODE_32); ++ else ++ tile->zcomp = tile->tag_mem->start | ++ NV20_PFB_ZCOMP_EN | ++ (bpp == 16 ? 0 : ++ NV20_PFB_ZCOMP_MODE_32); ++ } ++ ++ tile->addr |= 3; ++ } else { ++ tile->addr |= 1; ++ } ++ ++ } else { ++ tile->addr |= 1 << 31; ++ } ++} ++ + void +-nv10_fb_set_region_tiling(struct drm_device *dev, int i, uint32_t addr, +- uint32_t size, uint32_t pitch) ++nv10_fb_free_tile_region(struct drm_device *dev, int i) + { + struct drm_nouveau_private *dev_priv = dev->dev_private; +- uint32_t limit = max(1u, addr + size) - 1; ++ struct nouveau_tile_reg *tile = &dev_priv->tile.reg[i]; + +- if (pitch) { +- if (dev_priv->card_type >= NV_20) +- addr |= 1; +- else +- addr |= 1 << 31; ++ if (tile->tag_mem) { ++ nv20_fb_free_tag(dev, tile->tag_mem); ++ tile->tag_mem = NULL; + } + +- nv_wr32(dev, NV10_PFB_TLIMIT(i), limit); +- nv_wr32(dev, NV10_PFB_TSIZE(i), pitch); +- nv_wr32(dev, NV10_PFB_TILE(i), addr); ++ tile->addr = tile->limit = tile->pitch = tile->zcomp = 0; ++} ++ ++void ++nv10_fb_set_tile_region(struct drm_device *dev, int i) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_tile_reg *tile = &dev_priv->tile.reg[i]; ++ ++ nv_wr32(dev, NV10_PFB_TLIMIT(i), tile->limit); ++ nv_wr32(dev, NV10_PFB_TSIZE(i), tile->pitch); ++ nv_wr32(dev, NV10_PFB_TILE(i), tile->addr); ++ ++ if (dev_priv->card_type == NV_20) ++ nv_wr32(dev, NV20_PFB_ZCOMP(i), tile->zcomp); + } + + int +@@ -31,9 +117,14 @@ + + pfb->num_tiles = NV10_PFB_TILE__SIZE; + ++ if (dev_priv->card_type == NV_20) ++ drm_mm_init(&pfb->tag_heap, 0, ++ (dev_priv->chipset >= 0x25 ? ++ 64 * 1024 : 32 * 1024)); ++ + /* Turn all the tiling regions off. */ + for (i = 0; i < pfb->num_tiles; i++) +- pfb->set_region_tiling(dev, i, 0, 0, 0); ++ pfb->set_tile_region(dev, i); + + return 0; + } +@@ -41,4 +132,13 @@ + void + nv10_fb_takedown(struct drm_device *dev) + { ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_fb_engine *pfb = &dev_priv->engine.fb; ++ int i; ++ ++ for (i = 0; i < pfb->num_tiles; i++) ++ pfb->free_tile_region(dev, i); ++ ++ if (dev_priv->card_type == NV_20) ++ drm_mm_takedown(&pfb->tag_heap); + } +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv10_fifo.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv10_fifo.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv10_fifo.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv10_fifo.c 2010-11-12 06:18:06.000000000 +0100 +@@ -73,17 +73,6 @@ + return 0; + } + +-void +-nv10_fifo_destroy_context(struct nouveau_channel *chan) +-{ +- struct drm_device *dev = chan->dev; +- +- nv_wr32(dev, NV04_PFIFO_MODE, +- nv_rd32(dev, NV04_PFIFO_MODE) & ~(1 << chan->id)); +- +- nouveau_gpuobj_ref(NULL, &chan->ramfc); +-} +- + static void + nv10_fifo_do_load_context(struct drm_device *dev, int chid) + { +@@ -219,6 +208,7 @@ + static void + nv10_fifo_init_intr(struct drm_device *dev) + { ++ nouveau_irq_register(dev, 8, nv04_fifo_isr); + nv_wr32(dev, 0x002100, 0xffffffff); + nv_wr32(dev, 0x002140, 0xffffffff); + } +@@ -241,7 +231,7 @@ + pfifo->reassign(dev, true); + + for (i = 0; i < dev_priv->engine.fifo.channels; i++) { +- if (dev_priv->fifos[i]) { ++ if (dev_priv->channels.ptr[i]) { + uint32_t mode = nv_rd32(dev, NV04_PFIFO_MODE); + nv_wr32(dev, NV04_PFIFO_MODE, mode | (1 << i)); + } +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv10_graph.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv10_graph.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv10_graph.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv10_graph.c 2010-11-12 06:18:06.000000000 +0100 +@@ -26,6 +26,10 @@ + #include "drm.h" + #include "nouveau_drm.h" + #include "nouveau_drv.h" ++#include "nouveau_util.h" ++ ++static int nv10_graph_register(struct drm_device *); ++static void nv10_graph_isr(struct drm_device *); + + #define NV10_FIFO_NUMBER 32 + +@@ -786,7 +790,7 @@ + return 0; + } + +-void ++static void + nv10_graph_context_switch(struct drm_device *dev) + { + struct drm_nouveau_private *dev_priv = dev->dev_private; +@@ -802,7 +806,7 @@ + + /* Load context for next channel */ + chid = (nv_rd32(dev, NV04_PGRAPH_TRAPPED_ADDR) >> 20) & 0x1f; +- chan = dev_priv->fifos[chid]; ++ chan = dev_priv->channels.ptr[chid]; + if (chan && chan->pgraph_ctx) + nv10_graph_load_context(chan); + +@@ -833,7 +837,7 @@ + if (chid >= dev_priv->engine.fifo.channels) + return NULL; + +- return dev_priv->fifos[chid]; ++ return dev_priv->channels.ptr[chid]; + } + + int nv10_graph_create_context(struct nouveau_channel *chan) +@@ -875,37 +879,54 @@ + + void nv10_graph_destroy_context(struct nouveau_channel *chan) + { ++ struct drm_device *dev = chan->dev; ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; + struct graph_state *pgraph_ctx = chan->pgraph_ctx; ++ unsigned long flags; + ++ spin_lock_irqsave(&dev_priv->context_switch_lock, flags); ++ pgraph->fifo_access(dev, false); ++ ++ /* Unload the context if it's the currently active one */ ++ if (pgraph->channel(dev) == chan) ++ pgraph->unload_context(dev); ++ ++ /* Free the context resources */ + kfree(pgraph_ctx); + chan->pgraph_ctx = NULL; ++ ++ pgraph->fifo_access(dev, true); ++ spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); + } + + void +-nv10_graph_set_region_tiling(struct drm_device *dev, int i, uint32_t addr, +- uint32_t size, uint32_t pitch) ++nv10_graph_set_tile_region(struct drm_device *dev, int i) + { +- uint32_t limit = max(1u, addr + size) - 1; +- +- if (pitch) +- addr |= 1 << 31; ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_tile_reg *tile = &dev_priv->tile.reg[i]; + +- nv_wr32(dev, NV10_PGRAPH_TLIMIT(i), limit); +- nv_wr32(dev, NV10_PGRAPH_TSIZE(i), pitch); +- nv_wr32(dev, NV10_PGRAPH_TILE(i), addr); ++ nv_wr32(dev, NV10_PGRAPH_TLIMIT(i), tile->limit); ++ nv_wr32(dev, NV10_PGRAPH_TSIZE(i), tile->pitch); ++ nv_wr32(dev, NV10_PGRAPH_TILE(i), tile->addr); + } + + int nv10_graph_init(struct drm_device *dev) + { + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t tmp; +- int i; ++ int ret, i; + + nv_wr32(dev, NV03_PMC_ENABLE, nv_rd32(dev, NV03_PMC_ENABLE) & + ~NV_PMC_ENABLE_PGRAPH); + nv_wr32(dev, NV03_PMC_ENABLE, nv_rd32(dev, NV03_PMC_ENABLE) | + NV_PMC_ENABLE_PGRAPH); + ++ ret = nv10_graph_register(dev); ++ if (ret) ++ return ret; ++ ++ nouveau_irq_register(dev, 12, nv10_graph_isr); + nv_wr32(dev, NV03_PGRAPH_INTR , 0xFFFFFFFF); + nv_wr32(dev, NV03_PGRAPH_INTR_EN, 0xFFFFFFFF); + +@@ -928,7 +949,7 @@ + + /* Turn all the tiling regions off. */ + for (i = 0; i < NV10_PFB_TILE__SIZE; i++) +- nv10_graph_set_region_tiling(dev, i, 0, 0, 0); ++ nv10_graph_set_tile_region(dev, i); + + nv_wr32(dev, NV10_PGRAPH_CTX_SWITCH(0), 0x00000000); + nv_wr32(dev, NV10_PGRAPH_CTX_SWITCH(1), 0x00000000); +@@ -948,11 +969,13 @@ + + void nv10_graph_takedown(struct drm_device *dev) + { ++ nv_wr32(dev, NV03_PGRAPH_INTR_EN, 0x00000000); ++ nouveau_irq_unregister(dev, 12); + } + + static int +-nv17_graph_mthd_lma_window(struct nouveau_channel *chan, int grclass, +- int mthd, uint32_t data) ++nv17_graph_mthd_lma_window(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data) + { + struct drm_device *dev = chan->dev; + struct graph_state *ctx = chan->pgraph_ctx; +@@ -1031,8 +1054,8 @@ + } + + static int +-nv17_graph_mthd_lma_enable(struct nouveau_channel *chan, int grclass, +- int mthd, uint32_t data) ++nv17_graph_mthd_lma_enable(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data) + { + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; +@@ -1050,35 +1073,115 @@ + return 0; + } + +-static struct nouveau_pgraph_object_method nv17_graph_celsius_mthds[] = { +- { 0x1638, nv17_graph_mthd_lma_window }, +- { 0x163c, nv17_graph_mthd_lma_window }, +- { 0x1640, nv17_graph_mthd_lma_window }, +- { 0x1644, nv17_graph_mthd_lma_window }, +- { 0x1658, nv17_graph_mthd_lma_enable }, ++static int ++nv10_graph_register(struct drm_device *dev) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ ++ if (dev_priv->engine.graph.registered) ++ return 0; ++ ++ NVOBJ_CLASS(dev, 0x506e, SW); /* nvsw */ ++ NVOBJ_CLASS(dev, 0x0030, GR); /* null */ ++ NVOBJ_CLASS(dev, 0x0039, GR); /* m2mf */ ++ NVOBJ_CLASS(dev, 0x004a, GR); /* gdirect */ ++ NVOBJ_CLASS(dev, 0x005f, GR); /* imageblit */ ++ NVOBJ_CLASS(dev, 0x009f, GR); /* imageblit (nv12) */ ++ NVOBJ_CLASS(dev, 0x008a, GR); /* ifc */ ++ NVOBJ_CLASS(dev, 0x0089, GR); /* sifm */ ++ NVOBJ_CLASS(dev, 0x0062, GR); /* surf2d */ ++ NVOBJ_CLASS(dev, 0x0043, GR); /* rop */ ++ NVOBJ_CLASS(dev, 0x0012, GR); /* beta1 */ ++ NVOBJ_CLASS(dev, 0x0072, GR); /* beta4 */ ++ NVOBJ_CLASS(dev, 0x0019, GR); /* cliprect */ ++ NVOBJ_CLASS(dev, 0x0044, GR); /* pattern */ ++ NVOBJ_CLASS(dev, 0x0052, GR); /* swzsurf */ ++ NVOBJ_CLASS(dev, 0x0093, GR); /* surf3d */ ++ NVOBJ_CLASS(dev, 0x0094, GR); /* tex_tri */ ++ NVOBJ_CLASS(dev, 0x0095, GR); /* multitex_tri */ ++ ++ /* celcius */ ++ if (dev_priv->chipset <= 0x10) { ++ NVOBJ_CLASS(dev, 0x0056, GR); ++ } else ++ if (dev_priv->chipset < 0x17 || dev_priv->chipset == 0x1a) { ++ NVOBJ_CLASS(dev, 0x0096, GR); ++ } else { ++ NVOBJ_CLASS(dev, 0x0099, GR); ++ NVOBJ_MTHD (dev, 0x0099, 0x1638, nv17_graph_mthd_lma_window); ++ NVOBJ_MTHD (dev, 0x0099, 0x163c, nv17_graph_mthd_lma_window); ++ NVOBJ_MTHD (dev, 0x0099, 0x1640, nv17_graph_mthd_lma_window); ++ NVOBJ_MTHD (dev, 0x0099, 0x1644, nv17_graph_mthd_lma_window); ++ NVOBJ_MTHD (dev, 0x0099, 0x1658, nv17_graph_mthd_lma_enable); ++ } ++ ++ /* nvsw */ ++ NVOBJ_CLASS(dev, 0x506e, SW); ++ NVOBJ_MTHD (dev, 0x506e, 0x0500, nv04_graph_mthd_page_flip); ++ ++ dev_priv->engine.graph.registered = true; ++ return 0; ++} ++ ++struct nouveau_bitfield nv10_graph_intr[] = { ++ { NV_PGRAPH_INTR_NOTIFY, "NOTIFY" }, ++ { NV_PGRAPH_INTR_ERROR, "ERROR" }, + {} + }; + +-struct nouveau_pgraph_object_class nv10_graph_grclass[] = { +- { 0x0030, false, NULL }, /* null */ +- { 0x0039, false, NULL }, /* m2mf */ +- { 0x004a, false, NULL }, /* gdirect */ +- { 0x005f, false, NULL }, /* imageblit */ +- { 0x009f, false, NULL }, /* imageblit (nv12) */ +- { 0x008a, false, NULL }, /* ifc */ +- { 0x0089, false, NULL }, /* sifm */ +- { 0x0062, false, NULL }, /* surf2d */ +- { 0x0043, false, NULL }, /* rop */ +- { 0x0012, false, NULL }, /* beta1 */ +- { 0x0072, false, NULL }, /* beta4 */ +- { 0x0019, false, NULL }, /* cliprect */ +- { 0x0044, false, NULL }, /* pattern */ +- { 0x0052, false, NULL }, /* swzsurf */ +- { 0x0093, false, NULL }, /* surf3d */ +- { 0x0094, false, NULL }, /* tex_tri */ +- { 0x0095, false, NULL }, /* multitex_tri */ +- { 0x0056, false, NULL }, /* celcius (nv10) */ +- { 0x0096, false, NULL }, /* celcius (nv11) */ +- { 0x0099, false, nv17_graph_celsius_mthds }, /* celcius (nv17) */ ++struct nouveau_bitfield nv10_graph_nstatus[] = ++{ ++ { NV10_PGRAPH_NSTATUS_STATE_IN_USE, "STATE_IN_USE" }, ++ { NV10_PGRAPH_NSTATUS_INVALID_STATE, "INVALID_STATE" }, ++ { NV10_PGRAPH_NSTATUS_BAD_ARGUMENT, "BAD_ARGUMENT" }, ++ { NV10_PGRAPH_NSTATUS_PROTECTION_FAULT, "PROTECTION_FAULT" }, + {} + }; ++ ++static void ++nv10_graph_isr(struct drm_device *dev) ++{ ++ u32 stat; ++ ++ while ((stat = nv_rd32(dev, NV03_PGRAPH_INTR))) { ++ u32 nsource = nv_rd32(dev, NV03_PGRAPH_NSOURCE); ++ u32 nstatus = nv_rd32(dev, NV03_PGRAPH_NSTATUS); ++ u32 addr = nv_rd32(dev, NV04_PGRAPH_TRAPPED_ADDR); ++ u32 chid = (addr & 0x01f00000) >> 20; ++ u32 subc = (addr & 0x00070000) >> 16; ++ u32 mthd = (addr & 0x00001ffc); ++ u32 data = nv_rd32(dev, NV04_PGRAPH_TRAPPED_DATA); ++ u32 class = nv_rd32(dev, 0x400160 + subc * 4) & 0xfff; ++ u32 show = stat; ++ ++ if (stat & NV_PGRAPH_INTR_ERROR) { ++ if (nsource & NV03_PGRAPH_NSOURCE_ILLEGAL_MTHD) { ++ if (!nouveau_gpuobj_mthd_call2(dev, chid, class, mthd, data)) ++ show &= ~NV_PGRAPH_INTR_ERROR; ++ } ++ } ++ ++ if (stat & NV_PGRAPH_INTR_CONTEXT_SWITCH) { ++ nv_wr32(dev, NV03_PGRAPH_INTR, NV_PGRAPH_INTR_CONTEXT_SWITCH); ++ stat &= ~NV_PGRAPH_INTR_CONTEXT_SWITCH; ++ show &= ~NV_PGRAPH_INTR_CONTEXT_SWITCH; ++ nv10_graph_context_switch(dev); ++ } ++ ++ nv_wr32(dev, NV03_PGRAPH_INTR, stat); ++ nv_wr32(dev, NV04_PGRAPH_FIFO, 0x00000001); ++ ++ if (show && nouveau_ratelimit()) { ++ NV_INFO(dev, "PGRAPH -"); ++ nouveau_bitfield_print(nv10_graph_intr, show); ++ printk(" nsource:"); ++ nouveau_bitfield_print(nv04_graph_nsource, nsource); ++ printk(" nstatus:"); ++ nouveau_bitfield_print(nv10_graph_nstatus, nstatus); ++ printk("\n"); ++ NV_INFO(dev, "PGRAPH - ch %d/%d class 0x%04x " ++ "mthd 0x%04x data 0x%08x\n", ++ chid, subc, class, mthd, data); ++ } ++ } ++} +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv20_graph.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv20_graph.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv20_graph.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv20_graph.c 2010-11-12 06:18:06.000000000 +0100 +@@ -32,6 +32,10 @@ + #define NV34_GRCTX_SIZE (18140) + #define NV35_36_GRCTX_SIZE (22396) + ++static int nv20_graph_register(struct drm_device *); ++static int nv30_graph_register(struct drm_device *); ++static void nv20_graph_isr(struct drm_device *); ++ + static void + nv20_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx) + { +@@ -425,9 +429,21 @@ + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; ++ unsigned long flags; + +- nouveau_gpuobj_ref(NULL, &chan->ramin_grctx); ++ spin_lock_irqsave(&dev_priv->context_switch_lock, flags); ++ pgraph->fifo_access(dev, false); ++ ++ /* Unload the context if it's the currently active one */ ++ if (pgraph->channel(dev) == chan) ++ pgraph->unload_context(dev); ++ ++ pgraph->fifo_access(dev, true); ++ spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); ++ ++ /* Free the context resources */ + nv_wo32(pgraph->ctx_table, chan->id * 4, 0); ++ nouveau_gpuobj_ref(NULL, &chan->ramin_grctx); + } + + int +@@ -496,24 +512,27 @@ + } + + void +-nv20_graph_set_region_tiling(struct drm_device *dev, int i, uint32_t addr, +- uint32_t size, uint32_t pitch) ++nv20_graph_set_tile_region(struct drm_device *dev, int i) + { +- uint32_t limit = max(1u, addr + size) - 1; +- +- if (pitch) +- addr |= 1; ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_tile_reg *tile = &dev_priv->tile.reg[i]; + +- nv_wr32(dev, NV20_PGRAPH_TLIMIT(i), limit); +- nv_wr32(dev, NV20_PGRAPH_TSIZE(i), pitch); +- nv_wr32(dev, NV20_PGRAPH_TILE(i), addr); ++ nv_wr32(dev, NV20_PGRAPH_TLIMIT(i), tile->limit); ++ nv_wr32(dev, NV20_PGRAPH_TSIZE(i), tile->pitch); ++ nv_wr32(dev, NV20_PGRAPH_TILE(i), tile->addr); + + nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00EA0030 + 4 * i); +- nv_wr32(dev, NV10_PGRAPH_RDI_DATA, limit); ++ nv_wr32(dev, NV10_PGRAPH_RDI_DATA, tile->limit); + nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00EA0050 + 4 * i); +- nv_wr32(dev, NV10_PGRAPH_RDI_DATA, pitch); ++ nv_wr32(dev, NV10_PGRAPH_RDI_DATA, tile->pitch); + nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00EA0010 + 4 * i); +- nv_wr32(dev, NV10_PGRAPH_RDI_DATA, addr); ++ nv_wr32(dev, NV10_PGRAPH_RDI_DATA, tile->addr); ++ ++ if (dev_priv->card_type == NV_20) { ++ nv_wr32(dev, NV20_PGRAPH_ZCOMP(i), tile->zcomp); ++ nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00ea0090 + 4 * i); ++ nv_wr32(dev, NV10_PGRAPH_RDI_DATA, tile->zcomp); ++ } + } + + int +@@ -560,6 +579,13 @@ + + nv20_graph_rdi(dev); + ++ ret = nv20_graph_register(dev); ++ if (ret) { ++ nouveau_gpuobj_ref(NULL, &pgraph->ctx_table); ++ return ret; ++ } ++ ++ nouveau_irq_register(dev, 12, nv20_graph_isr); + nv_wr32(dev, NV03_PGRAPH_INTR , 0xFFFFFFFF); + nv_wr32(dev, NV03_PGRAPH_INTR_EN, 0xFFFFFFFF); + +@@ -571,16 +597,17 @@ + nv_wr32(dev, 0x40009C , 0x00000040); + + if (dev_priv->chipset >= 0x25) { +- nv_wr32(dev, 0x400890, 0x00080000); ++ nv_wr32(dev, 0x400890, 0x00a8cfff); + nv_wr32(dev, 0x400610, 0x304B1FB6); +- nv_wr32(dev, 0x400B80, 0x18B82880); ++ nv_wr32(dev, 0x400B80, 0x1cbd3883); + nv_wr32(dev, 0x400B84, 0x44000000); + nv_wr32(dev, 0x400098, 0x40000080); + nv_wr32(dev, 0x400B88, 0x000000ff); ++ + } else { +- nv_wr32(dev, 0x400880, 0x00080000); /* 0x0008c7df */ ++ nv_wr32(dev, 0x400880, 0x0008c7df); + nv_wr32(dev, 0x400094, 0x00000005); +- nv_wr32(dev, 0x400B80, 0x45CAA208); /* 0x45eae20e */ ++ nv_wr32(dev, 0x400B80, 0x45eae20e); + nv_wr32(dev, 0x400B84, 0x24000000); + nv_wr32(dev, 0x400098, 0x00000040); + nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00E00038); +@@ -591,14 +618,8 @@ + + /* Turn all the tiling regions off. */ + for (i = 0; i < NV10_PFB_TILE__SIZE; i++) +- nv20_graph_set_region_tiling(dev, i, 0, 0, 0); ++ nv20_graph_set_tile_region(dev, i); + +- for (i = 0; i < 8; i++) { +- nv_wr32(dev, 0x400980 + i * 4, nv_rd32(dev, 0x100300 + i * 4)); +- nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00EA0090 + i * 4); +- nv_wr32(dev, NV10_PGRAPH_RDI_DATA, +- nv_rd32(dev, 0x100300 + i * 4)); +- } + nv_wr32(dev, 0x4009a0, nv_rd32(dev, 0x100324)); + nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00EA000C); + nv_wr32(dev, NV10_PGRAPH_RDI_DATA, nv_rd32(dev, 0x100324)); +@@ -642,6 +663,9 @@ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; + ++ nv_wr32(dev, NV03_PGRAPH_INTR_EN, 0x00000000); ++ nouveau_irq_unregister(dev, 12); ++ + nouveau_gpuobj_ref(NULL, &pgraph->ctx_table); + } + +@@ -684,9 +708,16 @@ + return ret; + } + ++ ret = nv30_graph_register(dev); ++ if (ret) { ++ nouveau_gpuobj_ref(NULL, &pgraph->ctx_table); ++ return ret; ++ } ++ + nv_wr32(dev, NV20_PGRAPH_CHANNEL_CTX_TABLE, + pgraph->ctx_table->pinst >> 4); + ++ nouveau_irq_register(dev, 12, nv20_graph_isr); + nv_wr32(dev, NV03_PGRAPH_INTR , 0xFFFFFFFF); + nv_wr32(dev, NV03_PGRAPH_INTR_EN, 0xFFFFFFFF); + +@@ -724,7 +755,7 @@ + + /* Turn all the tiling regions off. */ + for (i = 0; i < NV10_PFB_TILE__SIZE; i++) +- nv20_graph_set_region_tiling(dev, i, 0, 0, 0); ++ nv20_graph_set_tile_region(dev, i); + + nv_wr32(dev, NV10_PGRAPH_CTX_CONTROL, 0x10000100); + nv_wr32(dev, NV10_PGRAPH_STATE , 0xFFFFFFFF); +@@ -744,46 +775,125 @@ + return 0; + } + +-struct nouveau_pgraph_object_class nv20_graph_grclass[] = { +- { 0x0030, false, NULL }, /* null */ +- { 0x0039, false, NULL }, /* m2mf */ +- { 0x004a, false, NULL }, /* gdirect */ +- { 0x009f, false, NULL }, /* imageblit (nv12) */ +- { 0x008a, false, NULL }, /* ifc */ +- { 0x0089, false, NULL }, /* sifm */ +- { 0x0062, false, NULL }, /* surf2d */ +- { 0x0043, false, NULL }, /* rop */ +- { 0x0012, false, NULL }, /* beta1 */ +- { 0x0072, false, NULL }, /* beta4 */ +- { 0x0019, false, NULL }, /* cliprect */ +- { 0x0044, false, NULL }, /* pattern */ +- { 0x009e, false, NULL }, /* swzsurf */ +- { 0x0096, false, NULL }, /* celcius */ +- { 0x0097, false, NULL }, /* kelvin (nv20) */ +- { 0x0597, false, NULL }, /* kelvin (nv25) */ +- {} +-}; +- +-struct nouveau_pgraph_object_class nv30_graph_grclass[] = { +- { 0x0030, false, NULL }, /* null */ +- { 0x0039, false, NULL }, /* m2mf */ +- { 0x004a, false, NULL }, /* gdirect */ +- { 0x009f, false, NULL }, /* imageblit (nv12) */ +- { 0x008a, false, NULL }, /* ifc */ +- { 0x038a, false, NULL }, /* ifc (nv30) */ +- { 0x0089, false, NULL }, /* sifm */ +- { 0x0389, false, NULL }, /* sifm (nv30) */ +- { 0x0062, false, NULL }, /* surf2d */ +- { 0x0362, false, NULL }, /* surf2d (nv30) */ +- { 0x0043, false, NULL }, /* rop */ +- { 0x0012, false, NULL }, /* beta1 */ +- { 0x0072, false, NULL }, /* beta4 */ +- { 0x0019, false, NULL }, /* cliprect */ +- { 0x0044, false, NULL }, /* pattern */ +- { 0x039e, false, NULL }, /* swzsurf */ +- { 0x0397, false, NULL }, /* rankine (nv30) */ +- { 0x0497, false, NULL }, /* rankine (nv35) */ +- { 0x0697, false, NULL }, /* rankine (nv34) */ +- {} +-}; ++static int ++nv20_graph_register(struct drm_device *dev) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; + ++ if (dev_priv->engine.graph.registered) ++ return 0; ++ ++ NVOBJ_CLASS(dev, 0x506e, SW); /* nvsw */ ++ NVOBJ_CLASS(dev, 0x0030, GR); /* null */ ++ NVOBJ_CLASS(dev, 0x0039, GR); /* m2mf */ ++ NVOBJ_CLASS(dev, 0x004a, GR); /* gdirect */ ++ NVOBJ_CLASS(dev, 0x009f, GR); /* imageblit (nv12) */ ++ NVOBJ_CLASS(dev, 0x008a, GR); /* ifc */ ++ NVOBJ_CLASS(dev, 0x0089, GR); /* sifm */ ++ NVOBJ_CLASS(dev, 0x0062, GR); /* surf2d */ ++ NVOBJ_CLASS(dev, 0x0043, GR); /* rop */ ++ NVOBJ_CLASS(dev, 0x0012, GR); /* beta1 */ ++ NVOBJ_CLASS(dev, 0x0072, GR); /* beta4 */ ++ NVOBJ_CLASS(dev, 0x0019, GR); /* cliprect */ ++ NVOBJ_CLASS(dev, 0x0044, GR); /* pattern */ ++ NVOBJ_CLASS(dev, 0x009e, GR); /* swzsurf */ ++ NVOBJ_CLASS(dev, 0x0096, GR); /* celcius */ ++ ++ /* kelvin */ ++ if (dev_priv->chipset < 0x25) ++ NVOBJ_CLASS(dev, 0x0097, GR); ++ else ++ NVOBJ_CLASS(dev, 0x0597, GR); ++ ++ /* nvsw */ ++ NVOBJ_CLASS(dev, 0x506e, SW); ++ NVOBJ_MTHD (dev, 0x506e, 0x0500, nv04_graph_mthd_page_flip); ++ ++ dev_priv->engine.graph.registered = true; ++ return 0; ++} ++ ++static int ++nv30_graph_register(struct drm_device *dev) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ ++ if (dev_priv->engine.graph.registered) ++ return 0; ++ ++ NVOBJ_CLASS(dev, 0x506e, SW); /* nvsw */ ++ NVOBJ_CLASS(dev, 0x0030, GR); /* null */ ++ NVOBJ_CLASS(dev, 0x0039, GR); /* m2mf */ ++ NVOBJ_CLASS(dev, 0x004a, GR); /* gdirect */ ++ NVOBJ_CLASS(dev, 0x009f, GR); /* imageblit (nv12) */ ++ NVOBJ_CLASS(dev, 0x008a, GR); /* ifc */ ++ NVOBJ_CLASS(dev, 0x038a, GR); /* ifc (nv30) */ ++ NVOBJ_CLASS(dev, 0x0089, GR); /* sifm */ ++ NVOBJ_CLASS(dev, 0x0389, GR); /* sifm (nv30) */ ++ NVOBJ_CLASS(dev, 0x0062, GR); /* surf2d */ ++ NVOBJ_CLASS(dev, 0x0362, GR); /* surf2d (nv30) */ ++ NVOBJ_CLASS(dev, 0x0043, GR); /* rop */ ++ NVOBJ_CLASS(dev, 0x0012, GR); /* beta1 */ ++ NVOBJ_CLASS(dev, 0x0072, GR); /* beta4 */ ++ NVOBJ_CLASS(dev, 0x0019, GR); /* cliprect */ ++ NVOBJ_CLASS(dev, 0x0044, GR); /* pattern */ ++ NVOBJ_CLASS(dev, 0x039e, GR); /* swzsurf */ ++ ++ /* rankine */ ++ if (0x00000003 & (1 << (dev_priv->chipset & 0x0f))) ++ NVOBJ_CLASS(dev, 0x0397, GR); ++ else ++ if (0x00000010 & (1 << (dev_priv->chipset & 0x0f))) ++ NVOBJ_CLASS(dev, 0x0697, GR); ++ else ++ if (0x000001e0 & (1 << (dev_priv->chipset & 0x0f))) ++ NVOBJ_CLASS(dev, 0x0497, GR); ++ ++ /* nvsw */ ++ NVOBJ_CLASS(dev, 0x506e, SW); ++ NVOBJ_MTHD (dev, 0x506e, 0x0500, nv04_graph_mthd_page_flip); ++ ++ dev_priv->engine.graph.registered = true; ++ return 0; ++} ++ ++static void ++nv20_graph_isr(struct drm_device *dev) ++{ ++ u32 stat; ++ ++ while ((stat = nv_rd32(dev, NV03_PGRAPH_INTR))) { ++ u32 nsource = nv_rd32(dev, NV03_PGRAPH_NSOURCE); ++ u32 nstatus = nv_rd32(dev, NV03_PGRAPH_NSTATUS); ++ u32 addr = nv_rd32(dev, NV04_PGRAPH_TRAPPED_ADDR); ++ u32 chid = (addr & 0x01f00000) >> 20; ++ u32 subc = (addr & 0x00070000) >> 16; ++ u32 mthd = (addr & 0x00001ffc); ++ u32 data = nv_rd32(dev, NV04_PGRAPH_TRAPPED_DATA); ++ u32 class = nv_rd32(dev, 0x400160 + subc * 4) & 0xfff; ++ u32 show = stat; ++ ++ if (stat & NV_PGRAPH_INTR_ERROR) { ++ if (nsource & NV03_PGRAPH_NSOURCE_ILLEGAL_MTHD) { ++ if (!nouveau_gpuobj_mthd_call2(dev, chid, class, mthd, data)) ++ show &= ~NV_PGRAPH_INTR_ERROR; ++ } ++ } ++ ++ nv_wr32(dev, NV03_PGRAPH_INTR, stat); ++ nv_wr32(dev, NV04_PGRAPH_FIFO, 0x00000001); ++ ++ if (show && nouveau_ratelimit()) { ++ NV_INFO(dev, "PGRAPH -"); ++ nouveau_bitfield_print(nv10_graph_intr, show); ++ printk(" nsource:"); ++ nouveau_bitfield_print(nv04_graph_nsource, nsource); ++ printk(" nstatus:"); ++ nouveau_bitfield_print(nv10_graph_nstatus, nstatus); ++ printk("\n"); ++ NV_INFO(dev, "PGRAPH - ch %d/%d class 0x%04x " ++ "mthd 0x%04x data 0x%08x\n", ++ chid, subc, class, mthd, data); ++ } ++ } ++} +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv30_fb.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv30_fb.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv30_fb.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv30_fb.c 2010-11-12 06:18:06.000000000 +0100 +@@ -29,6 +29,27 @@ + #include "nouveau_drv.h" + #include "nouveau_drm.h" + ++void ++nv30_fb_init_tile_region(struct drm_device *dev, int i, uint32_t addr, ++ uint32_t size, uint32_t pitch, uint32_t flags) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_tile_reg *tile = &dev_priv->tile.reg[i]; ++ ++ tile->addr = addr | 1; ++ tile->limit = max(1u, addr + size) - 1; ++ tile->pitch = pitch; ++} ++ ++void ++nv30_fb_free_tile_region(struct drm_device *dev, int i) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_tile_reg *tile = &dev_priv->tile.reg[i]; ++ ++ tile->addr = tile->limit = tile->pitch = 0; ++} ++ + static int + calc_bias(struct drm_device *dev, int k, int i, int j) + { +@@ -65,7 +86,7 @@ + + /* Turn all the tiling regions off. */ + for (i = 0; i < pfb->num_tiles; i++) +- pfb->set_region_tiling(dev, i, 0, 0, 0); ++ pfb->set_tile_region(dev, i); + + /* Init the memory timing regs at 0x10037c/0x1003ac */ + if (dev_priv->chipset == 0x30 || +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv40_fb.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv40_fb.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv40_fb.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv40_fb.c 2010-11-12 06:18:06.000000000 +0100 +@@ -4,26 +4,22 @@ + #include "nouveau_drm.h" + + void +-nv40_fb_set_region_tiling(struct drm_device *dev, int i, uint32_t addr, +- uint32_t size, uint32_t pitch) ++nv40_fb_set_tile_region(struct drm_device *dev, int i) + { + struct drm_nouveau_private *dev_priv = dev->dev_private; +- uint32_t limit = max(1u, addr + size) - 1; +- +- if (pitch) +- addr |= 1; ++ struct nouveau_tile_reg *tile = &dev_priv->tile.reg[i]; + + switch (dev_priv->chipset) { + case 0x40: +- nv_wr32(dev, NV10_PFB_TLIMIT(i), limit); +- nv_wr32(dev, NV10_PFB_TSIZE(i), pitch); +- nv_wr32(dev, NV10_PFB_TILE(i), addr); ++ nv_wr32(dev, NV10_PFB_TLIMIT(i), tile->limit); ++ nv_wr32(dev, NV10_PFB_TSIZE(i), tile->pitch); ++ nv_wr32(dev, NV10_PFB_TILE(i), tile->addr); + break; + + default: +- nv_wr32(dev, NV40_PFB_TLIMIT(i), limit); +- nv_wr32(dev, NV40_PFB_TSIZE(i), pitch); +- nv_wr32(dev, NV40_PFB_TILE(i), addr); ++ nv_wr32(dev, NV40_PFB_TLIMIT(i), tile->limit); ++ nv_wr32(dev, NV40_PFB_TSIZE(i), tile->pitch); ++ nv_wr32(dev, NV40_PFB_TILE(i), tile->addr); + break; + } + } +@@ -64,7 +60,7 @@ + + /* Turn all the tiling regions off. */ + for (i = 0; i < pfb->num_tiles; i++) +- pfb->set_region_tiling(dev, i, 0, 0, 0); ++ pfb->set_tile_region(dev, i); + + return 0; + } +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv40_fifo.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv40_fifo.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv40_fifo.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv40_fifo.c 2010-11-12 06:18:06.000000000 +0100 +@@ -70,17 +70,6 @@ + return 0; + } + +-void +-nv40_fifo_destroy_context(struct nouveau_channel *chan) +-{ +- struct drm_device *dev = chan->dev; +- +- nv_wr32(dev, NV04_PFIFO_MODE, +- nv_rd32(dev, NV04_PFIFO_MODE) & ~(1 << chan->id)); +- +- nouveau_gpuobj_ref(NULL, &chan->ramfc); +-} +- + static void + nv40_fifo_do_load_context(struct drm_device *dev, int chid) + { +@@ -279,6 +268,7 @@ + static void + nv40_fifo_init_intr(struct drm_device *dev) + { ++ nouveau_irq_register(dev, 8, nv04_fifo_isr); + nv_wr32(dev, 0x002100, 0xffffffff); + nv_wr32(dev, 0x002140, 0xffffffff); + } +@@ -301,7 +291,7 @@ + pfifo->reassign(dev, true); + + for (i = 0; i < dev_priv->engine.fifo.channels; i++) { +- if (dev_priv->fifos[i]) { ++ if (dev_priv->channels.ptr[i]) { + uint32_t mode = nv_rd32(dev, NV04_PFIFO_MODE); + nv_wr32(dev, NV04_PFIFO_MODE, mode | (1 << i)); + } +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv40_graph.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv40_graph.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv40_graph.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv40_graph.c 2010-11-12 06:18:06.000000000 +0100 +@@ -29,6 +29,9 @@ + #include "nouveau_drv.h" + #include "nouveau_grctx.h" + ++static int nv40_graph_register(struct drm_device *); ++static void nv40_graph_isr(struct drm_device *); ++ + struct nouveau_channel * + nv40_graph_channel(struct drm_device *dev) + { +@@ -42,7 +45,7 @@ + inst = (inst & NV40_PGRAPH_CTXCTL_CUR_INSTANCE) << 4; + + for (i = 0; i < dev_priv->engine.fifo.channels; i++) { +- struct nouveau_channel *chan = dev_priv->fifos[i]; ++ struct nouveau_channel *chan = dev_priv->channels.ptr[i]; + + if (chan && chan->ramin_grctx && + chan->ramin_grctx->pinst == inst) +@@ -79,6 +82,22 @@ + void + nv40_graph_destroy_context(struct nouveau_channel *chan) + { ++ struct drm_device *dev = chan->dev; ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; ++ unsigned long flags; ++ ++ spin_lock_irqsave(&dev_priv->context_switch_lock, flags); ++ pgraph->fifo_access(dev, false); ++ ++ /* Unload the context if it's the currently active one */ ++ if (pgraph->channel(dev) == chan) ++ pgraph->unload_context(dev); ++ ++ pgraph->fifo_access(dev, true); ++ spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); ++ ++ /* Free the context resources */ + nouveau_gpuobj_ref(NULL, &chan->ramin_grctx); + } + +@@ -174,43 +193,39 @@ + } + + void +-nv40_graph_set_region_tiling(struct drm_device *dev, int i, uint32_t addr, +- uint32_t size, uint32_t pitch) ++nv40_graph_set_tile_region(struct drm_device *dev, int i) + { + struct drm_nouveau_private *dev_priv = dev->dev_private; +- uint32_t limit = max(1u, addr + size) - 1; +- +- if (pitch) +- addr |= 1; ++ struct nouveau_tile_reg *tile = &dev_priv->tile.reg[i]; + + switch (dev_priv->chipset) { + case 0x44: + case 0x4a: + case 0x4e: +- nv_wr32(dev, NV20_PGRAPH_TSIZE(i), pitch); +- nv_wr32(dev, NV20_PGRAPH_TLIMIT(i), limit); +- nv_wr32(dev, NV20_PGRAPH_TILE(i), addr); ++ nv_wr32(dev, NV20_PGRAPH_TSIZE(i), tile->pitch); ++ nv_wr32(dev, NV20_PGRAPH_TLIMIT(i), tile->limit); ++ nv_wr32(dev, NV20_PGRAPH_TILE(i), tile->addr); + break; + + case 0x46: + case 0x47: + case 0x49: + case 0x4b: +- nv_wr32(dev, NV47_PGRAPH_TSIZE(i), pitch); +- nv_wr32(dev, NV47_PGRAPH_TLIMIT(i), limit); +- nv_wr32(dev, NV47_PGRAPH_TILE(i), addr); +- nv_wr32(dev, NV40_PGRAPH_TSIZE1(i), pitch); +- nv_wr32(dev, NV40_PGRAPH_TLIMIT1(i), limit); +- nv_wr32(dev, NV40_PGRAPH_TILE1(i), addr); ++ nv_wr32(dev, NV47_PGRAPH_TSIZE(i), tile->pitch); ++ nv_wr32(dev, NV47_PGRAPH_TLIMIT(i), tile->limit); ++ nv_wr32(dev, NV47_PGRAPH_TILE(i), tile->addr); ++ nv_wr32(dev, NV40_PGRAPH_TSIZE1(i), tile->pitch); ++ nv_wr32(dev, NV40_PGRAPH_TLIMIT1(i), tile->limit); ++ nv_wr32(dev, NV40_PGRAPH_TILE1(i), tile->addr); + break; + + default: +- nv_wr32(dev, NV20_PGRAPH_TSIZE(i), pitch); +- nv_wr32(dev, NV20_PGRAPH_TLIMIT(i), limit); +- nv_wr32(dev, NV20_PGRAPH_TILE(i), addr); +- nv_wr32(dev, NV40_PGRAPH_TSIZE1(i), pitch); +- nv_wr32(dev, NV40_PGRAPH_TLIMIT1(i), limit); +- nv_wr32(dev, NV40_PGRAPH_TILE1(i), addr); ++ nv_wr32(dev, NV20_PGRAPH_TSIZE(i), tile->pitch); ++ nv_wr32(dev, NV20_PGRAPH_TLIMIT(i), tile->limit); ++ nv_wr32(dev, NV20_PGRAPH_TILE(i), tile->addr); ++ nv_wr32(dev, NV40_PGRAPH_TSIZE1(i), tile->pitch); ++ nv_wr32(dev, NV40_PGRAPH_TLIMIT1(i), tile->limit); ++ nv_wr32(dev, NV40_PGRAPH_TILE1(i), tile->addr); + break; + } + } +@@ -232,7 +247,7 @@ + struct nouveau_fb_engine *pfb = &dev_priv->engine.fb; + struct nouveau_grctx ctx = {}; + uint32_t vramsz, *cp; +- int i, j; ++ int ret, i, j; + + nv_wr32(dev, NV03_PMC_ENABLE, nv_rd32(dev, NV03_PMC_ENABLE) & + ~NV_PMC_ENABLE_PGRAPH); +@@ -256,9 +271,14 @@ + + kfree(cp); + ++ ret = nv40_graph_register(dev); ++ if (ret) ++ return ret; ++ + /* No context present currently */ + nv_wr32(dev, NV40_PGRAPH_CTXCTL_CUR, 0x00000000); + ++ nouveau_irq_register(dev, 12, nv40_graph_isr); + nv_wr32(dev, NV03_PGRAPH_INTR , 0xFFFFFFFF); + nv_wr32(dev, NV40_PGRAPH_INTR_EN, 0xFFFFFFFF); + +@@ -347,7 +367,7 @@ + + /* Turn all the tiling regions off. */ + for (i = 0; i < pfb->num_tiles; i++) +- nv40_graph_set_region_tiling(dev, i, 0, 0, 0); ++ nv40_graph_set_tile_region(dev, i); + + /* begin RAM config */ + vramsz = pci_resource_len(dev->pdev, 0) - 1; +@@ -390,26 +410,111 @@ + + void nv40_graph_takedown(struct drm_device *dev) + { ++ nouveau_irq_unregister(dev, 12); ++} ++ ++static int ++nv40_graph_register(struct drm_device *dev) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ ++ if (dev_priv->engine.graph.registered) ++ return 0; ++ ++ NVOBJ_CLASS(dev, 0x506e, SW); /* nvsw */ ++ NVOBJ_CLASS(dev, 0x0030, GR); /* null */ ++ NVOBJ_CLASS(dev, 0x0039, GR); /* m2mf */ ++ NVOBJ_CLASS(dev, 0x004a, GR); /* gdirect */ ++ NVOBJ_CLASS(dev, 0x009f, GR); /* imageblit (nv12) */ ++ NVOBJ_CLASS(dev, 0x008a, GR); /* ifc */ ++ NVOBJ_CLASS(dev, 0x0089, GR); /* sifm */ ++ NVOBJ_CLASS(dev, 0x3089, GR); /* sifm (nv40) */ ++ NVOBJ_CLASS(dev, 0x0062, GR); /* surf2d */ ++ NVOBJ_CLASS(dev, 0x3062, GR); /* surf2d (nv40) */ ++ NVOBJ_CLASS(dev, 0x0043, GR); /* rop */ ++ NVOBJ_CLASS(dev, 0x0012, GR); /* beta1 */ ++ NVOBJ_CLASS(dev, 0x0072, GR); /* beta4 */ ++ NVOBJ_CLASS(dev, 0x0019, GR); /* cliprect */ ++ NVOBJ_CLASS(dev, 0x0044, GR); /* pattern */ ++ NVOBJ_CLASS(dev, 0x309e, GR); /* swzsurf */ ++ ++ /* curie */ ++ if (dev_priv->chipset >= 0x60 || ++ 0x00005450 & (1 << (dev_priv->chipset & 0x0f))) ++ NVOBJ_CLASS(dev, 0x4497, GR); ++ else ++ NVOBJ_CLASS(dev, 0x4097, GR); ++ ++ /* nvsw */ ++ NVOBJ_CLASS(dev, 0x506e, SW); ++ NVOBJ_MTHD (dev, 0x506e, 0x0500, nv04_graph_mthd_page_flip); ++ ++ dev_priv->engine.graph.registered = true; ++ return 0; ++} ++ ++static int ++nv40_graph_isr_chid(struct drm_device *dev, u32 inst) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_channel *chan; ++ unsigned long flags; ++ int i; ++ ++ spin_lock_irqsave(&dev_priv->channels.lock, flags); ++ for (i = 0; i < dev_priv->engine.fifo.channels; i++) { ++ chan = dev_priv->channels.ptr[i]; ++ if (!chan || !chan->ramin_grctx) ++ continue; ++ ++ if (inst == chan->ramin_grctx->pinst) ++ break; ++ } ++ spin_unlock_irqrestore(&dev_priv->channels.lock, flags); ++ return i; + } + +-struct nouveau_pgraph_object_class nv40_graph_grclass[] = { +- { 0x0030, false, NULL }, /* null */ +- { 0x0039, false, NULL }, /* m2mf */ +- { 0x004a, false, NULL }, /* gdirect */ +- { 0x009f, false, NULL }, /* imageblit (nv12) */ +- { 0x008a, false, NULL }, /* ifc */ +- { 0x0089, false, NULL }, /* sifm */ +- { 0x3089, false, NULL }, /* sifm (nv40) */ +- { 0x0062, false, NULL }, /* surf2d */ +- { 0x3062, false, NULL }, /* surf2d (nv40) */ +- { 0x0043, false, NULL }, /* rop */ +- { 0x0012, false, NULL }, /* beta1 */ +- { 0x0072, false, NULL }, /* beta4 */ +- { 0x0019, false, NULL }, /* cliprect */ +- { 0x0044, false, NULL }, /* pattern */ +- { 0x309e, false, NULL }, /* swzsurf */ +- { 0x4097, false, NULL }, /* curie (nv40) */ +- { 0x4497, false, NULL }, /* curie (nv44) */ +- {} +-}; ++static void ++nv40_graph_isr(struct drm_device *dev) ++{ ++ u32 stat; ++ ++ while ((stat = nv_rd32(dev, NV03_PGRAPH_INTR))) { ++ u32 nsource = nv_rd32(dev, NV03_PGRAPH_NSOURCE); ++ u32 nstatus = nv_rd32(dev, NV03_PGRAPH_NSTATUS); ++ u32 inst = (nv_rd32(dev, 0x40032c) & 0x000fffff) << 4; ++ u32 chid = nv40_graph_isr_chid(dev, inst); ++ u32 addr = nv_rd32(dev, NV04_PGRAPH_TRAPPED_ADDR); ++ u32 subc = (addr & 0x00070000) >> 16; ++ u32 mthd = (addr & 0x00001ffc); ++ u32 data = nv_rd32(dev, NV04_PGRAPH_TRAPPED_DATA); ++ u32 class = nv_rd32(dev, 0x400160 + subc * 4) & 0xffff; ++ u32 show = stat; ++ ++ if (stat & NV_PGRAPH_INTR_ERROR) { ++ if (nsource & NV03_PGRAPH_NSOURCE_ILLEGAL_MTHD) { ++ if (!nouveau_gpuobj_mthd_call2(dev, chid, class, mthd, data)) ++ show &= ~NV_PGRAPH_INTR_ERROR; ++ } else ++ if (nsource & NV03_PGRAPH_NSOURCE_DMA_VTX_PROTECTION) { ++ nv_mask(dev, 0x402000, 0, 0); ++ } ++ } ++ ++ nv_wr32(dev, NV03_PGRAPH_INTR, stat); ++ nv_wr32(dev, NV04_PGRAPH_FIFO, 0x00000001); + ++ if (show && nouveau_ratelimit()) { ++ NV_INFO(dev, "PGRAPH -"); ++ nouveau_bitfield_print(nv10_graph_intr, show); ++ printk(" nsource:"); ++ nouveau_bitfield_print(nv04_graph_nsource, nsource); ++ printk(" nstatus:"); ++ nouveau_bitfield_print(nv10_graph_nstatus, nstatus); ++ printk("\n"); ++ NV_INFO(dev, "PGRAPH - ch %d (0x%08x) subc %d " ++ "class 0x%04x mthd 0x%04x data 0x%08x\n", ++ chid, inst, subc, class, mthd, data); ++ } ++ } ++} +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_calc.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_calc.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_calc.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_calc.c 2010-11-12 06:18:06.000000000 +0100 +@@ -51,24 +51,28 @@ + int *N, int *fN, int *M, int *P) + { + fixed20_12 fb_div, a, b; ++ u32 refclk = pll->refclk / 10; ++ u32 max_vco_freq = pll->vco1.maxfreq / 10; ++ u32 max_vco_inputfreq = pll->vco1.max_inputfreq / 10; ++ clk /= 10; + +- *P = pll->vco1.maxfreq / clk; ++ *P = max_vco_freq / clk; + if (*P > pll->max_p) + *P = pll->max_p; + if (*P < pll->min_p) + *P = pll->min_p; + +- /* *M = ceil(refclk / pll->vco.max_inputfreq); */ +- a.full = dfixed_const(pll->refclk); +- b.full = dfixed_const(pll->vco1.max_inputfreq); ++ /* *M = floor((refclk + max_vco_inputfreq) / max_vco_inputfreq); */ ++ a.full = dfixed_const(refclk + max_vco_inputfreq); ++ b.full = dfixed_const(max_vco_inputfreq); + a.full = dfixed_div(a, b); +- a.full = dfixed_ceil(a); ++ a.full = dfixed_floor(a); + *M = dfixed_trunc(a); + + /* fb_div = (vco * *M) / refclk; */ + fb_div.full = dfixed_const(clk * *P); + fb_div.full = dfixed_mul(fb_div, a); +- a.full = dfixed_const(pll->refclk); ++ a.full = dfixed_const(refclk); + fb_div.full = dfixed_div(fb_div, a); + + /* *N = floor(fb_div); */ +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_crtc.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_crtc.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_crtc.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_crtc.c 2010-11-12 06:18:06.000000000 +0100 +@@ -437,6 +437,7 @@ + .cursor_move = nv50_crtc_cursor_move, + .gamma_set = nv50_crtc_gamma_set, + .set_config = drm_crtc_helper_set_config, ++ .page_flip = nouveau_crtc_page_flip, + .destroy = nv50_crtc_destroy, + }; + +@@ -453,6 +454,7 @@ + + NV_DEBUG_KMS(dev, "index %d\n", nv_crtc->index); + ++ drm_vblank_pre_modeset(dev, nv_crtc->index); + nv50_crtc_blank(nv_crtc, true); + } + +@@ -468,6 +470,7 @@ + NV_DEBUG_KMS(dev, "index %d\n", nv_crtc->index); + + nv50_crtc_blank(nv_crtc, false); ++ drm_vblank_post_modeset(dev, nv_crtc->index); + + ret = RING_SPACE(evo, 2); + if (ret) { +@@ -546,7 +549,7 @@ + } + + nv_crtc->fb.offset = fb->nvbo->bo.offset - dev_priv->vm_vram_base; +- nv_crtc->fb.tile_flags = fb->nvbo->tile_flags; ++ nv_crtc->fb.tile_flags = nouveau_bo_tile_layout(fb->nvbo); + nv_crtc->fb.cpp = drm_fb->bits_per_pixel / 8; + if (!nv_crtc->fb.blanked && dev_priv->chipset != 0x50) { + ret = RING_SPACE(evo, 2); +@@ -578,7 +581,7 @@ + fb->nvbo->tile_mode); + } + if (dev_priv->chipset == 0x50) +- OUT_RING(evo, (fb->nvbo->tile_flags << 8) | format); ++ OUT_RING(evo, (nv_crtc->fb.tile_flags << 8) | format); + else + OUT_RING(evo, format); + +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_display.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_display.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_display.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_display.c 2010-11-12 06:18:06.000000000 +0100 +@@ -33,6 +33,8 @@ + #include "nouveau_ramht.h" + #include "drm_crtc_helper.h" + ++static void nv50_display_isr(struct drm_device *); ++ + static inline int + nv50_sor_nr(struct drm_device *dev) + { +@@ -46,159 +48,6 @@ + return 4; + } + +-static void +-nv50_evo_channel_del(struct nouveau_channel **pchan) +-{ +- struct nouveau_channel *chan = *pchan; +- +- if (!chan) +- return; +- *pchan = NULL; +- +- nouveau_gpuobj_channel_takedown(chan); +- nouveau_bo_unmap(chan->pushbuf_bo); +- nouveau_bo_ref(NULL, &chan->pushbuf_bo); +- +- if (chan->user) +- iounmap(chan->user); +- +- kfree(chan); +-} +- +-static int +-nv50_evo_dmaobj_new(struct nouveau_channel *evo, uint32_t class, uint32_t name, +- uint32_t tile_flags, uint32_t magic_flags, +- uint32_t offset, uint32_t limit) +-{ +- struct drm_nouveau_private *dev_priv = evo->dev->dev_private; +- struct drm_device *dev = evo->dev; +- struct nouveau_gpuobj *obj = NULL; +- int ret; +- +- ret = nouveau_gpuobj_new(dev, evo, 6*4, 32, 0, &obj); +- if (ret) +- return ret; +- obj->engine = NVOBJ_ENGINE_DISPLAY; +- +- nv_wo32(obj, 0, (tile_flags << 22) | (magic_flags << 16) | class); +- nv_wo32(obj, 4, limit); +- nv_wo32(obj, 8, offset); +- nv_wo32(obj, 12, 0x00000000); +- nv_wo32(obj, 16, 0x00000000); +- if (dev_priv->card_type < NV_C0) +- nv_wo32(obj, 20, 0x00010000); +- else +- nv_wo32(obj, 20, 0x00020000); +- dev_priv->engine.instmem.flush(dev); +- +- ret = nouveau_ramht_insert(evo, name, obj); +- nouveau_gpuobj_ref(NULL, &obj); +- if (ret) { +- return ret; +- } +- +- return 0; +-} +- +-static int +-nv50_evo_channel_new(struct drm_device *dev, struct nouveau_channel **pchan) +-{ +- struct drm_nouveau_private *dev_priv = dev->dev_private; +- struct nouveau_gpuobj *ramht = NULL; +- struct nouveau_channel *chan; +- int ret; +- +- chan = kzalloc(sizeof(struct nouveau_channel), GFP_KERNEL); +- if (!chan) +- return -ENOMEM; +- *pchan = chan; +- +- chan->id = -1; +- chan->dev = dev; +- chan->user_get = 4; +- chan->user_put = 0; +- +- ret = nouveau_gpuobj_new(dev, NULL, 32768, 0x1000, +- NVOBJ_FLAG_ZERO_ALLOC, &chan->ramin); +- if (ret) { +- NV_ERROR(dev, "Error allocating EVO channel memory: %d\n", ret); +- nv50_evo_channel_del(pchan); +- return ret; +- } +- +- ret = drm_mm_init(&chan->ramin_heap, 0, 32768); +- if (ret) { +- NV_ERROR(dev, "Error initialising EVO PRAMIN heap: %d\n", ret); +- nv50_evo_channel_del(pchan); +- return ret; +- } +- +- ret = nouveau_gpuobj_new(dev, chan, 4096, 16, 0, &ramht); +- if (ret) { +- NV_ERROR(dev, "Unable to allocate EVO RAMHT: %d\n", ret); +- nv50_evo_channel_del(pchan); +- return ret; +- } +- +- ret = nouveau_ramht_new(dev, ramht, &chan->ramht); +- nouveau_gpuobj_ref(NULL, &ramht); +- if (ret) { +- nv50_evo_channel_del(pchan); +- return ret; +- } +- +- if (dev_priv->chipset != 0x50) { +- ret = nv50_evo_dmaobj_new(chan, 0x3d, NvEvoFB16, 0x70, 0x19, +- 0, 0xffffffff); +- if (ret) { +- nv50_evo_channel_del(pchan); +- return ret; +- } +- +- +- ret = nv50_evo_dmaobj_new(chan, 0x3d, NvEvoFB32, 0x7a, 0x19, +- 0, 0xffffffff); +- if (ret) { +- nv50_evo_channel_del(pchan); +- return ret; +- } +- } +- +- ret = nv50_evo_dmaobj_new(chan, 0x3d, NvEvoVRAM, 0, 0x19, +- 0, dev_priv->vram_size); +- if (ret) { +- nv50_evo_channel_del(pchan); +- return ret; +- } +- +- ret = nouveau_bo_new(dev, NULL, 4096, 0, TTM_PL_FLAG_VRAM, 0, 0, +- false, true, &chan->pushbuf_bo); +- if (ret == 0) +- ret = nouveau_bo_pin(chan->pushbuf_bo, TTM_PL_FLAG_VRAM); +- if (ret) { +- NV_ERROR(dev, "Error creating EVO DMA push buffer: %d\n", ret); +- nv50_evo_channel_del(pchan); +- return ret; +- } +- +- ret = nouveau_bo_map(chan->pushbuf_bo); +- if (ret) { +- NV_ERROR(dev, "Error mapping EVO DMA push buffer: %d\n", ret); +- nv50_evo_channel_del(pchan); +- return ret; +- } +- +- chan->user = ioremap(pci_resource_start(dev->pdev, 0) + +- NV50_PDISPLAY_USER(0), PAGE_SIZE); +- if (!chan->user) { +- NV_ERROR(dev, "Error mapping EVO control regs.\n"); +- nv50_evo_channel_del(pchan); +- return -ENOMEM; +- } +- +- return 0; +-} +- + int + nv50_display_early_init(struct drm_device *dev) + { +@@ -214,17 +63,16 @@ + nv50_display_init(struct drm_device *dev) + { + struct drm_nouveau_private *dev_priv = dev->dev_private; +- struct nouveau_timer_engine *ptimer = &dev_priv->engine.timer; + struct nouveau_gpio_engine *pgpio = &dev_priv->engine.gpio; +- struct nouveau_channel *evo = dev_priv->evo; + struct drm_connector *connector; +- uint32_t val, ram_amount; +- uint64_t start; ++ struct nouveau_channel *evo; + int ret, i; ++ u32 val; + + NV_DEBUG_KMS(dev, "\n"); + + nv_wr32(dev, 0x00610184, nv_rd32(dev, 0x00614004)); ++ + /* + * I think the 0x006101XX range is some kind of main control area + * that enables things. +@@ -240,16 +88,19 @@ + val = nv_rd32(dev, 0x0061610c + (i * 0x800)); + nv_wr32(dev, 0x0061019c + (i * 0x10), val); + } ++ + /* DAC */ + for (i = 0; i < 3; i++) { + val = nv_rd32(dev, 0x0061a000 + (i * 0x800)); + nv_wr32(dev, 0x006101d0 + (i * 0x04), val); + } ++ + /* SOR */ + for (i = 0; i < nv50_sor_nr(dev); i++) { + val = nv_rd32(dev, 0x0061c000 + (i * 0x800)); + nv_wr32(dev, 0x006101e0 + (i * 0x04), val); + } ++ + /* EXT */ + for (i = 0; i < 3; i++) { + val = nv_rd32(dev, 0x0061e000 + (i * 0x800)); +@@ -262,17 +113,6 @@ + nv_wr32(dev, NV50_PDISPLAY_DAC_CLK_CTRL1(i), 0x00000001); + } + +- /* This used to be in crtc unblank, but seems out of place there. */ +- nv_wr32(dev, NV50_PDISPLAY_UNK_380, 0); +- /* RAM is clamped to 256 MiB. */ +- ram_amount = dev_priv->vram_size; +- NV_DEBUG_KMS(dev, "ram_amount %d\n", ram_amount); +- if (ram_amount > 256*1024*1024) +- ram_amount = 256*1024*1024; +- nv_wr32(dev, NV50_PDISPLAY_RAM_AMOUNT, ram_amount - 1); +- nv_wr32(dev, NV50_PDISPLAY_UNK_388, 0x150000); +- nv_wr32(dev, NV50_PDISPLAY_UNK_38C, 0); +- + /* The precise purpose is unknown, i suspect it has something to do + * with text mode. + */ +@@ -287,37 +127,6 @@ + } + } + +- /* taken from nv bug #12637, attempts to un-wedge the hw if it's +- * stuck in some unspecified state +- */ +- start = ptimer->read(dev); +- nv_wr32(dev, NV50_PDISPLAY_CHANNEL_STAT(0), 0x2b00); +- while ((val = nv_rd32(dev, NV50_PDISPLAY_CHANNEL_STAT(0))) & 0x1e0000) { +- if ((val & 0x9f0000) == 0x20000) +- nv_wr32(dev, NV50_PDISPLAY_CHANNEL_STAT(0), +- val | 0x800000); +- +- if ((val & 0x3f0000) == 0x30000) +- nv_wr32(dev, NV50_PDISPLAY_CHANNEL_STAT(0), +- val | 0x200000); +- +- if (ptimer->read(dev) - start > 1000000000ULL) { +- NV_ERROR(dev, "timeout: (0x610200 & 0x1e0000) != 0\n"); +- NV_ERROR(dev, "0x610200 = 0x%08x\n", val); +- return -EBUSY; +- } +- } +- +- nv_wr32(dev, NV50_PDISPLAY_CTRL_STATE, NV50_PDISPLAY_CTRL_STATE_ENABLE); +- nv_wr32(dev, NV50_PDISPLAY_CHANNEL_STAT(0), 0x1000b03); +- if (!nv_wait(dev, NV50_PDISPLAY_CHANNEL_STAT(0), +- 0x40000000, 0x40000000)) { +- NV_ERROR(dev, "timeout: (0x610200 & 0x40000000) == 0x40000000\n"); +- NV_ERROR(dev, "0x610200 = 0x%08x\n", +- nv_rd32(dev, NV50_PDISPLAY_CHANNEL_STAT(0))); +- return -EBUSY; +- } +- + for (i = 0; i < 2; i++) { + nv_wr32(dev, NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(i), 0x2000); + if (!nv_wait(dev, NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(i), +@@ -341,39 +150,31 @@ + } + } + +- nv_wr32(dev, NV50_PDISPLAY_OBJECTS, (evo->ramin->vinst >> 8) | 9); ++ nv_wr32(dev, NV50_PDISPLAY_PIO_CTRL, 0x00000000); ++ nv_mask(dev, NV50_PDISPLAY_INTR_0, 0x00000000, 0x00000000); ++ nv_wr32(dev, NV50_PDISPLAY_INTR_EN_0, 0x00000000); ++ nv_mask(dev, NV50_PDISPLAY_INTR_1, 0x00000000, 0x00000000); ++ nv_wr32(dev, NV50_PDISPLAY_INTR_EN_1, ++ NV50_PDISPLAY_INTR_EN_1_CLK_UNK10 | ++ NV50_PDISPLAY_INTR_EN_1_CLK_UNK20 | ++ NV50_PDISPLAY_INTR_EN_1_CLK_UNK40); + +- /* initialise fifo */ +- nv_wr32(dev, NV50_PDISPLAY_CHANNEL_DMA_CB(0), +- ((evo->pushbuf_bo->bo.mem.start << PAGE_SHIFT) >> 8) | +- NV50_PDISPLAY_CHANNEL_DMA_CB_LOCATION_VRAM | +- NV50_PDISPLAY_CHANNEL_DMA_CB_VALID); +- nv_wr32(dev, NV50_PDISPLAY_CHANNEL_UNK2(0), 0x00010000); +- nv_wr32(dev, NV50_PDISPLAY_CHANNEL_UNK3(0), 0x00000002); +- if (!nv_wait(dev, 0x610200, 0x80000000, 0x00000000)) { +- NV_ERROR(dev, "timeout: (0x610200 & 0x80000000) == 0\n"); +- NV_ERROR(dev, "0x610200 = 0x%08x\n", nv_rd32(dev, 0x610200)); +- return -EBUSY; +- } +- nv_wr32(dev, NV50_PDISPLAY_CHANNEL_STAT(0), +- (nv_rd32(dev, NV50_PDISPLAY_CHANNEL_STAT(0)) & ~0x00000003) | +- NV50_PDISPLAY_CHANNEL_STAT_DMA_ENABLED); +- nv_wr32(dev, NV50_PDISPLAY_USER_PUT(0), 0); +- nv_wr32(dev, NV50_PDISPLAY_CHANNEL_STAT(0), 0x01000003 | +- NV50_PDISPLAY_CHANNEL_STAT_DMA_ENABLED); +- nv_wr32(dev, 0x610300, nv_rd32(dev, 0x610300) & ~1); +- +- evo->dma.max = (4096/4) - 2; +- evo->dma.put = 0; +- evo->dma.cur = evo->dma.put; +- evo->dma.free = evo->dma.max - evo->dma.cur; ++ /* enable hotplug interrupts */ ++ list_for_each_entry(connector, &dev->mode_config.connector_list, head) { ++ struct nouveau_connector *conn = nouveau_connector(connector); ++ ++ if (conn->dcb->gpio_tag == 0xff) ++ continue; ++ ++ pgpio->irq_enable(dev, conn->dcb->gpio_tag, true); ++ } + +- ret = RING_SPACE(evo, NOUVEAU_DMA_SKIPS); ++ ret = nv50_evo_init(dev); + if (ret) + return ret; ++ evo = dev_priv->evo; + +- for (i = 0; i < NOUVEAU_DMA_SKIPS; i++) +- OUT_RING(evo, 0); ++ nv_wr32(dev, NV50_PDISPLAY_OBJECTS, (evo->ramin->vinst >> 8) | 9); + + ret = RING_SPACE(evo, 11); + if (ret) +@@ -393,21 +194,6 @@ + if (!nv_wait(dev, 0x640004, 0xffffffff, evo->dma.put << 2)) + NV_ERROR(dev, "evo pushbuf stalled\n"); + +- /* enable clock change interrupts. */ +- nv_wr32(dev, 0x610028, 0x00010001); +- nv_wr32(dev, NV50_PDISPLAY_INTR_EN, (NV50_PDISPLAY_INTR_EN_CLK_UNK10 | +- NV50_PDISPLAY_INTR_EN_CLK_UNK20 | +- NV50_PDISPLAY_INTR_EN_CLK_UNK40)); +- +- /* enable hotplug interrupts */ +- list_for_each_entry(connector, &dev->mode_config.connector_list, head) { +- struct nouveau_connector *conn = nouveau_connector(connector); +- +- if (conn->dcb->gpio_tag == 0xff) +- continue; +- +- pgpio->irq_enable(dev, conn->dcb->gpio_tag, true); +- } + + return 0; + } +@@ -452,13 +238,7 @@ + } + } + +- nv_wr32(dev, NV50_PDISPLAY_CHANNEL_STAT(0), 0); +- nv_wr32(dev, NV50_PDISPLAY_CTRL_STATE, 0); +- if (!nv_wait(dev, NV50_PDISPLAY_CHANNEL_STAT(0), 0x1e0000, 0)) { +- NV_ERROR(dev, "timeout: (0x610200 & 0x1e0000) == 0\n"); +- NV_ERROR(dev, "0x610200 = 0x%08x\n", +- nv_rd32(dev, NV50_PDISPLAY_CHANNEL_STAT(0))); +- } ++ nv50_evo_fini(dev); + + for (i = 0; i < 3; i++) { + if (!nv_wait(dev, NV50_PDISPLAY_SOR_DPMS_STATE(i), +@@ -470,7 +250,7 @@ + } + + /* disable interrupts. */ +- nv_wr32(dev, NV50_PDISPLAY_INTR_EN, 0x00000000); ++ nv_wr32(dev, NV50_PDISPLAY_INTR_EN_1, 0x00000000); + + /* disable hotplug interrupts */ + nv_wr32(dev, 0xe054, 0xffffffff); +@@ -508,13 +288,6 @@ + + dev->mode_config.fb_base = dev_priv->fb_phys; + +- /* Create EVO channel */ +- ret = nv50_evo_channel_new(dev, &dev_priv->evo); +- if (ret) { +- NV_ERROR(dev, "Error creating EVO channel: %d\n", ret); +- return ret; +- } +- + /* Create CRTC objects */ + for (i = 0; i < 2; i++) + nv50_crtc_create(dev, i); +@@ -557,6 +330,9 @@ + } + } + ++ INIT_WORK(&dev_priv->irq_work, nv50_display_irq_handler_bh); ++ nouveau_irq_register(dev, 26, nv50_display_isr); ++ + ret = nv50_display_init(dev); + if (ret) { + nv50_display_destroy(dev); +@@ -569,14 +345,12 @@ + void + nv50_display_destroy(struct drm_device *dev) + { +- struct drm_nouveau_private *dev_priv = dev->dev_private; +- + NV_DEBUG_KMS(dev, "\n"); + + drm_mode_config_cleanup(dev); + + nv50_display_disable(dev); +- nv50_evo_channel_del(&dev_priv->evo); ++ nouveau_irq_unregister(dev, 26); + } + + static u16 +@@ -660,32 +434,32 @@ + nv50_display_vblank_crtc_handler(struct drm_device *dev, int crtc) + { + struct drm_nouveau_private *dev_priv = dev->dev_private; +- struct nouveau_channel *chan; +- struct list_head *entry, *tmp; ++ struct nouveau_channel *chan, *tmp; + +- list_for_each_safe(entry, tmp, &dev_priv->vbl_waiting) { +- chan = list_entry(entry, struct nouveau_channel, nvsw.vbl_wait); ++ list_for_each_entry_safe(chan, tmp, &dev_priv->vbl_waiting, ++ nvsw.vbl_wait) { ++ if (chan->nvsw.vblsem_head != crtc) ++ continue; + + nouveau_bo_wr32(chan->notifier_bo, chan->nvsw.vblsem_offset, + chan->nvsw.vblsem_rval); + list_del(&chan->nvsw.vbl_wait); ++ drm_vblank_put(dev, crtc); + } ++ ++ drm_handle_vblank(dev, crtc); + } + + static void + nv50_display_vblank_handler(struct drm_device *dev, uint32_t intr) + { +- intr &= NV50_PDISPLAY_INTR_1_VBLANK_CRTC; +- + if (intr & NV50_PDISPLAY_INTR_1_VBLANK_CRTC_0) + nv50_display_vblank_crtc_handler(dev, 0); + + if (intr & NV50_PDISPLAY_INTR_1_VBLANK_CRTC_1) + nv50_display_vblank_crtc_handler(dev, 1); + +- nv_wr32(dev, NV50_PDISPLAY_INTR_EN, nv_rd32(dev, +- NV50_PDISPLAY_INTR_EN) & ~intr); +- nv_wr32(dev, NV50_PDISPLAY_INTR_1, intr); ++ nv_wr32(dev, NV50_PDISPLAY_INTR_1, NV50_PDISPLAY_INTR_1_VBLANK_CRTC); + } + + static void +@@ -1011,91 +785,31 @@ + static void + nv50_display_error_handler(struct drm_device *dev) + { +- uint32_t addr, data; +- +- nv_wr32(dev, NV50_PDISPLAY_INTR_0, 0x00010000); +- addr = nv_rd32(dev, NV50_PDISPLAY_TRAPPED_ADDR); +- data = nv_rd32(dev, NV50_PDISPLAY_TRAPPED_DATA); +- +- NV_ERROR(dev, "EvoCh %d Mthd 0x%04x Data 0x%08x (0x%04x 0x%02x)\n", +- 0, addr & 0xffc, data, addr >> 16, (addr >> 12) & 0xf); +- +- nv_wr32(dev, NV50_PDISPLAY_TRAPPED_ADDR, 0x90000000); +-} +- +-void +-nv50_display_irq_hotplug_bh(struct work_struct *work) +-{ +- struct drm_nouveau_private *dev_priv = +- container_of(work, struct drm_nouveau_private, hpd_work); +- struct drm_device *dev = dev_priv->dev; +- struct drm_connector *connector; +- const uint32_t gpio_reg[4] = { 0xe104, 0xe108, 0xe280, 0xe284 }; +- uint32_t unplug_mask, plug_mask, change_mask; +- uint32_t hpd0, hpd1 = 0; +- +- hpd0 = nv_rd32(dev, 0xe054) & nv_rd32(dev, 0xe050); +- if (dev_priv->chipset >= 0x90) +- hpd1 = nv_rd32(dev, 0xe074) & nv_rd32(dev, 0xe070); +- +- plug_mask = (hpd0 & 0x0000ffff) | (hpd1 << 16); +- unplug_mask = (hpd0 >> 16) | (hpd1 & 0xffff0000); +- change_mask = plug_mask | unplug_mask; +- +- list_for_each_entry(connector, &dev->mode_config.connector_list, head) { +- struct drm_encoder_helper_funcs *helper; +- struct nouveau_connector *nv_connector = +- nouveau_connector(connector); +- struct nouveau_encoder *nv_encoder; +- struct dcb_gpio_entry *gpio; +- uint32_t reg; +- bool plugged; ++ u32 channels = (nv_rd32(dev, NV50_PDISPLAY_INTR_0) & 0x001f0000) >> 16; ++ u32 addr, data; ++ int chid; ++ ++ for (chid = 0; chid < 5; chid++) { ++ if (!(channels & (1 << chid))) ++ continue; ++ ++ nv_wr32(dev, NV50_PDISPLAY_INTR_0, 0x00010000 << chid); ++ addr = nv_rd32(dev, NV50_PDISPLAY_TRAPPED_ADDR(chid)); ++ data = nv_rd32(dev, NV50_PDISPLAY_TRAPPED_DATA(chid)); ++ NV_ERROR(dev, "EvoCh %d Mthd 0x%04x Data 0x%08x " ++ "(0x%04x 0x%02x)\n", chid, ++ addr & 0xffc, data, addr >> 16, (addr >> 12) & 0xf); + +- if (!nv_connector->dcb) +- continue; +- +- gpio = nouveau_bios_gpio_entry(dev, nv_connector->dcb->gpio_tag); +- if (!gpio || !(change_mask & (1 << gpio->line))) +- continue; +- +- reg = nv_rd32(dev, gpio_reg[gpio->line >> 3]); +- plugged = !!(reg & (4 << ((gpio->line & 7) << 2))); +- NV_INFO(dev, "%splugged %s\n", plugged ? "" : "un", +- drm_get_connector_name(connector)) ; +- +- if (!connector->encoder || !connector->encoder->crtc || +- !connector->encoder->crtc->enabled) +- continue; +- nv_encoder = nouveau_encoder(connector->encoder); +- helper = connector->encoder->helper_private; +- +- if (nv_encoder->dcb->type != OUTPUT_DP) +- continue; +- +- if (plugged) +- helper->dpms(connector->encoder, DRM_MODE_DPMS_ON); +- else +- helper->dpms(connector->encoder, DRM_MODE_DPMS_OFF); ++ nv_wr32(dev, NV50_PDISPLAY_TRAPPED_ADDR(chid), 0x90000000); + } +- +- nv_wr32(dev, 0xe054, nv_rd32(dev, 0xe054)); +- if (dev_priv->chipset >= 0x90) +- nv_wr32(dev, 0xe074, nv_rd32(dev, 0xe074)); +- +- drm_helper_hpd_irq_event(dev); + } + +-void +-nv50_display_irq_handler(struct drm_device *dev) ++static void ++nv50_display_isr(struct drm_device *dev) + { + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t delayed = 0; + +- if (nv_rd32(dev, NV50_PMC_INTR_0) & NV50_PMC_INTR_0_HOTPLUG) { +- if (!work_pending(&dev_priv->hpd_work)) +- queue_work(dev_priv->wq, &dev_priv->hpd_work); +- } +- + while (nv_rd32(dev, NV50_PMC_INTR_0) & NV50_PMC_INTR_0_DISPLAY) { + uint32_t intr0 = nv_rd32(dev, NV50_PDISPLAY_INTR_0); + uint32_t intr1 = nv_rd32(dev, NV50_PDISPLAY_INTR_1); +@@ -1106,9 +820,9 @@ + if (!intr0 && !(intr1 & ~delayed)) + break; + +- if (intr0 & 0x00010000) { ++ if (intr0 & 0x001f0000) { + nv50_display_error_handler(dev); +- intr0 &= ~0x00010000; ++ intr0 &= ~0x001f0000; + } + + if (intr1 & NV50_PDISPLAY_INTR_1_VBLANK_CRTC) { +@@ -1139,4 +853,3 @@ + } + } + } +- +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_display.h linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_display.h +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_display.h 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_display.h 2010-11-12 06:18:06.000000000 +0100 +@@ -35,9 +35,7 @@ + #include "nouveau_crtc.h" + #include "nv50_evo.h" + +-void nv50_display_irq_handler(struct drm_device *dev); + void nv50_display_irq_handler_bh(struct work_struct *work); +-void nv50_display_irq_hotplug_bh(struct work_struct *work); + int nv50_display_early_init(struct drm_device *dev); + void nv50_display_late_takedown(struct drm_device *dev); + int nv50_display_create(struct drm_device *dev); +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_evo.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_evo.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_evo.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_evo.c 2010-11-12 06:18:06.000000000 +0100 +@@ -0,0 +1,318 @@ ++/* ++ * Copyright 2010 Red Hat Inc. ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a ++ * copy of this software and associated documentation files (the "Software"), ++ * to deal in the Software without restriction, including without limitation ++ * the rights to use, copy, modify, merge, publish, distribute, sublicense, ++ * and/or sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included in ++ * all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR ++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR ++ * OTHER DEALINGS IN THE SOFTWARE. ++ * ++ * Authors: Ben Skeggs ++ */ ++ ++#include "drmP.h" ++ ++#include "nouveau_drv.h" ++#include "nouveau_dma.h" ++#include "nouveau_ramht.h" ++ ++static void ++nv50_evo_channel_del(struct nouveau_channel **pevo) ++{ ++ struct drm_nouveau_private *dev_priv; ++ struct nouveau_channel *evo = *pevo; ++ ++ if (!evo) ++ return; ++ *pevo = NULL; ++ ++ dev_priv = evo->dev->dev_private; ++ dev_priv->evo_alloc &= ~(1 << evo->id); ++ ++ nouveau_gpuobj_channel_takedown(evo); ++ nouveau_bo_unmap(evo->pushbuf_bo); ++ nouveau_bo_ref(NULL, &evo->pushbuf_bo); ++ ++ if (evo->user) ++ iounmap(evo->user); ++ ++ kfree(evo); ++} ++ ++int ++nv50_evo_dmaobj_new(struct nouveau_channel *evo, u32 class, u32 name, ++ u32 tile_flags, u32 magic_flags, u32 offset, u32 limit) ++{ ++ struct drm_nouveau_private *dev_priv = evo->dev->dev_private; ++ struct drm_device *dev = evo->dev; ++ struct nouveau_gpuobj *obj = NULL; ++ int ret; ++ ++ ret = nouveau_gpuobj_new(dev, dev_priv->evo, 6*4, 32, 0, &obj); ++ if (ret) ++ return ret; ++ obj->engine = NVOBJ_ENGINE_DISPLAY; ++ ++ nv_wo32(obj, 0, (tile_flags << 22) | (magic_flags << 16) | class); ++ nv_wo32(obj, 4, limit); ++ nv_wo32(obj, 8, offset); ++ nv_wo32(obj, 12, 0x00000000); ++ nv_wo32(obj, 16, 0x00000000); ++ if (dev_priv->card_type < NV_C0) ++ nv_wo32(obj, 20, 0x00010000); ++ else ++ nv_wo32(obj, 20, 0x00020000); ++ dev_priv->engine.instmem.flush(dev); ++ ++ ret = nouveau_ramht_insert(evo, name, obj); ++ nouveau_gpuobj_ref(NULL, &obj); ++ if (ret) { ++ return ret; ++ } ++ ++ return 0; ++} ++ ++static int ++nv50_evo_channel_new(struct drm_device *dev, struct nouveau_channel **pevo) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_channel *evo; ++ int ret; ++ ++ evo = kzalloc(sizeof(struct nouveau_channel), GFP_KERNEL); ++ if (!evo) ++ return -ENOMEM; ++ *pevo = evo; ++ ++ for (evo->id = 0; evo->id < 5; evo->id++) { ++ if (dev_priv->evo_alloc & (1 << evo->id)) ++ continue; ++ ++ dev_priv->evo_alloc |= (1 << evo->id); ++ break; ++ } ++ ++ if (evo->id == 5) { ++ kfree(evo); ++ return -ENODEV; ++ } ++ ++ evo->dev = dev; ++ evo->user_get = 4; ++ evo->user_put = 0; ++ ++ ret = nouveau_bo_new(dev, NULL, 4096, 0, TTM_PL_FLAG_VRAM, 0, 0, ++ false, true, &evo->pushbuf_bo); ++ if (ret == 0) ++ ret = nouveau_bo_pin(evo->pushbuf_bo, TTM_PL_FLAG_VRAM); ++ if (ret) { ++ NV_ERROR(dev, "Error creating EVO DMA push buffer: %d\n", ret); ++ nv50_evo_channel_del(pevo); ++ return ret; ++ } ++ ++ ret = nouveau_bo_map(evo->pushbuf_bo); ++ if (ret) { ++ NV_ERROR(dev, "Error mapping EVO DMA push buffer: %d\n", ret); ++ nv50_evo_channel_del(pevo); ++ return ret; ++ } ++ ++ evo->user = ioremap(pci_resource_start(dev->pdev, 0) + ++ NV50_PDISPLAY_USER(evo->id), PAGE_SIZE); ++ if (!evo->user) { ++ NV_ERROR(dev, "Error mapping EVO control regs.\n"); ++ nv50_evo_channel_del(pevo); ++ return -ENOMEM; ++ } ++ ++ /* bind primary evo channel's ramht to the channel */ ++ if (dev_priv->evo && evo != dev_priv->evo) ++ nouveau_ramht_ref(dev_priv->evo->ramht, &evo->ramht, NULL); ++ ++ return 0; ++} ++ ++static int ++nv50_evo_channel_init(struct nouveau_channel *evo) ++{ ++ struct drm_device *dev = evo->dev; ++ int id = evo->id, ret, i; ++ u64 pushbuf = evo->pushbuf_bo->bo.mem.start << PAGE_SHIFT; ++ u32 tmp; ++ ++ tmp = nv_rd32(dev, NV50_PDISPLAY_EVO_CTRL(id)); ++ if ((tmp & 0x009f0000) == 0x00020000) ++ nv_wr32(dev, NV50_PDISPLAY_EVO_CTRL(id), tmp | 0x00800000); ++ ++ tmp = nv_rd32(dev, NV50_PDISPLAY_EVO_CTRL(id)); ++ if ((tmp & 0x003f0000) == 0x00030000) ++ nv_wr32(dev, NV50_PDISPLAY_EVO_CTRL(id), tmp | 0x00600000); ++ ++ /* initialise fifo */ ++ nv_wr32(dev, NV50_PDISPLAY_EVO_DMA_CB(id), pushbuf >> 8 | ++ NV50_PDISPLAY_EVO_DMA_CB_LOCATION_VRAM | ++ NV50_PDISPLAY_EVO_DMA_CB_VALID); ++ nv_wr32(dev, NV50_PDISPLAY_EVO_UNK2(id), 0x00010000); ++ nv_wr32(dev, NV50_PDISPLAY_EVO_HASH_TAG(id), id); ++ nv_mask(dev, NV50_PDISPLAY_EVO_CTRL(id), NV50_PDISPLAY_EVO_CTRL_DMA, ++ NV50_PDISPLAY_EVO_CTRL_DMA_ENABLED); ++ ++ nv_wr32(dev, NV50_PDISPLAY_USER_PUT(id), 0x00000000); ++ nv_wr32(dev, NV50_PDISPLAY_EVO_CTRL(id), 0x01000003 | ++ NV50_PDISPLAY_EVO_CTRL_DMA_ENABLED); ++ if (!nv_wait(dev, NV50_PDISPLAY_EVO_CTRL(id), 0x80000000, 0x00000000)) { ++ NV_ERROR(dev, "EvoCh %d init timeout: 0x%08x\n", id, ++ nv_rd32(dev, NV50_PDISPLAY_EVO_CTRL(id))); ++ return -EBUSY; ++ } ++ ++ /* enable error reporting on the channel */ ++ nv_mask(dev, 0x610028, 0x00000000, 0x00010001 << id); ++ ++ evo->dma.max = (4096/4) - 2; ++ evo->dma.put = 0; ++ evo->dma.cur = evo->dma.put; ++ evo->dma.free = evo->dma.max - evo->dma.cur; ++ ++ ret = RING_SPACE(evo, NOUVEAU_DMA_SKIPS); ++ if (ret) ++ return ret; ++ ++ for (i = 0; i < NOUVEAU_DMA_SKIPS; i++) ++ OUT_RING(evo, 0); ++ ++ return 0; ++} ++ ++static void ++nv50_evo_channel_fini(struct nouveau_channel *evo) ++{ ++ struct drm_device *dev = evo->dev; ++ int id = evo->id; ++ ++ nv_mask(dev, 0x610028, 0x00010001 << id, 0x00000000); ++ nv_mask(dev, NV50_PDISPLAY_EVO_CTRL(id), 0x00001010, 0x00001000); ++ nv_wr32(dev, NV50_PDISPLAY_INTR_0, (1 << id)); ++ nv_mask(dev, NV50_PDISPLAY_EVO_CTRL(id), 0x00000003, 0x00000000); ++ if (!nv_wait(dev, NV50_PDISPLAY_EVO_CTRL(id), 0x001e0000, 0x00000000)) { ++ NV_ERROR(dev, "EvoCh %d takedown timeout: 0x%08x\n", id, ++ nv_rd32(dev, NV50_PDISPLAY_EVO_CTRL(id))); ++ } ++} ++ ++static int ++nv50_evo_create(struct drm_device *dev) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_gpuobj *ramht = NULL; ++ struct nouveau_channel *evo; ++ int ret; ++ ++ /* create primary evo channel, the one we use for modesetting ++ * purporses ++ */ ++ ret = nv50_evo_channel_new(dev, &dev_priv->evo); ++ if (ret) ++ return ret; ++ evo = dev_priv->evo; ++ ++ /* setup object management on it, any other evo channel will ++ * use this also as there's no per-channel support on the ++ * hardware ++ */ ++ ret = nouveau_gpuobj_new(dev, NULL, 32768, 65536, ++ NVOBJ_FLAG_ZERO_ALLOC, &evo->ramin); ++ if (ret) { ++ NV_ERROR(dev, "Error allocating EVO channel memory: %d\n", ret); ++ nv50_evo_channel_del(&dev_priv->evo); ++ return ret; ++ } ++ ++ ret = drm_mm_init(&evo->ramin_heap, 0, 32768); ++ if (ret) { ++ NV_ERROR(dev, "Error initialising EVO PRAMIN heap: %d\n", ret); ++ nv50_evo_channel_del(&dev_priv->evo); ++ return ret; ++ } ++ ++ ret = nouveau_gpuobj_new(dev, evo, 4096, 16, 0, &ramht); ++ if (ret) { ++ NV_ERROR(dev, "Unable to allocate EVO RAMHT: %d\n", ret); ++ nv50_evo_channel_del(&dev_priv->evo); ++ return ret; ++ } ++ ++ ret = nouveau_ramht_new(dev, ramht, &evo->ramht); ++ nouveau_gpuobj_ref(NULL, &ramht); ++ if (ret) { ++ nv50_evo_channel_del(&dev_priv->evo); ++ return ret; ++ } ++ ++ /* create some default objects for the scanout memtypes we support */ ++ if (dev_priv->chipset != 0x50) { ++ ret = nv50_evo_dmaobj_new(evo, 0x3d, NvEvoFB16, 0x70, 0x19, ++ 0, 0xffffffff); ++ if (ret) { ++ nv50_evo_channel_del(&dev_priv->evo); ++ return ret; ++ } ++ ++ ++ ret = nv50_evo_dmaobj_new(evo, 0x3d, NvEvoFB32, 0x7a, 0x19, ++ 0, 0xffffffff); ++ if (ret) { ++ nv50_evo_channel_del(&dev_priv->evo); ++ return ret; ++ } ++ } ++ ++ ret = nv50_evo_dmaobj_new(evo, 0x3d, NvEvoVRAM, 0, 0x19, ++ 0, dev_priv->vram_size); ++ if (ret) { ++ nv50_evo_channel_del(&dev_priv->evo); ++ return ret; ++ } ++ ++ return 0; ++} ++ ++int ++nv50_evo_init(struct drm_device *dev) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ int ret; ++ ++ if (!dev_priv->evo) { ++ ret = nv50_evo_create(dev); ++ if (ret) ++ return ret; ++ } ++ ++ return nv50_evo_channel_init(dev_priv->evo); ++} ++ ++void ++nv50_evo_fini(struct drm_device *dev) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ ++ if (dev_priv->evo) { ++ nv50_evo_channel_fini(dev_priv->evo); ++ nv50_evo_channel_del(&dev_priv->evo); ++ } ++} +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_evo.h linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_evo.h +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_evo.h 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_evo.h 2010-11-12 06:18:06.000000000 +0100 +@@ -24,6 +24,15 @@ + * + */ + ++#ifndef __NV50_EVO_H__ ++#define __NV50_EVO_H__ ++ ++int nv50_evo_init(struct drm_device *dev); ++void nv50_evo_fini(struct drm_device *dev); ++int nv50_evo_dmaobj_new(struct nouveau_channel *, u32 class, u32 name, ++ u32 tile_flags, u32 magic_flags, ++ u32 offset, u32 limit); ++ + #define NV50_EVO_UPDATE 0x00000080 + #define NV50_EVO_UNK84 0x00000084 + #define NV50_EVO_UNK84_NOTIFY 0x40000000 +@@ -111,3 +120,4 @@ + #define NV50_EVO_CRTC_SCALE_RES1 0x000008d8 + #define NV50_EVO_CRTC_SCALE_RES2 0x000008dc + ++#endif +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_fb.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_fb.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_fb.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_fb.c 2010-11-12 06:18:06.000000000 +0100 +@@ -42,6 +42,7 @@ + nv50_fb_vm_trap(struct drm_device *dev, int display, const char *name) + { + struct drm_nouveau_private *dev_priv = dev->dev_private; ++ unsigned long flags; + u32 trap[6], idx, chinst; + int i, ch; + +@@ -60,8 +61,10 @@ + return; + + chinst = (trap[2] << 16) | trap[1]; ++ ++ spin_lock_irqsave(&dev_priv->channels.lock, flags); + for (ch = 0; ch < dev_priv->engine.fifo.channels; ch++) { +- struct nouveau_channel *chan = dev_priv->fifos[ch]; ++ struct nouveau_channel *chan = dev_priv->channels.ptr[ch]; + + if (!chan || !chan->ramin) + continue; +@@ -69,6 +72,7 @@ + if (chinst == chan->ramin->vinst >> 12) + break; + } ++ spin_unlock_irqrestore(&dev_priv->channels.lock, flags); + + NV_INFO(dev, "%s - VM: Trapped %s at %02x%04x%04x status %08x " + "channel %d (0x%08x)\n", +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_fbcon.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_fbcon.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_fbcon.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_fbcon.c 2010-11-12 06:18:06.000000000 +0100 +@@ -4,26 +4,18 @@ + #include "nouveau_ramht.h" + #include "nouveau_fbcon.h" + +-void ++int + nv50_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect) + { + struct nouveau_fbdev *nfbdev = info->par; + struct drm_device *dev = nfbdev->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *chan = dev_priv->channel; ++ int ret; + +- if (info->state != FBINFO_STATE_RUNNING) +- return; +- +- if (!(info->flags & FBINFO_HWACCEL_DISABLED) && +- RING_SPACE(chan, rect->rop == ROP_COPY ? 7 : 11)) { +- nouveau_fbcon_gpu_lockup(info); +- } +- +- if (info->flags & FBINFO_HWACCEL_DISABLED) { +- cfb_fillrect(info, rect); +- return; +- } ++ ret = RING_SPACE(chan, rect->rop == ROP_COPY ? 7 : 11); ++ if (ret) ++ return ret; + + if (rect->rop != ROP_COPY) { + BEGIN_RING(chan, NvSub2D, 0x02ac, 1); +@@ -45,27 +37,21 @@ + OUT_RING(chan, 3); + } + FIRE_RING(chan); ++ return 0; + } + +-void ++int + nv50_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region) + { + struct nouveau_fbdev *nfbdev = info->par; + struct drm_device *dev = nfbdev->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *chan = dev_priv->channel; ++ int ret; + +- if (info->state != FBINFO_STATE_RUNNING) +- return; +- +- if (!(info->flags & FBINFO_HWACCEL_DISABLED) && RING_SPACE(chan, 12)) { +- nouveau_fbcon_gpu_lockup(info); +- } +- +- if (info->flags & FBINFO_HWACCEL_DISABLED) { +- cfb_copyarea(info, region); +- return; +- } ++ ret = RING_SPACE(chan, 12); ++ if (ret) ++ return ret; + + BEGIN_RING(chan, NvSub2D, 0x0110, 1); + OUT_RING(chan, 0); +@@ -80,9 +66,10 @@ + OUT_RING(chan, 0); + OUT_RING(chan, region->sy); + FIRE_RING(chan); ++ return 0; + } + +-void ++int + nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) + { + struct nouveau_fbdev *nfbdev = info->par; +@@ -92,23 +79,14 @@ + uint32_t width, dwords, *data = (uint32_t *)image->data; + uint32_t mask = ~(~0 >> (32 - info->var.bits_per_pixel)); + uint32_t *palette = info->pseudo_palette; ++ int ret; + +- if (info->state != FBINFO_STATE_RUNNING) +- return; +- +- if (image->depth != 1) { +- cfb_imageblit(info, image); +- return; +- } +- +- if (!(info->flags & FBINFO_HWACCEL_DISABLED) && RING_SPACE(chan, 11)) { +- nouveau_fbcon_gpu_lockup(info); +- } ++ if (image->depth != 1) ++ return -ENODEV; + +- if (info->flags & FBINFO_HWACCEL_DISABLED) { +- cfb_imageblit(info, image); +- return; +- } ++ ret = RING_SPACE(chan, 11); ++ if (ret) ++ return ret; + + width = ALIGN(image->width, 32); + dwords = (width * image->height) >> 5; +@@ -134,11 +112,9 @@ + while (dwords) { + int push = dwords > 2047 ? 2047 : dwords; + +- if (RING_SPACE(chan, push + 1)) { +- nouveau_fbcon_gpu_lockup(info); +- cfb_imageblit(info, image); +- return; +- } ++ ret = RING_SPACE(chan, push + 1); ++ if (ret) ++ return ret; + + dwords -= push; + +@@ -148,6 +124,7 @@ + } + + FIRE_RING(chan); ++ return 0; + } + + int +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_fifo.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_fifo.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_fifo.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_fifo.c 2010-11-12 06:18:06.000000000 +0100 +@@ -44,7 +44,8 @@ + + /* We never schedule channel 0 or 127 */ + for (i = 1, nr = 0; i < 127; i++) { +- if (dev_priv->fifos[i] && dev_priv->fifos[i]->ramfc) { ++ if (dev_priv->channels.ptr[i] && ++ dev_priv->channels.ptr[i]->ramfc) { + nv_wo32(cur, (nr * 4), i); + nr++; + } +@@ -60,7 +61,7 @@ + nv50_fifo_channel_enable(struct drm_device *dev, int channel) + { + struct drm_nouveau_private *dev_priv = dev->dev_private; +- struct nouveau_channel *chan = dev_priv->fifos[channel]; ++ struct nouveau_channel *chan = dev_priv->channels.ptr[channel]; + uint32_t inst; + + NV_DEBUG(dev, "ch%d\n", channel); +@@ -105,6 +106,7 @@ + { + NV_DEBUG(dev, "\n"); + ++ nouveau_irq_register(dev, 8, nv04_fifo_isr); + nv_wr32(dev, NV03_PFIFO_INTR_0, 0xFFFFFFFF); + nv_wr32(dev, NV03_PFIFO_INTR_EN_0, 0xFFFFFFFF); + } +@@ -118,7 +120,7 @@ + NV_DEBUG(dev, "\n"); + + for (i = 0; i < NV50_PFIFO_CTX_TABLE__SIZE; i++) { +- if (dev_priv->fifos[i]) ++ if (dev_priv->channels.ptr[i]) + nv50_fifo_channel_enable(dev, i); + else + nv50_fifo_channel_disable(dev, i); +@@ -206,6 +208,9 @@ + if (!pfifo->playlist[0]) + return; + ++ nv_wr32(dev, 0x2140, 0x00000000); ++ nouveau_irq_unregister(dev, 8); ++ + nouveau_gpuobj_ref(NULL, &pfifo->playlist[0]); + nouveau_gpuobj_ref(NULL, &pfifo->playlist[1]); + } +@@ -291,10 +296,23 @@ + nv50_fifo_destroy_context(struct nouveau_channel *chan) + { + struct drm_device *dev = chan->dev; ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; + struct nouveau_gpuobj *ramfc = NULL; ++ unsigned long flags; + + NV_DEBUG(dev, "ch%d\n", chan->id); + ++ spin_lock_irqsave(&dev_priv->context_switch_lock, flags); ++ pfifo->reassign(dev, false); ++ ++ /* Unload the context if it's the currently active one */ ++ if (pfifo->channel_id(dev) == chan->id) { ++ pfifo->disable(dev); ++ pfifo->unload_context(dev); ++ pfifo->enable(dev); ++ } ++ + /* This will ensure the channel is seen as disabled. */ + nouveau_gpuobj_ref(chan->ramfc, &ramfc); + nouveau_gpuobj_ref(NULL, &chan->ramfc); +@@ -305,6 +323,10 @@ + nv50_fifo_channel_disable(dev, 127); + nv50_fifo_playlist_update(dev); + ++ pfifo->reassign(dev, true); ++ spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); ++ ++ /* Free the channel resources */ + nouveau_gpuobj_ref(NULL, &ramfc); + nouveau_gpuobj_ref(NULL, &chan->cache); + } +@@ -392,7 +414,7 @@ + if (chid < 1 || chid >= dev_priv->engine.fifo.channels - 1) + return 0; + +- chan = dev_priv->fifos[chid]; ++ chan = dev_priv->channels.ptr[chid]; + if (!chan) { + NV_ERROR(dev, "Inactive channel on PFIFO: %d\n", chid); + return -EINVAL; +@@ -464,3 +486,8 @@ + return 0; + } + ++void ++nv50_fifo_tlb_flush(struct drm_device *dev) ++{ ++ nv50_vm_flush(dev, 5); ++} +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_gpio.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_gpio.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_gpio.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_gpio.c 2010-11-12 06:18:06.000000000 +0100 +@@ -26,6 +26,28 @@ + #include "nouveau_drv.h" + #include "nouveau_hw.h" + ++#include "nv50_display.h" ++ ++static void nv50_gpio_isr(struct drm_device *dev); ++static void nv50_gpio_isr_bh(struct work_struct *work); ++ ++struct nv50_gpio_priv { ++ struct list_head handlers; ++ spinlock_t lock; ++}; ++ ++struct nv50_gpio_handler { ++ struct drm_device *dev; ++ struct list_head head; ++ struct work_struct work; ++ bool inhibit; ++ ++ struct dcb_gpio_entry *gpio; ++ ++ void (*handler)(void *data, int state); ++ void *data; ++}; ++ + static int + nv50_gpio_location(struct dcb_gpio_entry *gpio, uint32_t *reg, uint32_t *shift) + { +@@ -75,29 +97,123 @@ + return 0; + } + ++int ++nv50_gpio_irq_register(struct drm_device *dev, enum dcb_gpio_tag tag, ++ void (*handler)(void *, int), void *data) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_gpio_engine *pgpio = &dev_priv->engine.gpio; ++ struct nv50_gpio_priv *priv = pgpio->priv; ++ struct nv50_gpio_handler *gpioh; ++ struct dcb_gpio_entry *gpio; ++ unsigned long flags; ++ ++ gpio = nouveau_bios_gpio_entry(dev, tag); ++ if (!gpio) ++ return -ENOENT; ++ ++ gpioh = kzalloc(sizeof(*gpioh), GFP_KERNEL); ++ if (!gpioh) ++ return -ENOMEM; ++ ++ INIT_WORK(&gpioh->work, nv50_gpio_isr_bh); ++ gpioh->dev = dev; ++ gpioh->gpio = gpio; ++ gpioh->handler = handler; ++ gpioh->data = data; ++ ++ spin_lock_irqsave(&priv->lock, flags); ++ list_add(&gpioh->head, &priv->handlers); ++ spin_unlock_irqrestore(&priv->lock, flags); ++ return 0; ++} ++ + void +-nv50_gpio_irq_enable(struct drm_device *dev, enum dcb_gpio_tag tag, bool on) ++nv50_gpio_irq_unregister(struct drm_device *dev, enum dcb_gpio_tag tag, ++ void (*handler)(void *, int), void *data) + { ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_gpio_engine *pgpio = &dev_priv->engine.gpio; ++ struct nv50_gpio_priv *priv = pgpio->priv; ++ struct nv50_gpio_handler *gpioh, *tmp; + struct dcb_gpio_entry *gpio; +- u32 reg, mask; ++ unsigned long flags; + + gpio = nouveau_bios_gpio_entry(dev, tag); +- if (!gpio) { +- NV_ERROR(dev, "gpio tag 0x%02x not found\n", tag); ++ if (!gpio) + return; ++ ++ spin_lock_irqsave(&priv->lock, flags); ++ list_for_each_entry_safe(gpioh, tmp, &priv->handlers, head) { ++ if (gpioh->gpio != gpio || ++ gpioh->handler != handler || ++ gpioh->data != data) ++ continue; ++ list_del(&gpioh->head); ++ kfree(gpioh); + } ++ spin_unlock_irqrestore(&priv->lock, flags); ++} ++ ++bool ++nv50_gpio_irq_enable(struct drm_device *dev, enum dcb_gpio_tag tag, bool on) ++{ ++ struct dcb_gpio_entry *gpio; ++ u32 reg, mask; ++ ++ gpio = nouveau_bios_gpio_entry(dev, tag); ++ if (!gpio) ++ return false; + + reg = gpio->line < 16 ? 0xe050 : 0xe070; + mask = 0x00010001 << (gpio->line & 0xf); + + nv_wr32(dev, reg + 4, mask); +- nv_mask(dev, reg + 0, mask, on ? mask : 0); ++ reg = nv_mask(dev, reg + 0, mask, on ? mask : 0); ++ return (reg & mask) == mask; ++} ++ ++static int ++nv50_gpio_create(struct drm_device *dev) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_gpio_engine *pgpio = &dev_priv->engine.gpio; ++ struct nv50_gpio_priv *priv; ++ ++ priv = kzalloc(sizeof(*priv), GFP_KERNEL); ++ if (!priv) ++ return -ENOMEM; ++ ++ INIT_LIST_HEAD(&priv->handlers); ++ spin_lock_init(&priv->lock); ++ pgpio->priv = priv; ++ return 0; ++} ++ ++static void ++nv50_gpio_destroy(struct drm_device *dev) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_gpio_engine *pgpio = &dev_priv->engine.gpio; ++ ++ kfree(pgpio->priv); ++ pgpio->priv = NULL; + } + + int + nv50_gpio_init(struct drm_device *dev) + { + struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_gpio_engine *pgpio = &dev_priv->engine.gpio; ++ struct nv50_gpio_priv *priv; ++ int ret; ++ ++ if (!pgpio->priv) { ++ ret = nv50_gpio_create(dev); ++ if (ret) ++ return ret; ++ } ++ priv = pgpio->priv; + + /* disable, and ack any pending gpio interrupts */ + nv_wr32(dev, 0xe050, 0x00000000); +@@ -107,5 +223,77 @@ + nv_wr32(dev, 0xe074, 0xffffffff); + } + ++ nouveau_irq_register(dev, 21, nv50_gpio_isr); + return 0; + } ++ ++void ++nv50_gpio_fini(struct drm_device *dev) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ ++ nv_wr32(dev, 0xe050, 0x00000000); ++ if (dev_priv->chipset >= 0x90) ++ nv_wr32(dev, 0xe070, 0x00000000); ++ nouveau_irq_unregister(dev, 21); ++ ++ nv50_gpio_destroy(dev); ++} ++ ++static void ++nv50_gpio_isr_bh(struct work_struct *work) ++{ ++ struct nv50_gpio_handler *gpioh = ++ container_of(work, struct nv50_gpio_handler, work); ++ struct drm_nouveau_private *dev_priv = gpioh->dev->dev_private; ++ struct nouveau_gpio_engine *pgpio = &dev_priv->engine.gpio; ++ struct nv50_gpio_priv *priv = pgpio->priv; ++ unsigned long flags; ++ int state; ++ ++ state = pgpio->get(gpioh->dev, gpioh->gpio->tag); ++ if (state < 0) ++ return; ++ ++ gpioh->handler(gpioh->data, state); ++ ++ spin_lock_irqsave(&priv->lock, flags); ++ gpioh->inhibit = false; ++ spin_unlock_irqrestore(&priv->lock, flags); ++} ++ ++static void ++nv50_gpio_isr(struct drm_device *dev) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_gpio_engine *pgpio = &dev_priv->engine.gpio; ++ struct nv50_gpio_priv *priv = pgpio->priv; ++ struct nv50_gpio_handler *gpioh; ++ u32 intr0, intr1 = 0; ++ u32 hi, lo, ch; ++ ++ intr0 = nv_rd32(dev, 0xe054) & nv_rd32(dev, 0xe050); ++ if (dev_priv->chipset >= 0x90) ++ intr1 = nv_rd32(dev, 0xe074) & nv_rd32(dev, 0xe070); ++ ++ hi = (intr0 & 0x0000ffff) | (intr1 << 16); ++ lo = (intr0 >> 16) | (intr1 & 0xffff0000); ++ ch = hi | lo; ++ ++ nv_wr32(dev, 0xe054, intr0); ++ if (dev_priv->chipset >= 0x90) ++ nv_wr32(dev, 0xe074, intr1); ++ ++ spin_lock(&priv->lock); ++ list_for_each_entry(gpioh, &priv->handlers, head) { ++ if (!(ch & (1 << gpioh->gpio->line))) ++ continue; ++ ++ if (gpioh->inhibit) ++ continue; ++ gpioh->inhibit = true; ++ ++ queue_work(dev_priv->wq, &gpioh->work); ++ } ++ spin_unlock(&priv->lock); ++} +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_graph.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_graph.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_graph.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_graph.c 2010-11-12 06:18:06.000000000 +0100 +@@ -29,6 +29,11 @@ + #include "nouveau_drv.h" + #include "nouveau_ramht.h" + #include "nouveau_grctx.h" ++#include "nouveau_dma.h" ++#include "nv50_evo.h" ++ ++static int nv50_graph_register(struct drm_device *); ++static void nv50_graph_isr(struct drm_device *); + + static void + nv50_graph_init_reset(struct drm_device *dev) +@@ -46,6 +51,7 @@ + { + NV_DEBUG(dev, "\n"); + ++ nouveau_irq_register(dev, 12, nv50_graph_isr); + nv_wr32(dev, NV03_PGRAPH_INTR, 0xffffffff); + nv_wr32(dev, 0x400138, 0xffffffff); + nv_wr32(dev, NV40_PGRAPH_INTR_EN, 0xffffffff); +@@ -145,12 +151,15 @@ + nv50_graph_init_reset(dev); + nv50_graph_init_regs__nv(dev); + nv50_graph_init_regs(dev); +- nv50_graph_init_intr(dev); + + ret = nv50_graph_init_ctxctl(dev); + if (ret) + return ret; + ++ ret = nv50_graph_register(dev); ++ if (ret) ++ return ret; ++ nv50_graph_init_intr(dev); + return 0; + } + +@@ -158,6 +167,8 @@ + nv50_graph_takedown(struct drm_device *dev) + { + NV_DEBUG(dev, "\n"); ++ nv_wr32(dev, 0x40013c, 0x00000000); ++ nouveau_irq_unregister(dev, 12); + } + + void +@@ -190,7 +201,7 @@ + inst = (inst & NV50_PGRAPH_CTXCTL_CUR_INSTANCE) << 12; + + for (i = 0; i < dev_priv->engine.fifo.channels; i++) { +- struct nouveau_channel *chan = dev_priv->fifos[i]; ++ struct nouveau_channel *chan = dev_priv->channels.ptr[i]; + + if (chan && chan->ramin && chan->ramin->vinst == inst) + return chan; +@@ -211,7 +222,7 @@ + + NV_DEBUG(dev, "ch%d\n", chan->id); + +- ret = nouveau_gpuobj_new(dev, chan, pgraph->grctx_size, 0x1000, ++ ret = nouveau_gpuobj_new(dev, chan, pgraph->grctx_size, 0, + NVOBJ_FLAG_ZERO_ALLOC | + NVOBJ_FLAG_ZERO_FREE, &chan->ramin_grctx); + if (ret) +@@ -242,17 +253,28 @@ + { + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; + int i, hdr = (dev_priv->chipset == 0x50) ? 0x200 : 0x20; ++ unsigned long flags; + + NV_DEBUG(dev, "ch%d\n", chan->id); + + if (!chan->ramin) + return; + ++ spin_lock_irqsave(&dev_priv->context_switch_lock, flags); ++ pgraph->fifo_access(dev, false); ++ ++ if (pgraph->channel(dev) == chan) ++ pgraph->unload_context(dev); ++ + for (i = hdr; i < hdr + 24; i += 4) + nv_wo32(chan->ramin, i, 0); + dev_priv->engine.instmem.flush(dev); + ++ pgraph->fifo_access(dev, true); ++ spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); ++ + nouveau_gpuobj_ref(NULL, &chan->ramin_grctx); + } + +@@ -306,7 +328,7 @@ + return 0; + } + +-void ++static void + nv50_graph_context_switch(struct drm_device *dev) + { + uint32_t inst; +@@ -322,8 +344,8 @@ + } + + static int +-nv50_graph_nvsw_dma_vblsem(struct nouveau_channel *chan, int grclass, +- int mthd, uint32_t data) ++nv50_graph_nvsw_dma_vblsem(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data) + { + struct nouveau_gpuobj *gpuobj; + +@@ -340,8 +362,8 @@ + } + + static int +-nv50_graph_nvsw_vblsem_offset(struct nouveau_channel *chan, int grclass, +- int mthd, uint32_t data) ++nv50_graph_nvsw_vblsem_offset(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data) + { + if (nouveau_notifier_offset(chan->nvsw.vblsem, &data)) + return -ERANGE; +@@ -351,16 +373,16 @@ + } + + static int +-nv50_graph_nvsw_vblsem_release_val(struct nouveau_channel *chan, int grclass, +- int mthd, uint32_t data) ++nv50_graph_nvsw_vblsem_release_val(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data) + { + chan->nvsw.vblsem_rval = data; + return 0; + } + + static int +-nv50_graph_nvsw_vblsem_release(struct nouveau_channel *chan, int grclass, +- int mthd, uint32_t data) ++nv50_graph_nvsw_vblsem_release(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data) + { + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; +@@ -368,37 +390,621 @@ + if (!chan->nvsw.vblsem || chan->nvsw.vblsem_offset == ~0 || data > 1) + return -EINVAL; + +- if (!(nv_rd32(dev, NV50_PDISPLAY_INTR_EN) & +- NV50_PDISPLAY_INTR_EN_VBLANK_CRTC_(data))) { +- nv_wr32(dev, NV50_PDISPLAY_INTR_1, +- NV50_PDISPLAY_INTR_1_VBLANK_CRTC_(data)); +- nv_wr32(dev, NV50_PDISPLAY_INTR_EN, nv_rd32(dev, +- NV50_PDISPLAY_INTR_EN) | +- NV50_PDISPLAY_INTR_EN_VBLANK_CRTC_(data)); +- } ++ drm_vblank_get(dev, data); + ++ chan->nvsw.vblsem_head = data; + list_add(&chan->nvsw.vbl_wait, &dev_priv->vbl_waiting); ++ ++ return 0; ++} ++ ++static int ++nv50_graph_nvsw_mthd_page_flip(struct nouveau_channel *chan, ++ u32 class, u32 mthd, u32 data) ++{ ++ struct nouveau_page_flip_state s; ++ ++ if (!nouveau_finish_page_flip(chan, &s)) { ++ /* XXX - Do something here */ ++ } ++ ++ return 0; ++} ++ ++static int ++nv50_graph_register(struct drm_device *dev) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ ++ if (dev_priv->engine.graph.registered) ++ return 0; ++ ++ NVOBJ_CLASS(dev, 0x506e, SW); /* nvsw */ ++ NVOBJ_MTHD (dev, 0x506e, 0x018c, nv50_graph_nvsw_dma_vblsem); ++ NVOBJ_MTHD (dev, 0x506e, 0x0400, nv50_graph_nvsw_vblsem_offset); ++ NVOBJ_MTHD (dev, 0x506e, 0x0404, nv50_graph_nvsw_vblsem_release_val); ++ NVOBJ_MTHD (dev, 0x506e, 0x0408, nv50_graph_nvsw_vblsem_release); ++ NVOBJ_MTHD (dev, 0x506e, 0x0500, nv50_graph_nvsw_mthd_page_flip); ++ ++ NVOBJ_CLASS(dev, 0x0030, GR); /* null */ ++ NVOBJ_CLASS(dev, 0x5039, GR); /* m2mf */ ++ NVOBJ_CLASS(dev, 0x502d, GR); /* 2d */ ++ ++ /* tesla */ ++ if (dev_priv->chipset == 0x50) ++ NVOBJ_CLASS(dev, 0x5097, GR); /* tesla (nv50) */ ++ else ++ if (dev_priv->chipset < 0xa0) ++ NVOBJ_CLASS(dev, 0x8297, GR); /* tesla (nv8x/nv9x) */ ++ else { ++ switch (dev_priv->chipset) { ++ case 0xa0: ++ case 0xaa: ++ case 0xac: ++ NVOBJ_CLASS(dev, 0x8397, GR); ++ break; ++ case 0xa3: ++ case 0xa5: ++ case 0xa8: ++ NVOBJ_CLASS(dev, 0x8597, GR); ++ break; ++ case 0xaf: ++ NVOBJ_CLASS(dev, 0x8697, GR); ++ break; ++ } ++ } ++ ++ /* compute */ ++ NVOBJ_CLASS(dev, 0x50c0, GR); ++ if (dev_priv->chipset > 0xa0 && ++ dev_priv->chipset != 0xaa && ++ dev_priv->chipset != 0xac) ++ NVOBJ_CLASS(dev, 0x85c0, GR); ++ ++ dev_priv->engine.graph.registered = true; + return 0; + } + +-static struct nouveau_pgraph_object_method nv50_graph_nvsw_methods[] = { +- { 0x018c, nv50_graph_nvsw_dma_vblsem }, +- { 0x0400, nv50_graph_nvsw_vblsem_offset }, +- { 0x0404, nv50_graph_nvsw_vblsem_release_val }, +- { 0x0408, nv50_graph_nvsw_vblsem_release }, ++void ++nv50_graph_tlb_flush(struct drm_device *dev) ++{ ++ nv50_vm_flush(dev, 0); ++} ++ ++void ++nv86_graph_tlb_flush(struct drm_device *dev) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_timer_engine *ptimer = &dev_priv->engine.timer; ++ bool idle, timeout = false; ++ unsigned long flags; ++ u64 start; ++ u32 tmp; ++ ++ spin_lock_irqsave(&dev_priv->context_switch_lock, flags); ++ nv_mask(dev, 0x400500, 0x00000001, 0x00000000); ++ ++ start = ptimer->read(dev); ++ do { ++ idle = true; ++ ++ for (tmp = nv_rd32(dev, 0x400380); tmp && idle; tmp >>= 3) { ++ if ((tmp & 7) == 1) ++ idle = false; ++ } ++ ++ for (tmp = nv_rd32(dev, 0x400384); tmp && idle; tmp >>= 3) { ++ if ((tmp & 7) == 1) ++ idle = false; ++ } ++ ++ for (tmp = nv_rd32(dev, 0x400388); tmp && idle; tmp >>= 3) { ++ if ((tmp & 7) == 1) ++ idle = false; ++ } ++ } while (!idle && !(timeout = ptimer->read(dev) - start > 2000000000)); ++ ++ if (timeout) { ++ NV_ERROR(dev, "PGRAPH TLB flush idle timeout fail: " ++ "0x%08x 0x%08x 0x%08x 0x%08x\n", ++ nv_rd32(dev, 0x400700), nv_rd32(dev, 0x400380), ++ nv_rd32(dev, 0x400384), nv_rd32(dev, 0x400388)); ++ } ++ ++ nv50_vm_flush(dev, 0); ++ ++ nv_mask(dev, 0x400500, 0x00000001, 0x00000001); ++ spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); ++} ++ ++static struct nouveau_enum nv50_mp_exec_error_names[] = ++{ ++ { 3, "STACK_UNDERFLOW" }, ++ { 4, "QUADON_ACTIVE" }, ++ { 8, "TIMEOUT" }, ++ { 0x10, "INVALID_OPCODE" }, ++ { 0x40, "BREAKPOINT" }, ++ {} ++}; ++ ++static struct nouveau_bitfield nv50_graph_trap_m2mf[] = { ++ { 0x00000001, "NOTIFY" }, ++ { 0x00000002, "IN" }, ++ { 0x00000004, "OUT" }, ++ {} ++}; ++ ++static struct nouveau_bitfield nv50_graph_trap_vfetch[] = { ++ { 0x00000001, "FAULT" }, ++ {} ++}; ++ ++static struct nouveau_bitfield nv50_graph_trap_strmout[] = { ++ { 0x00000001, "FAULT" }, ++ {} ++}; ++ ++static struct nouveau_bitfield nv50_graph_trap_ccache[] = { ++ { 0x00000001, "FAULT" }, + {} + }; + +-struct nouveau_pgraph_object_class nv50_graph_grclass[] = { +- { 0x506e, true, nv50_graph_nvsw_methods }, /* nvsw */ +- { 0x0030, false, NULL }, /* null */ +- { 0x5039, false, NULL }, /* m2mf */ +- { 0x502d, false, NULL }, /* 2d */ +- { 0x50c0, false, NULL }, /* compute */ +- { 0x85c0, false, NULL }, /* compute (nva3, nva5, nva8) */ +- { 0x5097, false, NULL }, /* tesla (nv50) */ +- { 0x8297, false, NULL }, /* tesla (nv8x/nv9x) */ +- { 0x8397, false, NULL }, /* tesla (nva0, nvaa, nvac) */ +- { 0x8597, false, NULL }, /* tesla (nva3, nva5, nva8) */ ++/* There must be a *lot* of these. Will take some time to gather them up. */ ++static struct nouveau_enum nv50_data_error_names[] = { ++ { 4, "INVALID_VALUE" }, ++ { 5, "INVALID_ENUM" }, ++ { 8, "INVALID_OBJECT" }, ++ { 0xc, "INVALID_BITFIELD" }, ++ { 0x28, "MP_NO_REG_SPACE" }, ++ { 0x2b, "MP_BLOCK_SIZE_MISMATCH" }, + {} + }; ++ ++static struct nouveau_bitfield nv50_graph_intr[] = { ++ { 0x00000001, "NOTIFY" }, ++ { 0x00000002, "COMPUTE_QUERY" }, ++ { 0x00000010, "ILLEGAL_MTHD" }, ++ { 0x00000020, "ILLEGAL_CLASS" }, ++ { 0x00000040, "DOUBLE_NOTIFY" }, ++ { 0x00001000, "CONTEXT_SWITCH" }, ++ { 0x00010000, "BUFFER_NOTIFY" }, ++ { 0x00100000, "DATA_ERROR" }, ++ { 0x00200000, "TRAP" }, ++ { 0x01000000, "SINGLE_STEP" }, ++ {} ++}; ++ ++static void ++nv50_pgraph_mp_trap(struct drm_device *dev, int tpid, int display) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ uint32_t units = nv_rd32(dev, 0x1540); ++ uint32_t addr, mp10, status, pc, oplow, ophigh; ++ int i; ++ int mps = 0; ++ for (i = 0; i < 4; i++) { ++ if (!(units & 1 << (i+24))) ++ continue; ++ if (dev_priv->chipset < 0xa0) ++ addr = 0x408200 + (tpid << 12) + (i << 7); ++ else ++ addr = 0x408100 + (tpid << 11) + (i << 7); ++ mp10 = nv_rd32(dev, addr + 0x10); ++ status = nv_rd32(dev, addr + 0x14); ++ if (!status) ++ continue; ++ if (display) { ++ nv_rd32(dev, addr + 0x20); ++ pc = nv_rd32(dev, addr + 0x24); ++ oplow = nv_rd32(dev, addr + 0x70); ++ ophigh= nv_rd32(dev, addr + 0x74); ++ NV_INFO(dev, "PGRAPH_TRAP_MP_EXEC - " ++ "TP %d MP %d: ", tpid, i); ++ nouveau_enum_print(nv50_mp_exec_error_names, status); ++ printk(" at %06x warp %d, opcode %08x %08x\n", ++ pc&0xffffff, pc >> 24, ++ oplow, ophigh); ++ } ++ nv_wr32(dev, addr + 0x10, mp10); ++ nv_wr32(dev, addr + 0x14, 0); ++ mps++; ++ } ++ if (!mps && display) ++ NV_INFO(dev, "PGRAPH_TRAP_MP_EXEC - TP %d: " ++ "No MPs claiming errors?\n", tpid); ++} ++ ++static void ++nv50_pgraph_tp_trap(struct drm_device *dev, int type, uint32_t ustatus_old, ++ uint32_t ustatus_new, int display, const char *name) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ int tps = 0; ++ uint32_t units = nv_rd32(dev, 0x1540); ++ int i, r; ++ uint32_t ustatus_addr, ustatus; ++ for (i = 0; i < 16; i++) { ++ if (!(units & (1 << i))) ++ continue; ++ if (dev_priv->chipset < 0xa0) ++ ustatus_addr = ustatus_old + (i << 12); ++ else ++ ustatus_addr = ustatus_new + (i << 11); ++ ustatus = nv_rd32(dev, ustatus_addr) & 0x7fffffff; ++ if (!ustatus) ++ continue; ++ tps++; ++ switch (type) { ++ case 6: /* texture error... unknown for now */ ++ nv50_fb_vm_trap(dev, display, name); ++ if (display) { ++ NV_ERROR(dev, "magic set %d:\n", i); ++ for (r = ustatus_addr + 4; r <= ustatus_addr + 0x10; r += 4) ++ NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r, ++ nv_rd32(dev, r)); ++ } ++ break; ++ case 7: /* MP error */ ++ if (ustatus & 0x00010000) { ++ nv50_pgraph_mp_trap(dev, i, display); ++ ustatus &= ~0x00010000; ++ } ++ break; ++ case 8: /* TPDMA error */ ++ { ++ uint32_t e0c = nv_rd32(dev, ustatus_addr + 4); ++ uint32_t e10 = nv_rd32(dev, ustatus_addr + 8); ++ uint32_t e14 = nv_rd32(dev, ustatus_addr + 0xc); ++ uint32_t e18 = nv_rd32(dev, ustatus_addr + 0x10); ++ uint32_t e1c = nv_rd32(dev, ustatus_addr + 0x14); ++ uint32_t e20 = nv_rd32(dev, ustatus_addr + 0x18); ++ uint32_t e24 = nv_rd32(dev, ustatus_addr + 0x1c); ++ nv50_fb_vm_trap(dev, display, name); ++ /* 2d engine destination */ ++ if (ustatus & 0x00000010) { ++ if (display) { ++ NV_INFO(dev, "PGRAPH_TRAP_TPDMA_2D - TP %d - Unknown fault at address %02x%08x\n", ++ i, e14, e10); ++ NV_INFO(dev, "PGRAPH_TRAP_TPDMA_2D - TP %d - e0c: %08x, e18: %08x, e1c: %08x, e20: %08x, e24: %08x\n", ++ i, e0c, e18, e1c, e20, e24); ++ } ++ ustatus &= ~0x00000010; ++ } ++ /* Render target */ ++ if (ustatus & 0x00000040) { ++ if (display) { ++ NV_INFO(dev, "PGRAPH_TRAP_TPDMA_RT - TP %d - Unknown fault at address %02x%08x\n", ++ i, e14, e10); ++ NV_INFO(dev, "PGRAPH_TRAP_TPDMA_RT - TP %d - e0c: %08x, e18: %08x, e1c: %08x, e20: %08x, e24: %08x\n", ++ i, e0c, e18, e1c, e20, e24); ++ } ++ ustatus &= ~0x00000040; ++ } ++ /* CUDA memory: l[], g[] or stack. */ ++ if (ustatus & 0x00000080) { ++ if (display) { ++ if (e18 & 0x80000000) { ++ /* g[] read fault? */ ++ NV_INFO(dev, "PGRAPH_TRAP_TPDMA - TP %d - Global read fault at address %02x%08x\n", ++ i, e14, e10 | ((e18 >> 24) & 0x1f)); ++ e18 &= ~0x1f000000; ++ } else if (e18 & 0xc) { ++ /* g[] write fault? */ ++ NV_INFO(dev, "PGRAPH_TRAP_TPDMA - TP %d - Global write fault at address %02x%08x\n", ++ i, e14, e10 | ((e18 >> 7) & 0x1f)); ++ e18 &= ~0x00000f80; ++ } else { ++ NV_INFO(dev, "PGRAPH_TRAP_TPDMA - TP %d - Unknown CUDA fault at address %02x%08x\n", ++ i, e14, e10); ++ } ++ NV_INFO(dev, "PGRAPH_TRAP_TPDMA - TP %d - e0c: %08x, e18: %08x, e1c: %08x, e20: %08x, e24: %08x\n", ++ i, e0c, e18, e1c, e20, e24); ++ } ++ ustatus &= ~0x00000080; ++ } ++ } ++ break; ++ } ++ if (ustatus) { ++ if (display) ++ NV_INFO(dev, "%s - TP%d: Unhandled ustatus 0x%08x\n", name, i, ustatus); ++ } ++ nv_wr32(dev, ustatus_addr, 0xc0000000); ++ } ++ ++ if (!tps && display) ++ NV_INFO(dev, "%s - No TPs claiming errors?\n", name); ++} ++ ++static int ++nv50_pgraph_trap_handler(struct drm_device *dev, u32 display, u64 inst, u32 chid) ++{ ++ u32 status = nv_rd32(dev, 0x400108); ++ u32 ustatus; ++ ++ if (!status && display) { ++ NV_INFO(dev, "PGRAPH - TRAP: no units reporting traps?\n"); ++ return 1; ++ } ++ ++ /* DISPATCH: Relays commands to other units and handles NOTIFY, ++ * COND, QUERY. If you get a trap from it, the command is still stuck ++ * in DISPATCH and you need to do something about it. */ ++ if (status & 0x001) { ++ ustatus = nv_rd32(dev, 0x400804) & 0x7fffffff; ++ if (!ustatus && display) { ++ NV_INFO(dev, "PGRAPH_TRAP_DISPATCH - no ustatus?\n"); ++ } ++ ++ nv_wr32(dev, 0x400500, 0x00000000); ++ ++ /* Known to be triggered by screwed up NOTIFY and COND... */ ++ if (ustatus & 0x00000001) { ++ u32 addr = nv_rd32(dev, 0x400808); ++ u32 subc = (addr & 0x00070000) >> 16; ++ u32 mthd = (addr & 0x00001ffc); ++ u32 datal = nv_rd32(dev, 0x40080c); ++ u32 datah = nv_rd32(dev, 0x400810); ++ u32 class = nv_rd32(dev, 0x400814); ++ u32 r848 = nv_rd32(dev, 0x400848); ++ ++ NV_INFO(dev, "PGRAPH - TRAP DISPATCH_FAULT\n"); ++ if (display && (addr & 0x80000000)) { ++ NV_INFO(dev, "PGRAPH - ch %d (0x%010llx) " ++ "subc %d class 0x%04x mthd 0x%04x " ++ "data 0x%08x%08x " ++ "400808 0x%08x 400848 0x%08x\n", ++ chid, inst, subc, class, mthd, datah, ++ datal, addr, r848); ++ } else ++ if (display) { ++ NV_INFO(dev, "PGRAPH - no stuck command?\n"); ++ } ++ ++ nv_wr32(dev, 0x400808, 0); ++ nv_wr32(dev, 0x4008e8, nv_rd32(dev, 0x4008e8) & 3); ++ nv_wr32(dev, 0x400848, 0); ++ ustatus &= ~0x00000001; ++ } ++ ++ if (ustatus & 0x00000002) { ++ u32 addr = nv_rd32(dev, 0x40084c); ++ u32 subc = (addr & 0x00070000) >> 16; ++ u32 mthd = (addr & 0x00001ffc); ++ u32 data = nv_rd32(dev, 0x40085c); ++ u32 class = nv_rd32(dev, 0x400814); ++ ++ NV_INFO(dev, "PGRAPH - TRAP DISPATCH_QUERY\n"); ++ if (display && (addr & 0x80000000)) { ++ NV_INFO(dev, "PGRAPH - ch %d (0x%010llx) " ++ "subc %d class 0x%04x mthd 0x%04x " ++ "data 0x%08x 40084c 0x%08x\n", ++ chid, inst, subc, class, mthd, ++ data, addr); ++ } else ++ if (display) { ++ NV_INFO(dev, "PGRAPH - no stuck command?\n"); ++ } ++ ++ nv_wr32(dev, 0x40084c, 0); ++ ustatus &= ~0x00000002; ++ } ++ ++ if (ustatus && display) { ++ NV_INFO(dev, "PGRAPH - TRAP_DISPATCH (unknown " ++ "0x%08x)\n", ustatus); ++ } ++ ++ nv_wr32(dev, 0x400804, 0xc0000000); ++ nv_wr32(dev, 0x400108, 0x001); ++ status &= ~0x001; ++ if (!status) ++ return 0; ++ } ++ ++ /* M2MF: Memory to memory copy engine. */ ++ if (status & 0x002) { ++ u32 ustatus = nv_rd32(dev, 0x406800) & 0x7fffffff; ++ if (display) { ++ NV_INFO(dev, "PGRAPH - TRAP_M2MF"); ++ nouveau_bitfield_print(nv50_graph_trap_m2mf, ustatus); ++ printk("\n"); ++ NV_INFO(dev, "PGRAPH - TRAP_M2MF %08x %08x %08x %08x\n", ++ nv_rd32(dev, 0x406804), nv_rd32(dev, 0x406808), ++ nv_rd32(dev, 0x40680c), nv_rd32(dev, 0x406810)); ++ ++ } ++ ++ /* No sane way found yet -- just reset the bugger. */ ++ nv_wr32(dev, 0x400040, 2); ++ nv_wr32(dev, 0x400040, 0); ++ nv_wr32(dev, 0x406800, 0xc0000000); ++ nv_wr32(dev, 0x400108, 0x002); ++ status &= ~0x002; ++ } ++ ++ /* VFETCH: Fetches data from vertex buffers. */ ++ if (status & 0x004) { ++ u32 ustatus = nv_rd32(dev, 0x400c04) & 0x7fffffff; ++ if (display) { ++ NV_INFO(dev, "PGRAPH - TRAP_VFETCH"); ++ nouveau_bitfield_print(nv50_graph_trap_vfetch, ustatus); ++ printk("\n"); ++ NV_INFO(dev, "PGRAPH - TRAP_VFETCH %08x %08x %08x %08x\n", ++ nv_rd32(dev, 0x400c00), nv_rd32(dev, 0x400c08), ++ nv_rd32(dev, 0x400c0c), nv_rd32(dev, 0x400c10)); ++ } ++ ++ nv_wr32(dev, 0x400c04, 0xc0000000); ++ nv_wr32(dev, 0x400108, 0x004); ++ status &= ~0x004; ++ } ++ ++ /* STRMOUT: DirectX streamout / OpenGL transform feedback. */ ++ if (status & 0x008) { ++ ustatus = nv_rd32(dev, 0x401800) & 0x7fffffff; ++ if (display) { ++ NV_INFO(dev, "PGRAPH - TRAP_STRMOUT"); ++ nouveau_bitfield_print(nv50_graph_trap_strmout, ustatus); ++ printk("\n"); ++ NV_INFO(dev, "PGRAPH - TRAP_STRMOUT %08x %08x %08x %08x\n", ++ nv_rd32(dev, 0x401804), nv_rd32(dev, 0x401808), ++ nv_rd32(dev, 0x40180c), nv_rd32(dev, 0x401810)); ++ ++ } ++ ++ /* No sane way found yet -- just reset the bugger. */ ++ nv_wr32(dev, 0x400040, 0x80); ++ nv_wr32(dev, 0x400040, 0); ++ nv_wr32(dev, 0x401800, 0xc0000000); ++ nv_wr32(dev, 0x400108, 0x008); ++ status &= ~0x008; ++ } ++ ++ /* CCACHE: Handles code and c[] caches and fills them. */ ++ if (status & 0x010) { ++ ustatus = nv_rd32(dev, 0x405018) & 0x7fffffff; ++ if (display) { ++ NV_INFO(dev, "PGRAPH - TRAP_CCACHE"); ++ nouveau_bitfield_print(nv50_graph_trap_ccache, ustatus); ++ printk("\n"); ++ NV_INFO(dev, "PGRAPH - TRAP_CCACHE %08x %08x %08x %08x" ++ " %08x %08x %08x\n", ++ nv_rd32(dev, 0x405800), nv_rd32(dev, 0x405804), ++ nv_rd32(dev, 0x405808), nv_rd32(dev, 0x40580c), ++ nv_rd32(dev, 0x405810), nv_rd32(dev, 0x405814), ++ nv_rd32(dev, 0x40581c)); ++ ++ } ++ ++ nv_wr32(dev, 0x405018, 0xc0000000); ++ nv_wr32(dev, 0x400108, 0x010); ++ status &= ~0x010; ++ } ++ ++ /* Unknown, not seen yet... 0x402000 is the only trap status reg ++ * remaining, so try to handle it anyway. Perhaps related to that ++ * unknown DMA slot on tesla? */ ++ if (status & 0x20) { ++ ustatus = nv_rd32(dev, 0x402000) & 0x7fffffff; ++ if (display) ++ NV_INFO(dev, "PGRAPH - TRAP_UNKC04 0x%08x\n", ustatus); ++ nv_wr32(dev, 0x402000, 0xc0000000); ++ /* no status modifiction on purpose */ ++ } ++ ++ /* TEXTURE: CUDA texturing units */ ++ if (status & 0x040) { ++ nv50_pgraph_tp_trap(dev, 6, 0x408900, 0x408600, display, ++ "PGRAPH - TRAP_TEXTURE"); ++ nv_wr32(dev, 0x400108, 0x040); ++ status &= ~0x040; ++ } ++ ++ /* MP: CUDA execution engines. */ ++ if (status & 0x080) { ++ nv50_pgraph_tp_trap(dev, 7, 0x408314, 0x40831c, display, ++ "PGRAPH - TRAP_MP"); ++ nv_wr32(dev, 0x400108, 0x080); ++ status &= ~0x080; ++ } ++ ++ /* TPDMA: Handles TP-initiated uncached memory accesses: ++ * l[], g[], stack, 2d surfaces, render targets. */ ++ if (status & 0x100) { ++ nv50_pgraph_tp_trap(dev, 8, 0x408e08, 0x408708, display, ++ "PGRAPH - TRAP_TPDMA"); ++ nv_wr32(dev, 0x400108, 0x100); ++ status &= ~0x100; ++ } ++ ++ if (status) { ++ if (display) ++ NV_INFO(dev, "PGRAPH - TRAP: unknown 0x%08x\n", status); ++ nv_wr32(dev, 0x400108, status); ++ } ++ ++ return 1; ++} ++ ++static int ++nv50_graph_isr_chid(struct drm_device *dev, u64 inst) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_channel *chan; ++ unsigned long flags; ++ int i; ++ ++ spin_lock_irqsave(&dev_priv->channels.lock, flags); ++ for (i = 0; i < dev_priv->engine.fifo.channels; i++) { ++ chan = dev_priv->channels.ptr[i]; ++ if (!chan || !chan->ramin) ++ continue; ++ ++ if (inst == chan->ramin->vinst) ++ break; ++ } ++ spin_unlock_irqrestore(&dev_priv->channels.lock, flags); ++ return i; ++} ++ ++static void ++nv50_graph_isr(struct drm_device *dev) ++{ ++ u32 stat; ++ ++ while ((stat = nv_rd32(dev, 0x400100))) { ++ u64 inst = (u64)(nv_rd32(dev, 0x40032c) & 0x0fffffff) << 12; ++ u32 chid = nv50_graph_isr_chid(dev, inst); ++ u32 addr = nv_rd32(dev, NV04_PGRAPH_TRAPPED_ADDR); ++ u32 subc = (addr & 0x00070000) >> 16; ++ u32 mthd = (addr & 0x00001ffc); ++ u32 data = nv_rd32(dev, NV04_PGRAPH_TRAPPED_DATA); ++ u32 class = nv_rd32(dev, 0x400814); ++ u32 show = stat; ++ ++ if (stat & 0x00000010) { ++ if (!nouveau_gpuobj_mthd_call2(dev, chid, class, ++ mthd, data)) ++ show &= ~0x00000010; ++ } ++ ++ if (stat & 0x00001000) { ++ nv_wr32(dev, 0x400500, 0x00000000); ++ nv_wr32(dev, 0x400100, 0x00001000); ++ nv_mask(dev, 0x40013c, 0x00001000, 0x00000000); ++ nv50_graph_context_switch(dev); ++ stat &= ~0x00001000; ++ show &= ~0x00001000; ++ } ++ ++ show = (show && nouveau_ratelimit()) ? show : 0; ++ ++ if (show & 0x00100000) { ++ u32 ecode = nv_rd32(dev, 0x400110); ++ NV_INFO(dev, "PGRAPH - DATA_ERROR "); ++ nouveau_enum_print(nv50_data_error_names, ecode); ++ printk("\n"); ++ } ++ ++ if (stat & 0x00200000) { ++ if (!nv50_pgraph_trap_handler(dev, show, inst, chid)) ++ show &= ~0x00200000; ++ } ++ ++ nv_wr32(dev, 0x400100, stat); ++ nv_wr32(dev, 0x400500, 0x00010001); ++ ++ if (show) { ++ NV_INFO(dev, "PGRAPH -"); ++ nouveau_bitfield_print(nv50_graph_intr, show); ++ printk("\n"); ++ NV_INFO(dev, "PGRAPH - ch %d (0x%010llx) subc %d " ++ "class 0x%04x mthd 0x%04x data 0x%08x\n", ++ chid, inst, subc, class, mthd, data); ++ } ++ } ++ ++ if (nv_rd32(dev, 0x400824) & (1 << 31)) ++ nv_wr32(dev, 0x400824, nv_rd32(dev, 0x400824) & ~(1 << 31)); ++} +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_instmem.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_instmem.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_instmem.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_instmem.c 2010-11-12 06:18:06.000000000 +0100 +@@ -131,10 +131,10 @@ + } + + /* we need a channel to plug into the hw to control the BARs */ +- ret = nv50_channel_new(dev, 128*1024, &dev_priv->fifos[0]); ++ ret = nv50_channel_new(dev, 128*1024, &dev_priv->channels.ptr[0]); + if (ret) + return ret; +- chan = dev_priv->fifos[127] = dev_priv->fifos[0]; ++ chan = dev_priv->channels.ptr[127] = dev_priv->channels.ptr[0]; + + /* allocate page table for PRAMIN BAR */ + ret = nouveau_gpuobj_new(dev, chan, (dev_priv->ramin_size >> 12) * 8, +@@ -157,10 +157,7 @@ + nv_wo32(priv->pramin_bar, 0x10, 0x00000000); + nv_wo32(priv->pramin_bar, 0x14, 0x00000000); + +- /* map channel into PRAMIN, gpuobj didn't do it for us */ +- ret = nv50_instmem_bind(dev, chan->ramin); +- if (ret) +- return ret; ++ nv50_instmem_map(chan->ramin); + + /* poke regs... */ + nv_wr32(dev, 0x001704, 0x00000000 | (chan->ramin->vinst >> 12)); +@@ -240,7 +237,7 @@ + { + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nv50_instmem_priv *priv = dev_priv->engine.instmem.priv; +- struct nouveau_channel *chan = dev_priv->fifos[0]; ++ struct nouveau_channel *chan = dev_priv->channels.ptr[0]; + int i; + + NV_DEBUG(dev, "\n"); +@@ -264,8 +261,8 @@ + nouveau_gpuobj_ref(NULL, &chan->vm_vram_pt[i]); + dev_priv->vm_vram_pt_nr = 0; + +- nv50_channel_del(&dev_priv->fifos[0]); +- dev_priv->fifos[127] = NULL; ++ nv50_channel_del(&dev_priv->channels.ptr[0]); ++ dev_priv->channels.ptr[127] = NULL; + } + + dev_priv->engine.instmem.priv = NULL; +@@ -276,16 +273,8 @@ + nv50_instmem_suspend(struct drm_device *dev) + { + struct drm_nouveau_private *dev_priv = dev->dev_private; +- struct nouveau_channel *chan = dev_priv->fifos[0]; +- struct nouveau_gpuobj *ramin = chan->ramin; +- int i; + +- ramin->im_backing_suspend = vmalloc(ramin->size); +- if (!ramin->im_backing_suspend) +- return -ENOMEM; +- +- for (i = 0; i < ramin->size; i += 4) +- ramin->im_backing_suspend[i/4] = nv_ri32(dev, i); ++ dev_priv->ramin_available = false; + return 0; + } + +@@ -294,18 +283,9 @@ + { + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nv50_instmem_priv *priv = dev_priv->engine.instmem.priv; +- struct nouveau_channel *chan = dev_priv->fifos[0]; +- struct nouveau_gpuobj *ramin = chan->ramin; ++ struct nouveau_channel *chan = dev_priv->channels.ptr[0]; + int i; + +- dev_priv->ramin_available = false; +- dev_priv->ramin_base = ~0; +- for (i = 0; i < ramin->size; i += 4) +- nv_wo32(ramin, i, ramin->im_backing_suspend[i/4]); +- dev_priv->ramin_available = true; +- vfree(ramin->im_backing_suspend); +- ramin->im_backing_suspend = NULL; +- + /* Poke the relevant regs, and pray it works :) */ + nv_wr32(dev, NV50_PUNK_BAR_CFG_BASE, (chan->ramin->vinst >> 12)); + nv_wr32(dev, NV50_PUNK_UNK1710, 0); +@@ -318,74 +298,95 @@ + + for (i = 0; i < 8; i++) + nv_wr32(dev, 0x1900 + (i*4), 0); ++ ++ dev_priv->ramin_available = true; + } + ++struct nv50_gpuobj_node { ++ struct nouveau_bo *vram; ++ struct drm_mm_node *ramin; ++ u32 align; ++}; ++ ++ + int +-nv50_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj, +- uint32_t *sz) ++nv50_instmem_get(struct nouveau_gpuobj *gpuobj, u32 size, u32 align) + { ++ struct drm_device *dev = gpuobj->dev; ++ struct nv50_gpuobj_node *node = NULL; + int ret; + +- if (gpuobj->im_backing) +- return -EINVAL; +- +- *sz = ALIGN(*sz, 4096); +- if (*sz == 0) +- return -EINVAL; ++ node = kzalloc(sizeof(*node), GFP_KERNEL); ++ if (!node) ++ return -ENOMEM; ++ node->align = align; + +- ret = nouveau_bo_new(dev, NULL, *sz, 0, TTM_PL_FLAG_VRAM, 0, 0x0000, +- true, false, &gpuobj->im_backing); ++ ret = nouveau_bo_new(dev, NULL, size, align, TTM_PL_FLAG_VRAM, ++ 0, 0x0000, true, false, &node->vram); + if (ret) { + NV_ERROR(dev, "error getting PRAMIN backing pages: %d\n", ret); + return ret; + } + +- ret = nouveau_bo_pin(gpuobj->im_backing, TTM_PL_FLAG_VRAM); ++ ret = nouveau_bo_pin(node->vram, TTM_PL_FLAG_VRAM); + if (ret) { + NV_ERROR(dev, "error pinning PRAMIN backing VRAM: %d\n", ret); +- nouveau_bo_ref(NULL, &gpuobj->im_backing); ++ nouveau_bo_ref(NULL, &node->vram); + return ret; + } + +- gpuobj->vinst = gpuobj->im_backing->bo.mem.start << PAGE_SHIFT; ++ gpuobj->vinst = node->vram->bo.mem.start << PAGE_SHIFT; ++ gpuobj->size = node->vram->bo.mem.num_pages << PAGE_SHIFT; ++ gpuobj->node = node; + return 0; + } + + void +-nv50_instmem_clear(struct drm_device *dev, struct nouveau_gpuobj *gpuobj) ++nv50_instmem_put(struct nouveau_gpuobj *gpuobj) + { +- struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nv50_gpuobj_node *node; + +- if (gpuobj && gpuobj->im_backing) { +- if (gpuobj->im_bound) +- dev_priv->engine.instmem.unbind(dev, gpuobj); +- nouveau_bo_unpin(gpuobj->im_backing); +- nouveau_bo_ref(NULL, &gpuobj->im_backing); +- gpuobj->im_backing = NULL; +- } ++ node = gpuobj->node; ++ gpuobj->node = NULL; ++ ++ nouveau_bo_unpin(node->vram); ++ nouveau_bo_ref(NULL, &node->vram); ++ kfree(node); + } + + int +-nv50_instmem_bind(struct drm_device *dev, struct nouveau_gpuobj *gpuobj) ++nv50_instmem_map(struct nouveau_gpuobj *gpuobj) + { +- struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct drm_nouveau_private *dev_priv = gpuobj->dev->dev_private; + struct nv50_instmem_priv *priv = dev_priv->engine.instmem.priv; +- struct nouveau_gpuobj *pramin_pt = priv->pramin_pt; +- uint32_t pte, pte_end; +- uint64_t vram; +- +- if (!gpuobj->im_backing || !gpuobj->im_pramin || gpuobj->im_bound) +- return -EINVAL; ++ struct nv50_gpuobj_node *node = gpuobj->node; ++ struct drm_device *dev = gpuobj->dev; ++ struct drm_mm_node *ramin = NULL; ++ u32 pte, pte_end; ++ u64 vram; ++ ++ do { ++ if (drm_mm_pre_get(&dev_priv->ramin_heap)) ++ return -ENOMEM; ++ ++ spin_lock(&dev_priv->ramin_lock); ++ ramin = drm_mm_search_free(&dev_priv->ramin_heap, gpuobj->size, ++ node->align, 0); ++ if (ramin == NULL) { ++ spin_unlock(&dev_priv->ramin_lock); ++ return -ENOMEM; ++ } + +- NV_DEBUG(dev, "st=0x%lx sz=0x%lx\n", +- gpuobj->im_pramin->start, gpuobj->im_pramin->size); ++ ramin = drm_mm_get_block_atomic(ramin, gpuobj->size, node->align); ++ spin_unlock(&dev_priv->ramin_lock); ++ } while (ramin == NULL); + +- pte = (gpuobj->im_pramin->start >> 12) << 1; +- pte_end = ((gpuobj->im_pramin->size >> 12) << 1) + pte; ++ pte = (ramin->start >> 12) << 1; ++ pte_end = ((ramin->size >> 12) << 1) + pte; + vram = gpuobj->vinst; + + NV_DEBUG(dev, "pramin=0x%lx, pte=%d, pte_end=%d\n", +- gpuobj->im_pramin->start, pte, pte_end); ++ ramin->start, pte, pte_end); + NV_DEBUG(dev, "first vram page: 0x%010llx\n", gpuobj->vinst); + + vram |= 1; +@@ -395,46 +396,45 @@ + } + + while (pte < pte_end) { +- nv_wo32(pramin_pt, (pte * 4) + 0, lower_32_bits(vram)); +- nv_wo32(pramin_pt, (pte * 4) + 4, upper_32_bits(vram)); ++ nv_wo32(priv->pramin_pt, (pte * 4) + 0, lower_32_bits(vram)); ++ nv_wo32(priv->pramin_pt, (pte * 4) + 4, upper_32_bits(vram)); + vram += 0x1000; + pte += 2; + } + dev_priv->engine.instmem.flush(dev); + +- nv50_vm_flush(dev, 4); + nv50_vm_flush(dev, 6); + +- gpuobj->im_bound = 1; ++ node->ramin = ramin; ++ gpuobj->pinst = ramin->start; + return 0; + } + +-int +-nv50_instmem_unbind(struct drm_device *dev, struct nouveau_gpuobj *gpuobj) ++void ++nv50_instmem_unmap(struct nouveau_gpuobj *gpuobj) + { +- struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct drm_nouveau_private *dev_priv = gpuobj->dev->dev_private; + struct nv50_instmem_priv *priv = dev_priv->engine.instmem.priv; +- uint32_t pte, pte_end; +- +- if (gpuobj->im_bound == 0) +- return -EINVAL; ++ struct nv50_gpuobj_node *node = gpuobj->node; ++ u32 pte, pte_end; + +- /* can happen during late takedown */ +- if (unlikely(!dev_priv->ramin_available)) +- return 0; ++ if (!node->ramin || !dev_priv->ramin_available) ++ return; + +- pte = (gpuobj->im_pramin->start >> 12) << 1; +- pte_end = ((gpuobj->im_pramin->size >> 12) << 1) + pte; ++ pte = (node->ramin->start >> 12) << 1; ++ pte_end = ((node->ramin->size >> 12) << 1) + pte; + + while (pte < pte_end) { + nv_wo32(priv->pramin_pt, (pte * 4) + 0, 0x00000000); + nv_wo32(priv->pramin_pt, (pte * 4) + 4, 0x00000000); + pte += 2; + } +- dev_priv->engine.instmem.flush(dev); ++ dev_priv->engine.instmem.flush(gpuobj->dev); + +- gpuobj->im_bound = 0; +- return 0; ++ spin_lock(&dev_priv->ramin_lock); ++ drm_mm_put_block(node->ramin); ++ node->ramin = NULL; ++ spin_unlock(&dev_priv->ramin_lock); + } + + void +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv84_crypt.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv84_crypt.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv84_crypt.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv84_crypt.c 2010-11-12 06:18:06.000000000 +0100 +@@ -0,0 +1,137 @@ ++/* ++ * Copyright 2010 Red Hat Inc. ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a ++ * copy of this software and associated documentation files (the "Software"), ++ * to deal in the Software without restriction, including without limitation ++ * the rights to use, copy, modify, merge, publish, distribute, sublicense, ++ * and/or sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included in ++ * all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR ++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR ++ * OTHER DEALINGS IN THE SOFTWARE. ++ * ++ * Authors: Ben Skeggs ++ */ ++ ++#include "drmP.h" ++#include "nouveau_drv.h" ++#include "nouveau_util.h" ++ ++static void nv84_crypt_isr(struct drm_device *); ++ ++int ++nv84_crypt_create_context(struct nouveau_channel *chan) ++{ ++ struct drm_device *dev = chan->dev; ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_gpuobj *ramin = chan->ramin; ++ int ret; ++ ++ NV_DEBUG(dev, "ch%d\n", chan->id); ++ ++ ret = nouveau_gpuobj_new(dev, chan, 256, 0, ++ NVOBJ_FLAG_ZERO_ALLOC | NVOBJ_FLAG_ZERO_FREE, ++ &chan->crypt_ctx); ++ if (ret) ++ return ret; ++ ++ nv_wo32(ramin, 0xa0, 0x00190000); ++ nv_wo32(ramin, 0xa4, chan->crypt_ctx->vinst + 0xff); ++ nv_wo32(ramin, 0xa8, chan->crypt_ctx->vinst); ++ nv_wo32(ramin, 0xac, 0); ++ nv_wo32(ramin, 0xb0, 0); ++ nv_wo32(ramin, 0xb4, 0); ++ ++ dev_priv->engine.instmem.flush(dev); ++ return 0; ++} ++ ++void ++nv84_crypt_destroy_context(struct nouveau_channel *chan) ++{ ++ struct drm_device *dev = chan->dev; ++ u32 inst; ++ ++ if (!chan->ramin) ++ return; ++ ++ inst = (chan->ramin->vinst >> 12); ++ inst |= 0x80000000; ++ ++ /* mark context as invalid if still on the hardware, not ++ * doing this causes issues the next time PCRYPT is used, ++ * unsurprisingly :) ++ */ ++ nv_wr32(dev, 0x10200c, 0x00000000); ++ if (nv_rd32(dev, 0x102188) == inst) ++ nv_mask(dev, 0x102188, 0x80000000, 0x00000000); ++ if (nv_rd32(dev, 0x10218c) == inst) ++ nv_mask(dev, 0x10218c, 0x80000000, 0x00000000); ++ nv_wr32(dev, 0x10200c, 0x00000010); ++ ++ nouveau_gpuobj_ref(NULL, &chan->crypt_ctx); ++} ++ ++void ++nv84_crypt_tlb_flush(struct drm_device *dev) ++{ ++ nv50_vm_flush(dev, 0x0a); ++} ++ ++int ++nv84_crypt_init(struct drm_device *dev) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_crypt_engine *pcrypt = &dev_priv->engine.crypt; ++ ++ if (!pcrypt->registered) { ++ NVOBJ_CLASS(dev, 0x74c1, CRYPT); ++ pcrypt->registered = true; ++ } ++ ++ nv_mask(dev, 0x000200, 0x00004000, 0x00000000); ++ nv_mask(dev, 0x000200, 0x00004000, 0x00004000); ++ ++ nouveau_irq_register(dev, 14, nv84_crypt_isr); ++ nv_wr32(dev, 0x102130, 0xffffffff); ++ nv_wr32(dev, 0x102140, 0xffffffbf); ++ ++ nv_wr32(dev, 0x10200c, 0x00000010); ++ return 0; ++} ++ ++void ++nv84_crypt_fini(struct drm_device *dev) ++{ ++ nv_wr32(dev, 0x102140, 0x00000000); ++ nouveau_irq_unregister(dev, 14); ++} ++ ++static void ++nv84_crypt_isr(struct drm_device *dev) ++{ ++ u32 stat = nv_rd32(dev, 0x102130); ++ u32 mthd = nv_rd32(dev, 0x102190); ++ u32 data = nv_rd32(dev, 0x102194); ++ u32 inst = nv_rd32(dev, 0x102188) & 0x7fffffff; ++ int show = nouveau_ratelimit(); ++ ++ if (show) { ++ NV_INFO(dev, "PCRYPT_INTR: 0x%08x 0x%08x 0x%08x 0x%08x\n", ++ stat, mthd, data, inst); ++ } ++ ++ nv_wr32(dev, 0x102130, stat); ++ nv_wr32(dev, 0x10200c, 0x10); ++ ++ nv50_fb_vm_trap(dev, show, "PCRYPT"); ++} +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nvc0_instmem.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nvc0_instmem.c +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nvc0_instmem.c 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nvc0_instmem.c 2010-11-12 06:18:06.000000000 +0100 +@@ -26,67 +26,89 @@ + + #include "nouveau_drv.h" + ++struct nvc0_gpuobj_node { ++ struct nouveau_bo *vram; ++ struct drm_mm_node *ramin; ++ u32 align; ++}; ++ + int +-nvc0_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj, +- uint32_t *size) ++nvc0_instmem_get(struct nouveau_gpuobj *gpuobj, u32 size, u32 align) + { ++ struct drm_device *dev = gpuobj->dev; ++ struct nvc0_gpuobj_node *node = NULL; + int ret; + +- *size = ALIGN(*size, 4096); +- if (*size == 0) +- return -EINVAL; ++ node = kzalloc(sizeof(*node), GFP_KERNEL); ++ if (!node) ++ return -ENOMEM; ++ node->align = align; + +- ret = nouveau_bo_new(dev, NULL, *size, 0, TTM_PL_FLAG_VRAM, 0, 0x0000, +- true, false, &gpuobj->im_backing); ++ ret = nouveau_bo_new(dev, NULL, size, align, TTM_PL_FLAG_VRAM, ++ 0, 0x0000, true, false, &node->vram); + if (ret) { + NV_ERROR(dev, "error getting PRAMIN backing pages: %d\n", ret); + return ret; + } + +- ret = nouveau_bo_pin(gpuobj->im_backing, TTM_PL_FLAG_VRAM); ++ ret = nouveau_bo_pin(node->vram, TTM_PL_FLAG_VRAM); + if (ret) { + NV_ERROR(dev, "error pinning PRAMIN backing VRAM: %d\n", ret); +- nouveau_bo_ref(NULL, &gpuobj->im_backing); ++ nouveau_bo_ref(NULL, &node->vram); + return ret; + } + +- gpuobj->vinst = gpuobj->im_backing->bo.mem.start << PAGE_SHIFT; ++ gpuobj->vinst = node->vram->bo.mem.start << PAGE_SHIFT; ++ gpuobj->size = node->vram->bo.mem.num_pages << PAGE_SHIFT; ++ gpuobj->node = node; + return 0; + } + + void +-nvc0_instmem_clear(struct drm_device *dev, struct nouveau_gpuobj *gpuobj) ++nvc0_instmem_put(struct nouveau_gpuobj *gpuobj) + { +- struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nvc0_gpuobj_node *node; + +- if (gpuobj && gpuobj->im_backing) { +- if (gpuobj->im_bound) +- dev_priv->engine.instmem.unbind(dev, gpuobj); +- nouveau_bo_unpin(gpuobj->im_backing); +- nouveau_bo_ref(NULL, &gpuobj->im_backing); +- gpuobj->im_backing = NULL; +- } ++ node = gpuobj->node; ++ gpuobj->node = NULL; ++ ++ nouveau_bo_unpin(node->vram); ++ nouveau_bo_ref(NULL, &node->vram); ++ kfree(node); + } + + int +-nvc0_instmem_bind(struct drm_device *dev, struct nouveau_gpuobj *gpuobj) ++nvc0_instmem_map(struct nouveau_gpuobj *gpuobj) + { +- struct drm_nouveau_private *dev_priv = dev->dev_private; +- uint32_t pte, pte_end; +- uint64_t vram; +- +- if (!gpuobj->im_backing || !gpuobj->im_pramin || gpuobj->im_bound) +- return -EINVAL; +- +- NV_DEBUG(dev, "st=0x%lx sz=0x%lx\n", +- gpuobj->im_pramin->start, gpuobj->im_pramin->size); ++ struct drm_nouveau_private *dev_priv = gpuobj->dev->dev_private; ++ struct nvc0_gpuobj_node *node = gpuobj->node; ++ struct drm_device *dev = gpuobj->dev; ++ struct drm_mm_node *ramin = NULL; ++ u32 pte, pte_end; ++ u64 vram; ++ ++ do { ++ if (drm_mm_pre_get(&dev_priv->ramin_heap)) ++ return -ENOMEM; ++ ++ spin_lock(&dev_priv->ramin_lock); ++ ramin = drm_mm_search_free(&dev_priv->ramin_heap, gpuobj->size, ++ node->align, 0); ++ if (ramin == NULL) { ++ spin_unlock(&dev_priv->ramin_lock); ++ return -ENOMEM; ++ } ++ ++ ramin = drm_mm_get_block_atomic(ramin, gpuobj->size, node->align); ++ spin_unlock(&dev_priv->ramin_lock); ++ } while (ramin == NULL); + +- pte = gpuobj->im_pramin->start >> 12; +- pte_end = (gpuobj->im_pramin->size >> 12) + pte; ++ pte = (ramin->start >> 12) << 1; ++ pte_end = ((ramin->size >> 12) << 1) + pte; + vram = gpuobj->vinst; + + NV_DEBUG(dev, "pramin=0x%lx, pte=%d, pte_end=%d\n", +- gpuobj->im_pramin->start, pte, pte_end); ++ ramin->start, pte, pte_end); + NV_DEBUG(dev, "first vram page: 0x%010llx\n", gpuobj->vinst); + + while (pte < pte_end) { +@@ -103,30 +125,35 @@ + nv_wr32(dev, 0x100cbc, 0x80000005); + } + +- gpuobj->im_bound = 1; ++ node->ramin = ramin; ++ gpuobj->pinst = ramin->start; + return 0; + } + +-int +-nvc0_instmem_unbind(struct drm_device *dev, struct nouveau_gpuobj *gpuobj) ++void ++nvc0_instmem_unmap(struct nouveau_gpuobj *gpuobj) + { +- struct drm_nouveau_private *dev_priv = dev->dev_private; +- uint32_t pte, pte_end; ++ struct drm_nouveau_private *dev_priv = gpuobj->dev->dev_private; ++ struct nvc0_gpuobj_node *node = gpuobj->node; ++ u32 pte, pte_end; ++ ++ if (!node->ramin || !dev_priv->ramin_available) ++ return; + +- if (gpuobj->im_bound == 0) +- return -EINVAL; ++ pte = (node->ramin->start >> 12) << 1; ++ pte_end = ((node->ramin->size >> 12) << 1) + pte; + +- pte = gpuobj->im_pramin->start >> 12; +- pte_end = (gpuobj->im_pramin->size >> 12) + pte; + while (pte < pte_end) { +- nv_wr32(dev, 0x702000 + (pte * 8), 0); +- nv_wr32(dev, 0x702004 + (pte * 8), 0); ++ nv_wr32(gpuobj->dev, 0x702000 + (pte * 8), 0); ++ nv_wr32(gpuobj->dev, 0x702004 + (pte * 8), 0); + pte++; + } +- dev_priv->engine.instmem.flush(dev); ++ dev_priv->engine.instmem.flush(gpuobj->dev); + +- gpuobj->im_bound = 0; +- return 0; ++ spin_lock(&dev_priv->ramin_lock); ++ drm_mm_put_block(node->ramin); ++ node->ramin = NULL; ++ spin_unlock(&dev_priv->ramin_lock); + } + + void +diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nvreg.h linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nvreg.h +--- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nvreg.h 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nvreg.h 2010-11-12 06:18:06.000000000 +0100 +@@ -153,7 +153,8 @@ + #define NV_PCRTC_START 0x00600800 + #define NV_PCRTC_CONFIG 0x00600804 + # define NV_PCRTC_CONFIG_START_ADDRESS_NON_VGA (1 << 0) +-# define NV_PCRTC_CONFIG_START_ADDRESS_HSYNC (2 << 0) ++# define NV04_PCRTC_CONFIG_START_ADDRESS_HSYNC (4 << 0) ++# define NV10_PCRTC_CONFIG_START_ADDRESS_HSYNC (2 << 0) + #define NV_PCRTC_CURSOR_CONFIG 0x00600810 + # define NV_PCRTC_CURSOR_CONFIG_ENABLE_ENABLE (1 << 0) + # define NV_PCRTC_CURSOR_CONFIG_DOUBLE_SCAN_ENABLE (1 << 4) +diff -Naur linux-2.6.37-rc1/include/drm/nouveau_drm.h linux-2.6.37-rc1.nouveau/include/drm/nouveau_drm.h +--- linux-2.6.37-rc1/include/drm/nouveau_drm.h 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.nouveau/include/drm/nouveau_drm.h 2010-11-12 06:18:06.000000000 +0100 +@@ -80,6 +80,8 @@ + #define NOUVEAU_GETPARAM_VM_VRAM_BASE 12 + #define NOUVEAU_GETPARAM_GRAPH_UNITS 13 + #define NOUVEAU_GETPARAM_PTIMER_TIME 14 ++#define NOUVEAU_GETPARAM_HAS_BO_USAGE 15 ++#define NOUVEAU_GETPARAM_HAS_PAGEFLIP 16 + struct drm_nouveau_getparam { + uint64_t param; + uint64_t value; +@@ -95,6 +97,12 @@ + #define NOUVEAU_GEM_DOMAIN_GART (1 << 2) + #define NOUVEAU_GEM_DOMAIN_MAPPABLE (1 << 3) + ++#define NOUVEAU_GEM_TILE_LAYOUT_MASK 0x0000ff00 ++#define NOUVEAU_GEM_TILE_16BPP 0x00000001 ++#define NOUVEAU_GEM_TILE_32BPP 0x00000002 ++#define NOUVEAU_GEM_TILE_ZETA 0x00000004 ++#define NOUVEAU_GEM_TILE_NONCONTIG 0x00000008 ++ + struct drm_nouveau_gem_info { + uint32_t handle; + uint32_t domain; +@@ -164,7 +172,6 @@ + }; + + #define NOUVEAU_GEM_CPU_PREP_NOWAIT 0x00000001 +-#define NOUVEAU_GEM_CPU_PREP_NOBLOCK 0x00000002 + #define NOUVEAU_GEM_CPU_PREP_WRITE 0x00000004 + struct drm_nouveau_gem_cpu_prep { + uint32_t handle; diff --git a/projects/ATV/options b/projects/ATV/options index ee2a8b8708..ddb04a5319 100644 --- a/projects/ATV/options +++ b/projects/ATV/options @@ -134,6 +134,9 @@ # use Mesa-master (latest git) instead latest released version MESA_MASTER="yes" +# use linux-next (latest rc) instead latest released version + LINUX_NEXT="yes" + # Use VDPAU video acceleration (needs nVidia driver and a supported card) VDPAU="no" diff --git a/projects/ION/options b/projects/ION/options index 209efb238d..f7d5cd9c35 100644 --- a/projects/ION/options +++ b/projects/ION/options @@ -134,6 +134,9 @@ # use Mesa-master (latest git) instead latest released version MESA_MASTER="no" +# use linux-next (latest rc) instead latest released version + LINUX_NEXT="no" + # Use VDPAU video acceleration (needs nVidia driver and a supported card) VDPAU="yes" diff --git a/projects/generic/options b/projects/generic/options index fe71dad5e9..efa94a9555 100644 --- a/projects/generic/options +++ b/projects/generic/options @@ -134,7 +134,10 @@ # use Mesa-master (latest git) instead latest released version MESA_MASTER="no" -# Use VDPAU video acceleration (needs nVidia driver and a supported card) +# Use VDPAU video# use linux-next (latest rc) instead latest released version + LINUX_NEXT="no" + +# acceleration (needs nVidia driver and a supported card) VDPAU="yes" # Use VAAPI video acceleration (needs intel i965 driver and a supported card) diff --git a/projects/intel/options b/projects/intel/options index 8758d44965..01c30a808a 100644 --- a/projects/intel/options +++ b/projects/intel/options @@ -134,6 +134,9 @@ # use Mesa-master (latest git) instead latest released version MESA_MASTER="no" +# use linux-next (latest rc) instead latest released version + LINUX_NEXT="no" + # Use VDPAU video acceleration (needs nVidia driver and a supported card) VDPAU="no" From 7435561833b657fb076ce92991f93270dc3d5bba Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 12 Nov 2010 23:15:16 +0100 Subject: [PATCH 146/850] eglibc: update to eglibc-2.12-12025 Signed-off-by: Stephan Raue --- packages/toolchain/devel/eglibc/url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/toolchain/devel/eglibc/url b/packages/toolchain/devel/eglibc/url index 2c9e705a87..7e5dfbb011 100644 --- a/packages/toolchain/devel/eglibc/url +++ b/packages/toolchain/devel/eglibc/url @@ -1 +1 @@ -http://sources.openelec.tv/svn/eglibc-2.12-11663.tar.bz2 +http://sources.openelec.tv/svn/eglibc-2.12-12025.tar.bz2 From ef97c8f10bc1233974d5cba2f54666e9127593b0 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 10:48:17 +0100 Subject: [PATCH 147/850] transmission: add option to setup downloaddir Signed-off-by: Stephan Raue --- .../network/transmission/config/transmission.conf | 4 ++++ .../transmission/init.network/43_transmission | 13 ++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/network/transmission/config/transmission.conf b/packages/network/transmission/config/transmission.conf index 2e14ca89e8..2573794204 100644 --- a/packages/network/transmission/config/transmission.conf +++ b/packages/network/transmission/config/transmission.conf @@ -20,6 +20,10 @@ # password for logging to the webfrontend TRANSMISSION_PWD="openelec" +# Download directory for downloaded files +# Leave blank to use the 'standard' download dir /storage/downloads + TRANSMISSION_DLDIR="" + # Incoming directory for non completed files # Relative to 'Downloads' directory # Set to "none" to disable diff --git a/packages/network/transmission/init.network/43_transmission b/packages/network/transmission/init.network/43_transmission index 8169d9636e..fe3316a1c0 100755 --- a/packages/network/transmission/init.network/43_transmission +++ b/packages/network/transmission/init.network/43_transmission @@ -33,7 +33,10 @@ progress "Starting Transmission BT daemon" - TRANSMISSION_ARG="$TRANSMISSION_ARG -w /storage/downloads" + [ -z "$TRANSMISSION_DLDIR" ] && TRANSMISSION_DLDIR="/storage/downloads" + mkdir -p "$TRANSMISSION_DLDIR" + + TRANSMISSION_ARG="$TRANSMISSION_ARG -w $TRANSMISSION_DLDIR" TRANSMISSION_ARG="$TRANSMISSION_ARG -e /var/log/transmission.log" TRANSMISSION_ARG="$TRANSMISSION_ARG -g /storage/.cache/transmission" TRANSMISSION_ARG="$TRANSMISSION_ARG -a $TRANSMISSION_IP" @@ -50,16 +53,16 @@ TRANSMISSION_ARG="$TRANSMISSION_ARG --no-incomplete-dir" else TRANSMISSION_ARG="$TRANSMISSION_ARG --incomplete-dir \ - /storage/downloads/$TRANSMISSION_INCDIR" - $IONICE mkdir -p /storage/downloads/$TRANSMISSION_INCDIR + /$TRANSMISSION_DLDIR/$TRANSMISSION_INCDIR" + $IONICE mkdir -p /$TRANSMISSION_DLDIR/$TRANSMISSION_INCDIR fi if [ "$TRANSMISSION_WATCHDIR" = "none" ]; then TRANSMISSION_ARG="$TRANSMISSION_ARG --no-watch-dir" else TRANSMISSION_ARG="$TRANSMISSION_ARG --watch-dir \ - /storage/downloads/$TRANSMISSION_WATCHDIR" - $IONICE mkdir -p /storage/downloads/$TRANSMISSION_WATCHDIR + /$TRANSMISSION_DLDIR/$TRANSMISSION_WATCHDIR" + $IONICE mkdir -p /$TRANSMISSION_DLDIR/$TRANSMISSION_WATCHDIR fi transmission-daemon $TRANSMISSION_ARG From c72aed3d6e160b18a9ef29d460ba4fed15d3498c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 10:49:18 +0100 Subject: [PATCH 148/850] xbmc: dont install *.orig files (created from various patches) Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc/install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mediacenter/xbmc/install b/packages/mediacenter/xbmc/install index 682f8f53e5..d876c3f28a 100755 --- a/packages/mediacenter/xbmc/install +++ b/packages/mediacenter/xbmc/install @@ -21,7 +21,7 @@ cd $PKG_BUILD find addons language media scripts sounds userdata system \ -regextype posix-extended -type f \ - -not -iregex ".*-linux.*|.*\.vis|.*\.xbs|.*svn.*|.*\.so|.*\.dll|.*\.pyd|.*python/.*\.zlib" \ + -not -iregex ".*-linux.*|.*\.vis|.*\.xbs|.*svn.*|.*\.orig|.*\.so|.*\.dll|.*\.pyd|.*python/.*\.zlib" \ -exec install -D -m 0644 "{}" $ROOT/$INSTALL/usr/share/xbmc/"{}" ";" cd - From d4a525bd97e717fee07738eb6265b324b8b4022a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 10:49:31 +0100 Subject: [PATCH 149/850] xbmc-dharma: dont install *.orig files (created from various patches) Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc-dharma/install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mediacenter/xbmc-dharma/install b/packages/mediacenter/xbmc-dharma/install index 682f8f53e5..d876c3f28a 100755 --- a/packages/mediacenter/xbmc-dharma/install +++ b/packages/mediacenter/xbmc-dharma/install @@ -21,7 +21,7 @@ cd $PKG_BUILD find addons language media scripts sounds userdata system \ -regextype posix-extended -type f \ - -not -iregex ".*-linux.*|.*\.vis|.*\.xbs|.*svn.*|.*\.so|.*\.dll|.*\.pyd|.*python/.*\.zlib" \ + -not -iregex ".*-linux.*|.*\.vis|.*\.xbs|.*svn.*|.*\.orig|.*\.so|.*\.dll|.*\.pyd|.*python/.*\.zlib" \ -exec install -D -m 0644 "{}" $ROOT/$INSTALL/usr/share/xbmc/"{}" ";" cd - From b0c97fd8916acabf2e60cf65340aa90e588ace1b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 13:41:32 +0100 Subject: [PATCH 150/850] curl: rename patches Signed-off-by: Stephan Raue --- ...d-dns-multi.diff => curl-7.21.2-0108-threaded_dns_multi.patch} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/web/curl/patches/{0108-curl-7.20.1-threaded-dns-multi.diff => curl-7.21.2-0108-threaded_dns_multi.patch} (100%) diff --git a/packages/web/curl/patches/0108-curl-7.20.1-threaded-dns-multi.diff b/packages/web/curl/patches/curl-7.21.2-0108-threaded_dns_multi.patch similarity index 100% rename from packages/web/curl/patches/0108-curl-7.20.1-threaded-dns-multi.diff rename to packages/web/curl/patches/curl-7.21.2-0108-threaded_dns_multi.patch From 8f2f6394dceb1bfd234753807472937ca1d33630 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 13:42:13 +0100 Subject: [PATCH 151/850] strace: add metafile support, cleanups Signed-off-by: Stephan Raue --- packages/debug/strace/build | 3 +-- packages/debug/strace/install | 2 +- packages/debug/strace/meta | 14 ++++++++++++++ packages/debug/strace/url | 1 - 4 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 packages/debug/strace/meta delete mode 100644 packages/debug/strace/url diff --git a/packages/debug/strace/build b/packages/debug/strace/build index 8d7a888fc0..39c2b51643 100755 --- a/packages/debug/strace/build +++ b/packages/debug/strace/build @@ -2,9 +2,8 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME + make diff --git a/packages/debug/strace/install b/packages/debug/strace/install index b0a66ddf9c..d2561a25f3 100755 --- a/packages/debug/strace/install +++ b/packages/debug/strace/install @@ -3,4 +3,4 @@ . config/options $1 mkdir -p $INSTALL/usr/bin -cp $PKG_BUILD/strace $INSTALL/usr/bin + cp $PKG_BUILD/strace $INSTALL/usr/bin diff --git a/packages/debug/strace/meta b/packages/debug/strace/meta new file mode 100644 index 0000000000..2cb0a1aa35 --- /dev/null +++ b/packages/debug/strace/meta @@ -0,0 +1,14 @@ +PKG_NAME="strace" +PKG_VERSION="4.5.20" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="BSD" +PKG_SITE="http://sourceforge.net/projects/strace/" +PKG_URL="http://downloads.sourceforge.net/project/strace/strace/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="debug" +PKG_SHORTDESC="strace: Trace system calls and signals" +PKG_LONGDESC="In the simplest case strace runs the specified command until it exits. It intercepts and records the system calls which are called by a process and the signals which are received by a process. The name of each system call, its arguments and its return value are printed on standard error or to the file specified with the -o option." +PKG_IS_ADDON="no" diff --git a/packages/debug/strace/url b/packages/debug/strace/url deleted file mode 100644 index a67ee6c1e1..0000000000 --- a/packages/debug/strace/url +++ /dev/null @@ -1 +0,0 @@ -http://downloads.sourceforge.net/project/strace/strace/4.5.20/strace-4.5.20.tar.bz2 \ No newline at end of file From 663498d0e8701dc0e3e9713775de6e7d02208f17 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 13:42:30 +0100 Subject: [PATCH 152/850] nano: add metafile support, cleanups Signed-off-by: Stephan Raue --- packages/debug/nano/build | 4 ---- packages/debug/nano/install | 2 -- packages/debug/nano/meta | 14 ++++++++++++++ packages/debug/nano/url | 1 - 4 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 packages/debug/nano/meta delete mode 100644 packages/debug/nano/url diff --git a/packages/debug/nano/build b/packages/debug/nano/build index f607cf6eea..20a4f0aeb0 100755 --- a/packages/debug/nano/build +++ b/packages/debug/nano/build @@ -2,11 +2,7 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build ncurses - cd $PKG_BUILD - ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ diff --git a/packages/debug/nano/install b/packages/debug/nano/install index 8ece062176..4752c489bb 100755 --- a/packages/debug/nano/install +++ b/packages/debug/nano/install @@ -2,7 +2,5 @@ . config/options $1 -$SCRIPTS/install ncurses - mkdir -p $INSTALL/usr/bin cp $PKG_BUILD/src/nano $INSTALL/usr/bin diff --git a/packages/debug/nano/meta b/packages/debug/nano/meta new file mode 100644 index 0000000000..ccce389b1d --- /dev/null +++ b/packages/debug/nano/meta @@ -0,0 +1,14 @@ +PKG_NAME="nano" +PKG_VERSION="2.2.5" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.nano-editor.org/" +PKG_URL="http://www.nano-editor.org/dist/v2.2/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="ncurses" +PKG_BUILD_DEPENDS="toolchain ncurses" +PKG_PRIORITY="optional" +PKG_SECTION="debug" +PKG_SHORTDESC="nano: Pico editor clone with enhancements" +PKG_LONGDESC="GNU nano (Nano's ANOther editor, or Not ANOther editor) is an enhanced clone of the Pico text editor." +PKG_IS_ADDON="no" diff --git a/packages/debug/nano/url b/packages/debug/nano/url deleted file mode 100644 index 3a76d3ecd8..0000000000 --- a/packages/debug/nano/url +++ /dev/null @@ -1 +0,0 @@ -http://www.nano-editor.org/dist/v2.2/nano-2.2.5.tar.gz \ No newline at end of file From ee44a66b6f2a30f6ecb4e1901e0cafe5709d38ff Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 13:42:48 +0100 Subject: [PATCH 153/850] mesa-demos: add metafile support, cleanups Signed-off-by: Stephan Raue --- packages/debug/mesa-demos/build | 5 ----- packages/debug/mesa-demos/install | 4 ---- packages/debug/mesa-demos/meta | 14 ++++++++++++++ packages/debug/mesa-demos/url | 1 - 4 files changed, 14 insertions(+), 10 deletions(-) create mode 100644 packages/debug/mesa-demos/meta delete mode 100644 packages/debug/mesa-demos/url diff --git a/packages/debug/mesa-demos/build b/packages/debug/mesa-demos/build index 1c61867820..18a451af7d 100755 --- a/packages/debug/mesa-demos/build +++ b/packages/debug/mesa-demos/build @@ -2,11 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build libX11 -$SCRIPTS/build Mesa -$SCRIPTS/build glew - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/debug/mesa-demos/install b/packages/debug/mesa-demos/install index 4dd826ce32..27269826c4 100755 --- a/packages/debug/mesa-demos/install +++ b/packages/debug/mesa-demos/install @@ -2,10 +2,6 @@ . config/options $1 -$SCRIPTS/install libX11 -$SCRIPTS/install Mesa -$SCRIPTS/install glew - mkdir -p $INSTALL/usr/bin cp $PKG_BUILD/src/xdemos/glxdemo $INSTALL/usr/bin cp $PKG_BUILD/src/xdemos/glxgears $INSTALL/usr/bin diff --git a/packages/debug/mesa-demos/meta b/packages/debug/mesa-demos/meta new file mode 100644 index 0000000000..a3a600b2fc --- /dev/null +++ b/packages/debug/mesa-demos/meta @@ -0,0 +1,14 @@ +PKG_NAME="mesa-demos" +PKG_VERSION="8.0.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.mesa3d.org/" +PKG_URL="ftp://ftp.freedesktop.org/pub/mesa/demos/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="libX11 Mesa glew" +PKG_BUILD_DEPENDS="toolchain libX11 Mesa glew" +PKG_PRIORITY="optional" +PKG_SECTION="debug" +PKG_SHORTDESC="mesa-demos: Mesa 3D demos" +PKG_LONGDESC="Mesa 3D demos - installed are the well known glxinfo and glxgears." +PKG_IS_ADDON="no" diff --git a/packages/debug/mesa-demos/url b/packages/debug/mesa-demos/url deleted file mode 100644 index a4475f5458..0000000000 --- a/packages/debug/mesa-demos/url +++ /dev/null @@ -1 +0,0 @@ -ftp://ftp.freedesktop.org/pub/mesa/demos/8.0.1/mesa-demos-8.0.1.tar.bz2 \ No newline at end of file From 42bf6689e46944f965c485d9377dc7a0656727fe Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 13:43:06 +0100 Subject: [PATCH 154/850] gdb: add metafile support, cleanups Signed-off-by: Stephan Raue --- packages/debug/gdb/build | 8 +------- packages/debug/gdb/install | 3 --- packages/debug/gdb/meta | 14 ++++++++++++++ ...libc-conf.diff => gdb-7.2-10-uclibc_conf.patch} | 0 packages/debug/gdb/url | 1 - 5 files changed, 15 insertions(+), 11 deletions(-) create mode 100644 packages/debug/gdb/meta rename packages/debug/gdb/patches/{10_uclibc-conf.diff => gdb-7.2-10-uclibc_conf.patch} (100%) delete mode 100644 packages/debug/gdb/url diff --git a/packages/debug/gdb/build b/packages/debug/gdb/build index a26d4edf63..5fdfd8841d 100755 --- a/packages/debug/gdb/build +++ b/packages/debug/gdb/build @@ -2,19 +2,13 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build ncurses -$SCRIPTS/build expat - export bash_cv_have_mbstate_t=set export CC_FOR_BUILD="$HOST_CC" export CFLAGS_FOR_BUILD="$HOST_CFLAGS" cd $PKG_BUILD - -mkdir -p objdir -cd objdir +mkdir -p objdir && cd objdir ../configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/debug/gdb/install b/packages/debug/gdb/install index 1222bd6f49..cb8a30b488 100755 --- a/packages/debug/gdb/install +++ b/packages/debug/gdb/install @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/install ncurses -$SCRIPTS/install expat - mkdir -p $INSTALL/usr/bin cp $PKG_BUILD/objdir/$1/$1 $INSTALL/usr/bin cp $PKG_BUILD/objdir/$1/gdbserver/gdbserver $INSTALL/usr/bin diff --git a/packages/debug/gdb/meta b/packages/debug/gdb/meta new file mode 100644 index 0000000000..25b3f9037c --- /dev/null +++ b/packages/debug/gdb/meta @@ -0,0 +1,14 @@ +PKG_NAME="gdb" +PKG_VERSION="7.2" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.gnu.org/software/gdb/" +PKG_URL="http://ftp.gnu.org/gnu/gdb/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="ncurses expat" +PKG_BUILD_DEPENDS="toolchain ncurses expat" +PKG_PRIORITY="optional" +PKG_SECTION="debug" +PKG_SHORTDESC="gdb: The GNU Debugger" +PKG_LONGDESC="The purpose of a debugger such as GDB is to allow you to see what is going on ``inside'' another program while it executes--or what another program was doing at the moment it crashed." +PKG_IS_ADDON="no" diff --git a/packages/debug/gdb/patches/10_uclibc-conf.diff b/packages/debug/gdb/patches/gdb-7.2-10-uclibc_conf.patch similarity index 100% rename from packages/debug/gdb/patches/10_uclibc-conf.diff rename to packages/debug/gdb/patches/gdb-7.2-10-uclibc_conf.patch diff --git a/packages/debug/gdb/url b/packages/debug/gdb/url deleted file mode 100644 index b32860c061..0000000000 --- a/packages/debug/gdb/url +++ /dev/null @@ -1 +0,0 @@ -http://ftp.gnu.org/gnu/gdb/gdb-7.2.tar.bz2 \ No newline at end of file From bd9778e5863f894ef70db7b153368ae206a41920 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 13:43:39 +0100 Subject: [PATCH 155/850] mysql: rename patches Signed-off-by: Stephan Raue --- ..._crosscompiling.diff => mysql-5.1.52-010_crosscompiling.patch} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/databases/mysql/patches/{10_mysql-5.1.38_crosscompiling.diff => mysql-5.1.52-010_crosscompiling.patch} (100%) diff --git a/packages/databases/mysql/patches/10_mysql-5.1.38_crosscompiling.diff b/packages/databases/mysql/patches/mysql-5.1.52-010_crosscompiling.patch similarity index 100% rename from packages/databases/mysql/patches/10_mysql-5.1.38_crosscompiling.diff rename to packages/databases/mysql/patches/mysql-5.1.52-010_crosscompiling.patch From 3a50dfc01f71c44a394a41a471dc74b86a183025 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 13:43:56 +0100 Subject: [PATCH 156/850] sqlite: rename patches Signed-off-by: Stephan Raue --- .../patches/{30_ldflags.diff => sqlite-3.7.3-010_ldflags.patch} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/databases/sqlite/patches/{30_ldflags.diff => sqlite-3.7.3-010_ldflags.patch} (100%) diff --git a/packages/databases/sqlite/patches/30_ldflags.diff b/packages/databases/sqlite/patches/sqlite-3.7.3-010_ldflags.patch similarity index 100% rename from packages/databases/sqlite/patches/30_ldflags.diff rename to packages/databases/sqlite/patches/sqlite-3.7.3-010_ldflags.patch From db3310583257ea538110da7303b39a8cd2ba12dd Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 13:44:17 +0100 Subject: [PATCH 157/850] SDL: rename patches Signed-off-by: Stephan Raue --- ...-audiodriver.diff => SDL-1.2.14-audiodriver.patch} | 0 .../SDL/patches/SDL-1.2.14-disable_yasm.diff | 11 ----------- ...1.2.13-rh484362.diff => SDL-1.2.14-rh484362.patch} | 0 3 files changed, 11 deletions(-) rename packages/multimedia/SDL/patches/{SDL-1.2.14-audiodriver.diff => SDL-1.2.14-audiodriver.patch} (100%) delete mode 100644 packages/multimedia/SDL/patches/SDL-1.2.14-disable_yasm.diff rename packages/multimedia/SDL/patches/{SDL-1.2.13-rh484362.diff => SDL-1.2.14-rh484362.patch} (100%) diff --git a/packages/multimedia/SDL/patches/SDL-1.2.14-audiodriver.diff b/packages/multimedia/SDL/patches/SDL-1.2.14-audiodriver.patch similarity index 100% rename from packages/multimedia/SDL/patches/SDL-1.2.14-audiodriver.diff rename to packages/multimedia/SDL/patches/SDL-1.2.14-audiodriver.patch diff --git a/packages/multimedia/SDL/patches/SDL-1.2.14-disable_yasm.diff b/packages/multimedia/SDL/patches/SDL-1.2.14-disable_yasm.diff deleted file mode 100644 index 6411eaf0b2..0000000000 --- a/packages/multimedia/SDL/patches/SDL-1.2.14-disable_yasm.diff +++ /dev/null @@ -1,11 +0,0 @@ -diff -Nur SDL-1.2.14/configure.in SDL-1.2.14-new/configure.in ---- SDL-1.2.14/configure.in 2009-10-18 01:35:03.000000000 +0800 -+++ SDL-1.2.14-new/configure.in 2010-01-08 15:14:09.000000000 +0800 -@@ -745,7 +745,6 @@ - esac - fi - -- AC_PATH_PROG(NASM, yasm) - echo "%ifidn __OUTPUT_FORMAT__,elf" > unquoted-sections - echo "section .note.GNU-stack noalloc noexec nowrite progbits" >> unquoted-sections - echo "%endif" >> unquoted-sections diff --git a/packages/multimedia/SDL/patches/SDL-1.2.13-rh484362.diff b/packages/multimedia/SDL/patches/SDL-1.2.14-rh484362.patch similarity index 100% rename from packages/multimedia/SDL/patches/SDL-1.2.13-rh484362.diff rename to packages/multimedia/SDL/patches/SDL-1.2.14-rh484362.patch From 898c2841ead52159beeb3d0ac7ca6b7d2085e2f4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 13:44:42 +0100 Subject: [PATCH 158/850] speex: rename patches Signed-off-by: Stephan Raue --- ..._includes.diff => speex-1.2rc1-001-remove_host_includes.patch} | 0 ...10_disable-utils.diff => speex-1.2rc1-010_disable-utils.patch} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename packages/audio/speex/patches/{001-remove_host_includes.diff => speex-1.2rc1-001-remove_host_includes.patch} (100%) rename packages/audio/speex/patches/{10_disable-utils.diff => speex-1.2rc1-010_disable-utils.patch} (100%) diff --git a/packages/audio/speex/patches/001-remove_host_includes.diff b/packages/audio/speex/patches/speex-1.2rc1-001-remove_host_includes.patch similarity index 100% rename from packages/audio/speex/patches/001-remove_host_includes.diff rename to packages/audio/speex/patches/speex-1.2rc1-001-remove_host_includes.patch diff --git a/packages/audio/speex/patches/10_disable-utils.diff b/packages/audio/speex/patches/speex-1.2rc1-010_disable-utils.patch similarity index 100% rename from packages/audio/speex/patches/10_disable-utils.diff rename to packages/audio/speex/patches/speex-1.2rc1-010_disable-utils.patch From d0614f10c33f70fc32b51687d1425a2d30e87853 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 13:46:30 +0100 Subject: [PATCH 159/850] rtl8192se: rename patches Signed-off-by: Stephan Raue --- ...iff => rtl8192se-0018.1025.2010-add_missing_include-0.1.patch} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/drivers/rtl8192se/patches/{rtl8192se-add_missing_include-0.1.diff => rtl8192se-0018.1025.2010-add_missing_include-0.1.patch} (100%) diff --git a/packages/drivers/rtl8192se/patches/rtl8192se-add_missing_include-0.1.diff b/packages/drivers/rtl8192se/patches/rtl8192se-0018.1025.2010-add_missing_include-0.1.patch similarity index 100% rename from packages/drivers/rtl8192se/patches/rtl8192se-add_missing_include-0.1.diff rename to packages/drivers/rtl8192se/patches/rtl8192se-0018.1025.2010-add_missing_include-0.1.patch From da974436a5f22e8c2dfdbbf64bb021fe8097ecbe Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 13:47:04 +0100 Subject: [PATCH 160/850] libvorbis: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/audio/libvorbis/build | 5 +---- packages/audio/libvorbis/install | 3 +-- packages/audio/libvorbis/meta | 14 ++++++++++++++ packages/audio/libvorbis/url | 1 - 4 files changed, 16 insertions(+), 7 deletions(-) create mode 100644 packages/audio/libvorbis/meta delete mode 100644 packages/audio/libvorbis/url diff --git a/packages/audio/libvorbis/build b/packages/audio/libvorbis/build index c62ccd3d5d..63cee8f9eb 100755 --- a/packages/audio/libvorbis/build +++ b/packages/audio/libvorbis/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build libogg - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -14,6 +11,6 @@ cd $PKG_BUILD --enable-shared \ --with-ogg=$SYSROOT_PREFIX/usr -$MAKE +make $MAKEINSTALL diff --git a/packages/audio/libvorbis/install b/packages/audio/libvorbis/install index 2a81499420..bed96af141 100755 --- a/packages/audio/libvorbis/install +++ b/packages/audio/libvorbis/install @@ -1,7 +1,6 @@ #!/bin/sh . config/options $1 -$SCRIPTS/install libogg mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/lib/.libs/libvorbis*.so*[.0-9] $INSTALL/usr/lib + cp -P $PKG_BUILD/lib/.libs/libvorbis*.so*[.0-9] $INSTALL/usr/lib diff --git a/packages/audio/libvorbis/meta b/packages/audio/libvorbis/meta new file mode 100644 index 0000000000..72a9918d7b --- /dev/null +++ b/packages/audio/libvorbis/meta @@ -0,0 +1,14 @@ +PKG_NAME="libvorbis" +PKG_VERSION="1.3.2" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="BSD" +PKG_SITE="http://www.vorbis.com/" +PKG_URL="http://downloads.xiph.org/releases/vorbis/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="libogg" +PKG_BUILD_DEPENDS="toolchain libogg" +PKG_PRIORITY="optional" +PKG_SECTION="audio" +PKG_SHORTDESC="libvorbis: Lossless audio compression tools using the ogg-vorbis algorithms" +PKG_LONGDESC="Ogg Vorbis is a fully open, non-proprietary, patent-and-royalty-free, general-purpose compressed audio format for mid to high quality (8kHz-48.0kHz, 16+ bit, polyphonic) audio and music at fixed and variable bitrates from 16 to 128 kbps/channel. This places Vorbis in the same competitive class as audio representations such as MPEG-4 (AAC), and similar to, but higher performance than MPEG-1/2 audio layer 3, MPEG-4 audio (TwinVQ), WMA and PAC." +PKG_IS_ADDON="no" \ No newline at end of file diff --git a/packages/audio/libvorbis/url b/packages/audio/libvorbis/url deleted file mode 100644 index d6dde96860..0000000000 --- a/packages/audio/libvorbis/url +++ /dev/null @@ -1 +0,0 @@ -http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.2.tar.bz2 From 59ad43611fb6f20280bc2f4cdf63f286359c6a6c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 13:47:28 +0100 Subject: [PATCH 161/850] libsamplerate: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/audio/libsamplerate/build | 4 +--- packages/audio/libsamplerate/install | 2 +- packages/audio/libsamplerate/meta | 14 ++++++++++++++ packages/audio/libsamplerate/url | 1 - 4 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 packages/audio/libsamplerate/meta delete mode 100644 packages/audio/libsamplerate/url diff --git a/packages/audio/libsamplerate/build b/packages/audio/libsamplerate/build index 9504299be2..e42122d20a 100755 --- a/packages/audio/libsamplerate/build +++ b/packages/audio/libsamplerate/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -14,7 +12,7 @@ cd $PKG_BUILD --disable-static \ --datadir=/usr/share \ --disable-fftw \ - --disable-sndfile + --disable-sndfile \ make diff --git a/packages/audio/libsamplerate/install b/packages/audio/libsamplerate/install index b4d582ea1f..a0f9a6ac83 100755 --- a/packages/audio/libsamplerate/install +++ b/packages/audio/libsamplerate/install @@ -3,5 +3,5 @@ . config/options $1 mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/src/.libs/*.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/src/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/audio/libsamplerate/meta b/packages/audio/libsamplerate/meta new file mode 100644 index 0000000000..7a925da4ce --- /dev/null +++ b/packages/audio/libsamplerate/meta @@ -0,0 +1,14 @@ +PKG_NAME="libsamplerate" +PKG_VERSION="0.1.7" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.mega-nerd.com/SRC/" +PKG_URL="http://www.mega-nerd.com/SRC/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="audio" +PKG_SHORTDESC="libsamplerate: A Sample Rate Converter library for audio" +PKG_LONGDESC="Libsamplerate is a Sample Rate Converter for audio. One example of where such a thing would be useful is converting audio from the CD sample rate of 44.1kHz to the 48kHz sample rate used by DAT players." +PKG_IS_ADDON="no" \ No newline at end of file diff --git a/packages/audio/libsamplerate/url b/packages/audio/libsamplerate/url deleted file mode 100644 index 2238131036..0000000000 --- a/packages/audio/libsamplerate/url +++ /dev/null @@ -1 +0,0 @@ -http://www.mega-nerd.com/SRC/libsamplerate-0.1.7.tar.gz \ No newline at end of file From b8c14b9410609498afbdbf98aa27bd6203bfc95b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 13:49:17 +0100 Subject: [PATCH 162/850] libogg: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/audio/libogg/build | 4 +--- packages/audio/libogg/install | 2 +- packages/audio/libogg/meta | 14 ++++++++++++++ packages/audio/libogg/url | 1 - 4 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 packages/audio/libogg/meta delete mode 100644 packages/audio/libogg/url diff --git a/packages/audio/libogg/build b/packages/audio/libogg/build index 1d3eb43bba..7db813cc8e 100755 --- a/packages/audio/libogg/build +++ b/packages/audio/libogg/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -12,6 +10,6 @@ cd $PKG_BUILD --disable-static \ --enable-shared \ -$MAKE +make $MAKEINSTALL \ No newline at end of file diff --git a/packages/audio/libogg/install b/packages/audio/libogg/install index 2187d7d31f..c429876da3 100755 --- a/packages/audio/libogg/install +++ b/packages/audio/libogg/install @@ -3,4 +3,4 @@ . config/options $1 mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/src/.libs/libogg*.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/src/.libs/libogg*.so* $INSTALL/usr/lib diff --git a/packages/audio/libogg/meta b/packages/audio/libogg/meta new file mode 100644 index 0000000000..fccd9c404d --- /dev/null +++ b/packages/audio/libogg/meta @@ -0,0 +1,14 @@ +PKG_NAME="libogg" +PKG_VERSION="1.2.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="BSD" +PKG_SITE="http://www.xiph.org/ogg/" +PKG_URL="http://downloads.xiph.org/releases/ogg/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="audio" +PKG_SHORTDESC="libogg: Open source bitstream container format" +PKG_LONGDESC="Libogg contains necessary functionality to create, decode, and work with Ogg bitstreams." +PKG_IS_ADDON="no" \ No newline at end of file diff --git a/packages/audio/libogg/url b/packages/audio/libogg/url deleted file mode 100644 index ff22de79ed..0000000000 --- a/packages/audio/libogg/url +++ /dev/null @@ -1 +0,0 @@ -http://downloads.xiph.org/releases/ogg/libogg-1.2.1.tar.gz From 361054a1b21df2512baa2eac640a3b20bf776eec Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 13:49:26 +0100 Subject: [PATCH 163/850] libmad: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/audio/libmad/build | 2 -- packages/audio/libmad/install | 2 +- packages/audio/libmad/meta | 14 ++++++++++++++ packages/audio/libmad/url | 1 - 4 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 packages/audio/libmad/meta delete mode 100644 packages/audio/libmad/url diff --git a/packages/audio/libmad/build b/packages/audio/libmad/build index 6a8afb8a41..29242d4410 100755 --- a/packages/audio/libmad/build +++ b/packages/audio/libmad/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/audio/libmad/install b/packages/audio/libmad/install index 98caa5e53d..165665d2fd 100755 --- a/packages/audio/libmad/install +++ b/packages/audio/libmad/install @@ -3,4 +3,4 @@ . config/options $1 mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/.libs/*.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/audio/libmad/meta b/packages/audio/libmad/meta new file mode 100644 index 0000000000..03377838ff --- /dev/null +++ b/packages/audio/libmad/meta @@ -0,0 +1,14 @@ +PKG_NAME="libmad" +PKG_VERSION="0.15.1b" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.mars.org/home/rob/proj/mpeg/" +PKG_URL="http://downloads.sourceforge.net/mad/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="audio" +PKG_SHORTDESC="libmad: MPEG Audio Decoder" +PKG_LONGDESC="MAD is a high-quality MPEG audio decoder. It currently supports MPEG-1 and the MPEG-2 extension to Lower Sampling Frequencies, as well as the so-called MPEG 2.5 format. All three audio layers (Layer I, Layer II, and Layer III a.k.a. MP3) are fully implemented." +PKG_IS_ADDON="no" \ No newline at end of file diff --git a/packages/audio/libmad/url b/packages/audio/libmad/url deleted file mode 100644 index 143b20c8ae..0000000000 --- a/packages/audio/libmad/url +++ /dev/null @@ -1 +0,0 @@ -http://downloads.sourceforge.net/mad/libmad-0.15.1b.tar.gz From 76e8e531f4f339cd0f9d4f20c2a8313f867a6ace Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 13:49:43 +0100 Subject: [PATCH 164/850] libcdio: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/audio/libcdio/build | 2 -- packages/audio/libcdio/meta | 14 ++++++++++++++ packages/audio/libcdio/url | 1 - 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 packages/audio/libcdio/meta delete mode 100644 packages/audio/libcdio/url diff --git a/packages/audio/libcdio/build b/packages/audio/libcdio/build index b51def16f2..00a808877b 100755 --- a/packages/audio/libcdio/build +++ b/packages/audio/libcdio/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/audio/libcdio/meta b/packages/audio/libcdio/meta new file mode 100644 index 0000000000..da2f6bee25 --- /dev/null +++ b/packages/audio/libcdio/meta @@ -0,0 +1,14 @@ +PKG_NAME="libcdio" +PKG_VERSION="0.82" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.gnu.org/software/libcdio/" +PKG_URL="http://ftp.gnu.org/gnu/libcdio/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="audio" +PKG_SHORTDESC="libcdio: A CD-ROM reading and control library" +PKG_LONGDESC="This library is to encapsulate CD-ROM reading and control. Applications wishing to be oblivious of the OS- and device-dependant properties of a CD-ROM can use this library. Some support for disk image types like BIN/CUE and NRG is available, so applications that use this library also have the ability to read disc images as though they were CD's." +PKG_IS_ADDON="no" diff --git a/packages/audio/libcdio/url b/packages/audio/libcdio/url deleted file mode 100644 index 644ebcc881..0000000000 --- a/packages/audio/libcdio/url +++ /dev/null @@ -1 +0,0 @@ -http://ftp.gnu.org/gnu/libcdio/libcdio-0.82.tar.bz2 From e55e569c0162f7e25ca6de585e424aa4784e953f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 13:49:55 +0100 Subject: [PATCH 165/850] flac: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/audio/flac/build | 3 --- packages/audio/flac/install | 4 +--- packages/audio/flac/meta | 14 ++++++++++++++ ...2.1-cxxflags.diff => flac-1.2.1-cxxflags.patch} | 0 ...1.2.1-gcc_4.3.diff => flac-1.2.1-gcc_4.3.patch} | 0 packages/audio/flac/url | 1 - 6 files changed, 15 insertions(+), 7 deletions(-) create mode 100644 packages/audio/flac/meta rename packages/audio/flac/patches/{flac-1.2.1-cxxflags.diff => flac-1.2.1-cxxflags.patch} (100%) rename packages/audio/flac/patches/{flac-1.2.1-gcc_4.3.diff => flac-1.2.1-gcc_4.3.patch} (100%) delete mode 100644 packages/audio/flac/url diff --git a/packages/audio/flac/build b/packages/audio/flac/build index 39e2beaaeb..22b9c5318a 100755 --- a/packages/audio/flac/build +++ b/packages/audio/flac/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build libogg - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/audio/flac/install b/packages/audio/flac/install index 89e4e36ce5..4eae8ebc34 100755 --- a/packages/audio/flac/install +++ b/packages/audio/flac/install @@ -2,7 +2,5 @@ . config/options $1 -$SCRIPTS/install libogg - mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/src/libFLAC/.libs/libFLAC.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/src/libFLAC/.libs/libFLAC.so* $INSTALL/usr/lib diff --git a/packages/audio/flac/meta b/packages/audio/flac/meta new file mode 100644 index 0000000000..138baae3c7 --- /dev/null +++ b/packages/audio/flac/meta @@ -0,0 +1,14 @@ +PKG_NAME="flac" +PKG_VERSION="1.2.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="LGPL" +PKG_SITE="http://flac.sourceforge.net/" +PKG_URL="http://downloads.sourceforge.net/flac/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="libogg" +PKG_BUILD_DEPENDS="toolchain libogg" +PKG_PRIORITY="optional" +PKG_SECTION="audio" +PKG_SHORTDESC="flac: An Free Lossless Audio Codec" +PKG_LONGDESC="Grossly oversimplified, FLAC is similar to MP3, but lossless, meaning that audio is compressed in FLAC without throwing away any information. This is similar to how Zip works, except with FLAC you will get much better compression because it is designed specifically for audio." +PKG_IS_ADDON="no" diff --git a/packages/audio/flac/patches/flac-1.2.1-cxxflags.diff b/packages/audio/flac/patches/flac-1.2.1-cxxflags.patch similarity index 100% rename from packages/audio/flac/patches/flac-1.2.1-cxxflags.diff rename to packages/audio/flac/patches/flac-1.2.1-cxxflags.patch diff --git a/packages/audio/flac/patches/flac-1.2.1-gcc_4.3.diff b/packages/audio/flac/patches/flac-1.2.1-gcc_4.3.patch similarity index 100% rename from packages/audio/flac/patches/flac-1.2.1-gcc_4.3.diff rename to packages/audio/flac/patches/flac-1.2.1-gcc_4.3.patch diff --git a/packages/audio/flac/url b/packages/audio/flac/url deleted file mode 100644 index f0e549c68a..0000000000 --- a/packages/audio/flac/url +++ /dev/null @@ -1 +0,0 @@ -http://downloads.sourceforge.net/flac/flac-1.2.1.tar.gz From de555a83cb546ff52ee1372b0a3bae34de1a6f35 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 13:50:10 +0100 Subject: [PATCH 166/850] flaac: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/audio/faac/build | 2 -- packages/audio/faac/install | 2 +- packages/audio/faac/meta | 14 ++++++++++++++ packages/audio/faac/url | 1 - 4 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 packages/audio/faac/meta delete mode 100644 packages/audio/faac/url diff --git a/packages/audio/faac/build b/packages/audio/faac/build index fe025c7058..c470b9c0d2 100755 --- a/packages/audio/faac/build +++ b/packages/audio/faac/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/audio/faac/install b/packages/audio/faac/install index 939463c8e3..85e9774ee0 100755 --- a/packages/audio/faac/install +++ b/packages/audio/faac/install @@ -3,4 +3,4 @@ . config/options $1 mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/libfaac/.libs/*.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/libfaac/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/audio/faac/meta b/packages/audio/faac/meta new file mode 100644 index 0000000000..c822cfbb83 --- /dev/null +++ b/packages/audio/faac/meta @@ -0,0 +1,14 @@ +PKG_NAME="faac" +PKG_VERSION="1.28" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="LGPL" +PKG_SITE="http://www.audiocoding.com/" +PKG_URL="http://heanet.dl.sourceforge.net/sourceforge/faac/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="audio" +PKG_SHORTDESC="faac: An MPEG-4 AAC encoder" +PKG_LONGDESC="The FAAC project includes the AAC encoder supporting several MPEG-4 object types (LC, Main, LTP, HE AAC, PS) and file formats (ADTS AAC, raw AAC, MP4), multichannel and gapless encoding as well as MP4 metadata tags. The codecs are compatible with standard-compliant audio applications using one or more of these profiles." +PKG_IS_ADDON="no" diff --git a/packages/audio/faac/url b/packages/audio/faac/url deleted file mode 100644 index a4292730d5..0000000000 --- a/packages/audio/faac/url +++ /dev/null @@ -1 +0,0 @@ -http://heanet.dl.sourceforge.net/sourceforge/faac/faac-1.28.tar.gz From 9e00574fbb5a801197d876f701718788bca00cf0 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 13:50:21 +0100 Subject: [PATCH 167/850] flaad2: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/audio/faad2/build | 2 -- packages/audio/faad2/install | 2 +- packages/audio/faad2/meta | 14 ++++++++++++++ .../{11_faad-stdio.diff => faad2-2.7-stdio.patch} | 0 packages/audio/faad2/unpack | 7 ------- packages/audio/faad2/url | 1 - 6 files changed, 15 insertions(+), 11 deletions(-) create mode 100644 packages/audio/faad2/meta rename packages/audio/faad2/patches/{11_faad-stdio.diff => faad2-2.7-stdio.patch} (100%) delete mode 100755 packages/audio/faad2/unpack delete mode 100644 packages/audio/faad2/url diff --git a/packages/audio/faad2/build b/packages/audio/faad2/build index d152dd9fcf..67a881f170 100755 --- a/packages/audio/faad2/build +++ b/packages/audio/faad2/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD $AUTORECONF diff --git a/packages/audio/faad2/install b/packages/audio/faad2/install index bfa9f18c1a..e43a8c5563 100755 --- a/packages/audio/faad2/install +++ b/packages/audio/faad2/install @@ -3,4 +3,4 @@ . config/options $1 mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/libfaad/.libs/*.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/libfaad/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/audio/faad2/meta b/packages/audio/faad2/meta new file mode 100644 index 0000000000..42d2727d00 --- /dev/null +++ b/packages/audio/faad2/meta @@ -0,0 +1,14 @@ +PKG_NAME="faad2" +PKG_VERSION="2.7" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.audiocoding.com/" +PKG_URL="http://sunet.dl.sourceforge.net/project/faac/faad2-src/$PKG_NAME-$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="audio" +PKG_SHORTDESC="faad: An MPEG-4 AAC decoder" +PKG_LONGDESC="The FAAD project includes the AAC decoder FAAD2. It supports several MPEG-4 object types (LC, Main, LTP, HE AAC, PS) and file formats (ADTS AAC, raw AAC, MP4), multichannel and gapless decoding as well as MP4 metadata tags. The codecs are compatible with standard-compliant audio applications using one or more of these profiles." +PKG_IS_ADDON="no" diff --git a/packages/audio/faad2/patches/11_faad-stdio.diff b/packages/audio/faad2/patches/faad2-2.7-stdio.patch similarity index 100% rename from packages/audio/faad2/patches/11_faad-stdio.diff rename to packages/audio/faad2/patches/faad2-2.7-stdio.patch diff --git a/packages/audio/faad2/unpack b/packages/audio/faad2/unpack deleted file mode 100755 index a9a42e2fa7..0000000000 --- a/packages/audio/faad2/unpack +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -. config/options $1 - -cp $BUILD/configtools/config.guess $BUILD/$1* -cp $BUILD/configtools/config.sub $BUILD/$1* -chmod a+x $BUILD/$1*/configure diff --git a/packages/audio/faad2/url b/packages/audio/faad2/url deleted file mode 100644 index f5dd619b5a..0000000000 --- a/packages/audio/faad2/url +++ /dev/null @@ -1 +0,0 @@ -http://sunet.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz From 85787b54fdf084afefc32aa03a769bd7cc22df54 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 13:51:18 +0100 Subject: [PATCH 168/850] megaglest-source: rename patches Signed-off-by: Stephan Raue --- ...1.diff => megaglest-source-3.3.7.2-dont_build_tools-0.1.patch} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/addons/games/megaglest-source/patches/{megaglest-3.5.5-dont_build_tools-0.1.diff => megaglest-source-3.3.7.2-dont_build_tools-0.1.patch} (100%) diff --git a/packages/addons/games/megaglest-source/patches/megaglest-3.5.5-dont_build_tools-0.1.diff b/packages/addons/games/megaglest-source/patches/megaglest-source-3.3.7.2-dont_build_tools-0.1.patch similarity index 100% rename from packages/addons/games/megaglest-source/patches/megaglest-3.5.5-dont_build_tools-0.1.diff rename to packages/addons/games/megaglest-source/patches/megaglest-source-3.3.7.2-dont_build_tools-0.1.patch From c9dbcf5793cfdc38914b6dee374f34b82c292b17 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 13:51:33 +0100 Subject: [PATCH 169/850] sauerbraten: rename patches Signed-off-by: Stephan Raue --- ...iff => sauerbraten-2010_07_28-fix_includes_and_libs-0.1.patch} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/addons/games/sauerbraten/patches/{sauerbraten-fix_includes_and_libs-0.1.diff => sauerbraten-2010_07_28-fix_includes_and_libs-0.1.patch} (100%) diff --git a/packages/addons/games/sauerbraten/patches/sauerbraten-fix_includes_and_libs-0.1.diff b/packages/addons/games/sauerbraten/patches/sauerbraten-2010_07_28-fix_includes_and_libs-0.1.patch similarity index 100% rename from packages/addons/games/sauerbraten/patches/sauerbraten-fix_includes_and_libs-0.1.diff rename to packages/addons/games/sauerbraten/patches/sauerbraten-2010_07_28-fix_includes_and_libs-0.1.patch From 5224135fed3bc0fe0e1dff1ccf0ad87db0173eea Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 14:26:51 +0100 Subject: [PATCH 170/850] pcre: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/devel/pcre/build | 2 -- packages/devel/pcre/install | 2 +- packages/devel/pcre/meta | 14 ++++++++++++++ packages/devel/pcre/url | 1 - 4 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 packages/devel/pcre/meta delete mode 100644 packages/devel/pcre/url diff --git a/packages/devel/pcre/build b/packages/devel/pcre/build index a80a5bbe1f..424f0cc86e 100755 --- a/packages/devel/pcre/build +++ b/packages/devel/pcre/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/devel/pcre/install b/packages/devel/pcre/install index 99a6a18263..ddc5beb9ea 100755 --- a/packages/devel/pcre/install +++ b/packages/devel/pcre/install @@ -3,5 +3,5 @@ . config/options $1 mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/.libs/libpcre*.so*[.0-9] $INSTALL/usr/lib + cp -P $PKG_BUILD/.libs/libpcre*.so*[.0-9] $INSTALL/usr/lib diff --git a/packages/devel/pcre/meta b/packages/devel/pcre/meta new file mode 100644 index 0000000000..a2b3196c0a --- /dev/null +++ b/packages/devel/pcre/meta @@ -0,0 +1,14 @@ +PKG_NAME="pcre" +PKG_VERSION="8.10" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.pcre.org/" +PKG_URL="http://downloads.sourceforge.net/project/pcre/pcre/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="devel" +PKG_SHORTDESC="pcre: Perl Compatible Regulat Expressions" +PKG_LONGDESC="The PCRE library is a set of functions that implement regular expression pattern matching using the same syntax and semantics as Perl 5. PCRE has its own native API, as well as a set of wrapper functions that correspond to the POSIX regular expression API. The PCRE library is free, even for building commercial software." +PKG_IS_ADDON="no" \ No newline at end of file diff --git a/packages/devel/pcre/url b/packages/devel/pcre/url deleted file mode 100644 index 4a20d89792..0000000000 --- a/packages/devel/pcre/url +++ /dev/null @@ -1 +0,0 @@ -http://downloads.sourceforge.net/project/pcre/pcre/8.10/pcre-8.10.tar.bz2 From e42a5f0d7d9c639ba55b726a1417b4582e080516 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 14:27:12 +0100 Subject: [PATCH 171/850] ncurses: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/devel/ncurses/meta | 14 ++++++++++++++ packages/devel/ncurses/url | 1 - 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/devel/ncurses/meta delete mode 100644 packages/devel/ncurses/url diff --git a/packages/devel/ncurses/meta b/packages/devel/ncurses/meta new file mode 100644 index 0000000000..7b0b0d2ddb --- /dev/null +++ b/packages/devel/ncurses/meta @@ -0,0 +1,14 @@ +PKG_NAME="ncurses" +PKG_VERSION="5.7" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="MIT" +PKG_SITE="http://www.gnu.org/software/ncurses/" +PKG_URL="http://ftp.gnu.org/pub/gnu/ncurses/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="" +PKG_PRIORITY="optional" +PKG_SECTION="devel" +PKG_SHORTDESC="ncurses: The ncurses (new curses) library" +PKG_LONGDESC="The ncurses (new curses) library is a free software emulation of curses in System V Release 4.0, and more. It uses terminfo format, supports pads and color and multiple highlights and forms characters and function-key mapping, and has all the other SYSV-curses enhancements over BSD curses." +PKG_IS_ADDON="no" \ No newline at end of file diff --git a/packages/devel/ncurses/url b/packages/devel/ncurses/url deleted file mode 100644 index 4db615aa90..0000000000 --- a/packages/devel/ncurses/url +++ /dev/null @@ -1 +0,0 @@ -http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.7.tar.gz \ No newline at end of file From 9cf825695b12a91993eae86cfb6b00295e42e236 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 14:27:26 +0100 Subject: [PATCH 172/850] libtool: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/devel/libtool/build | 4 +--- packages/devel/libtool/meta | 14 ++++++++++++++ ...ol-2.4-use_ld.diff => libtool-2.4-use_ld.patch} | 0 packages/devel/libtool/url | 1 - 4 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 packages/devel/libtool/meta rename packages/devel/libtool/patches/{libtool-2.4-use_ld.diff => libtool-2.4-use_ld.patch} (100%) delete mode 100644 packages/devel/libtool/url diff --git a/packages/devel/libtool/build b/packages/devel/libtool/build index 6c3b2e47a8..858a16053a 100755 --- a/packages/devel/libtool/build +++ b/packages/devel/libtool/build @@ -3,9 +3,7 @@ . config/options $1 cd $PKG_BUILD - -mkdir -p .objdir-target -cd .objdir-target +mkdir -p .objdir-target && cd .objdir-target ../configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/devel/libtool/meta b/packages/devel/libtool/meta new file mode 100644 index 0000000000..d8e3ed65f2 --- /dev/null +++ b/packages/devel/libtool/meta @@ -0,0 +1,14 @@ +PKG_NAME="libtool" +PKG_VERSION="2.4" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.gnu.org/software/libtool/libtool.html" +PKG_URL="http://ftp.gnu.org/gnu/libtool/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="devel" +PKG_SHORTDESC="libtool: Generic library support script" +PKG_LONGDESC="This is GNU Libtool, a generic library support script. Libtool hides the complexity of using shared libraries behind a consistent, portable interface." +PKG_IS_ADDON="no" \ No newline at end of file diff --git a/packages/devel/libtool/patches/libtool-2.4-use_ld.diff b/packages/devel/libtool/patches/libtool-2.4-use_ld.patch similarity index 100% rename from packages/devel/libtool/patches/libtool-2.4-use_ld.diff rename to packages/devel/libtool/patches/libtool-2.4-use_ld.patch diff --git a/packages/devel/libtool/url b/packages/devel/libtool/url deleted file mode 100644 index 35b80f9010..0000000000 --- a/packages/devel/libtool/url +++ /dev/null @@ -1 +0,0 @@ -http://ftp.gnu.org/gnu/libtool/libtool-2.4.tar.gz \ No newline at end of file From 5c684dd89c47cdf17783387c0fb5e46794d630eb Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 14:27:47 +0100 Subject: [PATCH 173/850] libpthread-stubs: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/devel/libpthread-stubs/build | 2 -- packages/devel/libpthread-stubs/meta | 14 ++++++++++++++ packages/devel/libpthread-stubs/url | 1 - 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 packages/devel/libpthread-stubs/meta delete mode 100644 packages/devel/libpthread-stubs/url diff --git a/packages/devel/libpthread-stubs/build b/packages/devel/libpthread-stubs/build index d44875fe84..7db813cc8e 100755 --- a/packages/devel/libpthread-stubs/build +++ b/packages/devel/libpthread-stubs/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/devel/libpthread-stubs/meta b/packages/devel/libpthread-stubs/meta new file mode 100644 index 0000000000..8f47685860 --- /dev/null +++ b/packages/devel/libpthread-stubs/meta @@ -0,0 +1,14 @@ +PKG_NAME="libpthread-stubs" +PKG_VERSION="0.3" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://xcb.freedesktop.org/" +PKG_URL="http://xcb.freedesktop.org/dist/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="devel" +PKG_SHORTDESC="libpthread-stubs: A library providing weak aliases for pthread functions" +PKG_LONGDESC="This library provides weak aliases for pthread functions not provided in libc or otherwise available by default. Libraries like libxcb rely on pthread stubs to use pthreads optionally, becoming thread-safe when linked to libpthread, while avoiding any performance hit when running single-threaded." +PKG_IS_ADDON="no" \ No newline at end of file diff --git a/packages/devel/libpthread-stubs/url b/packages/devel/libpthread-stubs/url deleted file mode 100644 index c8250cb912..0000000000 --- a/packages/devel/libpthread-stubs/url +++ /dev/null @@ -1 +0,0 @@ -http://xcb.freedesktop.org/dist/libpthread-stubs-0.3.tar.gz From 9208ef7c45e45f01098ffa3373a59a6b8b029c3c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 14:28:00 +0100 Subject: [PATCH 174/850] libevent: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/devel/libevent/build | 2 -- packages/devel/libevent/meta | 14 ++++++++++++++ packages/devel/libevent/url | 1 - 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 packages/devel/libevent/meta delete mode 100644 packages/devel/libevent/url diff --git a/packages/devel/libevent/build b/packages/devel/libevent/build index 6a37aac5fe..815fdf1043 100755 --- a/packages/devel/libevent/build +++ b/packages/devel/libevent/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/devel/libevent/meta b/packages/devel/libevent/meta new file mode 100644 index 0000000000..3db33fa391 --- /dev/null +++ b/packages/devel/libevent/meta @@ -0,0 +1,14 @@ +PKG_NAME="libevent" +PKG_VERSION="1.4.14b-stable" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="BSD" +PKG_SITE="http://www.monkey.org/~provos/libevent/" +PKG_URL="http://monkey.org/~provos/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="devel" +PKG_SHORTDESC="libevent: A library for asynchronous event notification" +PKG_LONGDESC="The libevent API provides a mechanism to execute a callback function when a specific event occurs on a file descriptor or after a timeout has been reached. It is meant to replace the asynchronous event loop found in event-driven network servers." +PKG_IS_ADDON="no" \ No newline at end of file diff --git a/packages/devel/libevent/url b/packages/devel/libevent/url deleted file mode 100644 index 9affba6d71..0000000000 --- a/packages/devel/libevent/url +++ /dev/null @@ -1 +0,0 @@ -http://monkey.org/~provos/libevent-1.4.14b-stable.tar.gz \ No newline at end of file From 7ebc77ee6ed86ac6f0f87baa00e84d6446494935 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 14:28:16 +0100 Subject: [PATCH 175/850] flex: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/devel/flex/build | 2 -- packages/devel/flex/meta | 14 ++++++++++++++ packages/devel/flex/url | 1 - 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 packages/devel/flex/meta delete mode 100644 packages/devel/flex/url diff --git a/packages/devel/flex/build b/packages/devel/flex/build index 9623c10fd4..80bd29d168 100755 --- a/packages/devel/flex/build +++ b/packages/devel/flex/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ac_cv_func_malloc_0_nonnull=yes \ ac_cv_func_realloc_0_nonnull=yes \ diff --git a/packages/devel/flex/meta b/packages/devel/flex/meta new file mode 100644 index 0000000000..f3c27f8d6e --- /dev/null +++ b/packages/devel/flex/meta @@ -0,0 +1,14 @@ +PKG_NAME="flex" +PKG_VERSION="2.5.35" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://flex.sourceforge.net/" +PKG_URL="http://downloads.sourceforge.net/project/flex/flex/$PKG_NAME-$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="devel" +PKG_SHORTDESC="flex: Fast lexical analyzer generator" +PKG_LONGDESC="flex is a tool for generating programs that perform pattern-matching on text." +PKG_IS_ADDON="no" \ No newline at end of file diff --git a/packages/devel/flex/url b/packages/devel/flex/url deleted file mode 100644 index f7c8616569..0000000000 --- a/packages/devel/flex/url +++ /dev/null @@ -1 +0,0 @@ -http://downloads.sourceforge.net/project/flex/flex/flex-2.5.35/flex-2.5.35.tar.bz2 \ No newline at end of file From b7ea0f5556d4c7e2fbe2e58f9a7706d0bd7be002 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 14:28:38 +0100 Subject: [PATCH 176/850] eggdbus: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/devel/eggdbus/build | 6 ------ packages/devel/eggdbus/install | 6 +----- packages/devel/eggdbus/meta | 14 ++++++++++++++ ...0.2.diff => eggdbus-0.6-binding_tool-0.2.patch} | 0 packages/devel/eggdbus/url | 1 - 5 files changed, 15 insertions(+), 12 deletions(-) create mode 100644 packages/devel/eggdbus/meta rename packages/devel/eggdbus/patches/{eggdbus-binding-tool-0.2.diff => eggdbus-0.6-binding_tool-0.2.patch} (100%) delete mode 100644 packages/devel/eggdbus/url diff --git a/packages/devel/eggdbus/build b/packages/devel/eggdbus/build index 5bb0a0d0d6..41c1d13eae 100755 --- a/packages/devel/eggdbus/build +++ b/packages/devel/eggdbus/build @@ -2,12 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build eggdbus-host -$SCRIPTS/build glib -$SCRIPTS/build dbus -$SCRIPTS/build dbus-glib - cd $PKG_BUILD mkdir -p .build-target diff --git a/packages/devel/eggdbus/install b/packages/devel/eggdbus/install index e99afa8656..c1bb5df9e7 100755 --- a/packages/devel/eggdbus/install +++ b/packages/devel/eggdbus/install @@ -2,9 +2,5 @@ . config/options $1 -$SCRIPTS/install glib -$SCRIPTS/install dbus -$SCRIPTS/install dbus-glib - mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/.build-target/src/eggdbus/.libs/*.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/.build-target/src/eggdbus/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/devel/eggdbus/meta b/packages/devel/eggdbus/meta new file mode 100644 index 0000000000..14481b0b58 --- /dev/null +++ b/packages/devel/eggdbus/meta @@ -0,0 +1,14 @@ +PKG_NAME="eggdbus" +PKG_VERSION="0.6" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="LGPL" +PKG_SITE="http://cgit.freedesktop.org/~david/eggdbus" +PKG_URL="http://hal.freedesktop.org/releases/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="glib dbus dbus-glib" +PKG_BUILD_DEPENDS="toolchain eggdbus-host glib dbus dbus-glib" +PKG_PRIORITY="optional" +PKG_SECTION="devel" +PKG_SHORTDESC="eggdbus: D-Bus bindings for GObject" +PKG_LONGDESC="D-Bus bindings for GObject." +PKG_IS_ADDON="no" diff --git a/packages/devel/eggdbus/patches/eggdbus-binding-tool-0.2.diff b/packages/devel/eggdbus/patches/eggdbus-0.6-binding_tool-0.2.patch similarity index 100% rename from packages/devel/eggdbus/patches/eggdbus-binding-tool-0.2.diff rename to packages/devel/eggdbus/patches/eggdbus-0.6-binding_tool-0.2.patch diff --git a/packages/devel/eggdbus/url b/packages/devel/eggdbus/url deleted file mode 100644 index 0282a6d899..0000000000 --- a/packages/devel/eggdbus/url +++ /dev/null @@ -1 +0,0 @@ -http://hal.freedesktop.org/releases/eggdbus-0.6.tar.gz From 5a659afd8bf4ef241830e13813b7164b3faf64e1 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 14:28:50 +0100 Subject: [PATCH 177/850] eggdbus-host: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/devel/eggdbus-host/build | 4 ---- packages/devel/eggdbus-host/meta | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 packages/devel/eggdbus-host/meta diff --git a/packages/devel/eggdbus-host/build b/packages/devel/eggdbus-host/build index 1e29b29f49..0b80611e8d 100755 --- a/packages/devel/eggdbus-host/build +++ b/packages/devel/eggdbus-host/build @@ -2,11 +2,7 @@ . config/options $1 -$SCRIPTS/build toolchain $SCRIPTS/unpack eggdbus -$SCRIPTS/build glib-host -$SCRIPTS/build dbus-host -$SCRIPTS/build dbus-glib-host EGGDBUS_DIR=`ls -d $BUILD/eggdbus-[0-9]*` diff --git a/packages/devel/eggdbus-host/meta b/packages/devel/eggdbus-host/meta new file mode 100644 index 0000000000..d8f8d47f92 --- /dev/null +++ b/packages/devel/eggdbus-host/meta @@ -0,0 +1,14 @@ +PKG_NAME="eggdbus-host" +PKG_VERSION="" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="LGPL" +PKG_SITE="http://cgit.freedesktop.org/~david/eggdbus" +PKG_URL="" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain glib-host dbus-host dbus-glib-host" +PKG_PRIORITY="optional" +PKG_SECTION="devel" +PKG_SHORTDESC="eggdbus: D-Bus bindings for GObject" +PKG_LONGDESC="D-Bus bindings for GObject." +PKG_IS_ADDON="no" From 68244bc91ab72bf05287187c54c1054dd9491087 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 14:29:07 +0100 Subject: [PATCH 178/850] dbus-glib: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/devel/dbus-glib/build | 6 ------ packages/devel/dbus-glib/install | 4 ---- packages/devel/dbus-glib/meta | 14 ++++++++++++++ packages/devel/dbus-glib/url | 1 - 4 files changed, 14 insertions(+), 11 deletions(-) create mode 100644 packages/devel/dbus-glib/meta delete mode 100644 packages/devel/dbus-glib/url diff --git a/packages/devel/dbus-glib/build b/packages/devel/dbus-glib/build index ec888fd6f8..c15202bd77 100755 --- a/packages/devel/dbus-glib/build +++ b/packages/devel/dbus-glib/build @@ -2,12 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build dbus -$SCRIPTS/build glib -$SCRIPTS/build expat -$SCRIPTS/build dbus-glib-host - export ac_cv_have_abstract_sockets=yes export ac_cv_func_posix_getpwnam_r=yes export have_abstract_sockets=yes diff --git a/packages/devel/dbus-glib/install b/packages/devel/dbus-glib/install index 82a65ad0b7..02e19a0d65 100755 --- a/packages/devel/dbus-glib/install +++ b/packages/devel/dbus-glib/install @@ -2,9 +2,5 @@ . config/options $1 -$SCRIPTS/install dbus -$SCRIPTS/install glib -$SCRIPTS/install expat - mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/.build-target/dbus/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/devel/dbus-glib/meta b/packages/devel/dbus-glib/meta new file mode 100644 index 0000000000..78ea5dc5f1 --- /dev/null +++ b/packages/devel/dbus-glib/meta @@ -0,0 +1,14 @@ +PKG_NAME="dbus-glib" +PKG_VERSION="0.88" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://freedesktop.org/wiki/Software/dbus" +PKG_URL="http://dbus.freedesktop.org/releases/dbus-glib/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="dbus glib expat" +PKG_BUILD_DEPENDS="toolchain dbus glib expat dbus-glib-host" +PKG_PRIORITY="optional" +PKG_SECTION="devel" +PKG_SHORTDESC="dbus-glib: A message bus system" +PKG_LONGDESC="D-BUS is a message bus, used for sending messages between applications. Conceptually, it fits somewhere in between raw sockets and CORBA in terms of complexity." +PKG_IS_ADDON="no" \ No newline at end of file diff --git a/packages/devel/dbus-glib/url b/packages/devel/dbus-glib/url deleted file mode 100644 index 5691f8de12..0000000000 --- a/packages/devel/dbus-glib/url +++ /dev/null @@ -1 +0,0 @@ -http://dbus.freedesktop.org/releases/dbus-glib/dbus-glib-0.88.tar.gz From 47947d9fcfe2e9dd1cd5f250118f6eb72a6a4699 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 14:29:16 +0100 Subject: [PATCH 179/850] dbus-glib-host: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/devel/dbus-glib-host/build | 3 --- packages/devel/dbus-glib-host/meta | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 packages/devel/dbus-glib-host/meta diff --git a/packages/devel/dbus-glib-host/build b/packages/devel/dbus-glib-host/build index abe586fef1..e98d344c4c 100755 --- a/packages/devel/dbus-glib-host/build +++ b/packages/devel/dbus-glib-host/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build glib-host -$SCRIPTS/build dbus-host $SCRIPTS/unpack dbus-glib DBUS_GLIB_DIR=`ls -d $BUILD/dbus-glib-[0-9]*` diff --git a/packages/devel/dbus-glib-host/meta b/packages/devel/dbus-glib-host/meta new file mode 100644 index 0000000000..ee8d5db492 --- /dev/null +++ b/packages/devel/dbus-glib-host/meta @@ -0,0 +1,16 @@ +PKG_NAME="dbus-glib-host" +PKG_VERSION="" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://freedesktop.org/wiki/Software/dbus" +PKG_URL="" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain glib-host dbus-host" +PKG_PRIORITY="optional" +PKG_SECTION="devel" +PKG_SHORTDESC="dbus-glib: A message bus system" +PKG_LONGDESC="D-BUS is a message bus, used for sending messages between applications. Conceptually, it fits somewhere in between raw sockets and CORBA in terms of complexity." +PKG_IS_ADDON="no" + + From df904a4c26f9560195c8e8d7fb3031e3f3f3d759 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 14:29:30 +0100 Subject: [PATCH 180/850] boost: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/devel/boost/build | 6 ------ packages/devel/boost/install | 3 --- packages/devel/boost/meta | 14 ++++++++++++++ packages/devel/boost/url | 1 - 4 files changed, 14 insertions(+), 10 deletions(-) create mode 100644 packages/devel/boost/meta delete mode 100644 packages/devel/boost/url diff --git a/packages/devel/boost/build b/packages/devel/boost/build index e76f88bb28..6d232ad097 100755 --- a/packages/devel/boost/build +++ b/packages/devel/boost/build @@ -2,12 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build boost-jam -$SCRIPTS/build Python -$SCRIPTS/build zlib -$SCRIPTS/build bzip2 - cd $PKG_BUILD sh bootstrap.sh \ --prefix=/usr \ diff --git a/packages/devel/boost/install b/packages/devel/boost/install index bb41ea7784..79848cbb7b 100755 --- a/packages/devel/boost/install +++ b/packages/devel/boost/install @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/install zlib -$SCRIPTS/install bzip2 - mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/bin.v2/libs/*/build/*/release/*/*.so.* $INSTALL/usr/lib diff --git a/packages/devel/boost/meta b/packages/devel/boost/meta new file mode 100644 index 0000000000..38ecf19feb --- /dev/null +++ b/packages/devel/boost/meta @@ -0,0 +1,14 @@ +PKG_NAME="boost" +PKG_VERSION="1_44_0" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.boost.org/" +PKG_URL="http://downloads.sourceforge.net/project/boost/boost/1.44.0/${PKG_NAME}_${PKG_VERSION}.tar.bz2" +PKG_DEPENDS="zlib bzip2" +PKG_BUILD_DEPENDS="toolchain boost-jam Python zlib bzip2" +PKG_PRIORITY="optional" +PKG_SECTION="devel" +PKG_SHORTDESC="boost: Peer-reviewed STL style libraries for C++" +PKG_LONGDESC="Boost provides free peer-reviewed portable C++ source libraries. The emphasis is on libraries which work well with the C++ Standard Library. One goal is to establish "existing practice" and provide reference implementations so that the Boost libraries are suitable for eventual standardization. Some of the libraries have already been proposed for inclusion in the C++ Standards Committee's upcoming C++ Standard Library Technical Report." +PKG_IS_ADDON="no" diff --git a/packages/devel/boost/url b/packages/devel/boost/url deleted file mode 100644 index aeec0d2fbd..0000000000 --- a/packages/devel/boost/url +++ /dev/null @@ -1 +0,0 @@ -http://downloads.sourceforge.net/project/boost/boost/1.44.0/boost_1_44_0.tar.bz2 \ No newline at end of file From 06257416991370b7f67638e172ebee7ae79a682b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 14:29:38 +0100 Subject: [PATCH 181/850] boost-jam: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/devel/boost-jam/build | 1 - packages/devel/boost-jam/meta | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/devel/boost-jam/meta diff --git a/packages/devel/boost-jam/build b/packages/devel/boost-jam/build index e67b584a17..9f4b27679f 100755 --- a/packages/devel/boost-jam/build +++ b/packages/devel/boost-jam/build @@ -2,7 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain $SCRIPTS/unpack boost setup_toolchain host diff --git a/packages/devel/boost-jam/meta b/packages/devel/boost-jam/meta new file mode 100644 index 0000000000..d549b17a73 --- /dev/null +++ b/packages/devel/boost-jam/meta @@ -0,0 +1,14 @@ +PKG_NAME="boost-jam" +PKG_VERSION="" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.boost.org/" +PKG_URL="" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="devel" +PKG_SHORTDESC="boost: Peer-reviewed STL style libraries for C++" +PKG_LONGDESC="Boost provides free peer-reviewed portable C++ source libraries. The emphasis is on libraries which work well with the C++ Standard Library. One goal is to establish "existing practice" and provide reference implementations so that the Boost libraries are suitable for eventual standardization. Some of the libraries have already been proposed for inclusion in the C++ Standards Committee's upcoming C++ Standard Library Technical Report." +PKG_IS_ADDON="no" From b307ddc412587019b55f74c909f788dec7004faa Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 14:30:05 +0100 Subject: [PATCH 182/850] file-host: cleanups Signed-off-by: Stephan Raue --- packages/devel/file-host/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/devel/file-host/meta b/packages/devel/file-host/meta index d0407705d3..84e12e5961 100644 --- a/packages/devel/file-host/meta +++ b/packages/devel/file-host/meta @@ -1,8 +1,10 @@ PKG_NAME="file" +PKG_VERSION="" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="BSD" PKG_SITE="http://www.darwinsys.com/file/" +PKG_URL="" PKG_DEPENDS="" PKG_BUILD_DEPENDS="toolchain" PKG_PRIORITY="optional" From dd39f7d43ce24933960b88f9fb46613ac7427e36 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 14:30:18 +0100 Subject: [PATCH 183/850] glib-host: cleanups Signed-off-by: Stephan Raue --- packages/devel/glib-host/meta | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/devel/glib-host/meta b/packages/devel/glib-host/meta index 83889ebb29..2594d8da4a 100644 --- a/packages/devel/glib-host/meta +++ b/packages/devel/glib-host/meta @@ -1,7 +1,10 @@ PKG_NAME="glib-host" +PKG_VERSION="" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="LGPL" +PKG_SITE="http://www.gtk.org/" +PKG_URL="" PKG_DEPENDS="" PKG_BUILD_DEPENDS="toolchain dbus-host" PKG_PRIORITY="optional" From 69b0873ff42e80da7293cc91d14345a9fed4f69d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 14:30:39 +0100 Subject: [PATCH 184/850] bzip2: cleanups Signed-off-by: Stephan Raue --- packages/compress/bzip2/build | 2 ++ packages/compress/bzip2/unpack | 10 ---------- 2 files changed, 2 insertions(+), 10 deletions(-) delete mode 100755 packages/compress/bzip2/unpack diff --git a/packages/compress/bzip2/build b/packages/compress/bzip2/build index 8a0e04a076..a565e88f69 100755 --- a/packages/compress/bzip2/build +++ b/packages/compress/bzip2/build @@ -4,6 +4,8 @@ cd $PKG_BUILD +sed -e "s,ln -s (lib.*),ln -snf \$$1; ln -snf libbz2.so.$PKG_VERSION libbz2.so,g" -i Makefile-libbz2_so + make CC=$TARGET_CC RANLIB=$TARGET_RANLIB AR=$TARGET_AR -f Makefile-libbz2_so ln -snf libbz2.so.1.0 libbz2.so diff --git a/packages/compress/bzip2/unpack b/packages/compress/bzip2/unpack deleted file mode 100755 index 71de4b58e0..0000000000 --- a/packages/compress/bzip2/unpack +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -. config/options $1 - -SRC_DIR=`ls -d $PKG_BUILD` - -BZIP2_VERSION=1.0.5 - -sed -i -e "s,ln -s (lib.*),ln -snf \$$1; ln -snf libbz2.so.$BZIP2_VERSION libbz2.so,g" \ - $SRC_DIR/Makefile-libbz2_so From d07ee1b416feb1f5b6910105715c5d339274a742 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 14:31:01 +0100 Subject: [PATCH 185/850] glib: rename patches Signed-off-by: Stephan Raue --- ...sage-handler.diff => glib-2.27.2-syslog_message_handler.patch} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/devel/glib/patches/{glib-syslog-message-handler.diff => glib-2.27.2-syslog_message_handler.patch} (100%) diff --git a/packages/devel/glib/patches/glib-syslog-message-handler.diff b/packages/devel/glib/patches/glib-2.27.2-syslog_message_handler.patch similarity index 100% rename from packages/devel/glib/patches/glib-syslog-message-handler.diff rename to packages/devel/glib/patches/glib-2.27.2-syslog_message_handler.patch From 0f72b7976158ef4ca7105570146bc41c183edb0f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 15:05:58 +0100 Subject: [PATCH 186/850] libpng: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/graphics/libpng/build | 5 +---- packages/graphics/libpng/install | 2 +- packages/graphics/libpng/meta | 14 ++++++++++++++ ...png-1.4.1-apng.diff => libpng-1.4.4-apng.patch} | 0 packages/graphics/libpng/url | 1 - 5 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 packages/graphics/libpng/meta rename packages/graphics/libpng/patches/{libpng-1.4.1-apng.diff => libpng-1.4.4-apng.patch} (100%) delete mode 100644 packages/graphics/libpng/url diff --git a/packages/graphics/libpng/build b/packages/graphics/libpng/build index 96a3e3e80c..e4a4d26a61 100755 --- a/packages/graphics/libpng/build +++ b/packages/graphics/libpng/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build zlib - cd $PKG_BUILD ac_cv_lib_z_zlibVersion=yes \ ./configure --host=$TARGET_NAME \ @@ -21,4 +18,4 @@ $MAKEINSTALL $SED "s:\([\"'= ]\)/usr:\\1$SYSROOT_PREFIX/usr:g" \ $SYSROOT_PREFIX/usr/bin/libpng*-config -cp -PR $SYSROOT_PREFIX/usr/bin/libpng*-config $ROOT/$TOOLCHAIN/bin +cp -P $SYSROOT_PREFIX/usr/bin/libpng*-config $ROOT/$TOOLCHAIN/bin diff --git a/packages/graphics/libpng/install b/packages/graphics/libpng/install index c68cfad8b5..aa9caa9330 100755 --- a/packages/graphics/libpng/install +++ b/packages/graphics/libpng/install @@ -3,4 +3,4 @@ . config/options $1 mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/.libs/libpng14.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/.libs/libpng14.so* $INSTALL/usr/lib diff --git a/packages/graphics/libpng/meta b/packages/graphics/libpng/meta new file mode 100644 index 0000000000..ddca022bc1 --- /dev/null +++ b/packages/graphics/libpng/meta @@ -0,0 +1,14 @@ +PKG_NAME="libpng" +PKG_VERSION="1.4.4" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.libpng.org/" +PKG_URL="http://downloads.sourceforge.net/libpng/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="zlib" +PKG_BUILD_DEPENDS="toolchain zlib" +PKG_PRIORITY="optional" +PKG_SECTION="graphics" +PKG_SHORTDESC="libpng: Portable Network Graphics (PNG) Reference Library" +PKG_LONGDESC="PNG (Portable Network Graphics) is an extensible file format for the lossless, portable, well-compressed storage of raster images. PNG provides a patent-free replacement for GIF and can also replace many common uses of TIFF. Indexed-color, grayscale, and truecolor images are supported, plus an optional alpha channel. Sample depths range from 1 to 16 bits." +PKG_IS_ADDON="no" diff --git a/packages/graphics/libpng/patches/libpng-1.4.1-apng.diff b/packages/graphics/libpng/patches/libpng-1.4.4-apng.patch similarity index 100% rename from packages/graphics/libpng/patches/libpng-1.4.1-apng.diff rename to packages/graphics/libpng/patches/libpng-1.4.4-apng.patch diff --git a/packages/graphics/libpng/url b/packages/graphics/libpng/url deleted file mode 100644 index d4a5d11dca..0000000000 --- a/packages/graphics/libpng/url +++ /dev/null @@ -1 +0,0 @@ -http://downloads.sourceforge.net/libpng/libpng-1.4.4.tar.bz2 From d9e1a6b4234cbfdcacb7a263e5e03c6623e53f89 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 15:06:11 +0100 Subject: [PATCH 187/850] jasper: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/graphics/jasper/build | 2 -- packages/graphics/jasper/install | 2 +- packages/graphics/jasper/meta | 14 ++++++++++++++ packages/graphics/jasper/url | 1 - 4 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 packages/graphics/jasper/meta delete mode 100644 packages/graphics/jasper/url diff --git a/packages/graphics/jasper/build b/packages/graphics/jasper/build index 0cfa21689a..186f78693d 100755 --- a/packages/graphics/jasper/build +++ b/packages/graphics/jasper/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/graphics/jasper/install b/packages/graphics/jasper/install index 510af9be42..9ca5f19c12 100755 --- a/packages/graphics/jasper/install +++ b/packages/graphics/jasper/install @@ -3,4 +3,4 @@ . config/options $1 mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/src/libjasper/.libs/*.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/src/libjasper/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/graphics/jasper/meta b/packages/graphics/jasper/meta new file mode 100644 index 0000000000..490c8fda07 --- /dev/null +++ b/packages/graphics/jasper/meta @@ -0,0 +1,14 @@ +PKG_NAME="jasper" +PKG_VERSION="1.900.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OpenSource" +PKG_SITE="http://www.ece.uvic.ca/~mdadams/jasper/" +PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="graphics" +PKG_SHORTDESC="jasper: JPEG-2000 Part-1 standard (i.e., ISO/IEC 15444-1) implementation" +PKG_LONGDESC="This distribution contains the public release of the an open-source implementation of the ISO/IEC 15444-1 also known as JPEG-2000 standard for image compression." +PKG_IS_ADDON="no" diff --git a/packages/graphics/jasper/url b/packages/graphics/jasper/url deleted file mode 100644 index 48a20e66e4..0000000000 --- a/packages/graphics/jasper/url +++ /dev/null @@ -1 +0,0 @@ -http://sources.openelec.tv/svn/jasper-1.900.1.tar.bz2 \ No newline at end of file From 74eee2dc6c343eff9d62acfb159acf6e21febc81 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 15:06:24 +0100 Subject: [PATCH 188/850] glew: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/graphics/glew/build | 11 +---------- packages/graphics/glew/meta | 16 ++++++++++++++++ ....diff => glew-1.5.6-010_crosscompiling.patch} | 0 packages/graphics/glew/url | 1 - 4 files changed, 17 insertions(+), 11 deletions(-) create mode 100644 packages/graphics/glew/meta rename packages/graphics/glew/patches/{010_crosscompiling.diff => glew-1.5.6-010_crosscompiling.patch} (100%) delete mode 100644 packages/graphics/glew/url diff --git a/packages/graphics/glew/build b/packages/graphics/glew/build index fa6ffb3bd0..1924ad4471 100755 --- a/packages/graphics/glew/build +++ b/packages/graphics/glew/build @@ -2,17 +2,8 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build libX11 -$SCRIPTS/build libXext -$SCRIPTS/build libXi -$SCRIPTS/build libXmu -$SCRIPTS/build Mesa - cd $PKG_BUILD -make SYSTEM=linux \ - GLEW_DEST=/usr \ - CC=$TARGET_CC \ +make SYSTEM=linux GLEW_DEST=/usr CC=$TARGET_CC mkdir -p $SYSROOT_PREFIX/usr/lib cp -PR lib/* $SYSROOT_PREFIX/usr/lib diff --git a/packages/graphics/glew/meta b/packages/graphics/glew/meta new file mode 100644 index 0000000000..10255901c3 --- /dev/null +++ b/packages/graphics/glew/meta @@ -0,0 +1,16 @@ +PKG_NAME="glew" +PKG_VERSION="1.5.6" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="BSD" +PKG_SITE="http://glew.sourceforge.net/" +PKG_URL="http://downloads.sourceforge.net/project/glew/glew/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tgz" +PKG_DEPENDS="libX11 libXext libXi libXmu Mesa" +PKG_BUILD_DEPENDS="toolchain libX11 libXext libXi libXmu Mesa" +PKG_PRIORITY="optional" +PKG_SECTION="graphics" +PKG_SHORTDESC="glew: The OpenGL Extension Wrangler Library" +PKG_LONGDESC="The OpenGL Extension Wrangler Library (GLEW) is a cross-platform C/C++ extension loading library. GLEW provides efficient run-time mechanisms for determining which OpenGL extensions are supported on the target platform. OpenGL core and extension functionality is exposed in a single header file." +PKG_IS_ADDON="no" + + diff --git a/packages/graphics/glew/patches/010_crosscompiling.diff b/packages/graphics/glew/patches/glew-1.5.6-010_crosscompiling.patch similarity index 100% rename from packages/graphics/glew/patches/010_crosscompiling.diff rename to packages/graphics/glew/patches/glew-1.5.6-010_crosscompiling.patch diff --git a/packages/graphics/glew/url b/packages/graphics/glew/url deleted file mode 100644 index 1da285f743..0000000000 --- a/packages/graphics/glew/url +++ /dev/null @@ -1 +0,0 @@ -http://downloads.sourceforge.net/project/glew/glew/1.5.6/glew-1.5.6.tgz \ No newline at end of file From 1143078ba2f79e655d7139f592b9fe33bc87e31a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 15:06:33 +0100 Subject: [PATCH 189/850] cairo: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/graphics/cairo/build | 12 ------------ packages/graphics/cairo/install | 10 ---------- packages/graphics/cairo/meta | 14 ++++++++++++++ packages/graphics/cairo/url | 1 - 4 files changed, 14 insertions(+), 23 deletions(-) create mode 100644 packages/graphics/cairo/meta delete mode 100644 packages/graphics/cairo/url diff --git a/packages/graphics/cairo/build b/packages/graphics/cairo/build index f1ab58d627..5d8d8b0c54 100755 --- a/packages/graphics/cairo/build +++ b/packages/graphics/cairo/build @@ -2,18 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build zlib -$SCRIPTS/build freetype -$SCRIPTS/build fontconfig -$SCRIPTS/build libpng -$SCRIPTS/build pixman -$SCRIPTS/build libXrender -$SCRIPTS/build libX11 -# $SCRIPTS/build Mesa -# $SCRIPTS/build libdrm -# $SCRIPTS/build libxcb - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/graphics/cairo/install b/packages/graphics/cairo/install index 4df4aa7299..b8165cb20f 100755 --- a/packages/graphics/cairo/install +++ b/packages/graphics/cairo/install @@ -2,15 +2,5 @@ . config/options $1 -$SCRIPTS/install zlib -$SCRIPTS/install freetype -$SCRIPTS/install fontconfig -$SCRIPTS/install libpng -$SCRIPTS/install pixman -$SCRIPTS/install libXrender -$SCRIPTS/install libX11 -$SCRIPTS/install Mesa -#$SCRIPTS/install libxcb - mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/src/.libs/libcairo.so* $INSTALL/usr/lib diff --git a/packages/graphics/cairo/meta b/packages/graphics/cairo/meta new file mode 100644 index 0000000000..8b75444419 --- /dev/null +++ b/packages/graphics/cairo/meta @@ -0,0 +1,14 @@ +PKG_NAME="cairo" +PKG_VERSION="1.10.0" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="LGPL" +PKG_SITE="http://cairographics.org/" +PKG_URL="http://cairographics.org/releases/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="zlib freetype fontconfig libpng pixman libXrender libX11" +PKG_BUILD_DEPENDS="toolchain zlib freetype fontconfig libpng pixman libXrender libX11" +PKG_PRIORITY="optional" +PKG_SECTION="graphics" +PKG_SHORTDESC="cairo: Multi-platform 2D graphics library" +PKG_LONGDESC="Cairo is a vector graphics library with cross-device output support. Currently supported output targets include the X Window System and in-memory image buffers. PostScript and PDF file output is planned. Cairo is designed to produce identical output on all output media while taking advantage of display hardware acceleration when available." +PKG_IS_ADDON="no" diff --git a/packages/graphics/cairo/url b/packages/graphics/cairo/url deleted file mode 100644 index 7e3b6347da..0000000000 --- a/packages/graphics/cairo/url +++ /dev/null @@ -1 +0,0 @@ -http://cairographics.org/releases/cairo-1.10.0.tar.gz From c77e3592b9830ecb54030e916947d4ca8b9b99d6 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 15:07:03 +0100 Subject: [PATCH 190/850] boost: fix metafile Signed-off-by: Stephan Raue --- packages/devel/boost/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/devel/boost/meta b/packages/devel/boost/meta index 38ecf19feb..def85e239a 100644 --- a/packages/devel/boost/meta +++ b/packages/devel/boost/meta @@ -10,5 +10,5 @@ PKG_BUILD_DEPENDS="toolchain boost-jam Python zlib bzip2" PKG_PRIORITY="optional" PKG_SECTION="devel" PKG_SHORTDESC="boost: Peer-reviewed STL style libraries for C++" -PKG_LONGDESC="Boost provides free peer-reviewed portable C++ source libraries. The emphasis is on libraries which work well with the C++ Standard Library. One goal is to establish "existing practice" and provide reference implementations so that the Boost libraries are suitable for eventual standardization. Some of the libraries have already been proposed for inclusion in the C++ Standards Committee's upcoming C++ Standard Library Technical Report." +PKG_LONGDESC="Boost provides free peer-reviewed portable C++ source libraries. The emphasis is on libraries which work well with the C++ Standard Library. One goal is to establish existing practice and provide reference implementations so that the Boost libraries are suitable for eventual standardization. Some of the libraries have already been proposed for inclusion in the C++ Standards Committee's upcoming C++ Standard Library Technical Report." PKG_IS_ADDON="no" From 2d95632ed1d4acf7b580e20b03ba115abf72a4e3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 15:07:12 +0100 Subject: [PATCH 191/850] boost-jam: fix metafile Signed-off-by: Stephan Raue --- packages/devel/boost-jam/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/devel/boost-jam/meta b/packages/devel/boost-jam/meta index d549b17a73..f5cc7c531a 100644 --- a/packages/devel/boost-jam/meta +++ b/packages/devel/boost-jam/meta @@ -10,5 +10,5 @@ PKG_BUILD_DEPENDS="toolchain" PKG_PRIORITY="optional" PKG_SECTION="devel" PKG_SHORTDESC="boost: Peer-reviewed STL style libraries for C++" -PKG_LONGDESC="Boost provides free peer-reviewed portable C++ source libraries. The emphasis is on libraries which work well with the C++ Standard Library. One goal is to establish "existing practice" and provide reference implementations so that the Boost libraries are suitable for eventual standardization. Some of the libraries have already been proposed for inclusion in the C++ Standards Committee's upcoming C++ Standard Library Technical Report." +PKG_LONGDESC="Boost provides free peer-reviewed portable C++ source libraries. The emphasis is on libraries which work well with the C++ Standard Library. One goal is to establish existing practice and provide reference implementations so that the Boost libraries are suitable for eventual standardization. Some of the libraries have already been proposed for inclusion in the C++ Standards Committee's upcoming C++ Standard Library Technical Report." PKG_IS_ADDON="no" From 56fbd1e7937350aeb2414d932c4b9a231673ca31 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 15:07:42 +0100 Subject: [PATCH 192/850] transmission: fix description Signed-off-by: Stephan Raue --- packages/network/transmission/config/transmission.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/network/transmission/config/transmission.conf b/packages/network/transmission/config/transmission.conf index 2573794204..77bd069b4d 100644 --- a/packages/network/transmission/config/transmission.conf +++ b/packages/network/transmission/config/transmission.conf @@ -21,7 +21,7 @@ TRANSMISSION_PWD="openelec" # Download directory for downloaded files -# Leave blank to use the 'standard' download dir /storage/downloads +# Leave blank to use the default download dir (/storage/downloads) TRANSMISSION_DLDIR="" # Incoming directory for non completed files From 611cd058ce3e0f699999e2fcf4a3dc1270f4cba8 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 15:14:49 +0100 Subject: [PATCH 193/850] Python: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/lang/Python/build | 8 -------- packages/lang/Python/install | 5 ----- packages/lang/Python/meta | 17 +++++++++++++++++ ...ile.diff => Python-2.6.6-001_xcompile.patch} | 0 ...=> Python-2.6.6-002_xcompile_path-0.1.patch} | 0 ..._xcompile_disable_modules_and_ssl-0.1.patch} | 0 ...iff => Python-2.6.6-015_no_static_lib.patch} | 0 packages/lang/Python/url | 1 - 8 files changed, 17 insertions(+), 14 deletions(-) create mode 100644 packages/lang/Python/meta rename packages/lang/Python/patches/{001-Python-2.6.6-xcompile.diff => Python-2.6.6-001_xcompile.patch} (100%) rename packages/lang/Python/patches/{002-Python-2.6.6-xcompile_path-0.1.diff => Python-2.6.6-002_xcompile_path-0.1.patch} (100%) rename packages/lang/Python/patches/{003-Python-2.6.6-xcompile-disable_modules_and_ssl-0.1.diff => Python-2.6.6-003_xcompile_disable_modules_and_ssl-0.1.patch} (100%) rename packages/lang/Python/patches/{015-python-2.6.6-no-static-lib.diff => Python-2.6.6-015_no_static_lib.patch} (100%) delete mode 100644 packages/lang/Python/url diff --git a/packages/lang/Python/build b/packages/lang/Python/build index 28d84aa77c..ad490b7b88 100755 --- a/packages/lang/Python/build +++ b/packages/lang/Python/build @@ -2,14 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build expat-host -$SCRIPTS/build sqlite -$SCRIPTS/build expat -$SCRIPTS/build openssl -$SCRIPTS/build zlib -$SCRIPTS/build libffi - PY_DISABLED_MODULES="readline _curses _curses_panel _tkinter nis gdbm bsddb _codecs_kr _codecs_jp _codecs_cn _codecs_tw _codecs_hk" cd $PKG_BUILD diff --git a/packages/lang/Python/install b/packages/lang/Python/install index 5dea9153ff..382aefaa08 100755 --- a/packages/lang/Python/install +++ b/packages/lang/Python/install @@ -2,11 +2,6 @@ . config/options $1 -$SCRIPTS/install openssl -$SCRIPTS/install zlib -$SCRIPTS/install libffi -$SCRIPTS/install file # needed by platform.architecture() - PYTHON_VERSION=2.6 PYTHON_LIB_DIR=$INSTALL/usr/lib/python$PYTHON_VERSION diff --git a/packages/lang/Python/meta b/packages/lang/Python/meta new file mode 100644 index 0000000000..1ed3a6d81f --- /dev/null +++ b/packages/lang/Python/meta @@ -0,0 +1,17 @@ +PKG_NAME="Python" +PKG_VERSION="2.6.6" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.python.org/" +PKG_URL="http://www.python.org/ftp/python/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="openssl zlib libffi file" +PKG_BUILD_DEPENDS="toolchain expat-host sqlite expat openssl zlib libffi" +PKG_PRIORITY="optional" +PKG_SECTION="lang" +PKG_SHORTDESC="python: The Python programming language" +PKG_LONGDESC="Python is an interpreted object-oriented programming language, and is often compared with Tcl, Perl, Java or Scheme." +PKG_IS_ADDON="no" + + + diff --git a/packages/lang/Python/patches/001-Python-2.6.6-xcompile.diff b/packages/lang/Python/patches/Python-2.6.6-001_xcompile.patch similarity index 100% rename from packages/lang/Python/patches/001-Python-2.6.6-xcompile.diff rename to packages/lang/Python/patches/Python-2.6.6-001_xcompile.patch diff --git a/packages/lang/Python/patches/002-Python-2.6.6-xcompile_path-0.1.diff b/packages/lang/Python/patches/Python-2.6.6-002_xcompile_path-0.1.patch similarity index 100% rename from packages/lang/Python/patches/002-Python-2.6.6-xcompile_path-0.1.diff rename to packages/lang/Python/patches/Python-2.6.6-002_xcompile_path-0.1.patch diff --git a/packages/lang/Python/patches/003-Python-2.6.6-xcompile-disable_modules_and_ssl-0.1.diff b/packages/lang/Python/patches/Python-2.6.6-003_xcompile_disable_modules_and_ssl-0.1.patch similarity index 100% rename from packages/lang/Python/patches/003-Python-2.6.6-xcompile-disable_modules_and_ssl-0.1.diff rename to packages/lang/Python/patches/Python-2.6.6-003_xcompile_disable_modules_and_ssl-0.1.patch diff --git a/packages/lang/Python/patches/015-python-2.6.6-no-static-lib.diff b/packages/lang/Python/patches/Python-2.6.6-015_no_static_lib.patch similarity index 100% rename from packages/lang/Python/patches/015-python-2.6.6-no-static-lib.diff rename to packages/lang/Python/patches/Python-2.6.6-015_no_static_lib.patch diff --git a/packages/lang/Python/url b/packages/lang/Python/url deleted file mode 100644 index 5e2c79aafd..0000000000 --- a/packages/lang/Python/url +++ /dev/null @@ -1 +0,0 @@ -http://www.python.org/ftp/python/2.6.6/Python-2.6.6.tar.bz2 From 80e1eaf27ff649691fc921ebffbe756d0034f890 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 15:15:01 +0100 Subject: [PATCH 194/850] lua: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/lang/lua/build | 2 -- packages/lang/lua/meta | 14 ++++++++++++++ packages/lang/lua/url | 1 - 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 packages/lang/lua/meta delete mode 100644 packages/lang/lua/url diff --git a/packages/lang/lua/build b/packages/lang/lua/build index c6a5cb3ed6..e402414f59 100755 --- a/packages/lang/lua/build +++ b/packages/lang/lua/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD make -C src \ diff --git a/packages/lang/lua/meta b/packages/lang/lua/meta new file mode 100644 index 0000000000..1661d43aa8 --- /dev/null +++ b/packages/lang/lua/meta @@ -0,0 +1,14 @@ +PKG_NAME="lua" +PKG_VERSION="5.1.4" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="MIT" +PKG_SITE="http://www.lua.org/" +PKG_URL="http://www.lua.org/ftp/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="lang" +PKG_SHORTDESC="lua: A lightweight, extensible programming language" +PKG_LONGDESC="Lua is a powerful light-weight programming language designed for extending applications. Lua is also frequently used as a general-purpose, stand-alone language." +PKG_IS_ADDON="no" \ No newline at end of file diff --git a/packages/lang/lua/url b/packages/lang/lua/url deleted file mode 100644 index b294a99545..0000000000 --- a/packages/lang/lua/url +++ /dev/null @@ -1 +0,0 @@ -http://www.lua.org/ftp/lua-5.1.4.tar.gz \ No newline at end of file From c091335aae83619ffbee6dd2a12af5f057e92b88 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 16:42:49 +0100 Subject: [PATCH 195/850] libmicrohttpd: add metafile support Signed-off-by: Stephan Raue --- packages/web/libmicrohttpd/build | 2 -- packages/web/libmicrohttpd/install | 2 +- packages/web/libmicrohttpd/meta | 14 ++++++++++++++ packages/web/libmicrohttpd/url | 1 - 4 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 packages/web/libmicrohttpd/meta delete mode 100644 packages/web/libmicrohttpd/url diff --git a/packages/web/libmicrohttpd/build b/packages/web/libmicrohttpd/build index 826d8d1b09..b71d5fc58a 100755 --- a/packages/web/libmicrohttpd/build +++ b/packages/web/libmicrohttpd/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/web/libmicrohttpd/install b/packages/web/libmicrohttpd/install index 7cc66a3bd8..413abff2c8 100755 --- a/packages/web/libmicrohttpd/install +++ b/packages/web/libmicrohttpd/install @@ -3,5 +3,5 @@ . config/options $1 mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/src/daemon/.libs/*.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/src/daemon/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/web/libmicrohttpd/meta b/packages/web/libmicrohttpd/meta new file mode 100644 index 0000000000..be8eb0a7c6 --- /dev/null +++ b/packages/web/libmicrohttpd/meta @@ -0,0 +1,14 @@ +PKG_NAME="libmicrohttpd" +PKG_VERSION="0.4.6" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.gnu.org/software/libmicrohttpd/" +PKG_URL="ftp://sunsite.cnlab-switch.ch/mirror/gnu/$PKG_NAME/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="web" +PKG_SHORTDESC="libmicrohttpd: a small webserver C library" +PKG_LONGDESC="GNU libmicrohttpd is a small C library that is supposed to make it easy to run an HTTP server as part of another application." +PKG_IS_ADDON="no" diff --git a/packages/web/libmicrohttpd/url b/packages/web/libmicrohttpd/url deleted file mode 100644 index 1502e63b3d..0000000000 --- a/packages/web/libmicrohttpd/url +++ /dev/null @@ -1 +0,0 @@ -ftp://sunsite.cnlab-switch.ch/mirror/gnu/libmicrohttpd/libmicrohttpd-0.4.6.tar.gz \ No newline at end of file From b96e42a855908fd4cfe85c2be13937017cfb619a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 16:43:12 +0100 Subject: [PATCH 196/850] hdparm: add metafile support Signed-off-by: Stephan Raue --- packages/tools/hdparm/build | 2 -- packages/tools/hdparm/meta | 14 ++++++++++++++ packages/tools/hdparm/url | 1 - 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 packages/tools/hdparm/meta delete mode 100644 packages/tools/hdparm/url diff --git a/packages/tools/hdparm/build b/packages/tools/hdparm/build index bf0ba7aaec..cd1a3b85e6 100755 --- a/packages/tools/hdparm/build +++ b/packages/tools/hdparm/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD make binprefix="/usr" \ sbindir="/sbin" \ diff --git a/packages/tools/hdparm/meta b/packages/tools/hdparm/meta new file mode 100644 index 0000000000..24a3746977 --- /dev/null +++ b/packages/tools/hdparm/meta @@ -0,0 +1,14 @@ +PKG_NAME="hdparm" +PKG_VERSION="9.36" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="BSD" +PKG_SITE="http://sourceforge.net/projects/hdparm/" +PKG_URL="http://downloads.sourceforge.net/project/$PKG_NAME/$PKG_NAME/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="tools" +PKG_SHORTDESC="hdparm: Get/set hard disk parameters" +PKG_LONGDESC="Shell utility to access/tune ioctl features of the Linux IDE driver and IDE drives." +PKG_IS_ADDON="no" diff --git a/packages/tools/hdparm/url b/packages/tools/hdparm/url deleted file mode 100644 index 99f2b506d7..0000000000 --- a/packages/tools/hdparm/url +++ /dev/null @@ -1 +0,0 @@ -http://downloads.sourceforge.net/project/hdparm/hdparm/hdparm-9.36.tar.gz \ No newline at end of file From 757d73a75a5105fcdc1addf080c0578c9001546e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 16:43:31 +0100 Subject: [PATCH 197/850] e2fsprogs: add metafile support Signed-off-by: Stephan Raue --- packages/tools/e2fsprogs/build | 3 --- packages/tools/e2fsprogs/install | 2 -- packages/tools/e2fsprogs/meta | 14 ++++++++++++++ packages/tools/e2fsprogs/url | 1 - 4 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 packages/tools/e2fsprogs/meta delete mode 100644 packages/tools/e2fsprogs/url diff --git a/packages/tools/e2fsprogs/build b/packages/tools/e2fsprogs/build index cab6e7593c..3551927f45 100755 --- a/packages/tools/e2fsprogs/build +++ b/packages/tools/e2fsprogs/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build util-linux-ng - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ diff --git a/packages/tools/e2fsprogs/install b/packages/tools/e2fsprogs/install index c8ad902821..bf751a33c5 100755 --- a/packages/tools/e2fsprogs/install +++ b/packages/tools/e2fsprogs/install @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/install util-linux-ng - mkdir -p $INSTALL/etc cp $PKG_BUILD/misc/mke2fs.conf $INSTALL/etc diff --git a/packages/tools/e2fsprogs/meta b/packages/tools/e2fsprogs/meta new file mode 100644 index 0000000000..1f7e64be27 --- /dev/null +++ b/packages/tools/e2fsprogs/meta @@ -0,0 +1,14 @@ +PKG_NAME="e2fsprogs" +PKG_VERSION="1.41.12" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://e2fsprogs.sourceforge.net/" +PKG_URL="http://downloads.sourceforge.net/project/$PKG_NAME/$PKG_NAME/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="util-linux-ng" +PKG_BUILD_DEPENDS="toolchain util-linux-ng" +PKG_PRIORITY="optional" +PKG_SECTION="tools" +PKG_SHORTDESC="e2fsprogs: Utilities for use with the ext2 filesystem" +PKG_LONGDESC="The filesystem utilities for the EXT2 filesystem, including e2fsck, mke2fs, dumpe2fs, fsck, and others." +PKG_IS_ADDON="no" diff --git a/packages/tools/e2fsprogs/url b/packages/tools/e2fsprogs/url deleted file mode 100644 index edcf5deeab..0000000000 --- a/packages/tools/e2fsprogs/url +++ /dev/null @@ -1 +0,0 @@ -http://downloads.sourceforge.net/project/e2fsprogs/e2fsprogs/1.41.12/e2fsprogs-1.41.12.tar.gz \ No newline at end of file From d5719ac2a27bac9b204fa7e4c56f7ff67076bc28 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 16:43:50 +0100 Subject: [PATCH 198/850] dialog: add metafile support Signed-off-by: Stephan Raue --- packages/tools/dialog/build | 3 --- packages/tools/dialog/install | 2 -- packages/tools/dialog/meta | 14 ++++++++++++++ packages/tools/dialog/url | 1 - 4 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 packages/tools/dialog/meta delete mode 100644 packages/tools/dialog/url diff --git a/packages/tools/dialog/build b/packages/tools/dialog/build index 36860f5c7e..eb4fecf1a8 100755 --- a/packages/tools/dialog/build +++ b/packages/tools/dialog/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build ncurses - cd $PKG_BUILD ac_cv_path_NCURSES_CONFIG="$ROOT/$TOOLCHAIN/bin/ncurses-config" \ diff --git a/packages/tools/dialog/install b/packages/tools/dialog/install index 1663879f1b..7096d78a6a 100755 --- a/packages/tools/dialog/install +++ b/packages/tools/dialog/install @@ -2,7 +2,5 @@ . config/options $1 -$SCRIPTS/install ncurses - mkdir -p $INSTALL/usr/bin cp $PKG_BUILD/dialog $INSTALL/usr/bin diff --git a/packages/tools/dialog/meta b/packages/tools/dialog/meta new file mode 100644 index 0000000000..f435cb2b3c --- /dev/null +++ b/packages/tools/dialog/meta @@ -0,0 +1,14 @@ +PKG_NAME="dialog" +PKG_VERSION="1.1-20100428" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://invisible-island.net/dialog/" +PKG_URL="ftp://invisible-island.net/dialog/$PKG_NAME-$PKG_VERSION.tgz" +PKG_DEPENDS="ncurses" +PKG_BUILD_DEPENDS="toolchain ncurses" +PKG_PRIORITY="optional" +PKG_SECTION="tools" +PKG_SHORTDESC="dialog: A utility for creating TTY dialog boxes" +PKG_LONGDESC="Dialog is a utility that allows you to show dialog boxes (containing questions or messages) in TTY (text mode) interfaces from shell scripts. Dialog is initally written by Savio Lam and various branches do exist (e.g. lxdialog which is used for a linux kernel make menuconfig). This is the branch maintained by Thomas Dickey." +PKG_IS_ADDON="no" diff --git a/packages/tools/dialog/url b/packages/tools/dialog/url deleted file mode 100644 index 580adcdd76..0000000000 --- a/packages/tools/dialog/url +++ /dev/null @@ -1 +0,0 @@ -ftp://invisible-island.net/dialog/dialog-1.1-20100428.tgz From d6673c9cdf62ab265980927527a908ff42a6abf2 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 16:44:17 +0100 Subject: [PATCH 199/850] flashrom: rename patches Signed-off-by: Stephan Raue --- ...d_Nvidia_nForce_MCP6x_MCP7x_series_SPI_flashing_support.patch} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/tools/flashrom/patches/{Add-Nvidia-nForce-MCP6x-MCP7x-series-SPI-flashing-support.diff => flashrom-1061-Add_Nvidia_nForce_MCP6x_MCP7x_series_SPI_flashing_support.patch} (100%) diff --git a/packages/tools/flashrom/patches/Add-Nvidia-nForce-MCP6x-MCP7x-series-SPI-flashing-support.diff b/packages/tools/flashrom/patches/flashrom-1061-Add_Nvidia_nForce_MCP6x_MCP7x_series_SPI_flashing_support.patch similarity index 100% rename from packages/tools/flashrom/patches/Add-Nvidia-nForce-MCP6x-MCP7x-series-SPI-flashing-support.diff rename to packages/tools/flashrom/patches/flashrom-1061-Add_Nvidia_nForce_MCP6x_MCP7x_series_SPI_flashing_support.patch From 70c8c301982a2eac8970664519aa91eec9fb2baf Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 16:44:39 +0100 Subject: [PATCH 200/850] installer: add metafile Signed-off-by: Stephan Raue --- packages/tools/installer/meta | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 packages/tools/installer/meta diff --git a/packages/tools/installer/meta b/packages/tools/installer/meta new file mode 100644 index 0000000000..15054c2c8b --- /dev/null +++ b/packages/tools/installer/meta @@ -0,0 +1,16 @@ +PKG_NAME="installer" +PKG_VERSION="" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.openelec.tv/" +PKG_URL="" +PKG_DEPENDS="busybox bash dialog parted e2fsprogs syslinux flashrom" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="tools" +PKG_SHORTDESC="installer: OpenELEC.tv Install manager" +PKG_LONGDESC="OpenELEC.tv Install manager to install the system on any disk" +PKG_IS_ADDON="no" + + From d45762ce1996e8c22b9eb9555c1ae59797d6bc2e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 16:49:59 +0100 Subject: [PATCH 201/850] SDL: add yasm as an dep. Signed-off-by: Stephan Raue --- packages/multimedia/SDL/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/multimedia/SDL/meta b/packages/multimedia/SDL/meta index a70c82005e..5302c0ca9d 100644 --- a/packages/multimedia/SDL/meta +++ b/packages/multimedia/SDL/meta @@ -6,7 +6,7 @@ PKG_LICENSE="GPL" PKG_SITE="http://www.libsdl.org/" PKG_URL="http://www.libsdl.org/release/$PKG_NAME-$PKG_VERSION.tar.gz" PKG_DEPENDS="alsa-lib libX11 libXrandr Mesa" -PKG_BUILD_DEPENDS="toolchain alsa-lib libX11 libXrandr Mesa" +PKG_BUILD_DEPENDS="toolchain yasm alsa-lib libX11 libXrandr Mesa" PKG_PRIORITY="optional" PKG_SECTION="multimedia" PKG_SHORTDESC="libsdl: A cross-platform Graphic API" From e063d787e02c6fa772d43f45dea9dc81b9daa831 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 18:20:54 +0100 Subject: [PATCH 202/850] polkit: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/security/polkit/install | 7 ------- packages/security/polkit/meta | 14 ++++++++++++++ packages/security/polkit/url | 1 - 3 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 packages/security/polkit/meta delete mode 100644 packages/security/polkit/url diff --git a/packages/security/polkit/install b/packages/security/polkit/install index 0ed199aeaa..cdb9bf9e22 100755 --- a/packages/security/polkit/install +++ b/packages/security/polkit/install @@ -2,13 +2,6 @@ . config/options $1 -$SCRIPTS/install zlib -$SCRIPTS/install sg3_utils -$SCRIPTS/install glib -$SCRIPTS/install udev -$SCRIPTS/install eggdbus -$SCRIPTS/install expat - mkdir -p $INSTALL/etc/dbus-1/system.d cp -P $PKG_BUILD/data/org.freedesktop.PolicyKit1.conf $INSTALL/etc/dbus-1/system.d diff --git a/packages/security/polkit/meta b/packages/security/polkit/meta new file mode 100644 index 0000000000..8dc8aa52b3 --- /dev/null +++ b/packages/security/polkit/meta @@ -0,0 +1,14 @@ +PKG_NAME="polkit" +PKG_VERSION="0.99" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="MIT" +PKG_SITE="http://gitweb.freedesktop.org/?p=PolicyKit.git;a=summary" +PKG_URL="http://hal.freedesktop.org/releases/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="zlib sg3_utils glib udev eggdbus expat" +PKG_BUILD_DEPENDS="toolchain zlib sg3_utils glib udev eggdbus expat" +PKG_PRIORITY="optional" +PKG_SECTION="security" +PKG_SHORTDESC="polkit: Authorization Toolkit" +PKG_LONGDESC="PolicyKit is a toolkit for defining and handling authorizations. It is used for allowing unprivileged processes to speak to privileged processes." +PKG_IS_ADDON="no" diff --git a/packages/security/polkit/url b/packages/security/polkit/url deleted file mode 100644 index 8059c32146..0000000000 --- a/packages/security/polkit/url +++ /dev/null @@ -1 +0,0 @@ -http://hal.freedesktop.org/releases/polkit-0.99.tar.gz \ No newline at end of file From d0a2330e911f24e9bf514b1151da85f9d0e27b65 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 18:21:10 +0100 Subject: [PATCH 203/850] openssl: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/security/openssl/build | 3 --- packages/security/openssl/install | 2 -- packages/security/openssl/meta | 14 ++++++++++++++ packages/security/openssl/url | 1 - 4 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 packages/security/openssl/meta delete mode 100644 packages/security/openssl/url diff --git a/packages/security/openssl/build b/packages/security/openssl/build index 7dab710388..ad2caf3adc 100755 --- a/packages/security/openssl/build +++ b/packages/security/openssl/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build zlib - export MAKEFLAGS=-j1 case $TARGET_ARCH in diff --git a/packages/security/openssl/install b/packages/security/openssl/install index 5777d11969..106899b2c5 100755 --- a/packages/security/openssl/install +++ b/packages/security/openssl/install @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/install zlib - mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/libcrypto.so* $INSTALL/usr/lib cp -P $PKG_BUILD/libssl.so* $INSTALL/usr/lib diff --git a/packages/security/openssl/meta b/packages/security/openssl/meta new file mode 100644 index 0000000000..d3e3280913 --- /dev/null +++ b/packages/security/openssl/meta @@ -0,0 +1,14 @@ +PKG_NAME="openssl" +PKG_VERSION="1.0.0a" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.openssl.org/" +PKG_URL="http://www.openssl.org/source/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="zlib" +PKG_BUILD_DEPENDS="toolchain zlib" +PKG_PRIORITY="optional" +PKG_SECTION="security" +PKG_SHORTDESC="openssl: Open Source toolkit for Secure Sockets Layer and Transport Layer Security" +PKG_LONGDESC="The OpenSSL Project is a collaborative effort to develop a robust, commercial-grade, fully featured, and Open Source toolkit implementing the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) protocols as well as a full-strength general purpose cryptography library. The project is managed by a worldwide community of volunteers that use the Internet to communicate, plan, and develop the OpenSSL toolkit and its related documentation." +PKG_IS_ADDON="no" diff --git a/packages/security/openssl/url b/packages/security/openssl/url deleted file mode 100644 index 91fdd6d0bc..0000000000 --- a/packages/security/openssl/url +++ /dev/null @@ -1 +0,0 @@ -http://www.openssl.org/source/openssl-1.0.0a.tar.gz \ No newline at end of file From 3bc88a68dfadbeab93cbfef5922cb2470d6d6708 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 18:21:28 +0100 Subject: [PATCH 204/850] freetype: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/print/freetype/build | 3 --- packages/print/freetype/install | 2 -- packages/print/freetype/meta | 14 ++++++++++++++ packages/print/freetype/url | 1 - 4 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 packages/print/freetype/meta delete mode 100644 packages/print/freetype/url diff --git a/packages/print/freetype/build b/packages/print/freetype/build index eb9f269280..2ca080c1c3 100755 --- a/packages/print/freetype/build +++ b/packages/print/freetype/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build zlib - # unset LIBTOOL because freetype uses its own unset LIBTOOL diff --git a/packages/print/freetype/install b/packages/print/freetype/install index 168de65dfa..2481f09e85 100755 --- a/packages/print/freetype/install +++ b/packages/print/freetype/install @@ -2,7 +2,5 @@ . config/options $1 -$SCRIPTS/install zlib - mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/objs/.libs/libfreetype.so* $INSTALL/usr/lib diff --git a/packages/print/freetype/meta b/packages/print/freetype/meta new file mode 100644 index 0000000000..c698a331dc --- /dev/null +++ b/packages/print/freetype/meta @@ -0,0 +1,14 @@ +PKG_NAME="freetype" +PKG_VERSION="2.4.3" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.freetype.org" +PKG_URL="http://mirror.lihnidos.org/GNU/savannah/freetype/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="zlib" +PKG_BUILD_DEPENDS="toolchain zlib" +PKG_PRIORITY="optional" +PKG_SECTION="print" +PKG_SHORTDESC="freetype: TrueType font rendering library" +PKG_LONGDESC="The FreeType engine is a free and portable TrueType font rendering engine. It has been developed to provide TT support to a great variety of platforms and environments." +PKG_IS_ADDON="no" diff --git a/packages/print/freetype/url b/packages/print/freetype/url deleted file mode 100644 index 610c012b57..0000000000 --- a/packages/print/freetype/url +++ /dev/null @@ -1 +0,0 @@ -http://mirror.lihnidos.org/GNU/savannah/freetype/freetype-2.4.3.tar.bz2 \ No newline at end of file From d8b25f4f2c948b08a77b005306846953a7e61408 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 18:21:45 +0100 Subject: [PATCH 205/850] libdaemon: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/other/libdaemon/build | 2 -- packages/other/libdaemon/install | 2 +- packages/other/libdaemon/meta | 14 ++++++++++++++ packages/other/libdaemon/url | 1 - 4 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 packages/other/libdaemon/meta delete mode 100644 packages/other/libdaemon/url diff --git a/packages/other/libdaemon/build b/packages/other/libdaemon/build index 04dfb735ec..a6260cd134 100755 --- a/packages/other/libdaemon/build +++ b/packages/other/libdaemon/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ac_cv_func_setpgrp_void=no \ ./configure --host=$TARGET_NAME \ diff --git a/packages/other/libdaemon/install b/packages/other/libdaemon/install index fd547a1173..ee48040034 100755 --- a/packages/other/libdaemon/install +++ b/packages/other/libdaemon/install @@ -3,4 +3,4 @@ . config/options $1 mkdir -p $INSTALL/usr/lib -cp -PR $PKG_BUILD/$1/.libs/*.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/$1/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/other/libdaemon/meta b/packages/other/libdaemon/meta new file mode 100644 index 0000000000..2099fbc160 --- /dev/null +++ b/packages/other/libdaemon/meta @@ -0,0 +1,14 @@ +PKG_NAME="libdaemon" +PKG_VERSION="0.14" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://0pointer.de/lennart/projects/libdaemon/" +PKG_URL="http://0pointer.de/lennart/projects/libdaemon/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="other" +PKG_SHORTDESC="libdaemon: A lightweight C library which eases the writing of UNIX daemons" +PKG_LONGDESC="A wrapper around fork() which does the correct daemonization procedure of a process. A wrapper around syslog() for simpler and compatible log output to Syslog or STDERR. An API for writing PID files. An API for serializing UNIX signals into a pipe for usage with select() or poll()." +PKG_IS_ADDON="no" diff --git a/packages/other/libdaemon/url b/packages/other/libdaemon/url deleted file mode 100644 index 53d3d5ea89..0000000000 --- a/packages/other/libdaemon/url +++ /dev/null @@ -1 +0,0 @@ -http://0pointer.de/lennart/projects/libdaemon/libdaemon-0.14.tar.gz \ No newline at end of file From 93da269808c0bd5e2be9aa33e23c69fac69956c9 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 18:22:05 +0100 Subject: [PATCH 206/850] libIDL: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/other/libIDL/build | 6 +----- packages/other/libIDL/install | 2 -- packages/other/libIDL/meta | 14 ++++++++++++++ packages/other/libIDL/url | 1 - 4 files changed, 15 insertions(+), 8 deletions(-) create mode 100644 packages/other/libIDL/meta delete mode 100644 packages/other/libIDL/url diff --git a/packages/other/libIDL/build b/packages/other/libIDL/build index 9cdd76be28..79a4055ce0 100755 --- a/packages/other/libIDL/build +++ b/packages/other/libIDL/build @@ -2,13 +2,9 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build glib - cd $PKG_BUILD -mkdir -p .build-target -cd .build-target +mkdir -p .build-target && cd .build-target libIDL_cv_long_long_format=ll \ ../configure --host=$TARGET_NAME \ diff --git a/packages/other/libIDL/install b/packages/other/libIDL/install index bda1a1af20..f08009babd 100755 --- a/packages/other/libIDL/install +++ b/packages/other/libIDL/install @@ -2,7 +2,5 @@ . config/options $1 -$SCRIPTS/install glib - mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/.build-target/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/other/libIDL/meta b/packages/other/libIDL/meta new file mode 100644 index 0000000000..02c6e576ce --- /dev/null +++ b/packages/other/libIDL/meta @@ -0,0 +1,14 @@ +PKG_NAME="libIDL" +PKG_VERSION="0.8.14" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="LGPL" +PKG_SITE="http://www.gnome.org" +PKG_URL="ftp://ftp.gnome.org/pub/gnome/sources/libIDL/0.8/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="glib" +PKG_BUILD_DEPENDS="toolchain glib" +PKG_PRIORITY="optional" +PKG_SECTION="other" +PKG_SHORTDESC="libidl: Library for creating trees of CORBA IDL files" +PKG_LONGDESC="libIDL is a library for creating trees of CORBA Interface Definition Language (IDL) files." +PKG_IS_ADDON="no" diff --git a/packages/other/libIDL/url b/packages/other/libIDL/url deleted file mode 100644 index 3b1f067825..0000000000 --- a/packages/other/libIDL/url +++ /dev/null @@ -1 +0,0 @@ -ftp://ftp.gnome.org/pub/gnome/sources/libIDL/0.8/libIDL-0.8.14.tar.bz2 \ No newline at end of file From 6024878234769cce9bfb0ff96ed7c924396ef03e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 18:22:14 +0100 Subject: [PATCH 207/850] libIDL-host: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/other/libIDL-host/build | 6 +----- packages/other/libIDL-host/meta | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 packages/other/libIDL-host/meta diff --git a/packages/other/libIDL-host/build b/packages/other/libIDL-host/build index 2a6da1f4ae..946108d5d0 100755 --- a/packages/other/libIDL-host/build +++ b/packages/other/libIDL-host/build @@ -2,16 +2,12 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build glib-host $SCRIPTS/unpack libIDL setup_toolchain host cd $BUILD/libIDL* - -mkdir -p .build-host -cd .build-host +mkdir -p .build-host && cd .build-host libIDL_cv_long_long_format=ll \ ../configure --prefix=$ROOT/$TOOLCHAIN diff --git a/packages/other/libIDL-host/meta b/packages/other/libIDL-host/meta new file mode 100644 index 0000000000..6f6618f1c8 --- /dev/null +++ b/packages/other/libIDL-host/meta @@ -0,0 +1,14 @@ +PKG_NAME="libIDL" +PKG_VERSION="" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="LGPL" +PKG_SITE="http://www.gnome.org" +PKG_URL="" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain glib-host" +PKG_PRIORITY="optional" +PKG_SECTION="other" +PKG_SHORTDESC="libidl: Library for creating trees of CORBA IDL files" +PKG_LONGDESC="libIDL is a library for creating trees of CORBA Interface Definition Language (IDL) files." +PKG_IS_ADDON="no" From 7185102b006220ed43d114f8407e5d131b89a3da Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 18:22:36 +0100 Subject: [PATCH 208/850] fribidi: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/other/fribidi/build | 2 -- packages/other/fribidi/install | 2 +- packages/other/fribidi/meta | 14 ++++++++++++++ packages/other/fribidi/url | 1 - 4 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 packages/other/fribidi/meta delete mode 100644 packages/other/fribidi/url diff --git a/packages/other/fribidi/build b/packages/other/fribidi/build index 8caa8aeaca..9792858b67 100755 --- a/packages/other/fribidi/build +++ b/packages/other/fribidi/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/other/fribidi/install b/packages/other/fribidi/install index 8fb846d505..6affa11e33 100755 --- a/packages/other/fribidi/install +++ b/packages/other/fribidi/install @@ -3,4 +3,4 @@ . config/options $1 mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/lib/.libs/*.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/lib/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/other/fribidi/meta b/packages/other/fribidi/meta new file mode 100644 index 0000000000..d8c3928661 --- /dev/null +++ b/packages/other/fribidi/meta @@ -0,0 +1,14 @@ +PKG_NAME="fribidi" +PKG_VERSION="0.19.2" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="LGPL" +PKG_SITE="http://fribidi.org/" +PKG_URL="http://fribidi.org/download/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="other" +PKG_SHORTDESC="fribidi: The Bidirectional Algorithm library" +PKG_LONGDESC="The library implements all of the algorithm as described in the Unicode Standard Annex #9, The Bidirectional Algorithm, http://www.unicode.org/unicode/reports/tr9/. FriBidi is exhautively tested against Bidi Reference Code, and due to our best knowledge, does not contain any conformance bugs." +PKG_IS_ADDON="no" diff --git a/packages/other/fribidi/url b/packages/other/fribidi/url deleted file mode 100644 index 4e2af438b2..0000000000 --- a/packages/other/fribidi/url +++ /dev/null @@ -1 +0,0 @@ -http://fribidi.org/download/fribidi-0.19.2.tar.gz \ No newline at end of file From 0a064168702867ebec98172e413c6652f7427f45 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 18:22:48 +0100 Subject: [PATCH 209/850] ppp: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/network/ppp/build | 2 -- packages/network/ppp/meta | 14 ++++++++++++++ packages/network/ppp/url | 1 - 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 packages/network/ppp/meta delete mode 100644 packages/network/ppp/url diff --git a/packages/network/ppp/build b/packages/network/ppp/build index e01daad882..8182a769d9 100755 --- a/packages/network/ppp/build +++ b/packages/network/ppp/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure diff --git a/packages/network/ppp/meta b/packages/network/ppp/meta new file mode 100644 index 0000000000..289abd2172 --- /dev/null +++ b/packages/network/ppp/meta @@ -0,0 +1,14 @@ +PKG_NAME="ppp" +PKG_VERSION="2.4.5" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.samba.org/ppp/" +PKG_URL="http://ppp.samba.org/ftp/ppp/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="network" +PKG_SHORTDESC="ppp: The PPP user level programs" +PKG_LONGDESC="The Point-to-Point Protocol (PPP) provides a standard way to establish a network connection over a serial link. At present, this package supports IP and the protocols layered above IP, such as TCP and UDP. The Linux port of this package also has support for IPX." +PKG_IS_ADDON="no" diff --git a/packages/network/ppp/url b/packages/network/ppp/url deleted file mode 100644 index a965890a33..0000000000 --- a/packages/network/ppp/url +++ /dev/null @@ -1 +0,0 @@ -http://ppp.samba.org/ftp/ppp/ppp-2.4.5.tar.gz From 73439169b95fa0779df46eecb90dcaa27c774701 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 18:22:58 +0100 Subject: [PATCH 210/850] ntp: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/network/ntp/build | 2 -- packages/network/ntp/meta | 14 ++++++++++++++ packages/network/ntp/url | 1 - 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 packages/network/ntp/meta delete mode 100644 packages/network/ntp/url diff --git a/packages/network/ntp/build b/packages/network/ntp/build index 3aa8d9ac26..663a7abe9a 100755 --- a/packages/network/ntp/build +++ b/packages/network/ntp/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/network/ntp/meta b/packages/network/ntp/meta new file mode 100644 index 0000000000..d76666c92d --- /dev/null +++ b/packages/network/ntp/meta @@ -0,0 +1,14 @@ +PKG_NAME="ntp" +PKG_VERSION="4.2.6p2" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.ntp.org/" +PKG_URL="http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="network" +PKG_SHORTDESC="ntp: Network Time Protocol utilities" +PKG_LONGDESC="The Network Time Protocol (NTP) is used to synchronize the time of a computer client or server to another server or reference time source, such as a radio or satellite receiver or modem. It provides client accuracies typically within a millisecond on LANs and up to a few tens of milliseconds on WANs relative to a primary server synchronized to Coordinated Universal Time (UTC) via a Global Positioning Service (GPS) receiver, for example." +PKG_IS_ADDON="no" diff --git a/packages/network/ntp/url b/packages/network/ntp/url deleted file mode 100644 index 72503bfc26..0000000000 --- a/packages/network/ntp/url +++ /dev/null @@ -1 +0,0 @@ -http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/ntp-4.2.6p2.tar.gz \ No newline at end of file From 905e1d1eb69dd7118da60d85021bbbc4757e872c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 18:23:16 +0100 Subject: [PATCH 211/850] libssh: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/network/libssh/build | 7 +------ packages/network/libssh/install | 3 --- packages/network/libssh/meta | 14 ++++++++++++++ packages/network/libssh/url | 1 - 4 files changed, 15 insertions(+), 10 deletions(-) create mode 100644 packages/network/libssh/meta delete mode 100644 packages/network/libssh/url diff --git a/packages/network/libssh/build b/packages/network/libssh/build index 820ce25d77..194660f04a 100755 --- a/packages/network/libssh/build +++ b/packages/network/libssh/build @@ -2,13 +2,8 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build zlib -$SCRIPTS/build openssl - cd $PKG_BUILD -mkdir -p build -cd build +mkdir -p build && cd build cmake -DCMAKE_TOOLCHAIN_FILE=$CMAKE_CONF \ -DCMAKE_INSTALL_PREFIX=/usr \ diff --git a/packages/network/libssh/install b/packages/network/libssh/install index 29840b7400..09373db289 100755 --- a/packages/network/libssh/install +++ b/packages/network/libssh/install @@ -2,8 +2,5 @@ . config/options $1 -$SCRIPTS/install zlib -$SCRIPTS/install openssl - mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/build/libssh/*.so* $INSTALL/usr/lib diff --git a/packages/network/libssh/meta b/packages/network/libssh/meta new file mode 100644 index 0000000000..aea25c571c --- /dev/null +++ b/packages/network/libssh/meta @@ -0,0 +1,14 @@ +PKG_NAME="libssh" +PKG_VERSION="0.4.6" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OpenSource" +PKG_SITE="http://www.libssh.org/" +PKG_URL="http://www.libssh.org/files/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="zlib openssl" +PKG_BUILD_DEPENDS="toolchain zlib openssl" +PKG_PRIORITY="optional" +PKG_SECTION="network" +PKG_SHORTDESC="libssh: A working SSH implementation by means of a library" +PKG_LONGDESC="The ssh library was designed to be used by programmers needing a working SSH implementation by the mean of a library. The complete control of the client is made by the programmer. With libssh, you can remotely execute programs, transfer files, use a secure and transparent tunnel for your remote programs. With its Secure FTP implementation, you can play with remote files easily, without third-party programs others than libcrypto (from openssl)." +PKG_IS_ADDON="no" diff --git a/packages/network/libssh/url b/packages/network/libssh/url deleted file mode 100644 index fa661f694a..0000000000 --- a/packages/network/libssh/url +++ /dev/null @@ -1 +0,0 @@ -http://www.libssh.org/files/libssh-0.4.6.tar.gz \ No newline at end of file From 1a58d468d089e2fd1a601f63fd0e214aec4b8298 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 18:23:28 +0100 Subject: [PATCH 212/850] iptables: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/network/iptables/build | 3 --- packages/network/iptables/meta | 14 ++++++++++++++ packages/network/iptables/url | 1 - 3 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 packages/network/iptables/meta delete mode 100644 packages/network/iptables/url diff --git a/packages/network/iptables/build b/packages/network/iptables/build index f0c0a59590..ae02f2cf85 100755 --- a/packages/network/iptables/build +++ b/packages/network/iptables/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build linux - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/network/iptables/meta b/packages/network/iptables/meta new file mode 100644 index 0000000000..1f733ad558 --- /dev/null +++ b/packages/network/iptables/meta @@ -0,0 +1,14 @@ +PKG_NAME="iptables" +PKG_VERSION="1.4.10" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.netfilter.org/" +PKG_URL="http://www.netfilter.org/projects/iptables/files/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain linux" +PKG_PRIORITY="optional" +PKG_SECTION="network" +PKG_SHORTDESC="iptables: IP packet filter administration" +PKG_LONGDESC="Iptables is used to set up, maintain, and inspect the tables of IP packet filter rules in the Linux kernel. There are several different tables which may be defined, and each table contains a number of built-in chains, and may contain user-defined chains." +PKG_IS_ADDON="no" diff --git a/packages/network/iptables/url b/packages/network/iptables/url deleted file mode 100644 index aaee3bf661..0000000000 --- a/packages/network/iptables/url +++ /dev/null @@ -1 +0,0 @@ -http://www.netfilter.org/projects/iptables/files/iptables-1.4.10.tar.bz2 \ No newline at end of file From 52b3fc61facafa27beee7f5d005138cf58e9900a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 18:23:40 +0100 Subject: [PATCH 213/850] ethtool: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/network/ethtool/build | 2 -- packages/network/ethtool/meta | 14 ++++++++++++++ packages/network/ethtool/url | 1 - 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 packages/network/ethtool/meta delete mode 100644 packages/network/ethtool/url diff --git a/packages/network/ethtool/build b/packages/network/ethtool/build index 01f86c4d70..94378c7920 100755 --- a/packages/network/ethtool/build +++ b/packages/network/ethtool/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ diff --git a/packages/network/ethtool/meta b/packages/network/ethtool/meta new file mode 100644 index 0000000000..4e29ffec9d --- /dev/null +++ b/packages/network/ethtool/meta @@ -0,0 +1,14 @@ +PKG_NAME="ethtool" +PKG_VERSION="2.6.35" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://sourceforge.net/projects/gkernel/" +PKG_URL="http://downloads.sourceforge.net/project/gkernel/$PKG_NAME/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="network" +PKG_SHORTDESC="ethtool: Display or change ethernet card settings" +PKG_LONGDESC="Ethtool is used for querying settings of an ethernet device and changing them." +PKG_IS_ADDON="no" diff --git a/packages/network/ethtool/url b/packages/network/ethtool/url deleted file mode 100644 index 4df1bb236e..0000000000 --- a/packages/network/ethtool/url +++ /dev/null @@ -1 +0,0 @@ -http://downloads.sourceforge.net/project/gkernel/ethtool/2.6.35/ethtool-2.6.35.tar.gz \ No newline at end of file From 2e2b8f825641b9c11af29aebd82322ae8d9de0c7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 18:23:56 +0100 Subject: [PATCH 214/850] avahi: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/network/avahi/build | 5 ----- packages/network/avahi/install | 5 ----- packages/network/avahi/meta | 14 ++++++++++++++ packages/network/avahi/url | 1 - 4 files changed, 14 insertions(+), 11 deletions(-) create mode 100644 packages/network/avahi/meta delete mode 100644 packages/network/avahi/url diff --git a/packages/network/avahi/build b/packages/network/avahi/build index 71e7969a50..926526e32e 100755 --- a/packages/network/avahi/build +++ b/packages/network/avahi/build @@ -2,11 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build expat -$SCRIPTS/build libdaemon -$SCRIPTS/build dbus - cd $PKG_BUILD py_cv_mod_gtk_=yes \ py_cv_mod_dbus_=yes \ diff --git a/packages/network/avahi/install b/packages/network/avahi/install index 9e8a845170..cd67822ed4 100755 --- a/packages/network/avahi/install +++ b/packages/network/avahi/install @@ -2,11 +2,6 @@ . config/options $1 -$SCRIPTS/install expat -$SCRIPTS/install libdaemon -$SCRIPTS/install dbus -$SCRIPTS/install connman - add_user avahi x 495 495 "avahi-daemon" "/var/run/avahi-daemon" "/bin/sh" add_group avahi 495 diff --git a/packages/network/avahi/meta b/packages/network/avahi/meta new file mode 100644 index 0000000000..c25fafd23f --- /dev/null +++ b/packages/network/avahi/meta @@ -0,0 +1,14 @@ +PKG_NAME="avahi" +PKG_VERSION="0.6.28" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://avahi.org/" +PKG_URL="http://www.avahi.org/download/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="expat libdaemon dbus connman" +PKG_BUILD_DEPENDS="toolchain expat libdaemon dbus" +PKG_PRIORITY="optional" +PKG_SECTION="network" +PKG_SHORTDESC="avahi: A Zeroconf mDNS/DNS-SD responder" +PKG_LONGDESC="Avahi is a framework for Multicast DNS Service Discovery (mDNS/DNS-SD a.k.a. Zeroconf) on Linux. It allows programs to publish and discover services running on a local network with no specific configuration. For example, you can plug into a network and instantly find printers to print to, files to look at, and people to talk to." +PKG_IS_ADDON="no" diff --git a/packages/network/avahi/url b/packages/network/avahi/url deleted file mode 100644 index 7328ee7bb5..0000000000 --- a/packages/network/avahi/url +++ /dev/null @@ -1 +0,0 @@ -http://www.avahi.org/download/avahi-0.6.28.tar.gz \ No newline at end of file From a01f47c22bd43a20f3c23ab26d57a6d518595e9b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 18:24:17 +0100 Subject: [PATCH 215/850] ipw2100-fw: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/linux-firmware/ipw2100-fw/install | 2 +- packages/linux-firmware/ipw2100-fw/meta | 14 ++++++++++++++ packages/linux-firmware/ipw2100-fw/url | 1 - 3 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 packages/linux-firmware/ipw2100-fw/meta delete mode 100644 packages/linux-firmware/ipw2100-fw/url diff --git a/packages/linux-firmware/ipw2100-fw/install b/packages/linux-firmware/ipw2100-fw/install index 3fdf7ee6c5..8ce357a033 100755 --- a/packages/linux-firmware/ipw2100-fw/install +++ b/packages/linux-firmware/ipw2100-fw/install @@ -3,4 +3,4 @@ . config/options $1 mkdir -p $INSTALL/lib/firmware - cp -PR $PKG_BUILD/* $INSTALL/lib/firmware + cp -P $PKG_BUILD/* $INSTALL/lib/firmware diff --git a/packages/linux-firmware/ipw2100-fw/meta b/packages/linux-firmware/ipw2100-fw/meta new file mode 100644 index 0000000000..32af34d74b --- /dev/null +++ b/packages/linux-firmware/ipw2100-fw/meta @@ -0,0 +1,14 @@ +PKG_NAME="ipw2100-fw" +PKG_VERSION="1.3" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="Free-to-use" +PKG_SITE="http://ipw2100.sourceforge.net/" +PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="" +PKG_PRIORITY="optional" +PKG_SECTION="linux-firmware" +PKG_SHORTDESC="ipw2100-fw: Intel PRO/Wireless 2100 Driver for Linux" +PKG_LONGDESC="This project was created by Intel to enable support for the Intel PRO/Wireless 2100 Network Connection mini PCI adapter. This project (IPW2100) is intended to be a community effort as much as is possible given some working constraints (mainly, no HW documentation is available)." +PKG_IS_ADDON="no" diff --git a/packages/linux-firmware/ipw2100-fw/url b/packages/linux-firmware/ipw2100-fw/url deleted file mode 100644 index e252b8c75f..0000000000 --- a/packages/linux-firmware/ipw2100-fw/url +++ /dev/null @@ -1 +0,0 @@ -http://sources.openelec.tv/svn/ipw2100-fw-1.3.tar.bz2 From 41cb91b25ff0e13c3a8fc15a6f9c4081a03e3ac1 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 18:24:26 +0100 Subject: [PATCH 216/850] ipw2200-fw: add metafile support, cleanups, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/linux-firmware/ipw2200-fw/meta | 14 ++++++++++++++ packages/linux-firmware/ipw2200-fw/url | 1 - 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/linux-firmware/ipw2200-fw/meta delete mode 100644 packages/linux-firmware/ipw2200-fw/url diff --git a/packages/linux-firmware/ipw2200-fw/meta b/packages/linux-firmware/ipw2200-fw/meta new file mode 100644 index 0000000000..87a2d35582 --- /dev/null +++ b/packages/linux-firmware/ipw2200-fw/meta @@ -0,0 +1,14 @@ +PKG_NAME="ipw2200-fw" +PKG_VERSION="3.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="Free-to-use" +PKG_SITE="http://ipw2200.sourceforge.net/" +PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="" +PKG_PRIORITY="optional" +PKG_SECTION="linux-firmware" +PKG_SHORTDESC="ipw2200-fw: Intel PRO/Wireless 2200 Driver for Linux" +PKG_LONGDESC="This project was created by Intel to enable support for the Intel PRO/Wireless 2200 Network Connection mini PCI adapter. This project (IPW2200) is intended to be a community effort as much as is possible given some working constraints (mainly, no HW documentation is available)." +PKG_IS_ADDON="no" diff --git a/packages/linux-firmware/ipw2200-fw/url b/packages/linux-firmware/ipw2200-fw/url deleted file mode 100644 index 549d8e930e..0000000000 --- a/packages/linux-firmware/ipw2200-fw/url +++ /dev/null @@ -1 +0,0 @@ -http://sources.openelec.tv/svn/ipw2200-fw-3.1.tgz From 32a4f72f472128d7f970893d3b1301e8d3463c51 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 13 Nov 2010 20:40:27 +0100 Subject: [PATCH 217/850] alsa-utils: clean exit 'soundconfig' Signed-off-by: Stephan Raue --- packages/audio/alsa-utils/scripts/soundconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/audio/alsa-utils/scripts/soundconfig b/packages/audio/alsa-utils/scripts/soundconfig index 9d30bf945d..6a8c6f6078 100755 --- a/packages/audio/alsa-utils/scripts/soundconfig +++ b/packages/audio/alsa-utils/scripts/soundconfig @@ -128,5 +128,6 @@ else fi +exit 0 )& From f002cb2c3ea71a715b9851cdd8fbe3f1f4713e67 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 12:38:13 +0100 Subject: [PATCH 218/850] parted: add metafile support, cleanups Signed-off-by: Stephan Raue --- packages/sysutils/parted/build | 3 - packages/sysutils/parted/install | 2 - packages/sysutils/parted/meta | 14 ++ .../patches.old/appletv_parted-1.8.8.diff | 165 ------------------ ... => parted-2.3-hi_major_sd_rh611691.patch} | 0 ...rted-2.3-lpn.diff => parted-2.3-lpn.patch} | 0 packages/sysutils/parted/url | 1 - 7 files changed, 14 insertions(+), 171 deletions(-) create mode 100644 packages/sysutils/parted/meta delete mode 100644 packages/sysutils/parted/patches.old/appletv_parted-1.8.8.diff rename packages/sysutils/parted/patches/{parted-2.2-hi-major-sd-rh611691.diff => parted-2.3-hi_major_sd_rh611691.patch} (100%) rename packages/sysutils/parted/patches/{parted-2.3-lpn.diff => parted-2.3-lpn.patch} (100%) delete mode 100644 packages/sysutils/parted/url diff --git a/packages/sysutils/parted/build b/packages/sysutils/parted/build index 1725d56b85..e2aee46bdc 100755 --- a/packages/sysutils/parted/build +++ b/packages/sysutils/parted/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build util-linux-ng - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/sysutils/parted/install b/packages/sysutils/parted/install index f61d4e3bdd..42c6be6e64 100755 --- a/packages/sysutils/parted/install +++ b/packages/sysutils/parted/install @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/install util-linux-ng - mkdir -p $INSTALL/usr/bin cp $PKG_BUILD/parted/.libs/parted $INSTALL/usr/bin cp $PKG_BUILD/partprobe/.libs/partprobe $INSTALL/usr/bin diff --git a/packages/sysutils/parted/meta b/packages/sysutils/parted/meta new file mode 100644 index 0000000000..d51c077d0b --- /dev/null +++ b/packages/sysutils/parted/meta @@ -0,0 +1,14 @@ +PKG_NAME="parted" +PKG_VERSION="2.3" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.gnu.org/software/parted/" +PKG_URL="http://ftp.gnu.org/gnu/parted/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="util-linux-ng" +PKG_BUILD_DEPENDS="toolchain util-linux-ng" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="parted: GNU partition editor" +PKG_LONGDESC="GNU Parted is a program for creating, destroying, resizing, checking and copying partitions, and the file systems on them. This is useful for creating space for new operating systems, reorganising disk usage, copying data between hard disks and disk imaging." +PKG_IS_ADDON="no" diff --git a/packages/sysutils/parted/patches.old/appletv_parted-1.8.8.diff b/packages/sysutils/parted/patches.old/appletv_parted-1.8.8.diff deleted file mode 100644 index b6c0df37d2..0000000000 --- a/packages/sysutils/parted/patches.old/appletv_parted-1.8.8.diff +++ /dev/null @@ -1,165 +0,0 @@ -diff -rup parted-1.8.8/include/parted/disk.h parted-1.8.8_atv/include/parted/disk.h ---- parted-1.8.8/include/parted/disk.h 2007-08-09 11:20:33.000000000 -0400 -+++ parted-1.8.8_atv/include/parted/disk.h 2008-01-11 23:28:45.000000000 -0500 -@@ -52,10 +52,11 @@ enum _PedPartitionFlag { - PED_PARTITION_HPSERVICE=8, - PED_PARTITION_PALO=9, - PED_PARTITION_PREP=10, -- PED_PARTITION_MSFT_RESERVED=11 -+ PED_PARTITION_MSFT_RESERVED=11, -+ PED_PARTITION_APPLE_TV_RECOVERY=12 - }; - #define PED_PARTITION_FIRST_FLAG PED_PARTITION_BOOT --#define PED_PARTITION_LAST_FLAG PED_PARTITION_MSFT_RESERVED -+#define PED_PARTITION_LAST_FLAG PED_PARTITION_APPLE_TV_RECOVERY - - enum _PedDiskTypeFeature { - PED_DISK_TYPE_EXTENDED=1, /**< supports extended partitions */ -diff -rup parted-1.8.8/libparted/disk.c parted-1.8.8_atv/libparted/disk.c ---- parted-1.8.8/libparted/disk.c 2007-08-09 14:47:57.000000000 -0400 -+++ parted-1.8.8_atv/libparted/disk.c 2008-01-11 23:28:45.000000000 -0500 -@@ -2181,6 +2181,8 @@ ped_partition_flag_get_name (PedPartitio - return N_("prep"); - case PED_PARTITION_MSFT_RESERVED: - return N_("msftres"); -+ case PED_PARTITION_APPLE_TV_RECOVERY: -+ return N_("atvrecv"); - - default: - ped_exception_throw ( -diff -rup parted-1.8.8/libparted/labels/gpt.c parted-1.8.8_atv/libparted/labels/gpt.c ---- parted-1.8.8/libparted/labels/gpt.c 2007-07-31 13:36:57.000000000 -0400 -+++ parted-1.8.8_atv/libparted/labels/gpt.c 2008-01-11 23:28:45.000000000 -0500 -@@ -122,6 +122,10 @@ typedef struct { - ((efi_guid_t) { PED_CPU_TO_LE32 (0x48465300), PED_CPU_TO_LE16 (0x0000), \ - PED_CPU_TO_LE16 (0x11AA), 0xaa, 0x11, \ - { 0x00, 0x30, 0x65, 0x43, 0xEC, 0xAC }}) -+#define PARTITION_APPLE_TV_RECOVERY_GUID \ -+ ((efi_guid_t) { PED_CPU_TO_LE32 (0x5265636F), PED_CPU_TO_LE16 (0x7665), \ -+ PED_CPU_TO_LE16 (0x11AA), 0xaa, 0x11, \ -+ { 0x00, 0x30, 0x65, 0x43, 0xEC, 0xAC }}) - - struct __attribute__ ((packed)) _GuidPartitionTableHeader_t { - uint64_t Signature; -@@ -248,6 +252,7 @@ typedef struct _GPTPartitionData { - int hp_service; - int hidden; - int msftres; -+ int atvrecv; - } GPTPartitionData; - - static PedDiskType gpt_disk_type; -@@ -753,7 +758,8 @@ _parse_part_entry (PedDisk* disk, GuidPa - - gpt_part_data->lvm = gpt_part_data->raid - = gpt_part_data->boot = gpt_part_data->hp_service -- = gpt_part_data->hidden = gpt_part_data->msftres = 0; -+ = gpt_part_data->hidden = gpt_part_data->msftres -+ = gpt_part_data->atvrecv = 0; - - if (pte->Attributes.RequiredToFunction & 0x1) - gpt_part_data->hidden = 1; -@@ -768,6 +774,8 @@ _parse_part_entry (PedDisk* disk, GuidPa - gpt_part_data->hp_service = 1; - else if (!guid_cmp (gpt_part_data->type, PARTITION_MSFT_RESERVED_GUID)) - gpt_part_data->msftres = 1; -+ else if (!guid_cmp (gpt_part_data->type, PARTITION_APPLE_TV_RECOVERY_GUID)) -+ gpt_part_data->atvrecv = 1; - - return part; - } -@@ -1133,6 +1141,7 @@ gpt_partition_new (const PedDisk* disk, - gpt_part_data->hp_service = 0; - gpt_part_data->hidden = 0; - gpt_part_data->msftres = 0; -+ gpt_part_data->atvrecv = 0; - uuid_generate ((unsigned char*) &gpt_part_data->uuid); - swap_uuid_and_efi_guid((unsigned char*)(&gpt_part_data->uuid)); - strcpy (gpt_part_data->name, ""); -@@ -1232,6 +1241,10 @@ gpt_partition_set_system (PedPartition* - return 1; - } - } -+ if (gpt_part_data->atvrecv) { -+ gpt_part_data->type = PARTITION_APPLE_TV_RECOVERY_GUID; -+ return 1; -+ } - - gpt_part_data->type = PARTITION_BASIC_DATA_GUID; - return 1; -@@ -1307,7 +1320,8 @@ gpt_partition_set_flag(PedPartition *par - gpt_part_data->raid - = gpt_part_data->lvm - = gpt_part_data->hp_service -- = gpt_part_data->msftres = 0; -+ = gpt_part_data->msftres -+ = gpt_part_data->atvrecv = 0; - return gpt_partition_set_system (part, part->fs_type); - case PED_PARTITION_RAID: - gpt_part_data->raid = state; -@@ -1315,7 +1329,8 @@ gpt_partition_set_flag(PedPartition *par - gpt_part_data->boot - = gpt_part_data->lvm - = gpt_part_data->hp_service -- = gpt_part_data->msftres = 0; -+ = gpt_part_data->msftres -+ = gpt_part_data->atvrecv = 0; - return gpt_partition_set_system (part, part->fs_type); - case PED_PARTITION_LVM: - gpt_part_data->lvm = state; -@@ -1323,7 +1338,8 @@ gpt_partition_set_flag(PedPartition *par - gpt_part_data->boot - = gpt_part_data->raid - = gpt_part_data->hp_service -- = gpt_part_data->msftres = 0; -+ = gpt_part_data->msftres -+ = gpt_part_data->atvrecv = 0; - return gpt_partition_set_system (part, part->fs_type); - case PED_PARTITION_HPSERVICE: - gpt_part_data->hp_service = state; -@@ -1331,7 +1347,8 @@ gpt_partition_set_flag(PedPartition *par - gpt_part_data->boot - = gpt_part_data->raid - = gpt_part_data->lvm -- = gpt_part_data->msftres = 0; -+ = gpt_part_data->msftres -+ = gpt_part_data->atvrecv = 0; - return gpt_partition_set_system (part, part->fs_type); - case PED_PARTITION_MSFT_RESERVED: - gpt_part_data->msftres = state; -@@ -1339,7 +1356,17 @@ gpt_partition_set_flag(PedPartition *par - gpt_part_data->boot - = gpt_part_data->raid - = gpt_part_data->lvm -- = gpt_part_data->hp_service = 0; -+ = gpt_part_data->hp_service -+ = gpt_part_data->atvrecv = 0; -+ return gpt_partition_set_system (part, part->fs_type); -+ case PED_PARTITION_APPLE_TV_RECOVERY: -+ gpt_part_data->atvrecv = state; -+ if (state) -+ gpt_part_data->boot -+ = gpt_part_data->raid -+ = gpt_part_data->lvm -+ = gpt_part_data->hp_service -+ = gpt_part_data->msftres = 0; - return gpt_partition_set_system (part, part->fs_type); - case PED_PARTITION_HIDDEN: - gpt_part_data->hidden = state; -@@ -1371,6 +1398,8 @@ gpt_partition_get_flag(const PedPartitio - return gpt_part_data->hp_service; - case PED_PARTITION_MSFT_RESERVED: - return gpt_part_data->msftres; -+ case PED_PARTITION_APPLE_TV_RECOVERY: -+ return gpt_part_data->atvrecv; - case PED_PARTITION_HIDDEN: - return gpt_part_data->hidden; - case PED_PARTITION_SWAP: -@@ -1392,6 +1421,7 @@ gpt_partition_is_flag_available(const Pe - case PED_PARTITION_BOOT: - case PED_PARTITION_HPSERVICE: - case PED_PARTITION_MSFT_RESERVED: -+ case PED_PARTITION_APPLE_TV_RECOVERY: - case PED_PARTITION_HIDDEN: - return 1; - case PED_PARTITION_SWAP: diff --git a/packages/sysutils/parted/patches/parted-2.2-hi-major-sd-rh611691.diff b/packages/sysutils/parted/patches/parted-2.3-hi_major_sd_rh611691.patch similarity index 100% rename from packages/sysutils/parted/patches/parted-2.2-hi-major-sd-rh611691.diff rename to packages/sysutils/parted/patches/parted-2.3-hi_major_sd_rh611691.patch diff --git a/packages/sysutils/parted/patches/parted-2.3-lpn.diff b/packages/sysutils/parted/patches/parted-2.3-lpn.patch similarity index 100% rename from packages/sysutils/parted/patches/parted-2.3-lpn.diff rename to packages/sysutils/parted/patches/parted-2.3-lpn.patch diff --git a/packages/sysutils/parted/url b/packages/sysutils/parted/url deleted file mode 100644 index ee82b65033..0000000000 --- a/packages/sysutils/parted/url +++ /dev/null @@ -1 +0,0 @@ -http://ftp.gnu.org/gnu/parted/parted-2.3.tar.gz From 10b124177898ca3df8243c0c7a5026b281e7bb22 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 12:38:37 +0100 Subject: [PATCH 219/850] ntfs-3g: add metafile support, cleanups Signed-off-by: Stephan Raue --- packages/sysutils/ntfs-3g/build | 3 --- packages/sysutils/ntfs-3g/install | 2 -- packages/sysutils/ntfs-3g/meta | 14 ++++++++++++++ packages/sysutils/ntfs-3g/url | 1 - 4 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 packages/sysutils/ntfs-3g/meta delete mode 100644 packages/sysutils/ntfs-3g/url diff --git a/packages/sysutils/ntfs-3g/build b/packages/sysutils/ntfs-3g/build index bd83721d64..06c9b2d0e9 100755 --- a/packages/sysutils/ntfs-3g/build +++ b/packages/sysutils/ntfs-3g/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build fuse - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/sysutils/ntfs-3g/install b/packages/sysutils/ntfs-3g/install index dd5465ccdb..f368cfec17 100755 --- a/packages/sysutils/ntfs-3g/install +++ b/packages/sysutils/ntfs-3g/install @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/install fuse - mkdir -p $INSTALL/bin cp $PKG_BUILD/src/ntfs-3g $INSTALL/bin diff --git a/packages/sysutils/ntfs-3g/meta b/packages/sysutils/ntfs-3g/meta new file mode 100644 index 0000000000..a4a54f3477 --- /dev/null +++ b/packages/sysutils/ntfs-3g/meta @@ -0,0 +1,14 @@ +PKG_NAME="ntfs-3g" +PKG_VERSION="2010.10.2" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.ntfs-3g.org/" +PKG_URL="http://tuxera.com/opensource/$PKG_NAME-$PKG_VERSION.tgz" +PKG_DEPENDS="fuse" +PKG_BUILD_DEPENDS="toolchain fuse" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="ntfs-3g: NTFS-3G Read/Write userspace driver" +PKG_LONGDESC="The NTFS-3G driver is an open source, freely available NTFS driver for Linux with read and write support. It provides safe and fast handling of the Windows XP, Windows Server 2003, Windows 2000 and Windows Vista file systems." +PKG_IS_ADDON="no" diff --git a/packages/sysutils/ntfs-3g/url b/packages/sysutils/ntfs-3g/url deleted file mode 100644 index 7e2bce0a88..0000000000 --- a/packages/sysutils/ntfs-3g/url +++ /dev/null @@ -1 +0,0 @@ -http://tuxera.com/opensource/ntfs-3g-2010.10.2.tgz \ No newline at end of file From cd00108b0b26a8454fab9311bc8b51647e68be28 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 12:38:55 +0100 Subject: [PATCH 220/850] lm_sensors: add metafile support, cleanups Signed-off-by: Stephan Raue --- packages/sysutils/lm_sensors/build | 2 -- packages/sysutils/lm_sensors/meta | 14 ++++++++++++++ packages/sysutils/lm_sensors/url | 1 - 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 packages/sysutils/lm_sensors/meta delete mode 100644 packages/sysutils/lm_sensors/url diff --git a/packages/sysutils/lm_sensors/build b/packages/sysutils/lm_sensors/build index cdb4885bda..0e78797f66 100755 --- a/packages/sysutils/lm_sensors/build +++ b/packages/sysutils/lm_sensors/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD make PREFIX=/usr CC=$TARGET_CC diff --git a/packages/sysutils/lm_sensors/meta b/packages/sysutils/lm_sensors/meta new file mode 100644 index 0000000000..45be2b8743 --- /dev/null +++ b/packages/sysutils/lm_sensors/meta @@ -0,0 +1,14 @@ +PKG_NAME="lm_sensors" +PKG_VERSION="3.2.0" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://secure.netroedge.com/~lm78/" +PKG_URL="http://dl.lm-sensors.org/lm-sensors/releases/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="lm_sensors: Hardware monitoring via the SMBus" +PKG_LONGDESC="lm_sensors is a package to get data from the SMB (System Management Bus - an i2c bus) on modern mainboards. It consists of kernel modules and users space tools to get stuff like cpu / mb temperature, voltages, fan speed..." +PKG_IS_ADDON="no" diff --git a/packages/sysutils/lm_sensors/url b/packages/sysutils/lm_sensors/url deleted file mode 100644 index bcfca65e9b..0000000000 --- a/packages/sysutils/lm_sensors/url +++ /dev/null @@ -1 +0,0 @@ -http://dl.lm-sensors.org/lm-sensors/releases/lm_sensors-3.2.0.tar.bz2 \ No newline at end of file From 300e7fdac909c1548f914b8b33fc074bb5ea3e87 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 12:39:11 +0100 Subject: [PATCH 221/850] libusb: add metafile support, cleanups Signed-off-by: Stephan Raue --- packages/sysutils/libusb/build | 2 -- packages/sysutils/libusb/install | 2 +- packages/sysutils/libusb/meta | 14 ++++++++++++++ packages/sysutils/libusb/url | 1 - 4 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 packages/sysutils/libusb/meta delete mode 100644 packages/sysutils/libusb/url diff --git a/packages/sysutils/libusb/build b/packages/sysutils/libusb/build index f71ba02a83..29edf34235 100755 --- a/packages/sysutils/libusb/build +++ b/packages/sysutils/libusb/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/sysutils/libusb/install b/packages/sysutils/libusb/install index b9e0b497e9..62643ac0f8 100755 --- a/packages/sysutils/libusb/install +++ b/packages/sysutils/libusb/install @@ -3,5 +3,5 @@ . config/options $1 mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/$1/.libs/libusb*.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/$1/.libs/libusb*.so* $INSTALL/usr/lib diff --git a/packages/sysutils/libusb/meta b/packages/sysutils/libusb/meta new file mode 100644 index 0000000000..5d4b8a2ab7 --- /dev/null +++ b/packages/sysutils/libusb/meta @@ -0,0 +1,14 @@ +PKG_NAME="libusb" +PKG_VERSION="1.0.8" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://libusb.sourceforge.net/" +PKG_URL="http://freefr.dl.sourceforge.net/sourceforge/libusb/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="libusb: OS independent USB device access" +PKG_LONGDESC="The libusb project's aim is to create a Library for use by user level applications to USB devices regardless of OS." +PKG_IS_ADDON="no" diff --git a/packages/sysutils/libusb/url b/packages/sysutils/libusb/url deleted file mode 100644 index 75f070b856..0000000000 --- a/packages/sysutils/libusb/url +++ /dev/null @@ -1 +0,0 @@ -http://freefr.dl.sourceforge.net/sourceforge/libusb/libusb-1.0.8.tar.bz2 From 3cf25a23872d515980af5f0240da6ff856305218 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 12:39:19 +0100 Subject: [PATCH 222/850] libusb-compat: add metafile support, cleanups Signed-off-by: Stephan Raue --- packages/sysutils/libusb-compat/build | 3 --- packages/sysutils/libusb-compat/install | 4 +--- packages/sysutils/libusb-compat/meta | 14 ++++++++++++++ packages/sysutils/libusb-compat/url | 1 - 4 files changed, 15 insertions(+), 7 deletions(-) create mode 100644 packages/sysutils/libusb-compat/meta delete mode 100644 packages/sysutils/libusb-compat/url diff --git a/packages/sysutils/libusb-compat/build b/packages/sysutils/libusb-compat/build index 3af0bf24e2..29edf34235 100755 --- a/packages/sysutils/libusb-compat/build +++ b/packages/sysutils/libusb-compat/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build libusb - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/sysutils/libusb-compat/install b/packages/sysutils/libusb-compat/install index e69f6b06a7..9224267ca5 100755 --- a/packages/sysutils/libusb-compat/install +++ b/packages/sysutils/libusb-compat/install @@ -2,7 +2,5 @@ . config/options $1 -$SCRIPTS/install libusb - mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/libusb/.libs/libusb*.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/libusb/.libs/libusb*.so* $INSTALL/usr/lib diff --git a/packages/sysutils/libusb-compat/meta b/packages/sysutils/libusb-compat/meta new file mode 100644 index 0000000000..af79d085a1 --- /dev/null +++ b/packages/sysutils/libusb-compat/meta @@ -0,0 +1,14 @@ +PKG_NAME="libusb-compat" +PKG_VERSION="0.1.3" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://libusb.sourceforge.net/" +PKG_URL="http://downloads.sourceforge.net/libusb/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="libusb" +PKG_BUILD_DEPENDS="toolchain libusb" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="libusb-compat: OS independent USB device access" +PKG_LONGDESC="The libusb project's aim is to create a Library for use by user level applications to USB devices regardless of OS." +PKG_IS_ADDON="no" diff --git a/packages/sysutils/libusb-compat/url b/packages/sysutils/libusb-compat/url deleted file mode 100644 index bae0e599e0..0000000000 --- a/packages/sysutils/libusb-compat/url +++ /dev/null @@ -1 +0,0 @@ -http://downloads.sourceforge.net/libusb/libusb-compat-0.1.3.tar.bz2 \ No newline at end of file From b826debbf8dfe1d3f752f0aca76e233041833da4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 12:39:40 +0100 Subject: [PATCH 223/850] libatasmart: add metafile support, cleanups Signed-off-by: Stephan Raue --- packages/sysutils/libatasmart/build | 3 --- packages/sysutils/libatasmart/install | 2 -- packages/sysutils/libatasmart/meta | 14 ++++++++++++++ packages/sysutils/libatasmart/url | 1 - 4 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 packages/sysutils/libatasmart/meta delete mode 100644 packages/sysutils/libatasmart/url diff --git a/packages/sysutils/libatasmart/build b/packages/sysutils/libatasmart/build index 9d0730d321..9238612c91 100755 --- a/packages/sysutils/libatasmart/build +++ b/packages/sysutils/libatasmart/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build udev - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/sysutils/libatasmart/install b/packages/sysutils/libatasmart/install index fc1656cd3d..f08eba389f 100755 --- a/packages/sysutils/libatasmart/install +++ b/packages/sysutils/libatasmart/install @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/install udev - mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/sysutils/libatasmart/meta b/packages/sysutils/libatasmart/meta new file mode 100644 index 0000000000..eef58d5f21 --- /dev/null +++ b/packages/sysutils/libatasmart/meta @@ -0,0 +1,14 @@ +PKG_NAME="libatasmart" +PKG_VERSION="0.17" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://0pointer.de/blog/projects/being-smart.html" +PKG_URL="http://0pointer.de/public/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="udev" +PKG_BUILD_DEPENDS="toolchain udev" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="libatasmart: a lean, small and clean implementation of an ATA S.M.A.R.T. reading and parsing library" +PKG_LONGDESC="libatasmart is a lean, small and clean implementation of an ATA S.M.A.R.T. reading and parsing library. It's fairly comprehensive, however I only support a subset of the full S.M.A.R.T. set of functions: those parts which made sense to me, not the esoteric stuff." +PKG_IS_ADDON="no" diff --git a/packages/sysutils/libatasmart/url b/packages/sysutils/libatasmart/url deleted file mode 100644 index 541ce815f1..0000000000 --- a/packages/sysutils/libatasmart/url +++ /dev/null @@ -1 +0,0 @@ -http://0pointer.de/public/libatasmart-0.17.tar.gz \ No newline at end of file From 7059d87823f77396bc350b38bf241a9cab743c86 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 12:40:01 +0100 Subject: [PATCH 224/850] lcdproc: add metafile support, cleanups Signed-off-by: Stephan Raue --- packages/sysutils/lcdproc/build | 3 --- packages/sysutils/lcdproc/install | 3 --- packages/sysutils/lcdproc/meta | 14 ++++++++++++++ packages/sysutils/lcdproc/url | 1 - 4 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 packages/sysutils/lcdproc/meta delete mode 100644 packages/sysutils/lcdproc/url diff --git a/packages/sysutils/lcdproc/build b/packages/sysutils/lcdproc/build index 511dc040a6..bf31aca1e8 100755 --- a/packages/sysutils/lcdproc/build +++ b/packages/sysutils/lcdproc/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build libusb - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/sysutils/lcdproc/install b/packages/sysutils/lcdproc/install index 103b3bf124..b8c96f89a5 100755 --- a/packages/sysutils/lcdproc/install +++ b/packages/sysutils/lcdproc/install @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/install libusb -$SCRIPTS/install irserver - add_user nobody x 999 999 "Nobody" "/" "/bin/sh" add_group nobody 999 diff --git a/packages/sysutils/lcdproc/meta b/packages/sysutils/lcdproc/meta new file mode 100644 index 0000000000..13ce2f3c58 --- /dev/null +++ b/packages/sysutils/lcdproc/meta @@ -0,0 +1,14 @@ +PKG_NAME="lcdproc" +PKG_VERSION="20100423" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://lcdproc.org/" +PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="libusb irserver" +PKG_BUILD_DEPENDS="toolchain libusb" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="lcdproc: Software to display system information from your Linux/*BSD box on a LCD" +PKG_LONGDESC="LCDproc is a piece of software that displays real-time system information from your Linux/*BSD box on a LCD. The server supports several serial devices: Matrix Orbital, Crystal Fontz, Bayrad, LB216, LCDM001 (kernelconcepts.de), Wirz-SLI, Cwlinux(.com) and PIC-an-LCD; and some devices connected to the LPT port: HD44780, STV5730, T6963, SED1520 and SED1330. Various clients are available that display things like CPU load, system load, memory usage, uptime, and a lot more." +PKG_IS_ADDON="no" diff --git a/packages/sysutils/lcdproc/url b/packages/sysutils/lcdproc/url deleted file mode 100644 index c71ab7f949..0000000000 --- a/packages/sysutils/lcdproc/url +++ /dev/null @@ -1 +0,0 @@ -http://sources.openelec.tv/svn/lcdproc-20100423.tar.bz2 \ No newline at end of file From 6f4a178f4d8408b7f13bb830e35200a6261755d8 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 12:40:15 +0100 Subject: [PATCH 225/850] kbd: add metafile support, cleanups Signed-off-by: Stephan Raue --- packages/sysutils/kbd/build | 2 -- packages/sysutils/kbd/meta | 14 ++++++++++++++ packages/sysutils/kbd/url | 1 - 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 packages/sysutils/kbd/meta delete mode 100644 packages/sysutils/kbd/url diff --git a/packages/sysutils/kbd/build b/packages/sysutils/kbd/build index b03dbd53f4..5d39750d1c 100755 --- a/packages/sysutils/kbd/build +++ b/packages/sysutils/kbd/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/sysutils/kbd/meta b/packages/sysutils/kbd/meta new file mode 100644 index 0000000000..81877657d6 --- /dev/null +++ b/packages/sysutils/kbd/meta @@ -0,0 +1,14 @@ +PKG_NAME="kbd" +PKG_VERSION="1.15.2" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="ftp://devel.altlinux.org/legion/kbd/" +PKG_URL="http://www.kernel.org/pub/linux/utils/kbd/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="kbd: Keyboard and console utilities for Linux" +PKG_LONGDESC="The Linux Console Tools are a set of programs allowing the user to setup/customize your console (restricted meaning: text mode screen + keyboard only)." +PKG_IS_ADDON="no" diff --git a/packages/sysutils/kbd/url b/packages/sysutils/kbd/url deleted file mode 100644 index 363dd719c0..0000000000 --- a/packages/sysutils/kbd/url +++ /dev/null @@ -1 +0,0 @@ -http://www.kernel.org/pub/linux/utils/kbd/kbd-1.15.2.tar.bz2 \ No newline at end of file From fee6bec11ea7e76482efe382306a7d561e8ab0f4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 12:40:24 +0100 Subject: [PATCH 226/850] grep: add metafile support, cleanups Signed-off-by: Stephan Raue --- packages/sysutils/grep/build | 3 --- packages/sysutils/grep/install | 2 -- packages/sysutils/grep/meta | 14 ++++++++++++++ packages/sysutils/grep/url | 1 - 4 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 packages/sysutils/grep/meta delete mode 100644 packages/sysutils/grep/url diff --git a/packages/sysutils/grep/build b/packages/sysutils/grep/build index a18b353899..c63dca2f86 100755 --- a/packages/sysutils/grep/build +++ b/packages/sysutils/grep/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build pcre - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/sysutils/grep/install b/packages/sysutils/grep/install index 218e9c6907..8643d6793f 100755 --- a/packages/sysutils/grep/install +++ b/packages/sysutils/grep/install @@ -2,7 +2,5 @@ . config/options $1 -$SCRIPTS/install pcre - mkdir -p $INSTALL/usr/bin cp $PKG_BUILD/src/grep $INSTALL/usr/bin diff --git a/packages/sysutils/grep/meta b/packages/sysutils/grep/meta new file mode 100644 index 0000000000..e58f52b99f --- /dev/null +++ b/packages/sysutils/grep/meta @@ -0,0 +1,14 @@ +PKG_NAME="grep" +PKG_VERSION="2.7" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.gnu.org/software/grep/" +PKG_URL="ftp://sunsite.cnlab-switch.ch/mirror/gnu/grep/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="pcre" +PKG_BUILD_DEPENDS="toolchain pcre" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="grep: This is GNU grep, the fastest grep in the west" +PKG_LONGDESC="GNU grep is based on a fast lazy-state deterministic matcher (about twice as fast as stock Unix egrep) hybridized with a Boyer-Moore-Gosper search for a fixed string that eliminates impossible text from being considered by the full regexp matcher without necessarily having to look at every character. The result is typically many times faster than Unix grep or egrep." +PKG_IS_ADDON="no" diff --git a/packages/sysutils/grep/url b/packages/sysutils/grep/url deleted file mode 100644 index 5395ad54af..0000000000 --- a/packages/sysutils/grep/url +++ /dev/null @@ -1 +0,0 @@ -ftp://sunsite.cnlab-switch.ch/mirror/gnu/grep/grep-2.7.tar.gz From ce35f4320547032b459bf916928999866eccb5db Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 12:40:33 +0100 Subject: [PATCH 227/850] fuse: add metafile support, cleanups Signed-off-by: Stephan Raue --- packages/sysutils/fuse/build | 2 -- packages/sysutils/fuse/install | 2 +- packages/sysutils/fuse/meta | 14 ++++++++++++++ packages/sysutils/fuse/url | 1 - 4 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 packages/sysutils/fuse/meta delete mode 100644 packages/sysutils/fuse/url diff --git a/packages/sysutils/fuse/build b/packages/sysutils/fuse/build index b739f8029d..41229e2653 100755 --- a/packages/sysutils/fuse/build +++ b/packages/sysutils/fuse/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/sysutils/fuse/install b/packages/sysutils/fuse/install index 5c611d75e0..2c0e865796 100755 --- a/packages/sysutils/fuse/install +++ b/packages/sysutils/fuse/install @@ -13,5 +13,5 @@ mkdir -p $INSTALL/bin cp $PKG_BUILD/util/ulockmgr_server $INSTALL/bin mkdir -p $INSTALL/lib - cp -PR $PKG_BUILD/lib/.libs/*.so* $INSTALL/lib + cp -P $PKG_BUILD/lib/.libs/*.so* $INSTALL/lib diff --git a/packages/sysutils/fuse/meta b/packages/sysutils/fuse/meta new file mode 100644 index 0000000000..cb829f4022 --- /dev/null +++ b/packages/sysutils/fuse/meta @@ -0,0 +1,14 @@ +PKG_NAME="fuse" +PKG_VERSION="2.8.5" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://sourceforge.net/projects/fuse/" +PKG_URL="http://downloads.sourceforge.net/project/fuse/fuse-2.X/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="fuse: A simple user-space filesystem interface for Linux" +PKG_LONGDESC="FUSE provides a simple interface for userspace programs to export a virtual filesystem to the Linux kernel. FUSE also aims to provide a secure method for non privileged users to create and mount their own filesystem implementations." +PKG_IS_ADDON="no" diff --git a/packages/sysutils/fuse/url b/packages/sysutils/fuse/url deleted file mode 100644 index 732a040e15..0000000000 --- a/packages/sysutils/fuse/url +++ /dev/null @@ -1 +0,0 @@ -http://downloads.sourceforge.net/project/fuse/fuse-2.X/2.8.5/fuse-2.8.5.tar.gz \ No newline at end of file From 020ac64f1279f40762bb7c8cfd78f80cbb3b5c0e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 12:40:50 +0100 Subject: [PATCH 228/850] dmidecode: add metafile support, cleanups Signed-off-by: Stephan Raue --- packages/sysutils/dmidecode/build | 2 -- packages/sysutils/dmidecode/meta | 14 ++++++++++++++ packages/sysutils/dmidecode/url | 1 - 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 packages/sysutils/dmidecode/meta delete mode 100644 packages/sysutils/dmidecode/url diff --git a/packages/sysutils/dmidecode/build b/packages/sysutils/dmidecode/build index 9443f96ded..f7a2c4e344 100755 --- a/packages/sysutils/dmidecode/build +++ b/packages/sysutils/dmidecode/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD make CC=$TARGET_CC dmidecode diff --git a/packages/sysutils/dmidecode/meta b/packages/sysutils/dmidecode/meta new file mode 100644 index 0000000000..6556d79867 --- /dev/null +++ b/packages/sysutils/dmidecode/meta @@ -0,0 +1,14 @@ +PKG_NAME="dmidecode" +PKG_VERSION="2.10" +PKG_REV="1" +PKG_ARCH="i386 x86_64" +PKG_LICENSE="GPL" +PKG_SITE="http://nongnu.org/dmidecode/" +PKG_URL="http://mirror.lihnidos.org/GNU/savannah/dmidecode/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="dmidecode: Reports BIOS information according to the SMBIOS/DMI standard" +PKG_LONGDESC="Reports BIOS information according to the SMBIOS/DMI standard, typically including system manufactor, model name, serial number and a lot of other details of varying level of interest and reliability." +PKG_IS_ADDON="no" diff --git a/packages/sysutils/dmidecode/url b/packages/sysutils/dmidecode/url deleted file mode 100644 index 2db33ad769..0000000000 --- a/packages/sysutils/dmidecode/url +++ /dev/null @@ -1 +0,0 @@ -http://mirror.lihnidos.org/GNU/savannah/dmidecode/dmidecode-2.10.tar.bz2 From 47a67599c674567bf55e37eec73b018eb62a0d5c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 12:41:11 +0100 Subject: [PATCH 229/850] dbus: cleanups Signed-off-by: Stephan Raue --- packages/sysutils/dbus/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sysutils/dbus/meta b/packages/sysutils/dbus/meta index c8b5320b27..4ecf70f966 100644 --- a/packages/sysutils/dbus/meta +++ b/packages/sysutils/dbus/meta @@ -9,6 +9,6 @@ PKG_DEPENDS="expat libX11" PKG_BUILD_DEPENDS="toolchain expat libX11" PKG_PRIORITY="required" PKG_SECTION="system" -PKG_SHORTDESC="simple interprocess messaging system" +PKG_SHORTDESC="dbus: simple interprocess messaging system" PKG_LONGDESC="D-Bus is a message bus, used for sending messages between applications. This package contains the D-Bus daemon and related utilities and the dbus shared library." PKG_IS_ADDON="no" From 423d2752892e0b4f59b42a265822113579fa81a2 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 12:41:19 +0100 Subject: [PATCH 230/850] dbus-host: cleanups Signed-off-by: Stephan Raue --- packages/sysutils/dbus-host/build | 2 -- packages/sysutils/dbus-host/meta | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/sysutils/dbus-host/build b/packages/sysutils/dbus-host/build index 7d61139e3a..a25feafcb4 100755 --- a/packages/sysutils/dbus-host/build +++ b/packages/sysutils/dbus-host/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build expat-host $SCRIPTS/unpack dbus DBUS_DIR=`ls -d $BUILD/dbus-[0-9]*` diff --git a/packages/sysutils/dbus-host/meta b/packages/sysutils/dbus-host/meta index 3c9ef9a964..d67cc3be45 100644 --- a/packages/sysutils/dbus-host/meta +++ b/packages/sysutils/dbus-host/meta @@ -9,6 +9,6 @@ PKG_DEPENDS="" PKG_BUILD_DEPENDS="toolchain expat-host" PKG_PRIORITY="optional" PKG_SECTION="system" -PKG_SHORTDESC="simple interprocess messaging system" +PKG_SHORTDESC="dbus: simple interprocess messaging system" PKG_LONGDESC="D-Bus is a message bus, used for sending messages between applications. This package contains the D-Bus daemon and related utilities and the dbus shared library." PKG_IS_ADDON="no" From 16bfef27e1ce2c93a4c4564c213cf51a466fad93 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 12:41:38 +0100 Subject: [PATCH 231/850] busybox: rename patches Signed-off-by: Stephan Raue --- ...{10_halt-no-init.diff => busybox-1.17.3-00_halt_no_init.patch} | 0 .../{busybox-1.17.3-dnsd.diff => busybox-1.17.3-dnsd.patch} | 0 .../{busybox-1.17.3-sort.diff => busybox-1.17.3-sort.patch} | 0 .../{busybox-1.17.3-unicode.diff => busybox-1.17.3-unicode.patch} | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename packages/sysutils/busybox/patches/{10_halt-no-init.diff => busybox-1.17.3-00_halt_no_init.patch} (100%) rename packages/sysutils/busybox/patches/{busybox-1.17.3-dnsd.diff => busybox-1.17.3-dnsd.patch} (100%) rename packages/sysutils/busybox/patches/{busybox-1.17.3-sort.diff => busybox-1.17.3-sort.patch} (100%) rename packages/sysutils/busybox/patches/{busybox-1.17.3-unicode.diff => busybox-1.17.3-unicode.patch} (100%) diff --git a/packages/sysutils/busybox/patches/10_halt-no-init.diff b/packages/sysutils/busybox/patches/busybox-1.17.3-00_halt_no_init.patch similarity index 100% rename from packages/sysutils/busybox/patches/10_halt-no-init.diff rename to packages/sysutils/busybox/patches/busybox-1.17.3-00_halt_no_init.patch diff --git a/packages/sysutils/busybox/patches/busybox-1.17.3-dnsd.diff b/packages/sysutils/busybox/patches/busybox-1.17.3-dnsd.patch similarity index 100% rename from packages/sysutils/busybox/patches/busybox-1.17.3-dnsd.diff rename to packages/sysutils/busybox/patches/busybox-1.17.3-dnsd.patch diff --git a/packages/sysutils/busybox/patches/busybox-1.17.3-sort.diff b/packages/sysutils/busybox/patches/busybox-1.17.3-sort.patch similarity index 100% rename from packages/sysutils/busybox/patches/busybox-1.17.3-sort.diff rename to packages/sysutils/busybox/patches/busybox-1.17.3-sort.patch diff --git a/packages/sysutils/busybox/patches/busybox-1.17.3-unicode.diff b/packages/sysutils/busybox/patches/busybox-1.17.3-unicode.patch similarity index 100% rename from packages/sysutils/busybox/patches/busybox-1.17.3-unicode.diff rename to packages/sysutils/busybox/patches/busybox-1.17.3-unicode.patch From cbfa2a1615ec36421037066f776bd0839cde0ac8 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 12:41:59 +0100 Subject: [PATCH 232/850] acpid: add metafile support, cleanups Signed-off-by: Stephan Raue --- packages/sysutils/acpid/build | 2 -- packages/sysutils/acpid/meta | 14 ++++++++++++++ packages/sysutils/acpid/url | 1 - 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 packages/sysutils/acpid/meta delete mode 100644 packages/sysutils/acpid/url diff --git a/packages/sysutils/acpid/build b/packages/sysutils/acpid/build index 9153c4aac6..90f4704040 100755 --- a/packages/sysutils/acpid/build +++ b/packages/sysutils/acpid/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD make diff --git a/packages/sysutils/acpid/meta b/packages/sysutils/acpid/meta new file mode 100644 index 0000000000..67ed410cb7 --- /dev/null +++ b/packages/sysutils/acpid/meta @@ -0,0 +1,14 @@ +PKG_NAME="acpid" +PKG_VERSION="2.0.6" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://acpid.sourceforge.net/" +PKG_URL="http://www.tedfelix.com/linux/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="acpid: A daemon for delivering ACPI events" +PKG_LONGDESC="ACPID is a completely flexible and expandable mechanism for delivering ACPI events from the kernel to user-space. It can be configured to perform any action at all when events occur, through regex matches and arbitrary action rules." +PKG_IS_ADDON="no" diff --git a/packages/sysutils/acpid/url b/packages/sysutils/acpid/url deleted file mode 100644 index 1ec9d9b4db..0000000000 --- a/packages/sysutils/acpid/url +++ /dev/null @@ -1 +0,0 @@ -http://www.tedfelix.com/linux/acpid-2.0.6.tar.gz \ No newline at end of file From 8c70a532ebdada40c2b6483c2902340538cefe6e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 12:42:11 +0100 Subject: [PATCH 233/850] LVM2: add metafile support, cleanups Signed-off-by: Stephan Raue --- packages/sysutils/LVM2/build | 2 -- packages/sysutils/LVM2/install | 7 ------- packages/sysutils/LVM2/meta | 14 ++++++++++++++ packages/sysutils/LVM2/url | 1 - 4 files changed, 14 insertions(+), 10 deletions(-) create mode 100644 packages/sysutils/LVM2/meta delete mode 100644 packages/sysutils/LVM2/url diff --git a/packages/sysutils/LVM2/build b/packages/sysutils/LVM2/build index 42885fd48e..4af3f21cc9 100755 --- a/packages/sysutils/LVM2/build +++ b/packages/sysutils/LVM2/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $BUILD/$1* ac_cv_func_malloc_0_nonnull=yes \ ./configure --host=$TARGET_NAME \ diff --git a/packages/sysutils/LVM2/install b/packages/sysutils/LVM2/install index 447ce64cfd..038525b353 100755 --- a/packages/sysutils/LVM2/install +++ b/packages/sysutils/LVM2/install @@ -11,12 +11,5 @@ mkdir -p $INSTALL/usr/lib if [ "$DEVTOOLS" = yes ]; then mkdir -p $INSTALL/sbin cp $BUILD/$1*/tools/lvm $INSTALL/sbin - - mkdir -p $INSTALL/usr/lib -# cp -P $BUILD/$1*/liblvm/liblvm2app.so $INSTALL/usr/lib/liblvm2app.so.2.1 -# ln -sf /usr/lib/liblvm2app.so.2.1 $INSTALL/usr/lib/liblvm2app.so - -# cp -P $BUILD/$1*/tools/liblvm2cmd.so $INSTALL/usr/lib/liblvm2cmd.so.2.02 -# ln -sf /usr/lib/liblvm2cmd.2.02 $INSTALL/usr/lib/liblvm2cmd.so fi diff --git a/packages/sysutils/LVM2/meta b/packages/sysutils/LVM2/meta new file mode 100644 index 0000000000..d0f43b7f46 --- /dev/null +++ b/packages/sysutils/LVM2/meta @@ -0,0 +1,14 @@ +PKG_NAME="LVM2" +PKG_VERSION="2.02.75" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="" +PKG_SITE="http://sources.redhat.com/lvm2/" +PKG_URL="ftp://sources.redhat.com/pub/lvm2/${PKG_NAME}.${PKG_VERSION}.tgz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="lvm2: Logical Volume Management (Version 2)" +PKG_LONGDESC="LVM includes all of the support for handling read/write operations on physical volumes (hard disks, RAID-Systems, magneto optical, etc., multiple devices (MD), see mdadd(8) or even loop devices, see losetup(8)), creating volume groups (kind of virtual disks) from one or more physical volumes and creating one or more logical volumes (kind of logical partitions) in volume groups. This 2nd version is based on device-mapper available in linux-2.6." +PKG_IS_ADDON="no" diff --git a/packages/sysutils/LVM2/url b/packages/sysutils/LVM2/url deleted file mode 100644 index ae10e4d2ea..0000000000 --- a/packages/sysutils/LVM2/url +++ /dev/null @@ -1 +0,0 @@ -ftp://sources.redhat.com/pub/lvm2/LVM2.2.02.75.tgz From c783881ec4a7a46773a94086f0771f583a067603 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 12:42:22 +0100 Subject: [PATCH 234/850] ConsoleKit: add metafile support, cleanups Signed-off-by: Stephan Raue --- packages/sysutils/ConsoleKit/build | 5 ----- packages/sysutils/ConsoleKit/install | 4 ---- packages/sysutils/ConsoleKit/meta | 16 ++++++++++++++++ packages/sysutils/ConsoleKit/url | 1 - 4 files changed, 16 insertions(+), 10 deletions(-) create mode 100644 packages/sysutils/ConsoleKit/meta delete mode 100644 packages/sysutils/ConsoleKit/url diff --git a/packages/sysutils/ConsoleKit/build b/packages/sysutils/ConsoleKit/build index de5f370d75..414e8b6743 100755 --- a/packages/sysutils/ConsoleKit/build +++ b/packages/sysutils/ConsoleKit/build @@ -2,11 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build dbus -$SCRIPTS/build dbus-glib -$SCRIPTS/build polkit - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/sysutils/ConsoleKit/install b/packages/sysutils/ConsoleKit/install index 59bce68b93..0f67e9afde 100755 --- a/packages/sysutils/ConsoleKit/install +++ b/packages/sysutils/ConsoleKit/install @@ -2,10 +2,6 @@ . config/options $1 -$SCRIPTS/install dbus -$SCRIPTS/install dbus-glib -$SCRIPTS/install polkit - mkdir -p $INSTALL/etc/ConsoleKit/run-seat.d mkdir -p $INSTALL/etc/ConsoleKit/run-session.d mkdir -p $INSTALL/etc/ConsoleKit/seats.d diff --git a/packages/sysutils/ConsoleKit/meta b/packages/sysutils/ConsoleKit/meta new file mode 100644 index 0000000000..f7d33e1703 --- /dev/null +++ b/packages/sysutils/ConsoleKit/meta @@ -0,0 +1,16 @@ +PKG_NAME="ConsoleKit" +PKG_VERSION="0.4.2" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.freedesktop.org/wiki/Software/ConsoleKit" +PKG_URL="http://www.freedesktop.org/software/ConsoleKit/dist/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="dbus dbus-glib polkit" +PKG_BUILD_DEPENDS="toolchain dbus dbus-glib polkit" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="ConsoleKit: a framework for defining and tracking users, login sessions, and seats." +PKG_LONGDESC="ConsoleKit is a framework for defining and tracking users, login sessions, and seats." +PKG_IS_ADDON="no" + + diff --git a/packages/sysutils/ConsoleKit/url b/packages/sysutils/ConsoleKit/url deleted file mode 100644 index d6e980443f..0000000000 --- a/packages/sysutils/ConsoleKit/url +++ /dev/null @@ -1 +0,0 @@ -http://www.freedesktop.org/software/ConsoleKit/dist/ConsoleKit-0.4.2.tar.bz2 \ No newline at end of file From 216fea21964de1e0bc0edf2b5ea045f4b681b042 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 12:42:48 +0100 Subject: [PATCH 235/850] bash: rename patches, cleanups Signed-off-by: Stephan Raue --- packages/sysutils/bash/meta | 4 ++-- .../patches/{bash-4.1-fixes-1.diff => bash-4.1-fixes-1.patch} | 0 2 files changed, 2 insertions(+), 2 deletions(-) rename packages/sysutils/bash/patches/{bash-4.1-fixes-1.diff => bash-4.1-fixes-1.patch} (100%) diff --git a/packages/sysutils/bash/meta b/packages/sysutils/bash/meta index e4d86f6385..06dddcb548 100644 --- a/packages/sysutils/bash/meta +++ b/packages/sysutils/bash/meta @@ -3,12 +3,12 @@ PKG_VERSION="4.1" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" -PKG_SITE="http://http://www.gnu.org/software/bash " +PKG_SITE="http://http://www.gnu.org/software/bash" PKG_URL="http://ftp.gnu.org/gnu/$PKG_NAME/$PKG_NAME-$PKG_VERSION.tar.gz" PKG_DEPENDS="" PKG_BUILD_DEPENDS="toolchain" PKG_PRIORITY="required" PKG_SECTION="system" -PKG_SHORTDESC="Bourne Again Shell" +PKG_SHORTDESC="bash: Bourne Again Shell" PKG_LONGDESC="Bash is the shell, or command language interpreter, that will appear in the GNU operating system. Bash is an sh-compatible shell that incorporates useful features from the Korn shell (ksh) and C shell (csh). It is intended to conform to the IEEE POSIX P1003.2/ISO 9945.2 Shell and Tools standard. It offers functional improvements over sh for both programming and interactive use. In addition, most sh scripts can be run by Bash without modification." PKG_IS_ADDON="no" diff --git a/packages/sysutils/bash/patches/bash-4.1-fixes-1.diff b/packages/sysutils/bash/patches/bash-4.1-fixes-1.patch similarity index 100% rename from packages/sysutils/bash/patches/bash-4.1-fixes-1.diff rename to packages/sysutils/bash/patches/bash-4.1-fixes-1.patch From 64cda1bc2e1a22e6999367c55077d6a2c5f0b54b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 14:40:07 +0100 Subject: [PATCH 236/850] usbutils: add meta file support, cleanups, update to usbutils-0.90 Signed-off-by: Stephan Raue --- packages/sysutils/usbutils/build | 4 ---- packages/sysutils/usbutils/install | 7 ++----- packages/sysutils/usbutils/meta | 14 ++++++++++++++ packages/sysutils/usbutils/url | 1 - 4 files changed, 16 insertions(+), 10 deletions(-) create mode 100644 packages/sysutils/usbutils/meta delete mode 100644 packages/sysutils/usbutils/url diff --git a/packages/sysutils/usbutils/build b/packages/sysutils/usbutils/build index 2a8c47b27f..302329f595 100755 --- a/packages/sysutils/usbutils/build +++ b/packages/sysutils/usbutils/build @@ -2,10 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build zlib -$SCRIPTS/build libusb-compat - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/sysutils/usbutils/install b/packages/sysutils/usbutils/install index 08ccea9614..cec1729ca1 100755 --- a/packages/sysutils/usbutils/install +++ b/packages/sysutils/usbutils/install @@ -2,11 +2,8 @@ . config/options $1 -$SCRIPTS/install zlib -$SCRIPTS/install libusb-compat - mkdir -p $INSTALL/usr/sbin - cp -PR $PKG_BUILD/lsusb $INSTALL/usr/sbin + cp -P $PKG_BUILD/lsusb $INSTALL/usr/sbin mkdir -p $INSTALL/usr/share/misc - cp -PR $PKG_BUILD/usb.ids $INSTALL/usr/share + cp $PKG_BUILD/usb.ids $INSTALL/usr/share diff --git a/packages/sysutils/usbutils/meta b/packages/sysutils/usbutils/meta new file mode 100644 index 0000000000..7ca5b389f8 --- /dev/null +++ b/packages/sysutils/usbutils/meta @@ -0,0 +1,14 @@ +PKG_NAME="usbutils" +PKG_VERSION="0.90" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.linux-usb.org/" +PKG_URL="http://www.kernel.org/pub/linux/utils/usb/usbutils/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="zlib libusb-compat" +PKG_BUILD_DEPENDS="toolchain zlib libusb-compat" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="usbutils: Linux USB Utilities" +PKG_LONGDESC="This package contains various utilities for inspecting and setting of devices connected to the USB bus. Requires a kernel version including usbdevfs support - and this usbdevfs mounted to /proc/bus/usb." +PKG_IS_ADDON="no" diff --git a/packages/sysutils/usbutils/url b/packages/sysutils/usbutils/url deleted file mode 100644 index c31de262f9..0000000000 --- a/packages/sysutils/usbutils/url +++ /dev/null @@ -1 +0,0 @@ -http://downloads.sourceforge.net/linux-usb/usbutils-0.86.tar.gz From 00d8be59d0761f435e76263e6bb27c8d1de3d2a5 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 14:40:29 +0100 Subject: [PATCH 237/850] upower: add metafile support, cleanups Signed-off-by: Stephan Raue --- packages/sysutils/upower/build | 7 ------- packages/sysutils/upower/install | 7 ------- packages/sysutils/upower/meta | 14 ++++++++++++++ packages/sysutils/upower/url | 1 - 4 files changed, 14 insertions(+), 15 deletions(-) create mode 100644 packages/sysutils/upower/meta delete mode 100644 packages/sysutils/upower/url diff --git a/packages/sysutils/upower/build b/packages/sysutils/upower/build index d085b3a555..449c424d59 100755 --- a/packages/sysutils/upower/build +++ b/packages/sysutils/upower/build @@ -2,13 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build udev -$SCRIPTS/build glib -$SCRIPTS/build dbus -$SCRIPTS/build dbus-glib -$SCRIPTS/build polkit - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/sysutils/upower/install b/packages/sysutils/upower/install index b03b420288..5e9298dcf7 100755 --- a/packages/sysutils/upower/install +++ b/packages/sysutils/upower/install @@ -2,13 +2,6 @@ . config/options $1 -$SCRIPTS/install udev -$SCRIPTS/install glib -$SCRIPTS/install dbus -$SCRIPTS/install dbus-glib -$SCRIPTS/install polkit -$SCRIPTS/install pm-utils - mkdir -p $INSTALL/etc/UPower cp $PKG_BUILD/etc/UPower.conf $INSTALL/etc/UPower diff --git a/packages/sysutils/upower/meta b/packages/sysutils/upower/meta new file mode 100644 index 0000000000..bf6a516b4a --- /dev/null +++ b/packages/sysutils/upower/meta @@ -0,0 +1,14 @@ +PKG_NAME="upower" +PKG_VERSION="0.9.7" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://upower.freedesktop.org/" +PKG_URL="http://upower.freedesktop.org/releases/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="udev glib dbus dbus-glib polkit pm-utils" +PKG_BUILD_DEPENDS="toolchain udev glib dbus dbus-glib polkit" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="upower: a modular hardware abstraction layer designed for use in Linux systems that is designed to simplify device management." +PKG_LONGDESC="Upower is a modular hardware abstraction layer designed for use in Linux systems that is designed to simplify device management and replace the current monolithic Linux HAL. Upower includes the ability to enumerate system devices and send notifications when hardware is added or removed from the computer system." +PKG_IS_ADDON="no" diff --git a/packages/sysutils/upower/url b/packages/sysutils/upower/url deleted file mode 100644 index 8273050bec..0000000000 --- a/packages/sysutils/upower/url +++ /dev/null @@ -1 +0,0 @@ -http://upower.freedesktop.org/releases/upower-0.9.7.tar.bz2 From ffbe35380140b94fc9896ea788ec7b49bf1845b1 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 14:40:40 +0100 Subject: [PATCH 238/850] udisks: add metafile support, cleanups Signed-off-by: Stephan Raue --- packages/sysutils/udisks/build | 11 ----------- packages/sysutils/udisks/install | 12 +----------- packages/sysutils/udisks/meta | 14 ++++++++++++++ packages/sysutils/udisks/url | 1 - 4 files changed, 15 insertions(+), 23 deletions(-) create mode 100644 packages/sysutils/udisks/meta delete mode 100644 packages/sysutils/udisks/url diff --git a/packages/sysutils/udisks/build b/packages/sysutils/udisks/build index a512566626..4dd0ce0941 100755 --- a/packages/sysutils/udisks/build +++ b/packages/sysutils/udisks/build @@ -2,17 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build sg3_utils -$SCRIPTS/build udev -$SCRIPTS/build glib -$SCRIPTS/build dbus -$SCRIPTS/build dbus-glib -$SCRIPTS/build parted -$SCRIPTS/build LVM2 -$SCRIPTS/build polkit -$SCRIPTS/build libatasmart - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/sysutils/udisks/install b/packages/sysutils/udisks/install index 66db80ca36..057d67ad53 100755 --- a/packages/sysutils/udisks/install +++ b/packages/sysutils/udisks/install @@ -2,18 +2,8 @@ . config/options $1 -$SCRIPTS/install sg3_utils -$SCRIPTS/install udev -$SCRIPTS/install glib -$SCRIPTS/install dbus -$SCRIPTS/install dbus-glib -$SCRIPTS/install parted -$SCRIPTS/install LVM2 -$SCRIPTS/install polkit -$SCRIPTS/install libatasmart - mkdir -p $INSTALL/etc/dbus-1/system.d - cp -P $PKG_BUILD/data/org.freedesktop.UDisks.conf $INSTALL/etc/dbus-1/system.d + cp $PKG_BUILD/data/org.freedesktop.UDisks.conf $INSTALL/etc/dbus-1/system.d mkdir -p $INSTALL/lib/udev cp -P $PKG_BUILD/src/probers/udisks-dm-export $INSTALL/lib/udev diff --git a/packages/sysutils/udisks/meta b/packages/sysutils/udisks/meta new file mode 100644 index 0000000000..10bdd55cb8 --- /dev/null +++ b/packages/sysutils/udisks/meta @@ -0,0 +1,14 @@ +PKG_NAME="udisks" +PKG_VERSION="1.0.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.freedesktop.org/wiki/Software/udisks" +PKG_URL="http://hal.freedesktop.org/releases/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="sg3_utils udev glib dbus dbus-glib parted LVM2 polkit libatasmart" +PKG_BUILD_DEPENDS="toolchain sg3_utils udev glib dbus dbus-glib parted LVM2 polkit libatasmart" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="udisks: a modular hardware abstraction layer designed for use in Linux systems that is designed to simplify device management." +PKG_LONGDESC="Udisks is a modular hardware abstraction layer designed for use in Linux systems that is designed to simplify device management and replace the current monolithic Linux HAL. Udisks includes the ability to enumerate system devices and send notifications when hardware is added or removed from the computer system." +PKG_IS_ADDON="no" diff --git a/packages/sysutils/udisks/url b/packages/sysutils/udisks/url deleted file mode 100644 index 91ff561e1a..0000000000 --- a/packages/sysutils/udisks/url +++ /dev/null @@ -1 +0,0 @@ -http://hal.freedesktop.org/releases/udisks-1.0.1.tar.gz From 418fcc718096520dbb0ed7759ae0b70375f79d0d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 14:40:55 +0100 Subject: [PATCH 239/850] udev: add metafile support, cleanups Signed-off-by: Stephan Raue --- packages/sysutils/udev/build | 6 ----- packages/sysutils/udev/install | 23 ++++++++----------- packages/sysutils/udev/meta | 14 +++++++++++ ... udev-164-remove_keymap_and_acl-0.1.patch} | 0 packages/sysutils/udev/url | 1 - 5 files changed, 23 insertions(+), 21 deletions(-) create mode 100644 packages/sysutils/udev/meta rename packages/sysutils/udev/patches/{10_udev-162_remove_keymap_and_acl-0.1.diff => udev-164-remove_keymap_and_acl-0.1.patch} (100%) delete mode 100644 packages/sysutils/udev/url diff --git a/packages/sysutils/udev/build b/packages/sysutils/udev/build index 09c27d94cf..36a2b48971 100755 --- a/packages/sysutils/udev/build +++ b/packages/sysutils/udev/build @@ -2,12 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build glib -$SCRIPTS/build pciutils -$SCRIPTS/build usbutils -$SCRIPTS/build libusb-compat - cd $PKG_BUILD $AUTORECONF diff --git a/packages/sysutils/udev/install b/packages/sysutils/udev/install index d3d4e22317..86c4ef90e0 100755 --- a/packages/sysutils/udev/install +++ b/packages/sysutils/udev/install @@ -2,20 +2,15 @@ . config/options $1 -$SCRIPTS/install glib -$SCRIPTS/install pciutils -$SCRIPTS/install usbutils -$SCRIPTS/install libusb-compat - - add_group cdrom 11 - add_group dialout 18 - add_group disk 6 - add_group floppy 19 - add_group kmem 9 - add_group lp 7 - add_group tape 33 - add_group tty 5 - add_group video 39 +add_group cdrom 11 +add_group dialout 18 +add_group disk 6 +add_group floppy 19 +add_group kmem 9 +add_group lp 7 +add_group tape 33 +add_group tty 5 +add_group video 39 mkdir -p $INSTALL/sbin cp $PKG_BUILD/$1/udevadm $INSTALL/sbin diff --git a/packages/sysutils/udev/meta b/packages/sysutils/udev/meta new file mode 100644 index 0000000000..614d950c59 --- /dev/null +++ b/packages/sysutils/udev/meta @@ -0,0 +1,14 @@ +PKG_NAME="udev" +PKG_VERSION="164" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://ftp.kernel.org/pub/linux/utils/kernel/hotplug/udev.html" +PKG_URL="http://www.eu.kernel.org/pub/linux/utils/kernel/hotplug/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="glib pciutils usbutils libusb-compat" +PKG_BUILD_DEPENDS="toolchain glib pciutils usbutils libusb-compat" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="udev: A Userspace Implementation for dynamic /dev nodes" +PKG_LONGDESC="U/dev is a program that replaces the functionality of DevFS (only providing /dev entries for devices that are in the system at any point in time). It is an attempt to move all naming policy out of the kernel." +PKG_IS_ADDON="no" diff --git a/packages/sysutils/udev/patches/10_udev-162_remove_keymap_and_acl-0.1.diff b/packages/sysutils/udev/patches/udev-164-remove_keymap_and_acl-0.1.patch similarity index 100% rename from packages/sysutils/udev/patches/10_udev-162_remove_keymap_and_acl-0.1.diff rename to packages/sysutils/udev/patches/udev-164-remove_keymap_and_acl-0.1.patch diff --git a/packages/sysutils/udev/url b/packages/sysutils/udev/url deleted file mode 100644 index 2f87dbb3b8..0000000000 --- a/packages/sysutils/udev/url +++ /dev/null @@ -1 +0,0 @@ -http://www.eu.kernel.org/pub/linux/utils/kernel/hotplug/udev-164.tar.bz2 From 891942788ab9ba1666fdb1102d15d7c98b914e2c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 14:41:09 +0100 Subject: [PATCH 240/850] sg3_utils: add metafile support, cleanups Signed-off-by: Stephan Raue --- packages/sysutils/sg3_utils/build | 2 -- packages/sysutils/sg3_utils/install | 2 +- packages/sysutils/sg3_utils/meta | 14 ++++++++++++++ packages/sysutils/sg3_utils/url | 1 - 4 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 packages/sysutils/sg3_utils/meta delete mode 100644 packages/sysutils/sg3_utils/url diff --git a/packages/sysutils/sg3_utils/build b/packages/sysutils/sg3_utils/build index 4b6fa620c3..2b7d031b87 100755 --- a/packages/sysutils/sg3_utils/build +++ b/packages/sysutils/sg3_utils/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/sysutils/sg3_utils/install b/packages/sysutils/sg3_utils/install index 8fb846d505..6affa11e33 100755 --- a/packages/sysutils/sg3_utils/install +++ b/packages/sysutils/sg3_utils/install @@ -3,4 +3,4 @@ . config/options $1 mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/lib/.libs/*.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/lib/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/sysutils/sg3_utils/meta b/packages/sysutils/sg3_utils/meta new file mode 100644 index 0000000000..88b2b64578 --- /dev/null +++ b/packages/sysutils/sg3_utils/meta @@ -0,0 +1,14 @@ +PKG_NAME="sg3_utils" +PKG_VERSION="1.29" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://freshmeat.net/projects/sg3_utils/" +PKG_URL="http://sg.danny.cz/sg/p/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="sg3_utils: a package of utilities for accessing devices that use SCSI command sets." +PKG_LONGDESC="sg3_utils is a package of utilities for accessing devices that use SCSI command sets. Most utilities issue a single command and display the response, while some work at a slightly higher level. There are utilities for fetching INQUIRY data and VPD, mode, and log pages. There is support for modern SCSI transports such as SAS and FCP." +PKG_IS_ADDON="no" diff --git a/packages/sysutils/sg3_utils/url b/packages/sysutils/sg3_utils/url deleted file mode 100644 index 8f7070e5b2..0000000000 --- a/packages/sysutils/sg3_utils/url +++ /dev/null @@ -1 +0,0 @@ -http://sg.danny.cz/sg/p/sg3_utils-1.29.tar.bz2 \ No newline at end of file From b9743c8747b3d504f1e55a928ea5626fb269ebb0 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 14:41:32 +0100 Subject: [PATCH 241/850] irserver: add metafile support, cleanups Signed-off-by: Stephan Raue --- packages/sysutils/remote/irserver/build | 2 -- packages/sysutils/remote/irserver/meta | 14 ++++++++++++++ ...6.02.82-add_support_for_dev_irtransX-0.1.patch} | 0 ....8.6.diff => irserver-6.02.82-lirc_0.8.6.patch} | 0 packages/sysutils/remote/irserver/url | 1 - 5 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 packages/sysutils/remote/irserver/meta rename packages/sysutils/remote/irserver/patches/{01-irserver-add_support_for_dev_irtransX-0.1.diff => irserver-6.02.82-add_support_for_dev_irtransX-0.1.patch} (100%) rename packages/sysutils/remote/irserver/patches/{irserver-20100817-lirc_0.8.6.diff => irserver-6.02.82-lirc_0.8.6.patch} (100%) delete mode 100644 packages/sysutils/remote/irserver/url diff --git a/packages/sysutils/remote/irserver/build b/packages/sysutils/remote/irserver/build index bb2434d5fa..5a028a3950 100755 --- a/packages/sysutils/remote/irserver/build +++ b/packages/sysutils/remote/irserver/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD [ $TARGET_ARCH = i386 ] && make CC=$TARGET_CC irserver diff --git a/packages/sysutils/remote/irserver/meta b/packages/sysutils/remote/irserver/meta new file mode 100644 index 0000000000..5d143bf852 --- /dev/null +++ b/packages/sysutils/remote/irserver/meta @@ -0,0 +1,14 @@ +PKG_NAME="irserver" +PKG_VERSION="6.02.82" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="Freeware" +PKG_SITE="http://http://www.irtrans.de" +PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="sysutils/remote" +PKG_SHORTDESC="irserver: IR Trans transforms your PC into a programmable remote control." +PKG_LONGDESC="IR Trans transforms your PC into a programmable remote control: It learns the codes of your remote control, stores them in a database and sends them controlled by your applications." +PKG_IS_ADDON="no" diff --git a/packages/sysutils/remote/irserver/patches/01-irserver-add_support_for_dev_irtransX-0.1.diff b/packages/sysutils/remote/irserver/patches/irserver-6.02.82-add_support_for_dev_irtransX-0.1.patch similarity index 100% rename from packages/sysutils/remote/irserver/patches/01-irserver-add_support_for_dev_irtransX-0.1.diff rename to packages/sysutils/remote/irserver/patches/irserver-6.02.82-add_support_for_dev_irtransX-0.1.patch diff --git a/packages/sysutils/remote/irserver/patches/irserver-20100817-lirc_0.8.6.diff b/packages/sysutils/remote/irserver/patches/irserver-6.02.82-lirc_0.8.6.patch similarity index 100% rename from packages/sysutils/remote/irserver/patches/irserver-20100817-lirc_0.8.6.diff rename to packages/sysutils/remote/irserver/patches/irserver-6.02.82-lirc_0.8.6.patch diff --git a/packages/sysutils/remote/irserver/url b/packages/sysutils/remote/irserver/url deleted file mode 100644 index ad860a076b..0000000000 --- a/packages/sysutils/remote/irserver/url +++ /dev/null @@ -1 +0,0 @@ -http://sources.openelec.tv/svn/irserver-6.02.82.tar.bz2 \ No newline at end of file From f59710049e2465a0ed80013a8d36415aee4280c5 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 14:42:08 +0100 Subject: [PATCH 242/850] pciutils: add metafile support, cleanups Signed-off-by: Stephan Raue --- packages/sysutils/pciutils/build | 2 -- packages/sysutils/pciutils/meta | 14 ++++++++++++++ packages/sysutils/pciutils/url | 1 - 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 packages/sysutils/pciutils/meta delete mode 100644 packages/sysutils/pciutils/url diff --git a/packages/sysutils/pciutils/build b/packages/sysutils/pciutils/build index 307c98f84d..a18f89ab13 100755 --- a/packages/sysutils/pciutils/build +++ b/packages/sysutils/pciutils/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD make OPT="$TARGET_CFLAGS" \ diff --git a/packages/sysutils/pciutils/meta b/packages/sysutils/pciutils/meta new file mode 100644 index 0000000000..1bb6a6e6b9 --- /dev/null +++ b/packages/sysutils/pciutils/meta @@ -0,0 +1,14 @@ +PKG_NAME="pciutils" +PKG_VERSION="3.1.7" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://mj.ucw.cz/pciutils.shtml" +PKG_URL="http://ftp.de.kernel.org/pub/software/utils/pciutils/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="pciutils: Linux PCI Utilities" +PKG_LONGDESC="This package contains various utilities for inspecting and setting of devices connected to the PCI bus and the PCI vendor/product ID database." +PKG_IS_ADDON="no" diff --git a/packages/sysutils/pciutils/url b/packages/sysutils/pciutils/url deleted file mode 100644 index 31f0339444..0000000000 --- a/packages/sysutils/pciutils/url +++ /dev/null @@ -1 +0,0 @@ -http://ftp.de.kernel.org/pub/software/utils/pciutils/pciutils-3.1.7.tar.bz2 From 3fc8f2c8f017143ef56ab7cd62e35c96436becbd Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 14:42:24 +0100 Subject: [PATCH 243/850] plymouth-lite: add metafile support, cleanups Signed-off-by: Stephan Raue --- packages/sysutils/plymouth-lite/build | 3 --- packages/sysutils/plymouth-lite/meta | 14 ++++++++++++++ ...ursor.diff => plymouth-lite-0.6.0-cursor.patch} | 0 ...ld.diff => plymouth-lite-0.6.0-fix-build.patch} | 0 ...diff => plymouth-lite-0.6.0-libpng_1.4.0.patch} | 0 ...esize.diff => plymouth-lite-0.6.0-resize.patch} | 0 packages/sysutils/plymouth-lite/url | 1 - 7 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 packages/sysutils/plymouth-lite/meta rename packages/sysutils/plymouth-lite/patches/{cursor.diff => plymouth-lite-0.6.0-cursor.patch} (100%) rename packages/sysutils/plymouth-lite/patches/{plymouth-fix-build.diff => plymouth-lite-0.6.0-fix-build.patch} (100%) rename packages/sysutils/plymouth-lite/patches/{plymouth-lite-0.6.0_libpng-1.4.0.diff => plymouth-lite-0.6.0-libpng_1.4.0.patch} (100%) rename packages/sysutils/plymouth-lite/patches/{plymouth-resize.diff => plymouth-lite-0.6.0-resize.patch} (100%) delete mode 100644 packages/sysutils/plymouth-lite/url diff --git a/packages/sysutils/plymouth-lite/build b/packages/sysutils/plymouth-lite/build index 16668aa344..8083767fd5 100755 --- a/packages/sysutils/plymouth-lite/build +++ b/packages/sysutils/plymouth-lite/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build libpng - # ensure we use size optimization. CFLAGS=`echo $CFLAGS | sed -e "s|-O2|-Os|"` CFLAGS=`echo $CFLAGS | sed -e "s|-O3|-Os|"` diff --git a/packages/sysutils/plymouth-lite/meta b/packages/sysutils/plymouth-lite/meta new file mode 100644 index 0000000000..a7f5611b9b --- /dev/null +++ b/packages/sysutils/plymouth-lite/meta @@ -0,0 +1,14 @@ +PKG_NAME="plymouth-lite" +PKG_VERSION="0.6.0" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.meego.com" +PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain libpng" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="plymouth-lite: Boot splash screen based on Fedora's Plymouth code" +PKG_LONGDESC="Boot splash screen based on Fedora's Plymouth code" +PKG_IS_ADDON="no" diff --git a/packages/sysutils/plymouth-lite/patches/cursor.diff b/packages/sysutils/plymouth-lite/patches/plymouth-lite-0.6.0-cursor.patch similarity index 100% rename from packages/sysutils/plymouth-lite/patches/cursor.diff rename to packages/sysutils/plymouth-lite/patches/plymouth-lite-0.6.0-cursor.patch diff --git a/packages/sysutils/plymouth-lite/patches/plymouth-fix-build.diff b/packages/sysutils/plymouth-lite/patches/plymouth-lite-0.6.0-fix-build.patch similarity index 100% rename from packages/sysutils/plymouth-lite/patches/plymouth-fix-build.diff rename to packages/sysutils/plymouth-lite/patches/plymouth-lite-0.6.0-fix-build.patch diff --git a/packages/sysutils/plymouth-lite/patches/plymouth-lite-0.6.0_libpng-1.4.0.diff b/packages/sysutils/plymouth-lite/patches/plymouth-lite-0.6.0-libpng_1.4.0.patch similarity index 100% rename from packages/sysutils/plymouth-lite/patches/plymouth-lite-0.6.0_libpng-1.4.0.diff rename to packages/sysutils/plymouth-lite/patches/plymouth-lite-0.6.0-libpng_1.4.0.patch diff --git a/packages/sysutils/plymouth-lite/patches/plymouth-resize.diff b/packages/sysutils/plymouth-lite/patches/plymouth-lite-0.6.0-resize.patch similarity index 100% rename from packages/sysutils/plymouth-lite/patches/plymouth-resize.diff rename to packages/sysutils/plymouth-lite/patches/plymouth-lite-0.6.0-resize.patch diff --git a/packages/sysutils/plymouth-lite/url b/packages/sysutils/plymouth-lite/url deleted file mode 100644 index d4557ad929..0000000000 --- a/packages/sysutils/plymouth-lite/url +++ /dev/null @@ -1 +0,0 @@ -http://sources.openelec.tv/svn/plymouth-lite-0.6.0.tar.bz2 \ No newline at end of file From 928b6975d4a891fa90aca590f83e7212293d3ab3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 14:42:43 +0100 Subject: [PATCH 244/850] pm-utils: add metafile support, cleanups Signed-off-by: Stephan Raue --- packages/sysutils/pm-utils/build | 2 -- packages/sysutils/pm-utils/install | 4 ---- packages/sysutils/pm-utils/meta | 14 ++++++++++++++ packages/sysutils/pm-utils/url | 1 - 4 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 packages/sysutils/pm-utils/meta delete mode 100644 packages/sysutils/pm-utils/url diff --git a/packages/sysutils/pm-utils/build b/packages/sysutils/pm-utils/build index b03dbd53f4..5d39750d1c 100755 --- a/packages/sysutils/pm-utils/build +++ b/packages/sysutils/pm-utils/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/sysutils/pm-utils/install b/packages/sysutils/pm-utils/install index 8945223185..cfa27b5ff8 100755 --- a/packages/sysutils/pm-utils/install +++ b/packages/sysutils/pm-utils/install @@ -2,10 +2,6 @@ . config/options $1 -$SCRIPTS/install grep -$SCRIPTS/install dmidecode -$SCRIPTS/install kbd - mkdir -p $INSTALL/etc/pm/config.d mkdir -p $INSTALL/etc/pm/power.d mkdir -p $INSTALL/etc/pm/sleep.d diff --git a/packages/sysutils/pm-utils/meta b/packages/sysutils/pm-utils/meta new file mode 100644 index 0000000000..2db4232368 --- /dev/null +++ b/packages/sysutils/pm-utils/meta @@ -0,0 +1,14 @@ +PKG_NAME="pm-utils" +PKG_VERSION="1.4.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://pm-utils.freedesktop.org/wiki/" +PKG_URL="http://pm-utils.freedesktop.org/releases/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="grep dmidecode kbd" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="pm-utils: a small collection of scripts that handle suspend and resume on behalf of HAL." +PKG_LONGDESC="pm-utils is a small collection of scripts that handle suspend and resume on behalf of HAL." +PKG_IS_ADDON="no" diff --git a/packages/sysutils/pm-utils/url b/packages/sysutils/pm-utils/url deleted file mode 100644 index d6883b385e..0000000000 --- a/packages/sysutils/pm-utils/url +++ /dev/null @@ -1 +0,0 @@ -http://pm-utils.freedesktop.org/releases/pm-utils-1.4.1.tar.gz \ No newline at end of file From ce940245271c9e897f5c2f51c87fb553b0cf60de Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 14:43:12 +0100 Subject: [PATCH 245/850] atvutils: rename patches Signed-off-by: Stephan Raue --- ...on-0.1.diff => atvclient-0.1-change_config_location-0.1.patch} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/sysutils/remote/atvclient/patches/{atvclient-change_config_location-0.1.diff => atvclient-0.1-change_config_location-0.1.patch} (100%) diff --git a/packages/sysutils/remote/atvclient/patches/atvclient-change_config_location-0.1.diff b/packages/sysutils/remote/atvclient/patches/atvclient-0.1-change_config_location-0.1.patch similarity index 100% rename from packages/sysutils/remote/atvclient/patches/atvclient-change_config_location-0.1.diff rename to packages/sysutils/remote/atvclient/patches/atvclient-0.1-change_config_location-0.1.patch From 6ba8c49c6e823c70204f7b23eb3a47e705c3466c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 14:43:29 +0100 Subject: [PATCH 246/850] eventlircd: rename patches Signed-off-by: Stephan Raue --- ...eventlircd-17-fixes-0.1.diff => eventlircd-17-fixes-0.1.patch} | 0 ...entlircd-17-repeat-0.1.diff => eventlircd-17-repeat-0.1.patch} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename packages/sysutils/remote/eventlircd/patches/{eventlircd-17-fixes-0.1.diff => eventlircd-17-fixes-0.1.patch} (100%) rename packages/sysutils/remote/eventlircd/patches/{eventlircd-17-repeat-0.1.diff => eventlircd-17-repeat-0.1.patch} (100%) diff --git a/packages/sysutils/remote/eventlircd/patches/eventlircd-17-fixes-0.1.diff b/packages/sysutils/remote/eventlircd/patches/eventlircd-17-fixes-0.1.patch similarity index 100% rename from packages/sysutils/remote/eventlircd/patches/eventlircd-17-fixes-0.1.diff rename to packages/sysutils/remote/eventlircd/patches/eventlircd-17-fixes-0.1.patch diff --git a/packages/sysutils/remote/eventlircd/patches/eventlircd-17-repeat-0.1.diff b/packages/sysutils/remote/eventlircd/patches/eventlircd-17-repeat-0.1.patch similarity index 100% rename from packages/sysutils/remote/eventlircd/patches/eventlircd-17-repeat-0.1.diff rename to packages/sysutils/remote/eventlircd/patches/eventlircd-17-repeat-0.1.patch From 2026b8241ac1fbba4ca5b6a362a1dd2443627912 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 14:43:57 +0100 Subject: [PATCH 247/850] lirc: rename patches, cleanups Signed-off-by: Stephan Raue --- packages/sysutils/remote/lirc/meta | 2 +- ...-in-kernel-ioctls.diff => lirc-0.8.7-in_kernel_ioctls.patch} | 0 ....8.7-uinput_key_fix.diff => lirc-0.8.7-uinput_key_fix.patch} | 0 3 files changed, 1 insertion(+), 1 deletion(-) rename packages/sysutils/remote/lirc/patches/{lirc-in-kernel-ioctls.diff => lirc-0.8.7-in_kernel_ioctls.patch} (100%) rename packages/sysutils/remote/lirc/patches/{lirc-0.8.7-uinput_key_fix.diff => lirc-0.8.7-uinput_key_fix.patch} (100%) diff --git a/packages/sysutils/remote/lirc/meta b/packages/sysutils/remote/lirc/meta index 932cccba3b..4e946bf0d6 100644 --- a/packages/sysutils/remote/lirc/meta +++ b/packages/sysutils/remote/lirc/meta @@ -8,7 +8,7 @@ PKG_URL="http://prdownloads.sourceforge.net/lirc/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" PKG_BUILD_DEPENDS="toolchain" PKG_PRIORITY="optional" -PKG_SECTION="system/remote" +PKG_SECTION="sysutils/remote" PKG_SHORTDESC="lirc: Linux Infrared Remote Control" PKG_LONGDESC="LIRC is a package that allows you to decode and send infra-red signals of many (but not all) commonly used remote controls." PKG_IS_ADDON="no" diff --git a/packages/sysutils/remote/lirc/patches/lirc-in-kernel-ioctls.diff b/packages/sysutils/remote/lirc/patches/lirc-0.8.7-in_kernel_ioctls.patch similarity index 100% rename from packages/sysutils/remote/lirc/patches/lirc-in-kernel-ioctls.diff rename to packages/sysutils/remote/lirc/patches/lirc-0.8.7-in_kernel_ioctls.patch diff --git a/packages/sysutils/remote/lirc/patches/lirc-0.8.7-uinput_key_fix.diff b/packages/sysutils/remote/lirc/patches/lirc-0.8.7-uinput_key_fix.patch similarity index 100% rename from packages/sysutils/remote/lirc/patches/lirc-0.8.7-uinput_key_fix.diff rename to packages/sysutils/remote/lirc/patches/lirc-0.8.7-uinput_key_fix.patch From 86cc1ce25442c69b1b0310b2953e7e9f67270572 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 14:44:23 +0100 Subject: [PATCH 248/850] remote: add meta file support Signed-off-by: Stephan Raue --- packages/sysutils/remote/install | 4 ---- packages/sysutils/remote/meta | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 packages/sysutils/remote/meta diff --git a/packages/sysutils/remote/install b/packages/sysutils/remote/install index 48ee8edfd9..a5aac648f3 100755 --- a/packages/sysutils/remote/install +++ b/packages/sysutils/remote/install @@ -2,9 +2,5 @@ . config/options $1 -$SCRIPTS/install irserver -$SCRIPTS/install eventlircd -[ "$ATVCLIENT_SUPPORT" = "yes" ] && $SCRIPTS/install atvclient - mkdir -p $INSTALL/usr/config cp $PKG_DIR/config/*.conf $INSTALL/usr/config \ No newline at end of file diff --git a/packages/sysutils/remote/meta b/packages/sysutils/remote/meta new file mode 100644 index 0000000000..4487ef5e46 --- /dev/null +++ b/packages/sysutils/remote/meta @@ -0,0 +1,16 @@ +PKG_NAME="remote" +PKG_VERSION="" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.openelec.tv" +PKG_URL="" +PKG_DEPENDS="irserver eventlircd" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="system/remote" +PKG_SHORTDESC="remote: Meta package for installing various tools needed for remote support" +PKG_LONGDESC="Meta package for installing various tools needed for remote support" +PKG_IS_ADDON="no" + +[ "$ATVCLIENT_SUPPORT" = "yes" ] && PKG_DEPENDS="$PKG_DEPENDS atvclient" From ba8c8daac02e334badae71c1ba875ce631931ea7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 14:48:42 +0100 Subject: [PATCH 249/850] util-linux-ng: add meta file support Signed-off-by: Stephan Raue --- packages/sysutils/util-linux-ng/build | 2 -- packages/sysutils/util-linux-ng/meta | 14 ++++++++++++++ packages/sysutils/util-linux-ng/url | 1 - 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 packages/sysutils/util-linux-ng/meta delete mode 100644 packages/sysutils/util-linux-ng/url diff --git a/packages/sysutils/util-linux-ng/build b/packages/sysutils/util-linux-ng/build index b52175f579..c1d2857e80 100755 --- a/packages/sysutils/util-linux-ng/build +++ b/packages/sysutils/util-linux-ng/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD gt_cv_func_gnugettext1_libintl=no \ ./configure --host=$TARGET_NAME \ diff --git a/packages/sysutils/util-linux-ng/meta b/packages/sysutils/util-linux-ng/meta new file mode 100644 index 0000000000..fafcfe7b6d --- /dev/null +++ b/packages/sysutils/util-linux-ng/meta @@ -0,0 +1,14 @@ +PKG_NAME="util-linux-ng" +PKG_VERSION="2.18" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://userweb.kernel.org/~kzak/util-linux-ng/" +PKG_URL="http://www.kernel.org/pub/linux/utils/util-linux-ng/v$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="util-linux: Miscellaneous system utilities for Linux" +PKG_LONGDESC="The util-linux package contains a large variety of low-level system utilities that are necessary for a Linux system to function. Among many features, Util-linux contains the fdisk configuration tool and the login program." +PKG_IS_ADDON="no" diff --git a/packages/sysutils/util-linux-ng/url b/packages/sysutils/util-linux-ng/url deleted file mode 100644 index acbdb64b0d..0000000000 --- a/packages/sysutils/util-linux-ng/url +++ /dev/null @@ -1 +0,0 @@ -http://www.kernel.org/pub/linux/utils/util-linux-ng/v2.18/util-linux-ng-2.18.tar.bz2 From 6d6a953fc57446939426e53a23307bdad4b1dde5 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 14:51:14 +0100 Subject: [PATCH 250/850] pm-utils: rename textfile Signed-off-by: Stephan Raue --- packages/sysutils/pm-utils/quirks/{url => url.txt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/sysutils/pm-utils/quirks/{url => url.txt} (100%) diff --git a/packages/sysutils/pm-utils/quirks/url b/packages/sysutils/pm-utils/quirks/url.txt similarity index 100% rename from packages/sysutils/pm-utils/quirks/url rename to packages/sysutils/pm-utils/quirks/url.txt From 1543088fe6bd105afd2cd43cf2de6fb766c7438a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 15:36:56 +0100 Subject: [PATCH 251/850] libmms: add meta file support Signed-off-by: Stephan Raue --- packages/audio/libmms/build | 3 --- packages/audio/libmms/install | 4 +--- packages/audio/libmms/meta | 14 ++++++++++++++ ..._keyword.diff => libmms-0.5-this_keyword.patch} | 0 packages/audio/libmms/url | 1 - 5 files changed, 15 insertions(+), 7 deletions(-) create mode 100644 packages/audio/libmms/meta rename packages/audio/libmms/patches/{10-libmms-0.5-this_keyword.diff => libmms-0.5-this_keyword.patch} (100%) delete mode 100644 packages/audio/libmms/url diff --git a/packages/audio/libmms/build b/packages/audio/libmms/build index 4992e565f1..186f78693d 100755 --- a/packages/audio/libmms/build +++ b/packages/audio/libmms/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build glib - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/audio/libmms/install b/packages/audio/libmms/install index 2e2981e5ef..a0f9a6ac83 100755 --- a/packages/audio/libmms/install +++ b/packages/audio/libmms/install @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/install glib - mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/src/.libs/*.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/src/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/audio/libmms/meta b/packages/audio/libmms/meta new file mode 100644 index 0000000000..ad9500651c --- /dev/null +++ b/packages/audio/libmms/meta @@ -0,0 +1,14 @@ +PKG_NAME="libmms" +PKG_VERSION="0.5" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="https://launchpad.net/libmms" +PKG_URL="http://launchpad.net/libmms/trunk/$PKG_VERSION/+download/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="glib" +PKG_BUILD_DEPENDS="toolchain glib" +PKG_PRIORITY="optional" +PKG_SECTION="audio" +PKG_SHORTDESC="libmms: a common library for parsing mms:// and mmsh:// type network streams." +PKG_LONGDESC="LibMMS is a common library for parsing mms:// and mmsh:// type network streams. These are commonly used to stream Windows Media Video content over the web. LibMMS itself is only for receiving MMS stream, it doesn't handle sending at all." +PKG_IS_ADDON="no" diff --git a/packages/audio/libmms/patches/10-libmms-0.5-this_keyword.diff b/packages/audio/libmms/patches/libmms-0.5-this_keyword.patch similarity index 100% rename from packages/audio/libmms/patches/10-libmms-0.5-this_keyword.diff rename to packages/audio/libmms/patches/libmms-0.5-this_keyword.patch diff --git a/packages/audio/libmms/url b/packages/audio/libmms/url deleted file mode 100644 index 07f68c64c2..0000000000 --- a/packages/audio/libmms/url +++ /dev/null @@ -1 +0,0 @@ -http://launchpad.net/libmms/trunk/0.5/+download/libmms-0.5.tar.gz From ddc89a21015e51d791a14b0115bb62405fd1d8c0 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 15:37:08 +0100 Subject: [PATCH 252/850] libmodplug: add meta file support Signed-off-by: Stephan Raue --- packages/audio/libmodplug/build | 2 -- packages/audio/libmodplug/install | 2 +- packages/audio/libmodplug/meta | 14 ++++++++++++++ packages/audio/libmodplug/url | 1 - 4 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 packages/audio/libmodplug/meta delete mode 100644 packages/audio/libmodplug/url diff --git a/packages/audio/libmodplug/build b/packages/audio/libmodplug/build index c7a6a0997d..34dac54a72 100755 --- a/packages/audio/libmodplug/build +++ b/packages/audio/libmodplug/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/audio/libmodplug/install b/packages/audio/libmodplug/install index 18a3892c82..0bd2be4525 100755 --- a/packages/audio/libmodplug/install +++ b/packages/audio/libmodplug/install @@ -3,4 +3,4 @@ . config/options $1 mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/src/.libs/*.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/src/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/audio/libmodplug/meta b/packages/audio/libmodplug/meta new file mode 100644 index 0000000000..01229a94f2 --- /dev/null +++ b/packages/audio/libmodplug/meta @@ -0,0 +1,14 @@ +PKG_NAME="libmodplug" +PKG_VERSION="0.8.8.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://modplug-xmms.sourceforge.net/" +PKG_URL="http://ignum.dl.sourceforge.net/project/modplug-xmms/libmodplug/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="audio" +PKG_SHORTDESC="libmodplug: renders mod music files as raw audio data, for playing or conversion." +PKG_LONGDESC="libmodplug renders mod music files as raw audio data, for playing or conversion. libmodplug is based on the fast and high quality mod playing code written and released to the public domain by Olivier Lapicque. mod, .s3m, .it, .xm, and a number of lesser-known formats are supported. Optional features include high-quality resampling, bass expansion, surround and reverb." +PKG_IS_ADDON="no" diff --git a/packages/audio/libmodplug/url b/packages/audio/libmodplug/url deleted file mode 100644 index 3715d68060..0000000000 --- a/packages/audio/libmodplug/url +++ /dev/null @@ -1 +0,0 @@ -http://ignum.dl.sourceforge.net/project/modplug-xmms/libmodplug/0.8.8.1/libmodplug-0.8.8.1.tar.gz \ No newline at end of file From d3beba56cb51ac63af4fd1e7d27f0b014c14710e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 15:37:30 +0100 Subject: [PATCH 253/850] wavpack: add meta file support Signed-off-by: Stephan Raue --- packages/audio/wavpack/build | 2 -- packages/audio/wavpack/install | 2 +- packages/audio/wavpack/meta | 14 ++++++++++++++ packages/audio/wavpack/url | 1 - 4 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 packages/audio/wavpack/meta delete mode 100644 packages/audio/wavpack/url diff --git a/packages/audio/wavpack/build b/packages/audio/wavpack/build index f887f8ecc2..40d9ca6eb8 100755 --- a/packages/audio/wavpack/build +++ b/packages/audio/wavpack/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/audio/wavpack/install b/packages/audio/wavpack/install index b4d582ea1f..a0f9a6ac83 100755 --- a/packages/audio/wavpack/install +++ b/packages/audio/wavpack/install @@ -3,5 +3,5 @@ . config/options $1 mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/src/.libs/*.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/src/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/audio/wavpack/meta b/packages/audio/wavpack/meta new file mode 100644 index 0000000000..73c2489e21 --- /dev/null +++ b/packages/audio/wavpack/meta @@ -0,0 +1,14 @@ +PKG_NAME="wavpack" +PKG_VERSION="4.60.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.wavpack.com" +PKG_URL="http://www.wavpack.com/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="audio" +PKG_SHORTDESC="wavpack: a completely open audio compression format" +PKG_LONGDESC="WavPack is a completely open audio compression format providing lossless, high-quality lossy, and a unique hybrid compression mode. Although the technology is loosely based on previous versions of WavPack, the new version 4 format has been designed from the ground up to offer unparalleled performance and functionality." +PKG_IS_ADDON="no" diff --git a/packages/audio/wavpack/url b/packages/audio/wavpack/url deleted file mode 100644 index 35be9ccc58..0000000000 --- a/packages/audio/wavpack/url +++ /dev/null @@ -1 +0,0 @@ -http://www.wavpack.com/wavpack-4.60.1.tar.bz2 From f8b43c20ebb7c35d9e07b33e1a9759509a40b833 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 15:37:47 +0100 Subject: [PATCH 254/850] par2cmdline: add meta file support Signed-off-by: Stephan Raue --- packages/sysutils/par2cmdline/build | 2 -- packages/sysutils/par2cmdline/install | 2 +- packages/sysutils/par2cmdline/meta | 14 ++++++++++++++ ...-gcc4.patch.diff => par2cmdline-0.4-gcc4.patch} | 0 packages/sysutils/par2cmdline/url | 2 -- 5 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 packages/sysutils/par2cmdline/meta rename packages/sysutils/par2cmdline/patches/{010_par2cmdline-0.4-gcc4.patch.diff => par2cmdline-0.4-gcc4.patch} (100%) delete mode 100644 packages/sysutils/par2cmdline/url diff --git a/packages/sysutils/par2cmdline/build b/packages/sysutils/par2cmdline/build index c7a6a0997d..34dac54a72 100755 --- a/packages/sysutils/par2cmdline/build +++ b/packages/sysutils/par2cmdline/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/sysutils/par2cmdline/install b/packages/sysutils/par2cmdline/install index 7edfc19b0a..c48d170f1e 100755 --- a/packages/sysutils/par2cmdline/install +++ b/packages/sysutils/par2cmdline/install @@ -3,4 +3,4 @@ . config/options $1 mkdir -p $INSTALL/usr/bin - cp -PR $PKG_BUILD/par2 $INSTALL/usr/bin + cp -P $PKG_BUILD/par2 $INSTALL/usr/bin diff --git a/packages/sysutils/par2cmdline/meta b/packages/sysutils/par2cmdline/meta new file mode 100644 index 0000000000..e4bf2ff15c --- /dev/null +++ b/packages/sysutils/par2cmdline/meta @@ -0,0 +1,14 @@ +PKG_NAME="par2cmdline" +PKG_VERSION="0.4" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.chuchusoft.com/par2_tbb/index.html" +PKG_URL="http://mesh.dl.sourceforge.net/project/parchive/par2cmdline/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="par2cmdline: a utility to create and repair data files using Reed Solomon coding." +PKG_LONGDESC="This is a concurrent (multithreaded) version of par2cmdline, a utility to create and repair data files using Reed Solomon coding. par2 parity archives are commonly used on Usenet postings to allow corrupted postings to be repaired instead of needing the original poster to repost the corrupted file(s)." +PKG_IS_ADDON="no" diff --git a/packages/sysutils/par2cmdline/patches/010_par2cmdline-0.4-gcc4.patch.diff b/packages/sysutils/par2cmdline/patches/par2cmdline-0.4-gcc4.patch similarity index 100% rename from packages/sysutils/par2cmdline/patches/010_par2cmdline-0.4-gcc4.patch.diff rename to packages/sysutils/par2cmdline/patches/par2cmdline-0.4-gcc4.patch diff --git a/packages/sysutils/par2cmdline/url b/packages/sysutils/par2cmdline/url deleted file mode 100644 index b7c404740d..0000000000 --- a/packages/sysutils/par2cmdline/url +++ /dev/null @@ -1,2 +0,0 @@ -http://mesh.dl.sourceforge.net/project/parchive/par2cmdline/0.4/par2cmdline-0.4.tar.gz - From 217e9aa6f95cc54aafb34bd0235fb2d5c32e1467 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 16:15:57 +0100 Subject: [PATCH 255/850] wgetpaste: add meta file support Signed-off-by: Stephan Raue --- packages/debug/wgetpaste/install | 2 -- packages/debug/wgetpaste/meta | 14 ++++++++++++++ packages/debug/wgetpaste/url | 1 - 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 packages/debug/wgetpaste/meta delete mode 100644 packages/debug/wgetpaste/url diff --git a/packages/debug/wgetpaste/install b/packages/debug/wgetpaste/install index 6bbb11745f..ddf7cbad2f 100755 --- a/packages/debug/wgetpaste/install +++ b/packages/debug/wgetpaste/install @@ -2,7 +2,5 @@ . config/options $1 -$SCRIPTS/install wget - mkdir -p $INSTALL/usr/bin cp $PKG_BUILD/wgetpaste $INSTALL/usr/bin diff --git a/packages/debug/wgetpaste/meta b/packages/debug/wgetpaste/meta new file mode 100644 index 0000000000..a6ed2779b3 --- /dev/null +++ b/packages/debug/wgetpaste/meta @@ -0,0 +1,14 @@ +PKG_NAME="wgetpaste" +PKG_VERSION="2.18" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://wgetpaste.zlin.dk" +PKG_URL="http://wgetpaste.zlin.dk/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="wget" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="debug" +PKG_SHORTDESC="wgetpaste: Upload Directly to Pastebin from the Linux Shell" +PKG_LONGDESC="Wgetpaste is a tool for Uploading Directly to Pastebin from the Linux Shell" +PKG_IS_ADDON="no" diff --git a/packages/debug/wgetpaste/url b/packages/debug/wgetpaste/url deleted file mode 100644 index 0b800fcd4b..0000000000 --- a/packages/debug/wgetpaste/url +++ /dev/null @@ -1 +0,0 @@ -http://wgetpaste.zlin.dk/wgetpaste-2.18.tar.bz2 \ No newline at end of file From 6de36f49a418edd384601ff57e8b503c99746bb0 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 16:16:24 +0100 Subject: [PATCH 256/850] tvdump: add meta file support Signed-off-by: Stephan Raue --- packages/debug/tvdump/build | 3 --- packages/debug/tvdump/{ => doc}/url.txt | 0 packages/debug/tvdump/install | 3 --- packages/debug/tvdump/meta | 14 ++++++++++++++ packages/debug/tvdump/url | 1 - 5 files changed, 14 insertions(+), 7 deletions(-) rename packages/debug/tvdump/{ => doc}/url.txt (100%) create mode 100644 packages/debug/tvdump/meta delete mode 100644 packages/debug/tvdump/url diff --git a/packages/debug/tvdump/build b/packages/debug/tvdump/build index e5bd0e960f..cb38d9f397 100755 --- a/packages/debug/tvdump/build +++ b/packages/debug/tvdump/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build libpciaccess - cd $PKG_BUILD $CC -Wall -O0 -g -o tvdump tvdump.c -lpciaccess \ No newline at end of file diff --git a/packages/debug/tvdump/url.txt b/packages/debug/tvdump/doc/url.txt similarity index 100% rename from packages/debug/tvdump/url.txt rename to packages/debug/tvdump/doc/url.txt diff --git a/packages/debug/tvdump/install b/packages/debug/tvdump/install index 4bf2c499a9..5923ab50f2 100755 --- a/packages/debug/tvdump/install +++ b/packages/debug/tvdump/install @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/install Python -$SCRIPTS/install libpciaccess - mkdir -p $INSTALL/usr/bin cp $PKG_BUILD/tvdump $INSTALL/usr/bin cp $PKG_BUILD/tvdump2code.py $INSTALL/usr/bin/tvdump2code diff --git a/packages/debug/tvdump/meta b/packages/debug/tvdump/meta new file mode 100644 index 0000000000..7364c829b2 --- /dev/null +++ b/packages/debug/tvdump/meta @@ -0,0 +1,14 @@ +PKG_NAME="tvdump" +PKG_VERSION="20101025" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://cgit.freedesktop.org/~currojerez/tvdump/" +PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="Python libpciaccess" +PKG_BUILD_DEPENDS="toolchain libpciaccess" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="tvdump: a tool for debugging some informations of video bios" +PKG_LONGDESC="tvdump is a tool for debugging some informations of video bios" +PKG_IS_ADDON="no" diff --git a/packages/debug/tvdump/url b/packages/debug/tvdump/url deleted file mode 100644 index 54f1f85e5b..0000000000 --- a/packages/debug/tvdump/url +++ /dev/null @@ -1 +0,0 @@ -http://sources.openelec.tv/svn/tvdump-20101025.tar.bz2 \ No newline at end of file From 7b0a11b32ef9787a929a5198f374a255d2b0374c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 16:16:34 +0100 Subject: [PATCH 257/850] evtest: add meta file support Signed-off-by: Stephan Raue --- packages/debug/evtest/build | 3 --- packages/debug/evtest/install | 2 -- packages/debug/evtest/meta | 14 ++++++++++++++ packages/debug/evtest/url | 1 - 4 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 packages/debug/evtest/meta delete mode 100644 packages/debug/evtest/url diff --git a/packages/debug/evtest/build b/packages/debug/evtest/build index e78dfee985..fab2c07fa2 100755 --- a/packages/debug/evtest/build +++ b/packages/debug/evtest/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build libxml2 - cd $PKG_BUILD $AUTORECONF diff --git a/packages/debug/evtest/install b/packages/debug/evtest/install index a5d2709815..4912566e50 100755 --- a/packages/debug/evtest/install +++ b/packages/debug/evtest/install @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/install libxml2 - mkdir -p $INSTALL/usr/bin cp $PKG_BUILD/evtest $INSTALL/usr/bin cp $PKG_BUILD/evtest-capture $INSTALL/usr/bin diff --git a/packages/debug/evtest/meta b/packages/debug/evtest/meta new file mode 100644 index 0000000000..12d8e1c983 --- /dev/null +++ b/packages/debug/evtest/meta @@ -0,0 +1,14 @@ +PKG_NAME="evtest" +PKG_VERSION="1.25" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://cgit.freedesktop.org/~whot/evtest/" +PKG_URL="http://cgit.freedesktop.org/~whot/evtest/snapshot/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="libxml2" +PKG_BUILD_DEPENDS="toolchain libxml2" +PKG_PRIORITY="optional" +PKG_SECTION="debug" +PKG_SHORTDESC="evtest: Simple tool for input event debugging." +PKG_LONGDESC="evtest is a simple tool for input event debugging." +PKG_IS_ADDON="no" diff --git a/packages/debug/evtest/url b/packages/debug/evtest/url deleted file mode 100644 index 0feffee93b..0000000000 --- a/packages/debug/evtest/url +++ /dev/null @@ -1 +0,0 @@ -http://cgit.freedesktop.org/~whot/evtest/snapshot/evtest-1.25.tar.bz2 \ No newline at end of file From f58b4a90fcf9626c8cc16f067043758b39e0e4cf Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 16:16:47 +0100 Subject: [PATCH 258/850] transmission: add meta file support Signed-off-by: Stephan Raue --- packages/network/transmission/build | 6 ------ packages/network/transmission/install | 6 ------ packages/network/transmission/meta | 14 ++++++++++++++ packages/network/transmission/url | 1 - 4 files changed, 14 insertions(+), 13 deletions(-) create mode 100644 packages/network/transmission/meta delete mode 100644 packages/network/transmission/url diff --git a/packages/network/transmission/build b/packages/network/transmission/build index d89d58b400..ad93ae0cbc 100755 --- a/packages/network/transmission/build +++ b/packages/network/transmission/build @@ -2,12 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build zlib -$SCRIPTS/build openssl -$SCRIPTS/build curl -$SCRIPTS/build libevent - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ diff --git a/packages/network/transmission/install b/packages/network/transmission/install index 70938c30d3..17df83c02f 100755 --- a/packages/network/transmission/install +++ b/packages/network/transmission/install @@ -2,12 +2,6 @@ . config/options $1 -$SCRIPTS/install zlib -$SCRIPTS/install openssl -$SCRIPTS/install curl -$SCRIPTS/install libevent -$SCRIPTS/install connman - mkdir -p $INSTALL/usr/sbin cp $PKG_BUILD/daemon/transmission-daemon $INSTALL/usr/sbin diff --git a/packages/network/transmission/meta b/packages/network/transmission/meta new file mode 100644 index 0000000000..2c1fe9b06e --- /dev/null +++ b/packages/network/transmission/meta @@ -0,0 +1,14 @@ +PKG_NAME="transmission" +PKG_VERSION="2.11" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.transmissionbt.com/" +PKG_URL="http://download.m0k.org/transmission/files/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="zlib openssl curl libevent connman" +PKG_BUILD_DEPENDS="toolchain zlib openssl curl libevent" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="transmission: a fast, easy and free BitTorrent client" +PKG_LONGDESC="transmission is a fast, easy and free BitTorrent client" +PKG_IS_ADDON="no" diff --git a/packages/network/transmission/url b/packages/network/transmission/url deleted file mode 100644 index 823c19cd89..0000000000 --- a/packages/network/transmission/url +++ /dev/null @@ -1 +0,0 @@ -http://download.m0k.org/transmission/files/transmission-2.11.tar.bz2 \ No newline at end of file From fe245e908d556962667728f3630a553c7c3cc8c7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 16:53:01 +0100 Subject: [PATCH 259/850] enca: add meta file support Signed-off-by: Stephan Raue --- packages/other/enca/build | 2 -- packages/other/enca/install | 2 +- packages/other/enca/meta | 14 ++++++++++++++ ...sscompile.diff => enca-1.13-crosscompile.patch} | 0 packages/other/enca/url | 1 - 5 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 packages/other/enca/meta rename packages/other/enca/patches/{10-enca-crosscompile.diff => enca-1.13-crosscompile.patch} (100%) delete mode 100644 packages/other/enca/url diff --git a/packages/other/enca/build b/packages/other/enca/build index 79b1bf9463..574d74b712 100755 --- a/packages/other/enca/build +++ b/packages/other/enca/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ac_cv_file__dev_random=yes \ ac_cv_file__dev_urandom=no \ diff --git a/packages/other/enca/install b/packages/other/enca/install index 5924367d57..e984b7d01d 100755 --- a/packages/other/enca/install +++ b/packages/other/enca/install @@ -3,5 +3,5 @@ . config/options $1 mkdir -p $INSTALL/usr/lib - cp -P $PKG_BUILD/lib/.libs/*.so* $INSTALL/usr/lib + cp $PKG_BUILD/lib/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/other/enca/meta b/packages/other/enca/meta new file mode 100644 index 0000000000..e4d41d5bfe --- /dev/null +++ b/packages/other/enca/meta @@ -0,0 +1,14 @@ +PKG_NAME="enca" +PKG_VERSION="1.13" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://freshmeat.net/projects/enca/" +PKG_URL="http://dl.cihar.com/enca/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="other" +PKG_SHORTDESC="enca: detects the encoding of text files, on the basis of knowledge of their language." +PKG_LONGDESC="Enca detects the encoding of text files, on the basis of knowledge of their language. It can also convert them to other encodings, allowing you to recode files without knowing their current encoding. It supports most of Central and East European languages, and a few Unicode variants, independently on language." +PKG_IS_ADDON="no" diff --git a/packages/other/enca/patches/10-enca-crosscompile.diff b/packages/other/enca/patches/enca-1.13-crosscompile.patch similarity index 100% rename from packages/other/enca/patches/10-enca-crosscompile.diff rename to packages/other/enca/patches/enca-1.13-crosscompile.patch diff --git a/packages/other/enca/url b/packages/other/enca/url deleted file mode 100644 index dac8a76c82..0000000000 --- a/packages/other/enca/url +++ /dev/null @@ -1 +0,0 @@ -http://dl.cihar.com/enca/enca-1.13.tar.bz2 \ No newline at end of file From 20d6210e637543cde7df73ea9b92616714187942 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 16:53:18 +0100 Subject: [PATCH 260/850] jpeg: add meta file support Signed-off-by: Stephan Raue --- packages/graphics/jpeg/build | 2 -- packages/graphics/jpeg/install | 2 +- packages/graphics/jpeg/meta | 14 ++++++++++++++ packages/graphics/jpeg/url | 1 - 4 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 packages/graphics/jpeg/meta delete mode 100644 packages/graphics/jpeg/url diff --git a/packages/graphics/jpeg/build b/packages/graphics/jpeg/build index f3c7bf539a..c3255d3a23 100755 --- a/packages/graphics/jpeg/build +++ b/packages/graphics/jpeg/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/graphics/jpeg/install b/packages/graphics/jpeg/install index 98caa5e53d..165665d2fd 100755 --- a/packages/graphics/jpeg/install +++ b/packages/graphics/jpeg/install @@ -3,4 +3,4 @@ . config/options $1 mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/.libs/*.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/graphics/jpeg/meta b/packages/graphics/jpeg/meta new file mode 100644 index 0000000000..c5630196e3 --- /dev/null +++ b/packages/graphics/jpeg/meta @@ -0,0 +1,14 @@ +PKG_NAME="jpeg" +PKG_VERSION="8b" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.ijg.org/" +PKG_URL="http://www.ijg.org/files/${PKG_NAME}src.v${PKG_VERSION}.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="graphics" +PKG_SHORTDESC="libjpeg: The Independent JPEG Group's JPEG software" +PKG_LONGDESC="This distribution contains the public release of the Independent JPEG Group's free JPEG software." +PKG_IS_ADDON="no" diff --git a/packages/graphics/jpeg/url b/packages/graphics/jpeg/url deleted file mode 100644 index 907c815d67..0000000000 --- a/packages/graphics/jpeg/url +++ /dev/null @@ -1 +0,0 @@ -http://www.ijg.org/files/jpegsrc.v8b.tar.gz \ No newline at end of file From 47949e8883bbd0c1a9907b1061d4fefc5857586b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 16:53:31 +0100 Subject: [PATCH 261/850] libjpeg-turbo: add meta file support Signed-off-by: Stephan Raue --- packages/graphics/libjpeg-turbo/build | 3 --- packages/graphics/libjpeg-turbo/meta | 14 ++++++++++++++ packages/graphics/libjpeg-turbo/url | 1 - 3 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 packages/graphics/libjpeg-turbo/meta delete mode 100644 packages/graphics/libjpeg-turbo/url diff --git a/packages/graphics/libjpeg-turbo/build b/packages/graphics/libjpeg-turbo/build index 437acfad54..c3255d3a23 100755 --- a/packages/graphics/libjpeg-turbo/build +++ b/packages/graphics/libjpeg-turbo/build @@ -2,10 +2,7 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD - ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ diff --git a/packages/graphics/libjpeg-turbo/meta b/packages/graphics/libjpeg-turbo/meta new file mode 100644 index 0000000000..5e48e3e46d --- /dev/null +++ b/packages/graphics/libjpeg-turbo/meta @@ -0,0 +1,14 @@ +PKG_NAME="libjpeg-turbo" +PKG_VERSION="1.0.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://libjpeg-turbo.virtualgl.org/" +PKG_URL="http://downloads.sourceforge.net/project/libjpeg-turbo/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="graphics" +PKG_SHORTDESC="libjpeg-turbo: a high-speed version of libjpeg for x86 and x86-64 processors which uses SIMD instructions (MMX, SSE2, etc.) to accelerate baseline JPEG compression and decompression." +PKG_LONGDESC="libjpeg-turbo is a high-speed version of libjpeg for x86 and x86-64 processors which uses SIMD instructions (MMX, SSE2, etc.) to accelerate baseline JPEG compression and decompression. libjpeg-turbo is generally 2-4x as fast as the unmodified version of libjpeg, all else being equal." +PKG_IS_ADDON="no" diff --git a/packages/graphics/libjpeg-turbo/url b/packages/graphics/libjpeg-turbo/url deleted file mode 100644 index 25914e2c89..0000000000 --- a/packages/graphics/libjpeg-turbo/url +++ /dev/null @@ -1 +0,0 @@ -http://downloads.sourceforge.net/project/libjpeg-turbo/1.0.1/libjpeg-turbo-1.0.1.tar.gz \ No newline at end of file From f5508275d738a8aaa804414d43f58c1871020fe9 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 16:53:50 +0100 Subject: [PATCH 262/850] debug: add meta file support Signed-off-by: Stephan Raue --- packages/debug/install | 13 ------------- packages/debug/meta | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 13 deletions(-) delete mode 100755 packages/debug/install create mode 100644 packages/debug/meta diff --git a/packages/debug/install b/packages/debug/install deleted file mode 100755 index 3c692be970..0000000000 --- a/packages/debug/install +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -. config/options $1 - -$SCRIPTS/install strace -$SCRIPTS/install gdb -$SCRIPTS/install mesa-demos -$SCRIPTS/install htop # on user request -$SCRIPTS/install nano # on user request -$SCRIPTS/install wgetpaste -$SCRIPTS/install evtest -$SCRIPTS/install tvdump - diff --git a/packages/debug/meta b/packages/debug/meta new file mode 100644 index 0000000000..7a239595c4 --- /dev/null +++ b/packages/debug/meta @@ -0,0 +1,17 @@ +PKG_NAME="debug" +PKG_VERSION="" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.openelec.tv" +PKG_URL="" +PKG_DEPENDS="strace gdb mesa-demos htop nano wgetpaste evtest tvdump" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="debug" +PKG_SHORTDESC="debug: Metapackage for installing debugging tools" +PKG_LONGDESC="debug is a Metapackage for installing debugging tools" +PKG_IS_ADDON="no" + + + From 90426d915e14afc7ad49ea89dd93ec225ec739c6 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 17:08:40 +0100 Subject: [PATCH 263/850] expat: add meta file support Signed-off-by: Stephan Raue --- packages/textproc/expat/build | 2 -- packages/textproc/expat/install | 2 +- packages/textproc/expat/meta | 14 ++++++++++++++ packages/textproc/expat/url | 1 - 4 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 packages/textproc/expat/meta delete mode 100644 packages/textproc/expat/url diff --git a/packages/textproc/expat/build b/packages/textproc/expat/build index 3d260f0444..a58bbb0a50 100755 --- a/packages/textproc/expat/build +++ b/packages/textproc/expat/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD mkdir -p .build-target && cd .build-target diff --git a/packages/textproc/expat/install b/packages/textproc/expat/install index 11602b5522..baab1c9a7f 100755 --- a/packages/textproc/expat/install +++ b/packages/textproc/expat/install @@ -3,4 +3,4 @@ . config/options $1 mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/.build-target/.libs/libexpat.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/.build-target/.libs/libexpat.so* $INSTALL/usr/lib diff --git a/packages/textproc/expat/meta b/packages/textproc/expat/meta new file mode 100644 index 0000000000..0ff604b8d6 --- /dev/null +++ b/packages/textproc/expat/meta @@ -0,0 +1,14 @@ +PKG_NAME="expat" +PKG_VERSION="2.0.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://expat.sourceforge.net/" +PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="textproc" +PKG_SHORTDESC="expat: XML parser library" +PKG_LONGDESC="Expat is an XML parser library written in C. It is a stream-oriented parser in which an application registers handlers for things the parser might find in the XML document (like start tags). An introductory article on using Expat is available on xml.com." +PKG_IS_ADDON="no" diff --git a/packages/textproc/expat/url b/packages/textproc/expat/url deleted file mode 100644 index a3cfcd6cd4..0000000000 --- a/packages/textproc/expat/url +++ /dev/null @@ -1 +0,0 @@ -http://sources.openelec.tv/svn/expat-2.0.1.tar.bz2 From b757f71ac56d75f9e8c0bbb5cc17883be43131a9 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 17:08:47 +0100 Subject: [PATCH 264/850] expat-host: add meta file support Signed-off-by: Stephan Raue --- packages/textproc/expat-host/build | 1 - packages/textproc/expat-host/meta | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/textproc/expat-host/meta diff --git a/packages/textproc/expat-host/build b/packages/textproc/expat-host/build index a7214af002..d152a0018c 100755 --- a/packages/textproc/expat-host/build +++ b/packages/textproc/expat-host/build @@ -2,7 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain $SCRIPTS/unpack expat setup_toolchain host diff --git a/packages/textproc/expat-host/meta b/packages/textproc/expat-host/meta new file mode 100644 index 0000000000..5460c1c7dd --- /dev/null +++ b/packages/textproc/expat-host/meta @@ -0,0 +1,14 @@ +PKG_NAME="expat-host" +PKG_VERSION="" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://expat.sourceforge.net/" +PKG_URL="" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="textproc" +PKG_SHORTDESC="expat: XML parser library" +PKG_LONGDESC="Expat is an XML parser library written in C. It is a stream-oriented parser in which an application registers handlers for things the parser might find in the XML document (like start tags). An introductory article on using Expat is available on xml.com." +PKG_IS_ADDON="no" From 63e7b796df22455bb9302e5f372a827ed2ccabc3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 17:09:01 +0100 Subject: [PATCH 265/850] libxml2: add meta file support Signed-off-by: Stephan Raue --- packages/textproc/libxml2/build | 2 -- packages/textproc/libxml2/meta | 14 ++++++++++++++ packages/textproc/libxml2/url | 1 - 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 packages/textproc/libxml2/meta delete mode 100644 packages/textproc/libxml2/url diff --git a/packages/textproc/libxml2/build b/packages/textproc/libxml2/build index 1d1a537aea..58933585b3 100755 --- a/packages/textproc/libxml2/build +++ b/packages/textproc/libxml2/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD mkdir -p .build-target diff --git a/packages/textproc/libxml2/meta b/packages/textproc/libxml2/meta new file mode 100644 index 0000000000..14cc6eb076 --- /dev/null +++ b/packages/textproc/libxml2/meta @@ -0,0 +1,14 @@ +PKG_NAME="libxml2" +PKG_VERSION="2.7.8" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="MIT" +PKG_SITE="http://xmlsoft.org" +PKG_URL="ftp://xmlsoft.org/libxml2/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="textproc" +PKG_SHORTDESC="libxml: XML parser library for Gnome" +PKG_LONGDESC="The libxml package contains an XML library, which allows you to manipulate XML files. XML (eXtensible Markup Language) is a data format for structured document interchange via the Web." +PKG_IS_ADDON="no" diff --git a/packages/textproc/libxml2/url b/packages/textproc/libxml2/url deleted file mode 100644 index 015a7ebf3f..0000000000 --- a/packages/textproc/libxml2/url +++ /dev/null @@ -1 +0,0 @@ -ftp://xmlsoft.org/libxml2/libxml2-2.7.8.tar.gz \ No newline at end of file From 2b3dd85a44b14ab117bcdab2ee5ef3d605555e93 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 17:09:09 +0100 Subject: [PATCH 266/850] libxml2-host: add meta file support Signed-off-by: Stephan Raue --- packages/textproc/libxml2-host/build | 2 -- packages/textproc/libxml2-host/meta | 14 ++++++++++++++ packages/textproc/libxml2-host/url | 1 - 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 packages/textproc/libxml2-host/meta delete mode 100644 packages/textproc/libxml2-host/url diff --git a/packages/textproc/libxml2-host/build b/packages/textproc/libxml2-host/build index 3c48ef62b8..3dc60cc313 100755 --- a/packages/textproc/libxml2-host/build +++ b/packages/textproc/libxml2-host/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build Python $SCRIPTS/unpack libxml2 setup_toolchain host diff --git a/packages/textproc/libxml2-host/meta b/packages/textproc/libxml2-host/meta new file mode 100644 index 0000000000..5c00a09442 --- /dev/null +++ b/packages/textproc/libxml2-host/meta @@ -0,0 +1,14 @@ +PKG_NAME="libxml2-host" +PKG_VERSION="" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="MIT" +PKG_SITE="http://xmlsoft.org" +PKG_URL="" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain Python" +PKG_PRIORITY="optional" +PKG_SECTION="textproc" +PKG_SHORTDESC="libxml: XML parser library for Gnome" +PKG_LONGDESC="The libxml package contains an XML library, which allows you to manipulate XML files. XML (eXtensible Markup Language) is a data format for structured document interchange via the Web." +PKG_IS_ADDON="no" diff --git a/packages/textproc/libxml2-host/url b/packages/textproc/libxml2-host/url deleted file mode 100644 index f4ddb0d914..0000000000 --- a/packages/textproc/libxml2-host/url +++ /dev/null @@ -1 +0,0 @@ -ftp://xmlsoft.org/libxml2/libxml2-2.7.7.tar.gz \ No newline at end of file From c6c174f83104968fc1cc161ce33c3b5c309fd8fa Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 17:09:28 +0100 Subject: [PATCH 267/850] xerces-c: add meta file support Signed-off-by: Stephan Raue --- packages/textproc/xerces-c/build | 3 --- packages/textproc/xerces-c/install | 4 +--- packages/textproc/xerces-c/meta | 14 ++++++++++++++ packages/textproc/xerces-c/url | 1 - 4 files changed, 15 insertions(+), 7 deletions(-) create mode 100644 packages/textproc/xerces-c/meta delete mode 100644 packages/textproc/xerces-c/url diff --git a/packages/textproc/xerces-c/build b/packages/textproc/xerces-c/build index 82c9ce5a24..0232603e9d 100755 --- a/packages/textproc/xerces-c/build +++ b/packages/textproc/xerces-c/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build curl - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/textproc/xerces-c/install b/packages/textproc/xerces-c/install index c93415f587..6508276a1e 100755 --- a/packages/textproc/xerces-c/install +++ b/packages/textproc/xerces-c/install @@ -2,7 +2,5 @@ . config/options $1 -$SCRIPTS/install curl - mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/src/.libs/*.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/src/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/textproc/xerces-c/meta b/packages/textproc/xerces-c/meta new file mode 100644 index 0000000000..8733b5c1e9 --- /dev/null +++ b/packages/textproc/xerces-c/meta @@ -0,0 +1,14 @@ +PKG_NAME="xerces-c" +PKG_VERSION="3.1.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="APL" +PKG_SITE="http://xml.apache.org/xerces-c/" +PKG_URL="http://mirror.switch.ch/mirror/apache/dist/xerces/c/3/sources/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="curl" +PKG_BUILD_DEPENDS="toolchain curl" +PKG_PRIORITY="optional" +PKG_SECTION="textproc" +PKG_SHORTDESC="xerces-c: A C++ XML parser" +PKG_LONGDESC="Xerces C++ is a validating XML parser written in a portable subset of C++. It makes it easy to give your application the ability to read and write XML data. A shared library is provided for parsing, generating, manipulating, and validating XML documents. It is faithful to the XML 1. 0 recommendation and associated standards ( DOM 1. 0, DOM 2. 0. SAX 1. 0, SAX 2. 0, Namespaces). It also provides an implementation of a subset of the Schema." +PKG_IS_ADDON="no" diff --git a/packages/textproc/xerces-c/url b/packages/textproc/xerces-c/url deleted file mode 100644 index b8cf167d8d..0000000000 --- a/packages/textproc/xerces-c/url +++ /dev/null @@ -1 +0,0 @@ -http://mirror.switch.ch/mirror/apache/dist/xerces/c/3/sources/xerces-c-3.1.1.tar.gz \ No newline at end of file From 14a6198e6d564dbe30638fa7d56df1db8927160d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 18:57:50 +0100 Subject: [PATCH 268/850] remote: fix meta file Signed-off-by: Stephan Raue --- packages/sysutils/remote/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/sysutils/remote/meta b/packages/sysutils/remote/meta index 4487ef5e46..31c2e418fb 100644 --- a/packages/sysutils/remote/meta +++ b/packages/sysutils/remote/meta @@ -13,4 +13,6 @@ PKG_SHORTDESC="remote: Meta package for installing various tools needed for remo PKG_LONGDESC="Meta package for installing various tools needed for remote support" PKG_IS_ADDON="no" -[ "$ATVCLIENT_SUPPORT" = "yes" ] && PKG_DEPENDS="$PKG_DEPENDS atvclient" +if [ "$ATVCLIENT_SUPPORT" = "yes" ]; then + PKG_DEPENDS="$PKG_DEPENDS atvclient" +fi From fff8324c32725950bbfeecacec48f5452493aa0e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 20:41:54 +0100 Subject: [PATCH 269/850] SABnzbd: add meta file support, update to SABnzbd-0.5.5 Signed-off-by: Stephan Raue --- packages/plugins/SABnzbd/install | 12 ++---------- packages/plugins/SABnzbd/meta | 16 ++++++++++++++++ packages/plugins/SABnzbd/url | 1 - 3 files changed, 18 insertions(+), 11 deletions(-) create mode 100644 packages/plugins/SABnzbd/meta delete mode 100644 packages/plugins/SABnzbd/url diff --git a/packages/plugins/SABnzbd/install b/packages/plugins/SABnzbd/install index 31e5722daf..9de4ba0c8a 100755 --- a/packages/plugins/SABnzbd/install +++ b/packages/plugins/SABnzbd/install @@ -2,16 +2,8 @@ . config/options $1 -$SCRIPTS/install Cheetah -$SCRIPTS/install yenc -$SCRIPTS/install pyOpenSSL -$SCRIPTS/install feedparser -$SCRIPTS/install unrar -$SCRIPTS/install unzip -$SCRIPTS/install par2cmdline - mkdir -p $INSTALL/usr/share/$1 - cp -P $BUILD/$1*/* $INSTALL/usr/share/$1 + cp -PR $BUILD/$1*/* $INSTALL/usr/share/$1 mkdir -p $INSTALL/etc - cp -P $PKG_DIR/config/*.conf $INSTALL/etc + cp $PKG_DIR/config/*.conf $INSTALL/etc diff --git a/packages/plugins/SABnzbd/meta b/packages/plugins/SABnzbd/meta new file mode 100644 index 0000000000..c0c1ae7904 --- /dev/null +++ b/packages/plugins/SABnzbd/meta @@ -0,0 +1,16 @@ +PKG_NAME="SABnzbd" +PKG_VERSION="0.5.5" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://sabnzbd.org/" +PKG_URL="http://switch.dl.sourceforge.net/sourceforge/sabnzbdplus/${PKG_NAME}-${PKG_VERSION}-src.tar.gz" +PKG_DEPENDS="Cheetah yenc pyOpenSSL feedparser unrar unzip par2cmdline" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="plugins" +PKG_SHORTDESC="SABnzbd: makes Usenet as simple and streamlined as possible by automating everything we can." +PKG_LONGDESC="SABnzbd makes Usenet as simple and streamlined as possible by automating everything we can. All you have to do is add an .nzb. SABnzbd takes over from there, where it will be automatically downloaded, verified, repaired, extracted and filed away with zero human interaction." +PKG_IS_ADDON="no" + + diff --git a/packages/plugins/SABnzbd/url b/packages/plugins/SABnzbd/url deleted file mode 100644 index 89e95c84ef..0000000000 --- a/packages/plugins/SABnzbd/url +++ /dev/null @@ -1 +0,0 @@ -http://switch.dl.sourceforge.net/sourceforge/sabnzbdplus/SABnzbd-0.5.4-src.tar.gz From b464a041d6aa4bcc2d6bfe4b8e510de147f4ffc1 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 20:42:16 +0100 Subject: [PATCH 270/850] plugins: add meta file support Signed-off-by: Stephan Raue --- packages/plugins/install | 7 ------- packages/plugins/meta | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 7 deletions(-) delete mode 100755 packages/plugins/install create mode 100644 packages/plugins/meta diff --git a/packages/plugins/install b/packages/plugins/install deleted file mode 100755 index 0af5900c71..0000000000 --- a/packages/plugins/install +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -. config/options $1 - -for plugin in $XBMC_PLUGINS; do - $SCRIPTS/install $plugin -done diff --git a/packages/plugins/meta b/packages/plugins/meta new file mode 100644 index 0000000000..131409744c --- /dev/null +++ b/packages/plugins/meta @@ -0,0 +1,14 @@ +PKG_NAME="plugins" +PKG_VERSION="" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.openelec.tv" +PKG_URL="" +PKG_DEPENDS="$XBMC_PLUGINS" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="plugins" +PKG_SHORTDESC="plugins: Metafile to install plugins" +PKG_LONGDESC="Metafile to install plugins" +PKG_IS_ADDON="no" From b80bb2dca11fa251b36551b13f28702be13889f2 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 22:43:27 +0100 Subject: [PATCH 271/850] linux-firmware: add metafile support Signed-off-by: Stephan Raue --- packages/linux-firmware/install | 19 ------------------- packages/linux-firmware/meta | 28 ++++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 19 deletions(-) delete mode 100755 packages/linux-firmware/install create mode 100644 packages/linux-firmware/meta diff --git a/packages/linux-firmware/install b/packages/linux-firmware/install deleted file mode 100755 index 65fb892014..0000000000 --- a/packages/linux-firmware/install +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh - -. config/options $1 - -for firmware in "$FIRMWARE"; do - - [ "$firmware" = ipw2100 ] && $SCRIPTS/install ipw2100-fw - [ "$firmware" = ipw2200 ] && $SCRIPTS/install ipw2200-fw - [ "$firmware" = iwl1000 ] && $SCRIPTS/install iwlwifi-1000-ucode - [ "$firmware" = iwl3945 ] && $SCRIPTS/install iwlwifi-3945-ucode - [ "$firmware" = iwl4965 ] && $SCRIPTS/install iwlwifi-4965-ucode - [ "$firmware" = iwl5000 ] && $SCRIPTS/install iwlwifi-5000-ucode - [ "$firmware" = iwl5150 ] && $SCRIPTS/install iwlwifi-5150-ucode - [ "$firmware" = iwl6000 ] && $SCRIPTS/install iwlwifi-6000-ucode - [ "$firmware" = iwl6050 ] && $SCRIPTS/install iwlwifi-6050-ucode - -done - -exit 0 diff --git a/packages/linux-firmware/meta b/packages/linux-firmware/meta new file mode 100644 index 0000000000..4bf93107e9 --- /dev/null +++ b/packages/linux-firmware/meta @@ -0,0 +1,28 @@ +PKG_NAME="linux-firmware" +PKG_VERSION="" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.openelec.tv" +PKG_URL="" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="linux-firmware" +PKG_SHORTDESC="linux-firmware: Meta package to install firmware drivers" +PKG_LONGDESC="linux-firmware is a Meta package to install firmware drivers" +PKG_IS_ADDON="no" + +for firmware in $FIRMWARE; do + + [ "$firmware" = ipw2100 ] && PKG_DEPENDS="$PKG_DEPENDS ipw2100-fw" + [ "$firmware" = ipw2200 ] && PKG_DEPENDS="$PKG_DEPENDS ipw2200-fw" + [ "$firmware" = iwl1000 ] && PKG_DEPENDS="$PKG_DEPENDS iwlwifi-1000-ucode" + [ "$firmware" = iwl3945 ] && PKG_DEPENDS="$PKG_DEPENDS iwlwifi-3945-ucode" + [ "$firmware" = iwl4965 ] && PKG_DEPENDS="$PKG_DEPENDS iwlwifi-4965-ucode" + [ "$firmware" = iwl5000 ] && PKG_DEPENDS="$PKG_DEPENDS iwlwifi-5000-ucode" + [ "$firmware" = iwl5150 ] && PKG_DEPENDS="$PKG_DEPENDS iwlwifi-5150-ucode" + [ "$firmware" = iwl6000 ] && PKG_DEPENDS="$PKG_DEPENDS iwlwifi-6000-ucode" + [ "$firmware" = iwl6050 ] && PKG_DEPENDS="$PKG_DEPENDS iwlwifi-6050-ucode" + +done From aac1b92aa4b6a901db3b3754db5c79dd878961fd Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 22:43:50 +0100 Subject: [PATCH 272/850] iwlwifi-6050-ucode: add metafile support Signed-off-by: Stephan Raue --- packages/linux-firmware/iwlwifi-6050-ucode/meta | 14 ++++++++++++++ packages/linux-firmware/iwlwifi-6050-ucode/url | 1 - 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/linux-firmware/iwlwifi-6050-ucode/meta delete mode 100644 packages/linux-firmware/iwlwifi-6050-ucode/url diff --git a/packages/linux-firmware/iwlwifi-6050-ucode/meta b/packages/linux-firmware/iwlwifi-6050-ucode/meta new file mode 100644 index 0000000000..d7bbd3fb68 --- /dev/null +++ b/packages/linux-firmware/iwlwifi-6050-ucode/meta @@ -0,0 +1,14 @@ +PKG_NAME="iwlwifi-6050-ucode" +PKG_VERSION="9.201.4.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="Free-to-use" +PKG_SITE="http://www.intellinuxwireless.org" +PKG_URL="http://www.intellinuxwireless.org/iwlwifi/downloads/$PKG_NAME-$PKG_VERSION.tgz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="linux-firmware" +PKG_SHORTDESC="iwlwifi-6050-ucode: Intel PRO/Wireless 6050 Driver for Linux" +PKG_LONGDESC="This project was created by Intel to enable support for the Intel PRO/Wireless 6050 Network Connection mini PCI adapter. This project (iwl6050) is intended to be a community effort as much as is possible given some working constraints (mainly, no HW documentation is available)." +PKG_IS_ADDON="no" diff --git a/packages/linux-firmware/iwlwifi-6050-ucode/url b/packages/linux-firmware/iwlwifi-6050-ucode/url deleted file mode 100644 index a9899d6acb..0000000000 --- a/packages/linux-firmware/iwlwifi-6050-ucode/url +++ /dev/null @@ -1 +0,0 @@ -http://intellinuxwireless.org/iwlwifi/downloads/iwlwifi-6050-ucode-9.201.4.1.tgz \ No newline at end of file From cdaad6cde0f56683a0181cddea097b8f7041e025 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 22:43:59 +0100 Subject: [PATCH 273/850] iwlwifi-6000-ucode: add metafile support Signed-off-by: Stephan Raue --- packages/linux-firmware/iwlwifi-6000-ucode/meta | 14 ++++++++++++++ packages/linux-firmware/iwlwifi-6000-ucode/url | 1 - 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/linux-firmware/iwlwifi-6000-ucode/meta delete mode 100644 packages/linux-firmware/iwlwifi-6000-ucode/url diff --git a/packages/linux-firmware/iwlwifi-6000-ucode/meta b/packages/linux-firmware/iwlwifi-6000-ucode/meta new file mode 100644 index 0000000000..99f6f3a0d0 --- /dev/null +++ b/packages/linux-firmware/iwlwifi-6000-ucode/meta @@ -0,0 +1,14 @@ +PKG_NAME="iwlwifi-6000-ucode" +PKG_VERSION="9.193.4.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="Free-to-use" +PKG_SITE="http://www.intellinuxwireless.org" +PKG_URL="http://www.intellinuxwireless.org/iwlwifi/downloads/$PKG_NAME-$PKG_VERSION.tgz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="linux-firmware" +PKG_SHORTDESC="iwlwifi-6000-ucode: Intel PRO/Wireless 6000 Driver for Linux" +PKG_LONGDESC="This project was created by Intel to enable support for the Intel PRO/Wireless 6000 Network Connection mini PCI adapter. This project (iwl6000) is intended to be a community effort as much as is possible given some working constraints (mainly, no HW documentation is available)." +PKG_IS_ADDON="no" diff --git a/packages/linux-firmware/iwlwifi-6000-ucode/url b/packages/linux-firmware/iwlwifi-6000-ucode/url deleted file mode 100644 index 793540c966..0000000000 --- a/packages/linux-firmware/iwlwifi-6000-ucode/url +++ /dev/null @@ -1 +0,0 @@ -http://www.intellinuxwireless.org/iwlwifi/downloads/iwlwifi-6000-ucode-9.193.4.1.tgz \ No newline at end of file From c6d932f2aef655981300993b0fe71aa5152fe462 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 22:44:14 +0100 Subject: [PATCH 274/850] iwlwifi-5150-ucode: add metafile support Signed-off-by: Stephan Raue --- packages/linux-firmware/iwlwifi-5150-ucode/meta | 14 ++++++++++++++ packages/linux-firmware/iwlwifi-5150-ucode/url | 1 - 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/linux-firmware/iwlwifi-5150-ucode/meta delete mode 100644 packages/linux-firmware/iwlwifi-5150-ucode/url diff --git a/packages/linux-firmware/iwlwifi-5150-ucode/meta b/packages/linux-firmware/iwlwifi-5150-ucode/meta new file mode 100644 index 0000000000..bdd8deea5f --- /dev/null +++ b/packages/linux-firmware/iwlwifi-5150-ucode/meta @@ -0,0 +1,14 @@ +PKG_NAME="iwlwifi-5150-ucode" +PKG_VERSION="8.24.2.2" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="Free-to-use" +PKG_SITE="http://www.intellinuxwireless.org" +PKG_URL="http://www.intellinuxwireless.org/iwlwifi/downloads/$PKG_NAME-$PKG_VERSION.tgz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="linux-firmware" +PKG_SHORTDESC="iwlwifi-5150-ucode: Intel PRO/Wireless 5150 Driver for Linux" +PKG_LONGDESC="This project was created by Intel to enable support for the Intel PRO/Wireless 5150 Network Connection mini PCI adapter. This project (iwl5150) is intended to be a community effort as much as is possible given some working constraints (mainly, no HW documentation is available)." +PKG_IS_ADDON="no" diff --git a/packages/linux-firmware/iwlwifi-5150-ucode/url b/packages/linux-firmware/iwlwifi-5150-ucode/url deleted file mode 100644 index 964f05c132..0000000000 --- a/packages/linux-firmware/iwlwifi-5150-ucode/url +++ /dev/null @@ -1 +0,0 @@ -http://www.intellinuxwireless.org/iwlwifi/downloads/iwlwifi-5150-ucode-8.24.2.2.tgz \ No newline at end of file From 7cf0baf9529b4de754a992c3e861b1965dc095e5 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 22:44:24 +0100 Subject: [PATCH 275/850] iwlwifi-5000-ucode: add metafile support Signed-off-by: Stephan Raue --- packages/linux-firmware/iwlwifi-5000-ucode/meta | 14 ++++++++++++++ packages/linux-firmware/iwlwifi-5000-ucode/url | 1 - 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/linux-firmware/iwlwifi-5000-ucode/meta delete mode 100644 packages/linux-firmware/iwlwifi-5000-ucode/url diff --git a/packages/linux-firmware/iwlwifi-5000-ucode/meta b/packages/linux-firmware/iwlwifi-5000-ucode/meta new file mode 100644 index 0000000000..d966ba5e7e --- /dev/null +++ b/packages/linux-firmware/iwlwifi-5000-ucode/meta @@ -0,0 +1,14 @@ +PKG_NAME="iwlwifi-5000-ucode" +PKG_VERSION="8.24.2.12" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="Free-to-use" +PKG_SITE="http://www.intellinuxwireless.org" +PKG_URL="http://www.intellinuxwireless.org/iwlwifi/downloads/$PKG_NAME-$PKG_VERSION.tgz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="linux-firmware" +PKG_SHORTDESC="iwlwifi-5000-ucode: Intel PRO/Wireless 5000 Driver for Linux" +PKG_LONGDESC="This project was created by Intel to enable support for the Intel PRO/Wireless 5000 Network Connection mini PCI adapter. This project (iwl5000) is intended to be a community effort as much as is possible given some working constraints (mainly, no HW documentation is available)." +PKG_IS_ADDON="no" diff --git a/packages/linux-firmware/iwlwifi-5000-ucode/url b/packages/linux-firmware/iwlwifi-5000-ucode/url deleted file mode 100644 index d6b64da49e..0000000000 --- a/packages/linux-firmware/iwlwifi-5000-ucode/url +++ /dev/null @@ -1 +0,0 @@ -http://www.intellinuxwireless.org/iwlwifi/downloads/iwlwifi-5000-ucode-8.24.2.12.tgz \ No newline at end of file From b16c13899bd8a5d4c274ad0f96122aac5d49a87d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 22:44:40 +0100 Subject: [PATCH 276/850] iwlwifi-4965-ucode: add metafile support Signed-off-by: Stephan Raue --- packages/linux-firmware/iwlwifi-4965-ucode/meta | 14 ++++++++++++++ packages/linux-firmware/iwlwifi-4965-ucode/url | 1 - 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/linux-firmware/iwlwifi-4965-ucode/meta delete mode 100644 packages/linux-firmware/iwlwifi-4965-ucode/url diff --git a/packages/linux-firmware/iwlwifi-4965-ucode/meta b/packages/linux-firmware/iwlwifi-4965-ucode/meta new file mode 100644 index 0000000000..59fa27aa8f --- /dev/null +++ b/packages/linux-firmware/iwlwifi-4965-ucode/meta @@ -0,0 +1,14 @@ +PKG_NAME="iwlwifi-4965-ucode" +PKG_VERSION="228.61.2.24" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="Free-to-use" +PKG_SITE="http://www.intellinuxwireless.org" +PKG_URL="http://www.intellinuxwireless.org/iwlwifi/downloads/$PKG_NAME-$PKG_VERSION.tgz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="linux-firmware" +PKG_SHORTDESC="iwlwifi-4965-ucode: Intel PRO/Wireless 4965 Driver for Linux" +PKG_LONGDESC="This project was created by Intel to enable support for the Intel PRO/Wireless 4965 Network Connection mini PCI adapter. This project (iwl4965) is intended to be a community effort as much as is possible given some working constraints (mainly, no HW documentation is available)." +PKG_IS_ADDON="no" diff --git a/packages/linux-firmware/iwlwifi-4965-ucode/url b/packages/linux-firmware/iwlwifi-4965-ucode/url deleted file mode 100644 index f232fab51c..0000000000 --- a/packages/linux-firmware/iwlwifi-4965-ucode/url +++ /dev/null @@ -1 +0,0 @@ -http://www.intellinuxwireless.org/iwlwifi/downloads/iwlwifi-4965-ucode-228.61.2.24.tgz \ No newline at end of file From 5e88d98674218ab5fa740ccfd6bec7455074af29 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 22:44:58 +0100 Subject: [PATCH 277/850] iwlwifi-3945-ucode: add metafile support Signed-off-by: Stephan Raue --- packages/linux-firmware/iwlwifi-3945-ucode/meta | 14 ++++++++++++++ packages/linux-firmware/iwlwifi-3945-ucode/url | 1 - 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/linux-firmware/iwlwifi-3945-ucode/meta delete mode 100644 packages/linux-firmware/iwlwifi-3945-ucode/url diff --git a/packages/linux-firmware/iwlwifi-3945-ucode/meta b/packages/linux-firmware/iwlwifi-3945-ucode/meta new file mode 100644 index 0000000000..fb8aa51e6d --- /dev/null +++ b/packages/linux-firmware/iwlwifi-3945-ucode/meta @@ -0,0 +1,14 @@ +PKG_NAME="iwlwifi-3945-ucode" +PKG_VERSION="15.32.2.9" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="Free-to-use" +PKG_SITE="http://www.intellinuxwireless.org" +PKG_URL="http://www.intellinuxwireless.org/iwlwifi/downloads/$PKG_NAME-$PKG_VERSION.tgz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="linux-firmware" +PKG_SHORTDESC="iwlwifi-3945-ucode: Intel PRO/Wireless 3945 Driver for Linux" +PKG_LONGDESC="This project was created by Intel to enable support for the Intel PRO/Wireless 3945 Network Connection mini PCI adapter. This project (iwl3945) is intended to be a community effort as much as is possible given some working constraints (mainly, no HW documentation is available)." +PKG_IS_ADDON="no" diff --git a/packages/linux-firmware/iwlwifi-3945-ucode/url b/packages/linux-firmware/iwlwifi-3945-ucode/url deleted file mode 100644 index c13b62a60d..0000000000 --- a/packages/linux-firmware/iwlwifi-3945-ucode/url +++ /dev/null @@ -1 +0,0 @@ -http://www.intellinuxwireless.org/iwlwifi/downloads/iwlwifi-3945-ucode-15.32.2.9.tgz \ No newline at end of file From ab854913fec65845d356375784f707de2c3466b2 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 22:45:08 +0100 Subject: [PATCH 278/850] iwlwifi-1000-ucode: add metafile support Signed-off-by: Stephan Raue --- packages/linux-firmware/iwlwifi-1000-ucode/meta | 14 ++++++++++++++ packages/linux-firmware/iwlwifi-1000-ucode/url | 1 - 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/linux-firmware/iwlwifi-1000-ucode/meta delete mode 100644 packages/linux-firmware/iwlwifi-1000-ucode/url diff --git a/packages/linux-firmware/iwlwifi-1000-ucode/meta b/packages/linux-firmware/iwlwifi-1000-ucode/meta new file mode 100644 index 0000000000..dcc0d7bca3 --- /dev/null +++ b/packages/linux-firmware/iwlwifi-1000-ucode/meta @@ -0,0 +1,14 @@ +PKG_NAME="iwlwifi-1000-ucode" +PKG_VERSION="128.50.3.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="Free-to-use" +PKG_SITE="http://www.intellinuxwireless.org" +PKG_URL="http://www.intellinuxwireless.org/iwlwifi/downloads/$PKG_NAME-$PKG_VERSION.tgz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="linux-firmware" +PKG_SHORTDESC="iwlwifi-1000-ucode: Intel PRO/Wireless 1000 Driver for Linux" +PKG_LONGDESC="This project was created by Intel to enable support for the Intel PRO/Wireless 1000 Network Connection mini PCI adapter. This project (iwl1000) is intended to be a community effort as much as is possible given some working constraints (mainly, no HW documentation is available)." +PKG_IS_ADDON="no" diff --git a/packages/linux-firmware/iwlwifi-1000-ucode/url b/packages/linux-firmware/iwlwifi-1000-ucode/url deleted file mode 100644 index 16b89a8d02..0000000000 --- a/packages/linux-firmware/iwlwifi-1000-ucode/url +++ /dev/null @@ -1 +0,0 @@ -http://www.intellinuxwireless.org/iwlwifi/downloads/iwlwifi-1000-ucode-128.50.3.1.tgz \ No newline at end of file From cb7f044534bfbdfdb7778e0892f8b150ec2aae73 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 22:45:44 +0100 Subject: [PATCH 279/850] ipw2200-fw: fix meta package Signed-off-by: Stephan Raue --- packages/linux-firmware/ipw2200-fw/meta | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/linux-firmware/ipw2200-fw/meta b/packages/linux-firmware/ipw2200-fw/meta index 87a2d35582..027a407e5d 100644 --- a/packages/linux-firmware/ipw2200-fw/meta +++ b/packages/linux-firmware/ipw2200-fw/meta @@ -4,9 +4,9 @@ PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="Free-to-use" PKG_SITE="http://ipw2200.sourceforge.net/" -PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tgz" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" PKG_PRIORITY="optional" PKG_SECTION="linux-firmware" PKG_SHORTDESC="ipw2200-fw: Intel PRO/Wireless 2200 Driver for Linux" From b6babca52cf23117fa76fe79a680c39dcf0e54ba Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 14 Nov 2010 22:46:03 +0100 Subject: [PATCH 280/850] ipw2100-fw: fix meta package Signed-off-by: Stephan Raue --- packages/linux-firmware/ipw2100-fw/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/linux-firmware/ipw2100-fw/meta b/packages/linux-firmware/ipw2100-fw/meta index 32af34d74b..279d383f05 100644 --- a/packages/linux-firmware/ipw2100-fw/meta +++ b/packages/linux-firmware/ipw2100-fw/meta @@ -6,7 +6,7 @@ PKG_LICENSE="Free-to-use" PKG_SITE="http://ipw2100.sourceforge.net/" PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" PKG_PRIORITY="optional" PKG_SECTION="linux-firmware" PKG_SHORTDESC="ipw2100-fw: Intel PRO/Wireless 2100 Driver for Linux" From 6ae0dd6332a12666a1710561b8a22acd628ad41b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 15 Nov 2010 12:19:42 +0100 Subject: [PATCH 281/850] glib: update to glib-2.27.3 Signed-off-by: Stephan Raue --- packages/devel/glib/meta | 2 +- .../glib-2.27.2-syslog_message_handler.patch | 104 ------------------ 2 files changed, 1 insertion(+), 105 deletions(-) delete mode 100644 packages/devel/glib/patches/glib-2.27.2-syslog_message_handler.patch diff --git a/packages/devel/glib/meta b/packages/devel/glib/meta index 0832061030..f29743588d 100644 --- a/packages/devel/glib/meta +++ b/packages/devel/glib/meta @@ -1,5 +1,5 @@ PKG_NAME="glib" -PKG_VERSION="2.27.2" +PKG_VERSION="2.27.3" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="LGPL" diff --git a/packages/devel/glib/patches/glib-2.27.2-syslog_message_handler.patch b/packages/devel/glib/patches/glib-2.27.2-syslog_message_handler.patch deleted file mode 100644 index febe8bf790..0000000000 --- a/packages/devel/glib/patches/glib-2.27.2-syslog_message_handler.patch +++ /dev/null @@ -1,104 +0,0 @@ ---- glib-2.19.6/glib/gmessages.c.orig 2009-02-02 19:17:45.000000000 +0000 -+++ glib-2.19.6/glib/gmessages.c 2009-02-17 16:33:22.000000000 +0000 -@@ -40,6 +40,7 @@ - #include - #include - #include -+#include - - #include "glib.h" - #include "gdebug.h" -@@ -873,6 +874,83 @@ - } - } - -+/* That is a syslog version of default log handler. */ -+ -+#define IS_EMPTY_STRING(s) (NULL == (s) || 0 == *(s)) -+ -+#define GLIB_PREFIX "GLIB" -+#define DEFAULT_DOMAIN "default" -+#define DEFAULT_MESSAGE "(NULL) message" -+ -+static void -+g_log_syslog_handler (const gchar *log_domain, -+ GLogLevelFlags log_level, -+ const gchar *message, -+ gpointer unused_data) -+{ -+ /* This value will be switched to TRUE when log facility is initialized */ -+ static gboolean initialized = FALSE; -+ -+ /* This call only variables */ -+ const gchar* alert = (log_level & ALERT_LEVELS ? " ** " : " "); -+ const gchar* aborting = (log_level & G_LOG_FLAG_FATAL ? "\naborting..." : ""); -+ -+ const gchar* prefix; -+ int priority; -+ -+ /* Check first that logging facility is initialized */ -+ if (!initialized) -+ { -+ openlog (NULL, LOG_PID, LOG_USER); -+ initialized = !initialized; -+ } -+ -+ /* Validate log domain */ -+ if (IS_EMPTY_STRING(log_domain)) -+ log_domain = DEFAULT_DOMAIN; -+ -+ /* Check log message for validity */ -+ if (IS_EMPTY_STRING(message)) -+ message = DEFAULT_MESSAGE; -+ -+ /* Process the message prefix and priority */ -+ switch (log_level & G_LOG_LEVEL_MASK) -+ { -+ case G_LOG_FLAG_FATAL: -+ prefix = "FATAL"; -+ priority = LOG_EMERG; -+ break; -+ case G_LOG_LEVEL_ERROR: -+ prefix = "ERROR"; -+ priority = LOG_ERR; -+ break; -+ case G_LOG_LEVEL_CRITICAL: -+ prefix = "CRITICAL"; -+ priority = LOG_CRIT; -+ break; -+ case G_LOG_LEVEL_WARNING: -+ prefix = "WARNING"; -+ priority = LOG_WARNING; -+ break; -+ case G_LOG_LEVEL_MESSAGE: -+ prefix = "MESSAGE"; -+ priority = LOG_NOTICE; -+ break; -+ case G_LOG_LEVEL_INFO: -+ prefix = "INFO"; -+ priority = LOG_INFO; -+ break; -+ default: -+ prefix = "DEBUG"; -+ priority = LOG_DEBUG; -+ break; -+ } -+ -+ /* Now printing the message to syslog */ -+ syslog (priority, "%s %s%s%s - %s%s", GLIB_PREFIX, prefix, alert, log_domain, -+ message, aborting); -+} -+ - void - g_log_default_handler (const gchar *log_domain, - GLogLevelFlags log_level, -@@ -948,6 +1026,9 @@ - string = g_string_free (gstring, FALSE); - - write_string (fd, string); -+ -+ /* */ -+ g_log_syslog_handler(log_domain, log_level, message, unused_data); - g_free (string); - } - From 04962a0743d302e175de8c7ec3812faf832c68b1 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 15 Nov 2010 13:35:44 +0100 Subject: [PATCH 282/850] vdpauinfo: add metafile support Signed-off-by: Stephan Raue --- packages/multimedia/vdpauinfo/build | 4 ---- packages/multimedia/vdpauinfo/meta | 14 ++++++++++++++ packages/multimedia/vdpauinfo/url | 1 - 3 files changed, 14 insertions(+), 5 deletions(-) create mode 100644 packages/multimedia/vdpauinfo/meta delete mode 100644 packages/multimedia/vdpauinfo/url diff --git a/packages/multimedia/vdpauinfo/build b/packages/multimedia/vdpauinfo/build index 4face3f189..e51a6f213c 100755 --- a/packages/multimedia/vdpauinfo/build +++ b/packages/multimedia/vdpauinfo/build @@ -2,13 +2,9 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ make - -$STRIP $1 diff --git a/packages/multimedia/vdpauinfo/meta b/packages/multimedia/vdpauinfo/meta new file mode 100644 index 0000000000..18d68d564d --- /dev/null +++ b/packages/multimedia/vdpauinfo/meta @@ -0,0 +1,14 @@ +PKG_NAME="vdpauinfo" +PKG_VERSION="0.0.6" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://freedesktop.org/wiki/Software/VDPAU" +PKG_URL="http://people.freedesktop.org/~aplattner/vdpau/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="debug" +PKG_SHORTDESC="vdpauinfo: a tool to show vdpau infos " +PKG_LONGDESC="VDPAU is the Video Decode and Presentation API for UNIX. It provides an interface to video decode acceleration and presentation hardware present in modern GPUs." +PKG_IS_ADDON="no" diff --git a/packages/multimedia/vdpauinfo/url b/packages/multimedia/vdpauinfo/url deleted file mode 100644 index 9a0f48f92d..0000000000 --- a/packages/multimedia/vdpauinfo/url +++ /dev/null @@ -1 +0,0 @@ -http://people.freedesktop.org/~aplattner/vdpau/vdpauinfo-0.0.6.tar.gz From 5ee9a5309e1d1987990a81ae8fe67f8db64633f2 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 15 Nov 2010 13:35:59 +0100 Subject: [PATCH 283/850] rtmpdump: add metafile support Signed-off-by: Stephan Raue --- packages/multimedia/rtmpdump/build | 3 --- packages/multimedia/rtmpdump/install | 3 --- packages/multimedia/rtmpdump/meta | 14 ++++++++++++++ packages/multimedia/rtmpdump/url | 1 - 4 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 packages/multimedia/rtmpdump/meta delete mode 100644 packages/multimedia/rtmpdump/url diff --git a/packages/multimedia/rtmpdump/build b/packages/multimedia/rtmpdump/build index 98ac7962a4..1c115177ee 100755 --- a/packages/multimedia/rtmpdump/build +++ b/packages/multimedia/rtmpdump/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build zlib -$SCRIPTS/build openssl - cd $PKG_BUILD/librtmp make prefix=/usr \ diff --git a/packages/multimedia/rtmpdump/install b/packages/multimedia/rtmpdump/install index 7022c10c2f..a41b99f418 100755 --- a/packages/multimedia/rtmpdump/install +++ b/packages/multimedia/rtmpdump/install @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/install zlib -$SCRIPTS/install openssl - mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/librtmp/*.so* $INSTALL/usr/lib diff --git a/packages/multimedia/rtmpdump/meta b/packages/multimedia/rtmpdump/meta new file mode 100644 index 0000000000..7b7845cf17 --- /dev/null +++ b/packages/multimedia/rtmpdump/meta @@ -0,0 +1,14 @@ +PKG_NAME="rtmpdump" +PKG_VERSION="2.3" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://rtmpdump.mplayerhq.hu/" +PKG_URL="http://rtmpdump.mplayerhq.hu/download/$PKG_NAME-$PKG_VERSION.tgz" +PKG_DEPENDS="zlib openssl" +PKG_BUILD_DEPENDS="toolchain zlib openssl" +PKG_PRIORITY="optional" +PKG_SECTION="multimedia" +PKG_SHORTDESC="rtmpdump: a toolkit for RTMP streams." +PKG_LONGDESC="rtmpdump is a toolkit for RTMP streams. All forms of RTMP are supported, including rtmp://, rtmpt://, rtmpe://, rtmpte://, and rtmps://." +PKG_IS_ADDON="no" diff --git a/packages/multimedia/rtmpdump/url b/packages/multimedia/rtmpdump/url deleted file mode 100644 index 1f1ced0c11..0000000000 --- a/packages/multimedia/rtmpdump/url +++ /dev/null @@ -1 +0,0 @@ -http://rtmpdump.mplayerhq.hu/download/rtmpdump-2.3.tgz From e81eed4ef6de667dad087610799c14d5c0692f14 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 15 Nov 2010 13:36:14 +0100 Subject: [PATCH 284/850] libvdpau: add metafile support Signed-off-by: Stephan Raue --- packages/multimedia/libvdpau/build | 3 --- packages/multimedia/libvdpau/install | 3 --- packages/multimedia/libvdpau/meta | 18 ++++++++++++++++++ packages/multimedia/libvdpau/url | 1 - 4 files changed, 18 insertions(+), 7 deletions(-) create mode 100644 packages/multimedia/libvdpau/meta delete mode 100644 packages/multimedia/libvdpau/url diff --git a/packages/multimedia/libvdpau/build b/packages/multimedia/libvdpau/build index 27c7e6cefd..09d5fbdc22 100755 --- a/packages/multimedia/libvdpau/build +++ b/packages/multimedia/libvdpau/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build libX11 - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/multimedia/libvdpau/install b/packages/multimedia/libvdpau/install index cc0480fe46..10a5a59579 100755 --- a/packages/multimedia/libvdpau/install +++ b/packages/multimedia/libvdpau/install @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/install libX11 -[ "$DEVTOOLS" = yes ] && $SCRIPTS/install vdpauinfo - mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/src/.libs/libvdpau.so* $INSTALL/usr/lib cp -P $PKG_BUILD/trace/.libs/libvdpau_trace.so* $INSTALL/usr/lib diff --git a/packages/multimedia/libvdpau/meta b/packages/multimedia/libvdpau/meta new file mode 100644 index 0000000000..16c37df127 --- /dev/null +++ b/packages/multimedia/libvdpau/meta @@ -0,0 +1,18 @@ +PKG_NAME="libvdpau" +PKG_VERSION="0.4.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://freedesktop.org/wiki/Software/VDPAU" +PKG_URL="http://people.freedesktop.org/~aplattner/vdpau/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="libX11" +PKG_BUILD_DEPENDS="toolchain libX11" +PKG_PRIORITY="optional" +PKG_SECTION="multimedia" +PKG_SHORTDESC="libvdpau: a Video Decode and Presentation API for UNIX." +PKG_LONGDESC="VDPAU is the Video Decode and Presentation API for UNIX. It provides an interface to video decode acceleration and presentation hardware present in modern GPUs." +PKG_IS_ADDON="no" + +if [ "$DEVTOOLS" = "yes" ]; then + PKG_DEPENDS="$PKG_DEPENDS vdpauinfo" +fi diff --git a/packages/multimedia/libvdpau/url b/packages/multimedia/libvdpau/url deleted file mode 100644 index f6b087a521..0000000000 --- a/packages/multimedia/libvdpau/url +++ /dev/null @@ -1 +0,0 @@ -http://people.freedesktop.org/~aplattner/vdpau/libvdpau-0.4.1.tar.gz From c30c429766f65c5f0b51e867a43ec5559c512b3d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 15 Nov 2010 13:36:22 +0100 Subject: [PATCH 285/850] libva: add metafile support Signed-off-by: Stephan Raue --- packages/multimedia/libva/build | 7 ------- packages/multimedia/libva/install | 6 ------ packages/multimedia/libva/meta | 16 ++++++++++++++++ packages/multimedia/libva/url | 1 - 4 files changed, 16 insertions(+), 14 deletions(-) create mode 100644 packages/multimedia/libva/meta delete mode 100644 packages/multimedia/libva/url diff --git a/packages/multimedia/libva/build b/packages/multimedia/libva/build index e889e0b3b1..9f4849f5a2 100755 --- a/packages/multimedia/libva/build +++ b/packages/multimedia/libva/build @@ -2,13 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build libX11 -$SCRIPTS/build libXext -$SCRIPTS/build libXfixes -$SCRIPTS/build libdrm -$SCRIPTS/build Mesa - cd $PKG_BUILD # apply patches provide with the source package diff --git a/packages/multimedia/libva/install b/packages/multimedia/libva/install index e82f25bb9b..27496526a9 100755 --- a/packages/multimedia/libva/install +++ b/packages/multimedia/libva/install @@ -2,12 +2,6 @@ . config/options $1 -$SCRIPTS/install libX11 -$SCRIPTS/install libXext -$SCRIPTS/install libXfixes -$SCRIPTS/install libdrm -$SCRIPTS/install Mesa - mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/va/.libs/libva*.so* $INSTALL/usr/lib rm -rf $INSTALL/usr/lib/libva-*.so*T diff --git a/packages/multimedia/libva/meta b/packages/multimedia/libva/meta new file mode 100644 index 0000000000..f8d470f844 --- /dev/null +++ b/packages/multimedia/libva/meta @@ -0,0 +1,16 @@ +PKG_NAME="libva" +PKG_VERSION="0.31.1-1+sds4" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://freedesktop.org/wiki/Software/vaapi" +PKG_URL="http://www.splitted-desktop.com/~gbeauchesne/libva/${PKG_NAME}_${PKG_VERSION}.tar.gz" +PKG_DEPENDS="libX11 libXext libXfixes libdrm Mesa" +PKG_BUILD_DEPENDS="toolchain libX11 libXext libXfixes libdrm Mesa" +PKG_PRIORITY="optional" +PKG_SECTION="multimedia" +PKG_SHORTDESC="libva: The main motivation for VAAPI (Video Acceleration API) is to enable hardware accelerated video decode/encode at various entry-points (VLD, IDCT, Motion Compensation etc.) for the prevailing coding standards today (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 AVC/H.264, and VC-1/VMW3)." +PKG_LONGDESC="The main motivation for VAAPI (Video Acceleration API) is to enable hardware accelerated video decode/encode at various entry-points (VLD, IDCT, Motion Compensation etc.) for the prevailing coding standards today (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 AVC/H.264, and VC-1/VMW3). Extending XvMC was considered, but due to its original design for MPEG-2 MotionComp only, it made more sense to design an interface from scratch that can fully expose the video decode capabilities in today's GPUs." +PKG_IS_ADDON="no" + + diff --git a/packages/multimedia/libva/url b/packages/multimedia/libva/url deleted file mode 100644 index 2a730c5c2b..0000000000 --- a/packages/multimedia/libva/url +++ /dev/null @@ -1 +0,0 @@ -http://www.splitted-desktop.com/~gbeauchesne/libva/libva_0.31.1-1+sds4.tar.gz \ No newline at end of file From 40da9624006f25d7be4e821f0ee9b12abdd6e790 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 15 Nov 2010 13:36:39 +0100 Subject: [PATCH 286/850] libmpeg2: add metafile support Signed-off-by: Stephan Raue --- packages/multimedia/libmpeg2/build | 2 -- packages/multimedia/libmpeg2/install | 4 ++-- packages/multimedia/libmpeg2/meta | 14 ++++++++++++++ packages/multimedia/libmpeg2/url | 1 - 4 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 packages/multimedia/libmpeg2/meta delete mode 100644 packages/multimedia/libmpeg2/url diff --git a/packages/multimedia/libmpeg2/build b/packages/multimedia/libmpeg2/build index 975fe0a351..c392efad1c 100755 --- a/packages/multimedia/libmpeg2/build +++ b/packages/multimedia/libmpeg2/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/multimedia/libmpeg2/install b/packages/multimedia/libmpeg2/install index 4276e56b52..1758626aa3 100755 --- a/packages/multimedia/libmpeg2/install +++ b/packages/multimedia/libmpeg2/install @@ -3,5 +3,5 @@ . config/options $1 mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/libmpeg2/.libs/*.so* $INSTALL/usr/lib - cp -PR $PKG_BUILD/libmpeg2/convert/.libs/*.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/libmpeg2/.libs/*.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/libmpeg2/convert/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/multimedia/libmpeg2/meta b/packages/multimedia/libmpeg2/meta new file mode 100644 index 0000000000..1632bb06e5 --- /dev/null +++ b/packages/multimedia/libmpeg2/meta @@ -0,0 +1,14 @@ +PKG_NAME="libmpeg2" +PKG_VERSION="0.5.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://libmpeg2.sourceforge.net/" +PKG_URL="http://libmpeg2.sourceforge.net/files/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="multimedia" +PKG_SHORTDESC="libmpeg2: The MPEG Library - version 2" +PKG_LONGDESC="The MPEG Library is a collection of C routines to decode MPEG-1 and MPEG-2 movies and dither them in a variety of colour schemes." +PKG_IS_ADDON="no" diff --git a/packages/multimedia/libmpeg2/url b/packages/multimedia/libmpeg2/url deleted file mode 100644 index dc46307d44..0000000000 --- a/packages/multimedia/libmpeg2/url +++ /dev/null @@ -1 +0,0 @@ -http://libmpeg2.sourceforge.net/files/libmpeg2-0.5.1.tar.gz From f6b5a7fa05e30b8b85c04e26ec82eaa3dd0885e9 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 15 Nov 2010 13:36:51 +0100 Subject: [PATCH 287/850] libass: add metafile support Signed-off-by: Stephan Raue --- packages/multimedia/libass/build | 5 ----- packages/multimedia/libass/install | 4 ---- packages/multimedia/libass/meta | 14 ++++++++++++++ packages/multimedia/libass/url | 1 - 4 files changed, 14 insertions(+), 10 deletions(-) create mode 100644 packages/multimedia/libass/meta delete mode 100644 packages/multimedia/libass/url diff --git a/packages/multimedia/libass/build b/packages/multimedia/libass/build index c9cce4f367..186f78693d 100755 --- a/packages/multimedia/libass/build +++ b/packages/multimedia/libass/build @@ -2,11 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build freetype -$SCRIPTS/build fontconfig -$SCRIPTS/build enca - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/multimedia/libass/install b/packages/multimedia/libass/install index e5dd9e345b..fcc3d9e029 100755 --- a/packages/multimedia/libass/install +++ b/packages/multimedia/libass/install @@ -2,10 +2,6 @@ . config/options $1 -$SCRIPTS/install freetype -$SCRIPTS/install fontconfig -$SCRIPTS/install enca - mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/libass/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/multimedia/libass/meta b/packages/multimedia/libass/meta new file mode 100644 index 0000000000..b001d41ecf --- /dev/null +++ b/packages/multimedia/libass/meta @@ -0,0 +1,14 @@ +PKG_NAME="libass" +PKG_VERSION="0.9.11" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="BSD" +PKG_SITE="http://code.google.com/p/libass/" +PKG_URL="http://libass.googlecode.com/files/release/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="freetype fontconfig enca" +PKG_BUILD_DEPENDS="toolchain freetype fontconfig enca" +PKG_PRIORITY="optional" +PKG_SECTION="multimedia" +PKG_SHORTDESC="libass: a portable subtitle renderer for the ASS/SSA (Advanced Substation Alpha/Substation Alpha) subtitle format." +PKG_LONGDESC="libass is a portable subtitle renderer for the ASS/SSA (Advanced Substation Alpha/Substation Alpha) subtitle format. It is mostly compatible with VSFilter" +PKG_IS_ADDON="no" diff --git a/packages/multimedia/libass/url b/packages/multimedia/libass/url deleted file mode 100644 index b8b3555b77..0000000000 --- a/packages/multimedia/libass/url +++ /dev/null @@ -1 +0,0 @@ -http://libass.googlecode.com/files/libass-0.9.11.tar.bz2 \ No newline at end of file From daf6fa8158399dd0d3803e936c92b3eb0417a885 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 15 Nov 2010 13:37:08 +0100 Subject: [PATCH 288/850] crystalhd: add metafile support Signed-off-by: Stephan Raue --- packages/multimedia/crystalhd/build | 3 --- packages/multimedia/crystalhd/install | 2 -- packages/multimedia/crystalhd/meta | 14 ++++++++++++++ ...diff => crystalhd-171-crosscompiling-0.1.patch} | 0 ...f => crystalhd-171-use_8_DMA_buffers-0.1.patch} | 0 packages/multimedia/crystalhd/url | 1 - 6 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 packages/multimedia/crystalhd/meta rename packages/multimedia/crystalhd/patches/{010-crystalhd-crosscompiling-0.1.diff => crystalhd-171-crosscompiling-0.1.patch} (100%) rename packages/multimedia/crystalhd/patches/{crystalhd-171-use_8_DMA_buffers-0.1.diff => crystalhd-171-use_8_DMA_buffers-0.1.patch} (100%) delete mode 100644 packages/multimedia/crystalhd/url diff --git a/packages/multimedia/crystalhd/build b/packages/multimedia/crystalhd/build index f7ab019a4f..9a167377be 100755 --- a/packages/multimedia/crystalhd/build +++ b/packages/multimedia/crystalhd/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build linux - cd $PKG_BUILD/driver/linux ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/multimedia/crystalhd/install b/packages/multimedia/crystalhd/install index adf14ced80..cdbc0dde0c 100755 --- a/packages/multimedia/crystalhd/install +++ b/packages/multimedia/crystalhd/install @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build busybox-hosttools - VER=`ls $BUILD/linux*/modules/lib/modules` mkdir -p $INSTALL/lib/firmware diff --git a/packages/multimedia/crystalhd/meta b/packages/multimedia/crystalhd/meta new file mode 100644 index 0000000000..1396062053 --- /dev/null +++ b/packages/multimedia/crystalhd/meta @@ -0,0 +1,14 @@ +PKG_NAME="crystalhd" +PKG_VERSION="171" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://code.google.com/p/crystalhd-for-osx/" +PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="linux" +PKG_BUILD_DEPENDS="toolchain busybox-hosttools linux" +PKG_PRIORITY="optional" +PKG_SECTION="multimedia" +PKG_SHORTDESC="crystalhd: OSX and Linux driver and library support for the Broadcom Crystal HD Video Accelerator." +PKG_LONGDESC="OSX and Linux driver and library support for the Broadcom Crystal HD Video Accelerator. Supported under XBMC for Mac on the AppleTV and under 10.4 and 10.5 OSX platforms." +PKG_IS_ADDON="no" diff --git a/packages/multimedia/crystalhd/patches/010-crystalhd-crosscompiling-0.1.diff b/packages/multimedia/crystalhd/patches/crystalhd-171-crosscompiling-0.1.patch similarity index 100% rename from packages/multimedia/crystalhd/patches/010-crystalhd-crosscompiling-0.1.diff rename to packages/multimedia/crystalhd/patches/crystalhd-171-crosscompiling-0.1.patch diff --git a/packages/multimedia/crystalhd/patches/crystalhd-171-use_8_DMA_buffers-0.1.diff b/packages/multimedia/crystalhd/patches/crystalhd-171-use_8_DMA_buffers-0.1.patch similarity index 100% rename from packages/multimedia/crystalhd/patches/crystalhd-171-use_8_DMA_buffers-0.1.diff rename to packages/multimedia/crystalhd/patches/crystalhd-171-use_8_DMA_buffers-0.1.patch diff --git a/packages/multimedia/crystalhd/url b/packages/multimedia/crystalhd/url deleted file mode 100644 index ec02158bb9..0000000000 --- a/packages/multimedia/crystalhd/url +++ /dev/null @@ -1 +0,0 @@ -http://sources.openelec.tv/svn/crystalhd-171.tar.bz2 \ No newline at end of file From d36d91d19a803461dc6b75c4ef84995c5f2f1c18 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 15 Nov 2010 13:37:22 +0100 Subject: [PATCH 289/850] SDL_ttf: add metafile support Signed-off-by: Stephan Raue --- packages/multimedia/SDL_ttf/build | 7 ------- packages/multimedia/SDL_ttf/install | 6 ------ packages/multimedia/SDL_ttf/meta | 14 ++++++++++++++ packages/multimedia/SDL_ttf/url | 1 - 4 files changed, 14 insertions(+), 14 deletions(-) create mode 100644 packages/multimedia/SDL_ttf/meta delete mode 100644 packages/multimedia/SDL_ttf/url diff --git a/packages/multimedia/SDL_ttf/build b/packages/multimedia/SDL_ttf/build index 69ec9db794..48ef600034 100755 --- a/packages/multimedia/SDL_ttf/build +++ b/packages/multimedia/SDL_ttf/build @@ -2,13 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build SDL -$SCRIPTS/build libICE -$SCRIPTS/build libX11 -$SCRIPTS/build freetype -$SCRIPTS/build Mesa - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/multimedia/SDL_ttf/install b/packages/multimedia/SDL_ttf/install index 67e598571a..c8844160fe 100755 --- a/packages/multimedia/SDL_ttf/install +++ b/packages/multimedia/SDL_ttf/install @@ -2,12 +2,6 @@ . config/options $1 -$SCRIPTS/install SDL -$SCRIPTS/install libICE -$SCRIPTS/install libX11 -$SCRIPTS/install freetype -$SCRIPTS/install Mesa - mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/multimedia/SDL_ttf/meta b/packages/multimedia/SDL_ttf/meta new file mode 100644 index 0000000000..4fec61c3fd --- /dev/null +++ b/packages/multimedia/SDL_ttf/meta @@ -0,0 +1,14 @@ +PKG_NAME="SDL_ttf" +PKG_VERSION="2.0.10" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.libsdl.org/" +PKG_URL="http://www.libsdl.org/projects/SDL_ttf/release/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="SDL libICE libX11 freetype Mesa" +PKG_BUILD_DEPENDS="toolchain SDL libICE libX11 freetype Mesa" +PKG_PRIORITY="optional" +PKG_SECTION="multimedia" +PKG_SHORTDESC="libsdl_ttf: A library to use TrueType fonts in SDL applications" +PKG_LONGDESC="This is a sample library which allows you to use TrueType fonts in your SDL applications. It comes with an example program 'showfont' which displays an example string for a given TrueType font file." +PKG_IS_ADDON="no" diff --git a/packages/multimedia/SDL_ttf/url b/packages/multimedia/SDL_ttf/url deleted file mode 100644 index 3fb7ec8a3a..0000000000 --- a/packages/multimedia/SDL_ttf/url +++ /dev/null @@ -1 +0,0 @@ -http://www.libsdl.org/projects/SDL_ttf/release/SDL_ttf-2.0.10.tar.gz From ebfe9c80497ffd0f6b36ced8f51391d5cca2bf54 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 15 Nov 2010 13:37:33 +0100 Subject: [PATCH 290/850] SDL_net: add metafile support Signed-off-by: Stephan Raue --- packages/multimedia/SDL_net/build | 3 --- packages/multimedia/SDL_net/install | 2 -- packages/multimedia/SDL_net/meta | 14 ++++++++++++++ packages/multimedia/SDL_net/url | 1 - 4 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 packages/multimedia/SDL_net/meta delete mode 100644 packages/multimedia/SDL_net/url diff --git a/packages/multimedia/SDL_net/build b/packages/multimedia/SDL_net/build index a908575d56..92a61340e5 100755 --- a/packages/multimedia/SDL_net/build +++ b/packages/multimedia/SDL_net/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build SDL - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/multimedia/SDL_net/install b/packages/multimedia/SDL_net/install index 5106af385c..c8844160fe 100755 --- a/packages/multimedia/SDL_net/install +++ b/packages/multimedia/SDL_net/install @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/install SDL - mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/multimedia/SDL_net/meta b/packages/multimedia/SDL_net/meta new file mode 100644 index 0000000000..97a8ae597b --- /dev/null +++ b/packages/multimedia/SDL_net/meta @@ -0,0 +1,14 @@ +PKG_NAME="SDL_net" +PKG_VERSION="1.2.7" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.libsdl.org/" +PKG_URL="http://www.libsdl.org/projects/SDL_net/release/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="SDL" +PKG_BUILD_DEPENDS="toolchain SDL" +PKG_PRIORITY="optional" +PKG_SECTION="multimedia" +PKG_SHORTDESC="libsdl_net: A simple cross-platform network library" +PKG_LONGDESC="SDL_net is a network library that is used with the SDL library, and almost as portable. It allows a programmer to use network functionality without having to code different things for different platforms. It also simplyfies the handling of network connections and data transfer." +PKG_IS_ADDON="no" diff --git a/packages/multimedia/SDL_net/url b/packages/multimedia/SDL_net/url deleted file mode 100644 index 23fcfae54a..0000000000 --- a/packages/multimedia/SDL_net/url +++ /dev/null @@ -1 +0,0 @@ -http://www.libsdl.org/projects/SDL_net/release/SDL_net-1.2.7.tar.gz From a541be51571fab0432d6653f3d452cd27074c86b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 15 Nov 2010 13:37:44 +0100 Subject: [PATCH 291/850] SDL_mixer: add metafile support Signed-off-by: Stephan Raue --- packages/multimedia/SDL_mixer/build | 6 ------ packages/multimedia/SDL_mixer/install | 5 ----- packages/multimedia/SDL_mixer/meta | 14 ++++++++++++++ packages/multimedia/SDL_mixer/url | 1 - 4 files changed, 14 insertions(+), 12 deletions(-) create mode 100644 packages/multimedia/SDL_mixer/meta delete mode 100644 packages/multimedia/SDL_mixer/url diff --git a/packages/multimedia/SDL_mixer/build b/packages/multimedia/SDL_mixer/build index e544e11e82..3e8620550c 100755 --- a/packages/multimedia/SDL_mixer/build +++ b/packages/multimedia/SDL_mixer/build @@ -2,12 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build SDL -#$SCRIPTS/build flac -$SCRIPTS/build libmad -$SCRIPTS/build libogg - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/multimedia/SDL_mixer/install b/packages/multimedia/SDL_mixer/install index 824deeae29..36ba845550 100755 --- a/packages/multimedia/SDL_mixer/install +++ b/packages/multimedia/SDL_mixer/install @@ -2,10 +2,5 @@ . config/options $1 -$SCRIPTS/install SDL -#$SCRIPTS/install flac -$SCRIPTS/install libmad -$SCRIPTS/install libogg - mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/build/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/multimedia/SDL_mixer/meta b/packages/multimedia/SDL_mixer/meta new file mode 100644 index 0000000000..55fd1e935d --- /dev/null +++ b/packages/multimedia/SDL_mixer/meta @@ -0,0 +1,14 @@ +PKG_NAME="SDL_mixer" +PKG_VERSION="1.2.11" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.libsdl.org/" +PKG_URL="http://www.libsdl.org/projects/SDL_mixer/release/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="SDL libmad libogg" +PKG_BUILD_DEPENDS="toolchain SDL libmad libogg" +PKG_PRIORITY="optional" +PKG_SECTION="multimedia" +PKG_SHORTDESC="libsdl_mixer: Simple Directmedia Layer - Mixer" +PKG_LONGDESC="SDL_mixer is a sound mixing library that is used with the SDL library, and almost as portable. It allows a programmer to use multiple samples along with music without having to code a mixing algorithm themselves. It also simplyfies the handling of loading and playing samples and music from all sorts of file formats." +PKG_IS_ADDON="no" diff --git a/packages/multimedia/SDL_mixer/url b/packages/multimedia/SDL_mixer/url deleted file mode 100644 index c2ad3df738..0000000000 --- a/packages/multimedia/SDL_mixer/url +++ /dev/null @@ -1 +0,0 @@ -http://www.libsdl.org/projects/SDL_mixer/release/SDL_mixer-1.2.11.tar.gz From 87f1c16b893ce8e43430ab5812300736e92b939b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 15 Nov 2010 13:38:14 +0100 Subject: [PATCH 292/850] openal-soft: cosmetics Signed-off-by: Stephan Raue --- packages/multimedia/openal-soft/build | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/multimedia/openal-soft/build b/packages/multimedia/openal-soft/build index 1ea9b264ac..b5834ebbf9 100755 --- a/packages/multimedia/openal-soft/build +++ b/packages/multimedia/openal-soft/build @@ -4,8 +4,7 @@ cd $PKG_BUILD -mkdir -p .build -cd .build +mkdir -p .build && cd .build cmake -DCMAKE_TOOLCHAIN_FILE=$CMAKE_CONF \ -DCMAKE_INSTALL_PREFIX=/usr \ From 1b88106ba8362c359f057ab02b7cce13c5ef235a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 15 Nov 2010 13:38:46 +0100 Subject: [PATCH 293/850] mpc: add site Signed-off-by: Stephan Raue --- packages/toolchain/math/mpc/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/toolchain/math/mpc/meta b/packages/toolchain/math/mpc/meta index a143d1ee02..788c000bb4 100644 --- a/packages/toolchain/math/mpc/meta +++ b/packages/toolchain/math/mpc/meta @@ -3,7 +3,7 @@ PKG_VERSION="0.8.2" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="LGPL" -PKG_SITE="" +PKG_SITE="http://www.multiprecision.org" PKG_URL="http://www.multiprecision.org/mpc/download/$PKG_NAME-$PKG_VERSION.tar.gz" PKG_DEPENDS="" PKG_BUILD_DEPENDS="gmp mpfr" From 7a98ae03072e12286963048354547428f5c7e1ea Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 15 Nov 2010 14:56:07 +0100 Subject: [PATCH 294/850] Cheetah: update to Cheetah-2.4.2.1, add metafile support Signed-off-by: Stephan Raue --- packages/python/devel/Cheetah/build | 5 ---- packages/python/devel/Cheetah/install | 3 --- packages/python/devel/Cheetah/meta | 14 +++++++++++ .../Cheetah/patches/Cheetah-setuptools.diff | 23 ------------------- packages/python/devel/Cheetah/url | 1 - 5 files changed, 14 insertions(+), 32 deletions(-) create mode 100644 packages/python/devel/Cheetah/meta delete mode 100644 packages/python/devel/Cheetah/patches/Cheetah-setuptools.diff delete mode 100644 packages/python/devel/Cheetah/url diff --git a/packages/python/devel/Cheetah/build b/packages/python/devel/Cheetah/build index 76397f3922..ad41cf4261 100755 --- a/packages/python/devel/Cheetah/build +++ b/packages/python/devel/Cheetah/build @@ -2,11 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build Python -$SCRIPTS/build distribute -$SCRIPTS/build distutilscross - export PYTHONXCPREFIX="$SYSROOT_PREFIX/usr" export LDFLAGS="$LDFLAGS -L$SYSROOT_PREFIX/usr/lib -L$SYSROOT_PREFIX/lib" diff --git a/packages/python/devel/Cheetah/install b/packages/python/devel/Cheetah/install index 4d0a7235de..73886a0890 100755 --- a/packages/python/devel/Cheetah/install +++ b/packages/python/devel/Cheetah/install @@ -2,7 +2,4 @@ . config/options $1 -$SCRIPTS/install Python -$SCRIPTS/install distribute - cp -PR $PKG_BUILD/.install/* $INSTALL diff --git a/packages/python/devel/Cheetah/meta b/packages/python/devel/Cheetah/meta new file mode 100644 index 0000000000..bdf06a5768 --- /dev/null +++ b/packages/python/devel/Cheetah/meta @@ -0,0 +1,14 @@ +PKG_NAME="Cheetah" +PKG_VERSION="2.4.2.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.cheetahtemplate.org/" +PKG_URL="http://pypi.python.org/packages/source/C/Cheetah/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="Python distribute" +PKG_BUILD_DEPENDS="toolchain Python distribute distutilscross" +PKG_PRIORITY="optional" +PKG_SECTION="python/devel" +PKG_SHORTDESC="cheetah: Python-powered template engine and code generator" +PKG_LONGDESC="Cheetah is a Python-powered template engine and code generator. It can be used as a standalone utility or it can be combined with other tools. Cheetah has many potential uses, but web developers looking for a viable alternative to ASP, JSP, PHP and PSP are expected to be its principle user group." +PKG_IS_ADDON="no" diff --git a/packages/python/devel/Cheetah/patches/Cheetah-setuptools.diff b/packages/python/devel/Cheetah/patches/Cheetah-setuptools.diff deleted file mode 100644 index c1819042fa..0000000000 --- a/packages/python/devel/Cheetah/patches/Cheetah-setuptools.diff +++ /dev/null @@ -1,23 +0,0 @@ -diff -Naur Cheetah-2.0.1/SetupTools.py Cheetah-2.0.1.patch/SetupTools.py ---- Cheetah-2.0.1/SetupTools.py 2007-11-03 20:44:38.000000000 +0100 -+++ Cheetah-2.0.1.patch/SetupTools.py 2010-10-19 00:34:45.377616641 +0200 -@@ -19,18 +19,7 @@ - import string - import traceback - --from distutils.core import setup --if 'CHEETAH_USE_SETUPTOOLS' in os.environ: -- # @@TR: Please note that this is for testing purposes only! PEAK setuptools -- # is not required or recommended for installing Cheetah. Downstream -- # package managers (linux distros, etc.) should *not* enable this. -- try: -- # use http://peak.telecommunity.com/DevCenter/setuptools if it's installed -- # requires Py >=2.3 -- from setuptools import setup -- except ImportError: -- from distutils.core import setup -- -+from setuptools import setup - from distutils.core import Command - from distutils.command.install_data import install_data - diff --git a/packages/python/devel/Cheetah/url b/packages/python/devel/Cheetah/url deleted file mode 100644 index 73f6cf2f46..0000000000 --- a/packages/python/devel/Cheetah/url +++ /dev/null @@ -1 +0,0 @@ -http://mesh.dl.sourceforge.net/sourceforge/cheetahtemplate/Cheetah-2.0.1.tar.gz From b1b4df561d79f534a07d5c876a5c7cbe9b28a6ee Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 15 Nov 2010 15:06:02 +0100 Subject: [PATCH 295/850] pygobject: add metafile support Signed-off-by: Stephan Raue --- packages/python/devel/pygobject/build | 5 ----- packages/python/devel/pygobject/install | 6 +----- packages/python/devel/pygobject/meta | 14 ++++++++++++++ packages/python/devel/pygobject/url | 1 - 4 files changed, 15 insertions(+), 11 deletions(-) create mode 100644 packages/python/devel/pygobject/meta delete mode 100644 packages/python/devel/pygobject/url diff --git a/packages/python/devel/pygobject/build b/packages/python/devel/pygobject/build index 053a111d4a..6ae8656049 100755 --- a/packages/python/devel/pygobject/build +++ b/packages/python/devel/pygobject/build @@ -2,11 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build Python -$SCRIPTS/build glib -$SCRIPTS/build libffi - PYTHON_LIBDIR="`ls -d $SYSROOT_PREFIX/usr/lib/python*`" cd $PKG_BUILD diff --git a/packages/python/devel/pygobject/install b/packages/python/devel/pygobject/install index efb7caf058..b06e231ed5 100755 --- a/packages/python/devel/pygobject/install +++ b/packages/python/devel/pygobject/install @@ -2,14 +2,10 @@ . config/options $1 -$SCRIPTS/install Python -$SCRIPTS/install glib -$SCRIPTS/install libffi - PYTHON_LIB_DIR=`ls -d $INSTALL/usr/lib/python*` mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/glib/.libs/libpyglib*.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/glib/.libs/libpyglib*.so* $INSTALL/usr/lib mkdir -p $PYTHON_LIB_DIR/site-packages cp $PKG_BUILD/pygtk.py $PYTHON_LIB_DIR/site-packages diff --git a/packages/python/devel/pygobject/meta b/packages/python/devel/pygobject/meta new file mode 100644 index 0000000000..9dbbe18a33 --- /dev/null +++ b/packages/python/devel/pygobject/meta @@ -0,0 +1,14 @@ +PKG_NAME="pygobject" +PKG_VERSION="2.26.0" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="LGPL" +PKG_SITE="http://www.pygtk.org/" +PKG_URL="http://ftp.gnome.org/pub/GNOME/sources/pygobject/2.26/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="Python glib libffi" +PKG_BUILD_DEPENDS="toolchain Python glib libffi" +PKG_PRIORITY="optional" +PKG_SECTION="python/devel" +PKG_SHORTDESC="pygobject: The Python bindings for GObject" +PKG_LONGDESC="PyGObject provides a convenient wrapper for the GObject+ library for use in Python programs, and takes care of many of the boring details such as managing memory and type casting. When combined with PyGTK, PyORBit and gnome-python, it can be used to write full featured Gnome applications." +PKG_IS_ADDON="no" diff --git a/packages/python/devel/pygobject/url b/packages/python/devel/pygobject/url deleted file mode 100644 index 2e3f5fce4e..0000000000 --- a/packages/python/devel/pygobject/url +++ /dev/null @@ -1 +0,0 @@ -http://ftp.gnome.org/pub/GNOME/sources/pygobject/2.26/pygobject-2.26.0.tar.bz2 \ No newline at end of file From 57371d2c1a05c6016a16099d0db13edda274329b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 15 Nov 2010 15:06:17 +0100 Subject: [PATCH 296/850] distutilscross: add metafile support Signed-off-by: Stephan Raue --- packages/python/devel/distutilscross/build | 4 ---- packages/python/devel/distutilscross/meta | 14 ++++++++++++++ packages/python/devel/distutilscross/url | 1 - 3 files changed, 14 insertions(+), 5 deletions(-) create mode 100644 packages/python/devel/distutilscross/meta delete mode 100644 packages/python/devel/distutilscross/url diff --git a/packages/python/devel/distutilscross/build b/packages/python/devel/distutilscross/build index 0618e4581d..a7e5e1c0a7 100755 --- a/packages/python/devel/distutilscross/build +++ b/packages/python/devel/distutilscross/build @@ -2,10 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build Python -$SCRIPTS/build distribute - cd $PKG_BUILD python setup.py install --prefix=$ROOT/$TOOLCHAIN diff --git a/packages/python/devel/distutilscross/meta b/packages/python/devel/distutilscross/meta new file mode 100644 index 0000000000..e526b2ea1d --- /dev/null +++ b/packages/python/devel/distutilscross/meta @@ -0,0 +1,14 @@ +PKG_NAME="distutilscross" +PKG_VERSION="0.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://bitbucket.org/lambacck/distutilscross/" +PKG_URL="http://pypi.python.org/packages/source/d/distutilscross/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain Python distribute" +PKG_PRIORITY="optional" +PKG_SECTION="python/devel" +PKG_SHORTDESC="distutilscross: Cross Compile Python Extensions" +PKG_LONGDESC="distutilscross enhances distutils to support Cross Compile of Python extensions" +PKG_IS_ADDON="no" diff --git a/packages/python/devel/distutilscross/url b/packages/python/devel/distutilscross/url deleted file mode 100644 index 66faf4f942..0000000000 --- a/packages/python/devel/distutilscross/url +++ /dev/null @@ -1 +0,0 @@ -http://pypi.python.org/packages/source/d/distutilscross/distutilscross-0.1.tar.gz \ No newline at end of file From 34d8285e6d118dcc687e5eae249bb7fc6b63c69c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 15 Nov 2010 15:06:47 +0100 Subject: [PATCH 297/850] distribute: cleanup Signed-off-by: Stephan Raue --- packages/python/devel/distribute/build | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/python/devel/distribute/build b/packages/python/devel/distribute/build index b83c24d652..a7e5e1c0a7 100755 --- a/packages/python/devel/distribute/build +++ b/packages/python/devel/distribute/build @@ -4,10 +4,4 @@ cd $PKG_BUILD -#PYTHON_LIB_DIR="`ls -d $SYSROOT_PREFIX/usr/lib/python*`" -#PYTHON_IMAGE_DIR="`ls -d $ROOT/$BUILD/image/system/usr/lib/python*`" - -#export PYTHONPATH="$PYTHON_LIB_DIR/site-packages:$PYTHON_IMAGE_DIR/site-packages" - python setup.py install --prefix=$ROOT/$TOOLCHAIN -#python setup.py install --prefix=$SYSROOT_PREFIX/usr From 7906b10344a076284d741ff578d346b577a26f95 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 15 Nov 2010 15:16:34 +0100 Subject: [PATCH 298/850] pyOpenSSL: update to pyOpenSSL-0.11, add metafile support Signed-off-by: Stephan Raue --- packages/python/security/pyOpenSSL/build | 5 ----- packages/python/security/pyOpenSSL/install | 3 --- packages/python/security/pyOpenSSL/meta | 15 +++++++++++++++ packages/python/security/pyOpenSSL/url | 1 - 4 files changed, 15 insertions(+), 9 deletions(-) create mode 100644 packages/python/security/pyOpenSSL/meta delete mode 100644 packages/python/security/pyOpenSSL/url diff --git a/packages/python/security/pyOpenSSL/build b/packages/python/security/pyOpenSSL/build index de5b62cfb5..ad41cf4261 100755 --- a/packages/python/security/pyOpenSSL/build +++ b/packages/python/security/pyOpenSSL/build @@ -2,11 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build Python -$SCRIPTS/build distutilscross -$SCRIPTS/build openssl - export PYTHONXCPREFIX="$SYSROOT_PREFIX/usr" export LDFLAGS="$LDFLAGS -L$SYSROOT_PREFIX/usr/lib -L$SYSROOT_PREFIX/lib" diff --git a/packages/python/security/pyOpenSSL/install b/packages/python/security/pyOpenSSL/install index 34d4bd411e..73886a0890 100755 --- a/packages/python/security/pyOpenSSL/install +++ b/packages/python/security/pyOpenSSL/install @@ -2,7 +2,4 @@ . config/options $1 -$SCRIPTS/install Python -$SCRIPTS/install openssl - cp -PR $PKG_BUILD/.install/* $INSTALL diff --git a/packages/python/security/pyOpenSSL/meta b/packages/python/security/pyOpenSSL/meta new file mode 100644 index 0000000000..6bc84adc81 --- /dev/null +++ b/packages/python/security/pyOpenSSL/meta @@ -0,0 +1,15 @@ +PKG_NAME="pyOpenSSL" +PKG_VERSION="0.11" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="LGPL" +PKG_SITE="https://launchpad.net/pyopenssl" +PKG_URL="http://launchpad.net/pyopenssl/main/$PKG_VERSION/+download/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="Python distutilscross openssl" +PKG_BUILD_DEPENDS="toolchain Python distutilscross openssl" +PKG_PRIORITY="optional" +PKG_SECTION="python/security" +PKG_SHORTDESC="pyOpenSSL: Python interface to the OpenSSL library" +PKG_LONGDESC="Python interface to the OpenSSL library. Includes: SSL Context objects, SSL Connection objects, using Python sockets as transport layer. The Connection object wraps all the socket methods and can therefore be used interchangeably." +PKG_IS_ADDON="no" + diff --git a/packages/python/security/pyOpenSSL/url b/packages/python/security/pyOpenSSL/url deleted file mode 100644 index fa131a2078..0000000000 --- a/packages/python/security/pyOpenSSL/url +++ /dev/null @@ -1 +0,0 @@ -http://pypi.python.org/packages/source/p/pyOpenSSL/pyOpenSSL-0.10.tar.gz From df54370e553fe9096f44a99d917cceb3e6a7a919 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 15 Nov 2010 15:17:56 +0100 Subject: [PATCH 299/850] pyOpenSSL: rename patches Signed-off-by: Stephan Raue --- ...{pyOpenSSL-setuptools.diff => pyOpenSSL-0.11-setuptools.patch} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/python/security/pyOpenSSL/patches/{pyOpenSSL-setuptools.diff => pyOpenSSL-0.11-setuptools.patch} (100%) diff --git a/packages/python/security/pyOpenSSL/patches/pyOpenSSL-setuptools.diff b/packages/python/security/pyOpenSSL/patches/pyOpenSSL-0.11-setuptools.patch similarity index 100% rename from packages/python/security/pyOpenSSL/patches/pyOpenSSL-setuptools.diff rename to packages/python/security/pyOpenSSL/patches/pyOpenSSL-0.11-setuptools.patch From ce9fc7593f1cb07378ede34195fa637a6660a0ac Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 15 Nov 2010 15:25:55 +0100 Subject: [PATCH 300/850] feedparser: add metafile support Signed-off-by: Stephan Raue --- packages/python/web/feedparser/build | 5 ----- packages/python/web/feedparser/install | 3 --- packages/python/web/feedparser/meta | 14 ++++++++++++++ ...ptools.diff => feedparser-4.1-setuptools.patch} | 0 packages/python/web/feedparser/url | 1 - 5 files changed, 14 insertions(+), 9 deletions(-) create mode 100644 packages/python/web/feedparser/meta rename packages/python/web/feedparser/patches/{feedparser-setuptools.diff => feedparser-4.1-setuptools.patch} (100%) delete mode 100644 packages/python/web/feedparser/url diff --git a/packages/python/web/feedparser/build b/packages/python/web/feedparser/build index 833810c468..42f2c0e873 100755 --- a/packages/python/web/feedparser/build +++ b/packages/python/web/feedparser/build @@ -2,11 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build Python -$SCRIPTS/build distribute -$SCRIPTS/build distutilscross - export PYTHONXCPREFIX="$SYSROOT_PREFIX/usr" export LDFLAGS="$LDFLAGS -L$SYSROOT_PREFIX/usr/lib -L$SYSROOT_PREFIX/lib" diff --git a/packages/python/web/feedparser/install b/packages/python/web/feedparser/install index 4d0a7235de..73886a0890 100755 --- a/packages/python/web/feedparser/install +++ b/packages/python/web/feedparser/install @@ -2,7 +2,4 @@ . config/options $1 -$SCRIPTS/install Python -$SCRIPTS/install distribute - cp -PR $PKG_BUILD/.install/* $INSTALL diff --git a/packages/python/web/feedparser/meta b/packages/python/web/feedparser/meta new file mode 100644 index 0000000000..37190e0c90 --- /dev/null +++ b/packages/python/web/feedparser/meta @@ -0,0 +1,14 @@ +PKG_NAME="feedparser" +PKG_VERSION="4.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="MIT" +PKG_SITE="http://www.feedparser.org/" +PKG_URL="http://poc.ginf.hu/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="Python distribute" +PKG_BUILD_DEPENDS="toolchain Python distribute distutilscross" +PKG_PRIORITY="optional" +PKG_SECTION="python/web" +PKG_SHORTDESC="feedparser: Parse RSS and Atom feeds in Python." +PKG_LONGDESC="Parse RSS and Atom feeds in Python." +PKG_IS_ADDON="no" diff --git a/packages/python/web/feedparser/patches/feedparser-setuptools.diff b/packages/python/web/feedparser/patches/feedparser-4.1-setuptools.patch similarity index 100% rename from packages/python/web/feedparser/patches/feedparser-setuptools.diff rename to packages/python/web/feedparser/patches/feedparser-4.1-setuptools.patch diff --git a/packages/python/web/feedparser/url b/packages/python/web/feedparser/url deleted file mode 100644 index 7242138af9..0000000000 --- a/packages/python/web/feedparser/url +++ /dev/null @@ -1 +0,0 @@ -http://poc.ginf.hu/feedparser-4.1.tar.bz2 From 71792f3476c546483d228cde2b0a1bc08d60e536 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 15 Nov 2010 15:26:27 +0100 Subject: [PATCH 301/850] TwistedCore: rename patches Signed-off-by: Stephan Raue --- ...edCore-setuptools.diff => TwistedCore-10.1.0-setuptools.patch} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/python/web/TwistedCore/patches/{TwistedCore-setuptools.diff => TwistedCore-10.1.0-setuptools.patch} (100%) diff --git a/packages/python/web/TwistedCore/patches/TwistedCore-setuptools.diff b/packages/python/web/TwistedCore/patches/TwistedCore-10.1.0-setuptools.patch similarity index 100% rename from packages/python/web/TwistedCore/patches/TwistedCore-setuptools.diff rename to packages/python/web/TwistedCore/patches/TwistedCore-10.1.0-setuptools.patch From 471ae4cafdbe59a52bad226e23b746ee7503abd7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 15 Nov 2010 15:36:01 +0100 Subject: [PATCH 302/850] libass: fix download url Signed-off-by: Stephan Raue --- packages/multimedia/libass/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/multimedia/libass/meta b/packages/multimedia/libass/meta index b001d41ecf..1d88540c6a 100644 --- a/packages/multimedia/libass/meta +++ b/packages/multimedia/libass/meta @@ -4,7 +4,7 @@ PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="BSD" PKG_SITE="http://code.google.com/p/libass/" -PKG_URL="http://libass.googlecode.com/files/release/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_URL="http://libass.googlecode.com/files/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="freetype fontconfig enca" PKG_BUILD_DEPENDS="toolchain freetype fontconfig enca" PKG_PRIORITY="optional" From 4a0fd2e3ae333ac08ea24a8f0a98e4940b1dadeb Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 15 Nov 2010 17:28:43 +0100 Subject: [PATCH 303/850] PyBluez: add meta file support Signed-off-by: Stephan Raue --- packages/python/system/PyBluez/build | 6 ------ packages/python/system/PyBluez/install | 4 ---- packages/python/system/PyBluez/meta | 14 ++++++++++++++ ...tuptools.diff => PyBluez-0.18-setuptools.patch} | 0 packages/python/system/PyBluez/url | 1 - 5 files changed, 14 insertions(+), 11 deletions(-) create mode 100644 packages/python/system/PyBluez/meta rename packages/python/system/PyBluez/patches/{PyBluez-setuptools.diff => PyBluez-0.18-setuptools.patch} (100%) delete mode 100644 packages/python/system/PyBluez/url diff --git a/packages/python/system/PyBluez/build b/packages/python/system/PyBluez/build index 878ba9a4cc..42f2c0e873 100755 --- a/packages/python/system/PyBluez/build +++ b/packages/python/system/PyBluez/build @@ -2,12 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build Python -$SCRIPTS/build distutilscross -$SCRIPTS/build distribute -$SCRIPTS/build bluez - export PYTHONXCPREFIX="$SYSROOT_PREFIX/usr" export LDFLAGS="$LDFLAGS -L$SYSROOT_PREFIX/usr/lib -L$SYSROOT_PREFIX/lib" diff --git a/packages/python/system/PyBluez/install b/packages/python/system/PyBluez/install index eea8ed6655..73886a0890 100755 --- a/packages/python/system/PyBluez/install +++ b/packages/python/system/PyBluez/install @@ -2,8 +2,4 @@ . config/options $1 -$SCRIPTS/install Python -$SCRIPTS/install distribute -$SCRIPTS/install bluez - cp -PR $PKG_BUILD/.install/* $INSTALL diff --git a/packages/python/system/PyBluez/meta b/packages/python/system/PyBluez/meta new file mode 100644 index 0000000000..e7fe4a9d69 --- /dev/null +++ b/packages/python/system/PyBluez/meta @@ -0,0 +1,14 @@ +PKG_NAME="PyBluez" +PKG_VERSION="0.18" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://code.google.com/p/pybluez/" +PKG_URL="http://pybluez.googlecode.com/files/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="Python distribute bluez" +PKG_BUILD_DEPENDS="toolchain Python distutilscross distribute bluez" +PKG_PRIORITY="optional" +PKG_SECTION="python/system" +PKG_SHORTDESC="PyBluez: an effort to create python wrappers around system Bluetooth resources" +PKG_LONGDESC="PyBluez is an effort to create python wrappers around system Bluetooth resources to allow Python developers to easily and quickly create Bluetooth applications." +PKG_IS_ADDON="no" diff --git a/packages/python/system/PyBluez/patches/PyBluez-setuptools.diff b/packages/python/system/PyBluez/patches/PyBluez-0.18-setuptools.patch similarity index 100% rename from packages/python/system/PyBluez/patches/PyBluez-setuptools.diff rename to packages/python/system/PyBluez/patches/PyBluez-0.18-setuptools.patch diff --git a/packages/python/system/PyBluez/url b/packages/python/system/PyBluez/url deleted file mode 100644 index e3bf882c8b..0000000000 --- a/packages/python/system/PyBluez/url +++ /dev/null @@ -1 +0,0 @@ -http://pybluez.googlecode.com/files/PyBluez-0.18.tar.gz \ No newline at end of file From 4a6d982c6102fd9496e433220b33d487bc33a86b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 15 Nov 2010 17:29:00 +0100 Subject: [PATCH 304/850] dbus-python: add meta file support Signed-off-by: Stephan Raue --- packages/python/system/dbus-python/build | 5 ----- packages/python/system/dbus-python/install | 14 +++++--------- packages/python/system/dbus-python/meta | 14 ++++++++++++++ packages/python/system/dbus-python/url | 1 - 4 files changed, 19 insertions(+), 15 deletions(-) create mode 100644 packages/python/system/dbus-python/meta delete mode 100644 packages/python/system/dbus-python/url diff --git a/packages/python/system/dbus-python/build b/packages/python/system/dbus-python/build index 9f3eb8478d..d00f9a32fa 100755 --- a/packages/python/system/dbus-python/build +++ b/packages/python/system/dbus-python/build @@ -2,11 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build Python -$SCRIPTS/build dbus -$SCRIPTS/build dbus-glib - PYTHON_LIBDIR="`ls -d $SYSROOT_PREFIX/usr/lib/python*`" cd $PKG_BUILD diff --git a/packages/python/system/dbus-python/install b/packages/python/system/dbus-python/install index 852c35b961..b16e823dcd 100755 --- a/packages/python/system/dbus-python/install +++ b/packages/python/system/dbus-python/install @@ -2,19 +2,15 @@ . config/options $1 -$SCRIPTS/install Python -$SCRIPTS/install dbus -$SCRIPTS/install dbus-glib - PYTHON_LIB_DIR=`ls -d $INSTALL/usr/lib/python*` mkdir -p $PYTHON_LIB_DIR/site-packages - cp -PR $PKG_BUILD/_dbus_bindings/.libs/*.so $PYTHON_LIB_DIR/site-packages - cp -PR $PKG_BUILD/_dbus_glib_bindings/.libs/*.so $PYTHON_LIB_DIR/site-packages - cp -PR $PKG_BUILD/*.pyc $PYTHON_LIB_DIR/site-packages + cp -P $PKG_BUILD/_dbus_bindings/.libs/*.so $PYTHON_LIB_DIR/site-packages + cp -P $PKG_BUILD/_dbus_glib_bindings/.libs/*.so $PYTHON_LIB_DIR/site-packages + cp $PKG_BUILD/*.pyc $PYTHON_LIB_DIR/site-packages mkdir -p $PYTHON_LIB_DIR/site-packages/dbus - cp -PR $PKG_BUILD/dbus/*.pyc $PYTHON_LIB_DIR/site-packages/dbus + cp $PKG_BUILD/dbus/*.pyc $PYTHON_LIB_DIR/site-packages/dbus mkdir -p $PYTHON_LIB_DIR/site-packages/dbus/mainloop - cp -PR $PKG_BUILD/dbus/mainloop/*.pyc $PYTHON_LIB_DIR/site-packages/dbus/mainloop + cp $PKG_BUILD/dbus/mainloop/*.pyc $PYTHON_LIB_DIR/site-packages/dbus/mainloop diff --git a/packages/python/system/dbus-python/meta b/packages/python/system/dbus-python/meta new file mode 100644 index 0000000000..14f4180822 --- /dev/null +++ b/packages/python/system/dbus-python/meta @@ -0,0 +1,14 @@ +PKG_NAME="dbus-python" +PKG_VERSION="0.83.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://freedesktop.org/wiki/Software/dbus" +PKG_URL="http://dbus.freedesktop.org/releases/dbus-python/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="Python dbus dbus-glib" +PKG_BUILD_DEPENDS="toolchain Python dbus dbus-glib" +PKG_PRIORITY="optional" +PKG_SECTION="python/system" +PKG_SHORTDESC="dbus-python: A message bus system" +PKG_LONGDESC="D-BUS is a message bus, used for sending messages between applications. Conceptually, it fits somewhere in between raw sockets and CORBA in terms of complexity. D-BUS supports broadcast messages, asynchronous messages (thus decreasing latency), authentication, and more. It is designed to be low-overhead; messages are sent using a binary protocol, not using XML. D-BUS also supports a method call mapping for its messages, but it is not required; this makes using the system quite simple." +PKG_IS_ADDON="no" diff --git a/packages/python/system/dbus-python/url b/packages/python/system/dbus-python/url deleted file mode 100644 index 50df5d53f6..0000000000 --- a/packages/python/system/dbus-python/url +++ /dev/null @@ -1 +0,0 @@ -http://dbus.freedesktop.org/releases/dbus-python/dbus-python-0.83.1.tar.gz \ No newline at end of file From d1844cbccd0bb71d858783b73adcd1423d5e913a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 15 Nov 2010 17:29:10 +0100 Subject: [PATCH 305/850] yenc: add meta file support Signed-off-by: Stephan Raue --- packages/python/system/yenc/build | 5 ----- packages/python/system/yenc/install | 3 --- packages/python/system/yenc/meta | 15 +++++++++++++++ ...-setuptools.diff => yenc-0.3-setuptools.patch} | 0 packages/python/system/yenc/url | 1 - 5 files changed, 15 insertions(+), 9 deletions(-) create mode 100644 packages/python/system/yenc/meta rename packages/python/system/yenc/patches/{yenc-setuptools.diff => yenc-0.3-setuptools.patch} (100%) delete mode 100644 packages/python/system/yenc/url diff --git a/packages/python/system/yenc/build b/packages/python/system/yenc/build index 76397f3922..ad41cf4261 100755 --- a/packages/python/system/yenc/build +++ b/packages/python/system/yenc/build @@ -2,11 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build Python -$SCRIPTS/build distribute -$SCRIPTS/build distutilscross - export PYTHONXCPREFIX="$SYSROOT_PREFIX/usr" export LDFLAGS="$LDFLAGS -L$SYSROOT_PREFIX/usr/lib -L$SYSROOT_PREFIX/lib" diff --git a/packages/python/system/yenc/install b/packages/python/system/yenc/install index 4d0a7235de..73886a0890 100755 --- a/packages/python/system/yenc/install +++ b/packages/python/system/yenc/install @@ -2,7 +2,4 @@ . config/options $1 -$SCRIPTS/install Python -$SCRIPTS/install distribute - cp -PR $PKG_BUILD/.install/* $INSTALL diff --git a/packages/python/system/yenc/meta b/packages/python/system/yenc/meta new file mode 100644 index 0000000000..304d2ac42e --- /dev/null +++ b/packages/python/system/yenc/meta @@ -0,0 +1,15 @@ +PKG_NAME="yenc" +PKG_VERSION="0.3" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.golug.it/yenc.html" +PKG_URL="http://www.golug.it/pub/yenc/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="Python distribute" +PKG_BUILD_DEPENDS="toolchain Python distribute distutilscross" +PKG_PRIORITY="optional" +PKG_SECTION="python/system" +PKG_SHORTDESC="yenc: a fairly simple module, it provide only raw yEnc encoding/decoding with builitin crc32 calculation." +PKG_LONGDESC="This a fairly simple module, it provide only raw yEnc encoding/decoding with builitin crc32 calculation. Header parsing, checkings and yenc formatting are left to you (see examples directory for possible implementations). The interface is similar to the uu module from python standard library." +PKG_IS_ADDON="no" + diff --git a/packages/python/system/yenc/patches/yenc-setuptools.diff b/packages/python/system/yenc/patches/yenc-0.3-setuptools.patch similarity index 100% rename from packages/python/system/yenc/patches/yenc-setuptools.diff rename to packages/python/system/yenc/patches/yenc-0.3-setuptools.patch diff --git a/packages/python/system/yenc/url b/packages/python/system/yenc/url deleted file mode 100644 index 40e4af7695..0000000000 --- a/packages/python/system/yenc/url +++ /dev/null @@ -1 +0,0 @@ -http://www.golug.it/pub/yenc/yenc-0.3.tar.gz From 81ef657bc3964b1536c27738ab19b9f4cc9395e4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 13:17:05 +0100 Subject: [PATCH 306/850] xorg-server: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/xserver/xorg-server/build | 27 -------------- packages/x11/xserver/xorg-server/install | 36 ------------------- packages/x11/xserver/xorg-server/meta | 36 +++++++++++++++++++ ... => xorg-server-1.9.2-05_pkg_config.patch} | 0 ...he_xkbcomp_output_for_fast_start_up.patch} | 0 ...py_heuristic_first_for_initial_mode.patch} | 0 ...iff => xorg-server-1.9.2-12_nouveau.patch} | 0 ...r-1.9.2-20_extra_modelines_fromxorg.patch} | 0 ...rg-server-1.9.2-21_x11_nonroot-vesa.patch} | 0 ...> xorg-server-1.9.2-22_bg_none_root.patch} | 0 ...-server-1.9.2-22_do_not_zap_xserver.patch} | 0 ...erver-1.9.2-25_less_acpi_brokenness.patch} | 0 packages/x11/xserver/xorg-server/url | 1 - 13 files changed, 36 insertions(+), 64 deletions(-) create mode 100644 packages/x11/xserver/xorg-server/meta rename packages/x11/xserver/xorg-server/patches/{xorg-server-1.8.2-pkg_config.diff => xorg-server-1.9.2-05_pkg_config.patch} (100%) rename packages/x11/xserver/xorg-server/patches/{cache-xkbcomp-output-for-fast-start-up.diff => xorg-server-1.9.2-10_cache_xkbcomp_output_for_fast_start_up.patch} (100%) rename packages/x11/xserver/xorg-server/patches/{use-sloppy-heuristic-first-for-initial-mode.diff => xorg-server-1.9.2-11_use_sloppy_heuristic_first_for_initial_mode.patch} (100%) rename packages/x11/xserver/xorg-server/patches/{xserver-1.6.1-nouveau.diff => xorg-server-1.9.2-12_nouveau.patch} (100%) rename packages/x11/xserver/xorg-server/patches/{20_extra_modelines_fromxorg.diff => xorg-server-1.9.2-20_extra_modelines_fromxorg.patch} (100%) rename packages/x11/xserver/xorg-server/patches/{xorg-x11-nonroot-vesa.diff => xorg-server-1.9.2-21_x11_nonroot-vesa.patch} (100%) rename packages/x11/xserver/xorg-server/patches/{xserver-1.5.0-bg-none-root.diff => xorg-server-1.9.2-22_bg_none_root.patch} (100%) rename packages/x11/xserver/xorg-server/patches/{do-not-zap-xserver.diff => xorg-server-1.9.2-22_do_not_zap_xserver.patch} (100%) rename packages/x11/xserver/xorg-server/patches/{xserver-1.6.0-less-acpi-brokenness.diff => xorg-server-1.9.2-25_less_acpi_brokenness.patch} (100%) delete mode 100644 packages/x11/xserver/xorg-server/url diff --git a/packages/x11/xserver/xorg-server/build b/packages/x11/xserver/xorg-server/build index 6f1655484f..c1a79ae39d 100755 --- a/packages/x11/xserver/xorg-server/build +++ b/packages/x11/xserver/xorg-server/build @@ -6,34 +6,7 @@ XORG_SRC="$PKG_BUILD/hw/xfree86" get_graphicdrivers -$SCRIPTS/build toolchain - -$SCRIPTS/build util-macros -$SCRIPTS/build font-util -$SCRIPTS/build fontsproto -$SCRIPTS/build randrproto -$SCRIPTS/build renderproto -$SCRIPTS/build scrnsaverproto -$SCRIPTS/build videoproto -$SCRIPTS/build inputproto -$SCRIPTS/build xf86dgaproto -$SCRIPTS/build xf86driproto -$SCRIPTS/build xf86miscproto -$SCRIPTS/build glproto -$SCRIPTS/build libpciaccess -$SCRIPTS/build libX11 -$SCRIPTS/build libXfont -$SCRIPTS/build libxkbfile -$SCRIPTS/build libdrm -$SCRIPTS/build Mesa-GL -$SCRIPTS/build openssl -$SCRIPTS/build freetype -$SCRIPTS/build pixman -$SCRIPTS/build fontsproto -$SCRIPTS/build udev - if [ "$XINERAMA_SUPPORT" = "yes" ]; then - $SCRIPTS/build libXinerama XORG_XINERAMA="--enable-xinerama" else XORG_XINERAMA="--disable-xinerama" diff --git a/packages/x11/xserver/xorg-server/install b/packages/x11/xserver/xorg-server/install index d4b352685c..768fb4ad6e 100755 --- a/packages/x11/xserver/xorg-server/install +++ b/packages/x11/xserver/xorg-server/install @@ -4,18 +4,6 @@ get_graphicdrivers -$SCRIPTS/install libpciaccess -$SCRIPTS/install freetype -$SCRIPTS/install openssl -$SCRIPTS/install libX11 -$SCRIPTS/install libXfont -$SCRIPTS/install libdrm -$SCRIPTS/install Mesa -$SCRIPTS/install pixman -$SCRIPTS/install udev - -[ "$XINERAMA_SUPPORT" = "yes" ] && $SCRIPTS/install libXinerama - XORG_SRC="$PKG_BUILD/hw/xfree86" XORG_DST="$INSTALL/$XORG_PATH_MODULES" @@ -54,30 +42,6 @@ mkdir -p $INSTALL/usr/lib/xorg mkdir -p $INSTALL/usr/share/X11/xorg.conf.d cp $PKG_BUILD/config/10-evdev.conf $INSTALL/usr/share/X11/xorg.conf.d -#Fonts - $SCRIPTS/install encodings - $SCRIPTS/install font-xfree86-type1 - $SCRIPTS/install font-bitstream-type1 - $SCRIPTS/install font-misc-misc - -#Server - $SCRIPTS/install xkeyboard-config - $SCRIPTS/install xkbcomp - -#Drivers - $SCRIPTS/install xf86-input-evdev -# $SCRIPTS/install xf86-input-synaptics -# $SCRIPTS/install xf86-input-wacom - - for drv in $XORG_DRIVERS; do - $SCRIPTS/install xf86-video-$drv - done - -# Tools - $SCRIPTS/install pciutils - $SCRIPTS/install ratpoison - $SCRIPTS/install xrandr - if [ "$DEVTOOLS" = yes ]; then cp $XORG_SRC/utils/cvt/cvt $INSTALL/usr/bin cp $XORG_SRC/utils/gtf/gtf $INSTALL/usr/bin diff --git a/packages/x11/xserver/xorg-server/meta b/packages/x11/xserver/xorg-server/meta new file mode 100644 index 0000000000..3b4b6aa82d --- /dev/null +++ b/packages/x11/xserver/xorg-server/meta @@ -0,0 +1,36 @@ +PKG_NAME="xorg-server" +PKG_VERSION="1.9.2" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/xserver/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="libpciaccess freetype openssl libX11 libXfont libdrm Mesa pixman udev" +PKG_BUILD_DEPENDS="toolchain util-macros font-util fontsproto randrproto renderproto scrnsaverproto videoproto inputproto xf86dgaproto xf86driproto xf86miscproto glproto libpciaccess libX11 libXfont libxkbfile libdrm Mesa-GL openssl freetype pixman fontsproto udev" +PKG_PRIORITY="optional" +PKG_SECTION="x11/xserver" +PKG_SHORTDESC="xorg-server: The Xorg X server" +PKG_LONGDESC="Xorg is a full featured X server that was originally designed for UNIX and UNIX-like operating systems running on Intel x86 hardware." +PKG_IS_ADDON="no" + +if [ "$XINERAMA_SUPPORT" = "yes" ]; then + PKG_DEPENDS="$PKG_DEPENDS libXinerama" + PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS libXinerama" +fi + +# Additional packages we need for using xorg-server: +# Fonts + PKG_DEPENDS="$PKG_DEPENDS encodings font-xfree86-type1 font-bitstream-type1 font-misc-misc" + +# Server + PKG_DEPENDS="$PKG_DEPENDS xkeyboard-config xkbcomp" + +# Drivers + PKG_DEPENDS="$PKG_DEPENDS xf86-input-evdev" # xf86-input-synaptics xf86-input-wacom + + for drv in $XORG_DRIVERS; do + PKG_DEPENDS="$PKG_DEPENDS xf86-video-$drv" + done + +# Tools + PKG_DEPENDS="$PKG_DEPENDS pciutils ratpoison xrandr" diff --git a/packages/x11/xserver/xorg-server/patches/xorg-server-1.8.2-pkg_config.diff b/packages/x11/xserver/xorg-server/patches/xorg-server-1.9.2-05_pkg_config.patch similarity index 100% rename from packages/x11/xserver/xorg-server/patches/xorg-server-1.8.2-pkg_config.diff rename to packages/x11/xserver/xorg-server/patches/xorg-server-1.9.2-05_pkg_config.patch diff --git a/packages/x11/xserver/xorg-server/patches/cache-xkbcomp-output-for-fast-start-up.diff b/packages/x11/xserver/xorg-server/patches/xorg-server-1.9.2-10_cache_xkbcomp_output_for_fast_start_up.patch similarity index 100% rename from packages/x11/xserver/xorg-server/patches/cache-xkbcomp-output-for-fast-start-up.diff rename to packages/x11/xserver/xorg-server/patches/xorg-server-1.9.2-10_cache_xkbcomp_output_for_fast_start_up.patch diff --git a/packages/x11/xserver/xorg-server/patches/use-sloppy-heuristic-first-for-initial-mode.diff b/packages/x11/xserver/xorg-server/patches/xorg-server-1.9.2-11_use_sloppy_heuristic_first_for_initial_mode.patch similarity index 100% rename from packages/x11/xserver/xorg-server/patches/use-sloppy-heuristic-first-for-initial-mode.diff rename to packages/x11/xserver/xorg-server/patches/xorg-server-1.9.2-11_use_sloppy_heuristic_first_for_initial_mode.patch diff --git a/packages/x11/xserver/xorg-server/patches/xserver-1.6.1-nouveau.diff b/packages/x11/xserver/xorg-server/patches/xorg-server-1.9.2-12_nouveau.patch similarity index 100% rename from packages/x11/xserver/xorg-server/patches/xserver-1.6.1-nouveau.diff rename to packages/x11/xserver/xorg-server/patches/xorg-server-1.9.2-12_nouveau.patch diff --git a/packages/x11/xserver/xorg-server/patches/20_extra_modelines_fromxorg.diff b/packages/x11/xserver/xorg-server/patches/xorg-server-1.9.2-20_extra_modelines_fromxorg.patch similarity index 100% rename from packages/x11/xserver/xorg-server/patches/20_extra_modelines_fromxorg.diff rename to packages/x11/xserver/xorg-server/patches/xorg-server-1.9.2-20_extra_modelines_fromxorg.patch diff --git a/packages/x11/xserver/xorg-server/patches/xorg-x11-nonroot-vesa.diff b/packages/x11/xserver/xorg-server/patches/xorg-server-1.9.2-21_x11_nonroot-vesa.patch similarity index 100% rename from packages/x11/xserver/xorg-server/patches/xorg-x11-nonroot-vesa.diff rename to packages/x11/xserver/xorg-server/patches/xorg-server-1.9.2-21_x11_nonroot-vesa.patch diff --git a/packages/x11/xserver/xorg-server/patches/xserver-1.5.0-bg-none-root.diff b/packages/x11/xserver/xorg-server/patches/xorg-server-1.9.2-22_bg_none_root.patch similarity index 100% rename from packages/x11/xserver/xorg-server/patches/xserver-1.5.0-bg-none-root.diff rename to packages/x11/xserver/xorg-server/patches/xorg-server-1.9.2-22_bg_none_root.patch diff --git a/packages/x11/xserver/xorg-server/patches/do-not-zap-xserver.diff b/packages/x11/xserver/xorg-server/patches/xorg-server-1.9.2-22_do_not_zap_xserver.patch similarity index 100% rename from packages/x11/xserver/xorg-server/patches/do-not-zap-xserver.diff rename to packages/x11/xserver/xorg-server/patches/xorg-server-1.9.2-22_do_not_zap_xserver.patch diff --git a/packages/x11/xserver/xorg-server/patches/xserver-1.6.0-less-acpi-brokenness.diff b/packages/x11/xserver/xorg-server/patches/xorg-server-1.9.2-25_less_acpi_brokenness.patch similarity index 100% rename from packages/x11/xserver/xorg-server/patches/xserver-1.6.0-less-acpi-brokenness.diff rename to packages/x11/xserver/xorg-server/patches/xorg-server-1.9.2-25_less_acpi_brokenness.patch diff --git a/packages/x11/xserver/xorg-server/url b/packages/x11/xserver/xorg-server/url deleted file mode 100644 index 14160a1005..0000000000 --- a/packages/x11/xserver/xorg-server/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/xserver/xorg-server-1.9.2.tar.bz2 \ No newline at end of file From cf0bee7d6e73c50835603e30b50f8be384c317bb Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 13:17:33 +0100 Subject: [PATCH 307/850] fontconfig: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/other/fontconfig/build | 5 ----- packages/x11/other/fontconfig/install | 4 ---- packages/x11/other/fontconfig/meta | 14 ++++++++++++++ packages/x11/other/fontconfig/url | 1 - 4 files changed, 14 insertions(+), 10 deletions(-) create mode 100644 packages/x11/other/fontconfig/meta delete mode 100644 packages/x11/other/fontconfig/url diff --git a/packages/x11/other/fontconfig/build b/packages/x11/other/fontconfig/build index fd91741bcf..da76952f1a 100755 --- a/packages/x11/other/fontconfig/build +++ b/packages/x11/other/fontconfig/build @@ -2,11 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build freetype -$SCRIPTS/build libxml2 -$SCRIPTS/build zlib - # ensure we dont use '-O3' optimization. CFLAGS=`echo $CFLAGS | sed -e "s|-O3|-O2|"` CXXFLAGS=`echo $CXXFLAGS | sed -e "s|-O3|-O2|"` diff --git a/packages/x11/other/fontconfig/install b/packages/x11/other/fontconfig/install index 4021d2c9c4..bb4526d9b8 100755 --- a/packages/x11/other/fontconfig/install +++ b/packages/x11/other/fontconfig/install @@ -2,10 +2,6 @@ . config/options $1 -$SCRIPTS/install zlib -$SCRIPTS/install freetype -$SCRIPTS/install libxml2 - mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/src/.libs/libfontconfig.so* $INSTALL/usr/lib diff --git a/packages/x11/other/fontconfig/meta b/packages/x11/other/fontconfig/meta new file mode 100644 index 0000000000..f21ff503c5 --- /dev/null +++ b/packages/x11/other/fontconfig/meta @@ -0,0 +1,14 @@ +PKG_NAME="fontconfig" +PKG_VERSION="2.8.0" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.fontconfig.org" +PKG_URL="http://fontconfig.org/release/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="freetype libxml2 zlib" +PKG_BUILD_DEPENDS="toolchain freetype libxml2 zlib" +PKG_PRIORITY="optional" +PKG_SECTION="x11/other" +PKG_SHORTDESC="fontconfig: A library for font customization and configuration" +PKG_LONGDESC="Fontconfig is a library for font customization and configuration." +PKG_IS_ADDON="no" diff --git a/packages/x11/other/fontconfig/url b/packages/x11/other/fontconfig/url deleted file mode 100644 index 307a703f05..0000000000 --- a/packages/x11/other/fontconfig/url +++ /dev/null @@ -1 +0,0 @@ -http://fontconfig.org/release/fontconfig-2.8.0.tar.gz \ No newline at end of file From 951a74bb7e35c7cc1eb8ec4358a6cd5e0fe5549a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 13:17:57 +0100 Subject: [PATCH 308/850] xkeyboard-config: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/data/xkeyboard-config/build | 6 ------ packages/x11/data/xkeyboard-config/meta | 14 ++++++++++++++ packages/x11/data/xkeyboard-config/url | 1 - 3 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 packages/x11/data/xkeyboard-config/meta delete mode 100644 packages/x11/data/xkeyboard-config/url diff --git a/packages/x11/data/xkeyboard-config/build b/packages/x11/data/xkeyboard-config/build index 97400b8449..85a7cd0cdf 100755 --- a/packages/x11/data/xkeyboard-config/build +++ b/packages/x11/data/xkeyboard-config/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build xkbcomp - cd $PKG_BUILD XKBCOMP="/usr/bin/xkbcomp" \ ./configure --host=$TARGET_NAME \ @@ -15,8 +12,5 @@ XKBCOMP="/usr/bin/xkbcomp" \ --with-xkb-base=$XORG_PATH_XKB \ --without-xkb-rules-symlink \ -# --with-xkb-rules-symlink=xorg - make - make DESTDIR=`pwd`/.install install diff --git a/packages/x11/data/xkeyboard-config/meta b/packages/x11/data/xkeyboard-config/meta new file mode 100644 index 0000000000..9a1650c110 --- /dev/null +++ b/packages/x11/data/xkeyboard-config/meta @@ -0,0 +1,14 @@ +PKG_NAME="xkeyboard-config" +PKG_VERSION="2.0" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://people.freedesktop.org/~svu/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain xkbcomp" +PKG_PRIORITY="optional" +PKG_SECTION="x11/data" +PKG_SHORTDESC="xkeyboard-config: X keyboard extension data files" +PKG_LONGDESC="X keyboard extension data files." +PKG_IS_ADDON="no" diff --git a/packages/x11/data/xkeyboard-config/url b/packages/x11/data/xkeyboard-config/url deleted file mode 100644 index ef8072ce31..0000000000 --- a/packages/x11/data/xkeyboard-config/url +++ /dev/null @@ -1 +0,0 @@ -http://people.freedesktop.org/~svu/xkeyboard-config-2.0.tar.bz2 \ No newline at end of file From dba080a9ac9ffa40ebf4644dfdfcb3cca302e8ed Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 13:18:18 +0100 Subject: [PATCH 309/850] xwd: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/app/xwd/build | 4 ---- packages/x11/app/xwd/install | 4 ++-- packages/x11/app/xwd/meta | 14 ++++++++++++++ packages/x11/app/xwd/url | 1 - 4 files changed, 16 insertions(+), 7 deletions(-) create mode 100644 packages/x11/app/xwd/meta delete mode 100644 packages/x11/app/xwd/url diff --git a/packages/x11/app/xwd/build b/packages/x11/app/xwd/build index 4aff6c09ee..30f6c85948 100755 --- a/packages/x11/app/xwd/build +++ b/packages/x11/app/xwd/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -11,5 +9,3 @@ cd $PKG_BUILD --sysconfdir=/etc \ make - -$STRIP $1 diff --git a/packages/x11/app/xwd/install b/packages/x11/app/xwd/install index 563ff0dd6c..469b7dee6d 100755 --- a/packages/x11/app/xwd/install +++ b/packages/x11/app/xwd/install @@ -3,5 +3,5 @@ . config/options $1 mkdir -p $INSTALL/usr/bin -cp -PR $PKG_BUILD/$1 $INSTALL/usr/bin -cp -PR $PKG_DIR/scripts/screenshot $INSTALL/usr/bin + cp $PKG_BUILD/$1 $INSTALL/usr/bin + cp $PKG_DIR/scripts/screenshot $INSTALL/usr/bin diff --git a/packages/x11/app/xwd/meta b/packages/x11/app/xwd/meta new file mode 100644 index 0000000000..d1f3a70152 --- /dev/null +++ b/packages/x11/app/xwd/meta @@ -0,0 +1,14 @@ +PKG_NAME="xwd" +PKG_VERSION="1.0.3" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/app/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="x11/app" +PKG_SHORTDESC="xwd: Dumps an image of an X window" +PKG_LONGDESC="Xwd is an X Window System window dumping utility. Xwd allows X users to store window images in a specially formatted dump file." +PKG_IS_ADDON="no" diff --git a/packages/x11/app/xwd/url b/packages/x11/app/xwd/url deleted file mode 100644 index e5cbe6036c..0000000000 --- a/packages/x11/app/xwd/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/app/xwd-1.0.3.tar.bz2 \ No newline at end of file From eff2a1681a43ed114d0b348e290f4863ad0eefb2 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 13:18:37 +0100 Subject: [PATCH 310/850] xrandr: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/app/xrandr/build | 3 --- packages/x11/app/xrandr/install | 1 - packages/x11/app/xrandr/meta | 14 ++++++++++++++ packages/x11/app/xrandr/url | 1 - 4 files changed, 14 insertions(+), 5 deletions(-) create mode 100644 packages/x11/app/xrandr/meta delete mode 100644 packages/x11/app/xrandr/url diff --git a/packages/x11/app/xrandr/build b/packages/x11/app/xrandr/build index df62558a3f..ce9b997b64 100755 --- a/packages/x11/app/xrandr/build +++ b/packages/x11/app/xrandr/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build libXrandr - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/x11/app/xrandr/install b/packages/x11/app/xrandr/install index 2692fc1ef8..7376a20619 100755 --- a/packages/x11/app/xrandr/install +++ b/packages/x11/app/xrandr/install @@ -1,7 +1,6 @@ #!/bin/sh . config/options $1 -$SCRIPTS/install libXrandr mkdir -p $INSTALL/usr/bin cp $PKG_BUILD/$1 $INSTALL/usr/bin diff --git a/packages/x11/app/xrandr/meta b/packages/x11/app/xrandr/meta new file mode 100644 index 0000000000..a0ff0b2e98 --- /dev/null +++ b/packages/x11/app/xrandr/meta @@ -0,0 +1,14 @@ +PKG_NAME="xrandr" +PKG_VERSION="1.3.4" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/app/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="libXrandr" +PKG_BUILD_DEPENDS="toolchain libXrandr" +PKG_PRIORITY="optional" +PKG_SECTION="x11/app" +PKG_SHORTDESC="xrandr: A primitive command line interface to RandR extension" +PKG_LONGDESC="Xrandr is a primitive command line interface to the RandR extension and used to set the screen size, orientation and/or reflection." +PKG_IS_ADDON="no" diff --git a/packages/x11/app/xrandr/url b/packages/x11/app/xrandr/url deleted file mode 100644 index 2086afb759..0000000000 --- a/packages/x11/app/xrandr/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/app/xrandr-1.3.4.tar.bz2 \ No newline at end of file From 864a2e8de0b563061de042e63c7c5f74996164a5 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 13:18:56 +0100 Subject: [PATCH 311/850] xkbcomp: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/app/xkbcomp/build | 3 --- packages/x11/app/xkbcomp/install | 2 -- packages/x11/app/xkbcomp/meta | 14 ++++++++++++++ packages/x11/app/xkbcomp/url | 1 - 4 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 packages/x11/app/xkbcomp/meta delete mode 100644 packages/x11/app/xkbcomp/url diff --git a/packages/x11/app/xkbcomp/build b/packages/x11/app/xkbcomp/build index 2394f415b5..8f123f6a04 100755 --- a/packages/x11/app/xkbcomp/build +++ b/packages/x11/app/xkbcomp/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build libX11 - cd $PKG_BUILD ac_cv_file___xkbparse_c=yes \ diff --git a/packages/x11/app/xkbcomp/install b/packages/x11/app/xkbcomp/install index 0421503101..3314d80b37 100755 --- a/packages/x11/app/xkbcomp/install +++ b/packages/x11/app/xkbcomp/install @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/install libX11 - mkdir -p $INSTALL/usr/bin cp $PKG_BUILD/$1 $INSTALL/usr/bin diff --git a/packages/x11/app/xkbcomp/meta b/packages/x11/app/xkbcomp/meta new file mode 100644 index 0000000000..dca6fcf302 --- /dev/null +++ b/packages/x11/app/xkbcomp/meta @@ -0,0 +1,14 @@ +PKG_NAME="xkbcomp" +PKG_VERSION="1.2.0" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/app/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="libX11" +PKG_BUILD_DEPENDS="toolchain libX11" +PKG_PRIORITY="optional" +PKG_SECTION="x11/app" +PKG_SHORTDESC="xkbcomp: Compiles XKB keyboard description" +PKG_LONGDESC="The xkbcomp keymap compiler converts a description of an XKB keymap into one of several output formats." +PKG_IS_ADDON="no" diff --git a/packages/x11/app/xkbcomp/url b/packages/x11/app/xkbcomp/url deleted file mode 100644 index c2fc48bcce..0000000000 --- a/packages/x11/app/xkbcomp/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/app/xkbcomp-1.2.0.tar.bz2 \ No newline at end of file From 04a9805fa293a408909a343c150ff3df6cbaa5ae Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 13:19:34 +0100 Subject: [PATCH 312/850] ratpoison: rename patches Signed-off-by: Stephan Raue --- ...ratpoison-1.4.5-getline.diff => ratpoison-1.4.5-getline.patch} | 0 ...4.5-staticgravity.diff => ratpoison-1.4.5-staticgravity.patch} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename packages/x11/other/ratpoison/patches/{ratpoison-1.4.5-getline.diff => ratpoison-1.4.5-getline.patch} (100%) rename packages/x11/other/ratpoison/patches/{ratpoison-1.4.5-staticgravity.diff => ratpoison-1.4.5-staticgravity.patch} (100%) diff --git a/packages/x11/other/ratpoison/patches/ratpoison-1.4.5-getline.diff b/packages/x11/other/ratpoison/patches/ratpoison-1.4.5-getline.patch similarity index 100% rename from packages/x11/other/ratpoison/patches/ratpoison-1.4.5-getline.diff rename to packages/x11/other/ratpoison/patches/ratpoison-1.4.5-getline.patch diff --git a/packages/x11/other/ratpoison/patches/ratpoison-1.4.5-staticgravity.diff b/packages/x11/other/ratpoison/patches/ratpoison-1.4.5-staticgravity.patch similarity index 100% rename from packages/x11/other/ratpoison/patches/ratpoison-1.4.5-staticgravity.diff rename to packages/x11/other/ratpoison/patches/ratpoison-1.4.5-staticgravity.patch From 5e0e890163cf9a0621e72a6ea4f08d4034477d03 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 13:20:03 +0100 Subject: [PATCH 313/850] pango: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/toolkits/pango/meta | 14 ++++++++++++++ packages/x11/toolkits/pango/url | 1 - 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/x11/toolkits/pango/meta delete mode 100644 packages/x11/toolkits/pango/url diff --git a/packages/x11/toolkits/pango/meta b/packages/x11/toolkits/pango/meta new file mode 100644 index 0000000000..4b1fa6200d --- /dev/null +++ b/packages/x11/toolkits/pango/meta @@ -0,0 +1,14 @@ +PKG_NAME="pango" +PKG_VERSION="1.28.3" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.pango.org/" +PKG_URL="http://ftp.gnome.org/pub/gnome/sources/pango/1.28/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="glib cairo freetype fontconfig libX11 libXft" +PKG_BUILD_DEPENDS="toolchain glib cairo freetype fontconfig libX11 libXft" +PKG_PRIORITY="optional" +PKG_SECTION="x11/toolkits" +PKG_SHORTDESC="pango: Library for layout and rendering of internationalized text" +PKG_LONGDESC="The goal of the Pango project is to provide an open-source framework for the layout and rendering of internationalized text. Pango is an offshoot of the GTK+ and GNOME projects, and the initial focus is operation in those environments, however there is nothing fundamentally GTK+ or GNOME specific about Pango. Pango uses Unicode for all of its encoding, and will eventually support output in all the worlds major languages." +PKG_IS_ADDON="no" diff --git a/packages/x11/toolkits/pango/url b/packages/x11/toolkits/pango/url deleted file mode 100644 index 5d96504940..0000000000 --- a/packages/x11/toolkits/pango/url +++ /dev/null @@ -1 +0,0 @@ -http://ftp.gnome.org/pub/gnome/sources/pango/1.28/pango-1.28.3.tar.bz2 \ No newline at end of file From 6f67c430b976fe8ff88d27b56b601e03b41793ca Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 13:20:15 +0100 Subject: [PATCH 314/850] gtk+: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/toolkits/gtk+/meta | 14 ++++++++++++++ packages/x11/toolkits/gtk+/url | 1 - 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/x11/toolkits/gtk+/meta delete mode 100644 packages/x11/toolkits/gtk+/url diff --git a/packages/x11/toolkits/gtk+/meta b/packages/x11/toolkits/gtk+/meta new file mode 100644 index 0000000000..3fc2cc6180 --- /dev/null +++ b/packages/x11/toolkits/gtk+/meta @@ -0,0 +1,14 @@ +PKG_NAME="gtk+" +PKG_VERSION="2.22.0" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.gtk.org/" +PKG_URL="http://ftp.gnome.org/pub/gnome/sources/gtk+/2.22/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="atk libX11 libXrandr libXi glib pango cairo gdk-pixbuf" +PKG_BUILD_DEPENDS="toolchain atk libX11 libXrandr libXi glib pango cairo gdk-pixbuf" +PKG_PRIORITY="optional" +PKG_SECTION="x11/toolkits" +PKG_SHORTDESC="gtk+: The Gimp ToolKit (GTK)" +PKG_LONGDESC="This is GTK+. GTK+, which stands for the Gimp ToolKit, is a library for creating graphical user interfaces for the X Window System. It is designed to be small, efficient, and flexible. GTK+ is written in C with a very object-oriented approach." +PKG_IS_ADDON="no" diff --git a/packages/x11/toolkits/gtk+/url b/packages/x11/toolkits/gtk+/url deleted file mode 100644 index d66a4cf260..0000000000 --- a/packages/x11/toolkits/gtk+/url +++ /dev/null @@ -1 +0,0 @@ -http://ftp.gnome.org/pub/gnome/sources/gtk+/2.22/gtk+-2.22.0.tar.bz2 \ No newline at end of file From 931fdbd922276089872d484a37b964e7d4caf7e2 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 13:21:04 +0100 Subject: [PATCH 315/850] linux: add upstream patches for 2.6.37-rc1 Signed-off-by: Stephan Raue --- .../linux-2.6.37-rc1-000_fix_include.patch | 19 +++++++++++++++++++ ...-rc1-000_fix_userspace_build_of_fs.h.patch | 16 ++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 packages/linux/patches/linux-2.6.37-rc1-000_fix_include.patch create mode 100644 packages/linux/patches/linux-2.6.37-rc1-000_fix_userspace_build_of_fs.h.patch diff --git a/packages/linux/patches/linux-2.6.37-rc1-000_fix_include.patch b/packages/linux/patches/linux-2.6.37-rc1-000_fix_include.patch new file mode 100644 index 0000000000..d5d7a1edf6 --- /dev/null +++ b/packages/linux/patches/linux-2.6.37-rc1-000_fix_include.patch @@ -0,0 +1,19 @@ +diff -Naur linux-2.6.37-rc1/include/linux/rtnetlink.h linux-2.6.37-rc1.patch/include/linux/rtnetlink.h +--- linux-2.6.37-rc1/include/linux/rtnetlink.h 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.patch/include/linux/rtnetlink.h 2010-11-15 18:03:38.434438769 +0100 +@@ -6,7 +6,6 @@ + #include + #include + #include +-#include + + /* rtnetlink families. Values up to 127 are reserved for real address + * families, values above 128 may be used arbitrarily. +@@ -606,6 +605,7 @@ + #ifdef __KERNEL__ + + #include ++#include + + static __inline__ int rtattr_strcmp(const struct rtattr *rta, const char *str) + { diff --git a/packages/linux/patches/linux-2.6.37-rc1-000_fix_userspace_build_of_fs.h.patch b/packages/linux/patches/linux-2.6.37-rc1-000_fix_userspace_build_of_fs.h.patch new file mode 100644 index 0000000000..e529618383 --- /dev/null +++ b/packages/linux/patches/linux-2.6.37-rc1-000_fix_userspace_build_of_fs.h.patch @@ -0,0 +1,16 @@ +diff -Naur linux-2.6.37-rc1/include/linux/fs.h linux-2.6.37-rc1.patch/include/linux/fs.h +--- linux-2.6.37-rc1/include/linux/fs.h 2010-11-01 12:54:12.000000000 +0100 ++++ linux-2.6.37-rc1.patch/include/linux/fs.h 2010-11-15 19:06:11.732172159 +0100 +@@ -34,9 +34,9 @@ + #define SEEK_MAX SEEK_END + + struct fstrim_range { +- uint64_t start; +- uint64_t len; +- uint64_t minlen; ++ __u64 start; ++ __u64 len; ++ __u64 minlen; + }; + + /* And dynamically-tunable limits and defaults: */ From 5bea217a8c713c5febc05489d144fa19fa7820e4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 14:25:27 +0100 Subject: [PATCH 316/850] xproto: cleanups Signed-off-by: Stephan Raue --- packages/x11/proto/xproto/build | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/x11/proto/xproto/build b/packages/x11/proto/xproto/build index 8eb9858414..8fe1e3c994 100755 --- a/packages/x11/proto/xproto/build +++ b/packages/x11/proto/xproto/build @@ -10,5 +10,4 @@ cd $PKG_BUILD --prefix=/usr \ make - $MAKEINSTALL From 6b7df347f85b704c66a01597ee540bb548efc771 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 14:26:10 +0100 Subject: [PATCH 317/850] xineramaproto: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/proto/xineramaproto/build | 3 --- packages/x11/proto/xineramaproto/meta | 14 ++++++++++++++ packages/x11/proto/xineramaproto/url | 1 - 3 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 packages/x11/proto/xineramaproto/meta delete mode 100644 packages/x11/proto/xineramaproto/url diff --git a/packages/x11/proto/xineramaproto/build b/packages/x11/proto/xineramaproto/build index 1c031ac4c1..581858ec30 100755 --- a/packages/x11/proto/xineramaproto/build +++ b/packages/x11/proto/xineramaproto/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -11,5 +9,4 @@ cd $PKG_BUILD --sysconfdir=/etc \ make - $MAKEINSTALL diff --git a/packages/x11/proto/xineramaproto/meta b/packages/x11/proto/xineramaproto/meta new file mode 100644 index 0000000000..12169a4dd8 --- /dev/null +++ b/packages/x11/proto/xineramaproto/meta @@ -0,0 +1,14 @@ +PKG_NAME="xineramaproto" +PKG_VERSION="1.2" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="x11/proto" +PKG_SHORTDESC="xineramaproto: Xinerama extension headers" +PKG_LONGDESC="Xinerama extension headers" +PKG_IS_ADDON="no" diff --git a/packages/x11/proto/xineramaproto/url b/packages/x11/proto/xineramaproto/url deleted file mode 100644 index 72b50c4754..0000000000 --- a/packages/x11/proto/xineramaproto/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/proto/xineramaproto-1.2.tar.bz2 \ No newline at end of file From 07b2c8c000422b46d5d92b5e14282b1b6687921c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 14:26:31 +0100 Subject: [PATCH 318/850] xf86vidmodeproto: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/proto/xf86vidmodeproto/build | 3 --- packages/x11/proto/xf86vidmodeproto/meta | 14 ++++++++++++++ packages/x11/proto/xf86vidmodeproto/url | 1 - 3 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 packages/x11/proto/xf86vidmodeproto/meta delete mode 100644 packages/x11/proto/xf86vidmodeproto/url diff --git a/packages/x11/proto/xf86vidmodeproto/build b/packages/x11/proto/xf86vidmodeproto/build index 1c031ac4c1..581858ec30 100755 --- a/packages/x11/proto/xf86vidmodeproto/build +++ b/packages/x11/proto/xf86vidmodeproto/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -11,5 +9,4 @@ cd $PKG_BUILD --sysconfdir=/etc \ make - $MAKEINSTALL diff --git a/packages/x11/proto/xf86vidmodeproto/meta b/packages/x11/proto/xf86vidmodeproto/meta new file mode 100644 index 0000000000..00a1a166df --- /dev/null +++ b/packages/x11/proto/xf86vidmodeproto/meta @@ -0,0 +1,14 @@ +PKG_NAME="xf86vidmodeproto" +PKG_VERSION="2.3" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="x11/proto" +PKG_SHORTDESC="xf86vidmodeproto: XF86VidMode extension headers" +PKG_LONGDESC="XF86VidMode extension headers" +PKG_IS_ADDON="no" diff --git a/packages/x11/proto/xf86vidmodeproto/url b/packages/x11/proto/xf86vidmodeproto/url deleted file mode 100644 index bf77787c37..0000000000 --- a/packages/x11/proto/xf86vidmodeproto/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/proto/xf86vidmodeproto-2.3.tar.bz2 \ No newline at end of file From 889cfba4f23606ad1facc7f04b06b58db89b7c02 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 14:26:52 +0100 Subject: [PATCH 319/850] xf86miscproto: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/proto/xf86miscproto/build | 3 --- packages/x11/proto/xf86miscproto/meta | 14 ++++++++++++++ packages/x11/proto/xf86miscproto/url | 1 - 3 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 packages/x11/proto/xf86miscproto/meta delete mode 100644 packages/x11/proto/xf86miscproto/url diff --git a/packages/x11/proto/xf86miscproto/build b/packages/x11/proto/xf86miscproto/build index 1c031ac4c1..581858ec30 100755 --- a/packages/x11/proto/xf86miscproto/build +++ b/packages/x11/proto/xf86miscproto/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -11,5 +9,4 @@ cd $PKG_BUILD --sysconfdir=/etc \ make - $MAKEINSTALL diff --git a/packages/x11/proto/xf86miscproto/meta b/packages/x11/proto/xf86miscproto/meta new file mode 100644 index 0000000000..8a970ce3f2 --- /dev/null +++ b/packages/x11/proto/xf86miscproto/meta @@ -0,0 +1,14 @@ +PKG_NAME="xf86miscproto" +PKG_VERSION="0.9.3" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="x11/proto" +PKG_SHORTDESC="xf86miscproto: XF86Misc extension headers" +PKG_LONGDESC="XF86Misc extension headers" +PKG_IS_ADDON="no" diff --git a/packages/x11/proto/xf86miscproto/url b/packages/x11/proto/xf86miscproto/url deleted file mode 100644 index 5a1bc170a8..0000000000 --- a/packages/x11/proto/xf86miscproto/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/proto/xf86miscproto-0.9.3.tar.bz2 From 1700a1ba4b29d5f3b722ad7d080757dcf68da7d7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 14:27:04 +0100 Subject: [PATCH 320/850] xf86driproto: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/proto/xf86driproto/build | 3 --- packages/x11/proto/xf86driproto/meta | 14 ++++++++++++++ packages/x11/proto/xf86driproto/url | 1 - 3 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 packages/x11/proto/xf86driproto/meta delete mode 100644 packages/x11/proto/xf86driproto/url diff --git a/packages/x11/proto/xf86driproto/build b/packages/x11/proto/xf86driproto/build index 1c031ac4c1..581858ec30 100755 --- a/packages/x11/proto/xf86driproto/build +++ b/packages/x11/proto/xf86driproto/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -11,5 +9,4 @@ cd $PKG_BUILD --sysconfdir=/etc \ make - $MAKEINSTALL diff --git a/packages/x11/proto/xf86driproto/meta b/packages/x11/proto/xf86driproto/meta new file mode 100644 index 0000000000..43ddf47101 --- /dev/null +++ b/packages/x11/proto/xf86driproto/meta @@ -0,0 +1,14 @@ +PKG_NAME="xf86driproto" +PKG_VERSION="2.1.0" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="x11/proto" +PKG_SHORTDESC="xf86driproto: XF86DRI extension headers" +PKG_LONGDESC="XF86DRI extension headers" +PKG_IS_ADDON="no" diff --git a/packages/x11/proto/xf86driproto/url b/packages/x11/proto/xf86driproto/url deleted file mode 100644 index 24c98493ea..0000000000 --- a/packages/x11/proto/xf86driproto/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/proto/xf86driproto-2.1.0.tar.bz2 \ No newline at end of file From 4a5369deb35ffa6da50f92462e122e26f2ceea8d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 14:27:21 +0100 Subject: [PATCH 321/850] xf86dgaproto: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/proto/xf86dgaproto/build | 3 --- packages/x11/proto/xf86dgaproto/meta | 14 ++++++++++++++ packages/x11/proto/xf86dgaproto/url | 1 - 3 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 packages/x11/proto/xf86dgaproto/meta delete mode 100644 packages/x11/proto/xf86dgaproto/url diff --git a/packages/x11/proto/xf86dgaproto/build b/packages/x11/proto/xf86dgaproto/build index 1c031ac4c1..581858ec30 100755 --- a/packages/x11/proto/xf86dgaproto/build +++ b/packages/x11/proto/xf86dgaproto/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -11,5 +9,4 @@ cd $PKG_BUILD --sysconfdir=/etc \ make - $MAKEINSTALL diff --git a/packages/x11/proto/xf86dgaproto/meta b/packages/x11/proto/xf86dgaproto/meta new file mode 100644 index 0000000000..ce68b93de0 --- /dev/null +++ b/packages/x11/proto/xf86dgaproto/meta @@ -0,0 +1,14 @@ +PKG_NAME="xf86dgaproto" +PKG_VERSION="2.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="x11/proto" +PKG_SHORTDESC="xf86dgaproto: XF86DGA extension headers" +PKG_LONGDESC="XF86DGA extension headers" +PKG_IS_ADDON="no" diff --git a/packages/x11/proto/xf86dgaproto/url b/packages/x11/proto/xf86dgaproto/url deleted file mode 100644 index 5d3092dab3..0000000000 --- a/packages/x11/proto/xf86dgaproto/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/proto/xf86dgaproto-2.1.tar.bz2 \ No newline at end of file From e745fda5516532f299015734211cb8405b6d54d9 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 14:27:39 +0100 Subject: [PATCH 322/850] xcmiscproto: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/proto/xcmiscproto/build | 3 --- packages/x11/proto/xcmiscproto/meta | 14 ++++++++++++++ packages/x11/proto/xcmiscproto/url | 1 - 3 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 packages/x11/proto/xcmiscproto/meta delete mode 100644 packages/x11/proto/xcmiscproto/url diff --git a/packages/x11/proto/xcmiscproto/build b/packages/x11/proto/xcmiscproto/build index 1c031ac4c1..581858ec30 100755 --- a/packages/x11/proto/xcmiscproto/build +++ b/packages/x11/proto/xcmiscproto/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -11,5 +9,4 @@ cd $PKG_BUILD --sysconfdir=/etc \ make - $MAKEINSTALL diff --git a/packages/x11/proto/xcmiscproto/meta b/packages/x11/proto/xcmiscproto/meta new file mode 100644 index 0000000000..b973e5d236 --- /dev/null +++ b/packages/x11/proto/xcmiscproto/meta @@ -0,0 +1,14 @@ +PKG_NAME="xcmiscproto" +PKG_VERSION="1.2.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OpenSource" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="x11/proto" +PKG_SHORTDESC="xcmiscproto: XCMisc extension headers" +PKG_LONGDESC="XCMisc extension headers" +PKG_IS_ADDON="no" diff --git a/packages/x11/proto/xcmiscproto/url b/packages/x11/proto/xcmiscproto/url deleted file mode 100644 index 1e3bbf7eb4..0000000000 --- a/packages/x11/proto/xcmiscproto/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/proto/xcmiscproto-1.2.1.tar.bz2 \ No newline at end of file From f899c8fee2da8a9acb47e89570176a89b5fa2f7d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 14:27:52 +0100 Subject: [PATCH 323/850] xcb-proto: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/proto/xcb-proto/build | 4 ---- packages/x11/proto/xcb-proto/meta | 14 ++++++++++++++ packages/x11/proto/xcb-proto/url | 1 - 3 files changed, 14 insertions(+), 5 deletions(-) create mode 100644 packages/x11/proto/xcb-proto/meta delete mode 100644 packages/x11/proto/xcb-proto/url diff --git a/packages/x11/proto/xcb-proto/build b/packages/x11/proto/xcb-proto/build index c4d9d1a80f..655e874cdd 100755 --- a/packages/x11/proto/xcb-proto/build +++ b/packages/x11/proto/xcb-proto/build @@ -2,14 +2,10 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build Python - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ make - $MAKEINSTALL diff --git a/packages/x11/proto/xcb-proto/meta b/packages/x11/proto/xcb-proto/meta new file mode 100644 index 0000000000..9ad3c843cf --- /dev/null +++ b/packages/x11/proto/xcb-proto/meta @@ -0,0 +1,14 @@ +PKG_NAME="xcb-proto" +PKG_VERSION="1.6" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xcb.freedesktop.org/dist/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain Python" +PKG_PRIORITY="optional" +PKG_SECTION="x11/proto" +PKG_SHORTDESC="xcb-proto: X C-language Bindings protocol headers" +PKG_LONGDESC="X C-language Bindings protocol headers." +PKG_IS_ADDON="no" diff --git a/packages/x11/proto/xcb-proto/url b/packages/x11/proto/xcb-proto/url deleted file mode 100644 index b2cfaf7bb0..0000000000 --- a/packages/x11/proto/xcb-proto/url +++ /dev/null @@ -1 +0,0 @@ -http://xcb.freedesktop.org/dist/xcb-proto-1.6.tar.bz2 \ No newline at end of file From 66b3b6a8eca70797cc43cdefd5ce853a8311ab4f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 14:53:34 +0100 Subject: [PATCH 324/850] scrnsaverproto: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/proto/scrnsaverproto/build | 3 --- packages/x11/proto/scrnsaverproto/meta | 14 ++++++++++++++ packages/x11/proto/scrnsaverproto/url | 1 - 3 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 packages/x11/proto/scrnsaverproto/meta delete mode 100644 packages/x11/proto/scrnsaverproto/url diff --git a/packages/x11/proto/scrnsaverproto/build b/packages/x11/proto/scrnsaverproto/build index 1c031ac4c1..581858ec30 100755 --- a/packages/x11/proto/scrnsaverproto/build +++ b/packages/x11/proto/scrnsaverproto/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -11,5 +9,4 @@ cd $PKG_BUILD --sysconfdir=/etc \ make - $MAKEINSTALL diff --git a/packages/x11/proto/scrnsaverproto/meta b/packages/x11/proto/scrnsaverproto/meta new file mode 100644 index 0000000000..4b52f02c16 --- /dev/null +++ b/packages/x11/proto/scrnsaverproto/meta @@ -0,0 +1,14 @@ +PKG_NAME="scrnsaverproto" +PKG_VERSION="1.2.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="x11/proto" +PKG_SHORTDESC="scrnsaverproto: ScrnSaver extension headers" +PKG_LONGDESC="ScrnSaver extension headers" +PKG_IS_ADDON="no" diff --git a/packages/x11/proto/scrnsaverproto/url b/packages/x11/proto/scrnsaverproto/url deleted file mode 100644 index 8150463c2d..0000000000 --- a/packages/x11/proto/scrnsaverproto/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/proto/scrnsaverproto-1.2.1.tar.bz2 \ No newline at end of file From f014845539c0ca44fd1c437fab27c290f894aaec Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 14:53:52 +0100 Subject: [PATCH 325/850] recordproto: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/proto/recordproto/build | 3 --- packages/x11/proto/recordproto/meta | 14 ++++++++++++++ packages/x11/proto/recordproto/url | 1 - 3 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 packages/x11/proto/recordproto/meta delete mode 100644 packages/x11/proto/recordproto/url diff --git a/packages/x11/proto/recordproto/build b/packages/x11/proto/recordproto/build index 1c031ac4c1..581858ec30 100755 --- a/packages/x11/proto/recordproto/build +++ b/packages/x11/proto/recordproto/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -11,5 +9,4 @@ cd $PKG_BUILD --sysconfdir=/etc \ make - $MAKEINSTALL diff --git a/packages/x11/proto/recordproto/meta b/packages/x11/proto/recordproto/meta new file mode 100644 index 0000000000..ad49ed76ed --- /dev/null +++ b/packages/x11/proto/recordproto/meta @@ -0,0 +1,14 @@ +PKG_NAME="recordproto" +PKG_VERSION="1.14.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="x11/proto" +PKG_SHORTDESC="recordproto: Record extension headers" +PKG_LONGDESC="Record extension headers" +PKG_IS_ADDON="no" diff --git a/packages/x11/proto/recordproto/url b/packages/x11/proto/recordproto/url deleted file mode 100644 index f86531c12d..0000000000 --- a/packages/x11/proto/recordproto/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/proto/recordproto-1.14.1.tar.bz2 \ No newline at end of file From fb12f79767065a235a9fe45932ec85b6e0e22f33 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 14:54:06 +0100 Subject: [PATCH 326/850] randrproto: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/proto/randrproto/build | 3 --- packages/x11/proto/randrproto/meta | 14 ++++++++++++++ packages/x11/proto/randrproto/url | 1 - 3 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 packages/x11/proto/randrproto/meta delete mode 100644 packages/x11/proto/randrproto/url diff --git a/packages/x11/proto/randrproto/build b/packages/x11/proto/randrproto/build index 1c031ac4c1..581858ec30 100755 --- a/packages/x11/proto/randrproto/build +++ b/packages/x11/proto/randrproto/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -11,5 +9,4 @@ cd $PKG_BUILD --sysconfdir=/etc \ make - $MAKEINSTALL diff --git a/packages/x11/proto/randrproto/meta b/packages/x11/proto/randrproto/meta new file mode 100644 index 0000000000..20b74f6869 --- /dev/null +++ b/packages/x11/proto/randrproto/meta @@ -0,0 +1,14 @@ +PKG_NAME="randrproto" +PKG_VERSION="1.3.2" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="x11/proto" +PKG_SHORTDESC="randrproto: Randr extension headers" +PKG_LONGDESC="Randr extension headers" +PKG_IS_ADDON="no" diff --git a/packages/x11/proto/randrproto/url b/packages/x11/proto/randrproto/url deleted file mode 100644 index f91056bcff..0000000000 --- a/packages/x11/proto/randrproto/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/proto/randrproto-1.3.2.tar.bz2 \ No newline at end of file From 7fca6dbbccad24ddaa86820d99e7d89e99e6fefb Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 14:54:19 +0100 Subject: [PATCH 327/850] inputproto: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/proto/inputproto/build | 5 +---- packages/x11/proto/inputproto/meta | 14 ++++++++++++++ packages/x11/proto/inputproto/url | 1 - 3 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 packages/x11/proto/inputproto/meta delete mode 100644 packages/x11/proto/inputproto/url diff --git a/packages/x11/proto/inputproto/build b/packages/x11/proto/inputproto/build index cb0bb91ee5..1944564d96 100755 --- a/packages/x11/proto/inputproto/build +++ b/packages/x11/proto/inputproto/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -11,6 +9,5 @@ cd $PKG_BUILD --sysconfdir=/etc \ --localstatedir=/var \ -$MAKE - +make $MAKEINSTALL diff --git a/packages/x11/proto/inputproto/meta b/packages/x11/proto/inputproto/meta new file mode 100644 index 0000000000..4e35ec331a --- /dev/null +++ b/packages/x11/proto/inputproto/meta @@ -0,0 +1,14 @@ +PKG_NAME="inputproto" +PKG_VERSION="2.0.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="x11/proto" +PKG_SHORTDESC="inputproto: Input extension headers" +PKG_LONGDESC="Input extension headers" +PKG_IS_ADDON="no" diff --git a/packages/x11/proto/inputproto/url b/packages/x11/proto/inputproto/url deleted file mode 100644 index 3feb7623ae..0000000000 --- a/packages/x11/proto/inputproto/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/proto/inputproto-2.0.1.tar.bz2 \ No newline at end of file From 36949e691c1d69deb78b19d63ecc9fe4f3713bd7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 14:54:35 +0100 Subject: [PATCH 328/850] fontsproto: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/proto/fontsproto/build | 5 +---- packages/x11/proto/fontsproto/meta | 14 ++++++++++++++ packages/x11/proto/fontsproto/url | 1 - 3 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 packages/x11/proto/fontsproto/meta delete mode 100644 packages/x11/proto/fontsproto/url diff --git a/packages/x11/proto/fontsproto/build b/packages/x11/proto/fontsproto/build index cb0bb91ee5..1944564d96 100755 --- a/packages/x11/proto/fontsproto/build +++ b/packages/x11/proto/fontsproto/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -11,6 +9,5 @@ cd $PKG_BUILD --sysconfdir=/etc \ --localstatedir=/var \ -$MAKE - +make $MAKEINSTALL diff --git a/packages/x11/proto/fontsproto/meta b/packages/x11/proto/fontsproto/meta new file mode 100644 index 0000000000..56e714738c --- /dev/null +++ b/packages/x11/proto/fontsproto/meta @@ -0,0 +1,14 @@ +PKG_NAME="fontsproto" +PKG_VERSION="2.1.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="x11/proto" +PKG_SHORTDESC="fontsproto: Fonts extension headers" +PKG_LONGDESC="Fonts extension headers" +PKG_IS_ADDON="no" diff --git a/packages/x11/proto/fontsproto/url b/packages/x11/proto/fontsproto/url deleted file mode 100644 index 9eb6d9e8f4..0000000000 --- a/packages/x11/proto/fontsproto/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/proto/fontsproto-2.1.1.tar.bz2 \ No newline at end of file From 68d8344d152cd5f960d249d0d3a20e1bad679c9e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 14:54:47 +0100 Subject: [PATCH 329/850] fontcacheproto: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/proto/fontcacheproto/build | 5 +---- packages/x11/proto/fontcacheproto/meta | 14 ++++++++++++++ packages/x11/proto/fontcacheproto/url | 1 - 3 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 packages/x11/proto/fontcacheproto/meta delete mode 100644 packages/x11/proto/fontcacheproto/url diff --git a/packages/x11/proto/fontcacheproto/build b/packages/x11/proto/fontcacheproto/build index cb0bb91ee5..1944564d96 100755 --- a/packages/x11/proto/fontcacheproto/build +++ b/packages/x11/proto/fontcacheproto/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -11,6 +9,5 @@ cd $PKG_BUILD --sysconfdir=/etc \ --localstatedir=/var \ -$MAKE - +make $MAKEINSTALL diff --git a/packages/x11/proto/fontcacheproto/meta b/packages/x11/proto/fontcacheproto/meta new file mode 100644 index 0000000000..49190e2b55 --- /dev/null +++ b/packages/x11/proto/fontcacheproto/meta @@ -0,0 +1,14 @@ +PKG_NAME="fontcacheproto" +PKG_VERSION="0.1.3" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="x11/proto" +PKG_SHORTDESC="fontcacheproto: Fontcache extension headers" +PKG_LONGDESC="Fontcache extension headers" +PKG_IS_ADDON="no" diff --git a/packages/x11/proto/fontcacheproto/url b/packages/x11/proto/fontcacheproto/url deleted file mode 100644 index 8c1ae576fe..0000000000 --- a/packages/x11/proto/fontcacheproto/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/proto/fontcacheproto-0.1.3.tar.bz2 From 5d8df05336e7241d450e66ee35c30b33b9272f70 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 14:55:00 +0100 Subject: [PATCH 330/850] fixesproto: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/proto/fixesproto/build | 5 +---- packages/x11/proto/fixesproto/meta | 14 ++++++++++++++ packages/x11/proto/fixesproto/url | 1 - 3 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 packages/x11/proto/fixesproto/meta delete mode 100644 packages/x11/proto/fixesproto/url diff --git a/packages/x11/proto/fixesproto/build b/packages/x11/proto/fixesproto/build index cb0bb91ee5..1944564d96 100755 --- a/packages/x11/proto/fixesproto/build +++ b/packages/x11/proto/fixesproto/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -11,6 +9,5 @@ cd $PKG_BUILD --sysconfdir=/etc \ --localstatedir=/var \ -$MAKE - +make $MAKEINSTALL diff --git a/packages/x11/proto/fixesproto/meta b/packages/x11/proto/fixesproto/meta new file mode 100644 index 0000000000..c2f46b0e8b --- /dev/null +++ b/packages/x11/proto/fixesproto/meta @@ -0,0 +1,14 @@ +PKG_NAME="fixesproto" +PKG_VERSION="4.1.2" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="x11/proto" +PKG_SHORTDESC="fixesproto: Fixes extension headers" +PKG_LONGDESC="Fixes extension headers" +PKG_IS_ADDON="no" diff --git a/packages/x11/proto/fixesproto/url b/packages/x11/proto/fixesproto/url deleted file mode 100644 index 787dcae392..0000000000 --- a/packages/x11/proto/fixesproto/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/proto/fixesproto-4.1.2.tar.bz2 \ No newline at end of file From 3543ed7fcb442339322af54f3f3c282c4aa0e163 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 14:55:14 +0100 Subject: [PATCH 331/850] dri2proto: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/proto/dri2proto/build | 5 +---- packages/x11/proto/dri2proto/meta | 14 ++++++++++++++ packages/x11/proto/dri2proto/url | 1 - 3 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 packages/x11/proto/dri2proto/meta delete mode 100644 packages/x11/proto/dri2proto/url diff --git a/packages/x11/proto/dri2proto/build b/packages/x11/proto/dri2proto/build index cb0bb91ee5..1944564d96 100755 --- a/packages/x11/proto/dri2proto/build +++ b/packages/x11/proto/dri2proto/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -11,6 +9,5 @@ cd $PKG_BUILD --sysconfdir=/etc \ --localstatedir=/var \ -$MAKE - +make $MAKEINSTALL diff --git a/packages/x11/proto/dri2proto/meta b/packages/x11/proto/dri2proto/meta new file mode 100644 index 0000000000..a7f06dd01f --- /dev/null +++ b/packages/x11/proto/dri2proto/meta @@ -0,0 +1,14 @@ +PKG_NAME="dri2proto" +PKG_VERSION="2.3" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="x11/proto" +PKG_SHORTDESC="dri2proto: X.Org DRI2 protocol headers" +PKG_LONGDESC="X.Org DRI2 protocol headers." +PKG_IS_ADDON="no" diff --git a/packages/x11/proto/dri2proto/url b/packages/x11/proto/dri2proto/url deleted file mode 100644 index 23a11eec8a..0000000000 --- a/packages/x11/proto/dri2proto/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/proto/dri2proto-2.3.tar.bz2 From 696d3ad965ee0ce9edb7ff2684def4c9ae095020 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 14:55:26 +0100 Subject: [PATCH 332/850] damageproto: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/proto/damageproto/build | 5 +---- packages/x11/proto/damageproto/meta | 14 ++++++++++++++ packages/x11/proto/damageproto/url | 1 - 3 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 packages/x11/proto/damageproto/meta delete mode 100644 packages/x11/proto/damageproto/url diff --git a/packages/x11/proto/damageproto/build b/packages/x11/proto/damageproto/build index cb0bb91ee5..1944564d96 100755 --- a/packages/x11/proto/damageproto/build +++ b/packages/x11/proto/damageproto/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -11,6 +9,5 @@ cd $PKG_BUILD --sysconfdir=/etc \ --localstatedir=/var \ -$MAKE - +make $MAKEINSTALL diff --git a/packages/x11/proto/damageproto/meta b/packages/x11/proto/damageproto/meta new file mode 100644 index 0000000000..a1c2419511 --- /dev/null +++ b/packages/x11/proto/damageproto/meta @@ -0,0 +1,14 @@ +PKG_NAME="damageproto" +PKG_VERSION="1.2.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="x11/proto" +PKG_SHORTDESC="damageproto: Damage extension header" +PKG_LONGDESC="Damage extension headers" +PKG_IS_ADDON="no" diff --git a/packages/x11/proto/damageproto/url b/packages/x11/proto/damageproto/url deleted file mode 100644 index 304d5e8ed2..0000000000 --- a/packages/x11/proto/damageproto/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/proto/damageproto-1.2.1.tar.bz2 \ No newline at end of file From 4d37a80bbc276f86fd262a500206801c535e29dd Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 14:55:44 +0100 Subject: [PATCH 333/850] bigreqsproto: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/proto/bigreqsproto/build | 3 --- packages/x11/proto/bigreqsproto/meta | 14 ++++++++++++++ packages/x11/proto/bigreqsproto/url | 1 - 3 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 packages/x11/proto/bigreqsproto/meta delete mode 100644 packages/x11/proto/bigreqsproto/url diff --git a/packages/x11/proto/bigreqsproto/build b/packages/x11/proto/bigreqsproto/build index 7f8e351572..1944564d96 100755 --- a/packages/x11/proto/bigreqsproto/build +++ b/packages/x11/proto/bigreqsproto/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -12,5 +10,4 @@ cd $PKG_BUILD --localstatedir=/var \ make - $MAKEINSTALL diff --git a/packages/x11/proto/bigreqsproto/meta b/packages/x11/proto/bigreqsproto/meta new file mode 100644 index 0000000000..8e03a21dad --- /dev/null +++ b/packages/x11/proto/bigreqsproto/meta @@ -0,0 +1,14 @@ +PKG_NAME="bigreqsproto" +PKG_VERSION="1.1.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="x11/proto" +PKG_SHORTDESC="bigreqsproto: BigReqs extension headers" +PKG_LONGDESC="BigReqs extension headers" +PKG_IS_ADDON="no" diff --git a/packages/x11/proto/bigreqsproto/url b/packages/x11/proto/bigreqsproto/url deleted file mode 100644 index 8ab5b0b16e..0000000000 --- a/packages/x11/proto/bigreqsproto/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/proto/bigreqsproto-1.1.1.tar.bz2 \ No newline at end of file From a5ceb9d0bafc89571cf77498930d79b7e5974a54 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 14:56:00 +0100 Subject: [PATCH 334/850] glproto: cleanups Signed-off-by: Stephan Raue --- packages/x11/proto/glproto/build | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/x11/proto/glproto/build b/packages/x11/proto/glproto/build index a81f6395d6..1944564d96 100755 --- a/packages/x11/proto/glproto/build +++ b/packages/x11/proto/glproto/build @@ -10,5 +10,4 @@ cd $PKG_BUILD --localstatedir=/var \ make - $MAKEINSTALL From 95a51eacbc8eaf308dc4ec9c16f1f581f356d5a1 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 14:56:09 +0100 Subject: [PATCH 335/850] kbproto: cleanups Signed-off-by: Stephan Raue --- packages/x11/proto/kbproto/build | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/x11/proto/kbproto/build b/packages/x11/proto/kbproto/build index a81f6395d6..1944564d96 100755 --- a/packages/x11/proto/kbproto/build +++ b/packages/x11/proto/kbproto/build @@ -10,5 +10,4 @@ cd $PKG_BUILD --localstatedir=/var \ make - $MAKEINSTALL From 18a15b516805d4e8b08063c6e3f61d99c4e78047 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 14:56:19 +0100 Subject: [PATCH 336/850] xextproto: cleanups Signed-off-by: Stephan Raue --- packages/x11/proto/xextproto/build | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/x11/proto/xextproto/build b/packages/x11/proto/xextproto/build index a019cde178..581858ec30 100755 --- a/packages/x11/proto/xextproto/build +++ b/packages/x11/proto/xextproto/build @@ -9,5 +9,4 @@ cd $PKG_BUILD --sysconfdir=/etc \ make - $MAKEINSTALL From 0714d16cf7f48579a119775e12ba3ac81b55635d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 14:56:32 +0100 Subject: [PATCH 337/850] renderproto: cleanups Signed-off-by: Stephan Raue --- packages/x11/proto/renderproto/build | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/x11/proto/renderproto/build b/packages/x11/proto/renderproto/build index a019cde178..581858ec30 100755 --- a/packages/x11/proto/renderproto/build +++ b/packages/x11/proto/renderproto/build @@ -9,5 +9,4 @@ cd $PKG_BUILD --sysconfdir=/etc \ make - $MAKEINSTALL From ad5758963db15a1cfde478c46c4e69fcbcf549d9 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 14:56:41 +0100 Subject: [PATCH 338/850] videoproto: cleanups Signed-off-by: Stephan Raue --- packages/x11/proto/videoproto/build | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/x11/proto/videoproto/build b/packages/x11/proto/videoproto/build index a019cde178..581858ec30 100755 --- a/packages/x11/proto/videoproto/build +++ b/packages/x11/proto/videoproto/build @@ -9,5 +9,4 @@ cd $PKG_BUILD --sysconfdir=/etc \ make - $MAKEINSTALL From d2b5995e216c4eaec9d6ea676c1eb29cd7155df6 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 19:24:31 +0100 Subject: [PATCH 339/850] xtrans: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/lib/xtrans/build | 3 --- packages/x11/lib/xtrans/meta | 14 ++++++++++++++ packages/x11/lib/xtrans/url | 1 - 3 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 packages/x11/lib/xtrans/meta delete mode 100644 packages/x11/lib/xtrans/url diff --git a/packages/x11/lib/xtrans/build b/packages/x11/lib/xtrans/build index 1c065f0b81..6034829445 100755 --- a/packages/x11/lib/xtrans/build +++ b/packages/x11/lib/xtrans/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -11,7 +9,6 @@ cd $PKG_BUILD --sysconfdir=/etc \ make - $MAKEINSTALL mkdir -p $SYSROOT_PREFIX/usr/lib/pkgconfig diff --git a/packages/x11/lib/xtrans/meta b/packages/x11/lib/xtrans/meta new file mode 100644 index 0000000000..3c65aab5ac --- /dev/null +++ b/packages/x11/lib/xtrans/meta @@ -0,0 +1,14 @@ +PKG_NAME="xtrans" +PKG_VERSION="1.2.5" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="x11/lib" +PKG_SHORTDESC="xtrans: Abstract network code for X" +PKG_LONGDESC="Abstract network code for X." +PKG_IS_ADDON="no" diff --git a/packages/x11/lib/xtrans/url b/packages/x11/lib/xtrans/url deleted file mode 100644 index 71742bb9c6..0000000000 --- a/packages/x11/lib/xtrans/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/lib/xtrans-1.2.5.tar.bz2 From e0814bcef05668e5a547e2e67779e5280586a6e3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 19:25:26 +0100 Subject: [PATCH 340/850] libxkbfile: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/lib/libxkbfile/build | 7 +------ packages/x11/lib/libxkbfile/meta | 14 ++++++++++++++ packages/x11/lib/libxkbfile/url | 1 - 3 files changed, 15 insertions(+), 7 deletions(-) create mode 100644 packages/x11/lib/libxkbfile/meta delete mode 100644 packages/x11/lib/libxkbfile/url diff --git a/packages/x11/lib/libxkbfile/build b/packages/x11/lib/libxkbfile/build index 281fde6e5d..79015a39ef 100755 --- a/packages/x11/lib/libxkbfile/build +++ b/packages/x11/lib/libxkbfile/build @@ -2,10 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build libX11 -$SCRIPTS/build kbproto - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -14,6 +10,5 @@ cd $PKG_BUILD --enable-static \ --disable-shared \ -$MAKE - +make $MAKEINSTALL diff --git a/packages/x11/lib/libxkbfile/meta b/packages/x11/lib/libxkbfile/meta new file mode 100644 index 0000000000..9b0bea2471 --- /dev/null +++ b/packages/x11/lib/libxkbfile/meta @@ -0,0 +1,14 @@ +PKG_NAME="libxkbfile" +PKG_VERSION="1.0.7" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain kbproto libX11" +PKG_PRIORITY="optional" +PKG_SECTION="x11/lib" +PKG_SHORTDESC="libxkbfile: X11 keyboard file manipulation library" +PKG_LONGDESC="Libxkbfile provides an interface to read and manipulate description files for XKB, the X11 keyboard configuration extension." +PKG_IS_ADDON="no" diff --git a/packages/x11/lib/libxkbfile/url b/packages/x11/lib/libxkbfile/url deleted file mode 100644 index f3c56c93c4..0000000000 --- a/packages/x11/lib/libxkbfile/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/lib/libxkbfile-1.0.7.tar.bz2 \ No newline at end of file From 69eb5c38c48cb6e780e91752a0bcbf6ba64a8eab Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 19:25:39 +0100 Subject: [PATCH 341/850] libpciaccess: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/lib/libpciaccess/build | 4 ---- packages/x11/lib/libpciaccess/install | 5 ++--- packages/x11/lib/libpciaccess/meta | 14 ++++++++++++++ packages/x11/lib/libpciaccess/url | 1 - 4 files changed, 16 insertions(+), 8 deletions(-) create mode 100644 packages/x11/lib/libpciaccess/meta delete mode 100644 packages/x11/lib/libpciaccess/url diff --git a/packages/x11/lib/libpciaccess/build b/packages/x11/lib/libpciaccess/build index 704f726a27..bf22e6461f 100755 --- a/packages/x11/lib/libpciaccess/build +++ b/packages/x11/lib/libpciaccess/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build zlib - export ac_cv_header_asm_mtrr_h=set cd $PKG_BUILD @@ -18,5 +15,4 @@ cd $PKG_BUILD --with-zlib \ make - $MAKEINSTALL diff --git a/packages/x11/lib/libpciaccess/install b/packages/x11/lib/libpciaccess/install index 41f828e368..3f8ae6e743 100755 --- a/packages/x11/lib/libpciaccess/install +++ b/packages/x11/lib/libpciaccess/install @@ -1,11 +1,10 @@ #!/bin/sh . config/options $1 -$SCRIPTS/install zlib mkdir -p $INSTALL/usr/lib -cp -PR $PKG_BUILD/src/.libs/libpciaccess.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/src/.libs/libpciaccess.so* $INSTALL/usr/lib mkdir -p $INSTALL/usr/bin -cp -PR $PKG_BUILD/src/.libs/scanpci $INSTALL/usr/bin + cp -P $PKG_BUILD/src/.libs/scanpci $INSTALL/usr/bin diff --git a/packages/x11/lib/libpciaccess/meta b/packages/x11/lib/libpciaccess/meta new file mode 100644 index 0000000000..e572df4a54 --- /dev/null +++ b/packages/x11/lib/libpciaccess/meta @@ -0,0 +1,14 @@ +PKG_NAME="libpciaccess" +PKG_VERSION="0.12.0" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://freedesktop.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="zlib" +PKG_BUILD_DEPENDS="toolchain zlib" +PKG_PRIORITY="optional" +PKG_SECTION="x11/lib" +PKG_SHORTDESC="libpciaccess: X.org libpciaccess library" +PKG_LONGDESC="X.org libpciaccess library." +PKG_IS_ADDON="no" diff --git a/packages/x11/lib/libpciaccess/url b/packages/x11/lib/libpciaccess/url deleted file mode 100644 index 579ff4373b..0000000000 --- a/packages/x11/lib/libpciaccess/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/lib/libpciaccess-0.12.0.tar.bz2 \ No newline at end of file From ee7ca97988eea67c3a6e043de8017200f0fd804b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 19:25:56 +0100 Subject: [PATCH 342/850] libfontenc: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/lib/libfontenc/build | 7 +------ packages/x11/lib/libfontenc/meta | 14 ++++++++++++++ packages/x11/lib/libfontenc/url | 1 - 3 files changed, 15 insertions(+), 7 deletions(-) create mode 100644 packages/x11/lib/libfontenc/meta delete mode 100644 packages/x11/lib/libfontenc/url diff --git a/packages/x11/lib/libfontenc/build b/packages/x11/lib/libfontenc/build index c3d1e8e18c..79015a39ef 100755 --- a/packages/x11/lib/libfontenc/build +++ b/packages/x11/lib/libfontenc/build @@ -2,10 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build xproto -$SCRIPTS/build zlib - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -14,6 +10,5 @@ cd $PKG_BUILD --enable-static \ --disable-shared \ -$MAKE - +make $MAKEINSTALL diff --git a/packages/x11/lib/libfontenc/meta b/packages/x11/lib/libfontenc/meta new file mode 100644 index 0000000000..361d6b8030 --- /dev/null +++ b/packages/x11/lib/libfontenc/meta @@ -0,0 +1,14 @@ +PKG_NAME="libfontenc" +PKG_VERSION="1.1.0" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain xproto zlib" +PKG_PRIORITY="optional" +PKG_SECTION="x11/lib" +PKG_SHORTDESC="libfontenc: X11 font encoding library" +PKG_LONGDESC="Libfontenc is a library which helps font libraries portably determine and deal with different encodings of fonts." +PKG_IS_ADDON="no" diff --git a/packages/x11/lib/libfontenc/url b/packages/x11/lib/libfontenc/url deleted file mode 100644 index 370fa4c2b2..0000000000 --- a/packages/x11/lib/libfontenc/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/lib/libfontenc-1.1.0.tar.bz2 \ No newline at end of file From e41c8594e9abe1a146e4536047a4dfb5e6428de1 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 19:27:04 +0100 Subject: [PATCH 343/850] libXxf86vm: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/lib/libXxf86vm/build | 8 +------- packages/x11/lib/libXxf86vm/install | 5 +---- packages/x11/lib/libXxf86vm/meta | 14 ++++++++++++++ packages/x11/lib/libXxf86vm/url | 1 - 4 files changed, 16 insertions(+), 12 deletions(-) create mode 100644 packages/x11/lib/libXxf86vm/meta delete mode 100644 packages/x11/lib/libXxf86vm/url diff --git a/packages/x11/lib/libXxf86vm/build b/packages/x11/lib/libXxf86vm/build index 43b6df3836..82d94c4013 100755 --- a/packages/x11/lib/libXxf86vm/build +++ b/packages/x11/lib/libXxf86vm/build @@ -2,11 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build xf86vidmodeproto -$SCRIPTS/build libX11 -$SCRIPTS/build libXext - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -17,6 +12,5 @@ cd $PKG_BUILD --enable-shared \ --enable-malloc0returnsnull -$MAKE - +make $MAKEINSTALL \ No newline at end of file diff --git a/packages/x11/lib/libXxf86vm/install b/packages/x11/lib/libXxf86vm/install index 784f1a5d4f..5fde11a25f 100755 --- a/packages/x11/lib/libXxf86vm/install +++ b/packages/x11/lib/libXxf86vm/install @@ -2,8 +2,5 @@ . config/options $1 -$SCRIPTS/install libX11 -$SCRIPTS/install libXext - mkdir -p $INSTALL/usr/lib -cp -PR $PKG_BUILD/src/.libs/libXxf86vm.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/src/.libs/libXxf86vm.so* $INSTALL/usr/lib diff --git a/packages/x11/lib/libXxf86vm/meta b/packages/x11/lib/libXxf86vm/meta new file mode 100644 index 0000000000..5831ca6033 --- /dev/null +++ b/packages/x11/lib/libXxf86vm/meta @@ -0,0 +1,14 @@ +PKG_NAME="libXxf86vm" +PKG_VERSION="1.1.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="libX11 libXext" +PKG_BUILD_DEPENDS="toolchain xf86vidmodeproto libX11 libXext" +PKG_PRIORITY="optional" +PKG_SECTION="x11/lib" +PKG_SHORTDESC="libxxf86vm: Extension library for the XFree86-VidMode X extension" +PKG_LONGDESC="The libxxf86vm provides an interface to the server extension XFree86-VidModeExtension which allows the video modes to be queried and adjusted dynamically and mode switching to be controlled." +PKG_IS_ADDON="no" diff --git a/packages/x11/lib/libXxf86vm/url b/packages/x11/lib/libXxf86vm/url deleted file mode 100644 index 94c55fa0ca..0000000000 --- a/packages/x11/lib/libXxf86vm/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/lib/libXxf86vm-1.1.1.tar.bz2 \ No newline at end of file From f0debfb919c355654506487d017e28805548a15c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 19:27:05 +0100 Subject: [PATCH 344/850] libXtst: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/lib/libXtst/build | 9 --------- packages/x11/lib/libXtst/install | 4 ---- packages/x11/lib/libXtst/meta | 14 ++++++++++++++ packages/x11/lib/libXtst/url | 1 - 4 files changed, 14 insertions(+), 14 deletions(-) create mode 100644 packages/x11/lib/libXtst/meta delete mode 100644 packages/x11/lib/libXtst/url diff --git a/packages/x11/lib/libXtst/build b/packages/x11/lib/libXtst/build index 23ce60bf58..f5e79a4e10 100755 --- a/packages/x11/lib/libXtst/build +++ b/packages/x11/lib/libXtst/build @@ -2,14 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build recordproto -$SCRIPTS/build xextproto -$SCRIPTS/build inputproto -$SCRIPTS/build libX11 -$SCRIPTS/build libXext -$SCRIPTS/build libXi - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -21,5 +13,4 @@ cd $PKG_BUILD --with-gnu-ld \ make - $MAKEINSTALL diff --git a/packages/x11/lib/libXtst/install b/packages/x11/lib/libXtst/install index 8b592544eb..6508276a1e 100755 --- a/packages/x11/lib/libXtst/install +++ b/packages/x11/lib/libXtst/install @@ -2,9 +2,5 @@ . config/options $1 -$SCRIPTS/install libXext -$SCRIPTS/install libX11 -$SCRIPTS/install libXi - mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/src/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/x11/lib/libXtst/meta b/packages/x11/lib/libXtst/meta new file mode 100644 index 0000000000..50e99dc7f4 --- /dev/null +++ b/packages/x11/lib/libXtst/meta @@ -0,0 +1,14 @@ +PKG_NAME="libXtst" +PKG_VERSION="1.2.0" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="libXext libXi libX11" +PKG_BUILD_DEPENDS="toolchain recordproto xextproto libXext inputproto libXi libX11" +PKG_PRIORITY="optional" +PKG_SECTION="x11/lib" +PKG_SHORTDESC="libxtst: The Xtst Library" +PKG_LONGDESC="The Xtst Library" +PKG_IS_ADDON="no" diff --git a/packages/x11/lib/libXtst/url b/packages/x11/lib/libXtst/url deleted file mode 100644 index e96080ca72..0000000000 --- a/packages/x11/lib/libXtst/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/lib/libXtst-1.2.0.tar.bz2 \ No newline at end of file From c3613627acd0e24579a4ca9c416d61c2156cc233 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 19:27:49 +0100 Subject: [PATCH 345/850] libXrender: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/lib/libXrender/build | 7 +------ packages/x11/lib/libXrender/install | 4 +--- packages/x11/lib/libXrender/meta | 14 ++++++++++++++ packages/x11/lib/libXrender/url | 1 - 4 files changed, 16 insertions(+), 10 deletions(-) create mode 100644 packages/x11/lib/libXrender/meta delete mode 100644 packages/x11/lib/libXrender/url diff --git a/packages/x11/lib/libXrender/build b/packages/x11/lib/libXrender/build index d0bbf808ed..82d94c4013 100755 --- a/packages/x11/lib/libXrender/build +++ b/packages/x11/lib/libXrender/build @@ -2,10 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build renderproto -$SCRIPTS/build libX11 - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -16,6 +12,5 @@ cd $PKG_BUILD --enable-shared \ --enable-malloc0returnsnull -$MAKE - +make $MAKEINSTALL \ No newline at end of file diff --git a/packages/x11/lib/libXrender/install b/packages/x11/lib/libXrender/install index 014c49cb2b..cc56913e5c 100755 --- a/packages/x11/lib/libXrender/install +++ b/packages/x11/lib/libXrender/install @@ -2,7 +2,5 @@ . config/options $1 -$SCRIPTS/install libX11 - mkdir -p $INSTALL/usr/lib -cp -PR $PKG_BUILD/src/.libs/libXrender.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/src/.libs/libXrender.so* $INSTALL/usr/lib diff --git a/packages/x11/lib/libXrender/meta b/packages/x11/lib/libXrender/meta new file mode 100644 index 0000000000..461ecba97e --- /dev/null +++ b/packages/x11/lib/libXrender/meta @@ -0,0 +1,14 @@ +PKG_NAME="libXrender" +PKG_VERSION="0.9.6" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="libX11" +PKG_BUILD_DEPENDS="toolchain renderproto libX11" +PKG_PRIORITY="optional" +PKG_SECTION="x11/lib" +PKG_SHORTDESC="libxrender: X Rendering Extension client library" +PKG_LONGDESC="The X Rendering Extension (Render) introduces digital image composition as the foundation of a new rendering model within the X Window System. Rendering geometric figures is accomplished by client-side tesselation into either triangles or trapezoids." +PKG_IS_ADDON="no" diff --git a/packages/x11/lib/libXrender/url b/packages/x11/lib/libXrender/url deleted file mode 100644 index 3b7400be58..0000000000 --- a/packages/x11/lib/libXrender/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/lib/libXrender-0.9.6.tar.bz2 From b9d521bd107a15995a904f45d8a6573b4142cc23 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 19:27:49 +0100 Subject: [PATCH 346/850] libXt: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/lib/libXt/build | 5 ----- packages/x11/lib/libXt/install | 3 --- packages/x11/lib/libXt/meta | 14 ++++++++++++++ packages/x11/lib/libXt/url | 1 - 4 files changed, 14 insertions(+), 9 deletions(-) create mode 100644 packages/x11/lib/libXt/meta delete mode 100644 packages/x11/lib/libXt/url diff --git a/packages/x11/lib/libXt/build b/packages/x11/lib/libXt/build index a8f77b541d..cf77851531 100755 --- a/packages/x11/lib/libXt/build +++ b/packages/x11/lib/libXt/build @@ -2,10 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build libX11 -$SCRIPTS/build libSM - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -19,5 +15,4 @@ cd $PKG_BUILD make -C util CC=$HOST_CC CFLAGS="$HOST_CFLAGS -I$SYSROOT_PREFIX/usr/include" LDFLAGS="$HOST_LDFLAGS" makestrs make - $MAKEINSTALL diff --git a/packages/x11/lib/libXt/install b/packages/x11/lib/libXt/install index b8a801e70e..6508276a1e 100755 --- a/packages/x11/lib/libXt/install +++ b/packages/x11/lib/libXt/install @@ -2,8 +2,5 @@ . config/options $1 -$SCRIPTS/install libX11 -$SCRIPTS/install libSM - mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/src/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/x11/lib/libXt/meta b/packages/x11/lib/libXt/meta new file mode 100644 index 0000000000..4b528eb67f --- /dev/null +++ b/packages/x11/lib/libXt/meta @@ -0,0 +1,14 @@ +PKG_NAME="libXt" +PKG_VERSION="1.0.9" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="libX11 libSM" +PKG_BUILD_DEPENDS="toolchain libX11 libSM" +PKG_PRIORITY="optional" +PKG_SECTION="x11/lib" +PKG_SHORTDESC="libxt: X11 toolkit intrinsics library" +PKG_LONGDESC="LibXt provides the X Toolkit Intrinsics, an abstract widget library upon which other toolkits are based. Xt is the basis for many toolkits, including the Athena widgets (Xaw), and LessTif." +PKG_IS_ADDON="no" diff --git a/packages/x11/lib/libXt/url b/packages/x11/lib/libXt/url deleted file mode 100644 index d75f835923..0000000000 --- a/packages/x11/lib/libXt/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/lib/libXt-1.0.9.tar.bz2 \ No newline at end of file From ff83e8a98bfd5f0d9dbf4e6cb6c147e75c4f672a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 19:28:17 +0100 Subject: [PATCH 347/850] libXmu: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/lib/libXmu/build | 7 ------- packages/x11/lib/libXmu/install | 4 ---- packages/x11/lib/libXmu/meta | 14 ++++++++++++++ packages/x11/lib/libXmu/url | 1 - 4 files changed, 14 insertions(+), 12 deletions(-) create mode 100644 packages/x11/lib/libXmu/meta delete mode 100644 packages/x11/lib/libXmu/url diff --git a/packages/x11/lib/libXmu/build b/packages/x11/lib/libXmu/build index 5c39bf9dc8..f5e79a4e10 100755 --- a/packages/x11/lib/libXmu/build +++ b/packages/x11/lib/libXmu/build @@ -2,12 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build xextproto -$SCRIPTS/build libX11 -$SCRIPTS/build libXext -$SCRIPTS/build libXt - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -19,5 +13,4 @@ cd $PKG_BUILD --with-gnu-ld \ make - $MAKEINSTALL diff --git a/packages/x11/lib/libXmu/install b/packages/x11/lib/libXmu/install index 86aab431b2..6508276a1e 100755 --- a/packages/x11/lib/libXmu/install +++ b/packages/x11/lib/libXmu/install @@ -2,9 +2,5 @@ . config/options $1 -$SCRIPTS/install libX11 -$SCRIPTS/install libXext -$SCRIPTS/install libXt - mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/src/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/x11/lib/libXmu/meta b/packages/x11/lib/libXmu/meta new file mode 100644 index 0000000000..7ac90379ac --- /dev/null +++ b/packages/x11/lib/libXmu/meta @@ -0,0 +1,14 @@ +PKG_NAME="libXmu" +PKG_VERSION="1.1.0" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="libXext libX11 libXt" +PKG_BUILD_DEPENDS="toolchain xextproto libXext libX11 libXt" +PKG_PRIORITY="optional" +PKG_SECTION="x11/lib" +PKG_SHORTDESC="libxmu: X11 miscellaneous utility library" +PKG_LONGDESC="LibXmu provides a set of miscellaneous utility convenience functions for X libraries to use." +PKG_IS_ADDON="no" diff --git a/packages/x11/lib/libXmu/url b/packages/x11/lib/libXmu/url deleted file mode 100644 index 79ce68f0b1..0000000000 --- a/packages/x11/lib/libXmu/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/lib/libXmu-1.1.0.tar.bz2 \ No newline at end of file From 3362f35dac787120be0bc61d293f3df8d67eec70 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 19:28:17 +0100 Subject: [PATCH 348/850] libXrandr: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/lib/libXrandr/build | 9 +-------- packages/x11/lib/libXrandr/install | 6 +----- packages/x11/lib/libXrandr/meta | 14 ++++++++++++++ packages/x11/lib/libXrandr/url | 1 - 4 files changed, 16 insertions(+), 14 deletions(-) create mode 100644 packages/x11/lib/libXrandr/meta delete mode 100644 packages/x11/lib/libXrandr/url diff --git a/packages/x11/lib/libXrandr/build b/packages/x11/lib/libXrandr/build index ba5897ebae..abe467a290 100755 --- a/packages/x11/lib/libXrandr/build +++ b/packages/x11/lib/libXrandr/build @@ -2,12 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build randrproto -$SCRIPTS/build libX11 -$SCRIPTS/build libXrender -$SCRIPTS/build libXext - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -18,6 +12,5 @@ cd $PKG_BUILD --enable-shared \ --enable-malloc0returnsnull -$MAKE - +make $MAKEINSTALL diff --git a/packages/x11/lib/libXrandr/install b/packages/x11/lib/libXrandr/install index b3f0846136..f85023cc82 100755 --- a/packages/x11/lib/libXrandr/install +++ b/packages/x11/lib/libXrandr/install @@ -2,9 +2,5 @@ . config/options $1 -$SCRIPTS/install libX11 -$SCRIPTS/install libXrender -$SCRIPTS/install libXext - mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/src/.libs/libXrandr.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/src/.libs/libXrandr.so* $INSTALL/usr/lib diff --git a/packages/x11/lib/libXrandr/meta b/packages/x11/lib/libXrandr/meta new file mode 100644 index 0000000000..6fb62cd170 --- /dev/null +++ b/packages/x11/lib/libXrandr/meta @@ -0,0 +1,14 @@ +PKG_NAME="libXrandr" +PKG_VERSION="1.3.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="libX11 libXrender libXext" +PKG_BUILD_DEPENDS="toolchain randrproto libX11 libXrender libXext" +PKG_PRIORITY="optional" +PKG_SECTION="x11/lib" +PKG_SHORTDESC="libxrandr: X Resize, Rotate and Reflection extension client library" +PKG_LONGDESC="Xrandr is a simple library designed to interface the X Resize and Rotate Extension. This allows clients to change the size and rotation of the root window of a screen, along with the ability to reflect the screen about either axis." +PKG_IS_ADDON="no" diff --git a/packages/x11/lib/libXrandr/url b/packages/x11/lib/libXrandr/url deleted file mode 100644 index 512f2bfa62..0000000000 --- a/packages/x11/lib/libXrandr/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/lib/libXrandr-1.3.1.tar.bz2 \ No newline at end of file From de3456eba24491c85abb9d5fadb560e56f748e7c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 19:28:45 +0100 Subject: [PATCH 349/850] libXft: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/lib/libXft/build | 7 ------- packages/x11/lib/libXft/install | 4 ---- packages/x11/lib/libXft/meta | 14 ++++++++++++++ packages/x11/lib/libXft/url | 1 - 4 files changed, 14 insertions(+), 12 deletions(-) create mode 100644 packages/x11/lib/libXft/meta delete mode 100644 packages/x11/lib/libXft/url diff --git a/packages/x11/lib/libXft/build b/packages/x11/lib/libXft/build index be99145de4..a0549a4507 100755 --- a/packages/x11/lib/libXft/build +++ b/packages/x11/lib/libXft/build @@ -2,12 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build fontconfig -$SCRIPTS/build freetype -$SCRIPTS/build xproto -$SCRIPTS/build libXrender - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -18,5 +12,4 @@ cd $PKG_BUILD --localstatedir=/var \ make - $MAKEINSTALL diff --git a/packages/x11/lib/libXft/install b/packages/x11/lib/libXft/install index 3320781a45..6508276a1e 100755 --- a/packages/x11/lib/libXft/install +++ b/packages/x11/lib/libXft/install @@ -2,9 +2,5 @@ . config/options $1 -$SCRIPTS/install fontconfig -$SCRIPTS/install freetype -$SCRIPTS/install libXrender - mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/src/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/x11/lib/libXft/meta b/packages/x11/lib/libXft/meta new file mode 100644 index 0000000000..073b8939e3 --- /dev/null +++ b/packages/x11/lib/libXft/meta @@ -0,0 +1,14 @@ +PKG_NAME="libXft" +PKG_VERSION="2.2.0" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="libXrender fontconfig freetype" +PKG_BUILD_DEPENDS="toolchain xproto libXrender fontconfig freetype" +PKG_PRIORITY="optional" +PKG_SECTION="x11/lib" +PKG_SHORTDESC="libxft: X FreeType library" +PKG_LONGDESC="X FreeType library" +PKG_IS_ADDON="no" diff --git a/packages/x11/lib/libXft/url b/packages/x11/lib/libXft/url deleted file mode 100644 index 769f14c44a..0000000000 --- a/packages/x11/lib/libXft/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/lib/libXft-2.2.0.tar.bz2 \ No newline at end of file From cb699274e3b5a98265c3ff6fdf1fa502577d6316 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 19:28:46 +0100 Subject: [PATCH 350/850] libXinerama: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/lib/libXinerama/build | 5 ----- packages/x11/lib/libXinerama/install | 2 -- packages/x11/lib/libXinerama/meta | 14 ++++++++++++++ packages/x11/lib/libXinerama/url | 1 - 4 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 packages/x11/lib/libXinerama/meta delete mode 100644 packages/x11/lib/libXinerama/url diff --git a/packages/x11/lib/libXinerama/build b/packages/x11/lib/libXinerama/build index 81c4dc234b..3d6501cb93 100755 --- a/packages/x11/lib/libXinerama/build +++ b/packages/x11/lib/libXinerama/build @@ -2,10 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build xineramaproto -$SCRIPTS/build libXext - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -17,5 +13,4 @@ cd $PKG_BUILD --enable-malloc0returnsnull \ make - $MAKEINSTALL diff --git a/packages/x11/lib/libXinerama/install b/packages/x11/lib/libXinerama/install index 50a708b117..59a735032f 100755 --- a/packages/x11/lib/libXinerama/install +++ b/packages/x11/lib/libXinerama/install @@ -2,7 +2,5 @@ . config/options $1 -$SCRIPTS/install libXext - mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/src/.libs/libXinerama.so* $INSTALL/usr/lib diff --git a/packages/x11/lib/libXinerama/meta b/packages/x11/lib/libXinerama/meta new file mode 100644 index 0000000000..7a841ec62b --- /dev/null +++ b/packages/x11/lib/libXinerama/meta @@ -0,0 +1,14 @@ +PKG_NAME="libXinerama" +PKG_VERSION="1.1.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="libXext" +PKG_BUILD_DEPENDS="toolchain xineramaproto libXext" +PKG_PRIORITY="optional" +PKG_SECTION="x11/lib" +PKG_SHORTDESC="libxft: X FreeType library" +PKG_LONGDESC="X FreeType library" +PKG_IS_ADDON="no" diff --git a/packages/x11/lib/libXinerama/url b/packages/x11/lib/libXinerama/url deleted file mode 100644 index a76f00594b..0000000000 --- a/packages/x11/lib/libXinerama/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/lib/libXinerama-1.1.1.tar.bz2 \ No newline at end of file From 502527cfe9a17e254bfffe153c91d0bfdc3249a9 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 19:30:23 +0100 Subject: [PATCH 351/850] libXfixes: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/lib/libXfixes/build | 7 +------ packages/x11/lib/libXfixes/install | 4 +--- packages/x11/lib/libXfixes/meta | 14 ++++++++++++++ packages/x11/lib/libXfixes/url | 1 - 4 files changed, 16 insertions(+), 10 deletions(-) create mode 100644 packages/x11/lib/libXfixes/meta delete mode 100644 packages/x11/lib/libXfixes/url diff --git a/packages/x11/lib/libXfixes/build b/packages/x11/lib/libXfixes/build index 97b0cdf440..990b153791 100755 --- a/packages/x11/lib/libXfixes/build +++ b/packages/x11/lib/libXfixes/build @@ -2,10 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build fixesproto -$SCRIPTS/build libX11 - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -15,6 +11,5 @@ cd $PKG_BUILD --disable-static \ --enable-shared \ -$MAKE - +make $MAKEINSTALL diff --git a/packages/x11/lib/libXfixes/install b/packages/x11/lib/libXfixes/install index e2f9135499..be8e2c2e55 100755 --- a/packages/x11/lib/libXfixes/install +++ b/packages/x11/lib/libXfixes/install @@ -2,7 +2,5 @@ . config/options $1 -$SCRIPTS/install libX11 - mkdir -p $INSTALL/usr/lib -cp -P $PKG_BUILD/src/.libs/libXfixes.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/src/.libs/libXfixes.so* $INSTALL/usr/lib diff --git a/packages/x11/lib/libXfixes/meta b/packages/x11/lib/libXfixes/meta new file mode 100644 index 0000000000..9df3dcac74 --- /dev/null +++ b/packages/x11/lib/libXfixes/meta @@ -0,0 +1,14 @@ +PKG_NAME="libXfixes" +PKG_VERSION="4.0.5" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="libX11" +PKG_BUILD_DEPENDS="toolchain fixesproto libX11" +PKG_PRIORITY="optional" +PKG_SECTION="x11/lib" +PKG_SHORTDESC="libxfixes: X Fixes Library" +PKG_LONGDESC="X Fixes Library" +PKG_IS_ADDON="no" diff --git a/packages/x11/lib/libXfixes/url b/packages/x11/lib/libXfixes/url deleted file mode 100644 index c0a27af376..0000000000 --- a/packages/x11/lib/libXfixes/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/lib/libXfixes-4.0.5.tar.bz2 From 557f6a1e465caa155deda7f82617d75d8fbe3f77 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 19:30:24 +0100 Subject: [PATCH 352/850] libXfont: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/lib/libXfont/build | 8 -------- packages/x11/lib/libXfont/install | 2 -- packages/x11/lib/libXfont/meta | 14 ++++++++++++++ packages/x11/lib/libXfont/url | 1 - 4 files changed, 14 insertions(+), 11 deletions(-) create mode 100644 packages/x11/lib/libXfont/meta delete mode 100644 packages/x11/lib/libXfont/url diff --git a/packages/x11/lib/libXfont/build b/packages/x11/lib/libXfont/build index 1a67a942f9..dcc9da4ec5 100755 --- a/packages/x11/lib/libXfont/build +++ b/packages/x11/lib/libXfont/build @@ -2,13 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build fontcacheproto -$SCRIPTS/build xtrans -$SCRIPTS/build fontsproto -$SCRIPTS/build freetype -$SCRIPTS/build libfontenc - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -27,5 +20,4 @@ cd $PKG_BUILD --with-gnu-ld make - $MAKEINSTALL diff --git a/packages/x11/lib/libXfont/install b/packages/x11/lib/libXfont/install index 638cbf9bcd..cc3cf5263f 100755 --- a/packages/x11/lib/libXfont/install +++ b/packages/x11/lib/libXfont/install @@ -2,7 +2,5 @@ . config/options $1 -$SCRIPTS/install freetype - mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/src/.libs/libXfont.so* $INSTALL/usr/lib diff --git a/packages/x11/lib/libXfont/meta b/packages/x11/lib/libXfont/meta new file mode 100644 index 0000000000..8ce23a0e09 --- /dev/null +++ b/packages/x11/lib/libXfont/meta @@ -0,0 +1,14 @@ +PKG_NAME="libXfont" +PKG_VERSION="1.4.3" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="freetype" +PKG_BUILD_DEPENDS="toolchain fontcacheproto fontsproto xtrans freetype libfontenc" +PKG_PRIORITY="optional" +PKG_SECTION="x11/lib" +PKG_SHORTDESC="libxfont: X font Library" +PKG_LONGDESC="X font Library" +PKG_IS_ADDON="no" diff --git a/packages/x11/lib/libXfont/url b/packages/x11/lib/libXfont/url deleted file mode 100644 index a0689be10e..0000000000 --- a/packages/x11/lib/libXfont/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/lib/libXfont-1.4.3.tar.bz2 \ No newline at end of file From 16bff6a9d419363101be0913cd80d2bfc6ab2d92 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 19:30:24 +0100 Subject: [PATCH 353/850] libXext: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/lib/libXext/build | 7 +------ packages/x11/lib/libXext/install | 4 +--- packages/x11/lib/libXext/meta | 14 ++++++++++++++ packages/x11/lib/libXext/url | 1 - 4 files changed, 16 insertions(+), 10 deletions(-) create mode 100644 packages/x11/lib/libXext/meta delete mode 100644 packages/x11/lib/libXext/url diff --git a/packages/x11/lib/libXext/build b/packages/x11/lib/libXext/build index 8c72798f19..abe467a290 100755 --- a/packages/x11/lib/libXext/build +++ b/packages/x11/lib/libXext/build @@ -2,10 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build libX11 -$SCRIPTS/build xextproto - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -16,6 +12,5 @@ cd $PKG_BUILD --enable-shared \ --enable-malloc0returnsnull -$MAKE - +make $MAKEINSTALL diff --git a/packages/x11/lib/libXext/install b/packages/x11/lib/libXext/install index 02654dc2e2..750fd6d714 100755 --- a/packages/x11/lib/libXext/install +++ b/packages/x11/lib/libXext/install @@ -2,7 +2,5 @@ . config/options $1 -$SCRIPTS/install libX11 - mkdir -p $INSTALL/usr/lib -cp -PR $PKG_BUILD/src/.libs/libXext.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/src/.libs/libXext.so* $INSTALL/usr/lib diff --git a/packages/x11/lib/libXext/meta b/packages/x11/lib/libXext/meta new file mode 100644 index 0000000000..817674585a --- /dev/null +++ b/packages/x11/lib/libXext/meta @@ -0,0 +1,14 @@ +PKG_NAME="libXext" +PKG_VERSION="1.2.0" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="libX11" +PKG_BUILD_DEPENDS="toolchain xextproto libX11" +PKG_PRIORITY="optional" +PKG_SECTION="x11/lib" +PKG_SHORTDESC="libxext: X11 miscellaneous extensions library" +PKG_LONGDESC="LibXext provides an X Window System client interface to several extensions to the X protocol, iincluding DOUBLE-BUFFER (DBE), DPMS, Extended-Visual-Information (EVI), LBX, MIT-SHM, MIT-SUNDRY-NONSTANDARD, Multi-Buffering, SECURITY, SHAPE, SHAPE, SYNC, TOG-CUP, XC-APPGROUP, XC-MISC, XTEST and possibly others." +PKG_IS_ADDON="no" diff --git a/packages/x11/lib/libXext/url b/packages/x11/lib/libXext/url deleted file mode 100644 index 301e5225cf..0000000000 --- a/packages/x11/lib/libXext/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/lib/libXext-1.2.0.tar.bz2 \ No newline at end of file From cd56b011731a23d4e933dfc9efb3680d63647dec Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 19:30:25 +0100 Subject: [PATCH 354/850] libXdamage: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/lib/libXdamage/build | 10 +--------- packages/x11/lib/libXdamage/install | 5 +---- packages/x11/lib/libXdamage/meta | 16 ++++++++++++++++ packages/x11/lib/libXdamage/url | 1 - 4 files changed, 18 insertions(+), 14 deletions(-) create mode 100644 packages/x11/lib/libXdamage/meta delete mode 100644 packages/x11/lib/libXdamage/url diff --git a/packages/x11/lib/libXdamage/build b/packages/x11/lib/libXdamage/build index f7cb5bcb09..990b153791 100755 --- a/packages/x11/lib/libXdamage/build +++ b/packages/x11/lib/libXdamage/build @@ -2,12 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build damageproto -$SCRIPTS/build fixesproto -$SCRIPTS/build libX11 -$SCRIPTS/build libXfixes - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -16,8 +10,6 @@ cd $PKG_BUILD --localstatedir=/var \ --disable-static \ --enable-shared \ - --with-x - -$MAKE +make $MAKEINSTALL diff --git a/packages/x11/lib/libXdamage/install b/packages/x11/lib/libXdamage/install index 9b9ef36bc0..936c545f1b 100755 --- a/packages/x11/lib/libXdamage/install +++ b/packages/x11/lib/libXdamage/install @@ -2,8 +2,5 @@ . config/options $1 -$SCRIPTS/install libX11 -$SCRIPTS/install libXfixes - mkdir -p $INSTALL/usr/lib -cp -PR $PKG_BUILD/src/.libs/libXdamage.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/src/.libs/libXdamage.so* $INSTALL/usr/lib diff --git a/packages/x11/lib/libXdamage/meta b/packages/x11/lib/libXdamage/meta new file mode 100644 index 0000000000..e0038e123d --- /dev/null +++ b/packages/x11/lib/libXdamage/meta @@ -0,0 +1,16 @@ +PKG_NAME="libXdamage" +PKG_VERSION="1.1.3" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="libX11 libXfixes" +PKG_BUILD_DEPENDS="toolchain damageproto fixesproto libX11 libXfixes" +PKG_PRIORITY="optional" +PKG_SECTION="x11/lib" +PKG_SHORTDESC="libXdamage: X11 damaged region extension library" +PKG_LONGDESC="LibXdamage provides an X Window System client interface to the DAMAGE extension to the X protocol. The Damage extension provides for notification of when on-screen regions have been 'damaged' (altered)." +PKG_IS_ADDON="no" + + diff --git a/packages/x11/lib/libXdamage/url b/packages/x11/lib/libXdamage/url deleted file mode 100644 index f7f56a0df4..0000000000 --- a/packages/x11/lib/libXdamage/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/lib/libXdamage-1.1.3.tar.bz2 From 2b62dc67b67a198d9c53f8858e2ccf87485a2dfd Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 19:30:25 +0100 Subject: [PATCH 355/850] libXau: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/lib/libXau/build | 4 ---- packages/x11/lib/libXau/install | 2 +- packages/x11/lib/libXau/meta | 14 ++++++++++++++ packages/x11/lib/libXau/url | 1 - 4 files changed, 15 insertions(+), 6 deletions(-) create mode 100644 packages/x11/lib/libXau/meta delete mode 100644 packages/x11/lib/libXau/url diff --git a/packages/x11/lib/libXau/build b/packages/x11/lib/libXau/build index 524e98fd00..dcfb68751c 100755 --- a/packages/x11/lib/libXau/build +++ b/packages/x11/lib/libXau/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build xproto - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -16,5 +13,4 @@ cd $PKG_BUILD --enable-xthreads \ make - $MAKEINSTALL diff --git a/packages/x11/lib/libXau/install b/packages/x11/lib/libXau/install index 72c6df79ed..d40413806c 100755 --- a/packages/x11/lib/libXau/install +++ b/packages/x11/lib/libXau/install @@ -3,4 +3,4 @@ . config/options $1 mkdir -p $INSTALL/usr/lib -cp -PR $PKG_BUILD/.libs/libXau.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/.libs/libXau.so* $INSTALL/usr/lib diff --git a/packages/x11/lib/libXau/meta b/packages/x11/lib/libXau/meta new file mode 100644 index 0000000000..91afb93858 --- /dev/null +++ b/packages/x11/lib/libXau/meta @@ -0,0 +1,14 @@ +PKG_NAME="libXau" +PKG_VERSION="1.0.6" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain xproto" +PKG_PRIORITY="optional" +PKG_SECTION="x11/lib" +PKG_SHORTDESC="libXau: X authorization file management libary" +PKG_LONGDESC="X authorization file management libary" +PKG_IS_ADDON="no" diff --git a/packages/x11/lib/libXau/url b/packages/x11/lib/libXau/url deleted file mode 100644 index d6cd348687..0000000000 --- a/packages/x11/lib/libXau/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/lib/libXau-1.0.6.tar.bz2 From e65236d9fcb3f737eeb6588363a2bdcd7c2bdf39 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 19:31:01 +0100 Subject: [PATCH 356/850] libICE: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/lib/libICE/build | 6 ------ packages/x11/lib/libICE/install | 2 +- packages/x11/lib/libICE/meta | 14 ++++++++++++++ packages/x11/lib/libICE/url | 1 - 4 files changed, 15 insertions(+), 8 deletions(-) create mode 100644 packages/x11/lib/libICE/meta delete mode 100644 packages/x11/lib/libICE/url diff --git a/packages/x11/lib/libICE/build b/packages/x11/lib/libICE/build index 21aacd8e3a..44f40c1d2b 100755 --- a/packages/x11/lib/libICE/build +++ b/packages/x11/lib/libICE/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build xtrans - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -14,9 +11,6 @@ cd $PKG_BUILD --disable-static \ --enable-shared \ --disable-ipv6 \ -# --enable-unix-transport \ -# --disable-tcp-transport \ -# --disable-local-transport \ make diff --git a/packages/x11/lib/libICE/install b/packages/x11/lib/libICE/install index a7274b2c80..6508276a1e 100755 --- a/packages/x11/lib/libICE/install +++ b/packages/x11/lib/libICE/install @@ -3,4 +3,4 @@ . config/options $1 mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/src/.libs/*.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/src/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/x11/lib/libICE/meta b/packages/x11/lib/libICE/meta new file mode 100644 index 0000000000..1b8ac83286 --- /dev/null +++ b/packages/x11/lib/libICE/meta @@ -0,0 +1,14 @@ +PKG_NAME="libICE" +PKG_VERSION="1.0.7" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain xtrans" +PKG_PRIORITY="optional" +PKG_SECTION="x11/lib" +PKG_SHORTDESC="libice: X Inter-Client Exchange (ICE) protocol library" +PKG_LONGDESC="X Inter-Client Exchange (ICE) protocol library." +PKG_IS_ADDON="no" diff --git a/packages/x11/lib/libICE/url b/packages/x11/lib/libICE/url deleted file mode 100644 index 1ec280177e..0000000000 --- a/packages/x11/lib/libICE/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/lib/libICE-1.0.7.tar.bz2 \ No newline at end of file From 0aa70ddbfb5558e4ccff62dfae1128bfd5266837 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 19:31:02 +0100 Subject: [PATCH 357/850] libSM: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/lib/libSM/build | 4 ---- packages/x11/lib/libSM/install | 5 +---- packages/x11/lib/libSM/meta | 14 ++++++++++++++ packages/x11/lib/libSM/url | 1 - 4 files changed, 15 insertions(+), 9 deletions(-) create mode 100644 packages/x11/lib/libSM/meta delete mode 100644 packages/x11/lib/libSM/url diff --git a/packages/x11/lib/libSM/build b/packages/x11/lib/libSM/build index 0cb5a193bf..52eef8ba6b 100755 --- a/packages/x11/lib/libSM/build +++ b/packages/x11/lib/libSM/build @@ -2,10 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build util-linux-ng -$SCRIPTS/build libICE - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/x11/lib/libSM/install b/packages/x11/lib/libSM/install index 87cdcae0eb..6508276a1e 100755 --- a/packages/x11/lib/libSM/install +++ b/packages/x11/lib/libSM/install @@ -2,8 +2,5 @@ . config/options $1 -$SCRIPTS/install util-linux-ng -$SCRIPTS/install libICE - mkdir -p $INSTALL/usr/lib - cp -PR $PKG_BUILD/src/.libs/*.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/src/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/x11/lib/libSM/meta b/packages/x11/lib/libSM/meta new file mode 100644 index 0000000000..f2755c0fe1 --- /dev/null +++ b/packages/x11/lib/libSM/meta @@ -0,0 +1,14 @@ +PKG_NAME="libSM" +PKG_VERSION="1.2.0" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="util-linux-ng libICE" +PKG_BUILD_DEPENDS="toolchain util-linux-ng libICE" +PKG_PRIORITY="optional" +PKG_SECTION="x11/lib" +PKG_SHORTDESC="libSM: X11 Inter-Client Exchange library" +PKG_LONGDESC="This package provides the main interface to the X11 Session Management library, which allows for applications to both manage sessions, and make use of session managers to save and restore their state for later use." +PKG_IS_ADDON="no" diff --git a/packages/x11/lib/libSM/url b/packages/x11/lib/libSM/url deleted file mode 100644 index b53e737e8d..0000000000 --- a/packages/x11/lib/libSM/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/lib/libSM-1.2.0.tar.bz2 \ No newline at end of file From 2371e1920750b2dc7a8ed726c69542bebcf30616 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 19:32:09 +0100 Subject: [PATCH 358/850] libXi: cleanup Signed-off-by: Stephan Raue --- packages/x11/lib/libXi/build | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/x11/lib/libXi/build b/packages/x11/lib/libXi/build index be47cac197..653a4eacf6 100755 --- a/packages/x11/lib/libXi/build +++ b/packages/x11/lib/libXi/build @@ -14,5 +14,4 @@ cd $PKG_BUILD --enable-malloc0returnsnull \ make SUBDIRS="src" - $MAKEINSTALL SUBDIRS="src" From c4bcf5bd2915c894c6b81224ced47a894b38d276 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 19:32:20 +0100 Subject: [PATCH 359/850] libxcb: cleanup Signed-off-by: Stephan Raue --- packages/x11/lib/libxcb/build | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/x11/lib/libxcb/build b/packages/x11/lib/libxcb/build index 856ce030ed..2d262fafd7 100755 --- a/packages/x11/lib/libxcb/build +++ b/packages/x11/lib/libxcb/build @@ -17,5 +17,4 @@ cd $PKG_BUILD --enable-shared \ make - $MAKEINSTALL From ab535a5e2999891cfa779c8a482b2d6d133dbec9 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 19:32:30 +0100 Subject: [PATCH 360/850] pixman: cleanup Signed-off-by: Stephan Raue --- packages/x11/lib/pixman/build | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/x11/lib/pixman/build b/packages/x11/lib/pixman/build index 72037b7664..13ed8a63fd 100755 --- a/packages/x11/lib/pixman/build +++ b/packages/x11/lib/pixman/build @@ -24,7 +24,6 @@ cd $PKG_BUILD echo "" > test/Makefile.am make - $MAKEINSTALL cp $SYSROOT_PREFIX/usr/lib/pkgconfig/pixman-1.pc \ From 61a9eddd8b0f4a2c1ad6edf7d03fccb2c23fc872 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 21:24:26 +0100 Subject: [PATCH 361/850] util-macros: add metafile support Signed-off-by: Stephan Raue --- packages/x11/util/util-macros/meta | 14 ++++++++++++++ packages/x11/util/util-macros/url | 1 - 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/x11/util/util-macros/meta delete mode 100644 packages/x11/util/util-macros/url diff --git a/packages/x11/util/util-macros/meta b/packages/x11/util/util-macros/meta new file mode 100644 index 0000000000..1e8ff5325a --- /dev/null +++ b/packages/x11/util/util-macros/meta @@ -0,0 +1,14 @@ +PKG_NAME="util-macros" +PKG_VERSION="1.11.0" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/util/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="x11/util" +PKG_SHORTDESC="util-macros: X.org autoconf utilities" +PKG_LONGDESC="X.org autoconf utilities such as M4 macros." +PKG_IS_ADDON="no" diff --git a/packages/x11/util/util-macros/url b/packages/x11/util/util-macros/url deleted file mode 100644 index 51820d1b7e..0000000000 --- a/packages/x11/util/util-macros/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/util/util-macros-1.11.0.tar.bz2 \ No newline at end of file From df2b0be18b9d410dd7ceb4be5adfe0450926565c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 21:24:28 +0100 Subject: [PATCH 362/850] gdk-pixbuf: add metafile support Signed-off-by: Stephan Raue --- packages/x11/toolkits/gdk-pixbuf/build | 7 ------- packages/x11/toolkits/gdk-pixbuf/install | 6 ------ packages/x11/toolkits/gdk-pixbuf/meta | 14 ++++++++++++++ packages/x11/toolkits/gdk-pixbuf/url | 1 - 4 files changed, 14 insertions(+), 14 deletions(-) create mode 100644 packages/x11/toolkits/gdk-pixbuf/meta delete mode 100644 packages/x11/toolkits/gdk-pixbuf/url diff --git a/packages/x11/toolkits/gdk-pixbuf/build b/packages/x11/toolkits/gdk-pixbuf/build index 81baacbb12..3b9bebb8f5 100755 --- a/packages/x11/toolkits/gdk-pixbuf/build +++ b/packages/x11/toolkits/gdk-pixbuf/build @@ -2,13 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build glib -$SCRIPTS/build tiff -$SCRIPTS/build $LIBJPEG -$SCRIPTS/build libpng -$SCRIPTS/build jasper - cd $PKG_BUILD gio_can_sniff=yes \ ./configure --host=$TARGET_NAME \ diff --git a/packages/x11/toolkits/gdk-pixbuf/install b/packages/x11/toolkits/gdk-pixbuf/install index f92a40193b..2ca2d84e45 100755 --- a/packages/x11/toolkits/gdk-pixbuf/install +++ b/packages/x11/toolkits/gdk-pixbuf/install @@ -2,12 +2,6 @@ . config/options $1 -$SCRIPTS/build glib -$SCRIPTS/build tiff -$SCRIPTS/build $LIBJPEG -$SCRIPTS/build libpng -$SCRIPTS/build jasper - GDK_BINARY_VERSION=`pkg-config gdk-pixbuf-2.0 --variable=gdk_pixbuf_binary_version` GDK_LIB_DIR="gdk-pixbuf-2.0/$GDK_BINARY_VERSION" diff --git a/packages/x11/toolkits/gdk-pixbuf/meta b/packages/x11/toolkits/gdk-pixbuf/meta new file mode 100644 index 0000000000..29af6660ad --- /dev/null +++ b/packages/x11/toolkits/gdk-pixbuf/meta @@ -0,0 +1,14 @@ +PKG_NAME="gdk-pixbuf" +PKG_VERSION="2.22.0" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.gtk.org/" +PKG_URL="http://ftp.gnome.org/pub/gnome/sources/gdk-pixbuf/2.22/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="glib tiff $LIBJPEG libpng jasper" +PKG_BUILD_DEPENDS="toolchain glib tiff $LIBJPEG libpng jasper" +PKG_PRIORITY="optional" +PKG_SECTION="x11/toolkits" +PKG_SHORTDESC="gdk-pixbuf: a GNOME library for image loading and manipulation." +PKG_LONGDESC="gdk-pixbuf (GdkPixbuf) is a GNOME library for image loading and manipulation. The GdkPixbuf documentation contains both the programmer's guide and the API reference." +PKG_IS_ADDON="no" diff --git a/packages/x11/toolkits/gdk-pixbuf/url b/packages/x11/toolkits/gdk-pixbuf/url deleted file mode 100644 index 60654ff0f1..0000000000 --- a/packages/x11/toolkits/gdk-pixbuf/url +++ /dev/null @@ -1 +0,0 @@ -http://ftp.gnome.org/pub/gnome/sources/gdk-pixbuf/2.22/gdk-pixbuf-2.22.0.tar.bz2 \ No newline at end of file From be2c4ed97300b09a8e238b3845583f0d48818cb6 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 21:24:28 +0100 Subject: [PATCH 363/850] font-xfree86-type1: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/font/font-xfree86-type1/build | 4 +--- packages/x11/font/font-xfree86-type1/install | 2 +- packages/x11/font/font-xfree86-type1/meta | 14 ++++++++++++++ packages/x11/font/font-xfree86-type1/url | 1 - 4 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 packages/x11/font/font-xfree86-type1/meta delete mode 100644 packages/x11/font/font-xfree86-type1/url diff --git a/packages/x11/font/font-xfree86-type1/build b/packages/x11/font/font-xfree86-type1/build index 93157cf2bd..5981097c8f 100755 --- a/packages/x11/font/font-xfree86-type1/build +++ b/packages/x11/font/font-xfree86-type1/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -12,4 +10,4 @@ cd $PKG_BUILD --localstatedir=/var \ --with-fontdir=$XORG_PATH_FONTS -$MAKE +make \ No newline at end of file diff --git a/packages/x11/font/font-xfree86-type1/install b/packages/x11/font/font-xfree86-type1/install index 94cb6e70cb..c83b1cabbc 100755 --- a/packages/x11/font/font-xfree86-type1/install +++ b/packages/x11/font/font-xfree86-type1/install @@ -3,4 +3,4 @@ . config/options $1 mkdir -p $INSTALL/$XORG_PATH_FONTS -cp $PKG_BUILD/cursor.pfa $INSTALL/$XORG_PATH_FONTS + cp $PKG_BUILD/cursor.pfa $INSTALL/$XORG_PATH_FONTS diff --git a/packages/x11/font/font-xfree86-type1/meta b/packages/x11/font/font-xfree86-type1/meta new file mode 100644 index 0000000000..7f7a136f7c --- /dev/null +++ b/packages/x11/font/font-xfree86-type1/meta @@ -0,0 +1,14 @@ +PKG_NAME="font-xfree86-type1" +PKG_VERSION="1.0.3" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/releases/individual/font/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="x11/font" +PKG_SHORTDESC="font-xfree86-type1: A Xfree86 Inc. Type1 font" +PKG_LONGDESC="A Xfree86 Inc. Type1 font." +PKG_IS_ADDON="no" diff --git a/packages/x11/font/font-xfree86-type1/url b/packages/x11/font/font-xfree86-type1/url deleted file mode 100644 index da1a99e70f..0000000000 --- a/packages/x11/font/font-xfree86-type1/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/releases/individual/font/font-xfree86-type1-1.0.3.tar.bz2 From 4911cf73d4002d9e925ed66542de1d8ebd2d6575 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 21:25:47 +0100 Subject: [PATCH 364/850] font-cursor-misc: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/font/font-cursor-misc/build | 5 +---- packages/x11/font/font-cursor-misc/install | 4 ---- packages/x11/font/font-cursor-misc/meta | 14 ++++++++++++++ packages/x11/font/font-cursor-misc/url | 1 - 4 files changed, 15 insertions(+), 9 deletions(-) delete mode 100755 packages/x11/font/font-cursor-misc/install create mode 100644 packages/x11/font/font-cursor-misc/meta delete mode 100644 packages/x11/font/font-cursor-misc/url diff --git a/packages/x11/font/font-cursor-misc/build b/packages/x11/font/font-cursor-misc/build index ad8d7c5406..fbc5963448 100755 --- a/packages/x11/font/font-cursor-misc/build +++ b/packages/x11/font/font-cursor-misc/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build font-util - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -13,4 +10,4 @@ cd $PKG_BUILD --localstatedir=/var \ --with-fontdir=$XORG_PATH_FONTS -$MAKE UTIL_DIR="`ls -d $ROOT/$BUILD/font-util*`" +make UTIL_DIR="`ls -d $ROOT/$BUILD/font-util*`" diff --git a/packages/x11/font/font-cursor-misc/install b/packages/x11/font/font-cursor-misc/install deleted file mode 100755 index 1e5d23e1cd..0000000000 --- a/packages/x11/font/font-cursor-misc/install +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -. config/options $1 -$SCRIPTS/install font-util diff --git a/packages/x11/font/font-cursor-misc/meta b/packages/x11/font/font-cursor-misc/meta new file mode 100644 index 0000000000..719c355389 --- /dev/null +++ b/packages/x11/font/font-cursor-misc/meta @@ -0,0 +1,14 @@ +PKG_NAME="font-cursor-misc" +PKG_VERSION="1.0.2" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/font/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="font-util" +PKG_BUILD_DEPENDS="toolchain font-util" +PKG_PRIORITY="optional" +PKG_SECTION="x11/font" +PKG_SHORTDESC="font-cursor-misc: X11 cursor fonts" +PKG_LONGDESC="X11 cursor fonts." +PKG_IS_ADDON="no" diff --git a/packages/x11/font/font-cursor-misc/url b/packages/x11/font/font-cursor-misc/url deleted file mode 100644 index 39c169d94d..0000000000 --- a/packages/x11/font/font-cursor-misc/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/font/font-cursor-misc-1.0.2.tar.bz2 \ No newline at end of file From 2d876eb22cd2b3eda7f4023e6ad5135e1a1ed41a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 21:25:47 +0100 Subject: [PATCH 365/850] font-misc-misc: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/font/font-misc-misc/build | 6 +----- packages/x11/font/font-misc-misc/install | 7 ++----- packages/x11/font/font-misc-misc/meta | 14 ++++++++++++++ packages/x11/font/font-misc-misc/url | 1 - 4 files changed, 17 insertions(+), 11 deletions(-) create mode 100644 packages/x11/font/font-misc-misc/meta delete mode 100644 packages/x11/font/font-misc-misc/url diff --git a/packages/x11/font/font-misc-misc/build b/packages/x11/font/font-misc-misc/build index ba36ef0510..bf76b5df16 100755 --- a/packages/x11/font/font-misc-misc/build +++ b/packages/x11/font/font-misc-misc/build @@ -2,10 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build font-cursor-misc -$SCRIPTS/build font-util - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -14,7 +10,7 @@ cd $PKG_BUILD --localstatedir=/var \ --with-fontdir=$XORG_PATH_FONTS -$MAKE UTIL_DIR="`ls -d $ROOT/$BUILD/font-util*`" +make UTIL_DIR="`ls -d $ROOT/$BUILD/font-util*`" mkdir -p fonts cp 6x13-ISO8859-1.pcf.gz fonts diff --git a/packages/x11/font/font-misc-misc/install b/packages/x11/font/font-misc-misc/install index ba1ab99ddc..607e9e8c9b 100755 --- a/packages/x11/font/font-misc-misc/install +++ b/packages/x11/font/font-misc-misc/install @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/install font-cursor-misc -$SCRIPTS/install font-util - mkdir -p $INSTALL/$XORG_PATH_FONTS/misc -cp $PKG_BUILD/fonts/* $INSTALL/$XORG_PATH_FONTS/misc -cp $PKG_DIR/config/fonts.alias $INSTALL/$XORG_PATH_FONTS/misc + cp $PKG_BUILD/fonts/* $INSTALL/$XORG_PATH_FONTS/misc + cp $PKG_DIR/config/fonts.alias $INSTALL/$XORG_PATH_FONTS/misc diff --git a/packages/x11/font/font-misc-misc/meta b/packages/x11/font/font-misc-misc/meta new file mode 100644 index 0000000000..d1c90ae423 --- /dev/null +++ b/packages/x11/font/font-misc-misc/meta @@ -0,0 +1,14 @@ +PKG_NAME="font-misc-misc" +PKG_VERSION="1.1.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/font/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="font-cursor-misc font-util" +PKG_BUILD_DEPENDS="toolchain font-cursor-misc font-util" +PKG_PRIORITY="optional" +PKG_SECTION="x11/font" +PKG_SHORTDESC="font-misc-misc: A misc. public domain font" +PKG_LONGDESC="A misc. public domain font." +PKG_IS_ADDON="no" diff --git a/packages/x11/font/font-misc-misc/url b/packages/x11/font/font-misc-misc/url deleted file mode 100644 index 7a2b26e3c4..0000000000 --- a/packages/x11/font/font-misc-misc/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/font/font-misc-misc-1.1.1.tar.bz2 From dc65318552bf6001edfb1e06ebc18a0c646cae83 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 21:25:48 +0100 Subject: [PATCH 366/850] font-util: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/font/font-util/build | 2 -- packages/x11/font/font-util/install | 2 +- packages/x11/font/font-util/meta | 14 ++++++++++++++ packages/x11/font/font-util/url | 1 - 4 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 packages/x11/font/font-util/meta delete mode 100644 packages/x11/font/font-util/url diff --git a/packages/x11/font/font-util/build b/packages/x11/font/font-util/build index 500cc6f8bc..953d2d76da 100755 --- a/packages/x11/font/font-util/build +++ b/packages/x11/font/font-util/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - setup_toolchain host cd $PKG_BUILD diff --git a/packages/x11/font/font-util/install b/packages/x11/font/font-util/install index 55d65a84c3..47c9845748 100755 --- a/packages/x11/font/font-util/install +++ b/packages/x11/font/font-util/install @@ -3,4 +3,4 @@ . config/options $1 mkdir -p $INSTALL/$XORG_PATH_MAPS -cp $PKG_BUILD/map-* $INSTALL/$XORG_PATH_MAPS + cp $PKG_BUILD/map-* $INSTALL/$XORG_PATH_MAPS diff --git a/packages/x11/font/font-util/meta b/packages/x11/font/font-util/meta new file mode 100644 index 0000000000..16f7124f83 --- /dev/null +++ b/packages/x11/font/font-util/meta @@ -0,0 +1,14 @@ +PKG_NAME="font-util" +PKG_VERSION="1.2.0" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/font/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="x11/font" +PKG_SHORTDESC="font-util: X.org font utilities" +PKG_LONGDESC="X.org font utilities." +PKG_IS_ADDON="no" diff --git a/packages/x11/font/font-util/url b/packages/x11/font/font-util/url deleted file mode 100644 index c5285b969d..0000000000 --- a/packages/x11/font/font-util/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/font/font-util-1.2.0.tar.bz2 \ No newline at end of file From 14737d44222e6b2e2020a635e7c0f03d915f9535 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 21:26:50 +0100 Subject: [PATCH 367/850] xf86-input-wacom: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/driver/xf86-input-wacom/build | 2 -- packages/x11/driver/xf86-input-wacom/meta | 14 ++++++++++++++ packages/x11/driver/xf86-input-wacom/url | 1 - 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 packages/x11/driver/xf86-input-wacom/meta delete mode 100644 packages/x11/driver/xf86-input-wacom/url diff --git a/packages/x11/driver/xf86-input-wacom/build b/packages/x11/driver/xf86-input-wacom/build index 7e1ce08367..3de33eb99d 100755 --- a/packages/x11/driver/xf86-input-wacom/build +++ b/packages/x11/driver/xf86-input-wacom/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/x11/driver/xf86-input-wacom/meta b/packages/x11/driver/xf86-input-wacom/meta new file mode 100644 index 0000000000..5fff5f5a16 --- /dev/null +++ b/packages/x11/driver/xf86-input-wacom/meta @@ -0,0 +1,14 @@ +PKG_NAME="xf86-input-wacom" +PKG_VERSION="0.10.8" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OpenSource" +PKG_SITE="http://www.X.org" +PKG_URL="http://freefr.dl.sourceforge.net/project/linuxwacom/xf86-input-wacom/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="x11" +PKG_SHORTDESC="xf86-input-wacom: The Xorg wacom driver" +PKG_LONGDESC="The Xorg wacomdriver for all sorts of common tablets." +PKG_IS_ADDON="no" diff --git a/packages/x11/driver/xf86-input-wacom/url b/packages/x11/driver/xf86-input-wacom/url deleted file mode 100644 index 1b3fa2dfc8..0000000000 --- a/packages/x11/driver/xf86-input-wacom/url +++ /dev/null @@ -1 +0,0 @@ -http://freefr.dl.sourceforge.net/project/linuxwacom/xf86-input-wacom/xf86-input-wacom-0.10.8.tar.bz2 From 51349801fd8a0d0dc295e8aa6e83c3379e2c8e7f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 21:26:51 +0100 Subject: [PATCH 368/850] encodings: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/font/encodings/build | 2 -- packages/x11/font/encodings/meta | 14 ++++++++++++++ packages/x11/font/encodings/url | 1 - 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 packages/x11/font/encodings/meta delete mode 100644 packages/x11/font/encodings/url diff --git a/packages/x11/font/encodings/build b/packages/x11/font/encodings/build index c4f658d81c..bc41317461 100755 --- a/packages/x11/font/encodings/build +++ b/packages/x11/font/encodings/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/x11/font/encodings/meta b/packages/x11/font/encodings/meta new file mode 100644 index 0000000000..aa2e82cfef --- /dev/null +++ b/packages/x11/font/encodings/meta @@ -0,0 +1,14 @@ +PKG_NAME="encodings" +PKG_VERSION="1.0.4" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/font/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="x11/font" +PKG_SHORTDESC="encodings: X font encodings" +PKG_LONGDESC="X font encoding meta files." +PKG_IS_ADDON="no" diff --git a/packages/x11/font/encodings/url b/packages/x11/font/encodings/url deleted file mode 100644 index da5ab9872d..0000000000 --- a/packages/x11/font/encodings/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/font/encodings-1.0.4.tar.bz2 \ No newline at end of file From 2a472e2be1a6972d21ff35445b018e5150ba2cce Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 21:26:51 +0100 Subject: [PATCH 369/850] font-bitstream-type1: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/font/font-bitstream-type1/build | 7 ++----- packages/x11/font/font-bitstream-type1/install | 2 +- packages/x11/font/font-bitstream-type1/meta | 14 ++++++++++++++ packages/x11/font/font-bitstream-type1/url | 1 - 4 files changed, 17 insertions(+), 7 deletions(-) create mode 100644 packages/x11/font/font-bitstream-type1/meta delete mode 100644 packages/x11/font/font-bitstream-type1/url diff --git a/packages/x11/font/font-bitstream-type1/build b/packages/x11/font/font-bitstream-type1/build index eb1cf414d1..024bfa5a6a 100755 --- a/packages/x11/font/font-bitstream-type1/build +++ b/packages/x11/font/font-bitstream-type1/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -12,11 +10,10 @@ cd $PKG_BUILD --localstatedir=/var \ --with-fontdir=$XORG_PATH_FONTS -$MAKE +make mkdir -p fonts - cp *.afm fonts - cp *.pfb fonts + cp *.afm *.pfb fonts cd fonts mkfontdir diff --git a/packages/x11/font/font-bitstream-type1/install b/packages/x11/font/font-bitstream-type1/install index 177c5d2709..15f67fb940 100755 --- a/packages/x11/font/font-bitstream-type1/install +++ b/packages/x11/font/font-bitstream-type1/install @@ -3,4 +3,4 @@ . config/options $1 mkdir -p $INSTALL/$XORG_PATH_FONTS/Type1 -cp $PKG_BUILD/fonts/* $INSTALL/$XORG_PATH_FONTS/Type1 + cp $PKG_BUILD/fonts/* $INSTALL/$XORG_PATH_FONTS/Type1 diff --git a/packages/x11/font/font-bitstream-type1/meta b/packages/x11/font/font-bitstream-type1/meta new file mode 100644 index 0000000000..d8d264009b --- /dev/null +++ b/packages/x11/font/font-bitstream-type1/meta @@ -0,0 +1,14 @@ +PKG_NAME="font-bitstream-type1" +PKG_VERSION="1.0.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/font/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="x11/font" +PKG_SHORTDESC="font-bitstream-type1: Bitstream font family" +PKG_LONGDESC="Bitstream font family." +PKG_IS_ADDON="no" diff --git a/packages/x11/font/font-bitstream-type1/url b/packages/x11/font/font-bitstream-type1/url deleted file mode 100644 index f943fa16c3..0000000000 --- a/packages/x11/font/font-bitstream-type1/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/font/font-bitstream-type1-1.0.1.tar.bz2 \ No newline at end of file From 7089a8e519589b2356ef2ee99b88d5f2646d0b64 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 21:27:45 +0100 Subject: [PATCH 370/850] xf86-input-evdev: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/driver/xf86-input-evdev/build | 2 -- packages/x11/driver/xf86-input-evdev/meta | 14 ++++++++++++++ packages/x11/driver/xf86-input-evdev/url | 1 - 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 packages/x11/driver/xf86-input-evdev/meta delete mode 100644 packages/x11/driver/xf86-input-evdev/url diff --git a/packages/x11/driver/xf86-input-evdev/build b/packages/x11/driver/xf86-input-evdev/build index 7e1ce08367..3de33eb99d 100755 --- a/packages/x11/driver/xf86-input-evdev/build +++ b/packages/x11/driver/xf86-input-evdev/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/x11/driver/xf86-input-evdev/meta b/packages/x11/driver/xf86-input-evdev/meta new file mode 100644 index 0000000000..399dcbb3fd --- /dev/null +++ b/packages/x11/driver/xf86-input-evdev/meta @@ -0,0 +1,14 @@ +PKG_NAME="xf86-input-evdev" +PKG_VERSION="2.5.0" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/driver/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="x11/driver" +PKG_SHORTDESC="xf86-input-evdev: Generic Xorg Linux input driver" +PKG_LONGDESC="Evdev is an Xorg input driver for Linux's generic event devices. It therefore supports all input devices that the kernel knows about, including most mice and keyboards." +PKG_IS_ADDON="no" diff --git a/packages/x11/driver/xf86-input-evdev/url b/packages/x11/driver/xf86-input-evdev/url deleted file mode 100644 index 2029cb210f..0000000000 --- a/packages/x11/driver/xf86-input-evdev/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/driver/xf86-input-evdev-2.5.0.tar.bz2 \ No newline at end of file From aec4342b9b8473bd59f6baa74e76ac9faf0dec90 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 21:27:45 +0100 Subject: [PATCH 371/850] xf86-input-synaptics: add metafile support, thanks to cowbalt Signed-off-by: Stephan Raue --- packages/x11/driver/xf86-input-synaptics/build | 3 --- packages/x11/driver/xf86-input-synaptics/install | 2 -- packages/x11/driver/xf86-input-synaptics/meta | 14 ++++++++++++++ packages/x11/driver/xf86-input-synaptics/url | 1 - 4 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 packages/x11/driver/xf86-input-synaptics/meta delete mode 100644 packages/x11/driver/xf86-input-synaptics/url diff --git a/packages/x11/driver/xf86-input-synaptics/build b/packages/x11/driver/xf86-input-synaptics/build index 4345772d43..e29cf5d511 100755 --- a/packages/x11/driver/xf86-input-synaptics/build +++ b/packages/x11/driver/xf86-input-synaptics/build @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build libXi - cd $PKG_BUILD $AUTORECONF diff --git a/packages/x11/driver/xf86-input-synaptics/install b/packages/x11/driver/xf86-input-synaptics/install index 5b4008c9d9..540d5e65a3 100755 --- a/packages/x11/driver/xf86-input-synaptics/install +++ b/packages/x11/driver/xf86-input-synaptics/install @@ -2,7 +2,5 @@ . config/options $1 -$SCRIPTS/install libXi - mkdir -p $INSTALL/$XORG_PATH_MODULES/input cp -P $PKG_BUILD/src/.libs/synaptics_drv.so $INSTALL/$XORG_PATH_MODULES/input diff --git a/packages/x11/driver/xf86-input-synaptics/meta b/packages/x11/driver/xf86-input-synaptics/meta new file mode 100644 index 0000000000..112154ddf2 --- /dev/null +++ b/packages/x11/driver/xf86-input-synaptics/meta @@ -0,0 +1,14 @@ +PKG_NAME="xf86-input-synaptics" +PKG_VERSION="1.3.0" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.X.org" +PKG_URL="http://xorg.freedesktop.org/archive/individual/driver/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="libXi" +PKG_BUILD_DEPENDS="toolchain libXi" +PKG_PRIORITY="optional" +PKG_SECTION="x11/driver" +PKG_SHORTDESC="xf86-input-synaptics: A (alternate) Synaptics touchpad X driver" +PKG_LONGDESC="This package provides an (alternate) Synaptics touchpad driver." +PKG_IS_ADDON="no" diff --git a/packages/x11/driver/xf86-input-synaptics/url b/packages/x11/driver/xf86-input-synaptics/url deleted file mode 100644 index a26d8bf795..0000000000 --- a/packages/x11/driver/xf86-input-synaptics/url +++ /dev/null @@ -1 +0,0 @@ -http://xorg.freedesktop.org/archive/individual/driver/xf86-input-synaptics-1.3.0.tar.bz2 \ No newline at end of file From df9b2d5d988872feb2e1d32c2b4bf17ada65c49d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 16 Nov 2010 21:28:35 +0100 Subject: [PATCH 372/850] liberation-fonts-ttf: cleanups Signed-off-by: Stephan Raue --- packages/x11/font/liberation-fonts-ttf/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/x11/font/liberation-fonts-ttf/meta b/packages/x11/font/liberation-fonts-ttf/meta index 4b1f98c5df..5561c816d5 100644 --- a/packages/x11/font/liberation-fonts-ttf/meta +++ b/packages/x11/font/liberation-fonts-ttf/meta @@ -8,7 +8,7 @@ PKG_URL="https://fedorahosted.org/releases/l/i/liberation-fonts/$PKG_NAME-$PKG_V PKG_DEPENDS="" PKG_BUILD_DEPENDS="toolchain" PKG_PRIORITY="optional" -PKG_SECTION="fonts" +PKG_SECTION="x11/fonts" PKG_SHORTDESC="liberation-fonts: High quality "open-sourced" vector fonts" PKG_LONGDESC="This packages included the high-quality and open-sourced TrueType vector fonts released by RedHat." PKG_IS_ADDON="no" From 5fba063f17d85aa3e27d05d2cbc9281059e9cabc Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 17 Nov 2010 14:33:06 +0100 Subject: [PATCH 373/850] linux: update alternative version to linux-2.6.37-rc2 Signed-off-by: Stephan Raue --- packages/linux/meta | 2 +- ...> linux-2.6.37-rc2-000_crosscompile.patch} | 0 ...=> linux-2.6.37-rc2-000_fix_include.patch} | 0 ...rc2-000_fix_userspace_build_of_fs.h.patch} | 0 ...ux-2.6.37-rc2-002_bash_only_feature.patch} | 0 ...linux-2.6.37-rc2-003-no_dev_console.patch} | 0 ...c2-004_lower_undefined_mode_timeout.patch} | 0 ...2.6.37-rc2-005_kconfig_no_timestamp.patch} | 0 ...=> linux-2.6.37-rc2-006_enable_utf8.patch} | 0 ...linux-2.6.37-rc2-007_die_floppy_die.patch} | 0 ...08-hda_intel_prealloc_4mb_dmabuffer.patch} | 0 ...09_disable_i8042_check_on_apple_mac.patch} | 0 ...6.37-rc2-050_add_appleir_usb_driver.patch} | 0 ....37-rc2-052-aureal_remote_quirk-0.1.patch} | 0 ...2-110-drm_nouveau_upstream-20101116.patch} | 1240 +++++++++++++---- 15 files changed, 971 insertions(+), 271 deletions(-) rename packages/linux/patches/{linux-2.6.37-rc1-000_crosscompile.patch => linux-2.6.37-rc2-000_crosscompile.patch} (100%) rename packages/linux/patches/{linux-2.6.37-rc1-000_fix_include.patch => linux-2.6.37-rc2-000_fix_include.patch} (100%) rename packages/linux/patches/{linux-2.6.37-rc1-000_fix_userspace_build_of_fs.h.patch => linux-2.6.37-rc2-000_fix_userspace_build_of_fs.h.patch} (100%) rename packages/linux/patches/{linux-2.6.37-rc1-002_bash_only_feature.patch => linux-2.6.37-rc2-002_bash_only_feature.patch} (100%) rename packages/linux/patches/{linux-2.6.37-rc1-003-no_dev_console.patch => linux-2.6.37-rc2-003-no_dev_console.patch} (100%) rename packages/linux/patches/{linux-2.6.37-rc1-004_lower_undefined_mode_timeout.patch => linux-2.6.37-rc2-004_lower_undefined_mode_timeout.patch} (100%) rename packages/linux/patches/{linux-2.6.37-rc1-005_kconfig_no_timestamp.patch => linux-2.6.37-rc2-005_kconfig_no_timestamp.patch} (100%) rename packages/linux/patches/{linux-2.6.37-rc1-006_enable_utf8.patch => linux-2.6.37-rc2-006_enable_utf8.patch} (100%) rename packages/linux/patches/{linux-2.6.37-rc1-007_die_floppy_die.patch => linux-2.6.37-rc2-007_die_floppy_die.patch} (100%) rename packages/linux/patches/{linux-2.6.37-rc1-008-hda_intel_prealloc_4mb_dmabuffer.patch => linux-2.6.37-rc2-008-hda_intel_prealloc_4mb_dmabuffer.patch} (100%) rename packages/linux/patches/{linux-2.6.37-rc1-009_disable_i8042_check_on_apple_mac.patch => linux-2.6.37-rc2-009_disable_i8042_check_on_apple_mac.patch} (100%) rename packages/linux/patches/{linux-2.6.37-rc1-050_add_appleir_usb_driver.patch => linux-2.6.37-rc2-050_add_appleir_usb_driver.patch} (100%) rename packages/linux/patches/{linux-2.6.37-rc1-052-aureal_remote_quirk-0.1.patch => linux-2.6.37-rc2-052-aureal_remote_quirk-0.1.patch} (100%) rename packages/linux/patches/{linux-2.6.37-rc1-110-drm_nouveau_upstream-20101111.patch => linux-2.6.37-rc2-110-drm_nouveau_upstream-20101116.patch} (89%) diff --git a/packages/linux/meta b/packages/linux/meta index 22e58e429f..208299b283 100644 --- a/packages/linux/meta +++ b/packages/linux/meta @@ -14,6 +14,6 @@ PKG_LONGDESC="This package contains a precompiled kernel image and the modules." PKG_IS_ADDON="no" if [ "$LINUX_NEXT" = "yes" ]; then - PKG_VERSION="2.6.37-rc1" + PKG_VERSION="2.6.37-rc2" PKG_URL="http://www.kernel.org/pub/linux/kernel/v2.6/testing/$PKG_NAME-$PKG_VERSION.tar.bz2" fi diff --git a/packages/linux/patches/linux-2.6.37-rc1-000_crosscompile.patch b/packages/linux/patches/linux-2.6.37-rc2-000_crosscompile.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc1-000_crosscompile.patch rename to packages/linux/patches/linux-2.6.37-rc2-000_crosscompile.patch diff --git a/packages/linux/patches/linux-2.6.37-rc1-000_fix_include.patch b/packages/linux/patches/linux-2.6.37-rc2-000_fix_include.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc1-000_fix_include.patch rename to packages/linux/patches/linux-2.6.37-rc2-000_fix_include.patch diff --git a/packages/linux/patches/linux-2.6.37-rc1-000_fix_userspace_build_of_fs.h.patch b/packages/linux/patches/linux-2.6.37-rc2-000_fix_userspace_build_of_fs.h.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc1-000_fix_userspace_build_of_fs.h.patch rename to packages/linux/patches/linux-2.6.37-rc2-000_fix_userspace_build_of_fs.h.patch diff --git a/packages/linux/patches/linux-2.6.37-rc1-002_bash_only_feature.patch b/packages/linux/patches/linux-2.6.37-rc2-002_bash_only_feature.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc1-002_bash_only_feature.patch rename to packages/linux/patches/linux-2.6.37-rc2-002_bash_only_feature.patch diff --git a/packages/linux/patches/linux-2.6.37-rc1-003-no_dev_console.patch b/packages/linux/patches/linux-2.6.37-rc2-003-no_dev_console.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc1-003-no_dev_console.patch rename to packages/linux/patches/linux-2.6.37-rc2-003-no_dev_console.patch diff --git a/packages/linux/patches/linux-2.6.37-rc1-004_lower_undefined_mode_timeout.patch b/packages/linux/patches/linux-2.6.37-rc2-004_lower_undefined_mode_timeout.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc1-004_lower_undefined_mode_timeout.patch rename to packages/linux/patches/linux-2.6.37-rc2-004_lower_undefined_mode_timeout.patch diff --git a/packages/linux/patches/linux-2.6.37-rc1-005_kconfig_no_timestamp.patch b/packages/linux/patches/linux-2.6.37-rc2-005_kconfig_no_timestamp.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc1-005_kconfig_no_timestamp.patch rename to packages/linux/patches/linux-2.6.37-rc2-005_kconfig_no_timestamp.patch diff --git a/packages/linux/patches/linux-2.6.37-rc1-006_enable_utf8.patch b/packages/linux/patches/linux-2.6.37-rc2-006_enable_utf8.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc1-006_enable_utf8.patch rename to packages/linux/patches/linux-2.6.37-rc2-006_enable_utf8.patch diff --git a/packages/linux/patches/linux-2.6.37-rc1-007_die_floppy_die.patch b/packages/linux/patches/linux-2.6.37-rc2-007_die_floppy_die.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc1-007_die_floppy_die.patch rename to packages/linux/patches/linux-2.6.37-rc2-007_die_floppy_die.patch diff --git a/packages/linux/patches/linux-2.6.37-rc1-008-hda_intel_prealloc_4mb_dmabuffer.patch b/packages/linux/patches/linux-2.6.37-rc2-008-hda_intel_prealloc_4mb_dmabuffer.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc1-008-hda_intel_prealloc_4mb_dmabuffer.patch rename to packages/linux/patches/linux-2.6.37-rc2-008-hda_intel_prealloc_4mb_dmabuffer.patch diff --git a/packages/linux/patches/linux-2.6.37-rc1-009_disable_i8042_check_on_apple_mac.patch b/packages/linux/patches/linux-2.6.37-rc2-009_disable_i8042_check_on_apple_mac.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc1-009_disable_i8042_check_on_apple_mac.patch rename to packages/linux/patches/linux-2.6.37-rc2-009_disable_i8042_check_on_apple_mac.patch diff --git a/packages/linux/patches/linux-2.6.37-rc1-050_add_appleir_usb_driver.patch b/packages/linux/patches/linux-2.6.37-rc2-050_add_appleir_usb_driver.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc1-050_add_appleir_usb_driver.patch rename to packages/linux/patches/linux-2.6.37-rc2-050_add_appleir_usb_driver.patch diff --git a/packages/linux/patches/linux-2.6.37-rc1-052-aureal_remote_quirk-0.1.patch b/packages/linux/patches/linux-2.6.37-rc2-052-aureal_remote_quirk-0.1.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc1-052-aureal_remote_quirk-0.1.patch rename to packages/linux/patches/linux-2.6.37-rc2-052-aureal_remote_quirk-0.1.patch diff --git a/packages/linux/patches/linux-2.6.37-rc1-110-drm_nouveau_upstream-20101111.patch b/packages/linux/patches/linux-2.6.37-rc2-110-drm_nouveau_upstream-20101116.patch similarity index 89% rename from packages/linux/patches/linux-2.6.37-rc1-110-drm_nouveau_upstream-20101111.patch rename to packages/linux/patches/linux-2.6.37-rc2-110-drm_nouveau_upstream-20101116.patch index 8a8e34765b..0c914966ed 100644 --- a/packages/linux/patches/linux-2.6.37-rc1-110-drm_nouveau_upstream-20101111.patch +++ b/packages/linux/patches/linux-2.6.37-rc2-110-drm_nouveau_upstream-20101116.patch @@ -1,6 +1,6 @@ -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/Makefile linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/Makefile ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/Makefile 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/Makefile 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/Makefile linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/Makefile +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/Makefile 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/Makefile 2010-11-17 02:20:11.000000000 +0100 @@ -5,7 +5,7 @@ ccflags-y := -Iinclude/drm nouveau-y := nouveau_drv.o nouveau_state.o nouveau_channel.o nouveau_mem.o \ @@ -21,9 +21,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/Makefile linux-2.6.37-rc1.no nv50_cursor.o nv50_display.o nv50_fbcon.o \ nv04_dac.o nv04_dfp.o nv04_tv.o nv17_tv.o nv17_tv_modes.o \ nv04_crtc.o nv04_display.o nv04_cursor.o nv04_fbcon.o \ -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_backlight.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_backlight.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_backlight.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_backlight.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_backlight.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_backlight.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_backlight.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_backlight.c 2010-11-17 02:20:11.000000000 +0100 @@ -31,6 +31,7 @@ */ @@ -47,9 +47,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_backlight.c linux-2. switch (dev_priv->card_type) { case NV_40: return nouveau_nv40_backlight_init(dev); -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_bios.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_bios.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_bios.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_bios.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_bios.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_bios.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_bios.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_bios.c 2010-11-17 02:20:11.000000000 +0100 @@ -6039,7 +6039,6 @@ if (type != cte->type) NV_WARN(dev, " -> type 0x%02x\n", cte->type); @@ -67,9 +67,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_bios.c linux-2.6.37- if (NVReadVgaCrtc(dev, 0, 0x00) == 0 && NVReadVgaCrtc(dev, 0, 0x1a) == 0) return false; -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_bo.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_bo.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_bo.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_bo.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_bo.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_bo.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_bo.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_bo.c 2010-11-17 02:20:11.000000000 +0100 @@ -46,9 +46,7 @@ if (unlikely(nvbo->gem)) DRM_ERROR("bo %p still attached to GEM object\n", bo); @@ -281,10 +281,56 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_bo.c linux-2.6.37-rc .fault_reserve_notify = &nouveau_ttm_fault_reserve_notify, .io_mem_reserve = &nouveau_ttm_io_mem_reserve, .io_mem_free = &nouveau_ttm_io_mem_free, -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_channel.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_channel.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_channel.c 2010-11-12 06:18:06.000000000 +0100 -@@ -107,53 +107,56 @@ +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_channel.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_channel.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_channel.c 2010-11-17 02:20:11.000000000 +0100 +@@ -39,22 +39,22 @@ + + if (dev_priv->card_type >= NV_50) { + ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, 0, +- dev_priv->vm_end, NV_DMA_ACCESS_RO, +- NV_DMA_TARGET_AGP, &pushbuf); ++ dev_priv->vm_end, NV_MEM_ACCESS_RO, ++ NV_MEM_TARGET_VM, &pushbuf); + chan->pushbuf_base = pb->bo.offset; + } else + if (pb->bo.mem.mem_type == TTM_PL_TT) { +- ret = nouveau_gpuobj_gart_dma_new(chan, 0, +- dev_priv->gart_info.aper_size, +- NV_DMA_ACCESS_RO, &pushbuf, +- NULL); ++ ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, 0, ++ dev_priv->gart_info.aper_size, ++ NV_MEM_ACCESS_RO, ++ NV_MEM_TARGET_GART, &pushbuf); + chan->pushbuf_base = pb->bo.mem.start << PAGE_SHIFT; + } else + if (dev_priv->card_type != NV_04) { + ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, 0, + dev_priv->fb_available_size, +- NV_DMA_ACCESS_RO, +- NV_DMA_TARGET_VIDMEM, &pushbuf); ++ NV_MEM_ACCESS_RO, ++ NV_MEM_TARGET_VRAM, &pushbuf); + chan->pushbuf_base = pb->bo.mem.start << PAGE_SHIFT; + } else { + /* NV04 cmdbuf hack, from original ddx.. not sure of it's +@@ -62,11 +62,10 @@ + * VRAM. + */ + ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, +- pci_resource_start(dev->pdev, +- 1), ++ pci_resource_start(dev->pdev, 1), + dev_priv->fb_available_size, +- NV_DMA_ACCESS_RO, +- NV_DMA_TARGET_PCI, &pushbuf); ++ NV_MEM_ACCESS_RO, ++ NV_MEM_TARGET_PCI, &pushbuf); + chan->pushbuf_base = pb->bo.mem.start << PAGE_SHIFT; + } + +@@ -107,53 +106,56 @@ int nouveau_channel_alloc(struct drm_device *dev, struct nouveau_channel **chan_ret, struct drm_file *file_priv, @@ -370,7 +416,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6. return ret; } -@@ -161,18 +164,18 @@ +@@ -161,18 +163,18 @@ /* Locate channel's user control regs */ if (dev_priv->card_type < NV_40) @@ -393,7 +439,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6. return -ENOMEM; } chan->user_put = 0x40; -@@ -182,15 +185,15 @@ +@@ -182,15 +184,15 @@ ret = nouveau_notifier_init_channel(chan); if (ret) { NV_ERROR(dev, "ntfy %d\n", ret); @@ -412,7 +458,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6. return ret; } -@@ -198,7 +201,7 @@ +@@ -198,7 +200,7 @@ ret = nouveau_channel_pushbuf_ctxdma_init(chan); if (ret) { NV_ERROR(dev, "pbctxdma %d\n", ret); @@ -421,7 +467,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6. return ret; } -@@ -206,16 +209,18 @@ +@@ -206,16 +208,18 @@ pfifo->reassign(dev, false); /* Create a graphics context for new channel */ @@ -445,7 +491,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6. return ret; } -@@ -225,83 +230,121 @@ +@@ -225,83 +229,121 @@ if (!ret) ret = nouveau_fence_channel_init(chan); if (ret) { @@ -596,7 +642,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6. nouveau_gpuobj_ref(NULL, &chan->pushbuf); if (chan->pushbuf_bo) { nouveau_bo_unmap(chan->pushbuf_bo); -@@ -310,44 +353,62 @@ +@@ -310,44 +352,62 @@ } nouveau_gpuobj_channel_takedown(chan); nouveau_notifier_takedown_channel(chan); @@ -677,7 +723,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6. /*********************************** * ioctls wrapping the functions -@@ -395,24 +456,26 @@ +@@ -395,24 +455,26 @@ /* Named memory object area */ ret = drm_gem_handle_create(file_priv, chan->notifier_bo->gem, &init->notifier_handle); @@ -712,7 +758,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6. return 0; } -@@ -421,18 +484,18 @@ +@@ -421,18 +483,18 @@ ***********************************/ struct drm_ioctl_desc nouveau_ioctls[] = { @@ -743,9 +789,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6. }; int nouveau_max_ioctl = DRM_ARRAY_SIZE(nouveau_ioctls); -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_connector.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_connector.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_connector.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_connector.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.c 2010-11-17 02:20:11.000000000 +0100 @@ -37,6 +37,8 @@ #include "nouveau_connector.h" #include "nouveau_hw.h" @@ -959,9 +1005,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_connector.c linux-2. + + drm_helper_hpd_irq_event(dev); +} -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_connector.h linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.h ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_connector.h 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.h 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_connector.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.h +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_connector.h 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.h 2010-11-17 02:20:11.000000000 +0100 @@ -52,9 +52,6 @@ struct drm_connector * nouveau_connector_create(struct drm_device *, int index); @@ -972,9 +1018,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_connector.h linux-2. int nouveau_connector_bpp(struct drm_connector *); -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_display.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_display.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_display.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_display.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_display.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_display.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_display.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_display.c 2010-11-17 02:20:11.000000000 +0100 @@ -29,6 +29,9 @@ #include "nouveau_drv.h" #include "nouveau_fb.h" @@ -1193,9 +1239,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_display.c linux-2.6. + spin_unlock_irqrestore(&dev->event_lock, flags); + return 0; +} -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_dp.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_dp.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_dp.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_dp.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_dp.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_dp.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_dp.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_dp.c 2010-11-17 02:20:11.000000000 +0100 @@ -279,7 +279,7 @@ struct bit_displayport_encoder_table *dpe; int dpe_headerlen; @@ -1223,9 +1269,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_dp.c linux-2.6.37-rc return eq_done; } -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.c 2010-11-17 02:20:11.000000000 +0100 @@ -115,6 +115,10 @@ int nouveau_perflvl_wr; module_param_named(perflvl_wr, nouveau_perflvl_wr, int, 0400); @@ -1341,9 +1387,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.c linux-2.6.37-r nouveau_register_dsm_handler(); return drm_init(&driver); } -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.h ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.h 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.h +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.h 2010-11-17 02:20:11.000000000 +0100 @@ -54,6 +54,7 @@ #include "nouveau_drm.h" #include "nouveau_reg.h" @@ -1482,11 +1528,12 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r void (*flush)(struct drm_device *); }; -@@ -276,12 +310,16 @@ +@@ -276,12 +310,17 @@ struct nouveau_fb_engine { int num_tiles; + struct drm_mm tag_heap; ++ void *priv; int (*init)(struct drm_device *dev); void (*takedown)(struct drm_device *dev); @@ -1501,7 +1548,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r }; struct nouveau_fifo_engine { -@@ -304,23 +342,12 @@ +@@ -304,23 +343,12 @@ void (*destroy_context)(struct nouveau_channel *); int (*load_context)(struct nouveau_channel *); int (*unload_context)(struct drm_device *); @@ -1527,7 +1574,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r int grctx_size; /* NV2x/NV3x context table (0x400780) */ -@@ -336,9 +363,9 @@ +@@ -336,9 +364,9 @@ void (*destroy_context)(struct nouveau_channel *); int (*load_context)(struct nouveau_channel *); int (*unload_context)(struct drm_device *); @@ -1539,7 +1586,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r }; struct nouveau_display_engine { -@@ -350,13 +377,19 @@ +@@ -350,13 +378,19 @@ }; struct nouveau_gpio_engine { @@ -1560,7 +1607,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r }; struct nouveau_pm_voltage_level { -@@ -432,6 +465,7 @@ +@@ -432,6 +466,7 @@ struct nouveau_pm_level *cur; struct device *hwmon; @@ -1568,7 +1615,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r int (*clock_get)(struct drm_device *, u32 id); void *(*clock_pre)(struct drm_device *, struct nouveau_pm_level *, -@@ -444,6 +478,16 @@ +@@ -444,6 +479,16 @@ int (*temp_get)(struct drm_device *); }; @@ -1585,7 +1632,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r struct nouveau_engine { struct nouveau_instmem_engine instmem; struct nouveau_mc_engine mc; -@@ -454,6 +498,7 @@ +@@ -454,6 +499,7 @@ struct nouveau_display_engine display; struct nouveau_gpio_engine gpio; struct nouveau_pm_engine pm; @@ -1593,7 +1640,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r }; struct nouveau_pll_vals { -@@ -485,13 +530,13 @@ +@@ -485,13 +531,13 @@ }; struct nv04_crtc_reg { @@ -1609,7 +1656,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r /* PCRTC regs */ uint32_t fb_start; -@@ -539,43 +584,9 @@ +@@ -539,43 +585,9 @@ }; struct nv04_mode_state { @@ -1654,7 +1701,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r }; enum nouveau_card_type { -@@ -606,12 +617,15 @@ +@@ -606,12 +618,15 @@ bool ramin_available; struct drm_mm ramin_heap; struct list_head gpuobj_list; @@ -1671,7 +1718,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r struct list_head vbl_waiting; -@@ -628,8 +642,10 @@ +@@ -628,8 +643,10 @@ struct nouveau_bo *bo; } fence; @@ -1684,7 +1731,12 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r struct nouveau_engine engine; struct nouveau_channel *channel; -@@ -660,7 +676,10 @@ +@@ -655,12 +672,13 @@ + uint64_t aper_free; + + struct nouveau_gpuobj *sg_ctxdma; +- struct page *sg_dummy_page; +- dma_addr_t sg_dummy_bus; } gart_info; /* nv10-nv40 tiling regions */ @@ -1696,7 +1748,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r /* VRAM/fb configuration */ uint64_t vram_size; -@@ -697,6 +716,7 @@ +@@ -697,6 +715,7 @@ struct backlight_device *backlight; struct nouveau_channel *evo; @@ -1704,7 +1756,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r struct { struct dcb_entry *dcb; u16 script; -@@ -742,16 +762,6 @@ +@@ -742,16 +761,6 @@ return 0; } @@ -1721,7 +1773,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r /* nouveau_drv.c */ extern int nouveau_agpmode; extern int nouveau_duallink; -@@ -771,6 +781,7 @@ +@@ -771,6 +780,7 @@ extern int nouveau_override_conntype; extern char *nouveau_perflvl; extern int nouveau_perflvl_wr; @@ -1729,7 +1781,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern int nouveau_pci_suspend(struct pci_dev *pdev, pm_message_t pm_state); extern int nouveau_pci_resume(struct pci_dev *pdev); -@@ -798,13 +809,12 @@ +@@ -798,13 +808,12 @@ extern int nouveau_mem_init_agp(struct drm_device *); extern int nouveau_mem_reset_agp(struct drm_device *); extern void nouveau_mem_close(struct drm_device *); @@ -1749,7 +1801,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern int nv50_mem_vm_bind_linear(struct drm_device *, uint64_t virt, uint32_t size, uint32_t flags, uint64_t phys); -@@ -826,21 +836,43 @@ +@@ -826,21 +835,43 @@ extern struct drm_ioctl_desc nouveau_ioctls[]; extern int nouveau_max_ioctl; extern void nouveau_channel_cleanup(struct drm_device *, struct drm_file *); @@ -1797,12 +1849,24 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern int nouveau_gpuobj_channel_init(struct nouveau_channel *, uint32_t vram_h, uint32_t tt_h); extern void nouveau_gpuobj_channel_takedown(struct nouveau_channel *); -@@ -861,15 +893,18 @@ - uint32_t *o_ret); +@@ -855,21 +886,26 @@ + extern int nouveau_gpuobj_dma_new(struct nouveau_channel *, int class, + uint64_t offset, uint64_t size, int access, + int target, struct nouveau_gpuobj **); +-extern int nouveau_gpuobj_gart_dma_new(struct nouveau_channel *, +- uint64_t offset, uint64_t size, +- int access, struct nouveau_gpuobj **, +- uint32_t *o_ret); extern int nouveau_gpuobj_gr_new(struct nouveau_channel *, int class, struct nouveau_gpuobj **); -extern int nouveau_gpuobj_sw_new(struct nouveau_channel *, int class, - struct nouveau_gpuobj **); ++extern int nv50_gpuobj_dma_new(struct nouveau_channel *, int class, u64 base, ++ u64 size, int target, int access, u32 type, ++ u32 comp, struct nouveau_gpuobj **pobj); ++extern void nv50_gpuobj_dma_init(struct nouveau_gpuobj *, u32 offset, ++ int class, u64 base, u64 size, int target, ++ int access, u32 type, u32 comp); extern int nouveau_ioctl_grobj_alloc(struct drm_device *, void *data, struct drm_file *); extern int nouveau_ioctl_gpuobj_free(struct drm_device *, void *data, @@ -1818,7 +1882,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern void nouveau_irq_preinstall(struct drm_device *); extern int nouveau_irq_postinstall(struct drm_device *); extern void nouveau_irq_uninstall(struct drm_device *); -@@ -989,18 +1024,25 @@ +@@ -989,18 +1025,25 @@ /* nv10_fb.c */ extern int nv10_fb_init(struct drm_device *); extern void nv10_fb_takedown(struct drm_device *); @@ -1848,7 +1912,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r /* nv50_fb.c */ extern int nv50_fb_init(struct drm_device *); extern void nv50_fb_takedown(struct drm_device *); -@@ -1012,6 +1054,7 @@ +@@ -1012,6 +1055,7 @@ /* nv04_fifo.c */ extern int nv04_fifo_init(struct drm_device *); @@ -1856,7 +1920,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern void nv04_fifo_disable(struct drm_device *); extern void nv04_fifo_enable(struct drm_device *); extern bool nv04_fifo_reassign(struct drm_device *, bool); -@@ -1021,19 +1064,18 @@ +@@ -1021,19 +1065,18 @@ extern void nv04_fifo_destroy_context(struct nouveau_channel *); extern int nv04_fifo_load_context(struct nouveau_channel *); extern int nv04_fifo_unload_context(struct drm_device *); @@ -1877,7 +1941,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern int nv40_fifo_load_context(struct nouveau_channel *); extern int nv40_fifo_unload_context(struct drm_device *); -@@ -1045,6 +1087,7 @@ +@@ -1045,6 +1088,7 @@ extern void nv50_fifo_destroy_context(struct nouveau_channel *); extern int nv50_fifo_load_context(struct nouveau_channel *); extern int nv50_fifo_unload_context(struct drm_device *); @@ -1885,7 +1949,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r /* nvc0_fifo.c */ extern int nvc0_fifo_init(struct drm_device *); -@@ -1060,7 +1103,6 @@ +@@ -1060,7 +1104,6 @@ extern int nvc0_fifo_unload_context(struct drm_device *); /* nv04_graph.c */ @@ -1893,7 +1957,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern int nv04_graph_init(struct drm_device *); extern void nv04_graph_takedown(struct drm_device *); extern void nv04_graph_fifo_access(struct drm_device *, bool); -@@ -1069,10 +1111,11 @@ +@@ -1069,10 +1112,11 @@ extern void nv04_graph_destroy_context(struct nouveau_channel *); extern int nv04_graph_load_context(struct nouveau_channel *); extern int nv04_graph_unload_context(struct drm_device *); @@ -1907,7 +1971,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern int nv10_graph_init(struct drm_device *); extern void nv10_graph_takedown(struct drm_device *); extern struct nouveau_channel *nv10_graph_channel(struct drm_device *); -@@ -1080,13 +1123,11 @@ +@@ -1080,13 +1124,11 @@ extern void nv10_graph_destroy_context(struct nouveau_channel *); extern int nv10_graph_load_context(struct nouveau_channel *); extern int nv10_graph_unload_context(struct drm_device *); @@ -1924,7 +1988,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern int nv20_graph_create_context(struct nouveau_channel *); extern void nv20_graph_destroy_context(struct nouveau_channel *); extern int nv20_graph_load_context(struct nouveau_channel *); -@@ -1094,11 +1135,9 @@ +@@ -1094,11 +1136,9 @@ extern int nv20_graph_init(struct drm_device *); extern void nv20_graph_takedown(struct drm_device *); extern int nv30_graph_init(struct drm_device *); @@ -1937,7 +2001,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern int nv40_graph_init(struct drm_device *); extern void nv40_graph_takedown(struct drm_device *); extern struct nouveau_channel *nv40_graph_channel(struct drm_device *); -@@ -1107,11 +1146,9 @@ +@@ -1107,11 +1147,9 @@ extern int nv40_graph_load_context(struct nouveau_channel *); extern int nv40_graph_unload_context(struct drm_device *); extern void nv40_grctx_init(struct nouveau_grctx *); @@ -1950,7 +2014,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern int nv50_graph_init(struct drm_device *); extern void nv50_graph_takedown(struct drm_device *); extern void nv50_graph_fifo_access(struct drm_device *, bool); -@@ -1120,8 +1157,9 @@ +@@ -1120,8 +1158,9 @@ extern void nv50_graph_destroy_context(struct nouveau_channel *); extern int nv50_graph_load_context(struct nouveau_channel *); extern int nv50_graph_unload_context(struct drm_device *); @@ -1961,7 +2025,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r /* nvc0_graph.c */ extern int nvc0_graph_init(struct drm_device *); -@@ -1133,16 +1171,22 @@ +@@ -1133,16 +1172,22 @@ extern int nvc0_graph_load_context(struct nouveau_channel *); extern int nvc0_graph_unload_context(struct drm_device *); @@ -1989,7 +2053,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern void nv04_instmem_flush(struct drm_device *); /* nv50_instmem.c */ -@@ -1150,11 +1194,10 @@ +@@ -1150,11 +1195,10 @@ extern void nv50_instmem_takedown(struct drm_device *); extern int nv50_instmem_suspend(struct drm_device *); extern void nv50_instmem_resume(struct drm_device *); @@ -2005,7 +2069,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern void nv50_instmem_flush(struct drm_device *); extern void nv84_instmem_flush(struct drm_device *); extern void nv50_vm_flush(struct drm_device *, int engine); -@@ -1164,11 +1207,10 @@ +@@ -1164,11 +1208,10 @@ extern void nvc0_instmem_takedown(struct drm_device *); extern int nvc0_instmem_suspend(struct drm_device *); extern void nvc0_instmem_resume(struct drm_device *); @@ -2021,7 +2085,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern void nvc0_instmem_flush(struct drm_device *); /* nv04_mc.c */ -@@ -1239,7 +1281,7 @@ +@@ -1239,7 +1282,7 @@ extern void nouveau_bo_wr16(struct nouveau_bo *nvbo, unsigned index, u16 val); extern u32 nouveau_bo_rd32(struct nouveau_bo *nvbo, unsigned index); extern void nouveau_bo_wr32(struct nouveau_bo *nvbo, unsigned index, u32 val); @@ -2030,7 +2094,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r /* nouveau_fence.c */ struct nouveau_fence; -@@ -1255,12 +1297,35 @@ +@@ -1255,12 +1298,35 @@ void (*work)(void *priv, bool signalled), void *priv); struct nouveau_channel *nouveau_fence_channel(struct nouveau_fence *); @@ -2071,7 +2135,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r /* nouveau_gem.c */ extern int nouveau_gem_new(struct drm_device *, struct nouveau_channel *, -@@ -1280,15 +1345,28 @@ +@@ -1280,15 +1346,28 @@ extern int nouveau_gem_ioctl_info(struct drm_device *, void *, struct drm_file *); @@ -2101,16 +2165,39 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r /* nv50_calc. */ int nv50_calc_pll(struct drm_device *, struct pll_lims *, int clk, -@@ -1478,5 +1556,6 @@ +@@ -1468,6 +1547,22 @@ + dev->pdev->subsystem_device == sub_device; + } + ++/* memory type/access flags, do not match hardware values */ ++#define NV_MEM_ACCESS_RO 1 ++#define NV_MEM_ACCESS_WO 2 ++#define NV_MEM_ACCESS_RW (NV_MEM_ACCESS_RO | NV_MEM_ACCESS_WO) ++#define NV_MEM_ACCESS_VM 4 ++ ++#define NV_MEM_TARGET_VRAM 0 ++#define NV_MEM_TARGET_PCI 1 ++#define NV_MEM_TARGET_PCI_NOSNOOP 2 ++#define NV_MEM_TARGET_VM 3 ++#define NV_MEM_TARGET_GART 4 ++ ++#define NV_MEM_TYPE_VM 0x7f ++#define NV_MEM_COMP_VM 0x03 ++ ++/* NV_SW object class */ + #define NV_SW 0x0000506e + #define NV_SW_DMA_SEMAPHORE 0x00000060 + #define NV_SW_SEMAPHORE_OFFSET 0x00000064 +@@ -1478,5 +1573,6 @@ #define NV_SW_VBLSEM_OFFSET 0x00000400 #define NV_SW_VBLSEM_RELEASE_VALUE 0x00000404 #define NV_SW_VBLSEM_RELEASE 0x00000408 +#define NV_SW_PAGE_FLIP 0x00000500 #endif /* __NOUVEAU_DRV_H__ */ -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_fbcon.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_fbcon.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fbcon.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fbcon.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.c 2010-11-17 02:20:11.000000000 +0100 @@ -49,6 +49,96 @@ #include "nouveau_fbcon.h" #include "nouveau_dma.h" @@ -2331,9 +2418,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_fbcon.c linux-2.6.37 vga_switcheroo_client_fb_set(dev->pdev, info); return 0; -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_fbcon.h linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.h ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_fbcon.h 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.h 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fbcon.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.h +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fbcon.h 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.h 2010-11-17 02:20:11.000000000 +0100 @@ -40,13 +40,13 @@ void nouveau_fbcon_restore(void); @@ -2354,9 +2441,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_fbcon.h linux-2.6.37 int nv50_fbcon_accel_init(struct fb_info *info); void nouveau_fbcon_gpu_lockup(struct fb_info *info); -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_fence.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_fence.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_fence.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_fence.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fence.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_fence.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fence.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_fence.c 2010-11-17 02:20:11.000000000 +0100 @@ -64,6 +64,7 @@ struct nouveau_fence *fence = container_of(ref, struct nouveau_fence, refcount); @@ -2533,6 +2620,17 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_fence.c linux-2.6.37 if (ret) return ret; +@@ -437,8 +459,8 @@ + ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, + mem->start << PAGE_SHIFT, + mem->size << PAGE_SHIFT, +- NV_DMA_ACCESS_RW, +- NV_DMA_TARGET_VIDMEM, &obj); ++ NV_MEM_ACCESS_RW, ++ NV_MEM_TARGET_VRAM, &obj); + if (ret) + return ret; + @@ -468,6 +490,8 @@ { struct nouveau_fence *tmp, *fence; @@ -2551,9 +2649,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_fence.c linux-2.6.37 } int -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_gem.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_gem.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_gem.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_gem.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_gem.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_gem.c 2010-11-17 02:20:11.000000000 +0100 @@ -48,9 +48,6 @@ return; nvbo->gem = NULL; @@ -2888,9 +2986,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.37-r } int -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_hw.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_hw.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_hw.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_hw.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.c 2010-11-17 02:20:11.000000000 +0100 @@ -519,11 +519,11 @@ struct pll_lims pll_lim; @@ -2936,9 +3034,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_hw.c linux-2.6.37-rc NVWriteCRTC(dev, head, NV_PCRTC_INTR_0, NV_PCRTC_INTR_0_VBLANK); } -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_hw.h linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.h ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_hw.h 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.h 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_hw.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.h +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_hw.h 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.h 2010-11-17 02:20:11.000000000 +0100 @@ -416,6 +416,25 @@ } @@ -2965,9 +3063,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_hw.h linux-2.6.37-rc nv_show_cursor(struct drm_device *dev, int head, bool show) { struct drm_nouveau_private *dev_priv = dev->dev_private; -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_i2c.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_i2c.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_i2c.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_i2c.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_i2c.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_i2c.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_i2c.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_i2c.c 2010-11-17 02:20:11.000000000 +0100 @@ -256,7 +256,7 @@ if (index >= DCB_MAX_NUM_I2C_ENTRIES) return NULL; @@ -2977,9 +3075,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_i2c.c linux-2.6.37-r uint32_t reg = 0xe500, val; if (i2c->port_type == 6) { -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_irq.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_irq.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_irq.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_irq.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_irq.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_irq.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_irq.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_irq.c 2010-11-17 02:20:11.000000000 +0100 @@ -36,11 +36,7 @@ #include "nouveau_drv.h" #include "nouveau_reg.h" @@ -4246,9 +4344,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_irq.c linux-2.6.37-r - - return IRQ_HANDLED; } -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_mem.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_mem.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_mem.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_mem.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_mem.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_mem.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_mem.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_mem.c 2010-11-17 02:20:11.000000000 +0100 @@ -33,92 +33,113 @@ #include "drmP.h" #include "drm.h" @@ -4505,10 +4603,56 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_mem.c linux-2.6.37-r NV_DEBUG(dev, "Entry %d: 220: %08x %08x %08x %08x\n", i, timing->reg_100220, timing->reg_100224, timing->reg_100228, timing->reg_10022c); -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_notifier.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_notifier.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_notifier.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_notifier.c 2010-11-12 06:18:06.000000000 +0100 -@@ -185,11 +185,11 @@ +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_notifier.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_notifier.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_notifier.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_notifier.c 2010-11-17 02:20:11.000000000 +0100 +@@ -99,7 +99,6 @@ + int size, uint32_t *b_offset) + { + struct drm_device *dev = chan->dev; +- struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_gpuobj *nobj = NULL; + struct drm_mm_node *mem; + uint32_t offset; +@@ -113,31 +112,15 @@ + return -ENOMEM; + } + +- offset = chan->notifier_bo->bo.mem.start << PAGE_SHIFT; +- if (chan->notifier_bo->bo.mem.mem_type == TTM_PL_VRAM) { +- target = NV_DMA_TARGET_VIDMEM; +- } else +- if (chan->notifier_bo->bo.mem.mem_type == TTM_PL_TT) { +- if (dev_priv->gart_info.type == NOUVEAU_GART_SGDMA && +- dev_priv->card_type < NV_50) { +- ret = nouveau_sgdma_get_page(dev, offset, &offset); +- if (ret) +- return ret; +- target = NV_DMA_TARGET_PCI; +- } else { +- target = NV_DMA_TARGET_AGP; +- if (dev_priv->card_type >= NV_50) +- offset += dev_priv->vm_gart_base; +- } +- } else { +- NV_ERROR(dev, "Bad DMA target, mem_type %d!\n", +- chan->notifier_bo->bo.mem.mem_type); +- return -EINVAL; +- } ++ if (chan->notifier_bo->bo.mem.mem_type == TTM_PL_VRAM) ++ target = NV_MEM_TARGET_VRAM; ++ else ++ target = NV_MEM_TARGET_GART; ++ offset = chan->notifier_bo->bo.mem.start << PAGE_SHIFT; + offset += mem->start; + + ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, offset, +- mem->size, NV_DMA_ACCESS_RW, target, ++ mem->size, NV_MEM_ACCESS_RW, target, + &nobj); + if (ret) { + drm_mm_put_block(mem); +@@ -185,11 +168,11 @@ struct nouveau_channel *chan; int ret; @@ -4525,9 +4669,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_notifier.c linux-2.6 + nouveau_channel_put(&chan); + return ret; } -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_object.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_object.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_object.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_object.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_object.c 2010-11-17 02:20:11.000000000 +0100 @@ -36,6 +36,101 @@ #include "nouveau_drm.h" #include "nouveau_ramht.h" @@ -4666,7 +4810,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 } - } else { - NV_DEBUG(dev, "global heap\n"); -- + - /* allocate backing pages, sets vinst */ - ret = engine->instmem.populate(dev, gpuobj, &size); - if (ret) { @@ -4678,7 +4822,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 - do { - if (drm_mm_pre_get(&dev_priv->ramin_heap)) - return -ENOMEM; - +- - spin_lock(&dev_priv->ramin_lock); - ramin = drm_mm_search_free(&dev_priv->ramin_heap, size, - align, 0); @@ -4719,13 +4863,13 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 return ret; } - } - +- - /* calculate the various different addresses for the object */ - if (chan) { - gpuobj->pinst = chan->ramin->pinst; - if (gpuobj->pinst != ~0) - gpuobj->pinst += gpuobj->im_pramin->start; -- + - if (dev_priv->card_type < NV_50) { - gpuobj->cinst = gpuobj->pinst; - } else { @@ -4841,7 +4985,249 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 gpuobj->vinst = vinst; if (gpuobj->flags & NVOBJ_FLAG_ZERO_ALLOC) { -@@ -495,23 +563,86 @@ +@@ -335,113 +403,157 @@ + The method below creates a DMA object in instance RAM and returns a handle + to it that can be used to set up context objects. + */ +-int +-nouveau_gpuobj_dma_new(struct nouveau_channel *chan, int class, +- uint64_t offset, uint64_t size, int access, +- int target, struct nouveau_gpuobj **gpuobj) +-{ +- struct drm_device *dev = chan->dev; +- struct drm_nouveau_private *dev_priv = dev->dev_private; +- struct nouveau_instmem_engine *instmem = &dev_priv->engine.instmem; +- int ret; + +- NV_DEBUG(dev, "ch%d class=0x%04x offset=0x%llx size=0x%llx\n", +- chan->id, class, offset, size); +- NV_DEBUG(dev, "access=%d target=%d\n", access, target); ++void ++nv50_gpuobj_dma_init(struct nouveau_gpuobj *obj, u32 offset, int class, ++ u64 base, u64 size, int target, int access, ++ u32 type, u32 comp) ++{ ++ struct drm_nouveau_private *dev_priv = obj->dev->dev_private; ++ struct nouveau_instmem_engine *pinstmem = &dev_priv->engine.instmem; ++ u32 flags0; ++ ++ flags0 = (comp << 29) | (type << 22) | class; ++ flags0 |= 0x00100000; ++ ++ switch (access) { ++ case NV_MEM_ACCESS_RO: flags0 |= 0x00040000; break; ++ case NV_MEM_ACCESS_RW: ++ case NV_MEM_ACCESS_WO: flags0 |= 0x00080000; break; ++ default: ++ break; ++ } + + switch (target) { +- case NV_DMA_TARGET_AGP: +- offset += dev_priv->gart_info.aper_base; ++ case NV_MEM_TARGET_VRAM: ++ flags0 |= 0x00010000; ++ break; ++ case NV_MEM_TARGET_PCI: ++ flags0 |= 0x00020000; ++ break; ++ case NV_MEM_TARGET_PCI_NOSNOOP: ++ flags0 |= 0x00030000; + break; ++ case NV_MEM_TARGET_GART: ++ base += dev_priv->vm_gart_base; + default: ++ flags0 &= ~0x00100000; + break; + } + +- ret = nouveau_gpuobj_new(dev, chan, +- nouveau_gpuobj_class_instmem_size(dev, class), +- 16, NVOBJ_FLAG_ZERO_ALLOC | +- NVOBJ_FLAG_ZERO_FREE, gpuobj); +- if (ret) { +- NV_ERROR(dev, "Error creating gpuobj: %d\n", ret); +- return ret; +- } +- +- if (dev_priv->card_type < NV_50) { +- uint32_t frame, adjust, pte_flags = 0; ++ /* convert to base + limit */ ++ size = (base + size) - 1; + +- if (access != NV_DMA_ACCESS_RO) +- pte_flags |= (1<<1); +- adjust = offset & 0x00000fff; +- frame = offset & ~0x00000fff; +- +- nv_wo32(*gpuobj, 0, ((1<<12) | (1<<13) | (adjust << 20) | +- (access << 14) | (target << 16) | +- class)); +- nv_wo32(*gpuobj, 4, size - 1); +- nv_wo32(*gpuobj, 8, frame | pte_flags); +- nv_wo32(*gpuobj, 12, frame | pte_flags); +- } else { +- uint64_t limit = offset + size - 1; +- uint32_t flags0, flags5; ++ nv_wo32(obj, offset + 0x00, flags0); ++ nv_wo32(obj, offset + 0x04, lower_32_bits(size)); ++ nv_wo32(obj, offset + 0x08, lower_32_bits(base)); ++ nv_wo32(obj, offset + 0x0c, upper_32_bits(size) << 24 | ++ upper_32_bits(base)); ++ nv_wo32(obj, offset + 0x10, 0x00000000); ++ nv_wo32(obj, offset + 0x14, 0x00000000); + +- if (target == NV_DMA_TARGET_VIDMEM) { +- flags0 = 0x00190000; +- flags5 = 0x00010000; +- } else { +- flags0 = 0x7fc00000; +- flags5 = 0x00080000; +- } ++ pinstmem->flush(obj->dev); ++} + +- nv_wo32(*gpuobj, 0, flags0 | class); +- nv_wo32(*gpuobj, 4, lower_32_bits(limit)); +- nv_wo32(*gpuobj, 8, lower_32_bits(offset)); +- nv_wo32(*gpuobj, 12, ((upper_32_bits(limit) & 0xff) << 24) | +- (upper_32_bits(offset) & 0xff)); +- nv_wo32(*gpuobj, 20, flags5); +- } ++int ++nv50_gpuobj_dma_new(struct nouveau_channel *chan, int class, u64 base, u64 size, ++ int target, int access, u32 type, u32 comp, ++ struct nouveau_gpuobj **pobj) ++{ ++ struct drm_device *dev = chan->dev; ++ int ret; + +- instmem->flush(dev); ++ ret = nouveau_gpuobj_new(dev, chan, 24, 16, NVOBJ_FLAG_ZERO_ALLOC | ++ NVOBJ_FLAG_ZERO_FREE, pobj); ++ if (ret) ++ return ret; + +- (*gpuobj)->engine = NVOBJ_ENGINE_SW; +- (*gpuobj)->class = class; ++ nv50_gpuobj_dma_init(*pobj, 0, class, base, size, target, ++ access, type, comp); + return 0; + } + + int +-nouveau_gpuobj_gart_dma_new(struct nouveau_channel *chan, +- uint64_t offset, uint64_t size, int access, +- struct nouveau_gpuobj **gpuobj, +- uint32_t *o_ret) ++nouveau_gpuobj_dma_new(struct nouveau_channel *chan, int class, u64 base, ++ u64 size, int access, int target, ++ struct nouveau_gpuobj **pobj) + { ++ struct drm_nouveau_private *dev_priv = chan->dev->dev_private; + struct drm_device *dev = chan->dev; +- struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nouveau_gpuobj *obj; ++ u32 page_addr, flags0, flags2; + int ret; + +- if (dev_priv->gart_info.type == NOUVEAU_GART_AGP || +- (dev_priv->card_type >= NV_50 && +- dev_priv->gart_info.type == NOUVEAU_GART_SGDMA)) { +- ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, +- offset + dev_priv->vm_gart_base, +- size, access, NV_DMA_TARGET_AGP, +- gpuobj); +- if (o_ret) +- *o_ret = 0; +- } else +- if (dev_priv->gart_info.type == NOUVEAU_GART_SGDMA) { +- nouveau_gpuobj_ref(dev_priv->gart_info.sg_ctxdma, gpuobj); +- if (offset & ~0xffffffffULL) { +- NV_ERROR(dev, "obj offset exceeds 32-bits\n"); +- return -EINVAL; +- } +- if (o_ret) +- *o_ret = (uint32_t)offset; +- ret = (*gpuobj != NULL) ? 0 : -EINVAL; +- } else { +- NV_ERROR(dev, "Invalid GART type %d\n", dev_priv->gart_info.type); +- return -EINVAL; ++ if (dev_priv->card_type >= NV_50) { ++ u32 comp = (target == NV_MEM_TARGET_VM) ? NV_MEM_COMP_VM : 0; ++ u32 type = (target == NV_MEM_TARGET_VM) ? NV_MEM_TYPE_VM : 0; ++ ++ return nv50_gpuobj_dma_new(chan, class, base, size, ++ target, access, type, comp, pobj); + } + +- return ret; ++ if (target == NV_MEM_TARGET_GART) { ++ if (dev_priv->gart_info.type == NOUVEAU_GART_AGP) { ++ target = NV_MEM_TARGET_PCI_NOSNOOP; ++ base += dev_priv->gart_info.aper_base; ++ } else ++ if (base != 0) { ++ ret = nouveau_sgdma_get_page(dev, base, &page_addr); ++ if (ret) ++ return ret; ++ ++ target = NV_MEM_TARGET_PCI; ++ base = page_addr; ++ } else { ++ nouveau_gpuobj_ref(dev_priv->gart_info.sg_ctxdma, pobj); ++ return 0; ++ } ++ } ++ ++ flags0 = class; ++ flags0 |= 0x00003000; /* PT present, PT linear */ ++ flags2 = 0; ++ ++ switch (target) { ++ case NV_MEM_TARGET_PCI: ++ flags0 |= 0x00020000; ++ break; ++ case NV_MEM_TARGET_PCI_NOSNOOP: ++ flags0 |= 0x00030000; ++ break; ++ default: ++ break; ++ } ++ ++ switch (access) { ++ case NV_MEM_ACCESS_RO: ++ flags0 |= 0x00004000; ++ break; ++ case NV_MEM_ACCESS_WO: ++ flags0 |= 0x00008000; ++ default: ++ flags2 |= 0x00000002; ++ break; ++ } ++ ++ flags0 |= (base & 0x00000fff) << 20; ++ flags2 |= (base & 0xfffff000); ++ ++ ret = nouveau_gpuobj_new(dev, chan, (dev_priv->card_type >= NV_40) ? ++ 32 : 16, 16, NVOBJ_FLAG_ZERO_ALLOC | ++ NVOBJ_FLAG_ZERO_FREE, &obj); ++ if (ret) ++ return ret; ++ ++ nv_wo32(obj, 0x00, flags0); ++ nv_wo32(obj, 0x04, size - 1); ++ nv_wo32(obj, 0x08, flags2); ++ nv_wo32(obj, 0x0c, flags2); ++ ++ obj->engine = NVOBJ_ENGINE_SW; ++ obj->class = class; ++ *pobj = obj; ++ return 0; + } + + /* Context objects in the instance RAM have the following structure. +@@ -495,23 +607,86 @@ entry[5]: set to 0? */ @@ -4930,7 +5316,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 return ret; } -@@ -541,35 +672,8 @@ +@@ -541,35 +716,8 @@ } dev_priv->engine.instmem.flush(dev); @@ -4968,7 +5354,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 return 0; } -@@ -585,7 +689,7 @@ +@@ -585,7 +733,7 @@ NV_DEBUG(dev, "ch%d\n", chan->id); /* Base amount for object storage (4KiB enough?) */ @@ -4977,7 +5363,56 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 base = 0; /* PGRAPH context */ -@@ -791,119 +895,69 @@ +@@ -701,8 +849,8 @@ + if (dev_priv->card_type >= NV_50) { + ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, + 0, dev_priv->vm_end, +- NV_DMA_ACCESS_RW, +- NV_DMA_TARGET_AGP, &vram); ++ NV_MEM_ACCESS_RW, ++ NV_MEM_TARGET_VM, &vram); + if (ret) { + NV_ERROR(dev, "Error creating VRAM ctxdma: %d\n", ret); + return ret; +@@ -710,8 +858,8 @@ + } else { + ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, + 0, dev_priv->fb_available_size, +- NV_DMA_ACCESS_RW, +- NV_DMA_TARGET_VIDMEM, &vram); ++ NV_MEM_ACCESS_RW, ++ NV_MEM_TARGET_VRAM, &vram); + if (ret) { + NV_ERROR(dev, "Error creating VRAM ctxdma: %d\n", ret); + return ret; +@@ -729,20 +877,13 @@ + if (dev_priv->card_type >= NV_50) { + ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, + 0, dev_priv->vm_end, +- NV_DMA_ACCESS_RW, +- NV_DMA_TARGET_AGP, &tt); +- if (ret) { +- NV_ERROR(dev, "Error creating VRAM ctxdma: %d\n", ret); +- return ret; +- } +- } else +- if (dev_priv->gart_info.type != NOUVEAU_GART_NONE) { +- ret = nouveau_gpuobj_gart_dma_new(chan, 0, +- dev_priv->gart_info.aper_size, +- NV_DMA_ACCESS_RW, &tt, NULL); ++ NV_MEM_ACCESS_RW, ++ NV_MEM_TARGET_VM, &tt); + } else { +- NV_ERROR(dev, "Invalid GART type %d\n", dev_priv->gart_info.type); +- ret = -EINVAL; ++ ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, ++ 0, dev_priv->gart_info.aper_size, ++ NV_MEM_ACCESS_RW, ++ NV_MEM_TARGET_GART, &tt); + } + + if (ret) { +@@ -791,119 +932,69 @@ struct nouveau_gpuobj *gpuobj; int i; @@ -5115,7 +5550,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 } ret = nouveau_ramht_insert(chan, init->handle, gr); -@@ -911,27 +965,27 @@ +@@ -911,27 +1002,27 @@ if (ret) { NV_ERROR(dev, "Error referencing object: %d (%d/0x%08x)\n", ret, init->channel, init->handle); @@ -5153,9 +5588,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 } u32 -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_pm.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_pm.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_pm.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_pm.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_pm.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_pm.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_pm.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_pm.c 2010-11-17 02:20:11.000000000 +0100 @@ -27,6 +27,10 @@ #include "nouveau_drv.h" #include "nouveau_pm.h" @@ -5253,9 +5688,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_pm.c linux-2.6.37-rc nouveau_hwmon_fini(dev); nouveau_sysfs_fini(dev); } -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_ramht.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_ramht.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_ramht.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_ramht.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.c 2010-11-17 02:20:11.000000000 +0100 @@ -114,7 +114,7 @@ (gpuobj->engine << NV40_RAMHT_CONTEXT_ENGINE_SHIFT); } else { @@ -5388,9 +5823,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_ramht.c linux-2.6.37 kref_put(&ramht->refcount, nouveau_ramht_del); } -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_ramht.h linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.h ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_ramht.h 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.h 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_ramht.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.h +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_ramht.h 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.h 2010-11-17 02:20:11.000000000 +0100 @@ -48,7 +48,7 @@ extern int nouveau_ramht_insert(struct nouveau_channel *, u32 handle, @@ -5400,9 +5835,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_ramht.h linux-2.6.37 extern struct nouveau_gpuobj * nouveau_ramht_find(struct nouveau_channel *chan, u32 handle); -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_reg.h linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_reg.h ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_reg.h 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_reg.h 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_reg.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_reg.h +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_reg.h 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_reg.h 2010-11-17 02:20:11.000000000 +0100 @@ -45,6 +45,11 @@ # define NV04_PFB_REF_CMD_REFRESH (1 << 0) #define NV04_PFB_PRE 0x001002d4 @@ -5415,7 +5850,25 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_reg.h linux-2.6.37-r #define NV10_PFB_CLOSE_PAGE2 0x0010033c #define NV04_PFB_SCRAMBLE(i) (0x00100400 + 4 * (i)) #define NV40_PFB_TILE(i) (0x00100600 + (i*16)) -@@ -332,6 +337,7 @@ +@@ -74,17 +79,6 @@ + # define NV40_RAMHT_CONTEXT_ENGINE_SHIFT 20 + # define NV40_RAMHT_CONTEXT_INSTANCE_SHIFT 0 + +-/* DMA object defines */ +-#define NV_DMA_ACCESS_RW 0 +-#define NV_DMA_ACCESS_RO 1 +-#define NV_DMA_ACCESS_WO 2 +-#define NV_DMA_TARGET_VIDMEM 0 +-#define NV_DMA_TARGET_PCI 2 +-#define NV_DMA_TARGET_AGP 3 +-/* The following is not a real value used by the card, it's changed by +- * nouveau_object_dma_create */ +-#define NV_DMA_TARGET_PCI_NONLINEAR 8 +- + /* Some object classes we care about in the drm */ + #define NV_CLASS_DMA_FROM_MEMORY 0x00000002 + #define NV_CLASS_DMA_TO_MEMORY 0x00000003 +@@ -332,6 +326,7 @@ #define NV04_PGRAPH_BSWIZZLE5 0x004006A0 #define NV03_PGRAPH_STATUS 0x004006B0 #define NV04_PGRAPH_STATUS 0x00400700 @@ -5423,7 +5876,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_reg.h linux-2.6.37-r #define NV04_PGRAPH_TRAPPED_ADDR 0x00400704 #define NV04_PGRAPH_TRAPPED_DATA 0x00400708 #define NV04_PGRAPH_SURFACE 0x0040070C -@@ -378,6 +384,7 @@ +@@ -378,6 +373,7 @@ #define NV20_PGRAPH_TLIMIT(i) (0x00400904 + (i*16)) #define NV20_PGRAPH_TSIZE(i) (0x00400908 + (i*16)) #define NV20_PGRAPH_TSTATUS(i) (0x0040090C + (i*16)) @@ -5431,7 +5884,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_reg.h linux-2.6.37-r #define NV10_PGRAPH_TILE(i) (0x00400B00 + (i*16)) #define NV10_PGRAPH_TLIMIT(i) (0x00400B04 + (i*16)) #define NV10_PGRAPH_TSIZE(i) (0x00400B08 + (i*16)) -@@ -714,31 +721,32 @@ +@@ -714,31 +710,32 @@ #define NV50_PDISPLAY_INTR_1_CLK_UNK10 0x00000010 #define NV50_PDISPLAY_INTR_1_CLK_UNK20 0x00000020 #define NV50_PDISPLAY_INTR_1_CLK_UNK40 0x00000040 @@ -5485,7 +5938,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_reg.h linux-2.6.37-r #define NV50_PDISPLAY_CURSOR 0x00610270 #define NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(i) ((i) * 0x10 + 0x00610270) -@@ -746,15 +754,11 @@ +@@ -746,15 +743,11 @@ #define NV50_PDISPLAY_CURSOR_CURSOR_CTRL2_STATUS 0x00030000 #define NV50_PDISPLAY_CURSOR_CURSOR_CTRL2_STATUS_ACTIVE 0x00010000 @@ -5506,9 +5959,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_reg.h linux-2.6.37-r #define NV50_PDISPLAY_CRTC_P(i, r) ((i) * 0x540 + NV50_PDISPLAY_CRTC_##r) #define NV50_PDISPLAY_CRTC_C(i, r) (4 + (i) * 0x540 + NV50_PDISPLAY_CRTC_##r) -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_sgdma.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_sgdma.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_sgdma.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_sgdma.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_sgdma.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_sgdma.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_sgdma.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_sgdma.c 2010-11-17 02:20:11.000000000 +0100 @@ -120,8 +120,8 @@ dev_priv->engine.instmem.flush(nvbe->dev); @@ -5520,7 +5973,26 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_sgdma.c linux-2.6.37 } nvbe->bound = true; -@@ -162,8 +162,8 @@ +@@ -144,26 +144,22 @@ + + pte = nvbe->pte_start; + for (i = 0; i < nvbe->nr_pages; i++) { +- dma_addr_t dma_offset = dev_priv->gart_info.sg_dummy_bus; +- + for (j = 0; j < PAGE_SIZE / NV_CTXDMA_PAGE_SIZE; j++) { + if (dev_priv->card_type < NV_50) { +- nv_wo32(gpuobj, (pte * 4) + 0, dma_offset | 3); ++ nv_wo32(gpuobj, (pte * 4) + 0, 0x00000000); + pte += 1; + } else { + nv_wo32(gpuobj, (pte * 4) + 0, 0x00000000); + nv_wo32(gpuobj, (pte * 4) + 4, 0x00000000); + pte += 2; + } +- +- dma_offset += NV_CTXDMA_PAGE_SIZE; + } + } dev_priv->engine.instmem.flush(nvbe->dev); if (dev_priv->card_type == NV_50) { @@ -5531,7 +6003,13 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_sgdma.c linux-2.6.37 } nvbe->bound = false; -@@ -224,7 +224,11 @@ +@@ -218,13 +214,16 @@ + nouveau_sgdma_init(struct drm_device *dev) + { + struct drm_nouveau_private *dev_priv = dev->dev_private; +- struct pci_dev *pdev = dev->pdev; + struct nouveau_gpuobj *gpuobj = NULL; + uint32_t aper_size, obj_size; int i, ret; if (dev_priv->card_type < NV_50) { @@ -5544,9 +6022,72 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_sgdma.c linux-2.6.37 obj_size = (aper_size >> NV_CTXDMA_PAGE_SHIFT) * 4; obj_size += 8; /* ctxdma header */ } else { -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_state.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_state.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_state.c 2010-11-12 06:18:06.000000000 +0100 +@@ -241,22 +240,6 @@ + return ret; + } + +- dev_priv->gart_info.sg_dummy_page = +- alloc_page(GFP_KERNEL|__GFP_DMA32|__GFP_ZERO); +- if (!dev_priv->gart_info.sg_dummy_page) { +- nouveau_gpuobj_ref(NULL, &gpuobj); +- return -ENOMEM; +- } +- +- set_bit(PG_locked, &dev_priv->gart_info.sg_dummy_page->flags); +- dev_priv->gart_info.sg_dummy_bus = +- pci_map_page(pdev, dev_priv->gart_info.sg_dummy_page, 0, +- PAGE_SIZE, PCI_DMA_BIDIRECTIONAL); +- if (pci_dma_mapping_error(pdev, dev_priv->gart_info.sg_dummy_bus)) { +- nouveau_gpuobj_ref(NULL, &gpuobj); +- return -EFAULT; +- } +- + if (dev_priv->card_type < NV_50) { + /* special case, allocated from global instmem heap so + * cinst is invalid, we use it on all channels though so +@@ -264,19 +247,14 @@ + */ + gpuobj->cinst = gpuobj->pinst; + +- /* Maybe use NV_DMA_TARGET_AGP for PCIE? NVIDIA do this, and +- * confirmed to work on c51. Perhaps means NV_DMA_TARGET_PCIE +- * on those cards? */ + nv_wo32(gpuobj, 0, NV_CLASS_DMA_IN_MEMORY | + (1 << 12) /* PT present */ | + (0 << 13) /* PT *not* linear */ | +- (NV_DMA_ACCESS_RW << 14) | +- (NV_DMA_TARGET_PCI << 16)); ++ (0 << 14) /* RW */ | ++ (2 << 16) /* PCI */); + nv_wo32(gpuobj, 4, aper_size - 1); +- for (i = 2; i < 2 + (aper_size >> 12); i++) { +- nv_wo32(gpuobj, i * 4, +- dev_priv->gart_info.sg_dummy_bus | 3); +- } ++ for (i = 2; i < 2 + (aper_size >> 12); i++) ++ nv_wo32(gpuobj, i * 4, 0x00000000); + } else { + for (i = 0; i < obj_size; i += 8) { + nv_wo32(gpuobj, i + 0, 0x00000000); +@@ -297,15 +275,6 @@ + { + struct drm_nouveau_private *dev_priv = dev->dev_private; + +- if (dev_priv->gart_info.sg_dummy_page) { +- pci_unmap_page(dev->pdev, dev_priv->gart_info.sg_dummy_bus, +- NV_CTXDMA_PAGE_SIZE, PCI_DMA_BIDIRECTIONAL); +- unlock_page(dev_priv->gart_info.sg_dummy_page); +- __free_page(dev_priv->gart_info.sg_dummy_page); +- dev_priv->gart_info.sg_dummy_page = NULL; +- dev_priv->gart_info.sg_dummy_bus = 0; +- } +- + nouveau_gpuobj_ref(NULL, &dev_priv->gart_info.sg_ctxdma); + } + +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_state.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_state.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_state.c 2010-11-17 02:20:11.000000000 +0100 @@ -53,10 +53,10 @@ engine->instmem.takedown = nv04_instmem_takedown; engine->instmem.suspend = nv04_instmem_suspend; @@ -5902,7 +6443,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 } engine->pm.voltage_get = nouveau_voltage_gpio_get; engine->pm.voltage_set = nouveau_voltage_gpio_set; -@@ -396,16 +426,33 @@ +@@ -396,16 +426,34 @@ engine->pm.temp_get = nv84_temp_get; else engine->pm.temp_get = nv40_temp_get; @@ -5917,6 +6458,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 + engine->crypt.takedown = nv84_crypt_fini; + engine->crypt.create_context = nv84_crypt_create_context; + engine->crypt.destroy_context = nv84_crypt_destroy_context; ++ engine->crypt.tlb_flush = nv84_crypt_tlb_flush; + break; + default: + engine->crypt.init = nouveau_stub_init; @@ -5940,7 +6482,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 engine->instmem.flush = nvc0_instmem_flush; engine->mc.init = nv50_mc_init; engine->mc.takedown = nv50_mc_takedown; -@@ -414,7 +461,6 @@ +@@ -414,7 +462,6 @@ engine->timer.takedown = nv04_timer_takedown; engine->fb.init = nvc0_fb_init; engine->fb.takedown = nvc0_fb_takedown; @@ -5948,7 +6490,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 engine->graph.init = nvc0_graph_init; engine->graph.takedown = nvc0_graph_takedown; engine->graph.fifo_access = nvc0_graph_fifo_access; -@@ -443,7 +489,11 @@ +@@ -443,7 +490,11 @@ engine->gpio.takedown = nouveau_stub_takedown; engine->gpio.get = nv50_gpio_get; engine->gpio.set = nv50_gpio_set; @@ -5960,7 +6502,30 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 break; default: NV_ERROR(dev, "NV%02x unsupported\n", dev_priv->chipset); -@@ -506,11 +556,11 @@ +@@ -485,7 +536,7 @@ + + ret = nouveau_gpuobj_dma_new(dev_priv->channel, NV_CLASS_DMA_IN_MEMORY, + 0, dev_priv->vram_size, +- NV_DMA_ACCESS_RW, NV_DMA_TARGET_VIDMEM, ++ NV_MEM_ACCESS_RW, NV_MEM_TARGET_VRAM, + &gpuobj); + if (ret) + goto out_err; +@@ -495,9 +546,10 @@ + if (ret) + goto out_err; + +- ret = nouveau_gpuobj_gart_dma_new(dev_priv->channel, 0, +- dev_priv->gart_info.aper_size, +- NV_DMA_ACCESS_RW, &gpuobj, NULL); ++ ret = nouveau_gpuobj_dma_new(dev_priv->channel, NV_CLASS_DMA_IN_MEMORY, ++ 0, dev_priv->gart_info.aper_size, ++ NV_MEM_ACCESS_RW, NV_MEM_TARGET_GART, ++ &gpuobj); + if (ret) + goto out_err; + +@@ -506,11 +558,11 @@ if (ret) goto out_err; @@ -5974,7 +6539,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 return ret; } -@@ -557,6 +607,8 @@ +@@ -557,6 +609,8 @@ if (ret) goto out; engine = &dev_priv->engine; @@ -5983,7 +6548,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 spin_lock_init(&dev_priv->context_switch_lock); /* Make the CRTCs and I2C buses accessible */ -@@ -615,26 +667,28 @@ +@@ -615,26 +669,28 @@ if (ret) goto out_fb; @@ -6020,7 +6585,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 /* what about PVIDEO/PCRTC/PRAMDAC etc? */ -@@ -659,12 +713,16 @@ +@@ -659,12 +715,16 @@ out_fence: nouveau_fence_fini(dev); out_irq: @@ -6039,7 +6604,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 out_graph: if (!nouveau_noaccel) engine->graph.takedown(dev); -@@ -703,12 +761,12 @@ +@@ -703,12 +763,12 @@ if (!engine->graph.accel_blocked) { nouveau_fence_fini(dev); @@ -6054,7 +6619,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 engine->graph.takedown(dev); } engine->fb.takedown(dev); -@@ -727,7 +785,8 @@ +@@ -727,7 +787,8 @@ nouveau_gpuobj_takedown(dev); nouveau_mem_vram_fini(dev); @@ -6064,7 +6629,35 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 nouveau_pm_fini(dev); nouveau_bios_takedown(dev); -@@ -1041,6 +1100,12 @@ +@@ -1014,21 +1075,6 @@ + else + getparam->value = NV_PCI; + break; +- case NOUVEAU_GETPARAM_FB_PHYSICAL: +- getparam->value = dev_priv->fb_phys; +- break; +- case NOUVEAU_GETPARAM_AGP_PHYSICAL: +- getparam->value = dev_priv->gart_info.aper_base; +- break; +- case NOUVEAU_GETPARAM_PCI_PHYSICAL: +- if (dev->sg) { +- getparam->value = (unsigned long)dev->sg->virtual; +- } else { +- NV_ERROR(dev, "Requested PCIGART address, " +- "while no PCIGART was created\n"); +- return -EINVAL; +- } +- break; + case NOUVEAU_GETPARAM_FB_SIZE: + getparam->value = dev_priv->fb_available_size; + break; +@@ -1036,11 +1082,17 @@ + getparam->value = dev_priv->gart_info.aper_size; + break; + case NOUVEAU_GETPARAM_VM_VRAM_BASE: +- getparam->value = dev_priv->vm_vram_base; ++ getparam->value = 0; /* deprecated */ + break; case NOUVEAU_GETPARAM_PTIMER_TIME: getparam->value = dev_priv->engine.timer.read(dev); break; @@ -6077,7 +6670,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 case NOUVEAU_GETPARAM_GRAPH_UNITS: /* NV40 and NV50 versions are quite different, but register * address is the same. User is supposed to know the card -@@ -1051,7 +1116,7 @@ +@@ -1051,7 +1103,7 @@ } /* FALLTHRU */ default: @@ -6086,7 +6679,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 return -EINVAL; } -@@ -1066,7 +1131,7 @@ +@@ -1066,7 +1118,7 @@ switch (setparam->param) { default: @@ -6095,7 +6688,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 return -EINVAL; } -@@ -1092,7 +1157,13 @@ +@@ -1092,7 +1144,13 @@ /* Waits for PGRAPH to go completely idle */ bool nouveau_wait_for_idle(struct drm_device *dev) { @@ -6110,9 +6703,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 NV_ERROR(dev, "PGRAPH idle timed out with status 0x%08x\n", nv_rd32(dev, NV04_PGRAPH_STATUS)); return false; -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_temp.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_temp.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_temp.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_temp.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_temp.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_temp.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_temp.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_temp.c 2010-11-17 02:20:11.000000000 +0100 @@ -191,7 +191,7 @@ int offset = sensor->offset_mult / sensor->offset_div; int core_temp; @@ -6122,9 +6715,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_temp.c linux-2.6.37- core_temp = nv_rd32(dev, 0x20008); } else { core_temp = nv_rd32(dev, 0x0015b4) & 0x1fff; -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_util.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_util.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_util.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_util.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_util.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_util.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_util.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_util.c 2010-11-17 02:20:11.000000000 +0100 @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2010 Nouveau Project @@ -6195,9 +6788,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_util.c linux-2.6.37- +{ + return __ratelimit(&nouveau_ratelimit_state); +} -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_util.h linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_util.h ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_util.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nouveau_util.h 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_util.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_util.h +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_util.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_util.h 2010-11-17 02:20:11.000000000 +0100 @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2010 Nouveau Project @@ -6244,9 +6837,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nouveau_util.h linux-2.6.37- +int nouveau_ratelimit(void); + +#endif -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_crtc.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_crtc.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_crtc.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_crtc.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_crtc.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_crtc.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_crtc.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_crtc.c 2010-11-17 02:20:11.000000000 +0100 @@ -158,7 +158,6 @@ { struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); @@ -6311,9 +6904,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_crtc.c linux-2.6.37-rc1 .destroy = nv_crtc_destroy, }; -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_dfp.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_dfp.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_dfp.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_dfp.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_dfp.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_dfp.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_dfp.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_dfp.c 2010-11-17 02:20:11.000000000 +0100 @@ -185,14 +185,15 @@ struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); struct nouveau_connector *nv_connector = nouveau_encoder_connector_get(nv_encoder); @@ -6336,9 +6929,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_dfp.c linux-2.6.37-rc1. } return true; -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_display.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_display.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_display.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_display.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_display.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_display.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_display.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_display.c 2010-11-17 02:20:11.000000000 +0100 @@ -32,6 +32,9 @@ #include "nouveau_encoder.h" #include "nouveau_connector.h" @@ -6385,9 +6978,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_display.c linux-2.6.37- + nv_wr32(dev, NV_CRTC1_INTSTAT, NV_CRTC_INTR_VBLANK); + drm_handle_vblank(dev, 1); +} -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_fbcon.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_fbcon.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_fbcon.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_fbcon.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_fbcon.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_fbcon.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_fbcon.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_fbcon.c 2010-11-17 02:20:11.000000000 +0100 @@ -28,52 +28,39 @@ #include "nouveau_ramht.h" #include "nouveau_fbcon.h" @@ -6517,9 +7110,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_fbcon.c linux-2.6.37-rc } static int -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_fifo.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_fifo.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_fifo.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_fifo.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_fifo.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_fifo.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_fifo.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_fifo.c 2010-11-17 02:20:11.000000000 +0100 @@ -28,6 +28,7 @@ #include "drm.h" #include "nouveau_drv.h" @@ -6792,9 +7385,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_fifo.c linux-2.6.37-rc1 + + nv_wr32(dev, NV03_PMC_INTR_0, NV_PMC_INTR_0_PFIFO_PENDING); +} -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_graph.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_graph.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_graph.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_graph.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_graph.c 2010-11-17 02:20:11.000000000 +0100 @@ -26,6 +26,11 @@ #include "drm.h" #include "nouveau_drm.h" @@ -7651,9 +8244,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc + } + } +} -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_instmem.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_instmem.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_instmem.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_instmem.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_instmem.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_instmem.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_instmem.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_instmem.c 2010-11-17 02:20:11.000000000 +0100 @@ -98,42 +98,66 @@ } @@ -7733,9 +8326,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_instmem.c linux-2.6.37- +nv04_instmem_flush(struct drm_device *dev) +{ +} -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_pm.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_pm.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_pm.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv04_pm.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_pm.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_pm.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_pm.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_pm.c 2010-11-17 02:20:11.000000000 +0100 @@ -76,6 +76,15 @@ reg += 4; @@ -7752,9 +8345,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv04_pm.c linux-2.6.37-rc1.n kfree(state); } -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv10_fb.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv10_fb.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv10_fb.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv10_fb.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_fb.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv10_fb.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_fb.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv10_fb.c 2010-11-17 02:20:11.000000000 +0100 @@ -3,23 +3,109 @@ #include "nouveau_drv.h" #include "nouveau_drm.h" @@ -7906,9 +8499,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv10_fb.c linux-2.6.37-rc1.n + if (dev_priv->card_type == NV_20) + drm_mm_takedown(&pfb->tag_heap); } -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv10_fifo.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv10_fifo.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv10_fifo.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv10_fifo.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_fifo.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv10_fifo.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_fifo.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv10_fifo.c 2010-11-17 02:20:11.000000000 +0100 @@ -73,17 +73,6 @@ return 0; } @@ -7944,9 +8537,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv10_fifo.c linux-2.6.37-rc1 uint32_t mode = nv_rd32(dev, NV04_PFIFO_MODE); nv_wr32(dev, NV04_PFIFO_MODE, mode | (1 << i)); } -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv10_graph.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv10_graph.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv10_graph.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv10_graph.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_graph.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv10_graph.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_graph.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv10_graph.c 2010-11-17 02:20:11.000000000 +0100 @@ -26,6 +26,10 @@ #include "drm.h" #include "nouveau_drm.h" @@ -8229,9 +8822,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv10_graph.c linux-2.6.37-rc + } + } +} -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv20_graph.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv20_graph.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv20_graph.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv20_graph.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv20_graph.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv20_graph.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv20_graph.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv20_graph.c 2010-11-17 02:20:11.000000000 +0100 @@ -32,6 +32,10 @@ #define NV34_GRCTX_SIZE (18140) #define NV35_36_GRCTX_SIZE (22396) @@ -8562,9 +9155,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv20_graph.c linux-2.6.37-rc + } + } +} -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv30_fb.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv30_fb.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv30_fb.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv30_fb.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv30_fb.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv30_fb.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv30_fb.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv30_fb.c 2010-11-17 02:20:11.000000000 +0100 @@ -29,6 +29,27 @@ #include "nouveau_drv.h" #include "nouveau_drm.h" @@ -8602,9 +9195,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv30_fb.c linux-2.6.37-rc1.n /* Init the memory timing regs at 0x10037c/0x1003ac */ if (dev_priv->chipset == 0x30 || -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv40_fb.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv40_fb.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv40_fb.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv40_fb.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv40_fb.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv40_fb.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv40_fb.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv40_fb.c 2010-11-17 02:20:11.000000000 +0100 @@ -4,26 +4,22 @@ #include "nouveau_drm.h" @@ -8649,9 +9242,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv40_fb.c linux-2.6.37-rc1.n return 0; } -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv40_fifo.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv40_fifo.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv40_fifo.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv40_fifo.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv40_fifo.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv40_fifo.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv40_fifo.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv40_fifo.c 2010-11-17 02:20:11.000000000 +0100 @@ -70,17 +70,6 @@ return 0; } @@ -8687,9 +9280,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv40_fifo.c linux-2.6.37-rc1 uint32_t mode = nv_rd32(dev, NV04_PFIFO_MODE); nv_wr32(dev, NV04_PFIFO_MODE, mode | (1 << i)); } -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv40_graph.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv40_graph.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv40_graph.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv40_graph.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv40_graph.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv40_graph.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv40_graph.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv40_graph.c 2010-11-17 02:20:11.000000000 +0100 @@ -29,6 +29,9 @@ #include "nouveau_drv.h" #include "nouveau_grctx.h" @@ -8958,9 +9551,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv40_graph.c linux-2.6.37-rc + } + } +} -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_calc.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_calc.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_calc.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_calc.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_calc.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_calc.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_calc.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_calc.c 2010-11-17 02:20:11.000000000 +0100 @@ -51,24 +51,28 @@ int *N, int *fN, int *M, int *P) { @@ -8996,9 +9589,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_calc.c linux-2.6.37-rc1 fb_div.full = dfixed_div(fb_div, a); /* *N = floor(fb_div); */ -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_crtc.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_crtc.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_crtc.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_crtc.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_crtc.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_crtc.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_crtc.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_crtc.c 2010-11-17 02:20:11.000000000 +0100 @@ -437,6 +437,7 @@ .cursor_move = nv50_crtc_cursor_move, .gamma_set = nv50_crtc_gamma_set, @@ -9041,9 +9634,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_crtc.c linux-2.6.37-rc1 else OUT_RING(evo, format); -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_display.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_display.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_display.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_display.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_display.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_display.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_display.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_display.c 2010-11-17 02:20:11.000000000 +0100 @@ -33,6 +33,8 @@ #include "nouveau_ramht.h" #include "drm_crtc_helper.h" @@ -9624,9 +10217,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_display.c linux-2.6.37- } } - -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_display.h linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_display.h ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_display.h 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_display.h 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_display.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_display.h +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_display.h 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_display.h 2010-11-17 02:20:11.000000000 +0100 @@ -35,9 +35,7 @@ #include "nouveau_crtc.h" #include "nv50_evo.h" @@ -9637,9 +10230,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_display.h linux-2.6.37- int nv50_display_early_init(struct drm_device *dev); void nv50_display_late_takedown(struct drm_device *dev); int nv50_display_create(struct drm_device *dev); -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_evo.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_evo.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_evo.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_evo.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_evo.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_evo.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_evo.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_evo.c 2010-11-17 02:20:11.000000000 +0100 @@ -0,0 +1,318 @@ +/* + * Copyright 2010 Red Hat Inc. @@ -9959,9 +10552,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_evo.c linux-2.6.37-rc1. + nv50_evo_channel_del(&dev_priv->evo); + } +} -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_evo.h linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_evo.h ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_evo.h 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_evo.h 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_evo.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_evo.h +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_evo.h 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_evo.h 2010-11-17 02:20:11.000000000 +0100 @@ -24,6 +24,15 @@ * */ @@ -9983,10 +10576,108 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_evo.h linux-2.6.37-rc1. #define NV50_EVO_CRTC_SCALE_RES2 0x000008dc +#endif -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_fb.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_fb.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_fb.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_fb.c 2010-11-12 06:18:06.000000000 +0100 -@@ -42,6 +42,7 @@ +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_fb.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_fb.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_fb.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_fb.c 2010-11-17 02:20:11.000000000 +0100 +@@ -3,30 +3,75 @@ + #include "nouveau_drv.h" + #include "nouveau_drm.h" + ++struct nv50_fb_priv { ++ struct page *r100c08_page; ++ dma_addr_t r100c08; ++}; ++ ++static int ++nv50_fb_create(struct drm_device *dev) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nv50_fb_priv *priv; ++ ++ priv = kzalloc(sizeof(*priv), GFP_KERNEL); ++ if (!priv) ++ return -ENOMEM; ++ ++ priv->r100c08_page = alloc_page(GFP_KERNEL | __GFP_ZERO); ++ if (!priv->r100c08_page) { ++ kfree(priv); ++ return -ENOMEM; ++ } ++ ++ priv->r100c08 = pci_map_page(dev->pdev, priv->r100c08_page, 0, ++ PAGE_SIZE, PCI_DMA_BIDIRECTIONAL); ++ if (pci_dma_mapping_error(dev->pdev, priv->r100c08)) { ++ __free_page(priv->r100c08_page); ++ kfree(priv); ++ return -EFAULT; ++ } ++ ++ dev_priv->engine.fb.priv = priv; ++ return 0; ++} ++ + int + nv50_fb_init(struct drm_device *dev) + { + struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nv50_fb_priv *priv; ++ int ret; ++ ++ if (!dev_priv->engine.fb.priv) { ++ ret = nv50_fb_create(dev); ++ if (ret) ++ return ret; ++ } ++ priv = dev_priv->engine.fb.priv; + + /* Not a clue what this is exactly. Without pointing it at a + * scratch page, VRAM->GART blits with M2MF (as in DDX DFS) + * cause IOMMU "read from address 0" errors (rh#561267) + */ +- nv_wr32(dev, 0x100c08, dev_priv->gart_info.sg_dummy_bus >> 8); ++ nv_wr32(dev, 0x100c08, priv->r100c08 >> 8); + + /* This is needed to get meaningful information from 100c90 + * on traps. No idea what these values mean exactly. */ + switch (dev_priv->chipset) { + case 0x50: +- nv_wr32(dev, 0x100c90, 0x0707ff); ++ nv_wr32(dev, 0x100c90, 0x000707ff); + break; + case 0xa3: + case 0xa5: + case 0xa8: +- nv_wr32(dev, 0x100c90, 0x0d0fff); ++ nv_wr32(dev, 0x100c90, 0x000d0fff); ++ break; ++ case 0xaf: ++ nv_wr32(dev, 0x100c90, 0x089d1fff); + break; + default: +- nv_wr32(dev, 0x100c90, 0x1d07ff); ++ nv_wr32(dev, 0x100c90, 0x001d07ff); + break; + } + +@@ -36,12 +81,25 @@ + void + nv50_fb_takedown(struct drm_device *dev) + { ++ struct drm_nouveau_private *dev_priv = dev->dev_private; ++ struct nv50_fb_priv *priv; ++ ++ priv = dev_priv->engine.fb.priv; ++ if (!priv) ++ return; ++ dev_priv->engine.fb.priv = NULL; ++ ++ pci_unmap_page(dev->pdev, priv->r100c08, PAGE_SIZE, ++ PCI_DMA_BIDIRECTIONAL); ++ __free_page(priv->r100c08_page); ++ kfree(priv); + } + + void nv50_fb_vm_trap(struct drm_device *dev, int display, const char *name) { struct drm_nouveau_private *dev_priv = dev->dev_private; @@ -9994,7 +10685,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_fb.c linux-2.6.37-rc1.n u32 trap[6], idx, chinst; int i, ch; -@@ -60,8 +61,10 @@ +@@ -60,8 +118,10 @@ return; chinst = (trap[2] << 16) | trap[1]; @@ -10006,7 +10697,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_fb.c linux-2.6.37-rc1.n if (!chan || !chan->ramin) continue; -@@ -69,6 +72,7 @@ +@@ -69,6 +129,7 @@ if (chinst == chan->ramin->vinst >> 12) break; } @@ -10014,9 +10705,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_fb.c linux-2.6.37-rc1.n NV_INFO(dev, "%s - VM: Trapped %s at %02x%04x%04x status %08x " "channel %d (0x%08x)\n", -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_fbcon.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_fbcon.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_fbcon.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_fbcon.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_fbcon.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_fbcon.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_fbcon.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_fbcon.c 2010-11-17 02:20:11.000000000 +0100 @@ -4,26 +4,18 @@ #include "nouveau_ramht.h" #include "nouveau_fbcon.h" @@ -10148,9 +10839,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_fbcon.c linux-2.6.37-rc } int -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_fifo.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_fifo.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_fifo.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_fifo.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_fifo.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_fifo.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_fifo.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_fifo.c 2010-11-17 02:20:11.000000000 +0100 @@ -44,7 +44,8 @@ /* We never schedule channel 0 or 127 */ @@ -10250,9 +10941,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_fifo.c linux-2.6.37-rc1 +{ + nv50_vm_flush(dev, 5); +} -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_gpio.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_gpio.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_gpio.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_gpio.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_gpio.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_gpio.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_gpio.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_gpio.c 2010-11-17 02:20:11.000000000 +0100 @@ -26,6 +26,28 @@ #include "nouveau_drv.h" #include "nouveau_hw.h" @@ -10489,9 +11180,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_gpio.c linux-2.6.37-rc1 + } + spin_unlock(&priv->lock); +} -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_graph.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_graph.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_graph.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_graph.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_graph.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_graph.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_graph.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_graph.c 2010-11-17 02:20:11.000000000 +0100 @@ -29,6 +29,11 @@ #include "nouveau_drv.h" #include "nouveau_ramht.h" @@ -11283,9 +11974,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_graph.c linux-2.6.37-rc + if (nv_rd32(dev, 0x400824) & (1 << 31)) + nv_wr32(dev, 0x400824, nv_rd32(dev, 0x400824) & ~(1 << 31)); +} -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_instmem.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_instmem.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_instmem.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv50_instmem.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_instmem.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_instmem.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_instmem.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_instmem.c 2010-11-17 02:20:11.000000000 +0100 @@ -131,10 +131,10 @@ } @@ -11565,9 +12256,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv50_instmem.c linux-2.6.37- } void -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv84_crypt.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv84_crypt.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv84_crypt.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nv84_crypt.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv84_crypt.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv84_crypt.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv84_crypt.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv84_crypt.c 2010-11-17 02:20:11.000000000 +0100 @@ -0,0 +1,137 @@ +/* + * Copyright 2010 Red Hat Inc. @@ -11632,7 +12323,7 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv84_crypt.c linux-2.6.37-rc + struct drm_device *dev = chan->dev; + u32 inst; + -+ if (!chan->ramin) ++ if (!chan->crypt_ctx) + return; + + inst = (chan->ramin->vinst >> 12); @@ -11706,9 +12397,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nv84_crypt.c linux-2.6.37-rc + + nv50_fb_vm_trap(dev, show, "PCRYPT"); +} -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nvc0_instmem.c linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nvc0_instmem.c ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nvc0_instmem.c 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nvc0_instmem.c 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nvc0_instmem.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nvc0_instmem.c +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nvc0_instmem.c 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nvc0_instmem.c 2010-11-17 02:20:11.000000000 +0100 @@ -26,67 +26,89 @@ #include "nouveau_drv.h" @@ -11881,9 +12572,9 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nvc0_instmem.c linux-2.6.37- } void -diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nvreg.h linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nvreg.h ---- linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nvreg.h 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/drivers/gpu/drm/nouveau/nvreg.h 2010-11-12 06:18:06.000000000 +0100 +diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nvreg.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nvreg.h +--- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nvreg.h 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nvreg.h 2010-11-17 02:20:11.000000000 +0100 @@ -153,7 +153,8 @@ #define NV_PCRTC_START 0x00600800 #define NV_PCRTC_CONFIG 0x00600804 @@ -11894,10 +12585,19 @@ diff -Naur linux-2.6.37-rc1/drivers/gpu/drm/nouveau/nvreg.h linux-2.6.37-rc1.nou #define NV_PCRTC_CURSOR_CONFIG 0x00600810 # define NV_PCRTC_CURSOR_CONFIG_ENABLE_ENABLE (1 << 0) # define NV_PCRTC_CURSOR_CONFIG_DOUBLE_SCAN_ENABLE (1 << 4) -diff -Naur linux-2.6.37-rc1/include/drm/nouveau_drm.h linux-2.6.37-rc1.nouveau/include/drm/nouveau_drm.h ---- linux-2.6.37-rc1/include/drm/nouveau_drm.h 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.nouveau/include/drm/nouveau_drm.h 2010-11-12 06:18:06.000000000 +0100 -@@ -80,6 +80,8 @@ +diff -Naur linux-2.6.37-rc2/include/drm/nouveau_drm.h linux-2.6.37-rc2.nouveau/include/drm/nouveau_drm.h +--- linux-2.6.37-rc2/include/drm/nouveau_drm.h 2010-11-16 03:31:02.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/include/drm/nouveau_drm.h 2010-11-17 02:20:11.000000000 +0100 +@@ -71,15 +71,14 @@ + #define NOUVEAU_GETPARAM_PCI_VENDOR 3 + #define NOUVEAU_GETPARAM_PCI_DEVICE 4 + #define NOUVEAU_GETPARAM_BUS_TYPE 5 +-#define NOUVEAU_GETPARAM_FB_PHYSICAL 6 +-#define NOUVEAU_GETPARAM_AGP_PHYSICAL 7 + #define NOUVEAU_GETPARAM_FB_SIZE 8 + #define NOUVEAU_GETPARAM_AGP_SIZE 9 +-#define NOUVEAU_GETPARAM_PCI_PHYSICAL 10 + #define NOUVEAU_GETPARAM_CHIPSET_ID 11 #define NOUVEAU_GETPARAM_VM_VRAM_BASE 12 #define NOUVEAU_GETPARAM_GRAPH_UNITS 13 #define NOUVEAU_GETPARAM_PTIMER_TIME 14 @@ -11906,7 +12606,7 @@ diff -Naur linux-2.6.37-rc1/include/drm/nouveau_drm.h linux-2.6.37-rc1.nouveau/i struct drm_nouveau_getparam { uint64_t param; uint64_t value; -@@ -95,6 +97,12 @@ +@@ -95,6 +94,12 @@ #define NOUVEAU_GEM_DOMAIN_GART (1 << 2) #define NOUVEAU_GEM_DOMAIN_MAPPABLE (1 << 3) @@ -11919,7 +12619,7 @@ diff -Naur linux-2.6.37-rc1/include/drm/nouveau_drm.h linux-2.6.37-rc1.nouveau/i struct drm_nouveau_gem_info { uint32_t handle; uint32_t domain; -@@ -164,7 +172,6 @@ +@@ -164,7 +169,6 @@ }; #define NOUVEAU_GEM_CPU_PREP_NOWAIT 0x00000001 From 18adadffe35275cee452948d8e88b24b3fc1982c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 17 Nov 2010 14:33:41 +0100 Subject: [PATCH 374/850] libva: fix package handling Signed-off-by: Stephan Raue --- packages/multimedia/libva/build | 2 +- packages/multimedia/libva/install | 6 +++--- packages/multimedia/libva/meta | 1 - 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/multimedia/libva/build b/packages/multimedia/libva/build index 9f4849f5a2..db1b796173 100755 --- a/packages/multimedia/libva/build +++ b/packages/multimedia/libva/build @@ -2,7 +2,7 @@ . config/options $1 -cd $PKG_BUILD +cd $BUILD/$PKG_NAME-* # apply patches provide with the source package cat debian/patches/*.patch | patch -p1 diff --git a/packages/multimedia/libva/install b/packages/multimedia/libva/install index 27496526a9..cf8eed6b10 100755 --- a/packages/multimedia/libva/install +++ b/packages/multimedia/libva/install @@ -3,13 +3,13 @@ . config/options $1 mkdir -p $INSTALL/usr/lib - cp -P $PKG_BUILD/va/.libs/libva*.so* $INSTALL/usr/lib + cp -P $BUILD/$PKG_NAME-*/va/.libs/libva*.so* $INSTALL/usr/lib rm -rf $INSTALL/usr/lib/libva-*.so*T mkdir -p $INSTALL/usr/lib/va - cp -P $PKG_BUILD/i965_drv_video/.libs/*.so $INSTALL/usr/lib/va + cp -P $BUILD/$PKG_NAME-*/i965_drv_video/.libs/*.so $INSTALL/usr/lib/va if [ "$DEVTOOLS" = yes ]; then mkdir -p $INSTALL/usr/bin - cp $PKG_BUILD/test/.libs/vainfo $INSTALL/usr/bin + cp $BUILD/$PKG_NAME-*/test/.libs/vainfo $INSTALL/usr/bin fi diff --git a/packages/multimedia/libva/meta b/packages/multimedia/libva/meta index f8d470f844..bdb5d4ea8b 100644 --- a/packages/multimedia/libva/meta +++ b/packages/multimedia/libva/meta @@ -13,4 +13,3 @@ PKG_SHORTDESC="libva: The main motivation for VAAPI (Video Acceleration API) is PKG_LONGDESC="The main motivation for VAAPI (Video Acceleration API) is to enable hardware accelerated video decode/encode at various entry-points (VLD, IDCT, Motion Compensation etc.) for the prevailing coding standards today (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 AVC/H.264, and VC-1/VMW3). Extending XvMC was considered, but due to its original design for MPEG-2 MotionComp only, it made more sense to design an interface from scratch that can fully expose the video decode capabilities in today's GPUs." PKG_IS_ADDON="no" - From adfd2bbf0676743b1dfe6b8547ca2e59d5b1919c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 17 Nov 2010 14:34:04 +0100 Subject: [PATCH 375/850] connman: update to connman-20101116 Signed-off-by: Stephan Raue --- packages/network/connman/meta | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/network/connman/meta b/packages/network/connman/meta index ba4fb4ccdf..bcae24f1aa 100644 --- a/packages/network/connman/meta +++ b/packages/network/connman/meta @@ -1,10 +1,10 @@ PKG_NAME="connman" -PKG_VERSION="0.63" +PKG_VERSION="20101116" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://www.connman.net" -PKG_URL="http://www.kernel.org/pub/linux/network/connman/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="glib dbus udev iptables wpa_supplicant ntp siglaunchd" PKG_BUILD_DEPENDS="toolchain glib dbus udev iptables" PKG_PRIORITY="optional" From bd0257ef77b6a1594723eaeb27497941da57b59a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 17 Nov 2010 14:34:41 +0100 Subject: [PATCH 376/850] lzma: add metafile support Signed-off-by: Stephan Raue --- packages/toolchain/archivers/lzma/meta | 14 ++++++++++++++ packages/toolchain/archivers/lzma/url | 1 - 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/toolchain/archivers/lzma/meta delete mode 100644 packages/toolchain/archivers/lzma/url diff --git a/packages/toolchain/archivers/lzma/meta b/packages/toolchain/archivers/lzma/meta new file mode 100644 index 0000000000..90434fb6d8 --- /dev/null +++ b/packages/toolchain/archivers/lzma/meta @@ -0,0 +1,14 @@ +PKG_NAME="lzma" +PKG_VERSION="907" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.7-zip.org/sdk.html" +PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="ccache" +PKG_PRIORITY="optional" +PKG_SECTION="toolchain/archivers" +PKG_SHORTDESC="lzma: A file compression utility using the LZMA algorithm" +PKG_LONGDESC="LZMA utils in a nutshell. Average compression ratio of LZMA is about 30% better than that of gzip, and 15% better than that of bzip2. Decompression speed is only little slower than that of gzip, being two to five times faster than bzip2. In fast mode, compresses faster than bzip2 with a comparable compression ratio. However achieving the best compression ratios takes four to even twelve times longer than with bzip2. However, this doesn't affect decompressing speed." +PKG_IS_ADDON="no" diff --git a/packages/toolchain/archivers/lzma/url b/packages/toolchain/archivers/lzma/url deleted file mode 100644 index 767ae3a820..0000000000 --- a/packages/toolchain/archivers/lzma/url +++ /dev/null @@ -1 +0,0 @@ -http://sources.openelec.tv/svn/lzma-907.tar.bz2 \ No newline at end of file From 28d5bcb5768e6cda0b7a1f9d7fa347ec31100a3a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 17 Nov 2010 14:34:59 +0100 Subject: [PATCH 377/850] squashfs: add metafile support Signed-off-by: Stephan Raue --- packages/toolchain/sysutils/squashfs/build | 1 - packages/toolchain/sysutils/squashfs/meta | 14 ++++++++++++++ ...ts-0.1.diff => squashfs-4.1-defaults-0.1.patch} | 0 packages/toolchain/sysutils/squashfs/url | 1 - 4 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 packages/toolchain/sysutils/squashfs/meta rename packages/toolchain/sysutils/squashfs/patches/{squashfs-4.1-defaults-0.1.diff => squashfs-4.1-defaults-0.1.patch} (100%) delete mode 100644 packages/toolchain/sysutils/squashfs/url diff --git a/packages/toolchain/sysutils/squashfs/build b/packages/toolchain/sysutils/squashfs/build index b8fb58b5ee..b7f21583ec 100755 --- a/packages/toolchain/sysutils/squashfs/build +++ b/packages/toolchain/sysutils/squashfs/build @@ -2,7 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain $SCRIPTS/unpack lzma LZMA_DIR=`ls -d $ROOT/$BUILD/lzma*` diff --git a/packages/toolchain/sysutils/squashfs/meta b/packages/toolchain/sysutils/squashfs/meta new file mode 100644 index 0000000000..22b529c850 --- /dev/null +++ b/packages/toolchain/sysutils/squashfs/meta @@ -0,0 +1,14 @@ +PKG_NAME="squashfs" +PKG_VERSION="4.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://squashfs.sourceforge.net/" +PKG_URL="http://downloads.sourceforge.net/project/squashfs/squashfs/${PKG_NAME}${PKG_VERSION}/${PKG_NAME}${PKG_VERSION}.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="ccache" +PKG_PRIORITY="optional" +PKG_SECTION="toolchain/sysutils" +PKG_SHORTDESC="squashfs-tools: A compressed read-only filesystem for Linux" +PKG_LONGDESC="Squashfs is intended to be a general read-only filesystem, for archival use (i.e. in cases where a .tar.gz file may be used), and in constrained block device/memory systems (e.g. embedded systems) where low overhead is needed. The filesystem is currently stable and has been tested on PowerPC, i386, SPARC and ARM architectures." +PKG_IS_ADDON="no" diff --git a/packages/toolchain/sysutils/squashfs/patches/squashfs-4.1-defaults-0.1.diff b/packages/toolchain/sysutils/squashfs/patches/squashfs-4.1-defaults-0.1.patch similarity index 100% rename from packages/toolchain/sysutils/squashfs/patches/squashfs-4.1-defaults-0.1.diff rename to packages/toolchain/sysutils/squashfs/patches/squashfs-4.1-defaults-0.1.patch diff --git a/packages/toolchain/sysutils/squashfs/url b/packages/toolchain/sysutils/squashfs/url deleted file mode 100644 index 0a1e085f9c..0000000000 --- a/packages/toolchain/sysutils/squashfs/url +++ /dev/null @@ -1 +0,0 @@ -http://downloads.sourceforge.net/project/squashfs/squashfs/squashfs4.1/squashfs4.1.tar.gz \ No newline at end of file From 5e06b079c87df61a2e41a8a03899db89bcd6d99b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 17 Nov 2010 14:47:15 +0100 Subject: [PATCH 378/850] sed: add metafile support, move to toolchain/sysutils Signed-off-by: Stephan Raue --- packages/toolchain/sed/url | 1 - packages/toolchain/{ => sysutils}/sed/build | 0 packages/toolchain/sysutils/sed/meta | 14 ++++++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) delete mode 100644 packages/toolchain/sed/url rename packages/toolchain/{ => sysutils}/sed/build (100%) create mode 100644 packages/toolchain/sysutils/sed/meta diff --git a/packages/toolchain/sed/url b/packages/toolchain/sed/url deleted file mode 100644 index f6126cf7db..0000000000 --- a/packages/toolchain/sed/url +++ /dev/null @@ -1 +0,0 @@ -http://ftp.gnu.org/gnu/sed/sed-4.2.1.tar.bz2 \ No newline at end of file diff --git a/packages/toolchain/sed/build b/packages/toolchain/sysutils/sed/build similarity index 100% rename from packages/toolchain/sed/build rename to packages/toolchain/sysutils/sed/build diff --git a/packages/toolchain/sysutils/sed/meta b/packages/toolchain/sysutils/sed/meta new file mode 100644 index 0000000000..c25987a418 --- /dev/null +++ b/packages/toolchain/sysutils/sed/meta @@ -0,0 +1,14 @@ +PKG_NAME="sed" +PKG_VERSION="4.2.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="ftp://ftp.gnu.org/pub/gnu/sed/" +PKG_URL="http://ftp.gnu.org/gnu/sed/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="ccache" +PKG_PRIORITY="optional" +PKG_SECTION="toolchain/sysutils" +PKG_SHORTDESC="sed: This is the GNU implementation of the POSIX stream editor" +PKG_LONGDESC="The sed (Stream EDitor) editor is a stream or batch (non-interactive) editor. Sed takes text as input, performs an operation or set of operations on the text and outputs the modified text. The operations that sed performs (substitutions, deletions, insertions, etc.) can be specified in a script file or from the command line." +PKG_IS_ADDON="no" From 17fa65cdffd50815911ba73e60c65195790a9b6c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 17 Nov 2010 14:55:27 +0100 Subject: [PATCH 379/850] ppl: add metafile support Signed-off-by: Stephan Raue --- packages/toolchain/math/ppl/build | 5 +---- packages/toolchain/math/ppl/meta | 14 ++++++++++++++ packages/toolchain/math/ppl/url | 1 - 3 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 packages/toolchain/math/ppl/meta delete mode 100644 packages/toolchain/math/ppl/url diff --git a/packages/toolchain/math/ppl/build b/packages/toolchain/math/ppl/build index dda849a29c..344ea91765 100755 --- a/packages/toolchain/math/ppl/build +++ b/packages/toolchain/math/ppl/build @@ -2,14 +2,11 @@ . config/options $1 -$SCRIPTS/build gmp - setup_toolchain host cd $BUILD/$1* -mkdir -p objdir -cd objdir +mkdir -p objdir && cd objdir ../configure --host=$HOST_NAME \ --build=$HOST_NAME \ diff --git a/packages/toolchain/math/ppl/meta b/packages/toolchain/math/ppl/meta new file mode 100644 index 0000000000..7d165323cd --- /dev/null +++ b/packages/toolchain/math/ppl/meta @@ -0,0 +1,14 @@ +PKG_NAME="ppl" +PKG_VERSION="0.11" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.cs.unipr.it/ppl" +PKG_URL="http://www.cs.unipr.it/ppl/Download/ftp/releases/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="ccache gmp" +PKG_PRIORITY="optional" +PKG_SECTION="toolchain/math" +PKG_SHORTDESC="ppl: Parma Polyhedra Library" +PKG_LONGDESC="The Parma Polyhedra Library (PPL) provides numerical abstractions especially targeted at applications in the field of analysis and verification of complex systems." +PKG_IS_ADDON="no" diff --git a/packages/toolchain/math/ppl/url b/packages/toolchain/math/ppl/url deleted file mode 100644 index 31fc4fae56..0000000000 --- a/packages/toolchain/math/ppl/url +++ /dev/null @@ -1 +0,0 @@ -http://www.cs.unipr.it/ppl/Download/ftp/releases/0.11/ppl-0.11.tar.bz2 From 45bfc9b2c7403f4af748e4972d1138f606b0ffa1 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 17 Nov 2010 14:55:39 +0100 Subject: [PATCH 380/850] cloog-ppl: add metafile support Signed-off-by: Stephan Raue --- packages/toolchain/math/cloog-ppl/build | 6 +----- packages/toolchain/math/cloog-ppl/meta | 14 ++++++++++++++ ...gure.diff => cloog-ppl-0.15.10-configure.patch} | 0 packages/toolchain/math/cloog-ppl/url | 1 - 4 files changed, 15 insertions(+), 6 deletions(-) create mode 100644 packages/toolchain/math/cloog-ppl/meta rename packages/toolchain/math/cloog-ppl/patches/{cloog-ppl-0.15.10-configure.diff => cloog-ppl-0.15.10-configure.patch} (100%) delete mode 100644 packages/toolchain/math/cloog-ppl/url diff --git a/packages/toolchain/math/cloog-ppl/build b/packages/toolchain/math/cloog-ppl/build index a8bb36ae72..c62dd6bbcb 100755 --- a/packages/toolchain/math/cloog-ppl/build +++ b/packages/toolchain/math/cloog-ppl/build @@ -2,15 +2,11 @@ . config/options $1 -$SCRIPTS/build gmp -$SCRIPTS/build ppl - setup_toolchain host cd $BUILD/$1* -mkdir -p objdir -cd objdir +mkdir -p objdir && cd objdir ../configure --host=$HOST_NAME \ --build=$HOST_NAME \ diff --git a/packages/toolchain/math/cloog-ppl/meta b/packages/toolchain/math/cloog-ppl/meta new file mode 100644 index 0000000000..496eeed10f --- /dev/null +++ b/packages/toolchain/math/cloog-ppl/meta @@ -0,0 +1,14 @@ +PKG_NAME="cloog-ppl" +PKG_VERSION="0.15.10" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.cloog.org/" +PKG_URL="ftp://gcc.gnu.org/pub/gcc/infrastructure/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="ccache gmp ppl" +PKG_PRIORITY="optional" +PKG_SECTION="toolchain/math" +PKG_SHORTDESC="cloog-ppl: Code Generator in the Polyhedral Model's Home" +PKG_LONGDESC="CLooG-PPL is a library to generate code for scanning Z-polyhedra. In other words, it finds code that reaches each integral point of one or more parameterized polyhedra. GCC links with this library in order to enable the new loop generation code known as Graphite." +PKG_IS_ADDON="no" diff --git a/packages/toolchain/math/cloog-ppl/patches/cloog-ppl-0.15.10-configure.diff b/packages/toolchain/math/cloog-ppl/patches/cloog-ppl-0.15.10-configure.patch similarity index 100% rename from packages/toolchain/math/cloog-ppl/patches/cloog-ppl-0.15.10-configure.diff rename to packages/toolchain/math/cloog-ppl/patches/cloog-ppl-0.15.10-configure.patch diff --git a/packages/toolchain/math/cloog-ppl/url b/packages/toolchain/math/cloog-ppl/url deleted file mode 100644 index da00553641..0000000000 --- a/packages/toolchain/math/cloog-ppl/url +++ /dev/null @@ -1 +0,0 @@ -ftp://gcc.gnu.org/pub/gcc/infrastructure/cloog-ppl-0.15.10.tar.gz From 75d9b5a9953882fd7948e78ddd9ee3d8bbdba923 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 17 Nov 2010 14:56:10 +0100 Subject: [PATCH 381/850] gmp: fix deps Signed-off-by: Stephan Raue --- packages/toolchain/math/gmp/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/toolchain/math/gmp/meta b/packages/toolchain/math/gmp/meta index 86ba00261b..da8ed0be57 100644 --- a/packages/toolchain/math/gmp/meta +++ b/packages/toolchain/math/gmp/meta @@ -6,7 +6,7 @@ PKG_LICENSE="LGPL" PKG_SITE="http://www.swox.com/gmp/" PKG_URL="http://ftp.sunet.se/pub/gnu/gmp/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="" +PKG_BUILD_DEPENDS="ccache" PKG_PRIORITY="optional" PKG_SECTION="toolchain/math" PKG_SHORTDESC="gmp: The GNU MP (multiple precision arithmetic) library" From 610cd211612e419386bcbfe380de064d9993f424 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 17 Nov 2010 14:57:19 +0100 Subject: [PATCH 382/850] Mesa: update to Mesa-20101116 Signed-off-by: Stephan Raue --- packages/graphics/Mesa/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/graphics/Mesa/meta b/packages/graphics/Mesa/meta index 195562722e..e415c6490a 100644 --- a/packages/graphics/Mesa/meta +++ b/packages/graphics/Mesa/meta @@ -14,6 +14,6 @@ PKG_LONGDESC="Mesa is a 3-D graphics library with an API which is very similar t PKG_IS_ADDON="no" if [ $MESA_MASTER = "yes" ]; then - PKG_VERSION="20101111" + PKG_VERSION="20101116" PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" fi From d58cd288af4db84c7c389479f81862bf37c6383a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 17 Nov 2010 14:57:32 +0100 Subject: [PATCH 383/850] Mesa: fix debug build Signed-off-by: Stephan Raue --- packages/graphics/Mesa/build | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/graphics/Mesa/build b/packages/graphics/Mesa/build index e5abcb0c55..a301bc92fa 100755 --- a/packages/graphics/Mesa/build +++ b/packages/graphics/Mesa/build @@ -4,8 +4,9 @@ get_graphicdrivers -# dont use strip because of use from mklib +# dont use strip or ggdb because of use from mklib LDFLAGS=`echo $LDFLAGS | sed -e "s|-s||"` + LDFLAGS=`echo $LDFLAGS | sed -e "s|-ggdb||"` MESA_CONFIG=" --disable-gallium --disable-gallium-nouveau --disable-gallium-i915 --disable-gallium-i965" MESA_CONFIG="$MESA_CONFIG --disable-gallium-radeon --disable-gallium-r600 --disable-gallium-svga --disable-gallium-swrast" From fcc1e4c5b2482d1c01fabdad58a41e29c387ed18 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 17 Nov 2010 14:58:39 +0100 Subject: [PATCH 384/850] xorg-server: fix meta file Signed-off-by: Stephan Raue --- packages/x11/xserver/xorg-server/meta | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/x11/xserver/xorg-server/meta b/packages/x11/xserver/xorg-server/meta index 3b4b6aa82d..58ec10854c 100644 --- a/packages/x11/xserver/xorg-server/meta +++ b/packages/x11/xserver/xorg-server/meta @@ -13,6 +13,7 @@ PKG_SHORTDESC="xorg-server: The Xorg X server" PKG_LONGDESC="Xorg is a full featured X server that was originally designed for UNIX and UNIX-like operating systems running on Intel x86 hardware." PKG_IS_ADDON="no" +get_graphicdrivers if [ "$XINERAMA_SUPPORT" = "yes" ]; then PKG_DEPENDS="$PKG_DEPENDS libXinerama" PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS libXinerama" From 27590d63cf7d76c0c1452baf11a5b65ce2d8c42b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 17 Nov 2010 15:07:27 +0100 Subject: [PATCH 385/850] mpc: fix deps Signed-off-by: Stephan Raue --- packages/toolchain/math/mpc/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/toolchain/math/mpc/meta b/packages/toolchain/math/mpc/meta index 788c000bb4..79ee0f9f34 100644 --- a/packages/toolchain/math/mpc/meta +++ b/packages/toolchain/math/mpc/meta @@ -6,7 +6,7 @@ PKG_LICENSE="LGPL" PKG_SITE="http://www.multiprecision.org" PKG_URL="http://www.multiprecision.org/mpc/download/$PKG_NAME-$PKG_VERSION.tar.gz" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="gmp mpfr" +PKG_BUILD_DEPENDS="ccache gmp mpfr" PKG_PRIORITY="optional" PKG_SECTION="toolchain/math" PKG_SHORTDESC="mpc: A C library for the arithmetic of high precision complex numbers" From e76d28316202d272767b3ad33000e5ebee8eb2b9 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 17 Nov 2010 15:07:36 +0100 Subject: [PATCH 386/850] mpfr: fix deps Signed-off-by: Stephan Raue --- packages/toolchain/math/mpfr/meta | 2 +- ...tches_20101110.diff => mpfr-3.0.0-allpatches_20101110.patch} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename packages/toolchain/math/mpfr/patches/{mpfr-3.0.0-allpatches_20101110.diff => mpfr-3.0.0-allpatches_20101110.patch} (100%) diff --git a/packages/toolchain/math/mpfr/meta b/packages/toolchain/math/mpfr/meta index 9af9a290d5..89dfc421a3 100644 --- a/packages/toolchain/math/mpfr/meta +++ b/packages/toolchain/math/mpfr/meta @@ -6,7 +6,7 @@ PKG_LICENSE="LGPL" PKG_SITE="http://www.mpfr.org/" PKG_URL="http://www.mpfr.org/mpfr-current/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="gmp" +PKG_BUILD_DEPENDS="ccache gmp" PKG_PRIORITY="optional" PKG_SECTION="toolchain/math" PKG_SHORTDESC="mpfr: A C library for multiple-precision floating-point computations with exact roundi" diff --git a/packages/toolchain/math/mpfr/patches/mpfr-3.0.0-allpatches_20101110.diff b/packages/toolchain/math/mpfr/patches/mpfr-3.0.0-allpatches_20101110.patch similarity index 100% rename from packages/toolchain/math/mpfr/patches/mpfr-3.0.0-allpatches_20101110.diff rename to packages/toolchain/math/mpfr/patches/mpfr-3.0.0-allpatches_20101110.patch From 3e855ebe1acd8e9bee2679428860af1cdf525e1b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 17 Nov 2010 22:14:24 +0100 Subject: [PATCH 387/850] gcc: add metafile support Signed-off-by: Stephan Raue --- packages/toolchain/lang/gcc/meta | 16 ++++++++++++++++ ...nd_gold.diff => gcc-4.5.1-bfd_and_gold.patch} | 0 ...cc-4.5.1-disable_multilib_i386_linux64.patch} | 0 ...inker.diff => gcc-4.5.1-dynamic_linker.patch} | 0 ....diff => gcc-4.5.1-libstdc++-v3_config.patch} | 0 ....11-0.1.diff => gcc-4.5.1-ppl-0.11-0.1.patch} | 0 .../toolchain/lang/gcc/{unpack => unpack.old} | 0 packages/toolchain/lang/gcc/url | 2 -- 8 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 packages/toolchain/lang/gcc/meta rename packages/toolchain/lang/gcc/patches/{gcc-4.5-bfd_and_gold.diff => gcc-4.5.1-bfd_and_gold.patch} (100%) rename packages/toolchain/lang/gcc/patches/{gcc-4.5-disable_multilib_i386_linux64.diff => gcc-4.5.1-disable_multilib_i386_linux64.patch} (100%) rename packages/toolchain/lang/gcc/patches/{gcc-4.5-dynamic_linker.diff => gcc-4.5.1-dynamic_linker.patch} (100%) rename packages/toolchain/lang/gcc/patches/{gcc-4.5-libstdc++-v3_config.diff => gcc-4.5.1-libstdc++-v3_config.patch} (100%) rename packages/toolchain/lang/gcc/patches/{gcc-4.5.1-ppl-0.11-0.1.diff => gcc-4.5.1-ppl-0.11-0.1.patch} (100%) rename packages/toolchain/lang/gcc/{unpack => unpack.old} (100%) delete mode 100644 packages/toolchain/lang/gcc/url diff --git a/packages/toolchain/lang/gcc/meta b/packages/toolchain/lang/gcc/meta new file mode 100644 index 0000000000..da0dd23433 --- /dev/null +++ b/packages/toolchain/lang/gcc/meta @@ -0,0 +1,16 @@ +PKG_NAME="gcc" +PKG_VERSION="4.5.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://gcc.gnu.org/" +PKG_URL="ftp://ftp.gwdg.de/pub/misc/gcc/releases/$PKG_NAME-$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="ccache" +PKG_PRIORITY="optional" +PKG_SECTION="toolchain/lang" +PKG_SHORTDESC="gcc: The GNU Compiler Collection Version 4 (aka GNU C Compiler)" +PKG_LONGDESC="This package contains the GNU Compiler Collection. It includes compilers for the languages C, C++, Objective C, Fortran 95, Java and others ... This GCC contains the Stack-Smashing Protector Patch which can be enabled with the -fstack-protector command-line option. More information about it ca be found at http://www.research.ibm.com/trl/projects/security/ssp/." +PKG_IS_ADDON="no" + +#PKG_URL="ftp://ftp.gwdg.de/pub/misc/gcc/releases/$PKG_NAME-$PKG_VERSION/$PKG_NAME-core-$PKG_VERSION.tar.bz2 ftp://ftp.gwdg.de/pub/misc/gcc/releases/$PKG_NAME-$PKG_VERSION/$PKG_NAME-g++-$PKG_VERSION.tar.bz2" diff --git a/packages/toolchain/lang/gcc/patches/gcc-4.5-bfd_and_gold.diff b/packages/toolchain/lang/gcc/patches/gcc-4.5.1-bfd_and_gold.patch similarity index 100% rename from packages/toolchain/lang/gcc/patches/gcc-4.5-bfd_and_gold.diff rename to packages/toolchain/lang/gcc/patches/gcc-4.5.1-bfd_and_gold.patch diff --git a/packages/toolchain/lang/gcc/patches/gcc-4.5-disable_multilib_i386_linux64.diff b/packages/toolchain/lang/gcc/patches/gcc-4.5.1-disable_multilib_i386_linux64.patch similarity index 100% rename from packages/toolchain/lang/gcc/patches/gcc-4.5-disable_multilib_i386_linux64.diff rename to packages/toolchain/lang/gcc/patches/gcc-4.5.1-disable_multilib_i386_linux64.patch diff --git a/packages/toolchain/lang/gcc/patches/gcc-4.5-dynamic_linker.diff b/packages/toolchain/lang/gcc/patches/gcc-4.5.1-dynamic_linker.patch similarity index 100% rename from packages/toolchain/lang/gcc/patches/gcc-4.5-dynamic_linker.diff rename to packages/toolchain/lang/gcc/patches/gcc-4.5.1-dynamic_linker.patch diff --git a/packages/toolchain/lang/gcc/patches/gcc-4.5-libstdc++-v3_config.diff b/packages/toolchain/lang/gcc/patches/gcc-4.5.1-libstdc++-v3_config.patch similarity index 100% rename from packages/toolchain/lang/gcc/patches/gcc-4.5-libstdc++-v3_config.diff rename to packages/toolchain/lang/gcc/patches/gcc-4.5.1-libstdc++-v3_config.patch diff --git a/packages/toolchain/lang/gcc/patches/gcc-4.5.1-ppl-0.11-0.1.diff b/packages/toolchain/lang/gcc/patches/gcc-4.5.1-ppl-0.11-0.1.patch similarity index 100% rename from packages/toolchain/lang/gcc/patches/gcc-4.5.1-ppl-0.11-0.1.diff rename to packages/toolchain/lang/gcc/patches/gcc-4.5.1-ppl-0.11-0.1.patch diff --git a/packages/toolchain/lang/gcc/unpack b/packages/toolchain/lang/gcc/unpack.old similarity index 100% rename from packages/toolchain/lang/gcc/unpack rename to packages/toolchain/lang/gcc/unpack.old diff --git a/packages/toolchain/lang/gcc/url b/packages/toolchain/lang/gcc/url deleted file mode 100644 index c04fe247a1..0000000000 --- a/packages/toolchain/lang/gcc/url +++ /dev/null @@ -1,2 +0,0 @@ -ftp://ftp.gwdg.de/pub/misc/gcc/releases/gcc-4.5.1/gcc-core-4.5.1.tar.bz2 -ftp://ftp.gwdg.de/pub/misc/gcc/releases/gcc-4.5.1/gcc-g++-4.5.1.tar.bz2 From ebcbe7eb05fb47c63c379e4570d50bcd65ddd8e7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 17 Nov 2010 22:15:30 +0100 Subject: [PATCH 388/850] gcc-core: add metafile support Signed-off-by: Stephan Raue --- packages/toolchain/lang/gcc-core/build | 12 +----------- packages/toolchain/lang/gcc-core/meta | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 11 deletions(-) create mode 100644 packages/toolchain/lang/gcc-core/meta diff --git a/packages/toolchain/lang/gcc-core/build b/packages/toolchain/lang/gcc-core/build index 4580b2f764..38778a9500 100755 --- a/packages/toolchain/lang/gcc-core/build +++ b/packages/toolchain/lang/gcc-core/build @@ -2,25 +2,15 @@ . config/options $1 -$SCRIPTS/build binutils -$SCRIPTS/build gmp -$SCRIPTS/build mpfr -$SCRIPTS/build mpc -$SCRIPTS/build ppl -$SCRIPTS/build cloog-ppl -$SCRIPTS/build libelf $SCRIPTS/unpack gcc -$SCRIPTS/build autoconf-2.64 - setup_toolchain host cd $BUILD/gcc* autoconf-2.64 -mkdir -p objdir-$1 -cd objdir-$1 +mkdir -p objdir-$1 && cd objdir-$1 ../configure --host=$HOST_NAME \ --build=$HOST_NAME \ diff --git a/packages/toolchain/lang/gcc-core/meta b/packages/toolchain/lang/gcc-core/meta new file mode 100644 index 0000000000..625d9de3a3 --- /dev/null +++ b/packages/toolchain/lang/gcc-core/meta @@ -0,0 +1,15 @@ +PKG_NAME="gcc-core" +PKG_VERSION="" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://gcc.gnu.org/" +PKG_URL="" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="ccache binutils gmp mpfr mpc ppl cloog-ppl libelf autoconf-2.64" +PKG_PRIORITY="optional" +PKG_SECTION="toolchain/lang" +PKG_SHORTDESC="gcc: The GNU Compiler Collection Version 4 (aka GNU C Compiler)" +PKG_LONGDESC="This package contains the GNU Compiler Collection. It includes compilers for the languages C, C++, Objective C, Fortran 95, Java and others ... This GCC contains the Stack-Smashing Protector Patch which can be enabled with the -fstack-protector command-line option. More information about it ca be found at http://www.research.ibm.com/trl/projects/security/ssp/." +PKG_IS_ADDON="no" + From 99c9a732f45ee36e262a53a9ec3c72b08a23c53c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 17 Nov 2010 22:15:31 +0100 Subject: [PATCH 389/850] gcc-final: add metafile support Signed-off-by: Stephan Raue --- packages/toolchain/lang/gcc-final/build | 12 +----------- packages/toolchain/lang/gcc-final/meta | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 11 deletions(-) create mode 100644 packages/toolchain/lang/gcc-final/meta diff --git a/packages/toolchain/lang/gcc-final/build b/packages/toolchain/lang/gcc-final/build index a6ed772902..861464782e 100755 --- a/packages/toolchain/lang/gcc-final/build +++ b/packages/toolchain/lang/gcc-final/build @@ -2,23 +2,13 @@ . config/options $1 -$SCRIPTS/build ccache -$SCRIPTS/build binutils -$SCRIPTS/build gmp -$SCRIPTS/build mpfr -$SCRIPTS/build mpc -$SCRIPTS/build ppl -$SCRIPTS/build cloog-ppl -$SCRIPTS/build libelf -$SCRIPTS/build eglibc $SCRIPTS/unpack gcc setup_toolchain host cd $BUILD/gcc* -mkdir -p objdir-$1 -cd objdir-$1 +mkdir -p objdir-$1 && cd objdir-$1 ../configure --host=$HOST_NAME \ --build=$HOST_NAME \ diff --git a/packages/toolchain/lang/gcc-final/meta b/packages/toolchain/lang/gcc-final/meta new file mode 100644 index 0000000000..d7804e596e --- /dev/null +++ b/packages/toolchain/lang/gcc-final/meta @@ -0,0 +1,14 @@ +PKG_NAME="gcc-final" +PKG_VERSION="" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://gcc.gnu.org/" +PKG_URL="" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="ccache binutils gmp mpfr mpc ppl cloog-ppl libelf eglibc" +PKG_PRIORITY="optional" +PKG_SECTION="toolchain/lang" +PKG_SHORTDESC="gcc: The GNU Compiler Collection Version 4 (aka GNU C Compiler)" +PKG_LONGDESC="This package contains the GNU Compiler Collection. It includes compilers for the languages C, C++, Objective C, Fortran 95, Java and others ... This GCC contains the Stack-Smashing Protector Patch which can be enabled with the -fstack-protector command-line option. More information about it ca be found at http://www.research.ibm.com/trl/projects/security/ssp/." +PKG_IS_ADDON="no" From eb981fe96a5091a2c94a6889e73d3985071a4c84 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 17 Nov 2010 22:15:31 +0100 Subject: [PATCH 390/850] yasm: add metafile support Signed-off-by: Stephan Raue --- packages/toolchain/lang/yasm/meta | 14 ++++++++++++++ packages/toolchain/lang/yasm/url | 1 - 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/toolchain/lang/yasm/meta delete mode 100644 packages/toolchain/lang/yasm/url diff --git a/packages/toolchain/lang/yasm/meta b/packages/toolchain/lang/yasm/meta new file mode 100644 index 0000000000..1da00fc090 --- /dev/null +++ b/packages/toolchain/lang/yasm/meta @@ -0,0 +1,14 @@ +PKG_NAME="yasm" +PKG_VERSION="1.1.0" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="BSD" +PKG_SITE="http://www.tortall.net/projects/yasm/" +PKG_URL="http://www.tortall.net/projects/yasm/releases/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="ccache" +PKG_PRIORITY="optional" +PKG_SECTION="toolchain/lang" +PKG_SHORTDESC="yasm: A complete rewrite of the NASM assembler" +PKG_LONGDESC="Yasm is a complete rewrite of the NASM assembler under the new BSD License (some portions are under other licenses, see COPYING for details). It is designed from the ground up to allow for multiple assembler syntaxes to be supported (eg, NASM, TASM, GAS, etc.) in addition to multiple output object formats and even multiple instruction sets. Another primary module of the overall design is an optimizer module." +PKG_IS_ADDON="no" diff --git a/packages/toolchain/lang/yasm/url b/packages/toolchain/lang/yasm/url deleted file mode 100644 index 2f287d1001..0000000000 --- a/packages/toolchain/lang/yasm/url +++ /dev/null @@ -1 +0,0 @@ -http://www.tortall.net/projects/yasm/releases/yasm-1.1.0.tar.gz \ No newline at end of file From c5cf0c0ed68a613fd29859fd1b6e4579ab3d4608 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 17 Nov 2010 22:16:43 +0100 Subject: [PATCH 391/850] linux: fix deps Signed-off-by: Stephan Raue --- packages/linux/unpack | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/linux/unpack b/packages/linux/unpack index c9242d4d79..de85c8e0ab 100755 --- a/packages/linux/unpack +++ b/packages/linux/unpack @@ -2,9 +2,6 @@ . config/options $1 -$SCRIPTS/install make -$SCRIPTS/install sed - LINUX=`ls -d $PKG_BUILD` if [ -f $PROJECT_DIR/$PROJECT/$1/$1.$TARGET_ARCH.conf ]; then From d40efc2688926cc655b9bdfcae063669edce35c1 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 17 Nov 2010 22:17:48 +0100 Subject: [PATCH 392/850] projects/ATV/linux: change for linux-2.6.37-rc2, backup old config Signed-off-by: Stephan Raue --- projects/ATV/linux/linux.i386.conf | 128 +- projects/ATV/linux/linux.i386.conf.2.6.36 | 2206 +++++++++++++++++++++ 2 files changed, 2281 insertions(+), 53 deletions(-) create mode 100644 projects/ATV/linux/linux.i386.conf.2.6.36 diff --git a/projects/ATV/linux/linux.i386.conf b/projects/ATV/linux/linux.i386.conf index c0b4b3b566..8c44dd05a8 100644 --- a/projects/ATV/linux/linux.i386.conf +++ b/projects/ATV/linux/linux.i386.conf @@ -1,6 +1,6 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.36 +# Linux/i386 2.6.37-rc2 Kernel Configuration # # CONFIG_64BIT is not set CONFIG_X86_32=y @@ -43,22 +43,19 @@ CONFIG_ARCH_POPULATES_NODE_MAP=y # CONFIG_AUDIT_ARCH is not set CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y -CONFIG_HAVE_EARLY_RES=y -CONFIG_GENERIC_HARDIRQS=y -CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -CONFIG_GENERIC_IRQ_PROBE=y CONFIG_X86_32_LAZY_GS=y CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-ecx -fcall-saved-edx" CONFIG_KTIME_SCALAR=y CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" CONFIG_CONSTRUCTORS=y +CONFIG_HAVE_IRQ_WORK=y +CONFIG_IRQ_WORK=y # # General setup # CONFIG_EXPERIMENTAL=y CONFIG_BROKEN_ON_SMP=y -CONFIG_LOCK_KERNEL=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" CONFIG_LOCALVERSION="" @@ -80,16 +77,29 @@ CONFIG_BSD_PROCESS_ACCT=y # CONFIG_BSD_PROCESS_ACCT_V3 is not set # CONFIG_TASKSTATS is not set # CONFIG_AUDIT is not set +CONFIG_HAVE_GENERIC_HARDIRQS=y + +# +# IRQ subsystem +# +CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y +# CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED is not set +CONFIG_HAVE_SPARSE_IRQ=y +CONFIG_GENERIC_IRQ_PROBE=y +# CONFIG_GENERIC_PENDING_IRQ is not set +# CONFIG_AUTO_IRQ_AFFINITY is not set +# CONFIG_IRQ_PER_CPU is not set +# CONFIG_HARDIRQS_SW_RESEND is not set +# CONFIG_SPARSE_IRQ is not set # # RCU Subsystem # -CONFIG_TREE_RCU=y # CONFIG_TREE_PREEMPT_RCU is not set # CONFIG_TINY_RCU is not set -# CONFIG_RCU_TRACE is not set -CONFIG_RCU_FANOUT=32 -# CONFIG_RCU_FANOUT_EXACT is not set +CONFIG_TINY_PREEMPT_RCU=y +CONFIG_PREEMPT_RCU=y # CONFIG_TREE_RCU_TRACE is not set # CONFIG_IKCONFIG is not set CONFIG_LOG_BUF_SHIFT=16 @@ -106,9 +116,9 @@ CONFIG_RESOURCE_COUNTERS=y # CONFIG_CGROUP_MEM_RES_CTLR is not set # CONFIG_CGROUP_SCHED is not set # CONFIG_BLK_CGROUP is not set -# CONFIG_SYSFS_DEPRECATED_V2 is not set -# CONFIG_RELAY is not set # CONFIG_NAMESPACES is not set +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set CONFIG_BLK_DEV_INITRD=y CONFIG_INITRAMFS_SOURCE=" " CONFIG_INITRAMFS_ROOT_UID=0 @@ -154,6 +164,7 @@ CONFIG_SLOB=y # CONFIG_PROFILING is not set CONFIG_HAVE_OPROFILE=y # CONFIG_KPROBES is not set +CONFIG_JUMP_LABEL=y CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y CONFIG_HAVE_IOREMAP_PROT=y CONFIG_HAVE_KPROBES=y @@ -167,6 +178,7 @@ CONFIG_HAVE_HW_BREAKPOINT=y CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y CONFIG_HAVE_USER_RETURN_NOTIFIER=y CONFIG_HAVE_PERF_EVENTS_NMI=y +CONFIG_HAVE_ARCH_JUMP_LABEL=y # # GCOV-based kernel profiling @@ -233,12 +245,11 @@ CONFIG_TICK_ONESHOT=y CONFIG_HIGH_RES_TIMERS=y CONFIG_GENERIC_CLOCKEVENTS_BUILD=y # CONFIG_SMP is not set -# CONFIG_SPARSE_IRQ is not set CONFIG_X86_MPPARSE=y # CONFIG_X86_EXTENDED_PLATFORM is not set CONFIG_SCHED_OMIT_FRAME_POINTER=y # CONFIG_PARAVIRT_GUEST is not set -# CONFIG_NO_BOOTMEM is not set +CONFIG_NO_BOOTMEM=y # CONFIG_MEMTEST is not set # CONFIG_M386 is not set # CONFIG_M486 is not set @@ -294,6 +305,7 @@ CONFIG_DMI=y # CONFIG_IOMMU_HELPER is not set # CONFIG_IOMMU_API is not set CONFIG_NR_CPUS=1 +CONFIG_IRQ_TIME_ACCOUNTING=y # CONFIG_PREEMPT_NONE is not set # CONFIG_PREEMPT_VOLUNTARY is not set CONFIG_PREEMPT=y @@ -327,6 +339,7 @@ CONFIG_VMSPLIT_3G_OPT=y CONFIG_PAGE_OFFSET=0xB0000000 # CONFIG_X86_PAE is not set # CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set +# CONFIG_ARCH_DMA_ADDR_T_64BIT is not set CONFIG_NEED_NODE_MEMMAP_SIZE=y CONFIG_ARCH_FLATMEM_ENABLE=y CONFIG_ARCH_SPARSEMEM_ENABLE=y @@ -338,6 +351,7 @@ CONFIG_SPARSEMEM_MANUAL=y CONFIG_SPARSEMEM=y CONFIG_HAVE_MEMORY_PRESENT=y CONFIG_SPARSEMEM_STATIC=y +CONFIG_HAVE_MEMBLOCK=y CONFIG_SPLIT_PTLOCK_CPUS=4 # CONFIG_PHYS_ADDR_T_64BIT is not set CONFIG_ZONE_DMA_FLAG=1 @@ -345,8 +359,9 @@ CONFIG_BOUNCE=y CONFIG_VIRT_TO_BUS=y # CONFIG_KSM is not set CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +CONFIG_NEED_PER_CPU_KM=y # CONFIG_X86_CHECK_BIOS_CORRUPTION is not set -# CONFIG_X86_RESERVE_LOW_64K is not set +CONFIG_X86_RESERVE_LOW=64 # CONFIG_MATH_EMULATION is not set CONFIG_MTRR=y CONFIG_MTRR_SANITIZER=y @@ -380,10 +395,10 @@ CONFIG_PM=y # CONFIG_SUSPEND is not set # CONFIG_HIBERNATION is not set # CONFIG_PM_RUNTIME is not set +# CONFIG_PM_OPP is not set CONFIG_ACPI=y # CONFIG_ACPI_PROCFS is not set # CONFIG_ACPI_PROCFS_POWER is not set -CONFIG_ACPI_SYSFS_POWER=y # CONFIG_ACPI_EC_DEBUGFS is not set # CONFIG_ACPI_PROC_EVENT is not set # CONFIG_ACPI_AC is not set @@ -491,6 +506,7 @@ CONFIG_HAVE_AOUT=y # CONFIG_BINFMT_AOUT is not set # CONFIG_BINFMT_MISC is not set CONFIG_HAVE_ATOMIC_IOMAP=y +CONFIG_HAVE_TEXT_POKE_SMP=y CONFIG_NET=y # @@ -510,7 +526,7 @@ CONFIG_IP_MULTICAST=y CONFIG_IP_FIB_HASH=y # CONFIG_IP_PNP is not set # CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set +# CONFIG_NET_IPGRE_DEMUX is not set # CONFIG_IP_MROUTE is not set # CONFIG_ARPD is not set # CONFIG_SYN_COOKIES is not set @@ -563,9 +579,6 @@ CONFIG_IPV6_NDISC_NODETYPE=y # CONFIG_VLAN_8021Q is not set # CONFIG_DECNET is not set # CONFIG_LLC2 is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_X25 is not set # CONFIG_LAPB is not set # CONFIG_ECONET is not set # CONFIG_WAN_ROUTER is not set @@ -613,6 +626,7 @@ CONFIG_RFKILL_LEDS=y CONFIG_RFKILL_INPUT=y # CONFIG_NET_9P is not set # CONFIG_CAIF is not set +# CONFIG_CEPH_LIB is not set # # Device Drivers @@ -663,6 +677,7 @@ CONFIG_BLK_DEV_RAM_SIZE=4096 # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set # CONFIG_BLK_DEV_HD is not set +# CONFIG_BLK_DEV_RBD is not set # CONFIG_MISC_DEVICES is not set CONFIG_HAVE_IDE=y # CONFIG_IDE is not set @@ -807,20 +822,11 @@ CONFIG_PATA_ACPI=y # # IEEE 1394 (FireWire) support # - -# -# You can enable one or both FireWire driver stacks. -# - -# -# The newer stack is recommended. -# CONFIG_FIREWIRE=m CONFIG_FIREWIRE_OHCI=m CONFIG_FIREWIRE_OHCI_DEBUG=y CONFIG_FIREWIRE_SBP2=m # CONFIG_FIREWIRE_NET is not set -# CONFIG_IEEE1394 is not set # CONFIG_FIREWIRE_NOSY is not set # CONFIG_I2O is not set # CONFIG_MACINTOSH_DRIVERS is not set @@ -833,9 +839,9 @@ CONFIG_NETDEVICES=y # CONFIG_VETH is not set # CONFIG_NET_SB1000 is not set # CONFIG_ARCNET is not set +CONFIG_MII=y # CONFIG_PHYLIB is not set CONFIG_NET_ETHERNET=y -CONFIG_MII=y # CONFIG_HAPPYMEAL is not set # CONFIG_SUNGEM is not set # CONFIG_CASSINI is not set @@ -911,6 +917,7 @@ CONFIG_B43_LEDS=y # CONFIG_HERMES is not set # CONFIG_P54_COMMON is not set # CONFIG_RT2X00 is not set +# CONFIG_WL1251 is not set # CONFIG_WL12XX is not set # CONFIG_ZD1211RW is not set @@ -1050,6 +1057,7 @@ CONFIG_SERIO_I8042=y CONFIG_SERIO_LIBPS2=y # CONFIG_SERIO_RAW is not set # CONFIG_SERIO_ALTERA_PS2 is not set +# CONFIG_SERIO_PS2MULT is not set # CONFIG_GAMEPORT is not set # @@ -1089,6 +1097,7 @@ CONFIG_SERIAL_CORE=y CONFIG_UNIX98_PTYS=y # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set # CONFIG_LEGACY_PTYS is not set +# CONFIG_TTY_PRINTK is not set # CONFIG_IPMI_HANDLER is not set # CONFIG_HW_RANDOM is not set CONFIG_NVRAM=y @@ -1144,6 +1153,7 @@ CONFIG_I2C_I801=y # # I2C system bus drivers (mostly embedded / system-on-chip) # +# CONFIG_I2C_INTEL_MID is not set # CONFIG_I2C_OCORES is not set # CONFIG_I2C_PCA_PLATFORM is not set # CONFIG_I2C_SIMTEC is not set @@ -1177,8 +1187,8 @@ CONFIG_POWER_SUPPLY=y # CONFIG_POWER_SUPPLY_DEBUG is not set # CONFIG_PDA_POWER is not set # CONFIG_TEST_POWER is not set -# CONFIG_BATTERY_DS2760 is not set # CONFIG_BATTERY_DS2782 is not set +# CONFIG_BATTERY_BQ20Z75 is not set # CONFIG_BATTERY_BQ27x00 is not set # CONFIG_BATTERY_MAX17040 is not set # CONFIG_HWMON is not set @@ -1222,11 +1232,12 @@ CONFIG_IR_RC5_DECODER=m CONFIG_IR_RC6_DECODER=m CONFIG_IR_JVC_DECODER=m CONFIG_IR_SONY_DECODER=m +CONFIG_IR_RC5_SZ_DECODER=m # CONFIG_IR_LIRC_CODEC is not set -# CONFIG_IR_IMON is not set -# CONFIG_IR_NUVOTON is not set -CONFIG_IR_MCEUSB=m # CONFIG_IR_ENE is not set +# CONFIG_IR_IMON is not set +CONFIG_IR_MCEUSB=m +# CONFIG_IR_NUVOTON is not set # CONFIG_IR_STREAMZAP is not set # CONFIG_DAB is not set @@ -1252,11 +1263,11 @@ CONFIG_DRM_TTM=y # CONFIG_DRM_TDFX is not set # CONFIG_DRM_R128 is not set # CONFIG_DRM_RADEON is not set -# CONFIG_DRM_I810 is not set # CONFIG_DRM_MGA is not set # CONFIG_DRM_SIS is not set # CONFIG_DRM_VIA is not set # CONFIG_DRM_SAVAGE is not set +# CONFIG_STUB_POULSBO is not set # CONFIG_VGASTATE is not set CONFIG_VIDEO_OUTPUT_CONTROL=y CONFIG_FB=y @@ -1419,9 +1430,7 @@ CONFIG_SND_HDA_CODEC_REALTEK=y # CONFIG_SND_HDA_CODEC_ANALOG is not set # CONFIG_SND_HDA_CODEC_SIGMATEL is not set # CONFIG_SND_HDA_CODEC_VIA is not set -CONFIG_SND_HDA_CODEC_ATIHDMI=y -# CONFIG_SND_HDA_CODEC_NVHDMI is not set -# CONFIG_SND_HDA_CODEC_INTELHDMI is not set +CONFIG_SND_HDA_CODEC_HDMI=y # CONFIG_SND_HDA_CODEC_CIRRUS is not set # CONFIG_SND_HDA_CODEC_CONEXANT is not set # CONFIG_SND_HDA_CODEC_CA0110 is not set @@ -1487,6 +1496,8 @@ CONFIG_HID_AUREAL=y # CONFIG_HID_EGALAX is not set # CONFIG_HID_EZKEY is not set # CONFIG_HID_KYE is not set +# CONFIG_HID_UCLOGIC is not set +# CONFIG_HID_WALTOP is not set # CONFIG_HID_GYRATION is not set CONFIG_HID_TWINHAN=y # CONFIG_HID_KENSINGTON is not set @@ -1494,6 +1505,7 @@ CONFIG_HID_LOGITECH=y CONFIG_LOGITECH_FF=y CONFIG_LOGIRUMBLEPAD2_FF=y CONFIG_LOGIG940_FF=y +CONFIG_LOGIWII_FF=y CONFIG_HID_MICROSOFT=y # CONFIG_HID_MOSART is not set # CONFIG_HID_MONTEREY is not set @@ -1505,6 +1517,7 @@ CONFIG_HID_MICROSOFT=y # CONFIG_HID_QUANTA is not set # CONFIG_HID_ROCCAT is not set # CONFIG_HID_ROCCAT_KONE is not set +# CONFIG_HID_ROCCAT_PYRA is not set # CONFIG_HID_SAMSUNG is not set CONFIG_HID_SONY=y # CONFIG_HID_STANTUM is not set @@ -1582,6 +1595,7 @@ CONFIG_USB_STORAGE=y # CONFIG_USB_STORAGE_ONETOUCH is not set # CONFIG_USB_STORAGE_KARMA is not set # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set +# CONFIG_USB_UAS is not set # CONFIG_USB_LIBUSUAL is not set # @@ -1631,6 +1645,7 @@ CONFIG_USB_SERIAL_FTDI_SIO=m # CONFIG_USB_SERIAL_SPCP8X5 is not set # CONFIG_USB_SERIAL_HP4X is not set # CONFIG_USB_SERIAL_SAFE is not set +# CONFIG_USB_SERIAL_SAMBA is not set # CONFIG_USB_SERIAL_SIEMENS_MPI is not set # CONFIG_USB_SERIAL_SIERRAWIRELESS is not set # CONFIG_USB_SERIAL_SYMBOL is not set @@ -1667,6 +1682,7 @@ CONFIG_USB_SERIAL_FTDI_SIO=m # CONFIG_USB_IOWARRIOR is not set # CONFIG_USB_TEST is not set # CONFIG_USB_ISIGHTFW is not set +# CONFIG_USB_YUREX is not set # CONFIG_USB_GADGET is not set # @@ -1677,7 +1693,7 @@ CONFIG_USB_SERIAL_FTDI_SIO=m # CONFIG_MMC is not set # CONFIG_MEMSTICK is not set CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=m +CONFIG_LEDS_CLASS=y # # LED drivers @@ -1685,6 +1701,8 @@ CONFIG_LEDS_CLASS=m # CONFIG_LEDS_ALIX2 is not set # CONFIG_LEDS_PCA9532 is not set # CONFIG_LEDS_LP3944 is not set +# CONFIG_LEDS_LP5521 is not set +# CONFIG_LEDS_LP5523 is not set # CONFIG_LEDS_CLEVO_MAIL is not set # CONFIG_LEDS_PCA955X is not set # CONFIG_LEDS_BD2802 is not set @@ -1770,19 +1788,18 @@ CONFIG_RTC_DRV_CMOS=y # CONFIG_UIO is not set CONFIG_STAGING=y # CONFIG_STAGING_EXCLUDE_BUILD is not set -# CONFIG_USB_IP_COMMON is not set # CONFIG_W35UND is not set # CONFIG_PRISM2_USB is not set # CONFIG_ECHO is not set -# CONFIG_OTUS is not set +# CONFIG_BRCM80211 is not set # CONFIG_RT2860 is not set # CONFIG_RT2870 is not set # CONFIG_COMEDI is not set # CONFIG_ASUS_OLED is not set # CONFIG_R8187SE is not set -# CONFIG_RTL8192SU is not set # CONFIG_RTL8192U is not set # CONFIG_RTL8192E is not set +# CONFIG_R8712U is not set # CONFIG_TRANZPORT is not set # CONFIG_POHMELFS is not set # CONFIG_IDE_PHISON is not set @@ -1813,10 +1830,18 @@ CONFIG_DRM_I2C_SIL164=m # # Texas Instruments shared transport line discipline # -# CONFIG_TI_ST is not set # CONFIG_FB_XGI is not set # CONFIG_LIRC_STAGING is not set # CONFIG_ACPI_QUICKSTART is not set +CONFIG_MACH_NO_WESTBRIDGE=y +# CONFIG_USB_ENESTORAGE is not set +# CONFIG_BCM_WIMAX is not set +# CONFIG_FT1000 is not set + +# +# Speakup console speech +# +# CONFIG_SPEAKUP is not set # CONFIG_X86_PLATFORM_DEVICES is not set # @@ -1852,8 +1877,9 @@ CONFIG_FILE_LOCKING=y CONFIG_FSNOTIFY=y CONFIG_DNOTIFY=y CONFIG_INOTIFY_USER=y +# CONFIG_FANOTIFY is not set # CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set +# CONFIG_QUOTACTL is not set CONFIG_AUTOFS4_FS=y CONFIG_FUSE_FS=y # CONFIG_CUSE is not set @@ -1869,8 +1895,6 @@ CONFIG_FUSE_FS=y CONFIG_ISO9660_FS=y CONFIG_JOLIET=y CONFIG_ZISOFS=y -CONFIG_UDF_FS=y -CONFIG_UDF_NLS=y # # DOS/FAT/NT Filesystems @@ -1896,7 +1920,6 @@ CONFIG_TMPFS=y # CONFIG_HUGETLB_PAGE is not set # CONFIG_CONFIGFS_FS is not set CONFIG_MISC_FILESYSTEMS=y -# CONFIG_ADFS_FS is not set # CONFIG_AFFS_FS is not set # CONFIG_ECRYPT_FS is not set # CONFIG_HFS_FS is not set @@ -1914,11 +1937,9 @@ CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 # CONFIG_VXFS_FS is not set # CONFIG_MINIX_FS is not set # CONFIG_OMFS_FS is not set -# CONFIG_HPFS_FS is not set # CONFIG_QNX4FS_FS is not set # CONFIG_ROMFS_FS is not set # CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set CONFIG_NETWORK_FILESYSTEMS=y CONFIG_NFS_FS=y CONFIG_NFS_V3=y @@ -1927,6 +1948,7 @@ CONFIG_NFS_V4=y # CONFIG_NFS_V4_1 is not set # CONFIG_NFS_USE_LEGACY_DNS is not set CONFIG_NFS_USE_KERNEL_DNS=y +# CONFIG_NFS_USE_NEW_IDMAPPER is not set # CONFIG_NFSD is not set CONFIG_LOCKD=y CONFIG_LOCKD_V4=y @@ -1934,8 +1956,6 @@ CONFIG_NFS_COMMON=y CONFIG_SUNRPC=y CONFIG_SUNRPC_GSS=y CONFIG_RPCSEC_GSS_KRB5=y -# CONFIG_RPCSEC_GSS_SPKM3 is not set -# CONFIG_SMB_FS is not set # CONFIG_CEPH_FS is not set CONFIG_CIFS=y CONFIG_CIFS_STATS=y @@ -2029,10 +2049,11 @@ CONFIG_FRAME_WARN=1024 # CONFIG_HEADERS_CHECK is not set # CONFIG_DEBUG_KERNEL is not set # CONFIG_HARDLOCKUP_DETECTOR is not set +# CONFIG_BKL is not set +# CONFIG_SPARSE_RCU_POINTER is not set # CONFIG_DEBUG_MEMORY_INIT is not set CONFIG_ARCH_WANT_FRAME_POINTERS=y # CONFIG_FRAME_POINTER is not set -# CONFIG_RCU_CPU_STALL_DETECTOR is not set CONFIG_SYSCTL_SYSCALL_CHECK=y CONFIG_USER_STACKTRACE_SUPPORT=y CONFIG_HAVE_FUNCTION_TRACER=y @@ -2042,6 +2063,7 @@ CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y CONFIG_HAVE_DYNAMIC_FTRACE=y CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y CONFIG_HAVE_SYSCALL_TRACEPOINTS=y +CONFIG_HAVE_C_RECORDMCOUNT=y CONFIG_TRACING_SUPPORT=y # CONFIG_FTRACE is not set # CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set @@ -2054,7 +2076,6 @@ CONFIG_HAVE_ARCH_KMEMCHECK=y CONFIG_STRICT_DEVMEM=y # CONFIG_X86_VERBOSE_BOOTUP is not set # CONFIG_EARLY_PRINTK is not set -# CONFIG_4KSTACKS is not set CONFIG_DOUBLEFAULT=y # CONFIG_IOMMU_STRESS is not set CONFIG_HAVE_MMIOTRACE_SUPPORT=y @@ -2074,6 +2095,7 @@ CONFIG_OPTIMIZE_INLINING=y # CONFIG_KEYS=y # CONFIG_KEYS_DEBUG_PROC_KEYS is not set +# CONFIG_SECURITY_DMESG_RESTRICT is not set # CONFIG_SECURITY is not set # CONFIG_SECURITYFS is not set CONFIG_DEFAULT_SECURITY_DAC=y diff --git a/projects/ATV/linux/linux.i386.conf.2.6.36 b/projects/ATV/linux/linux.i386.conf.2.6.36 new file mode 100644 index 0000000000..09d9088dc3 --- /dev/null +++ b/projects/ATV/linux/linux.i386.conf.2.6.36 @@ -0,0 +1,2206 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.36 +# +# CONFIG_64BIT is not set +CONFIG_X86_32=y +# CONFIG_X86_64 is not set +CONFIG_X86=y +CONFIG_INSTRUCTION_DECODER=y +CONFIG_OUTPUT_FORMAT="elf32-i386" +CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig" +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_CLOCKSOURCE_WATCHDOG=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_MMU=y +CONFIG_ZONE_DMA=y +# CONFIG_NEED_DMA_MAP_STATE is not set +CONFIG_NEED_SG_DMA_LENGTH=y +CONFIG_GENERIC_ISA_DMA=y +CONFIG_GENERIC_IOMAP=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +# CONFIG_RWSEM_GENERIC_SPINLOCK is not set +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +# CONFIG_GENERIC_TIME_VSYSCALL is not set +CONFIG_ARCH_HAS_CPU_RELAX=y +CONFIG_ARCH_HAS_DEFAULT_IDLE=y +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y +CONFIG_HAVE_SETUP_PER_CPU_AREA=y +CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y +CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y +# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y +# CONFIG_ZONE_DMA32 is not set +CONFIG_ARCH_POPULATES_NODE_MAP=y +# CONFIG_AUDIT_ARCH is not set +CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y +CONFIG_HAVE_EARLY_RES=y +CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_X86_32_LAZY_GS=y +CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-ecx -fcall-saved-edx" +CONFIG_KTIME_SCALAR=y +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_CROSS_COMPILE="" +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_HAVE_KERNEL_GZIP=y +CONFIG_HAVE_KERNEL_BZIP2=y +CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y +# CONFIG_KERNEL_GZIP is not set +# CONFIG_KERNEL_BZIP2 is not set +CONFIG_KERNEL_LZMA=y +# CONFIG_KERNEL_LZO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y +CONFIG_BSD_PROCESS_ACCT=y +# CONFIG_BSD_PROCESS_ACCT_V3 is not set +# CONFIG_TASKSTATS is not set +# CONFIG_AUDIT is not set + +# +# RCU Subsystem +# +CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=32 +# CONFIG_RCU_FANOUT_EXACT is not set +# CONFIG_TREE_RCU_TRACE is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=16 +CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y +CONFIG_CGROUPS=y +# CONFIG_CGROUP_DEBUG is not set +CONFIG_CGROUP_NS=y +CONFIG_CGROUP_FREEZER=y +# CONFIG_CGROUP_DEVICE is not set +CONFIG_CPUSETS=y +CONFIG_PROC_PID_CPUSET=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_RESOURCE_COUNTERS=y +# CONFIG_CGROUP_MEM_RES_CTLR is not set +# CONFIG_CGROUP_SCHED is not set +# CONFIG_BLK_CGROUP is not set +# CONFIG_SYSFS_DEPRECATED_V2 is not set +# CONFIG_RELAY is not set +# CONFIG_NAMESPACES is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE=" " +CONFIG_INITRAMFS_ROOT_UID=0 +CONFIG_INITRAMFS_ROOT_GID=0 +# CONFIG_RD_GZIP is not set +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set +CONFIG_INITRAMFS_COMPRESSION_NONE=y +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +# CONFIG_KALLSYMS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +# CONFIG_BUG is not set +CONFIG_ELF_CORE=y +# CONFIG_PCSPKR_PLATFORM is not set +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_AIO=y +CONFIG_HAVE_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +CONFIG_PERF_EVENTS=y +# CONFIG_PERF_COUNTERS is not set +# CONFIG_VM_EVENT_COUNTERS is not set +CONFIG_PCI_QUIRKS=y +# CONFIG_COMPAT_BRK is not set +# CONFIG_SLAB is not set +# CONFIG_SLUB is not set +CONFIG_SLOB=y +# CONFIG_PROFILING is not set +CONFIG_HAVE_OPROFILE=y +# CONFIG_KPROBES is not set +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +CONFIG_HAVE_IOREMAP_PROT=y +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_HAVE_OPTPROBES=y +CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y +CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y +CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y +CONFIG_HAVE_USER_RETURN_NOTIFIER=y +CONFIG_HAVE_PERF_EVENTS_NMI=y + +# +# GCOV-based kernel profiling +# +CONFIG_HAVE_GENERIC_DMA_COHERENT=y +CONFIG_RT_MUTEXES=y +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +# CONFIG_MODULE_FORCE_LOAD is not set +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_BLOCK=y +CONFIG_LBDAF=y +CONFIG_BLK_DEV_BSG=y +# CONFIG_BLK_DEV_INTEGRITY is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_DEADLINE is not set +CONFIG_IOSCHED_CFQ=y +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +# CONFIG_INLINE_SPIN_UNLOCK is not set +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +# CONFIG_INLINE_READ_UNLOCK is not set +# CONFIG_INLINE_READ_UNLOCK_BH is not set +# CONFIG_INLINE_READ_UNLOCK_IRQ is not set +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +# CONFIG_INLINE_WRITE_UNLOCK is not set +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set +CONFIG_FREEZER=y + +# +# Processor type and features +# +CONFIG_TICK_ONESHOT=y +# CONFIG_NO_HZ is not set +CONFIG_HIGH_RES_TIMERS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +# CONFIG_SMP is not set +# CONFIG_SPARSE_IRQ is not set +CONFIG_X86_MPPARSE=y +# CONFIG_X86_EXTENDED_PLATFORM is not set +CONFIG_SCHED_OMIT_FRAME_POINTER=y +# CONFIG_PARAVIRT_GUEST is not set +# CONFIG_NO_BOOTMEM is not set +# CONFIG_MEMTEST is not set +# CONFIG_M386 is not set +# CONFIG_M486 is not set +# CONFIG_M586 is not set +# CONFIG_M586TSC is not set +# CONFIG_M586MMX is not set +# CONFIG_M686 is not set +# CONFIG_MPENTIUMII is not set +# CONFIG_MPENTIUMIII is not set +CONFIG_MPENTIUMM=y +# CONFIG_MPENTIUM4 is not set +# CONFIG_MK6 is not set +# CONFIG_MK7 is not set +# CONFIG_MK8 is not set +# CONFIG_MCRUSOE is not set +# CONFIG_MEFFICEON is not set +# CONFIG_MWINCHIPC6 is not set +# CONFIG_MWINCHIP3D is not set +# CONFIG_MGEODEGX1 is not set +# CONFIG_MGEODE_LX is not set +# CONFIG_MCYRIXIII is not set +# CONFIG_MVIAC3_2 is not set +# CONFIG_MVIAC7 is not set +# CONFIG_MCORE2 is not set +# CONFIG_MATOM is not set +# CONFIG_X86_GENERIC is not set +CONFIG_X86_CPU=y +CONFIG_X86_INTERNODE_CACHE_SHIFT=6 +CONFIG_X86_CMPXCHG=y +CONFIG_X86_L1_CACHE_SHIFT=6 +CONFIG_X86_XADD=y +CONFIG_X86_WP_WORKS_OK=y +CONFIG_X86_INVLPG=y +CONFIG_X86_BSWAP=y +CONFIG_X86_POPAD_OK=y +CONFIG_X86_INTEL_USERCOPY=y +CONFIG_X86_USE_PPRO_CHECKSUM=y +CONFIG_X86_TSC=y +CONFIG_X86_CMPXCHG64=y +CONFIG_X86_CMOV=y +CONFIG_X86_MINIMUM_CPU_FAMILY=5 +CONFIG_X86_DEBUGCTLMSR=y +CONFIG_PROCESSOR_SELECT=y +CONFIG_CPU_SUP_INTEL=y +# CONFIG_CPU_SUP_CYRIX_32 is not set +# CONFIG_CPU_SUP_AMD is not set +# CONFIG_CPU_SUP_CENTAUR is not set +# CONFIG_CPU_SUP_TRANSMETA_32 is not set +# CONFIG_CPU_SUP_UMC_32 is not set +CONFIG_HPET_TIMER=y +CONFIG_HPET_EMULATE_RTC=y +CONFIG_DMI=y +# CONFIG_IOMMU_HELPER is not set +# CONFIG_IOMMU_API is not set +CONFIG_NR_CPUS=1 +# CONFIG_PREEMPT_NONE is not set +# CONFIG_PREEMPT_VOLUNTARY is not set +CONFIG_PREEMPT=y +CONFIG_X86_UP_APIC=y +CONFIG_X86_UP_IOAPIC=y +CONFIG_X86_LOCAL_APIC=y +CONFIG_X86_IO_APIC=y +CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y +CONFIG_X86_MCE=y +CONFIG_X86_MCE_INTEL=y +# CONFIG_X86_MCE_AMD is not set +# CONFIG_X86_ANCIENT_MCE is not set +CONFIG_X86_MCE_THRESHOLD=y +# CONFIG_X86_MCE_INJECT is not set +CONFIG_X86_THERMAL_VECTOR=y +# CONFIG_VM86 is not set +# CONFIG_TOSHIBA is not set +# CONFIG_I8K is not set +# CONFIG_X86_REBOOTFIXUPS is not set +# CONFIG_MICROCODE is not set +CONFIG_X86_MSR=y +CONFIG_X86_CPUID=y +CONFIG_NOHIGHMEM=y +# CONFIG_HIGHMEM4G is not set +# CONFIG_HIGHMEM64G is not set +# CONFIG_VMSPLIT_3G is not set +CONFIG_VMSPLIT_3G_OPT=y +# CONFIG_VMSPLIT_2G is not set +# CONFIG_VMSPLIT_2G_OPT is not set +# CONFIG_VMSPLIT_1G is not set +CONFIG_PAGE_OFFSET=0xB0000000 +# CONFIG_X86_PAE is not set +# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set +CONFIG_NEED_NODE_MEMMAP_SIZE=y +CONFIG_ARCH_FLATMEM_ENABLE=y +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ILLEGAL_POINTER_VALUE=0 +CONFIG_SELECT_MEMORY_MODEL=y +# CONFIG_FLATMEM_MANUAL is not set +CONFIG_SPARSEMEM_MANUAL=y +CONFIG_SPARSEMEM=y +CONFIG_HAVE_MEMORY_PRESENT=y +CONFIG_SPARSEMEM_STATIC=y +CONFIG_SPLIT_PTLOCK_CPUS=4 +# CONFIG_PHYS_ADDR_T_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +# CONFIG_X86_CHECK_BIOS_CORRUPTION is not set +# CONFIG_X86_RESERVE_LOW_64K is not set +# CONFIG_MATH_EMULATION is not set +CONFIG_MTRR=y +CONFIG_MTRR_SANITIZER=y +CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0 +CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1 +CONFIG_X86_PAT=y +CONFIG_ARCH_USES_PG_UNCACHED=y +CONFIG_EFI=y +CONFIG_SECCOMP=y +# CONFIG_CC_STACKPROTECTOR is not set +# CONFIG_HZ_100 is not set +# CONFIG_HZ_250 is not set +CONFIG_HZ_300=y +# CONFIG_HZ_1000 is not set +CONFIG_HZ=300 +CONFIG_SCHED_HRTICK=y +# CONFIG_KEXEC is not set +CONFIG_PHYSICAL_START=0x1000000 +# CONFIG_RELOCATABLE is not set +CONFIG_PHYSICAL_ALIGN=0x1000000 +# CONFIG_COMPAT_VDSO is not set +CONFIG_CMDLINE_BOOL=y +CONFIG_CMDLINE="fastboot root=/dev/ram0 rdinit=/init" +# CONFIG_CMDLINE_OVERRIDE is not set + +# +# Power management and ACPI options +# +CONFIG_PM=y +# CONFIG_PM_DEBUG is not set +# CONFIG_SUSPEND is not set +# CONFIG_HIBERNATION is not set +# CONFIG_PM_RUNTIME is not set +CONFIG_ACPI=y +# CONFIG_ACPI_PROCFS is not set +# CONFIG_ACPI_PROCFS_POWER is not set +CONFIG_ACPI_SYSFS_POWER=y +# CONFIG_ACPI_EC_DEBUGFS is not set +# CONFIG_ACPI_PROC_EVENT is not set +# CONFIG_ACPI_AC is not set +# CONFIG_ACPI_BATTERY is not set +# CONFIG_ACPI_BUTTON is not set +CONFIG_ACPI_VIDEO=y +CONFIG_ACPI_FAN=y +# CONFIG_ACPI_DOCK is not set +CONFIG_ACPI_PROCESSOR=y +# CONFIG_ACPI_PROCESSOR_AGGREGATOR is not set +CONFIG_ACPI_THERMAL=y +# CONFIG_ACPI_CUSTOM_DSDT is not set +CONFIG_ACPI_BLACKLIST_YEAR=0 +# CONFIG_ACPI_DEBUG is not set +# CONFIG_ACPI_PCI_SLOT is not set +CONFIG_X86_PM_TIMER=y +# CONFIG_ACPI_CONTAINER is not set +# CONFIG_ACPI_SBS is not set +# CONFIG_ACPI_HED is not set +# CONFIG_ACPI_APEI is not set +# CONFIG_SFI is not set + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_TABLE=y +# CONFIG_CPU_FREQ_DEBUG is not set +# CONFIG_CPU_FREQ_STAT is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set + +# +# CPUFreq processor drivers +# +# CONFIG_X86_PCC_CPUFREQ is not set +CONFIG_X86_ACPI_CPUFREQ=y +# CONFIG_X86_POWERNOW_K6 is not set +# CONFIG_X86_POWERNOW_K7 is not set +# CONFIG_X86_POWERNOW_K8 is not set +# CONFIG_X86_GX_SUSPMOD is not set +# CONFIG_X86_SPEEDSTEP_CENTRINO is not set +# CONFIG_X86_SPEEDSTEP_ICH is not set +# CONFIG_X86_SPEEDSTEP_SMI is not set +# CONFIG_X86_P4_CLOCKMOD is not set +# CONFIG_X86_CPUFREQ_NFORCE2 is not set +# CONFIG_X86_LONGRUN is not set +# CONFIG_X86_LONGHAUL is not set +# CONFIG_X86_E_POWERSAVER is not set + +# +# shared options +# +# CONFIG_X86_SPEEDSTEP_LIB is not set +CONFIG_CPU_IDLE=y +CONFIG_CPU_IDLE_GOV_LADDER=y +# CONFIG_INTEL_IDLE is not set + +# +# Bus options (PCI etc.) +# +CONFIG_PCI=y +# CONFIG_PCI_GOBIOS is not set +# CONFIG_PCI_GOMMCONFIG is not set +# CONFIG_PCI_GODIRECT is not set +CONFIG_PCI_GOANY=y +CONFIG_PCI_BIOS=y +CONFIG_PCI_DIRECT=y +CONFIG_PCI_MMCONFIG=y +CONFIG_PCI_DOMAINS=y +# CONFIG_PCI_CNB20LE_QUIRK is not set +# CONFIG_DMAR is not set +CONFIG_PCIEPORTBUS=y +# CONFIG_PCIEAER is not set +# CONFIG_PCIEASPM is not set +CONFIG_ARCH_SUPPORTS_MSI=y +CONFIG_PCI_MSI=y +# CONFIG_PCI_STUB is not set +CONFIG_HT_IRQ=y +# CONFIG_PCI_IOV is not set +CONFIG_PCI_IOAPIC=y +CONFIG_ISA_DMA_API=y +# CONFIG_ISA is not set +# CONFIG_MCA is not set +# CONFIG_SCx200 is not set +# CONFIG_OLPC is not set +# CONFIG_OLPC_OPENFIRMWARE is not set +# CONFIG_PCCARD is not set +# CONFIG_HOTPLUG_PCI is not set + +# +# Executable file formats / Emulations +# +CONFIG_BINFMT_ELF=y +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set +CONFIG_HAVE_AOUT=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set +CONFIG_HAVE_ATOMIC_IOMAP=y +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_XFRM_STATISTICS is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=y +CONFIG_INET_XFRM_MODE_TUNNEL=y +CONFIG_INET_XFRM_MODE_BEET=y +CONFIG_INET_LRO=y +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +CONFIG_IPV6=y +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +# CONFIG_INET6_AH is not set +# CONFIG_INET6_ESP is not set +# CONFIG_INET6_IPCOMP is not set +# CONFIG_IPV6_MIP6 is not set +# CONFIG_INET6_XFRM_TUNNEL is not set +# CONFIG_INET6_TUNNEL is not set +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +# CONFIG_IPV6_SIT_6RD is not set +CONFIG_IPV6_NDISC_NODETYPE=y +# CONFIG_IPV6_TUNNEL is not set +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_IPV6_MROUTE is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +# CONFIG_NETFILTER is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_L2TP is not set +# CONFIG_BRIDGE is not set +# CONFIG_NET_DSA is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set +# CONFIG_NET_SCHED is not set +# CONFIG_DCB is not set +CONFIG_DNS_RESOLVER=y + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +# CONFIG_AF_RXRPC is not set +CONFIG_WIRELESS=y +CONFIG_WEXT_CORE=y +CONFIG_WEXT_PROC=y +CONFIG_CFG80211=y +# CONFIG_NL80211_TESTMODE is not set +# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set +# CONFIG_CFG80211_REG_DEBUG is not set +# CONFIG_CFG80211_DEFAULT_PS is not set +# CONFIG_CFG80211_INTERNAL_REGDB is not set +CONFIG_CFG80211_WEXT=y +CONFIG_WIRELESS_EXT_SYSFS=y +CONFIG_LIB80211=y +# CONFIG_LIB80211_DEBUG is not set +CONFIG_MAC80211=y +CONFIG_MAC80211_HAS_RC=y +# CONFIG_MAC80211_RC_PID is not set +CONFIG_MAC80211_RC_MINSTREL=y +CONFIG_MAC80211_RC_MINSTREL_HT=y +CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y +CONFIG_MAC80211_RC_DEFAULT="minstrel_ht" +# CONFIG_MAC80211_MESH is not set +CONFIG_MAC80211_LEDS=y +# CONFIG_MAC80211_DEBUG_MENU is not set +# CONFIG_WIMAX is not set +CONFIG_RFKILL=y +CONFIG_RFKILL_LEDS=y +CONFIG_RFKILL_INPUT=y +# CONFIG_NET_9P is not set +# CONFIG_CAIF is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="" +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_STANDALONE=y +# CONFIG_PREVENT_FIRMWARE_BUILD is not set +CONFIG_FW_LOADER=y +CONFIG_FIRMWARE_IN_KERNEL=y +CONFIG_EXTRA_FIRMWARE="" +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +# CONFIG_MTD is not set +# CONFIG_PARPORT is not set +CONFIG_PNP=y +# CONFIG_PNP_DEBUG_MESSAGES is not set + +# +# Protocols +# +CONFIG_PNPACPI=y +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set + +# +# DRBD disabled because PROC_FS, INET or CONNECTOR not selected +# +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_SX8 is not set +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=4 +CONFIG_BLK_DEV_RAM_SIZE=4096 +# CONFIG_BLK_DEV_XIP is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +# CONFIG_BLK_DEV_HD is not set +# CONFIG_MISC_DEVICES is not set +CONFIG_HAVE_IDE=y +# CONFIG_IDE is not set + +# +# SCSI device support +# +CONFIG_SCSI_MOD=y +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_SCSI_PROC_FS is not set + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +CONFIG_BLK_DEV_SR=y +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_CHR_DEV_SG=y +# CONFIG_CHR_DEV_SCH is not set +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set +# CONFIG_SCSI_LOWLEVEL is not set +# CONFIG_SCSI_DH is not set +# CONFIG_SCSI_OSD_INITIATOR is not set +CONFIG_ATA=y +# CONFIG_ATA_NONSTANDARD is not set +# CONFIG_ATA_VERBOSE_ERROR is not set +CONFIG_ATA_ACPI=y +# CONFIG_SATA_PMP is not set + +# +# Controllers with non-SFF native interface +# +# CONFIG_SATA_AHCI is not set +# CONFIG_SATA_AHCI_PLATFORM is not set +# CONFIG_SATA_INIC162X is not set +# CONFIG_SATA_SIL24 is not set +CONFIG_ATA_SFF=y + +# +# SFF controllers with custom DMA interface +# +# CONFIG_PDC_ADMA is not set +# CONFIG_SATA_QSTOR is not set +# CONFIG_SATA_SX4 is not set +CONFIG_ATA_BMDMA=y + +# +# SATA SFF controllers with BMDMA +# +CONFIG_ATA_PIIX=y +# CONFIG_SATA_MV is not set +# CONFIG_SATA_NV is not set +# CONFIG_SATA_PROMISE is not set +# CONFIG_SATA_SIL is not set +# CONFIG_SATA_SIS is not set +# CONFIG_SATA_SVW is not set +# CONFIG_SATA_ULI is not set +# CONFIG_SATA_VIA is not set +# CONFIG_SATA_VITESSE is not set + +# +# PATA SFF controllers with BMDMA +# +# CONFIG_PATA_ALI is not set +# CONFIG_PATA_AMD is not set +# CONFIG_PATA_ARTOP is not set +# CONFIG_PATA_ATIIXP is not set +# CONFIG_PATA_ATP867X is not set +# CONFIG_PATA_CMD64X is not set +# CONFIG_PATA_CS5520 is not set +# CONFIG_PATA_CS5530 is not set +# CONFIG_PATA_CS5535 is not set +# CONFIG_PATA_CS5536 is not set +# CONFIG_PATA_CYPRESS is not set +# CONFIG_PATA_EFAR is not set +# CONFIG_PATA_HPT366 is not set +# CONFIG_PATA_HPT37X is not set +# CONFIG_PATA_HPT3X2N is not set +# CONFIG_PATA_HPT3X3 is not set +# CONFIG_PATA_IT8213 is not set +# CONFIG_PATA_IT821X is not set +# CONFIG_PATA_JMICRON is not set +# CONFIG_PATA_MARVELL is not set +# CONFIG_PATA_NETCELL is not set +# CONFIG_PATA_NINJA32 is not set +# CONFIG_PATA_NS87415 is not set +# CONFIG_PATA_OLDPIIX is not set +# CONFIG_PATA_OPTIDMA is not set +# CONFIG_PATA_PDC2027X is not set +# CONFIG_PATA_PDC_OLD is not set +# CONFIG_PATA_RADISYS is not set +# CONFIG_PATA_RDC is not set +# CONFIG_PATA_SC1200 is not set +# CONFIG_PATA_SCH is not set +# CONFIG_PATA_SERVERWORKS is not set +# CONFIG_PATA_SIL680 is not set +# CONFIG_PATA_SIS is not set +# CONFIG_PATA_TOSHIBA is not set +# CONFIG_PATA_TRIFLEX is not set +# CONFIG_PATA_VIA is not set +# CONFIG_PATA_WINBOND is not set + +# +# PIO-only SFF controllers +# +# CONFIG_PATA_CMD640_PCI is not set +# CONFIG_PATA_MPIIX is not set +# CONFIG_PATA_NS87410 is not set +# CONFIG_PATA_OPTI is not set +# CONFIG_PATA_PLATFORM is not set +# CONFIG_PATA_RZ1000 is not set + +# +# Generic fallback / legacy drivers +# +CONFIG_PATA_ACPI=y +# CONFIG_ATA_GENERIC is not set +# CONFIG_PATA_LEGACY is not set +# CONFIG_MD is not set +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# + +# +# You can enable one or both FireWire driver stacks. +# + +# +# The newer stack is recommended. +# +CONFIG_FIREWIRE=m +CONFIG_FIREWIRE_OHCI=m +CONFIG_FIREWIRE_OHCI_DEBUG=y +CONFIG_FIREWIRE_SBP2=m +# CONFIG_FIREWIRE_NET is not set +# CONFIG_IEEE1394 is not set +# CONFIG_FIREWIRE_NOSY is not set +# CONFIG_I2O is not set +# CONFIG_MACINTOSH_DRIVERS is not set +CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_VETH is not set +# CONFIG_NET_SB1000 is not set +# CONFIG_ARCNET is not set +# CONFIG_PHYLIB is not set +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_CASSINI is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_ETHOC is not set +# CONFIG_DNET is not set +# CONFIG_NET_TULIP is not set +# CONFIG_HP100 is not set +# CONFIG_IBM_NEW_EMAC_ZMII is not set +# CONFIG_IBM_NEW_EMAC_RGMII is not set +# CONFIG_IBM_NEW_EMAC_TAH is not set +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set +# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set +# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set +# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set +CONFIG_NET_PCI=y +# CONFIG_PCNET32 is not set +# CONFIG_AMD8111_ETH is not set +# CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_KSZ884X_PCI is not set +# CONFIG_B44 is not set +# CONFIG_FORCEDETH is not set +# CONFIG_E100 is not set +# CONFIG_FEALNX is not set +# CONFIG_NATSEMI is not set +# CONFIG_NE2K_PCI is not set +# CONFIG_8139CP is not set +CONFIG_8139TOO=y +CONFIG_8139TOO_PIO=y +# CONFIG_8139TOO_TUNE_TWISTER is not set +# CONFIG_8139TOO_8129 is not set +# CONFIG_8139_OLD_RX_RESET is not set +# CONFIG_R6040 is not set +# CONFIG_SIS900 is not set +# CONFIG_EPIC100 is not set +# CONFIG_SMSC9420 is not set +# CONFIG_SUNDANCE is not set +# CONFIG_TLAN is not set +# CONFIG_KS8851_MLL is not set +# CONFIG_VIA_RHINE is not set +# CONFIG_SC92031 is not set +# CONFIG_ATL2 is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set +# CONFIG_TR is not set +CONFIG_WLAN=y +# CONFIG_LIBERTAS_THINFIRM is not set +# CONFIG_AIRO is not set +# CONFIG_ATMEL is not set +# CONFIG_AT76C50X_USB is not set +# CONFIG_PRISM54 is not set +# CONFIG_USB_ZD1201 is not set +# CONFIG_USB_NET_RNDIS_WLAN is not set +# CONFIG_RTL8180 is not set +# CONFIG_RTL8187 is not set +# CONFIG_ADM8211 is not set +# CONFIG_MAC80211_HWSIM is not set +# CONFIG_MWL8K is not set +# CONFIG_ATH_COMMON is not set +CONFIG_B43=m +CONFIG_B43_PCI_AUTOSELECT=y +CONFIG_B43_PCICORE_AUTOSELECT=y +CONFIG_B43_PIO=y +CONFIG_B43_PHY_LP=y +CONFIG_B43_LEDS=y +# CONFIG_B43_DEBUG is not set +# CONFIG_B43LEGACY is not set +# CONFIG_HOSTAP is not set +# CONFIG_IPW2100 is not set +# CONFIG_IPW2200 is not set +# CONFIG_IWLWIFI is not set +# CONFIG_LIBERTAS is not set +# CONFIG_HERMES is not set +# CONFIG_P54_COMMON is not set +# CONFIG_RT2X00 is not set +# CONFIG_WL12XX is not set +# CONFIG_ZD1211RW is not set + +# +# Enable WiMAX (Networking options) to see the WiMAX drivers +# + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET is not set +# CONFIG_USB_HSO is not set +# CONFIG_USB_IPHETH is not set +# CONFIG_WAN is not set + +# +# CAIF transport drivers +# +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_NET_FC is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set +# CONFIG_ISDN is not set +# CONFIG_PHONE is not set + +# +# Input device support +# +CONFIG_INPUT=y +CONFIG_INPUT_FF_MEMLESS=y +# CONFIG_INPUT_POLLDEV is not set +# CONFIG_INPUT_SPARSEKMAP is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ADP5588 is not set +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_QT2160 is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_TCA6416 is not set +# CONFIG_KEYBOARD_LM8323 is not set +# CONFIG_KEYBOARD_MAX7359 is not set +# CONFIG_KEYBOARD_MCS is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_OPENCORES is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=y +CONFIG_MOUSE_PS2_ALPS=y +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +CONFIG_MOUSE_PS2_LIFEBOOK=y +CONFIG_MOUSE_PS2_TRACKPOINT=y +# CONFIG_MOUSE_PS2_ELANTECH is not set +# CONFIG_MOUSE_PS2_SENTELIC is not set +# CONFIG_MOUSE_PS2_TOUCHKIT is not set +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_APPLETOUCH is not set +# CONFIG_MOUSE_BCM5974 is not set +# CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_MOUSE_SYNAPTICS_I2C is not set +CONFIG_INPUT_JOYSTICK=y +# CONFIG_JOYSTICK_ANALOG is not set +# CONFIG_JOYSTICK_A3D is not set +# CONFIG_JOYSTICK_ADI is not set +# CONFIG_JOYSTICK_COBRA is not set +# CONFIG_JOYSTICK_GF2K is not set +# CONFIG_JOYSTICK_GRIP is not set +# CONFIG_JOYSTICK_GRIP_MP is not set +# CONFIG_JOYSTICK_GUILLEMOT is not set +# CONFIG_JOYSTICK_INTERACT is not set +# CONFIG_JOYSTICK_SIDEWINDER is not set +# CONFIG_JOYSTICK_TMDC is not set +# CONFIG_JOYSTICK_IFORCE is not set +# CONFIG_JOYSTICK_WARRIOR is not set +# CONFIG_JOYSTICK_MAGELLAN is not set +# CONFIG_JOYSTICK_SPACEORB is not set +# CONFIG_JOYSTICK_SPACEBALL is not set +# CONFIG_JOYSTICK_STINGER is not set +# CONFIG_JOYSTICK_TWIDJOY is not set +# CONFIG_JOYSTICK_ZHENHUA is not set +# CONFIG_JOYSTICK_JOYDUMP is not set +CONFIG_JOYSTICK_XPAD=m +CONFIG_JOYSTICK_XPAD_FF=y +CONFIG_JOYSTICK_XPAD_LEDS=y +# CONFIG_INPUT_TABLET is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_AD714X is not set +# CONFIG_INPUT_APANEL is not set +# CONFIG_INPUT_WISTRON_BTNS is not set +# CONFIG_INPUT_ATLAS_BTNS is not set +# CONFIG_INPUT_ATI_REMOTE is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +CONFIG_INPUT_APPLEIR=y +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +# CONFIG_INPUT_CM109 is not set +CONFIG_INPUT_UINPUT=y +# CONFIG_INPUT_WINBOND_CIR is not set +# CONFIG_INPUT_PCF8574 is not set +# CONFIG_INPUT_ADXL34X is not set + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +# CONFIG_SERIO_SERPORT is not set +# CONFIG_SERIO_CT82C710 is not set +# CONFIG_SERIO_PCIPS2 is not set +CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_RAW is not set +# CONFIG_SERIO_ALTERA_PS2 is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_CONSOLE_TRANSLATIONS=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +CONFIG_VT_HW_CONSOLE_BINDING=y +# CONFIG_DEVKMEM is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_N_GSM is not set +# CONFIG_NOZOMI is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +# CONFIG_SERIAL_8250_CONSOLE is not set +CONFIG_FIX_EARLYCON_MEM=y +CONFIG_SERIAL_8250_PCI=y +# CONFIG_SERIAL_8250_PNP is not set +CONFIG_SERIAL_8250_NR_UARTS=4 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +# CONFIG_SERIAL_MFD_HSU is not set +CONFIG_SERIAL_CORE=y +# CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_TIMBERDALE is not set +# CONFIG_SERIAL_ALTERA_JTAGUART is not set +# CONFIG_SERIAL_ALTERA_UART is not set +CONFIG_UNIX98_PTYS=y +# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set +# CONFIG_LEGACY_PTYS is not set +# CONFIG_IPMI_HANDLER is not set +# CONFIG_HW_RANDOM is not set +CONFIG_NVRAM=y +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_SONYPI is not set +# CONFIG_MWAVE is not set +# CONFIG_PC8736x_GPIO is not set +# CONFIG_NSC_GPIO is not set +# CONFIG_CS5535_GPIO is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_HPET is not set +# CONFIG_HANGCHECK_TIMER is not set +# CONFIG_TCG_TPM is not set +# CONFIG_TELCLOCK is not set +CONFIG_DEVPORT=y +# CONFIG_RAMOOPS is not set +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +# CONFIG_I2C_COMPAT is not set +CONFIG_I2C_CHARDEV=m +# CONFIG_I2C_MUX is not set +CONFIG_I2C_HELPER_AUTO=y +CONFIG_I2C_ALGOBIT=y + +# +# I2C Hardware Bus support +# + +# +# PC SMBus host controller drivers +# +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +CONFIG_I2C_I801=y +# CONFIG_I2C_ISCH is not set +# CONFIG_I2C_PIIX4 is not set +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set + +# +# ACPI drivers +# +# CONFIG_I2C_SCMI is not set + +# +# I2C system bus drivers (mostly embedded / system-on-chip) +# +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PCA_PLATFORM is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set + +# +# External I2C/SMBus adapter drivers +# +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Other I2C/SMBus bus drivers +# +# CONFIG_I2C_STUB is not set +# CONFIG_SCx200_ACB is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_SPI is not set + +# +# PPS support +# +# CONFIG_PPS is not set +CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y +# CONFIG_GPIOLIB is not set +# CONFIG_W1 is not set +CONFIG_POWER_SUPPLY=y +# CONFIG_POWER_SUPPLY_DEBUG is not set +# CONFIG_PDA_POWER is not set +# CONFIG_TEST_POWER is not set +# CONFIG_BATTERY_DS2760 is not set +# CONFIG_BATTERY_DS2782 is not set +# CONFIG_BATTERY_BQ27x00 is not set +# CONFIG_BATTERY_MAX17040 is not set +# CONFIG_HWMON is not set +CONFIG_THERMAL=y +# CONFIG_WATCHDOG is not set +CONFIG_SSB_POSSIBLE=y + +# +# Sonics Silicon Backplane +# +CONFIG_SSB=m +CONFIG_SSB_SPROM=y +CONFIG_SSB_BLOCKIO=y +CONFIG_SSB_PCIHOST_POSSIBLE=y +CONFIG_SSB_PCIHOST=y +CONFIG_SSB_B43_PCI_BRIDGE=y +# CONFIG_SSB_SILENT is not set +# CONFIG_SSB_DEBUG is not set +CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y +CONFIG_SSB_DRIVER_PCICORE=y +# CONFIG_MFD_SUPPORT is not set +# CONFIG_REGULATOR is not set +CONFIG_MEDIA_SUPPORT=m + +# +# Multimedia core support +# +# CONFIG_VIDEO_DEV is not set +# CONFIG_DVB_CORE is not set +# CONFIG_VIDEO_MEDIA is not set + +# +# Multimedia drivers +# +CONFIG_IR_CORE=m +CONFIG_VIDEO_IR=m +CONFIG_LIRC=m +CONFIG_RC_MAP=m +CONFIG_IR_NEC_DECODER=m +CONFIG_IR_RC5_DECODER=m +CONFIG_IR_RC6_DECODER=m +CONFIG_IR_JVC_DECODER=m +CONFIG_IR_SONY_DECODER=m +# CONFIG_IR_LIRC_CODEC is not set +# CONFIG_IR_IMON is not set +# CONFIG_IR_NUVOTON is not set +CONFIG_IR_MCEUSB=m +# CONFIG_IR_ENE is not set +# CONFIG_IR_STREAMZAP is not set +# CONFIG_DAB is not set + +# +# Graphics support +# +CONFIG_AGP=y +# CONFIG_AGP_ALI is not set +# CONFIG_AGP_ATI is not set +# CONFIG_AGP_AMD is not set +CONFIG_AGP_INTEL=y +# CONFIG_AGP_NVIDIA is not set +# CONFIG_AGP_SIS is not set +# CONFIG_AGP_SWORKS is not set +# CONFIG_AGP_VIA is not set +# CONFIG_AGP_EFFICEON is not set +CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=1 +# CONFIG_VGA_SWITCHEROO is not set +CONFIG_DRM=y +CONFIG_DRM_KMS_HELPER=y +CONFIG_DRM_TTM=y +# CONFIG_DRM_TDFX is not set +# CONFIG_DRM_R128 is not set +# CONFIG_DRM_RADEON is not set +# CONFIG_DRM_I810 is not set +# CONFIG_DRM_MGA is not set +# CONFIG_DRM_SIS is not set +# CONFIG_DRM_VIA is not set +# CONFIG_DRM_SAVAGE is not set +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=y +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +# CONFIG_FB_BOOT_VESA_SUPPORT is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_FOREIGN_ENDIAN is not set +# CONFIG_FB_SYS_FOPS is not set +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +CONFIG_FB_BACKLIGHT=y +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_CIRRUS is not set +# CONFIG_FB_PM2 is not set +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_ARC is not set +# CONFIG_FB_ASILIANT is not set +# CONFIG_FB_IMSTT is not set +# CONFIG_FB_VGA16 is not set +# CONFIG_FB_VESA is not set +# CONFIG_FB_EFI is not set +# CONFIG_FB_N411 is not set +# CONFIG_FB_HGA is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_NVIDIA is not set +# CONFIG_FB_RIVA is not set +# CONFIG_FB_I810 is not set +# CONFIG_FB_LE80578 is not set +# CONFIG_FB_INTEL is not set +# CONFIG_FB_MATROX is not set +# CONFIG_FB_RADEON is not set +# CONFIG_FB_ATY128 is not set +# CONFIG_FB_ATY is not set +# CONFIG_FB_S3 is not set +# CONFIG_FB_SAVAGE is not set +# CONFIG_FB_SIS is not set +# CONFIG_FB_VIA is not set +# CONFIG_FB_NEOMAGIC is not set +# CONFIG_FB_KYRO is not set +# CONFIG_FB_3DFX is not set +# CONFIG_FB_VOODOO1 is not set +# CONFIG_FB_VT8623 is not set +# CONFIG_FB_TRIDENT is not set +# CONFIG_FB_ARK is not set +# CONFIG_FB_PM3 is not set +# CONFIG_FB_CARMINE is not set +# CONFIG_FB_GEODE is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FB_METRONOME is not set +# CONFIG_FB_MB862XX is not set +# CONFIG_FB_BROADSHEET is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_GENERIC is not set +# CONFIG_BACKLIGHT_PROGEAR is not set +# CONFIG_BACKLIGHT_MBP_NVIDIA is not set +# CONFIG_BACKLIGHT_SAHARA is not set +# CONFIG_BACKLIGHT_ADP8860 is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +CONFIG_VGA_CONSOLE=y +CONFIG_VGACON_SOFT_SCROLLBACK=y +CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=256 +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE is not set +# CONFIG_LOGO is not set +CONFIG_SOUND=y +# CONFIG_SOUND_OSS_CORE is not set +CONFIG_SND=y +CONFIG_SND_TIMER=y +CONFIG_SND_PCM=y +CONFIG_SND_HWDEP=y +# CONFIG_SND_SEQUENCER is not set +# CONFIG_SND_MIXER_OSS is not set +# CONFIG_SND_PCM_OSS is not set +# CONFIG_SND_HRTIMER is not set +CONFIG_SND_DYNAMIC_MINORS=y +# CONFIG_SND_SUPPORT_OLD_API is not set +# CONFIG_SND_VERBOSE_PROCFS is not set +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set +CONFIG_SND_VMASTER=y +CONFIG_SND_DMA_SGBUF=y +# CONFIG_SND_RAWMIDI_SEQ is not set +# CONFIG_SND_OPL3_LIB_SEQ is not set +# CONFIG_SND_OPL4_LIB_SEQ is not set +# CONFIG_SND_SBAWE_SEQ is not set +# CONFIG_SND_EMU10K1_SEQ is not set +# CONFIG_SND_DRIVERS is not set +CONFIG_SND_PCI=y +# CONFIG_SND_AD1889 is not set +# CONFIG_SND_ALS300 is not set +# CONFIG_SND_ALS4000 is not set +# CONFIG_SND_ALI5451 is not set +# CONFIG_SND_ASIHPI is not set +# CONFIG_SND_ATIIXP is not set +# CONFIG_SND_ATIIXP_MODEM is not set +# CONFIG_SND_AU8810 is not set +# CONFIG_SND_AU8820 is not set +# CONFIG_SND_AU8830 is not set +# CONFIG_SND_AW2 is not set +# CONFIG_SND_AZT3328 is not set +# CONFIG_SND_BT87X is not set +# CONFIG_SND_CA0106 is not set +# CONFIG_SND_CMIPCI is not set +# CONFIG_SND_OXYGEN is not set +# CONFIG_SND_CS4281 is not set +# CONFIG_SND_CS46XX is not set +# CONFIG_SND_CS5530 is not set +# CONFIG_SND_CS5535AUDIO is not set +# CONFIG_SND_CTXFI is not set +# CONFIG_SND_DARLA20 is not set +# CONFIG_SND_GINA20 is not set +# CONFIG_SND_LAYLA20 is not set +# CONFIG_SND_DARLA24 is not set +# CONFIG_SND_GINA24 is not set +# CONFIG_SND_LAYLA24 is not set +# CONFIG_SND_MONA is not set +# CONFIG_SND_MIA is not set +# CONFIG_SND_ECHO3G is not set +# CONFIG_SND_INDIGO is not set +# CONFIG_SND_INDIGOIO is not set +# CONFIG_SND_INDIGODJ is not set +# CONFIG_SND_INDIGOIOX is not set +# CONFIG_SND_INDIGODJX is not set +# CONFIG_SND_EMU10K1 is not set +# CONFIG_SND_EMU10K1X is not set +# CONFIG_SND_ENS1370 is not set +# CONFIG_SND_ENS1371 is not set +# CONFIG_SND_ES1938 is not set +# CONFIG_SND_ES1968 is not set +# CONFIG_SND_FM801 is not set +CONFIG_SND_HDA_INTEL=y +CONFIG_SND_HDA_HWDEP=y +# CONFIG_SND_HDA_RECONFIG is not set +# CONFIG_SND_HDA_INPUT_BEEP is not set +# CONFIG_SND_HDA_INPUT_JACK is not set +# CONFIG_SND_HDA_PATCH_LOADER is not set +CONFIG_SND_HDA_CODEC_REALTEK=y +# CONFIG_SND_HDA_CODEC_ANALOG is not set +# CONFIG_SND_HDA_CODEC_SIGMATEL is not set +# CONFIG_SND_HDA_CODEC_VIA is not set +CONFIG_SND_HDA_CODEC_ATIHDMI=y +# CONFIG_SND_HDA_CODEC_NVHDMI is not set +# CONFIG_SND_HDA_CODEC_INTELHDMI is not set +# CONFIG_SND_HDA_CODEC_CIRRUS is not set +# CONFIG_SND_HDA_CODEC_CONEXANT is not set +# CONFIG_SND_HDA_CODEC_CA0110 is not set +# CONFIG_SND_HDA_CODEC_CMEDIA is not set +# CONFIG_SND_HDA_CODEC_SI3054 is not set +CONFIG_SND_HDA_GENERIC=y +CONFIG_SND_HDA_POWER_SAVE=y +CONFIG_SND_HDA_POWER_SAVE_DEFAULT=5 +# CONFIG_SND_HDSP is not set +# CONFIG_SND_HDSPM is not set +# CONFIG_SND_HIFIER is not set +# CONFIG_SND_ICE1712 is not set +# CONFIG_SND_ICE1724 is not set +# CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_INTEL8X0M is not set +# CONFIG_SND_KORG1212 is not set +# CONFIG_SND_LX6464ES is not set +# CONFIG_SND_MAESTRO3 is not set +# CONFIG_SND_MIXART is not set +# CONFIG_SND_NM256 is not set +# CONFIG_SND_PCXHR is not set +# CONFIG_SND_RIPTIDE is not set +# CONFIG_SND_RME32 is not set +# CONFIG_SND_RME96 is not set +# CONFIG_SND_RME9652 is not set +# CONFIG_SND_SIS7019 is not set +# CONFIG_SND_SONICVIBES is not set +# CONFIG_SND_TRIDENT is not set +# CONFIG_SND_VIA82XX is not set +# CONFIG_SND_VIA82XX_MODEM is not set +# CONFIG_SND_VIRTUOSO is not set +# CONFIG_SND_VX222 is not set +# CONFIG_SND_YMFPCI is not set +# CONFIG_SND_USB is not set +# CONFIG_SND_SOC is not set +# CONFIG_SOUND_PRIME is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +CONFIG_HIDRAW=y + +# +# USB Input Devices +# +CONFIG_USB_HID=y +# CONFIG_HID_PID is not set +CONFIG_USB_HIDDEV=y + +# +# Special HID drivers +# +# CONFIG_HID_3M_PCT is not set +# CONFIG_HID_A4TECH is not set +# CONFIG_HID_ACRUX_FF is not set +CONFIG_HID_APPLE=y +CONFIG_HID_AUREAL=y +# CONFIG_HID_BELKIN is not set +# CONFIG_HID_CANDO is not set +# CONFIG_HID_CHERRY is not set +# CONFIG_HID_CHICONY is not set +# CONFIG_HID_PRODIKEYS is not set +# CONFIG_HID_CYPRESS is not set +# CONFIG_HID_DRAGONRISE is not set +# CONFIG_HID_EGALAX is not set +# CONFIG_HID_EZKEY is not set +# CONFIG_HID_KYE is not set +# CONFIG_HID_GYRATION is not set +CONFIG_HID_TWINHAN=y +# CONFIG_HID_KENSINGTON is not set +CONFIG_HID_LOGITECH=y +CONFIG_LOGITECH_FF=y +CONFIG_LOGIRUMBLEPAD2_FF=y +CONFIG_LOGIG940_FF=y +CONFIG_HID_MICROSOFT=y +# CONFIG_HID_MOSART is not set +# CONFIG_HID_MONTEREY is not set +# CONFIG_HID_NTRIG is not set +# CONFIG_HID_ORTEK is not set +# CONFIG_HID_PANTHERLORD is not set +# CONFIG_HID_PETALYNX is not set +# CONFIG_HID_PICOLCD is not set +# CONFIG_HID_QUANTA is not set +# CONFIG_HID_ROCCAT is not set +# CONFIG_HID_ROCCAT_KONE is not set +# CONFIG_HID_SAMSUNG is not set +CONFIG_HID_SONY=y +# CONFIG_HID_STANTUM is not set +CONFIG_HID_SUNPLUS=y +# CONFIG_HID_GREENASIA is not set +# CONFIG_HID_SMARTJOYPLUS is not set +CONFIG_HID_TOPSEED=y +# CONFIG_HID_THRUSTMASTER is not set +# CONFIG_HID_ZEROPLUS is not set +# CONFIG_HID_ZYDACRON is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +CONFIG_USB_ARCH_HAS_EHCI=y +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set +# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set + +# +# Miscellaneous USB options +# +# CONFIG_USB_DEVICEFS is not set +# CONFIG_USB_DEVICE_CLASS is not set +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_OTG_WHITELIST is not set +# CONFIG_USB_OTG_BLACKLIST_HUB is not set +# CONFIG_USB_MON is not set +# CONFIG_USB_WUSB is not set +# CONFIG_USB_WUSB_CBAF is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_C67X00_HCD is not set +# CONFIG_USB_XHCI_HCD is not set +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_ROOT_HUB_TT=y +# CONFIG_USB_EHCI_TT_NEWSCHED is not set +# CONFIG_USB_OXU210HP_HCD is not set +# CONFIG_USB_ISP116X_HCD is not set +# CONFIG_USB_ISP1760_HCD is not set +# CONFIG_USB_ISP1362_HCD is not set +# CONFIG_USB_OHCI_HCD is not set +CONFIG_USB_UHCI_HCD=y +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set +# CONFIG_USB_WHCI_HCD is not set +# CONFIG_USB_HWA_HCD is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set +# CONFIG_USB_WDM is not set +# CONFIG_USB_TMC is not set + +# +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may +# + +# +# also be needed; see USB_STORAGE Help for more info +# +CONFIG_USB_STORAGE=y +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_ONETOUCH is not set +# CONFIG_USB_STORAGE_KARMA is not set +# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set + +# +# USB port drivers +# +CONFIG_USB_SERIAL=m +# CONFIG_USB_EZUSB is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_AIRCABLE is not set +# CONFIG_USB_SERIAL_ARK3116 is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_CH341 is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_CP210X is not set +# CONFIG_USB_SERIAL_CYPRESS_M8 is not set +# CONFIG_USB_SERIAL_EMPEG is not set +CONFIG_USB_SERIAL_FTDI_SIO=m +# CONFIG_USB_SERIAL_FUNSOFT is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IPAQ is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_EDGEPORT_TI is not set +# CONFIG_USB_SERIAL_GARMIN is not set +# CONFIG_USB_SERIAL_IPW is not set +# CONFIG_USB_SERIAL_IUU is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KLSI is not set +# CONFIG_USB_SERIAL_KOBIL_SCT is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_MOS7720 is not set +# CONFIG_USB_SERIAL_MOS7840 is not set +# CONFIG_USB_SERIAL_MOTOROLA is not set +# CONFIG_USB_SERIAL_NAVMAN is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_OTI6858 is not set +# CONFIG_USB_SERIAL_QCAUX is not set +# CONFIG_USB_SERIAL_QUALCOMM is not set +# CONFIG_USB_SERIAL_SPCP8X5 is not set +# CONFIG_USB_SERIAL_HP4X is not set +# CONFIG_USB_SERIAL_SAFE is not set +# CONFIG_USB_SERIAL_SIEMENS_MPI is not set +# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set +# CONFIG_USB_SERIAL_SYMBOL is not set +# CONFIG_USB_SERIAL_TI is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OPTION is not set +# CONFIG_USB_SERIAL_OMNINET is not set +# CONFIG_USB_SERIAL_OPTICON is not set +# CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set +# CONFIG_USB_SERIAL_ZIO is not set +# CONFIG_USB_SERIAL_SSU100 is not set +# CONFIG_USB_SERIAL_DEBUG is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_SEVSEG is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_SISUSBVGA is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set +# CONFIG_USB_ISIGHTFW is not set +# CONFIG_USB_GADGET is not set + +# +# OTG and related infrastructure +# +# CONFIG_NOP_USB_XCEIV is not set +# CONFIG_UWB is not set +# CONFIG_MMC is not set +# CONFIG_MEMSTICK is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +# CONFIG_LEDS_ALIX2 is not set +# CONFIG_LEDS_PCA9532 is not set +# CONFIG_LEDS_LP3944 is not set +# CONFIG_LEDS_CLEVO_MAIL is not set +# CONFIG_LEDS_PCA955X is not set +# CONFIG_LEDS_BD2802 is not set +# CONFIG_LEDS_INTEL_SS4200 is not set +CONFIG_LEDS_TRIGGERS=y + +# +# LED Triggers +# +# CONFIG_LEDS_TRIGGER_TIMER is not set +# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set +# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set +# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set + +# +# iptables trigger is under Netfilter config (LED target) +# +# CONFIG_ACCESSIBILITY is not set +# CONFIG_INFINIBAND is not set +# CONFIG_EDAC is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1374 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_DS3232 is not set +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_ISL12022 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set +# CONFIG_RTC_DRV_BQ32K is not set +# CONFIG_RTC_DRV_S35390A is not set +# CONFIG_RTC_DRV_FM3130 is not set +# CONFIG_RTC_DRV_RX8581 is not set +# CONFIG_RTC_DRV_RX8025 is not set + +# +# SPI RTC drivers +# + +# +# Platform RTC drivers +# +CONFIG_RTC_DRV_CMOS=y +# CONFIG_RTC_DRV_DS1286 is not set +# CONFIG_RTC_DRV_DS1511 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T35 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_MSM6242 is not set +# CONFIG_RTC_DRV_BQ4802 is not set +# CONFIG_RTC_DRV_RP5C01 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +# CONFIG_DMADEVICES is not set +# CONFIG_AUXDISPLAY is not set +# CONFIG_UIO is not set +CONFIG_STAGING=y +# CONFIG_STAGING_EXCLUDE_BUILD is not set +# CONFIG_USB_IP_COMMON is not set +# CONFIG_W35UND is not set +# CONFIG_PRISM2_USB is not set +# CONFIG_ECHO is not set +# CONFIG_OTUS is not set +# CONFIG_RT2860 is not set +# CONFIG_RT2870 is not set +# CONFIG_COMEDI is not set +# CONFIG_ASUS_OLED is not set +# CONFIG_R8187SE is not set +# CONFIG_RTL8192SU is not set +# CONFIG_RTL8192U is not set +# CONFIG_RTL8192E is not set +# CONFIG_TRANZPORT is not set +# CONFIG_POHMELFS is not set +# CONFIG_IDE_PHISON is not set +# CONFIG_LINE6_USB is not set +# CONFIG_DRM_VMWGFX is not set +CONFIG_DRM_NOUVEAU=y +CONFIG_DRM_NOUVEAU_BACKLIGHT=y + +# +# I2C encoder or helper chips +# +CONFIG_DRM_I2C_CH7006=m +CONFIG_DRM_I2C_SIL164=m +# CONFIG_USB_SERIAL_QUATECH2 is not set +# CONFIG_USB_SERIAL_QUATECH_USB2 is not set +# CONFIG_VT6655 is not set +# CONFIG_VT6656 is not set +# CONFIG_FB_UDL is not set +# CONFIG_HYPERV is not set +# CONFIG_VME_BUS is not set +# CONFIG_IIO is not set +# CONFIG_ZRAM is not set +# CONFIG_BATMAN_ADV is not set +# CONFIG_SAMSUNG_LAPTOP is not set +# CONFIG_FB_SM7XX is not set +# CONFIG_CRYSTALHD is not set + +# +# Texas Instruments shared transport line discipline +# +# CONFIG_TI_ST is not set +# CONFIG_FB_XGI is not set +# CONFIG_LIRC_STAGING is not set +# CONFIG_ACPI_QUICKSTART is not set +# CONFIG_X86_PLATFORM_DEVICES is not set + +# +# Firmware Drivers +# +# CONFIG_EDD is not set +CONFIG_FIRMWARE_MEMMAP=y +# CONFIG_EFI_VARS is not set +# CONFIG_DELL_RBU is not set +# CONFIG_DCDBAS is not set +CONFIG_DMIID=y +# CONFIG_ISCSI_IBFT_FIND is not set + +# +# File systems +# +# CONFIG_EXT2_FS is not set +# CONFIG_EXT3_FS is not set +CONFIG_EXT4_FS=y +CONFIG_EXT4_USE_FOR_EXT23=y +# CONFIG_EXT4_FS_XATTR is not set +# CONFIG_EXT4_DEBUG is not set +CONFIG_JBD2=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y +CONFIG_DNOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +CONFIG_AUTOFS4_FS=y +CONFIG_FUSE_FS=y +# CONFIG_CUSE is not set + +# +# Caches +# +# CONFIG_FSCACHE is not set + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=y +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_UDF_FS=y +CONFIG_UDF_NLS=y + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=y +# CONFIG_MSDOS_FS is not set +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="ascii" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_PROC_SYSCTL=y +CONFIG_PROC_PAGE_MONITOR=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLBFS is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set +CONFIG_MISC_FILESYSTEMS=y +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_ECRYPT_FS is not set +# CONFIG_HFS_FS is not set +CONFIG_HFSPLUS_FS=y +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_LOGFS is not set +# CONFIG_CRAMFS is not set +CONFIG_SQUASHFS=y +CONFIG_SQUASHFS_XATTR=y +CONFIG_SQUASHFS_LZO=y +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +# CONFIG_VXFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_OMFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +CONFIG_NFS_V4=y +# CONFIG_NFS_V4_1 is not set +# CONFIG_NFS_USE_LEGACY_DNS is not set +CONFIG_NFS_USE_KERNEL_DNS=y +# CONFIG_NFSD is not set +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y +CONFIG_SUNRPC_GSS=y +CONFIG_RPCSEC_GSS_KRB5=y +# CONFIG_RPCSEC_GSS_SPKM3 is not set +# CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set +CONFIG_CIFS=y +CONFIG_CIFS_STATS=y +CONFIG_CIFS_STATS2=y +# CONFIG_CIFS_WEAK_PW_HASH is not set +# CONFIG_CIFS_UPCALL is not set +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_DFS_UPCALL is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +CONFIG_MAC_PARTITION=y +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +CONFIG_LDM_PARTITION=y +# CONFIG_LDM_DEBUG is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +CONFIG_EFI_PARTITION=y +# CONFIG_SYSV68_PARTITION is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="utf8" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +CONFIG_NLS_ASCII=y +CONFIG_NLS_ISO8859_1=y +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +CONFIG_NLS_UTF8=y +# CONFIG_DLM is not set + +# +# Kernel hacking +# +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_PRINTK_TIME=y +# CONFIG_ENABLE_WARN_DEPRECATED is not set +# CONFIG_ENABLE_MUST_CHECK is not set +CONFIG_FRAME_WARN=1024 +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_STRIP_ASM_SYMS is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_HARDLOCKUP_DETECTOR is not set +# CONFIG_DEBUG_MEMORY_INIT is not set +CONFIG_ARCH_WANT_FRAME_POINTERS=y +# CONFIG_FRAME_POINTER is not set +# CONFIG_RCU_CPU_STALL_DETECTOR is not set +CONFIG_SYSCTL_SYSCALL_CHECK=y +CONFIG_USER_STACKTRACE_SUPPORT=y +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y +CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y +CONFIG_TRACING_SUPPORT=y +# CONFIG_FTRACE is not set +# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set +# CONFIG_FIREWIRE_OHCI_REMOTE_DMA is not set +# CONFIG_DMA_API_DEBUG is not set +# CONFIG_ATOMIC64_SELFTEST is not set +# CONFIG_SAMPLES is not set +CONFIG_HAVE_ARCH_KGDB=y +CONFIG_HAVE_ARCH_KMEMCHECK=y +CONFIG_STRICT_DEVMEM=y +# CONFIG_X86_VERBOSE_BOOTUP is not set +# CONFIG_EARLY_PRINTK is not set +# CONFIG_4KSTACKS is not set +CONFIG_DOUBLEFAULT=y +# CONFIG_IOMMU_STRESS is not set +CONFIG_HAVE_MMIOTRACE_SUPPORT=y +CONFIG_IO_DELAY_TYPE_0X80=0 +CONFIG_IO_DELAY_TYPE_0XED=1 +CONFIG_IO_DELAY_TYPE_UDELAY=2 +CONFIG_IO_DELAY_TYPE_NONE=3 +CONFIG_IO_DELAY_0X80=y +# CONFIG_IO_DELAY_0XED is not set +# CONFIG_IO_DELAY_UDELAY is not set +# CONFIG_IO_DELAY_NONE is not set +CONFIG_DEFAULT_IO_DELAY_TYPE=0 +CONFIG_OPTIMIZE_INLINING=y + +# +# Security options +# +CONFIG_KEYS=y +# CONFIG_KEYS_DEBUG_PROC_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITYFS is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY="" +CONFIG_CRYPTO=y + +# +# Crypto core or helper +# +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_ALGAPI2=y +CONFIG_CRYPTO_AEAD2=y +CONFIG_CRYPTO_BLKCIPHER=y +CONFIG_CRYPTO_BLKCIPHER2=y +CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_HASH2=y +CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_PCOMP2=y +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_MANAGER2=y +CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y +# CONFIG_CRYPTO_GF128MUL is not set +# CONFIG_CRYPTO_NULL is not set +CONFIG_CRYPTO_WORKQUEUE=y +# CONFIG_CRYPTO_CRYPTD is not set +# CONFIG_CRYPTO_AUTHENC is not set +# CONFIG_CRYPTO_TEST is not set + +# +# Authenticated Encryption with Associated Data +# +# CONFIG_CRYPTO_CCM is not set +# CONFIG_CRYPTO_GCM is not set +# CONFIG_CRYPTO_SEQIV is not set + +# +# Block modes +# +CONFIG_CRYPTO_CBC=y +# CONFIG_CRYPTO_CTR is not set +# CONFIG_CRYPTO_CTS is not set +CONFIG_CRYPTO_ECB=y +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_PCBC is not set +# CONFIG_CRYPTO_XTS is not set + +# +# Hash modes +# +# CONFIG_CRYPTO_HMAC is not set +# CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_VMAC is not set + +# +# Digest +# +# CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_CRC32C_INTEL is not set +# CONFIG_CRYPTO_GHASH is not set +# CONFIG_CRYPTO_MD4 is not set +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_MICHAEL_MIC=y +# CONFIG_CRYPTO_RMD128 is not set +# CONFIG_CRYPTO_RMD160 is not set +# CONFIG_CRYPTO_RMD256 is not set +# CONFIG_CRYPTO_RMD320 is not set +# CONFIG_CRYPTO_SHA1 is not set +# CONFIG_CRYPTO_SHA256 is not set +# CONFIG_CRYPTO_SHA512 is not set +# CONFIG_CRYPTO_TGR192 is not set +# CONFIG_CRYPTO_WP512 is not set + +# +# Ciphers +# +CONFIG_CRYPTO_AES=y +# CONFIG_CRYPTO_AES_586 is not set +# CONFIG_CRYPTO_ANUBIS is not set +CONFIG_CRYPTO_ARC4=y +# CONFIG_CRYPTO_BLOWFISH is not set +# CONFIG_CRYPTO_CAMELLIA is not set +# CONFIG_CRYPTO_CAST5 is not set +# CONFIG_CRYPTO_CAST6 is not set +CONFIG_CRYPTO_DES=y +# CONFIG_CRYPTO_FCRYPT is not set +# CONFIG_CRYPTO_KHAZAD is not set +# CONFIG_CRYPTO_SALSA20 is not set +# CONFIG_CRYPTO_SALSA20_586 is not set +# CONFIG_CRYPTO_SEED is not set +# CONFIG_CRYPTO_SERPENT is not set +# CONFIG_CRYPTO_TEA is not set +# CONFIG_CRYPTO_TWOFISH is not set +# CONFIG_CRYPTO_TWOFISH_586 is not set + +# +# Compression +# +# CONFIG_CRYPTO_DEFLATE is not set +# CONFIG_CRYPTO_ZLIB is not set +# CONFIG_CRYPTO_LZO is not set + +# +# Random Number Generation +# +# CONFIG_CRYPTO_ANSI_CPRNG is not set +# CONFIG_CRYPTO_HW is not set +CONFIG_HAVE_KVM=y +# CONFIG_VIRTUALIZATION is not set +# CONFIG_BINARY_PRINTF is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_GENERIC_FIND_FIRST_BIT=y +CONFIG_GENERIC_FIND_NEXT_BIT=y +CONFIG_GENERIC_FIND_LAST_BIT=y +CONFIG_CRC_CCITT=m +CONFIG_CRC16=y +# CONFIG_CRC_T10DIF is not set +CONFIG_CRC_ITU_T=y +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y +CONFIG_NLATTR=y From 61a2716bf11e7bc5c0e0bb769a33e87a8bf066b1 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 17 Nov 2010 22:18:31 +0100 Subject: [PATCH 393/850] projects/ATV/options: dont install transmission Signed-off-by: Stephan Raue --- projects/ATV/options | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/ATV/options b/projects/ATV/options index ddb04a5319..5a2abebe00 100644 --- a/projects/ATV/options +++ b/projects/ATV/options @@ -104,7 +104,7 @@ SAMBA_SERVER="yes" # build and install Transmission BitTorrent daemon (yes / no) - TRANSMISSION="yes" + TRANSMISSION="no" # todo (need for vdr?) SERVICES="yes" From 08213ee7bef4a4a282d0f6334b96b91b754c7900 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 00:09:29 +0100 Subject: [PATCH 394/850] e2fsprogs: add fsck support, add resizer support, add htree support, add compression support Signed-off-by: Stephan Raue --- packages/tools/e2fsprogs/build | 8 ++++---- packages/tools/e2fsprogs/install | 15 +++++++++++++-- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/packages/tools/e2fsprogs/build b/packages/tools/e2fsprogs/build index 3551927f45..c9e45fb328 100755 --- a/packages/tools/e2fsprogs/build +++ b/packages/tools/e2fsprogs/build @@ -11,8 +11,8 @@ cd $PKG_BUILD --enable-verbose-makecmds \ --enable-symlink-install \ --enable-symlink-build \ - --disable-compression \ - --disable-htree \ + --enable-compression \ + --enable-htree \ --enable-elf-shlibs \ --disable-bsd-shlibs \ --disable-profile \ @@ -23,8 +23,8 @@ cd $PKG_BUILD --disable-libblkid \ --disable-debugfs \ --disable-imager \ - --disable-resizer \ - --disable-fsck \ + --enable-resizer \ + --enable-fsck \ --disable-e2initrd-helper \ --enable-tls \ --disable-uuidd \ diff --git a/packages/tools/e2fsprogs/install b/packages/tools/e2fsprogs/install index bf751a33c5..cee6bbcbb5 100755 --- a/packages/tools/e2fsprogs/install +++ b/packages/tools/e2fsprogs/install @@ -6,9 +6,20 @@ mkdir -p $INSTALL/etc cp $PKG_BUILD/misc/mke2fs.conf $INSTALL/etc mkdir -p $INSTALL/usr/sbin - cp $PKG_BUILD/misc/mke2fs $INSTALL/usr/sbin - cp $PKG_BUILD/misc/tune2fs $INSTALL/usr/sbin cp $PKG_BUILD/e2fsck/e2fsck $INSTALL/usr/sbin + cp $PKG_BUILD/misc/fsck $INSTALL/usr/sbin + ln -sf fsck $INSTALL/usr/sbin/fsck.ext2 + ln -sf fsck $INSTALL/usr/sbin/fsck.ext3 + ln -sf fsck $INSTALL/usr/sbin/fsck.ext4 + ln -sf fsck $INSTALL/usr/sbin/fsck.ext4dev + cp $PKG_BUILD/misc/mke2fs $INSTALL/usr/sbin + ln -sf mke2fs $INSTALL/usr/sbin/mkfs.ext2 + ln -sf mke2fs $INSTALL/usr/sbin/mkfs.ext3 + ln -sf mke2fs $INSTALL/usr/sbin/mkfs.ext4 + ln -sf mke2fs $INSTALL/usr/sbin/mkfs.ext4dev + cp $PKG_BUILD/resize/resize2fs $INSTALL/usr/sbin + cp $PKG_BUILD/misc/tune2fs $INSTALL/usr/sbin + mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/lib/*.so.[0-9] $INSTALL/usr/lib From 2b82a598e5743eec258fafdd6867266a998591b5 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 00:12:10 +0100 Subject: [PATCH 395/850] config/vmware: update configfiles Signed-off-by: Stephan Raue --- config/vmware/OpenELEC.nvram | Bin 8684 -> 8684 bytes config/vmware/OpenELEC.vmx | 19 +++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/config/vmware/OpenELEC.nvram b/config/vmware/OpenELEC.nvram index f9425122c0fe0a9d2d3a506a6a73fd814dde8813..6b610e10fbb2afa1dad966079a36b968c38fe7a2 100644 GIT binary patch delta 29 kcmaFk{Kk2Lh!7ti1B0`#e{e}=t`i3X0|Ou5Mzv##0D{v8(EtDd delta 29 lcmaFk{Kk2Lh|pJF1_oze|KO6$Tqh0&28OS^8`X{}0sx!+37r4{ diff --git a/config/vmware/OpenELEC.vmx b/config/vmware/OpenELEC.vmx index 0cbe3bd59e..4b60dec6f1 100755 --- a/config/vmware/OpenELEC.vmx +++ b/config/vmware/OpenELEC.vmx @@ -34,3 +34,22 @@ sound.present = "TRUE" sound.startConnected = "TRUE" sound.fileName = "-1" sound.autodetect = "TRUE" + +extendedConfigFile = "OpenELEC.vmxf" +ethernet0.generatedAddress = "00:0c:29:39:05:27" +uuid.location = "56 4d 6b b5 e7 5c 8d 13-cc 60 70 2d 4f 39 05 27" +uuid.bios = "56 4d 6b b5 e7 5c 8d 13-cc 60 70 2d 4f 39 05 27" +cleanShutdown = "TRUE" +replay.supported = "FALSE" +replay.filename = "" +ide0:0.redo = "" +ide0:1.redo = "" +usb.pciSlotNumber = "16" +ethernet0.pciSlotNumber = "17" +sound.pciSlotNumber = "18" +ehci.pciSlotNumber = "19" +vmotion.checkpointFBSize = "134217728" +ethernet0.generatedAddressOffset = "0" +debugStub.linuxOffsets = "0x0,0xffffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0" +tools.remindInstall = "TRUE" +ide1:0.fileName = "auto detect" From 84b8dc8f1e60f7daccf0afedaf9df4c6e1bb46d6 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 00:12:35 +0100 Subject: [PATCH 396/850] CHANGELOG: cleanup Signed-off-by: Stephan Raue --- CHANGELOG | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 8b13789179..e69de29bb2 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1 +0,0 @@ - From 4a59683354f10ee1e85fc94bb8e090f16f967c04 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 00:13:21 +0100 Subject: [PATCH 397/850] projects/ATV/linux: optimize kernel config, backup old config Signed-off-by: Stephan Raue --- projects/ATV/linux/linux.i386.conf | 57 +- projects/ATV/linux/linux.i386.conf.2.6.37-1 | 2228 +++++++++++++++++++ 2 files changed, 2267 insertions(+), 18 deletions(-) create mode 100644 projects/ATV/linux/linux.i386.conf.2.6.37-1 diff --git a/projects/ATV/linux/linux.i386.conf b/projects/ATV/linux/linux.i386.conf index 8c44dd05a8..50e5971961 100644 --- a/projects/ATV/linux/linux.i386.conf +++ b/projects/ATV/linux/linux.i386.conf @@ -43,6 +43,10 @@ CONFIG_ARCH_POPULATES_NODE_MAP=y # CONFIG_AUDIT_ARCH is not set CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y +CONFIG_USE_GENERIC_SMP_HELPERS=y +CONFIG_X86_32_SMP=y +CONFIG_X86_HT=y +CONFIG_X86_TRAMPOLINE=y CONFIG_X86_32_LAZY_GS=y CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-ecx -fcall-saved-edx" CONFIG_KTIME_SCALAR=y @@ -55,7 +59,6 @@ CONFIG_IRQ_WORK=y # General setup # CONFIG_EXPERIMENTAL=y -CONFIG_BROKEN_ON_SMP=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" CONFIG_LOCALVERSION="" @@ -87,7 +90,7 @@ CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y # CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED is not set CONFIG_HAVE_SPARSE_IRQ=y CONFIG_GENERIC_IRQ_PROBE=y -# CONFIG_GENERIC_PENDING_IRQ is not set +CONFIG_GENERIC_PENDING_IRQ=y # CONFIG_AUTO_IRQ_AFFINITY is not set # CONFIG_IRQ_PER_CPU is not set # CONFIG_HARDIRQS_SW_RESEND is not set @@ -96,10 +99,13 @@ CONFIG_GENERIC_IRQ_PROBE=y # # RCU Subsystem # -# CONFIG_TREE_PREEMPT_RCU is not set +CONFIG_TREE_PREEMPT_RCU=y # CONFIG_TINY_RCU is not set -CONFIG_TINY_PREEMPT_RCU=y +# CONFIG_TINY_PREEMPT_RCU is not set CONFIG_PREEMPT_RCU=y +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=32 +# CONFIG_RCU_FANOUT_EXACT is not set # CONFIG_TREE_RCU_TRACE is not set # CONFIG_IKCONFIG is not set CONFIG_LOG_BUF_SHIFT=16 @@ -107,16 +113,24 @@ CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y CONFIG_CGROUPS=y # CONFIG_CGROUP_DEBUG is not set CONFIG_CGROUP_NS=y -CONFIG_CGROUP_FREEZER=y +# CONFIG_CGROUP_FREEZER is not set # CONFIG_CGROUP_DEVICE is not set -CONFIG_CPUSETS=y -CONFIG_PROC_PID_CPUSET=y -CONFIG_CGROUP_CPUACCT=y +# CONFIG_CPUSETS is not set +# CONFIG_CGROUP_CPUACCT is not set CONFIG_RESOURCE_COUNTERS=y # CONFIG_CGROUP_MEM_RES_CTLR is not set -# CONFIG_CGROUP_SCHED is not set -# CONFIG_BLK_CGROUP is not set -# CONFIG_NAMESPACES is not set +CONFIG_CGROUP_SCHED=y +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_RT_GROUP_SCHED=y +CONFIG_BLK_CGROUP=y +# CONFIG_DEBUG_BLK_CGROUP is not set +CONFIG_NAMESPACES=y +CONFIG_UTS_NS=y +CONFIG_IPC_NS=y +CONFIG_USER_NS=y +CONFIG_PID_NS=y +CONFIG_NET_NS=y +CONFIG_SCHED_AUTOGROUP=y # CONFIG_SYSFS_DEPRECATED is not set # CONFIG_RELAY is not set CONFIG_BLK_DEV_INITRD=y @@ -192,10 +206,12 @@ CONFIG_MODULE_UNLOAD=y # CONFIG_MODULE_FORCE_UNLOAD is not set # CONFIG_MODVERSIONS is not set # CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_STOP_MACHINE=y CONFIG_BLOCK=y CONFIG_LBDAF=y CONFIG_BLK_DEV_BSG=y # CONFIG_BLK_DEV_INTEGRITY is not set +# CONFIG_BLK_DEV_THROTTLING is not set # # IO Schedulers @@ -203,6 +219,7 @@ CONFIG_BLK_DEV_BSG=y CONFIG_IOSCHED_NOOP=y # CONFIG_IOSCHED_DEADLINE is not set CONFIG_IOSCHED_CFQ=y +# CONFIG_CFQ_GROUP_IOSCHED is not set CONFIG_DEFAULT_CFQ=y # CONFIG_DEFAULT_NOOP is not set CONFIG_DEFAULT_IOSCHED="cfq" @@ -234,8 +251,8 @@ CONFIG_DEFAULT_IOSCHED="cfq" # CONFIG_INLINE_WRITE_UNLOCK_BH is not set # CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set -# CONFIG_MUTEX_SPIN_ON_OWNER is not set -CONFIG_FREEZER=y +CONFIG_MUTEX_SPIN_ON_OWNER=y +# CONFIG_FREEZER is not set # # Processor type and features @@ -244,8 +261,9 @@ CONFIG_TICK_ONESHOT=y # CONFIG_NO_HZ is not set CONFIG_HIGH_RES_TIMERS=y CONFIG_GENERIC_CLOCKEVENTS_BUILD=y -# CONFIG_SMP is not set +CONFIG_SMP=y CONFIG_X86_MPPARSE=y +# CONFIG_X86_BIGSMP is not set # CONFIG_X86_EXTENDED_PLATFORM is not set CONFIG_SCHED_OMIT_FRAME_POINTER=y # CONFIG_PARAVIRT_GUEST is not set @@ -304,13 +322,13 @@ CONFIG_HPET_EMULATE_RTC=y CONFIG_DMI=y # CONFIG_IOMMU_HELPER is not set # CONFIG_IOMMU_API is not set -CONFIG_NR_CPUS=1 +CONFIG_NR_CPUS=2 +CONFIG_SCHED_SMT=y +CONFIG_SCHED_MC=y CONFIG_IRQ_TIME_ACCOUNTING=y # CONFIG_PREEMPT_NONE is not set # CONFIG_PREEMPT_VOLUNTARY is not set CONFIG_PREEMPT=y -CONFIG_X86_UP_APIC=y -CONFIG_X86_UP_IOAPIC=y CONFIG_X86_LOCAL_APIC=y CONFIG_X86_IO_APIC=y CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y @@ -359,7 +377,6 @@ CONFIG_BOUNCE=y CONFIG_VIRT_TO_BUS=y # CONFIG_KSM is not set CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 -CONFIG_NEED_PER_CPU_KM=y # CONFIG_X86_CHECK_BIOS_CORRUPTION is not set CONFIG_X86_RESERVE_LOW=64 # CONFIG_MATH_EMULATION is not set @@ -382,6 +399,7 @@ CONFIG_SCHED_HRTICK=y CONFIG_PHYSICAL_START=0x1000000 # CONFIG_RELOCATABLE is not set CONFIG_PHYSICAL_ALIGN=0x1000000 +# CONFIG_HOTPLUG_CPU is not set # CONFIG_COMPAT_VDSO is not set CONFIG_CMDLINE_BOOL=y CONFIG_CMDLINE="fastboot root=/dev/ram0 rdinit=/init" @@ -587,6 +605,7 @@ CONFIG_IPV6_NDISC_NODETYPE=y # CONFIG_NET_SCHED is not set # CONFIG_DCB is not set CONFIG_DNS_RESOLVER=y +CONFIG_RPS=y # # Network testing @@ -2054,6 +2073,7 @@ CONFIG_FRAME_WARN=1024 # CONFIG_DEBUG_MEMORY_INIT is not set CONFIG_ARCH_WANT_FRAME_POINTERS=y # CONFIG_FRAME_POINTER is not set +# CONFIG_RCU_CPU_STALL_DETECTOR is not set CONFIG_SYSCTL_SYSCALL_CHECK=y CONFIG_USER_STACKTRACE_SUPPORT=y CONFIG_HAVE_FUNCTION_TRACER=y @@ -2119,6 +2139,7 @@ CONFIG_CRYPTO_MANAGER2=y CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y # CONFIG_CRYPTO_GF128MUL is not set # CONFIG_CRYPTO_NULL is not set +# CONFIG_CRYPTO_PCRYPT is not set CONFIG_CRYPTO_WORKQUEUE=y # CONFIG_CRYPTO_CRYPTD is not set # CONFIG_CRYPTO_AUTHENC is not set diff --git a/projects/ATV/linux/linux.i386.conf.2.6.37-1 b/projects/ATV/linux/linux.i386.conf.2.6.37-1 new file mode 100644 index 0000000000..8c44dd05a8 --- /dev/null +++ b/projects/ATV/linux/linux.i386.conf.2.6.37-1 @@ -0,0 +1,2228 @@ +# +# Automatically generated make config: don't edit +# Linux/i386 2.6.37-rc2 Kernel Configuration +# +# CONFIG_64BIT is not set +CONFIG_X86_32=y +# CONFIG_X86_64 is not set +CONFIG_X86=y +CONFIG_INSTRUCTION_DECODER=y +CONFIG_OUTPUT_FORMAT="elf32-i386" +CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig" +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_CLOCKSOURCE_WATCHDOG=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_MMU=y +CONFIG_ZONE_DMA=y +# CONFIG_NEED_DMA_MAP_STATE is not set +CONFIG_NEED_SG_DMA_LENGTH=y +CONFIG_GENERIC_ISA_DMA=y +CONFIG_GENERIC_IOMAP=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +# CONFIG_RWSEM_GENERIC_SPINLOCK is not set +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +# CONFIG_GENERIC_TIME_VSYSCALL is not set +CONFIG_ARCH_HAS_CPU_RELAX=y +CONFIG_ARCH_HAS_DEFAULT_IDLE=y +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y +CONFIG_HAVE_SETUP_PER_CPU_AREA=y +CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y +CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y +# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y +# CONFIG_ZONE_DMA32 is not set +CONFIG_ARCH_POPULATES_NODE_MAP=y +# CONFIG_AUDIT_ARCH is not set +CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y +CONFIG_X86_32_LAZY_GS=y +CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-ecx -fcall-saved-edx" +CONFIG_KTIME_SCALAR=y +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y +CONFIG_HAVE_IRQ_WORK=y +CONFIG_IRQ_WORK=y + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_CROSS_COMPILE="" +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_HAVE_KERNEL_GZIP=y +CONFIG_HAVE_KERNEL_BZIP2=y +CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y +# CONFIG_KERNEL_GZIP is not set +# CONFIG_KERNEL_BZIP2 is not set +CONFIG_KERNEL_LZMA=y +# CONFIG_KERNEL_LZO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y +CONFIG_BSD_PROCESS_ACCT=y +# CONFIG_BSD_PROCESS_ACCT_V3 is not set +# CONFIG_TASKSTATS is not set +# CONFIG_AUDIT is not set +CONFIG_HAVE_GENERIC_HARDIRQS=y + +# +# IRQ subsystem +# +CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y +# CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED is not set +CONFIG_HAVE_SPARSE_IRQ=y +CONFIG_GENERIC_IRQ_PROBE=y +# CONFIG_GENERIC_PENDING_IRQ is not set +# CONFIG_AUTO_IRQ_AFFINITY is not set +# CONFIG_IRQ_PER_CPU is not set +# CONFIG_HARDIRQS_SW_RESEND is not set +# CONFIG_SPARSE_IRQ is not set + +# +# RCU Subsystem +# +# CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set +CONFIG_TINY_PREEMPT_RCU=y +CONFIG_PREEMPT_RCU=y +# CONFIG_TREE_RCU_TRACE is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=16 +CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y +CONFIG_CGROUPS=y +# CONFIG_CGROUP_DEBUG is not set +CONFIG_CGROUP_NS=y +CONFIG_CGROUP_FREEZER=y +# CONFIG_CGROUP_DEVICE is not set +CONFIG_CPUSETS=y +CONFIG_PROC_PID_CPUSET=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_RESOURCE_COUNTERS=y +# CONFIG_CGROUP_MEM_RES_CTLR is not set +# CONFIG_CGROUP_SCHED is not set +# CONFIG_BLK_CGROUP is not set +# CONFIG_NAMESPACES is not set +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE=" " +CONFIG_INITRAMFS_ROOT_UID=0 +CONFIG_INITRAMFS_ROOT_GID=0 +# CONFIG_RD_GZIP is not set +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set +CONFIG_INITRAMFS_COMPRESSION_NONE=y +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +# CONFIG_KALLSYMS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +# CONFIG_BUG is not set +CONFIG_ELF_CORE=y +# CONFIG_PCSPKR_PLATFORM is not set +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_AIO=y +CONFIG_HAVE_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +CONFIG_PERF_EVENTS=y +# CONFIG_PERF_COUNTERS is not set +# CONFIG_VM_EVENT_COUNTERS is not set +CONFIG_PCI_QUIRKS=y +# CONFIG_COMPAT_BRK is not set +# CONFIG_SLAB is not set +# CONFIG_SLUB is not set +CONFIG_SLOB=y +# CONFIG_PROFILING is not set +CONFIG_HAVE_OPROFILE=y +# CONFIG_KPROBES is not set +CONFIG_JUMP_LABEL=y +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +CONFIG_HAVE_IOREMAP_PROT=y +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_HAVE_OPTPROBES=y +CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y +CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y +CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y +CONFIG_HAVE_USER_RETURN_NOTIFIER=y +CONFIG_HAVE_PERF_EVENTS_NMI=y +CONFIG_HAVE_ARCH_JUMP_LABEL=y + +# +# GCOV-based kernel profiling +# +CONFIG_HAVE_GENERIC_DMA_COHERENT=y +CONFIG_RT_MUTEXES=y +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +# CONFIG_MODULE_FORCE_LOAD is not set +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_BLOCK=y +CONFIG_LBDAF=y +CONFIG_BLK_DEV_BSG=y +# CONFIG_BLK_DEV_INTEGRITY is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_DEADLINE is not set +CONFIG_IOSCHED_CFQ=y +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +# CONFIG_INLINE_SPIN_UNLOCK is not set +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +# CONFIG_INLINE_READ_UNLOCK is not set +# CONFIG_INLINE_READ_UNLOCK_BH is not set +# CONFIG_INLINE_READ_UNLOCK_IRQ is not set +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +# CONFIG_INLINE_WRITE_UNLOCK is not set +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set +CONFIG_FREEZER=y + +# +# Processor type and features +# +CONFIG_TICK_ONESHOT=y +# CONFIG_NO_HZ is not set +CONFIG_HIGH_RES_TIMERS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +# CONFIG_SMP is not set +CONFIG_X86_MPPARSE=y +# CONFIG_X86_EXTENDED_PLATFORM is not set +CONFIG_SCHED_OMIT_FRAME_POINTER=y +# CONFIG_PARAVIRT_GUEST is not set +CONFIG_NO_BOOTMEM=y +# CONFIG_MEMTEST is not set +# CONFIG_M386 is not set +# CONFIG_M486 is not set +# CONFIG_M586 is not set +# CONFIG_M586TSC is not set +# CONFIG_M586MMX is not set +# CONFIG_M686 is not set +# CONFIG_MPENTIUMII is not set +# CONFIG_MPENTIUMIII is not set +CONFIG_MPENTIUMM=y +# CONFIG_MPENTIUM4 is not set +# CONFIG_MK6 is not set +# CONFIG_MK7 is not set +# CONFIG_MK8 is not set +# CONFIG_MCRUSOE is not set +# CONFIG_MEFFICEON is not set +# CONFIG_MWINCHIPC6 is not set +# CONFIG_MWINCHIP3D is not set +# CONFIG_MGEODEGX1 is not set +# CONFIG_MGEODE_LX is not set +# CONFIG_MCYRIXIII is not set +# CONFIG_MVIAC3_2 is not set +# CONFIG_MVIAC7 is not set +# CONFIG_MCORE2 is not set +# CONFIG_MATOM is not set +# CONFIG_X86_GENERIC is not set +CONFIG_X86_CPU=y +CONFIG_X86_INTERNODE_CACHE_SHIFT=6 +CONFIG_X86_CMPXCHG=y +CONFIG_X86_L1_CACHE_SHIFT=6 +CONFIG_X86_XADD=y +CONFIG_X86_WP_WORKS_OK=y +CONFIG_X86_INVLPG=y +CONFIG_X86_BSWAP=y +CONFIG_X86_POPAD_OK=y +CONFIG_X86_INTEL_USERCOPY=y +CONFIG_X86_USE_PPRO_CHECKSUM=y +CONFIG_X86_TSC=y +CONFIG_X86_CMPXCHG64=y +CONFIG_X86_CMOV=y +CONFIG_X86_MINIMUM_CPU_FAMILY=5 +CONFIG_X86_DEBUGCTLMSR=y +CONFIG_PROCESSOR_SELECT=y +CONFIG_CPU_SUP_INTEL=y +# CONFIG_CPU_SUP_CYRIX_32 is not set +# CONFIG_CPU_SUP_AMD is not set +# CONFIG_CPU_SUP_CENTAUR is not set +# CONFIG_CPU_SUP_TRANSMETA_32 is not set +# CONFIG_CPU_SUP_UMC_32 is not set +CONFIG_HPET_TIMER=y +CONFIG_HPET_EMULATE_RTC=y +CONFIG_DMI=y +# CONFIG_IOMMU_HELPER is not set +# CONFIG_IOMMU_API is not set +CONFIG_NR_CPUS=1 +CONFIG_IRQ_TIME_ACCOUNTING=y +# CONFIG_PREEMPT_NONE is not set +# CONFIG_PREEMPT_VOLUNTARY is not set +CONFIG_PREEMPT=y +CONFIG_X86_UP_APIC=y +CONFIG_X86_UP_IOAPIC=y +CONFIG_X86_LOCAL_APIC=y +CONFIG_X86_IO_APIC=y +CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y +CONFIG_X86_MCE=y +CONFIG_X86_MCE_INTEL=y +# CONFIG_X86_MCE_AMD is not set +# CONFIG_X86_ANCIENT_MCE is not set +CONFIG_X86_MCE_THRESHOLD=y +# CONFIG_X86_MCE_INJECT is not set +CONFIG_X86_THERMAL_VECTOR=y +# CONFIG_VM86 is not set +# CONFIG_TOSHIBA is not set +# CONFIG_I8K is not set +# CONFIG_X86_REBOOTFIXUPS is not set +# CONFIG_MICROCODE is not set +CONFIG_X86_MSR=y +CONFIG_X86_CPUID=y +CONFIG_NOHIGHMEM=y +# CONFIG_HIGHMEM4G is not set +# CONFIG_HIGHMEM64G is not set +# CONFIG_VMSPLIT_3G is not set +CONFIG_VMSPLIT_3G_OPT=y +# CONFIG_VMSPLIT_2G is not set +# CONFIG_VMSPLIT_2G_OPT is not set +# CONFIG_VMSPLIT_1G is not set +CONFIG_PAGE_OFFSET=0xB0000000 +# CONFIG_X86_PAE is not set +# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set +# CONFIG_ARCH_DMA_ADDR_T_64BIT is not set +CONFIG_NEED_NODE_MEMMAP_SIZE=y +CONFIG_ARCH_FLATMEM_ENABLE=y +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ILLEGAL_POINTER_VALUE=0 +CONFIG_SELECT_MEMORY_MODEL=y +# CONFIG_FLATMEM_MANUAL is not set +CONFIG_SPARSEMEM_MANUAL=y +CONFIG_SPARSEMEM=y +CONFIG_HAVE_MEMORY_PRESENT=y +CONFIG_SPARSEMEM_STATIC=y +CONFIG_HAVE_MEMBLOCK=y +CONFIG_SPLIT_PTLOCK_CPUS=4 +# CONFIG_PHYS_ADDR_T_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +CONFIG_NEED_PER_CPU_KM=y +# CONFIG_X86_CHECK_BIOS_CORRUPTION is not set +CONFIG_X86_RESERVE_LOW=64 +# CONFIG_MATH_EMULATION is not set +CONFIG_MTRR=y +CONFIG_MTRR_SANITIZER=y +CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0 +CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1 +CONFIG_X86_PAT=y +CONFIG_ARCH_USES_PG_UNCACHED=y +CONFIG_EFI=y +CONFIG_SECCOMP=y +# CONFIG_CC_STACKPROTECTOR is not set +# CONFIG_HZ_100 is not set +# CONFIG_HZ_250 is not set +CONFIG_HZ_300=y +# CONFIG_HZ_1000 is not set +CONFIG_HZ=300 +CONFIG_SCHED_HRTICK=y +# CONFIG_KEXEC is not set +CONFIG_PHYSICAL_START=0x1000000 +# CONFIG_RELOCATABLE is not set +CONFIG_PHYSICAL_ALIGN=0x1000000 +# CONFIG_COMPAT_VDSO is not set +CONFIG_CMDLINE_BOOL=y +CONFIG_CMDLINE="fastboot root=/dev/ram0 rdinit=/init" +# CONFIG_CMDLINE_OVERRIDE is not set + +# +# Power management and ACPI options +# +CONFIG_PM=y +# CONFIG_PM_DEBUG is not set +# CONFIG_SUSPEND is not set +# CONFIG_HIBERNATION is not set +# CONFIG_PM_RUNTIME is not set +# CONFIG_PM_OPP is not set +CONFIG_ACPI=y +# CONFIG_ACPI_PROCFS is not set +# CONFIG_ACPI_PROCFS_POWER is not set +# CONFIG_ACPI_EC_DEBUGFS is not set +# CONFIG_ACPI_PROC_EVENT is not set +# CONFIG_ACPI_AC is not set +# CONFIG_ACPI_BATTERY is not set +# CONFIG_ACPI_BUTTON is not set +CONFIG_ACPI_VIDEO=y +CONFIG_ACPI_FAN=y +# CONFIG_ACPI_DOCK is not set +CONFIG_ACPI_PROCESSOR=y +# CONFIG_ACPI_PROCESSOR_AGGREGATOR is not set +CONFIG_ACPI_THERMAL=y +# CONFIG_ACPI_CUSTOM_DSDT is not set +CONFIG_ACPI_BLACKLIST_YEAR=0 +# CONFIG_ACPI_DEBUG is not set +# CONFIG_ACPI_PCI_SLOT is not set +CONFIG_X86_PM_TIMER=y +# CONFIG_ACPI_CONTAINER is not set +# CONFIG_ACPI_SBS is not set +# CONFIG_ACPI_HED is not set +# CONFIG_ACPI_APEI is not set +# CONFIG_SFI is not set + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_TABLE=y +# CONFIG_CPU_FREQ_DEBUG is not set +# CONFIG_CPU_FREQ_STAT is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set + +# +# CPUFreq processor drivers +# +# CONFIG_X86_PCC_CPUFREQ is not set +CONFIG_X86_ACPI_CPUFREQ=y +# CONFIG_X86_POWERNOW_K6 is not set +# CONFIG_X86_POWERNOW_K7 is not set +# CONFIG_X86_POWERNOW_K8 is not set +# CONFIG_X86_GX_SUSPMOD is not set +# CONFIG_X86_SPEEDSTEP_CENTRINO is not set +# CONFIG_X86_SPEEDSTEP_ICH is not set +# CONFIG_X86_SPEEDSTEP_SMI is not set +# CONFIG_X86_P4_CLOCKMOD is not set +# CONFIG_X86_CPUFREQ_NFORCE2 is not set +# CONFIG_X86_LONGRUN is not set +# CONFIG_X86_LONGHAUL is not set +# CONFIG_X86_E_POWERSAVER is not set + +# +# shared options +# +# CONFIG_X86_SPEEDSTEP_LIB is not set +CONFIG_CPU_IDLE=y +CONFIG_CPU_IDLE_GOV_LADDER=y +# CONFIG_INTEL_IDLE is not set + +# +# Bus options (PCI etc.) +# +CONFIG_PCI=y +# CONFIG_PCI_GOBIOS is not set +# CONFIG_PCI_GOMMCONFIG is not set +# CONFIG_PCI_GODIRECT is not set +CONFIG_PCI_GOANY=y +CONFIG_PCI_BIOS=y +CONFIG_PCI_DIRECT=y +CONFIG_PCI_MMCONFIG=y +CONFIG_PCI_DOMAINS=y +# CONFIG_PCI_CNB20LE_QUIRK is not set +# CONFIG_DMAR is not set +CONFIG_PCIEPORTBUS=y +# CONFIG_PCIEAER is not set +# CONFIG_PCIEASPM is not set +CONFIG_ARCH_SUPPORTS_MSI=y +CONFIG_PCI_MSI=y +# CONFIG_PCI_STUB is not set +CONFIG_HT_IRQ=y +# CONFIG_PCI_IOV is not set +CONFIG_PCI_IOAPIC=y +CONFIG_ISA_DMA_API=y +# CONFIG_ISA is not set +# CONFIG_MCA is not set +# CONFIG_SCx200 is not set +# CONFIG_OLPC is not set +# CONFIG_OLPC_OPENFIRMWARE is not set +# CONFIG_PCCARD is not set +# CONFIG_HOTPLUG_PCI is not set + +# +# Executable file formats / Emulations +# +CONFIG_BINFMT_ELF=y +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set +CONFIG_HAVE_AOUT=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set +CONFIG_HAVE_ATOMIC_IOMAP=y +CONFIG_HAVE_TEXT_POKE_SMP=y +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_XFRM_STATISTICS is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE_DEMUX is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=y +CONFIG_INET_XFRM_MODE_TUNNEL=y +CONFIG_INET_XFRM_MODE_BEET=y +CONFIG_INET_LRO=y +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +CONFIG_IPV6=y +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +# CONFIG_INET6_AH is not set +# CONFIG_INET6_ESP is not set +# CONFIG_INET6_IPCOMP is not set +# CONFIG_IPV6_MIP6 is not set +# CONFIG_INET6_XFRM_TUNNEL is not set +# CONFIG_INET6_TUNNEL is not set +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +# CONFIG_IPV6_SIT_6RD is not set +CONFIG_IPV6_NDISC_NODETYPE=y +# CONFIG_IPV6_TUNNEL is not set +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_IPV6_MROUTE is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +# CONFIG_NETFILTER is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_L2TP is not set +# CONFIG_BRIDGE is not set +# CONFIG_NET_DSA is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set +# CONFIG_NET_SCHED is not set +# CONFIG_DCB is not set +CONFIG_DNS_RESOLVER=y + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +# CONFIG_AF_RXRPC is not set +CONFIG_WIRELESS=y +CONFIG_WEXT_CORE=y +CONFIG_WEXT_PROC=y +CONFIG_CFG80211=y +# CONFIG_NL80211_TESTMODE is not set +# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set +# CONFIG_CFG80211_REG_DEBUG is not set +# CONFIG_CFG80211_DEFAULT_PS is not set +# CONFIG_CFG80211_INTERNAL_REGDB is not set +CONFIG_CFG80211_WEXT=y +CONFIG_WIRELESS_EXT_SYSFS=y +CONFIG_LIB80211=y +# CONFIG_LIB80211_DEBUG is not set +CONFIG_MAC80211=y +CONFIG_MAC80211_HAS_RC=y +# CONFIG_MAC80211_RC_PID is not set +CONFIG_MAC80211_RC_MINSTREL=y +CONFIG_MAC80211_RC_MINSTREL_HT=y +CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y +CONFIG_MAC80211_RC_DEFAULT="minstrel_ht" +# CONFIG_MAC80211_MESH is not set +CONFIG_MAC80211_LEDS=y +# CONFIG_MAC80211_DEBUG_MENU is not set +# CONFIG_WIMAX is not set +CONFIG_RFKILL=y +CONFIG_RFKILL_LEDS=y +CONFIG_RFKILL_INPUT=y +# CONFIG_NET_9P is not set +# CONFIG_CAIF is not set +# CONFIG_CEPH_LIB is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="" +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_STANDALONE=y +# CONFIG_PREVENT_FIRMWARE_BUILD is not set +CONFIG_FW_LOADER=y +CONFIG_FIRMWARE_IN_KERNEL=y +CONFIG_EXTRA_FIRMWARE="" +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +# CONFIG_MTD is not set +# CONFIG_PARPORT is not set +CONFIG_PNP=y +# CONFIG_PNP_DEBUG_MESSAGES is not set + +# +# Protocols +# +CONFIG_PNPACPI=y +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set + +# +# DRBD disabled because PROC_FS, INET or CONNECTOR not selected +# +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_SX8 is not set +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=4 +CONFIG_BLK_DEV_RAM_SIZE=4096 +# CONFIG_BLK_DEV_XIP is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +# CONFIG_BLK_DEV_HD is not set +# CONFIG_BLK_DEV_RBD is not set +# CONFIG_MISC_DEVICES is not set +CONFIG_HAVE_IDE=y +# CONFIG_IDE is not set + +# +# SCSI device support +# +CONFIG_SCSI_MOD=y +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_SCSI_PROC_FS is not set + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +CONFIG_BLK_DEV_SR=y +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_CHR_DEV_SG=y +# CONFIG_CHR_DEV_SCH is not set +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set +# CONFIG_SCSI_LOWLEVEL is not set +# CONFIG_SCSI_DH is not set +# CONFIG_SCSI_OSD_INITIATOR is not set +CONFIG_ATA=y +# CONFIG_ATA_NONSTANDARD is not set +# CONFIG_ATA_VERBOSE_ERROR is not set +CONFIG_ATA_ACPI=y +# CONFIG_SATA_PMP is not set + +# +# Controllers with non-SFF native interface +# +# CONFIG_SATA_AHCI is not set +# CONFIG_SATA_AHCI_PLATFORM is not set +# CONFIG_SATA_INIC162X is not set +# CONFIG_SATA_SIL24 is not set +CONFIG_ATA_SFF=y + +# +# SFF controllers with custom DMA interface +# +# CONFIG_PDC_ADMA is not set +# CONFIG_SATA_QSTOR is not set +# CONFIG_SATA_SX4 is not set +CONFIG_ATA_BMDMA=y + +# +# SATA SFF controllers with BMDMA +# +CONFIG_ATA_PIIX=y +# CONFIG_SATA_MV is not set +# CONFIG_SATA_NV is not set +# CONFIG_SATA_PROMISE is not set +# CONFIG_SATA_SIL is not set +# CONFIG_SATA_SIS is not set +# CONFIG_SATA_SVW is not set +# CONFIG_SATA_ULI is not set +# CONFIG_SATA_VIA is not set +# CONFIG_SATA_VITESSE is not set + +# +# PATA SFF controllers with BMDMA +# +# CONFIG_PATA_ALI is not set +# CONFIG_PATA_AMD is not set +# CONFIG_PATA_ARTOP is not set +# CONFIG_PATA_ATIIXP is not set +# CONFIG_PATA_ATP867X is not set +# CONFIG_PATA_CMD64X is not set +# CONFIG_PATA_CS5520 is not set +# CONFIG_PATA_CS5530 is not set +# CONFIG_PATA_CS5535 is not set +# CONFIG_PATA_CS5536 is not set +# CONFIG_PATA_CYPRESS is not set +# CONFIG_PATA_EFAR is not set +# CONFIG_PATA_HPT366 is not set +# CONFIG_PATA_HPT37X is not set +# CONFIG_PATA_HPT3X2N is not set +# CONFIG_PATA_HPT3X3 is not set +# CONFIG_PATA_IT8213 is not set +# CONFIG_PATA_IT821X is not set +# CONFIG_PATA_JMICRON is not set +# CONFIG_PATA_MARVELL is not set +# CONFIG_PATA_NETCELL is not set +# CONFIG_PATA_NINJA32 is not set +# CONFIG_PATA_NS87415 is not set +# CONFIG_PATA_OLDPIIX is not set +# CONFIG_PATA_OPTIDMA is not set +# CONFIG_PATA_PDC2027X is not set +# CONFIG_PATA_PDC_OLD is not set +# CONFIG_PATA_RADISYS is not set +# CONFIG_PATA_RDC is not set +# CONFIG_PATA_SC1200 is not set +# CONFIG_PATA_SCH is not set +# CONFIG_PATA_SERVERWORKS is not set +# CONFIG_PATA_SIL680 is not set +# CONFIG_PATA_SIS is not set +# CONFIG_PATA_TOSHIBA is not set +# CONFIG_PATA_TRIFLEX is not set +# CONFIG_PATA_VIA is not set +# CONFIG_PATA_WINBOND is not set + +# +# PIO-only SFF controllers +# +# CONFIG_PATA_CMD640_PCI is not set +# CONFIG_PATA_MPIIX is not set +# CONFIG_PATA_NS87410 is not set +# CONFIG_PATA_OPTI is not set +# CONFIG_PATA_PLATFORM is not set +# CONFIG_PATA_RZ1000 is not set + +# +# Generic fallback / legacy drivers +# +CONFIG_PATA_ACPI=y +# CONFIG_ATA_GENERIC is not set +# CONFIG_PATA_LEGACY is not set +# CONFIG_MD is not set +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# +CONFIG_FIREWIRE=m +CONFIG_FIREWIRE_OHCI=m +CONFIG_FIREWIRE_OHCI_DEBUG=y +CONFIG_FIREWIRE_SBP2=m +# CONFIG_FIREWIRE_NET is not set +# CONFIG_FIREWIRE_NOSY is not set +# CONFIG_I2O is not set +# CONFIG_MACINTOSH_DRIVERS is not set +CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_VETH is not set +# CONFIG_NET_SB1000 is not set +# CONFIG_ARCNET is not set +CONFIG_MII=y +# CONFIG_PHYLIB is not set +CONFIG_NET_ETHERNET=y +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_CASSINI is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_ETHOC is not set +# CONFIG_DNET is not set +# CONFIG_NET_TULIP is not set +# CONFIG_HP100 is not set +# CONFIG_IBM_NEW_EMAC_ZMII is not set +# CONFIG_IBM_NEW_EMAC_RGMII is not set +# CONFIG_IBM_NEW_EMAC_TAH is not set +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set +# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set +# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set +# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set +CONFIG_NET_PCI=y +# CONFIG_PCNET32 is not set +# CONFIG_AMD8111_ETH is not set +# CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_KSZ884X_PCI is not set +# CONFIG_B44 is not set +# CONFIG_FORCEDETH is not set +# CONFIG_E100 is not set +# CONFIG_FEALNX is not set +# CONFIG_NATSEMI is not set +# CONFIG_NE2K_PCI is not set +# CONFIG_8139CP is not set +CONFIG_8139TOO=y +CONFIG_8139TOO_PIO=y +# CONFIG_8139TOO_TUNE_TWISTER is not set +# CONFIG_8139TOO_8129 is not set +# CONFIG_8139_OLD_RX_RESET is not set +# CONFIG_R6040 is not set +# CONFIG_SIS900 is not set +# CONFIG_EPIC100 is not set +# CONFIG_SMSC9420 is not set +# CONFIG_SUNDANCE is not set +# CONFIG_TLAN is not set +# CONFIG_KS8851_MLL is not set +# CONFIG_VIA_RHINE is not set +# CONFIG_SC92031 is not set +# CONFIG_ATL2 is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set +# CONFIG_TR is not set +CONFIG_WLAN=y +# CONFIG_LIBERTAS_THINFIRM is not set +# CONFIG_AIRO is not set +# CONFIG_ATMEL is not set +# CONFIG_AT76C50X_USB is not set +# CONFIG_PRISM54 is not set +# CONFIG_USB_ZD1201 is not set +# CONFIG_USB_NET_RNDIS_WLAN is not set +# CONFIG_RTL8180 is not set +# CONFIG_RTL8187 is not set +# CONFIG_ADM8211 is not set +# CONFIG_MAC80211_HWSIM is not set +# CONFIG_MWL8K is not set +# CONFIG_ATH_COMMON is not set +CONFIG_B43=m +CONFIG_B43_PCI_AUTOSELECT=y +CONFIG_B43_PCICORE_AUTOSELECT=y +CONFIG_B43_PIO=y +CONFIG_B43_PHY_LP=y +CONFIG_B43_LEDS=y +# CONFIG_B43_DEBUG is not set +# CONFIG_B43LEGACY is not set +# CONFIG_HOSTAP is not set +# CONFIG_IPW2100 is not set +# CONFIG_IPW2200 is not set +# CONFIG_IWLWIFI is not set +# CONFIG_LIBERTAS is not set +# CONFIG_HERMES is not set +# CONFIG_P54_COMMON is not set +# CONFIG_RT2X00 is not set +# CONFIG_WL1251 is not set +# CONFIG_WL12XX is not set +# CONFIG_ZD1211RW is not set + +# +# Enable WiMAX (Networking options) to see the WiMAX drivers +# + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET is not set +# CONFIG_USB_HSO is not set +# CONFIG_USB_IPHETH is not set +# CONFIG_WAN is not set + +# +# CAIF transport drivers +# +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_NET_FC is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set +# CONFIG_ISDN is not set +# CONFIG_PHONE is not set + +# +# Input device support +# +CONFIG_INPUT=y +CONFIG_INPUT_FF_MEMLESS=y +# CONFIG_INPUT_POLLDEV is not set +# CONFIG_INPUT_SPARSEKMAP is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ADP5588 is not set +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_QT2160 is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_TCA6416 is not set +# CONFIG_KEYBOARD_LM8323 is not set +# CONFIG_KEYBOARD_MAX7359 is not set +# CONFIG_KEYBOARD_MCS is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_OPENCORES is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=y +CONFIG_MOUSE_PS2_ALPS=y +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +CONFIG_MOUSE_PS2_LIFEBOOK=y +CONFIG_MOUSE_PS2_TRACKPOINT=y +# CONFIG_MOUSE_PS2_ELANTECH is not set +# CONFIG_MOUSE_PS2_SENTELIC is not set +# CONFIG_MOUSE_PS2_TOUCHKIT is not set +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_APPLETOUCH is not set +# CONFIG_MOUSE_BCM5974 is not set +# CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_MOUSE_SYNAPTICS_I2C is not set +CONFIG_INPUT_JOYSTICK=y +# CONFIG_JOYSTICK_ANALOG is not set +# CONFIG_JOYSTICK_A3D is not set +# CONFIG_JOYSTICK_ADI is not set +# CONFIG_JOYSTICK_COBRA is not set +# CONFIG_JOYSTICK_GF2K is not set +# CONFIG_JOYSTICK_GRIP is not set +# CONFIG_JOYSTICK_GRIP_MP is not set +# CONFIG_JOYSTICK_GUILLEMOT is not set +# CONFIG_JOYSTICK_INTERACT is not set +# CONFIG_JOYSTICK_SIDEWINDER is not set +# CONFIG_JOYSTICK_TMDC is not set +# CONFIG_JOYSTICK_IFORCE is not set +# CONFIG_JOYSTICK_WARRIOR is not set +# CONFIG_JOYSTICK_MAGELLAN is not set +# CONFIG_JOYSTICK_SPACEORB is not set +# CONFIG_JOYSTICK_SPACEBALL is not set +# CONFIG_JOYSTICK_STINGER is not set +# CONFIG_JOYSTICK_TWIDJOY is not set +# CONFIG_JOYSTICK_ZHENHUA is not set +# CONFIG_JOYSTICK_JOYDUMP is not set +CONFIG_JOYSTICK_XPAD=m +CONFIG_JOYSTICK_XPAD_FF=y +CONFIG_JOYSTICK_XPAD_LEDS=y +# CONFIG_INPUT_TABLET is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_AD714X is not set +# CONFIG_INPUT_APANEL is not set +# CONFIG_INPUT_WISTRON_BTNS is not set +# CONFIG_INPUT_ATLAS_BTNS is not set +# CONFIG_INPUT_ATI_REMOTE is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +CONFIG_INPUT_APPLEIR=y +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +# CONFIG_INPUT_CM109 is not set +CONFIG_INPUT_UINPUT=y +# CONFIG_INPUT_WINBOND_CIR is not set +# CONFIG_INPUT_PCF8574 is not set +# CONFIG_INPUT_ADXL34X is not set + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +# CONFIG_SERIO_SERPORT is not set +# CONFIG_SERIO_CT82C710 is not set +# CONFIG_SERIO_PCIPS2 is not set +CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_RAW is not set +# CONFIG_SERIO_ALTERA_PS2 is not set +# CONFIG_SERIO_PS2MULT is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_CONSOLE_TRANSLATIONS=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +CONFIG_VT_HW_CONSOLE_BINDING=y +# CONFIG_DEVKMEM is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_N_GSM is not set +# CONFIG_NOZOMI is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +# CONFIG_SERIAL_8250_CONSOLE is not set +CONFIG_FIX_EARLYCON_MEM=y +CONFIG_SERIAL_8250_PCI=y +# CONFIG_SERIAL_8250_PNP is not set +CONFIG_SERIAL_8250_NR_UARTS=4 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +# CONFIG_SERIAL_MFD_HSU is not set +CONFIG_SERIAL_CORE=y +# CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_TIMBERDALE is not set +# CONFIG_SERIAL_ALTERA_JTAGUART is not set +# CONFIG_SERIAL_ALTERA_UART is not set +CONFIG_UNIX98_PTYS=y +# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set +# CONFIG_LEGACY_PTYS is not set +# CONFIG_TTY_PRINTK is not set +# CONFIG_IPMI_HANDLER is not set +# CONFIG_HW_RANDOM is not set +CONFIG_NVRAM=y +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_SONYPI is not set +# CONFIG_MWAVE is not set +# CONFIG_PC8736x_GPIO is not set +# CONFIG_NSC_GPIO is not set +# CONFIG_CS5535_GPIO is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_HPET is not set +# CONFIG_HANGCHECK_TIMER is not set +# CONFIG_TCG_TPM is not set +# CONFIG_TELCLOCK is not set +CONFIG_DEVPORT=y +# CONFIG_RAMOOPS is not set +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +# CONFIG_I2C_COMPAT is not set +CONFIG_I2C_CHARDEV=m +# CONFIG_I2C_MUX is not set +CONFIG_I2C_HELPER_AUTO=y +CONFIG_I2C_ALGOBIT=y + +# +# I2C Hardware Bus support +# + +# +# PC SMBus host controller drivers +# +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +CONFIG_I2C_I801=y +# CONFIG_I2C_ISCH is not set +# CONFIG_I2C_PIIX4 is not set +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set + +# +# ACPI drivers +# +# CONFIG_I2C_SCMI is not set + +# +# I2C system bus drivers (mostly embedded / system-on-chip) +# +# CONFIG_I2C_INTEL_MID is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PCA_PLATFORM is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set + +# +# External I2C/SMBus adapter drivers +# +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Other I2C/SMBus bus drivers +# +# CONFIG_I2C_STUB is not set +# CONFIG_SCx200_ACB is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_SPI is not set + +# +# PPS support +# +# CONFIG_PPS is not set +CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y +# CONFIG_GPIOLIB is not set +# CONFIG_W1 is not set +CONFIG_POWER_SUPPLY=y +# CONFIG_POWER_SUPPLY_DEBUG is not set +# CONFIG_PDA_POWER is not set +# CONFIG_TEST_POWER is not set +# CONFIG_BATTERY_DS2782 is not set +# CONFIG_BATTERY_BQ20Z75 is not set +# CONFIG_BATTERY_BQ27x00 is not set +# CONFIG_BATTERY_MAX17040 is not set +# CONFIG_HWMON is not set +CONFIG_THERMAL=y +# CONFIG_WATCHDOG is not set +CONFIG_SSB_POSSIBLE=y + +# +# Sonics Silicon Backplane +# +CONFIG_SSB=m +CONFIG_SSB_SPROM=y +CONFIG_SSB_BLOCKIO=y +CONFIG_SSB_PCIHOST_POSSIBLE=y +CONFIG_SSB_PCIHOST=y +CONFIG_SSB_B43_PCI_BRIDGE=y +# CONFIG_SSB_SILENT is not set +# CONFIG_SSB_DEBUG is not set +CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y +CONFIG_SSB_DRIVER_PCICORE=y +# CONFIG_MFD_SUPPORT is not set +# CONFIG_REGULATOR is not set +CONFIG_MEDIA_SUPPORT=m + +# +# Multimedia core support +# +# CONFIG_VIDEO_DEV is not set +# CONFIG_DVB_CORE is not set +# CONFIG_VIDEO_MEDIA is not set + +# +# Multimedia drivers +# +CONFIG_IR_CORE=m +CONFIG_VIDEO_IR=m +CONFIG_LIRC=m +CONFIG_RC_MAP=m +CONFIG_IR_NEC_DECODER=m +CONFIG_IR_RC5_DECODER=m +CONFIG_IR_RC6_DECODER=m +CONFIG_IR_JVC_DECODER=m +CONFIG_IR_SONY_DECODER=m +CONFIG_IR_RC5_SZ_DECODER=m +# CONFIG_IR_LIRC_CODEC is not set +# CONFIG_IR_ENE is not set +# CONFIG_IR_IMON is not set +CONFIG_IR_MCEUSB=m +# CONFIG_IR_NUVOTON is not set +# CONFIG_IR_STREAMZAP is not set +# CONFIG_DAB is not set + +# +# Graphics support +# +CONFIG_AGP=y +# CONFIG_AGP_ALI is not set +# CONFIG_AGP_ATI is not set +# CONFIG_AGP_AMD is not set +CONFIG_AGP_INTEL=y +# CONFIG_AGP_NVIDIA is not set +# CONFIG_AGP_SIS is not set +# CONFIG_AGP_SWORKS is not set +# CONFIG_AGP_VIA is not set +# CONFIG_AGP_EFFICEON is not set +CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=1 +# CONFIG_VGA_SWITCHEROO is not set +CONFIG_DRM=y +CONFIG_DRM_KMS_HELPER=y +CONFIG_DRM_TTM=y +# CONFIG_DRM_TDFX is not set +# CONFIG_DRM_R128 is not set +# CONFIG_DRM_RADEON is not set +# CONFIG_DRM_MGA is not set +# CONFIG_DRM_SIS is not set +# CONFIG_DRM_VIA is not set +# CONFIG_DRM_SAVAGE is not set +# CONFIG_STUB_POULSBO is not set +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=y +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +# CONFIG_FB_BOOT_VESA_SUPPORT is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_FOREIGN_ENDIAN is not set +# CONFIG_FB_SYS_FOPS is not set +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +CONFIG_FB_BACKLIGHT=y +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_CIRRUS is not set +# CONFIG_FB_PM2 is not set +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_ARC is not set +# CONFIG_FB_ASILIANT is not set +# CONFIG_FB_IMSTT is not set +# CONFIG_FB_VGA16 is not set +# CONFIG_FB_VESA is not set +# CONFIG_FB_EFI is not set +# CONFIG_FB_N411 is not set +# CONFIG_FB_HGA is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_NVIDIA is not set +# CONFIG_FB_RIVA is not set +# CONFIG_FB_I810 is not set +# CONFIG_FB_LE80578 is not set +# CONFIG_FB_INTEL is not set +# CONFIG_FB_MATROX is not set +# CONFIG_FB_RADEON is not set +# CONFIG_FB_ATY128 is not set +# CONFIG_FB_ATY is not set +# CONFIG_FB_S3 is not set +# CONFIG_FB_SAVAGE is not set +# CONFIG_FB_SIS is not set +# CONFIG_FB_VIA is not set +# CONFIG_FB_NEOMAGIC is not set +# CONFIG_FB_KYRO is not set +# CONFIG_FB_3DFX is not set +# CONFIG_FB_VOODOO1 is not set +# CONFIG_FB_VT8623 is not set +# CONFIG_FB_TRIDENT is not set +# CONFIG_FB_ARK is not set +# CONFIG_FB_PM3 is not set +# CONFIG_FB_CARMINE is not set +# CONFIG_FB_GEODE is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FB_METRONOME is not set +# CONFIG_FB_MB862XX is not set +# CONFIG_FB_BROADSHEET is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_GENERIC is not set +# CONFIG_BACKLIGHT_PROGEAR is not set +# CONFIG_BACKLIGHT_MBP_NVIDIA is not set +# CONFIG_BACKLIGHT_SAHARA is not set +# CONFIG_BACKLIGHT_ADP8860 is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +CONFIG_VGA_CONSOLE=y +CONFIG_VGACON_SOFT_SCROLLBACK=y +CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=256 +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE is not set +# CONFIG_LOGO is not set +CONFIG_SOUND=y +# CONFIG_SOUND_OSS_CORE is not set +CONFIG_SND=y +CONFIG_SND_TIMER=y +CONFIG_SND_PCM=y +CONFIG_SND_HWDEP=y +# CONFIG_SND_SEQUENCER is not set +# CONFIG_SND_MIXER_OSS is not set +# CONFIG_SND_PCM_OSS is not set +# CONFIG_SND_HRTIMER is not set +CONFIG_SND_DYNAMIC_MINORS=y +# CONFIG_SND_SUPPORT_OLD_API is not set +# CONFIG_SND_VERBOSE_PROCFS is not set +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set +CONFIG_SND_VMASTER=y +CONFIG_SND_DMA_SGBUF=y +# CONFIG_SND_RAWMIDI_SEQ is not set +# CONFIG_SND_OPL3_LIB_SEQ is not set +# CONFIG_SND_OPL4_LIB_SEQ is not set +# CONFIG_SND_SBAWE_SEQ is not set +# CONFIG_SND_EMU10K1_SEQ is not set +# CONFIG_SND_DRIVERS is not set +CONFIG_SND_PCI=y +# CONFIG_SND_AD1889 is not set +# CONFIG_SND_ALS300 is not set +# CONFIG_SND_ALS4000 is not set +# CONFIG_SND_ALI5451 is not set +# CONFIG_SND_ASIHPI is not set +# CONFIG_SND_ATIIXP is not set +# CONFIG_SND_ATIIXP_MODEM is not set +# CONFIG_SND_AU8810 is not set +# CONFIG_SND_AU8820 is not set +# CONFIG_SND_AU8830 is not set +# CONFIG_SND_AW2 is not set +# CONFIG_SND_AZT3328 is not set +# CONFIG_SND_BT87X is not set +# CONFIG_SND_CA0106 is not set +# CONFIG_SND_CMIPCI is not set +# CONFIG_SND_OXYGEN is not set +# CONFIG_SND_CS4281 is not set +# CONFIG_SND_CS46XX is not set +# CONFIG_SND_CS5530 is not set +# CONFIG_SND_CS5535AUDIO is not set +# CONFIG_SND_CTXFI is not set +# CONFIG_SND_DARLA20 is not set +# CONFIG_SND_GINA20 is not set +# CONFIG_SND_LAYLA20 is not set +# CONFIG_SND_DARLA24 is not set +# CONFIG_SND_GINA24 is not set +# CONFIG_SND_LAYLA24 is not set +# CONFIG_SND_MONA is not set +# CONFIG_SND_MIA is not set +# CONFIG_SND_ECHO3G is not set +# CONFIG_SND_INDIGO is not set +# CONFIG_SND_INDIGOIO is not set +# CONFIG_SND_INDIGODJ is not set +# CONFIG_SND_INDIGOIOX is not set +# CONFIG_SND_INDIGODJX is not set +# CONFIG_SND_EMU10K1 is not set +# CONFIG_SND_EMU10K1X is not set +# CONFIG_SND_ENS1370 is not set +# CONFIG_SND_ENS1371 is not set +# CONFIG_SND_ES1938 is not set +# CONFIG_SND_ES1968 is not set +# CONFIG_SND_FM801 is not set +CONFIG_SND_HDA_INTEL=y +CONFIG_SND_HDA_HWDEP=y +# CONFIG_SND_HDA_RECONFIG is not set +# CONFIG_SND_HDA_INPUT_BEEP is not set +# CONFIG_SND_HDA_INPUT_JACK is not set +# CONFIG_SND_HDA_PATCH_LOADER is not set +CONFIG_SND_HDA_CODEC_REALTEK=y +# CONFIG_SND_HDA_CODEC_ANALOG is not set +# CONFIG_SND_HDA_CODEC_SIGMATEL is not set +# CONFIG_SND_HDA_CODEC_VIA is not set +CONFIG_SND_HDA_CODEC_HDMI=y +# CONFIG_SND_HDA_CODEC_CIRRUS is not set +# CONFIG_SND_HDA_CODEC_CONEXANT is not set +# CONFIG_SND_HDA_CODEC_CA0110 is not set +# CONFIG_SND_HDA_CODEC_CMEDIA is not set +# CONFIG_SND_HDA_CODEC_SI3054 is not set +CONFIG_SND_HDA_GENERIC=y +CONFIG_SND_HDA_POWER_SAVE=y +CONFIG_SND_HDA_POWER_SAVE_DEFAULT=5 +# CONFIG_SND_HDSP is not set +# CONFIG_SND_HDSPM is not set +# CONFIG_SND_HIFIER is not set +# CONFIG_SND_ICE1712 is not set +# CONFIG_SND_ICE1724 is not set +# CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_INTEL8X0M is not set +# CONFIG_SND_KORG1212 is not set +# CONFIG_SND_LX6464ES is not set +# CONFIG_SND_MAESTRO3 is not set +# CONFIG_SND_MIXART is not set +# CONFIG_SND_NM256 is not set +# CONFIG_SND_PCXHR is not set +# CONFIG_SND_RIPTIDE is not set +# CONFIG_SND_RME32 is not set +# CONFIG_SND_RME96 is not set +# CONFIG_SND_RME9652 is not set +# CONFIG_SND_SIS7019 is not set +# CONFIG_SND_SONICVIBES is not set +# CONFIG_SND_TRIDENT is not set +# CONFIG_SND_VIA82XX is not set +# CONFIG_SND_VIA82XX_MODEM is not set +# CONFIG_SND_VIRTUOSO is not set +# CONFIG_SND_VX222 is not set +# CONFIG_SND_YMFPCI is not set +# CONFIG_SND_USB is not set +# CONFIG_SND_SOC is not set +# CONFIG_SOUND_PRIME is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +CONFIG_HIDRAW=y + +# +# USB Input Devices +# +CONFIG_USB_HID=y +# CONFIG_HID_PID is not set +CONFIG_USB_HIDDEV=y + +# +# Special HID drivers +# +# CONFIG_HID_3M_PCT is not set +# CONFIG_HID_A4TECH is not set +# CONFIG_HID_ACRUX_FF is not set +CONFIG_HID_APPLE=y +CONFIG_HID_AUREAL=y +# CONFIG_HID_BELKIN is not set +# CONFIG_HID_CANDO is not set +# CONFIG_HID_CHERRY is not set +# CONFIG_HID_CHICONY is not set +# CONFIG_HID_PRODIKEYS is not set +# CONFIG_HID_CYPRESS is not set +# CONFIG_HID_DRAGONRISE is not set +# CONFIG_HID_EGALAX is not set +# CONFIG_HID_EZKEY is not set +# CONFIG_HID_KYE is not set +# CONFIG_HID_UCLOGIC is not set +# CONFIG_HID_WALTOP is not set +# CONFIG_HID_GYRATION is not set +CONFIG_HID_TWINHAN=y +# CONFIG_HID_KENSINGTON is not set +CONFIG_HID_LOGITECH=y +CONFIG_LOGITECH_FF=y +CONFIG_LOGIRUMBLEPAD2_FF=y +CONFIG_LOGIG940_FF=y +CONFIG_LOGIWII_FF=y +CONFIG_HID_MICROSOFT=y +# CONFIG_HID_MOSART is not set +# CONFIG_HID_MONTEREY is not set +# CONFIG_HID_NTRIG is not set +# CONFIG_HID_ORTEK is not set +# CONFIG_HID_PANTHERLORD is not set +# CONFIG_HID_PETALYNX is not set +# CONFIG_HID_PICOLCD is not set +# CONFIG_HID_QUANTA is not set +# CONFIG_HID_ROCCAT is not set +# CONFIG_HID_ROCCAT_KONE is not set +# CONFIG_HID_ROCCAT_PYRA is not set +# CONFIG_HID_SAMSUNG is not set +CONFIG_HID_SONY=y +# CONFIG_HID_STANTUM is not set +CONFIG_HID_SUNPLUS=y +# CONFIG_HID_GREENASIA is not set +# CONFIG_HID_SMARTJOYPLUS is not set +CONFIG_HID_TOPSEED=y +# CONFIG_HID_THRUSTMASTER is not set +# CONFIG_HID_ZEROPLUS is not set +# CONFIG_HID_ZYDACRON is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +CONFIG_USB_ARCH_HAS_EHCI=y +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set +# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set + +# +# Miscellaneous USB options +# +# CONFIG_USB_DEVICEFS is not set +# CONFIG_USB_DEVICE_CLASS is not set +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_OTG_WHITELIST is not set +# CONFIG_USB_OTG_BLACKLIST_HUB is not set +# CONFIG_USB_MON is not set +# CONFIG_USB_WUSB is not set +# CONFIG_USB_WUSB_CBAF is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_C67X00_HCD is not set +# CONFIG_USB_XHCI_HCD is not set +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_ROOT_HUB_TT=y +# CONFIG_USB_EHCI_TT_NEWSCHED is not set +# CONFIG_USB_OXU210HP_HCD is not set +# CONFIG_USB_ISP116X_HCD is not set +# CONFIG_USB_ISP1760_HCD is not set +# CONFIG_USB_ISP1362_HCD is not set +# CONFIG_USB_OHCI_HCD is not set +CONFIG_USB_UHCI_HCD=y +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set +# CONFIG_USB_WHCI_HCD is not set +# CONFIG_USB_HWA_HCD is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set +# CONFIG_USB_WDM is not set +# CONFIG_USB_TMC is not set + +# +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may +# + +# +# also be needed; see USB_STORAGE Help for more info +# +CONFIG_USB_STORAGE=y +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_ONETOUCH is not set +# CONFIG_USB_STORAGE_KARMA is not set +# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set +# CONFIG_USB_UAS is not set +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set + +# +# USB port drivers +# +CONFIG_USB_SERIAL=m +# CONFIG_USB_EZUSB is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_AIRCABLE is not set +# CONFIG_USB_SERIAL_ARK3116 is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_CH341 is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_CP210X is not set +# CONFIG_USB_SERIAL_CYPRESS_M8 is not set +# CONFIG_USB_SERIAL_EMPEG is not set +CONFIG_USB_SERIAL_FTDI_SIO=m +# CONFIG_USB_SERIAL_FUNSOFT is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IPAQ is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_EDGEPORT_TI is not set +# CONFIG_USB_SERIAL_GARMIN is not set +# CONFIG_USB_SERIAL_IPW is not set +# CONFIG_USB_SERIAL_IUU is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KLSI is not set +# CONFIG_USB_SERIAL_KOBIL_SCT is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_MOS7720 is not set +# CONFIG_USB_SERIAL_MOS7840 is not set +# CONFIG_USB_SERIAL_MOTOROLA is not set +# CONFIG_USB_SERIAL_NAVMAN is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_OTI6858 is not set +# CONFIG_USB_SERIAL_QCAUX is not set +# CONFIG_USB_SERIAL_QUALCOMM is not set +# CONFIG_USB_SERIAL_SPCP8X5 is not set +# CONFIG_USB_SERIAL_HP4X is not set +# CONFIG_USB_SERIAL_SAFE is not set +# CONFIG_USB_SERIAL_SAMBA is not set +# CONFIG_USB_SERIAL_SIEMENS_MPI is not set +# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set +# CONFIG_USB_SERIAL_SYMBOL is not set +# CONFIG_USB_SERIAL_TI is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OPTION is not set +# CONFIG_USB_SERIAL_OMNINET is not set +# CONFIG_USB_SERIAL_OPTICON is not set +# CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set +# CONFIG_USB_SERIAL_ZIO is not set +# CONFIG_USB_SERIAL_SSU100 is not set +# CONFIG_USB_SERIAL_DEBUG is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_SEVSEG is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_SISUSBVGA is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set +# CONFIG_USB_ISIGHTFW is not set +# CONFIG_USB_YUREX is not set +# CONFIG_USB_GADGET is not set + +# +# OTG and related infrastructure +# +# CONFIG_NOP_USB_XCEIV is not set +# CONFIG_UWB is not set +# CONFIG_MMC is not set +# CONFIG_MEMSTICK is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +# CONFIG_LEDS_ALIX2 is not set +# CONFIG_LEDS_PCA9532 is not set +# CONFIG_LEDS_LP3944 is not set +# CONFIG_LEDS_LP5521 is not set +# CONFIG_LEDS_LP5523 is not set +# CONFIG_LEDS_CLEVO_MAIL is not set +# CONFIG_LEDS_PCA955X is not set +# CONFIG_LEDS_BD2802 is not set +# CONFIG_LEDS_INTEL_SS4200 is not set +CONFIG_LEDS_TRIGGERS=y + +# +# LED Triggers +# +# CONFIG_LEDS_TRIGGER_TIMER is not set +# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set +# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set +# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set + +# +# iptables trigger is under Netfilter config (LED target) +# +# CONFIG_ACCESSIBILITY is not set +# CONFIG_INFINIBAND is not set +# CONFIG_EDAC is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1374 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_DS3232 is not set +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_ISL12022 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set +# CONFIG_RTC_DRV_BQ32K is not set +# CONFIG_RTC_DRV_S35390A is not set +# CONFIG_RTC_DRV_FM3130 is not set +# CONFIG_RTC_DRV_RX8581 is not set +# CONFIG_RTC_DRV_RX8025 is not set + +# +# SPI RTC drivers +# + +# +# Platform RTC drivers +# +CONFIG_RTC_DRV_CMOS=y +# CONFIG_RTC_DRV_DS1286 is not set +# CONFIG_RTC_DRV_DS1511 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T35 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_MSM6242 is not set +# CONFIG_RTC_DRV_BQ4802 is not set +# CONFIG_RTC_DRV_RP5C01 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +# CONFIG_DMADEVICES is not set +# CONFIG_AUXDISPLAY is not set +# CONFIG_UIO is not set +CONFIG_STAGING=y +# CONFIG_STAGING_EXCLUDE_BUILD is not set +# CONFIG_W35UND is not set +# CONFIG_PRISM2_USB is not set +# CONFIG_ECHO is not set +# CONFIG_BRCM80211 is not set +# CONFIG_RT2860 is not set +# CONFIG_RT2870 is not set +# CONFIG_COMEDI is not set +# CONFIG_ASUS_OLED is not set +# CONFIG_R8187SE is not set +# CONFIG_RTL8192U is not set +# CONFIG_RTL8192E is not set +# CONFIG_R8712U is not set +# CONFIG_TRANZPORT is not set +# CONFIG_POHMELFS is not set +# CONFIG_IDE_PHISON is not set +# CONFIG_LINE6_USB is not set +# CONFIG_DRM_VMWGFX is not set +CONFIG_DRM_NOUVEAU=y +CONFIG_DRM_NOUVEAU_BACKLIGHT=y + +# +# I2C encoder or helper chips +# +CONFIG_DRM_I2C_CH7006=m +CONFIG_DRM_I2C_SIL164=m +# CONFIG_USB_SERIAL_QUATECH2 is not set +# CONFIG_USB_SERIAL_QUATECH_USB2 is not set +# CONFIG_VT6655 is not set +# CONFIG_VT6656 is not set +# CONFIG_FB_UDL is not set +# CONFIG_HYPERV is not set +# CONFIG_VME_BUS is not set +# CONFIG_IIO is not set +# CONFIG_ZRAM is not set +# CONFIG_BATMAN_ADV is not set +# CONFIG_SAMSUNG_LAPTOP is not set +# CONFIG_FB_SM7XX is not set +# CONFIG_CRYSTALHD is not set + +# +# Texas Instruments shared transport line discipline +# +# CONFIG_FB_XGI is not set +# CONFIG_LIRC_STAGING is not set +# CONFIG_ACPI_QUICKSTART is not set +CONFIG_MACH_NO_WESTBRIDGE=y +# CONFIG_USB_ENESTORAGE is not set +# CONFIG_BCM_WIMAX is not set +# CONFIG_FT1000 is not set + +# +# Speakup console speech +# +# CONFIG_SPEAKUP is not set +# CONFIG_X86_PLATFORM_DEVICES is not set + +# +# Firmware Drivers +# +# CONFIG_EDD is not set +CONFIG_FIRMWARE_MEMMAP=y +# CONFIG_EFI_VARS is not set +# CONFIG_DELL_RBU is not set +# CONFIG_DCDBAS is not set +CONFIG_DMIID=y +# CONFIG_ISCSI_IBFT_FIND is not set + +# +# File systems +# +# CONFIG_EXT2_FS is not set +# CONFIG_EXT3_FS is not set +CONFIG_EXT4_FS=y +CONFIG_EXT4_USE_FOR_EXT23=y +# CONFIG_EXT4_FS_XATTR is not set +# CONFIG_EXT4_DEBUG is not set +CONFIG_JBD2=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y +CONFIG_DNOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_FANOTIFY is not set +# CONFIG_QUOTA is not set +# CONFIG_QUOTACTL is not set +CONFIG_AUTOFS4_FS=y +CONFIG_FUSE_FS=y +# CONFIG_CUSE is not set + +# +# Caches +# +# CONFIG_FSCACHE is not set + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=y +CONFIG_JOLIET=y +CONFIG_ZISOFS=y + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=y +# CONFIG_MSDOS_FS is not set +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="ascii" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_PROC_SYSCTL=y +CONFIG_PROC_PAGE_MONITOR=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLBFS is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set +CONFIG_MISC_FILESYSTEMS=y +# CONFIG_AFFS_FS is not set +# CONFIG_ECRYPT_FS is not set +# CONFIG_HFS_FS is not set +CONFIG_HFSPLUS_FS=y +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_LOGFS is not set +# CONFIG_CRAMFS is not set +CONFIG_SQUASHFS=y +CONFIG_SQUASHFS_XATTR=y +CONFIG_SQUASHFS_LZO=y +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +# CONFIG_VXFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_OMFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_SYSV_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +CONFIG_NFS_V4=y +# CONFIG_NFS_V4_1 is not set +# CONFIG_NFS_USE_LEGACY_DNS is not set +CONFIG_NFS_USE_KERNEL_DNS=y +# CONFIG_NFS_USE_NEW_IDMAPPER is not set +# CONFIG_NFSD is not set +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y +CONFIG_SUNRPC_GSS=y +CONFIG_RPCSEC_GSS_KRB5=y +# CONFIG_CEPH_FS is not set +CONFIG_CIFS=y +CONFIG_CIFS_STATS=y +CONFIG_CIFS_STATS2=y +# CONFIG_CIFS_WEAK_PW_HASH is not set +# CONFIG_CIFS_UPCALL is not set +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_DFS_UPCALL is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +CONFIG_MAC_PARTITION=y +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +CONFIG_LDM_PARTITION=y +# CONFIG_LDM_DEBUG is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +CONFIG_EFI_PARTITION=y +# CONFIG_SYSV68_PARTITION is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="utf8" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +CONFIG_NLS_ASCII=y +CONFIG_NLS_ISO8859_1=y +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +CONFIG_NLS_UTF8=y +# CONFIG_DLM is not set + +# +# Kernel hacking +# +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_PRINTK_TIME=y +# CONFIG_ENABLE_WARN_DEPRECATED is not set +# CONFIG_ENABLE_MUST_CHECK is not set +CONFIG_FRAME_WARN=1024 +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_STRIP_ASM_SYMS is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_HARDLOCKUP_DETECTOR is not set +# CONFIG_BKL is not set +# CONFIG_SPARSE_RCU_POINTER is not set +# CONFIG_DEBUG_MEMORY_INIT is not set +CONFIG_ARCH_WANT_FRAME_POINTERS=y +# CONFIG_FRAME_POINTER is not set +CONFIG_SYSCTL_SYSCALL_CHECK=y +CONFIG_USER_STACKTRACE_SUPPORT=y +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y +CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y +CONFIG_HAVE_C_RECORDMCOUNT=y +CONFIG_TRACING_SUPPORT=y +# CONFIG_FTRACE is not set +# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set +# CONFIG_FIREWIRE_OHCI_REMOTE_DMA is not set +# CONFIG_DMA_API_DEBUG is not set +# CONFIG_ATOMIC64_SELFTEST is not set +# CONFIG_SAMPLES is not set +CONFIG_HAVE_ARCH_KGDB=y +CONFIG_HAVE_ARCH_KMEMCHECK=y +CONFIG_STRICT_DEVMEM=y +# CONFIG_X86_VERBOSE_BOOTUP is not set +# CONFIG_EARLY_PRINTK is not set +CONFIG_DOUBLEFAULT=y +# CONFIG_IOMMU_STRESS is not set +CONFIG_HAVE_MMIOTRACE_SUPPORT=y +CONFIG_IO_DELAY_TYPE_0X80=0 +CONFIG_IO_DELAY_TYPE_0XED=1 +CONFIG_IO_DELAY_TYPE_UDELAY=2 +CONFIG_IO_DELAY_TYPE_NONE=3 +CONFIG_IO_DELAY_0X80=y +# CONFIG_IO_DELAY_0XED is not set +# CONFIG_IO_DELAY_UDELAY is not set +# CONFIG_IO_DELAY_NONE is not set +CONFIG_DEFAULT_IO_DELAY_TYPE=0 +CONFIG_OPTIMIZE_INLINING=y + +# +# Security options +# +CONFIG_KEYS=y +# CONFIG_KEYS_DEBUG_PROC_KEYS is not set +# CONFIG_SECURITY_DMESG_RESTRICT is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITYFS is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY="" +CONFIG_CRYPTO=y + +# +# Crypto core or helper +# +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_ALGAPI2=y +CONFIG_CRYPTO_AEAD2=y +CONFIG_CRYPTO_BLKCIPHER=y +CONFIG_CRYPTO_BLKCIPHER2=y +CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_HASH2=y +CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_PCOMP2=y +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_MANAGER2=y +CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y +# CONFIG_CRYPTO_GF128MUL is not set +# CONFIG_CRYPTO_NULL is not set +CONFIG_CRYPTO_WORKQUEUE=y +# CONFIG_CRYPTO_CRYPTD is not set +# CONFIG_CRYPTO_AUTHENC is not set +# CONFIG_CRYPTO_TEST is not set + +# +# Authenticated Encryption with Associated Data +# +# CONFIG_CRYPTO_CCM is not set +# CONFIG_CRYPTO_GCM is not set +# CONFIG_CRYPTO_SEQIV is not set + +# +# Block modes +# +CONFIG_CRYPTO_CBC=y +# CONFIG_CRYPTO_CTR is not set +# CONFIG_CRYPTO_CTS is not set +CONFIG_CRYPTO_ECB=y +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_PCBC is not set +# CONFIG_CRYPTO_XTS is not set + +# +# Hash modes +# +# CONFIG_CRYPTO_HMAC is not set +# CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_VMAC is not set + +# +# Digest +# +# CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_CRC32C_INTEL is not set +# CONFIG_CRYPTO_GHASH is not set +# CONFIG_CRYPTO_MD4 is not set +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_MICHAEL_MIC=y +# CONFIG_CRYPTO_RMD128 is not set +# CONFIG_CRYPTO_RMD160 is not set +# CONFIG_CRYPTO_RMD256 is not set +# CONFIG_CRYPTO_RMD320 is not set +# CONFIG_CRYPTO_SHA1 is not set +# CONFIG_CRYPTO_SHA256 is not set +# CONFIG_CRYPTO_SHA512 is not set +# CONFIG_CRYPTO_TGR192 is not set +# CONFIG_CRYPTO_WP512 is not set + +# +# Ciphers +# +CONFIG_CRYPTO_AES=y +# CONFIG_CRYPTO_AES_586 is not set +# CONFIG_CRYPTO_ANUBIS is not set +CONFIG_CRYPTO_ARC4=y +# CONFIG_CRYPTO_BLOWFISH is not set +# CONFIG_CRYPTO_CAMELLIA is not set +# CONFIG_CRYPTO_CAST5 is not set +# CONFIG_CRYPTO_CAST6 is not set +CONFIG_CRYPTO_DES=y +# CONFIG_CRYPTO_FCRYPT is not set +# CONFIG_CRYPTO_KHAZAD is not set +# CONFIG_CRYPTO_SALSA20 is not set +# CONFIG_CRYPTO_SALSA20_586 is not set +# CONFIG_CRYPTO_SEED is not set +# CONFIG_CRYPTO_SERPENT is not set +# CONFIG_CRYPTO_TEA is not set +# CONFIG_CRYPTO_TWOFISH is not set +# CONFIG_CRYPTO_TWOFISH_586 is not set + +# +# Compression +# +# CONFIG_CRYPTO_DEFLATE is not set +# CONFIG_CRYPTO_ZLIB is not set +# CONFIG_CRYPTO_LZO is not set + +# +# Random Number Generation +# +# CONFIG_CRYPTO_ANSI_CPRNG is not set +# CONFIG_CRYPTO_HW is not set +CONFIG_HAVE_KVM=y +# CONFIG_VIRTUALIZATION is not set +# CONFIG_BINARY_PRINTF is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_GENERIC_FIND_FIRST_BIT=y +CONFIG_GENERIC_FIND_NEXT_BIT=y +CONFIG_GENERIC_FIND_LAST_BIT=y +CONFIG_CRC_CCITT=m +CONFIG_CRC16=y +# CONFIG_CRC_T10DIF is not set +CONFIG_CRC_ITU_T=y +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y +CONFIG_NLATTR=y From cc3f8eb7bfeb852a22a1421ab80505bbcf08d1f0 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 00:13:44 +0100 Subject: [PATCH 398/850] xf86-video-nouveau: fix config Signed-off-by: Stephan Raue --- .../xf86-video-nouveau/config/xorg-nouveau.conf | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/packages/x11/driver/xf86-video-nouveau/config/xorg-nouveau.conf b/packages/x11/driver/xf86-video-nouveau/config/xorg-nouveau.conf index c07f22605d..e72d77d690 100644 --- a/packages/x11/driver/xf86-video-nouveau/config/xorg-nouveau.conf +++ b/packages/x11/driver/xf86-video-nouveau/config/xorg-nouveau.conf @@ -1,17 +1,3 @@ -Section "ServerLayout" - Identifier "Layout0" - Screen 0 "Screen0" -EndSection - -Section "Monitor" - Identifier "Monitor0" - VendorName "Unknown" - ModelName "Unknown" - HorizSync 28.0 - 33.0 - VertRefresh 43.0 - 72.0 - Option "DPMS" -EndSection - Section "Device" Identifier "Device0" Driver "nouveau" From 30542200df6c1ce572e9e44d2d03b7495ca1ae40 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 00:16:19 +0100 Subject: [PATCH 399/850] linux: add 'RFC-RFT-v3-sched-automated-per-tty-task-groups' patch Signed-off-by: Stephan Raue --- ...-sched-automated-per-tty-task-groups.patch | 359 ++++++++++++++++++ 1 file changed, 359 insertions(+) create mode 100644 packages/linux/patches/linux-2.6.37-rc2-120_RFC-RFT-v3-sched-automated-per-tty-task-groups.patch diff --git a/packages/linux/patches/linux-2.6.37-rc2-120_RFC-RFT-v3-sched-automated-per-tty-task-groups.patch b/packages/linux/patches/linux-2.6.37-rc2-120_RFC-RFT-v3-sched-automated-per-tty-task-groups.patch new file mode 100644 index 0000000000..25f948c4b8 --- /dev/null +++ b/packages/linux/patches/linux-2.6.37-rc2-120_RFC-RFT-v3-sched-automated-per-tty-task-groups.patch @@ -0,0 +1,359 @@ +Index: linux-2.6/include/linux/sched.h +=================================================================== +--- linux-2.6.orig/include/linux/sched.h ++++ linux-2.6/include/linux/sched.h +@@ -509,6 +509,8 @@ struct thread_group_cputimer { + spinlock_t lock; + }; + ++struct autogroup; ++ + /* + * NOTE! "signal_struct" does not have it's own + * locking, because a shared signal_struct always +@@ -576,6 +578,9 @@ struct signal_struct { + + struct tty_struct *tty; /* NULL if no tty */ + ++#ifdef CONFIG_SCHED_AUTOGROUP ++ struct autogroup *autogroup; ++#endif + /* + * Cumulative resource counters for dead threads in the group, + * and for reaped dead child processes forked by this group. +@@ -1931,6 +1936,20 @@ int sched_rt_handler(struct ctl_table *t + + extern unsigned int sysctl_sched_compat_yield; + ++#ifdef CONFIG_SCHED_AUTOGROUP ++extern unsigned int sysctl_sched_autogroup_enabled; ++ ++extern void sched_autogroup_create_attach(struct task_struct *p); ++extern void sched_autogroup_detach(struct task_struct *p); ++extern void sched_autogroup_fork(struct signal_struct *sig); ++extern void sched_autogroup_exit(struct signal_struct *sig); ++#else ++static inline void sched_autogroup_create_attach(struct task_struct *p) { } ++static inline void sched_autogroup_detach(struct task_struct *p) { } ++static inline void sched_autogroup_fork(struct signal_struct *sig) { } ++static inline void sched_autogroup_exit(struct signal_struct *sig) { } ++#endif ++ + #ifdef CONFIG_RT_MUTEXES + extern int rt_mutex_getprio(struct task_struct *p); + extern void rt_mutex_setprio(struct task_struct *p, int prio); +Index: linux-2.6/kernel/sched.c +=================================================================== +--- linux-2.6.orig/kernel/sched.c ++++ linux-2.6/kernel/sched.c +@@ -78,6 +78,7 @@ + + #include "sched_cpupri.h" + #include "workqueue_sched.h" ++#include "sched_autogroup.h" + + #define CREATE_TRACE_POINTS + #include +@@ -605,11 +606,14 @@ static inline int cpu_of(struct rq *rq) + */ + static inline struct task_group *task_group(struct task_struct *p) + { ++ struct task_group *tg; + struct cgroup_subsys_state *css; + + css = task_subsys_state_check(p, cpu_cgroup_subsys_id, + lockdep_is_held(&task_rq(p)->lock)); +- return container_of(css, struct task_group, css); ++ tg = container_of(css, struct task_group, css); ++ ++ return autogroup_task_group(p, tg); + } + + /* Change a task's cfs_rq and parent entity if it moves across CPUs/groups */ +@@ -2006,6 +2010,7 @@ static void sched_irq_time_avg_update(st + #include "sched_idletask.c" + #include "sched_fair.c" + #include "sched_rt.c" ++#include "sched_autogroup.c" + #include "sched_stoptask.c" + #ifdef CONFIG_SCHED_DEBUG + # include "sched_debug.c" +@@ -7979,7 +7984,7 @@ void __init sched_init(void) + #ifdef CONFIG_CGROUP_SCHED + list_add(&init_task_group.list, &task_groups); + INIT_LIST_HEAD(&init_task_group.children); +- ++ autogroup_init(&init_task); + #endif /* CONFIG_CGROUP_SCHED */ + + #if defined CONFIG_FAIR_GROUP_SCHED && defined CONFIG_SMP +Index: linux-2.6/kernel/fork.c +=================================================================== +--- linux-2.6.orig/kernel/fork.c ++++ linux-2.6/kernel/fork.c +@@ -174,8 +174,10 @@ static inline void free_signal_struct(st + + static inline void put_signal_struct(struct signal_struct *sig) + { +- if (atomic_dec_and_test(&sig->sigcnt)) ++ if (atomic_dec_and_test(&sig->sigcnt)) { ++ sched_autogroup_exit(sig); + free_signal_struct(sig); ++ } + } + + void __put_task_struct(struct task_struct *tsk) +@@ -904,6 +906,7 @@ static int copy_signal(unsigned long clo + posix_cpu_timers_init_group(sig); + + tty_audit_fork(sig); ++ sched_autogroup_fork(sig); + + sig->oom_adj = current->signal->oom_adj; + sig->oom_score_adj = current->signal->oom_score_adj; +Index: linux-2.6/drivers/tty/tty_io.c +=================================================================== +--- linux-2.6.orig/drivers/tty/tty_io.c ++++ linux-2.6/drivers/tty/tty_io.c +@@ -3160,6 +3160,7 @@ static void __proc_set_tty(struct task_s + put_pid(tsk->signal->tty_old_pgrp); + tsk->signal->tty = tty_kref_get(tty); + tsk->signal->tty_old_pgrp = NULL; ++ sched_autogroup_create_attach(tsk); + } + + static void proc_set_tty(struct task_struct *tsk, struct tty_struct *tty) +Index: linux-2.6/kernel/sched_autogroup.h +=================================================================== +--- /dev/null ++++ linux-2.6/kernel/sched_autogroup.h +@@ -0,0 +1,16 @@ ++#ifdef CONFIG_SCHED_AUTOGROUP ++ ++static inline struct task_group * ++autogroup_task_group(struct task_struct *p, struct task_group *tg); ++ ++#else /* !CONFIG_SCHED_AUTOGROUP */ ++ ++static inline void autogroup_init(struct task_struct *init_task) { } ++ ++static inline struct task_group * ++autogroup_task_group(struct task_struct *p, struct task_group *tg) ++{ ++ return tg; ++} ++ ++#endif /* CONFIG_SCHED_AUTOGROUP */ +Index: linux-2.6/kernel/sched_autogroup.c +=================================================================== +--- /dev/null ++++ linux-2.6/kernel/sched_autogroup.c +@@ -0,0 +1,150 @@ ++#ifdef CONFIG_SCHED_AUTOGROUP ++ ++unsigned int __read_mostly sysctl_sched_autogroup_enabled = 1; ++ ++struct autogroup { ++ struct kref kref; ++ struct task_group *tg; ++}; ++ ++static struct autogroup autogroup_default; ++ ++static void autogroup_init(struct task_struct *init_task) ++{ ++ autogroup_default.tg = &init_task_group; ++ kref_init(&autogroup_default.kref); ++ init_task->signal->autogroup = &autogroup_default; ++} ++ ++static inline void autogroup_destroy(struct kref *kref) ++{ ++ struct autogroup *ag = container_of(kref, struct autogroup, kref); ++ struct task_group *tg = ag->tg; ++ ++ kfree(ag); ++ sched_destroy_group(tg); ++} ++ ++static inline void autogroup_kref_put(struct autogroup *ag) ++{ ++ kref_put(&ag->kref, autogroup_destroy); ++} ++ ++static inline struct autogroup *autogroup_kref_get(struct autogroup *ag) ++{ ++ kref_get(&ag->kref); ++ return ag; ++} ++ ++static inline struct autogroup *autogroup_create(void) ++{ ++ struct autogroup *ag = kmalloc(sizeof(*ag), GFP_KERNEL); ++ ++ if (!ag) ++ goto out_fail; ++ ++ ag->tg = sched_create_group(&init_task_group); ++ kref_init(&ag->kref); ++ ++ if (!(IS_ERR(ag->tg))) ++ return ag; ++ ++out_fail: ++ if (ag) { ++ kfree(ag); ++ WARN_ON(1); ++ } else ++ WARN_ON(1); ++ ++ return autogroup_kref_get(&autogroup_default); ++} ++ ++static inline bool ++task_wants_autogroup(struct task_struct *p, struct task_group *tg) ++{ ++ if (tg != &root_task_group) ++ return false; ++ ++ if (p->sched_class != &fair_sched_class) ++ return false; ++ ++ if (p->flags & PF_EXITING) ++ return false; ++ ++ return true; ++} ++ ++static inline struct task_group * ++autogroup_task_group(struct task_struct *p, struct task_group *tg) ++{ ++ int enabled = ACCESS_ONCE(sysctl_sched_autogroup_enabled); ++ ++ if (enabled && task_wants_autogroup(p, tg)) ++ return p->signal->autogroup->tg; ++ ++ return tg; ++} ++ ++static void ++autogroup_move_group(struct task_struct *p, struct autogroup *ag) ++{ ++ struct autogroup *prev; ++ struct task_struct *t; ++ ++ prev = p->signal->autogroup; ++ if (prev == ag) ++ return; ++ ++ p->signal->autogroup = autogroup_kref_get(ag); ++ sched_move_task(p); ++ ++ rcu_read_lock(); ++ list_for_each_entry_rcu(t, &p->thread_group, thread_group) { ++ sched_move_task(t); ++ } ++ rcu_read_unlock(); ++ ++ autogroup_kref_put(prev); ++} ++ ++/* Must be called with siglock held */ ++void sched_autogroup_create_attach(struct task_struct *p) ++{ ++ struct autogroup *ag = autogroup_create(); ++ ++ autogroup_move_group(p, ag); ++ /* drop extra refrence added by autogroup_create() */ ++ autogroup_kref_put(ag); ++} ++EXPORT_SYMBOL(sched_autogroup_create_attach); ++ ++/* Must be called with siglock held. Currently has no users */ ++void sched_autogroup_detach(struct task_struct *p) ++{ ++ autogroup_move_group(p, &autogroup_default); ++} ++EXPORT_SYMBOL(sched_autogroup_detach); ++ ++void sched_autogroup_fork(struct signal_struct *sig) ++{ ++ struct sighand_struct *sighand = current->sighand; ++ ++ spin_lock(&sighand->siglock); ++ sig->autogroup = autogroup_kref_get(current->signal->autogroup); ++ spin_unlock(&sighand->siglock); ++} ++ ++void sched_autogroup_exit(struct signal_struct *sig) ++{ ++ autogroup_kref_put(sig->autogroup); ++} ++ ++static int __init setup_autogroup(char *str) ++{ ++ sysctl_sched_autogroup_enabled = 0; ++ ++ return 1; ++} ++ ++__setup("noautogroup", setup_autogroup); ++#endif +Index: linux-2.6/kernel/sysctl.c +=================================================================== +--- linux-2.6.orig/kernel/sysctl.c ++++ linux-2.6/kernel/sysctl.c +@@ -382,6 +382,17 @@ static struct ctl_table kern_table[] = { + .mode = 0644, + .proc_handler = proc_dointvec, + }, ++#ifdef CONFIG_SCHED_AUTOGROUP ++ { ++ .procname = "sched_autogroup_enabled", ++ .data = &sysctl_sched_autogroup_enabled, ++ .maxlen = sizeof(unsigned int), ++ .mode = 0644, ++ .proc_handler = proc_dointvec, ++ .extra1 = &zero, ++ .extra2 = &one, ++ }, ++#endif + #ifdef CONFIG_PROVE_LOCKING + { + .procname = "prove_locking", +Index: linux-2.6/init/Kconfig +=================================================================== +--- linux-2.6.orig/init/Kconfig ++++ linux-2.6/init/Kconfig +@@ -728,6 +728,18 @@ config NET_NS + + endif # NAMESPACES + ++config SCHED_AUTOGROUP ++ bool "Automatic process group scheduling" ++ select CGROUPS ++ select CGROUP_SCHED ++ select FAIR_GROUP_SCHED ++ help ++ This option optimizes the scheduler for common desktop workloads by ++ automatically creating and populating task groups. This separation ++ of workloads isolates aggressive CPU burners (like build jobs) from ++ desktop applications. Task group autogeneration is currently based ++ upon task tty association. ++ + config MM_OWNER + bool + +Index: linux-2.6/Documentation/kernel-parameters.txt +=================================================================== +--- linux-2.6.orig/Documentation/kernel-parameters.txt ++++ linux-2.6/Documentation/kernel-parameters.txt +@@ -1622,6 +1622,8 @@ and is between 256 and 4096 characters. + noapic [SMP,APIC] Tells the kernel to not make use of any + IOAPICs that may be present in the system. + ++ noautogroup Disable scheduler automatic task group creation. ++ + nobats [PPC] Do not use BATs for mapping kernel lowmem + on "Classic" PPC cores. + From 30ff848faac0f12a0c5b6a7baac59426d707ade7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 00:17:34 +0100 Subject: [PATCH 400/850] util-linux-ng: add support for handling swap partitions to init Signed-off-by: Stephan Raue --- .../sysutils/util-linux-ng/init.d/09_swapfile | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/packages/sysutils/util-linux-ng/init.d/09_swapfile b/packages/sysutils/util-linux-ng/init.d/09_swapfile index 13bf3441fa..c27695ed20 100755 --- a/packages/sysutils/util-linux-ng/init.d/09_swapfile +++ b/packages/sysutils/util-linux-ng/init.d/09_swapfile @@ -28,27 +28,29 @@ . /etc/profile INSTALLED_MEMORY=`cat /proc/meminfo | grep 'MemTotal:' | awk '{print $2}'` +SWAP=`blkid -t TYPE="swap" -o device` +SWAPFILE="$HOME/.cache/swapfile" -if [ $INSTALLED_MEMORY -le 500000 -a -f $HOME/.config/swapon ]; then - - if [ ! -f $HOME/.cache/swapfile ]; then +if [ $INSTALLED_MEMORY -le 500000 ]; then + if [ -z "$SWAP" -a ! -f $SWAPFILE ]; then progress "creating swapfile" - - mkdir -p $HOME/.cache - dd if=/dev/zero of=$HOME/.cache/swapfile bs=1024 count=524288 2>&1 > /dev/null - mkswap $HOME/.cache/swapfile 2>&1 > /dev/null + mkdir -p $HOME/.cache + dd if=/dev/zero of=$SWAPFILE bs=1024 count=262144 2>&1 > /dev/null + mkswap $SWAPFILE 2>&1 > /dev/null fi - progress "enable swapfile" - swapon -p 10000 $HOME/.cache/swapfile - - [ $INSTALLED_MEMORY -le 260000 ] \ - && sysctl -w vm.swappiness=100 2>&1 > /dev/null \ - || sysctl -w vm.swappiness=60 2>&1 > /dev/null + progress "enable swap" + [ -z "$SWAP" -a -f $SWAPFILE ] && SWAP=$SWAPFILE + for i in $SWAP; do + swapon -p 10000 $SWAP 2>&1 > /dev/null + done + if [ $INSTALLED_MEMORY -le 260000 ]; then + sysctl -w vm.swappiness=100 2>&1 > /dev/null + else + sysctl -w vm.swappiness=60 2>&1 > /dev/null + fi else - sysctl -w vm.swappiness=0 2>&1 > /dev/null - fi From da9aee4100d27ffc3c9fb51f1377d62df36793b8 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 00:18:50 +0100 Subject: [PATCH 401/850] scripts/get: fix creation of stamp files (add multiversion support) Signed-off-by: Stephan Raue --- scripts/get | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/scripts/get b/scripts/get index f9cc3f6cb5..0077e05647 100755 --- a/scripts/get +++ b/scripts/get @@ -2,6 +2,13 @@ . config/options $1 +if [ -z $1 ]; then + for i in `find packages/ -type f -name meta`; do + GET_PKG=`grep ^PKG_NAME= $i | sed -e "s,\",,g" -e "s,PKG_NAME=,,"` + $SCRIPTS/get $GET_PKG + done +fi + mkdir -p $STAMPS_NOARCH/$1 STAMP=$STAMPS_NOARCH/$1/get @@ -12,9 +19,16 @@ if [ -f $PACKAGE_URL ]; then DL="yes" fi +# if [ -n "$PKG_URL" ]; then +# if [ -f $STAMP ]; then +# [ ! $STAMP -ot $PKG_DIR/meta ] && exit 0 +# fi +# DL="yes" +# fi + if [ -n "$PKG_URL" ]; then if [ -f $STAMP ]; then - [ ! $STAMP -ot $PKG_DIR/meta ] && exit 0 + [ `cat $STAMP` = "$PKG_URL" ] && exit 0 fi DL="yes" fi @@ -53,7 +67,8 @@ if [ "$DL" = yes ]; then cp -p $PACKAGE_URL $STAMP [ -n "$PKG_URL" ] && \ - cp -p $PKG_DIR/meta $STAMP + echo $PKG_URL > $STAMP +# cp -p $PKG_DIR/meta $STAMP rm -f $BUILD_BASE*/$STAMPS_NOARCH/$1/unpack rm -f $BUILD_BASE*/$STAMPS_NOARCH/$1/build From ff23217dee78bb5b8238739ffb875c1d3468e3df Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 00:31:16 +0100 Subject: [PATCH 402/850] binutils: add metafile support, cleanup Signed-off-by: Stephan Raue --- packages/toolchain/devel/binutils/build | 15 +-------------- packages/toolchain/devel/binutils/meta | 14 ++++++++++++++ ... => binutils-2.20.51.0.11-binutils_zlib.patch} | 0 ...inutils-2.20.51.0.11-multi_os_directory.patch} | 0 packages/toolchain/devel/binutils/url | 1 - 5 files changed, 15 insertions(+), 15 deletions(-) create mode 100644 packages/toolchain/devel/binutils/meta rename packages/toolchain/devel/binutils/patches/{crossmingw64-binutils-zlib.diff => binutils-2.20.51.0.11-binutils_zlib.patch} (100%) rename packages/toolchain/devel/binutils/patches/{binutils-2.20.51.0.9-multi_os_directory.diff => binutils-2.20.51.0.11-multi_os_directory.patch} (100%) delete mode 100644 packages/toolchain/devel/binutils/url diff --git a/packages/toolchain/devel/binutils/build b/packages/toolchain/devel/binutils/build index 511bf77e5b..6292ee8635 100755 --- a/packages/toolchain/devel/binutils/build +++ b/packages/toolchain/devel/binutils/build @@ -2,13 +2,6 @@ . config/options $1 -$SCRIPTS/build linux-headers -$SCRIPTS/build gmp -$SCRIPTS/build mpfr -$SCRIPTS/build ppl -$SCRIPTS/build cloog-ppl -$SCRIPTS/build libelf - if [ $TARGET_ARCH = "x86_64" ]; then WITH_64B_BFD="--enable-64-bit-bfd" fi @@ -16,8 +9,7 @@ fi setup_toolchain host cd $PKG_BUILD -mkdir -p objdir -cd objdir +mkdir -p objdir && cd objdir ../configure --host=$HOST_NAME \ --build=$HOST_NAME \ --target=$TARGET_NAME \ @@ -42,8 +34,3 @@ make cp -v ../include/libiberty.h $SYSROOT_PREFIX/usr/include make install - -# add a link named 'strip' in the toolchain, it overrides the host -# 'strip' with `install -s` - ln -s $TARGET_NAME-strip $ROOT/$TOOLCHAIN/bin/strip - diff --git a/packages/toolchain/devel/binutils/meta b/packages/toolchain/devel/binutils/meta new file mode 100644 index 0000000000..fce7c8dba1 --- /dev/null +++ b/packages/toolchain/devel/binutils/meta @@ -0,0 +1,14 @@ +PKG_NAME="binutils" +PKG_VERSION="2.20.51.0.11" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.gnu.org/software/binutils/binutils.html" +PKG_URL="ftp://ftp.kernel.org/pub/linux/devel/binutils/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="ccache linux-headers gmp mpfr ppl cloog-ppl libelf" +PKG_PRIORITY="optional" +PKG_SECTION="toolchain/devel" +PKG_SHORTDESC="binutils: A GNU collection of binary utilities" +PKG_LONGDESC="The GNU binutils are utilities of use when dealing with object files. the packages includes ld - the GNU linker, as - the GNU assembler, addr2line - converts addresses into filenames and line numbers, ar - a utility for creating, modifying and extracting from archives, c++filt - filter to demangle encoded C++ symbols, gprof - displays profiling information, nlmconv - converts object code into an NLM, nm - lists symbols from object files, objcopy - Copys and translates object files, objdump - displays information from object files, ranlib - generates an index to the contents of an archive, readelf - displays information from any ELF format object file, size - lists the section sizes of an object or archive file, strings - lists printable strings from files, strip - discards symbols as well as windres - a compiler for Windows resource files." +PKG_IS_ADDON="no" diff --git a/packages/toolchain/devel/binutils/patches/crossmingw64-binutils-zlib.diff b/packages/toolchain/devel/binutils/patches/binutils-2.20.51.0.11-binutils_zlib.patch similarity index 100% rename from packages/toolchain/devel/binutils/patches/crossmingw64-binutils-zlib.diff rename to packages/toolchain/devel/binutils/patches/binutils-2.20.51.0.11-binutils_zlib.patch diff --git a/packages/toolchain/devel/binutils/patches/binutils-2.20.51.0.9-multi_os_directory.diff b/packages/toolchain/devel/binutils/patches/binutils-2.20.51.0.11-multi_os_directory.patch similarity index 100% rename from packages/toolchain/devel/binutils/patches/binutils-2.20.51.0.9-multi_os_directory.diff rename to packages/toolchain/devel/binutils/patches/binutils-2.20.51.0.11-multi_os_directory.patch diff --git a/packages/toolchain/devel/binutils/url b/packages/toolchain/devel/binutils/url deleted file mode 100644 index 8060a5db57..0000000000 --- a/packages/toolchain/devel/binutils/url +++ /dev/null @@ -1 +0,0 @@ -ftp://ftp.kernel.org/pub/linux/devel/binutils/binutils-2.20.51.0.11.tar.bz2 \ No newline at end of file From 53a1c528270afec1855ac6941bf0a22fdcd071e5 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 00:34:08 +0100 Subject: [PATCH 403/850] ccache: add metafile support Signed-off-by: Stephan Raue --- packages/toolchain/devel/ccache/meta | 14 ++++++++++++++ ...0.1.diff => ccache-3.1-fix_configure-0.1.patch} | 0 packages/toolchain/devel/ccache/url | 1 - 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/toolchain/devel/ccache/meta rename packages/toolchain/devel/ccache/patches/{ccache-fix_configure-0.1.diff => ccache-3.1-fix_configure-0.1.patch} (100%) delete mode 100644 packages/toolchain/devel/ccache/url diff --git a/packages/toolchain/devel/ccache/meta b/packages/toolchain/devel/ccache/meta new file mode 100644 index 0000000000..d6fc402577 --- /dev/null +++ b/packages/toolchain/devel/ccache/meta @@ -0,0 +1,14 @@ +PKG_NAME="ccache" +PKG_VERSION="3.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://ccache.samba.org/" +PKG_URL="http://samba.org/ftp/ccache/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="" +PKG_PRIORITY="optional" +PKG_SECTION="toolchain/devel" +PKG_SHORTDESC="ccache: A fast compiler cache" +PKG_LONGDESC="Ccache is a compiler cache. It speeds up re-compilation of C/C++ code by caching previous compiles and detecting when the same compile is being done again." +PKG_IS_ADDON="no" diff --git a/packages/toolchain/devel/ccache/patches/ccache-fix_configure-0.1.diff b/packages/toolchain/devel/ccache/patches/ccache-3.1-fix_configure-0.1.patch similarity index 100% rename from packages/toolchain/devel/ccache/patches/ccache-fix_configure-0.1.diff rename to packages/toolchain/devel/ccache/patches/ccache-3.1-fix_configure-0.1.patch diff --git a/packages/toolchain/devel/ccache/url b/packages/toolchain/devel/ccache/url deleted file mode 100644 index fc650d685b..0000000000 --- a/packages/toolchain/devel/ccache/url +++ /dev/null @@ -1 +0,0 @@ -http://samba.org/ftp/ccache/ccache-3.1.tar.bz2 \ No newline at end of file From dbfdbc6a066286473557017bfc5feab9b588a60c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 01:50:37 +0100 Subject: [PATCH 404/850] cmake: add metafile support Signed-off-by: Stephan Raue --- packages/toolchain/devel/cmake/meta | 14 ++++++++++++++ packages/toolchain/devel/cmake/url | 1 - 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/toolchain/devel/cmake/meta delete mode 100644 packages/toolchain/devel/cmake/url diff --git a/packages/toolchain/devel/cmake/meta b/packages/toolchain/devel/cmake/meta new file mode 100644 index 0000000000..17914e0ba7 --- /dev/null +++ b/packages/toolchain/devel/cmake/meta @@ -0,0 +1,14 @@ +PKG_NAME="cmake" +PKG_VERSION="2.8.3-rc4" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="BSD" +PKG_SITE="http://www.cmake.org/" +PKG_URL="http://www.cmake.org/files/v2.8/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="ccache" +PKG_PRIORITY="optional" +PKG_SECTION="toolchain/devel" +PKG_SHORTDESC="cmake: A cross-platform, open-source make system" +PKG_LONGDESC="CMake is used to control the software compilation process using simple platform and compiler independent configuration files. CMake generates native makefiles and workspaces that can be used in the compiler environment of your choice. CMake is quite sophisticated: it is possible to support complex environments requiring system configuration, preprocessor generation, code generation, and template instantiation." +PKG_IS_ADDON="no" diff --git a/packages/toolchain/devel/cmake/url b/packages/toolchain/devel/cmake/url deleted file mode 100644 index 509bb4ad8e..0000000000 --- a/packages/toolchain/devel/cmake/url +++ /dev/null @@ -1 +0,0 @@ -http://www.cmake.org/files/v2.8/cmake-2.8.3-rc4.tar.gz \ No newline at end of file From 3249a0de9889bd850923c5f8e68dc457a52c8fd6 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 01:50:49 +0100 Subject: [PATCH 405/850] eglibc: add metafile support Signed-off-by: Stephan Raue --- packages/toolchain/devel/eglibc/build | 7 +------ packages/toolchain/devel/eglibc/install | 2 -- packages/toolchain/devel/eglibc/meta | 15 +++++++++++++++ ...ff => eglibc-2.12-12025-cv_gnu89_inline.patch} | 0 ...1.diff => eglibc-2.12-12025-libgcc_eh-1.patch} | 0 packages/toolchain/devel/eglibc/url | 1 - 6 files changed, 16 insertions(+), 9 deletions(-) create mode 100644 packages/toolchain/devel/eglibc/meta rename packages/toolchain/devel/eglibc/patches/{10_glibc-cv_gnu89_inline.diff => eglibc-2.12-12025-cv_gnu89_inline.patch} (100%) rename packages/toolchain/devel/eglibc/patches/{10-glibc-2.11-libgcc_eh-1.diff => eglibc-2.12-12025-libgcc_eh-1.patch} (100%) delete mode 100644 packages/toolchain/devel/eglibc/url diff --git a/packages/toolchain/devel/eglibc/build b/packages/toolchain/devel/eglibc/build index 0ce9dce714..c34b0d3554 100755 --- a/packages/toolchain/devel/eglibc/build +++ b/packages/toolchain/devel/eglibc/build @@ -2,10 +2,6 @@ . config/options $1 -$SCRIPTS/build autotools -$SCRIPTS/build linux-headers -$SCRIPTS/build gcc-core - # Filter out some problematic CFLAGS CFLAGS=`echo $CFLAGS | sed -e "s|-ffast-math||"` CFLAGS=`echo $CFLAGS | sed -e "s|-Os|-O2|"` @@ -33,8 +29,7 @@ cd $PKG_BUILD autoconf -mkdir -p objdir-$1 -cd objdir-$1 +mkdir -p objdir-$1 && cd objdir-$1 cat >config.cache < Date: Fri, 19 Nov 2010 01:51:13 +0100 Subject: [PATCH 406/850] gcc: remove unneeded file Signed-off-by: Stephan Raue --- packages/toolchain/lang/gcc/unpack.old | 6 ------ 1 file changed, 6 deletions(-) delete mode 100755 packages/toolchain/lang/gcc/unpack.old diff --git a/packages/toolchain/lang/gcc/unpack.old b/packages/toolchain/lang/gcc/unpack.old deleted file mode 100755 index 2470ca522c..0000000000 --- a/packages/toolchain/lang/gcc/unpack.old +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -. config/options $1 - -$SCRIPTS/fixconfigtools $PKG_BUILD/gcc - From 8030ff7c06f663a0bed0b8c0364b6355ab04c8e0 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 02:03:34 +0100 Subject: [PATCH 407/850] jam: add metafile support Signed-off-by: Stephan Raue --- packages/toolchain/devel/jam/meta | 14 ++++++++++++++ packages/toolchain/devel/jam/url | 1 - 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/toolchain/devel/jam/meta delete mode 100644 packages/toolchain/devel/jam/url diff --git a/packages/toolchain/devel/jam/meta b/packages/toolchain/devel/jam/meta new file mode 100644 index 0000000000..e0f922503b --- /dev/null +++ b/packages/toolchain/devel/jam/meta @@ -0,0 +1,14 @@ +PKG_NAME="jam" +PKG_VERSION="2.5" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.perforce.com/jam/jam.html" +PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="ccache" +PKG_PRIORITY="optional" +PKG_SECTION="toolchain/devel" +PKG_SHORTDESC="jam: A make-like program" +PKG_LONGDESC="Jam is a portable build tool with its own interpreted language, allowing to implement rather complex logic in a readable way and without resorting to external programs." +PKG_IS_ADDON="no" diff --git a/packages/toolchain/devel/jam/url b/packages/toolchain/devel/jam/url deleted file mode 100644 index bc397d0070..0000000000 --- a/packages/toolchain/devel/jam/url +++ /dev/null @@ -1 +0,0 @@ -http://sources.openelec.tv/svn/jam-2.5.tar.bz2 From 9c23e700e0b7716a5a782b9cf3adc9abfb5061a7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 02:03:43 +0100 Subject: [PATCH 408/850] intltool: add metafile support Signed-off-by: Stephan Raue --- packages/toolchain/devel/intltool/meta | 14 ++++++++++++++ packages/toolchain/devel/intltool/url | 1 - 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/toolchain/devel/intltool/meta delete mode 100644 packages/toolchain/devel/intltool/url diff --git a/packages/toolchain/devel/intltool/meta b/packages/toolchain/devel/intltool/meta new file mode 100644 index 0000000000..b75012428c --- /dev/null +++ b/packages/toolchain/devel/intltool/meta @@ -0,0 +1,14 @@ +PKG_NAME="intltool" +PKG_VERSION="0.40.6" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.gnome.org" +PKG_URL="http://ftp.gnome.org/pub/GNOME/sources/intltool/0.40/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="ccache" +PKG_PRIORITY="optional" +PKG_SECTION="toolchain/devel" +PKG_SHORTDESC="intltool: Gnome international tools" +PKG_LONGDESC="The Gnome international tools help to handle translation strings from various source files (.xml.in, .glade, .desktop.in, .server.in, .oaf.in)." +PKG_IS_ADDON="no" diff --git a/packages/toolchain/devel/intltool/url b/packages/toolchain/devel/intltool/url deleted file mode 100644 index f8046f447d..0000000000 --- a/packages/toolchain/devel/intltool/url +++ /dev/null @@ -1 +0,0 @@ -http://ftp.gnome.org/pub/GNOME/sources/intltool/0.40/intltool-0.40.6.tar.bz2 \ No newline at end of file From 313cbe3aebd9848c025d15f0a2840803d401cba1 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 02:04:06 +0100 Subject: [PATCH 409/850] libelf: cleanups Signed-off-by: Stephan Raue --- packages/toolchain/devel/libelf/build | 3 +-- packages/toolchain/devel/libelf/meta | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/toolchain/devel/libelf/build b/packages/toolchain/devel/libelf/build index 81824dc938..da9ee8062e 100755 --- a/packages/toolchain/devel/libelf/build +++ b/packages/toolchain/devel/libelf/build @@ -5,8 +5,7 @@ setup_toolchain host cd $PKG_BUILD -mkdir -p objdir -cd objdir +mkdir -p objdir && cd objdir ../configure --host=$HOST_NAME \ --build=$HOST_NAME \ --target=$TARGET_NAME \ diff --git a/packages/toolchain/devel/libelf/meta b/packages/toolchain/devel/libelf/meta index 28f4abfd39..5657610d6a 100644 --- a/packages/toolchain/devel/libelf/meta +++ b/packages/toolchain/devel/libelf/meta @@ -6,7 +6,7 @@ PKG_LICENSE="GPL" PKG_SITE="http://www.mr511.de/software/" PKG_URL="http://www.mr511.de/software/$PKG_NAME-$PKG_VERSION.tar.gz" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="" +PKG_BUILD_DEPENDS="ccache" PKG_PRIORITY="optional" PKG_SECTION="toolchain/devel" PKG_SHORTDESC="libelf: ELF object file access library" From cea8b8ba27833d7ad4a5fb41467c143bf36840e8 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 02:14:01 +0100 Subject: [PATCH 410/850] make: add metafile support Signed-off-by: Stephan Raue --- packages/toolchain/devel/make/meta | 14 ++++++++++++++ packages/toolchain/devel/make/url | 1 - 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/toolchain/devel/make/meta delete mode 100644 packages/toolchain/devel/make/url diff --git a/packages/toolchain/devel/make/meta b/packages/toolchain/devel/make/meta new file mode 100644 index 0000000000..0133b16ac9 --- /dev/null +++ b/packages/toolchain/devel/make/meta @@ -0,0 +1,14 @@ +PKG_NAME="make" +PKG_VERSION="3.81" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.gnu.org/software/make/" +PKG_URL="http://ftp.gnu.org/gnu/make/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="" +PKG_PRIORITY="optional" +PKG_SECTION="toolchain/devel" +PKG_SHORTDESC="make: GNU make utility to maintain groups of programs" +PKG_LONGDESC="The 'make' utility automatically determines which pieces of a large program need to be recompiled, and issues commands to recompile them. This is GNU 'make', which was implemented by Richard Stallman and Roland McGrath. GNU 'make' conforms to section 6.2 of EEE Standard 1003.2-1992' (POSIX.2)." +PKG_IS_ADDON="no" diff --git a/packages/toolchain/devel/make/url b/packages/toolchain/devel/make/url deleted file mode 100644 index 99c87ba7a6..0000000000 --- a/packages/toolchain/devel/make/url +++ /dev/null @@ -1 +0,0 @@ -http://ftp.gnu.org/gnu/make/make-3.81.tar.bz2 From 6c4d0cd36634ad878d953b564fd34c899d7bc412 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 02:14:14 +0100 Subject: [PATCH 411/850] pkg-config: add metafile support Signed-off-by: Stephan Raue --- packages/toolchain/devel/pkg-config/meta | 14 ++++++++++++++ ...diff => pkg-config-0.25-m4_pattern_allow.patch} | 0 packages/toolchain/devel/pkg-config/url | 1 - 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/toolchain/devel/pkg-config/meta rename packages/toolchain/devel/pkg-config/patches/{pkg-config-0.25-m4_pattern_allow.diff => pkg-config-0.25-m4_pattern_allow.patch} (100%) delete mode 100644 packages/toolchain/devel/pkg-config/url diff --git a/packages/toolchain/devel/pkg-config/meta b/packages/toolchain/devel/pkg-config/meta new file mode 100644 index 0000000000..cc53aa848a --- /dev/null +++ b/packages/toolchain/devel/pkg-config/meta @@ -0,0 +1,14 @@ +PKG_NAME="pkg-config" +PKG_VERSION="0.25" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.freedesktop.org/software/pkgconfig/" +PKG_URL="http://pkgconfig.freedesktop.org/releases/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="ccache" +PKG_PRIORITY="optional" +PKG_SECTION="toolchain/devel" +PKG_SHORTDESC="pkg-config: A library configuration management system" +PKG_LONGDESC="pkg-config is a system for managing library compile/link flags that works with automake and autoconf. It replaces the ubiquitous *-config scripts you may have seen with a single tool." +PKG_IS_ADDON="no" diff --git a/packages/toolchain/devel/pkg-config/patches/pkg-config-0.25-m4_pattern_allow.diff b/packages/toolchain/devel/pkg-config/patches/pkg-config-0.25-m4_pattern_allow.patch similarity index 100% rename from packages/toolchain/devel/pkg-config/patches/pkg-config-0.25-m4_pattern_allow.diff rename to packages/toolchain/devel/pkg-config/patches/pkg-config-0.25-m4_pattern_allow.patch diff --git a/packages/toolchain/devel/pkg-config/url b/packages/toolchain/devel/pkg-config/url deleted file mode 100644 index 8554871808..0000000000 --- a/packages/toolchain/devel/pkg-config/url +++ /dev/null @@ -1 +0,0 @@ -http://pkgconfig.freedesktop.org/releases/pkg-config-0.25.tar.gz From efb3ba7ae6f74d3b284930d530fb9c329501122b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 02:14:28 +0100 Subject: [PATCH 412/850] linux-headers: add metafile support Signed-off-by: Stephan Raue --- packages/toolchain/devel/linux-headers/meta | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 packages/toolchain/devel/linux-headers/meta diff --git a/packages/toolchain/devel/linux-headers/meta b/packages/toolchain/devel/linux-headers/meta new file mode 100644 index 0000000000..26e171e279 --- /dev/null +++ b/packages/toolchain/devel/linux-headers/meta @@ -0,0 +1,14 @@ +PKG_NAME="linux-headers" +PKG_VERSION="" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.kernel.org" +PKG_URL="" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="ccache" +PKG_PRIORITY="optional" +PKG_SECTION="toolchain/devel" +PKG_SHORTDESC="linux-headers: "Sanitized" Linux kernel headers" +PKG_LONGDESC="This package includes the linux kernel headers (include files) needed to compile applications. The files resist in /usr/include/{asm,asm-generic,linux}." +PKG_IS_ADDON="no" From 89003c5313d37a96159c84fe6f8f5ca13e563f20 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 06:16:15 +0100 Subject: [PATCH 413/850] autoconf-2.64: add metafile support Signed-off-by: Stephan Raue --- .../devel/autotools/autoconf-2.64/build | 18 ++++++++---------- .../devel/autotools/autoconf-2.64/meta | 14 ++++++++++++++ .../devel/autotools/autoconf-2.64/url | 1 - 3 files changed, 22 insertions(+), 11 deletions(-) create mode 100644 packages/toolchain/devel/autotools/autoconf-2.64/meta delete mode 100644 packages/toolchain/devel/autotools/autoconf-2.64/url diff --git a/packages/toolchain/devel/autotools/autoconf-2.64/build b/packages/toolchain/devel/autotools/autoconf-2.64/build index e041477622..3fc029aa05 100755 --- a/packages/toolchain/devel/autotools/autoconf-2.64/build +++ b/packages/toolchain/devel/autotools/autoconf-2.64/build @@ -2,12 +2,10 @@ . config/options $1 -$SCRIPTS/build m4 -$SCRIPTS/build libtool-host - setup_toolchain host -cd $BUILD/$1 +cd $BUILD/$PKG_NAME + EMACS="no" \ ac_cv_path_M4=$ROOT/$TOOLCHAIN/bin/m4 \ ac_cv_prog_gnu_m4_gnu=no \ @@ -19,16 +17,16 @@ ac_cv_prog_gnu_m4_gnu=no \ make install \ prefix=$ROOT/$TOOLCHAIN \ - pkgdatadir=$ROOT/$TOOLCHAIN/share/autoconf-2.64 \ - pkgdatadir=$ROOT/$TOOLCHAIN/lib/autoconf-2.64 \ - pkgdatadir=$ROOT/$TOOLCHAIN/include/autoconf-2.64 \ + pkgdatadir=$ROOT/$TOOLCHAIN/share/$PKG_NAME \ + pkgdatadir=$ROOT/$TOOLCHAIN/lib/$PKG_NAME \ + pkgdatadir=$ROOT/$TOOLCHAIN/include/$PKG_NAME \ install make clean make install \ prefix=$SYSROOT_PREFIX/usr \ - pkgdatadir=$SYSROOT_PREFIX/usr/share/autoconf-2.64 \ - pkgdatadir=$SYSROOT_PREFIX/usr/lib/autoconf-2.64 \ - pkgdatadir=$SYSROOT_PREFIX/usr/include/autoconf-2.64 \ + pkgdatadir=$SYSROOT_PREFIX/usr/share/$PKG_NAME \ + pkgdatadir=$SYSROOT_PREFIX/usr/lib/$PKG_NAME \ + pkgdatadir=$SYSROOT_PREFIX/usr/include/$PKG_NAME \ install diff --git a/packages/toolchain/devel/autotools/autoconf-2.64/meta b/packages/toolchain/devel/autotools/autoconf-2.64/meta new file mode 100644 index 0000000000..7094699337 --- /dev/null +++ b/packages/toolchain/devel/autotools/autoconf-2.64/meta @@ -0,0 +1,14 @@ +PKG_NAME="autoconf-2.64" +PKG_VERSION="" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://sources.redhat.com/autoconf/" +PKG_URL="http://ftp.gnu.org/gnu/autoconf/$PKG_NAME.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="ccache m4 libtool-host" +PKG_PRIORITY="optional" +PKG_SECTION="toolchain/devel" +PKG_SHORTDESC="autoconf: A GNU tool for automatically configuring source code" +PKG_LONGDESC="Autoconf is an extensible package of m4 macros that produce shell scripts to automatically configure software source code packages. These scripts can adapt the packages to many kinds of UNIX-like systems without manual user intervention. Autoconf creates a configuration script for a package from a template file that lists the operating system features that the package can use, in the form of m4 macro calls." +PKG_IS_ADDON="no" diff --git a/packages/toolchain/devel/autotools/autoconf-2.64/url b/packages/toolchain/devel/autotools/autoconf-2.64/url deleted file mode 100644 index 9cbbe33a61..0000000000 --- a/packages/toolchain/devel/autotools/autoconf-2.64/url +++ /dev/null @@ -1 +0,0 @@ -http://ftp.gnu.org/gnu/autoconf/autoconf-2.64.tar.bz2 \ No newline at end of file From dc3ed68d49d692bf889d3074c68fca7d0f29dba1 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 06:16:24 +0100 Subject: [PATCH 414/850] autoconf: add metafile support Signed-off-by: Stephan Raue --- packages/toolchain/devel/autotools/autoconf/build | 6 ++---- packages/toolchain/devel/autotools/autoconf/meta | 14 ++++++++++++++ packages/toolchain/devel/autotools/autoconf/url | 1 - 3 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 packages/toolchain/devel/autotools/autoconf/meta delete mode 100644 packages/toolchain/devel/autotools/autoconf/url diff --git a/packages/toolchain/devel/autotools/autoconf/build b/packages/toolchain/devel/autotools/autoconf/build index cc8557dbda..7109c170c1 100755 --- a/packages/toolchain/devel/autotools/autoconf/build +++ b/packages/toolchain/devel/autotools/autoconf/build @@ -2,12 +2,10 @@ . config/options $1 -$SCRIPTS/build m4 -$SCRIPTS/build libtool-host - setup_toolchain host -cd $BUILD/autoconf-2.68 +cd $BUILD/$PKG_NAME-$PKG_VERSION + EMACS="no" \ ac_cv_path_M4=$ROOT/$TOOLCHAIN/bin/m4 \ ac_cv_prog_gnu_m4_gnu=no \ diff --git a/packages/toolchain/devel/autotools/autoconf/meta b/packages/toolchain/devel/autotools/autoconf/meta new file mode 100644 index 0000000000..0a7834e6d2 --- /dev/null +++ b/packages/toolchain/devel/autotools/autoconf/meta @@ -0,0 +1,14 @@ +PKG_NAME="autoconf" +PKG_VERSION="2.68" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://sources.redhat.com/autoconf/" +PKG_URL="http://ftp.gnu.org/gnu/autoconf/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="ccache m4 libtool-host" +PKG_PRIORITY="optional" +PKG_SECTION="toolchain/devel" +PKG_SHORTDESC="autoconf: A GNU tool for automatically configuring source code" +PKG_LONGDESC="Autoconf is an extensible package of m4 macros that produce shell scripts to automatically configure software source code packages. These scripts can adapt the packages to many kinds of UNIX-like systems without manual user intervention. Autoconf creates a configuration script for a package from a template file that lists the operating system features that the package can use, in the form of m4 macro calls." +PKG_IS_ADDON="no" diff --git a/packages/toolchain/devel/autotools/autoconf/url b/packages/toolchain/devel/autotools/autoconf/url deleted file mode 100644 index bdff90139d..0000000000 --- a/packages/toolchain/devel/autotools/autoconf/url +++ /dev/null @@ -1 +0,0 @@ -http://ftp.gnu.org/gnu/autoconf/autoconf-2.68.tar.bz2 \ No newline at end of file From bec74eb42c0d8af60c7a06ca8ae0a09cc3be9d26 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 06:16:36 +0100 Subject: [PATCH 415/850] automake: add metafile support Signed-off-by: Stephan Raue --- packages/toolchain/devel/autotools/automake/build | 2 -- packages/toolchain/devel/autotools/automake/meta | 14 ++++++++++++++ packages/toolchain/devel/autotools/automake/url | 1 - 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 packages/toolchain/devel/autotools/automake/meta delete mode 100644 packages/toolchain/devel/autotools/automake/url diff --git a/packages/toolchain/devel/autotools/automake/build b/packages/toolchain/devel/autotools/automake/build index 55ff28b426..7197b13e40 100755 --- a/packages/toolchain/devel/autotools/automake/build +++ b/packages/toolchain/devel/autotools/automake/build @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build autoconf - setup_toolchain host cd $PKG_BUILD diff --git a/packages/toolchain/devel/autotools/automake/meta b/packages/toolchain/devel/autotools/automake/meta new file mode 100644 index 0000000000..f5e61d20aa --- /dev/null +++ b/packages/toolchain/devel/autotools/automake/meta @@ -0,0 +1,14 @@ +PKG_NAME="automake" +PKG_VERSION="1.11.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://sources.redhat.com/automake/" +PKG_URL="http://ftp.gnu.org/gnu/automake/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="ccache autoconf" +PKG_PRIORITY="optional" +PKG_SECTION="toolchain/devel" +PKG_SHORTDESC="automake: A GNU tool for automatically creating Makefiles" +PKG_LONGDESC="This is Automake, a Makefile generator. It was inspired by the 4.4BSD make and include files, but aims to be portable and to conform to the GNU standards for Makefile variables and targets. Automake is a Perl script. The input files are called Makefile.am. The output files are called Makefile.in; they are intended for use with Autoconf. Automake requires certain things to be done in your configure.in." +PKG_IS_ADDON="no" diff --git a/packages/toolchain/devel/autotools/automake/url b/packages/toolchain/devel/autotools/automake/url deleted file mode 100644 index 9722fc7fa6..0000000000 --- a/packages/toolchain/devel/autotools/automake/url +++ /dev/null @@ -1 +0,0 @@ -http://ftp.gnu.org/gnu/automake/automake-1.11.1.tar.bz2 \ No newline at end of file From 3fe94e9b63d586e3b52a2bb219d4c9f60527ff1d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 06:16:48 +0100 Subject: [PATCH 416/850] m4: add metafile support Signed-off-by: Stephan Raue --- packages/toolchain/devel/autotools/m4/meta | 14 ++++++++++++++ ...0.1.diff => m4-1.4.15-include_stat.h-0.1.patch} | 0 packages/toolchain/devel/autotools/m4/url | 1 - 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/toolchain/devel/autotools/m4/meta rename packages/toolchain/devel/autotools/m4/patches/{10-m4-include_stat.h-0.1.diff => m4-1.4.15-include_stat.h-0.1.patch} (100%) delete mode 100644 packages/toolchain/devel/autotools/m4/url diff --git a/packages/toolchain/devel/autotools/m4/meta b/packages/toolchain/devel/autotools/m4/meta new file mode 100644 index 0000000000..3334913ce6 --- /dev/null +++ b/packages/toolchain/devel/autotools/m4/meta @@ -0,0 +1,14 @@ +PKG_NAME="m4" +PKG_VERSION="1.4.15" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="ftp://ftp.gnu.org/pub/gnu/m4/" +PKG_URL="http://ftp.gnu.org/gnu/m4/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="ccache" +PKG_PRIORITY="optional" +PKG_SECTION="toolchain/devel" +PKG_SHORTDESC="m4: The m4 macro processor" +PKG_LONGDESC="GNU 'M4' is an implementation of the traditional Unix macro processor. It is mostly SVR4 compatible, although it has some extensions (for example, handling more than 9 positional parameters to macros). 'M4' also has built-in functions for including files, running shell commands, doing arithmetic, etc. Autoconf needs GNU 'M4' for generating 'configure' scripts, but not for running them." +PKG_IS_ADDON="no" diff --git a/packages/toolchain/devel/autotools/m4/patches/10-m4-include_stat.h-0.1.diff b/packages/toolchain/devel/autotools/m4/patches/m4-1.4.15-include_stat.h-0.1.patch similarity index 100% rename from packages/toolchain/devel/autotools/m4/patches/10-m4-include_stat.h-0.1.diff rename to packages/toolchain/devel/autotools/m4/patches/m4-1.4.15-include_stat.h-0.1.patch diff --git a/packages/toolchain/devel/autotools/m4/url b/packages/toolchain/devel/autotools/m4/url deleted file mode 100644 index 1bacfe6bbb..0000000000 --- a/packages/toolchain/devel/autotools/m4/url +++ /dev/null @@ -1 +0,0 @@ -http://ftp.gnu.org/gnu/m4/m4-1.4.15.tar.bz2 \ No newline at end of file From 35e604b5c9ac3f7760c68533ca951e0c94c5b90c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 06:17:05 +0100 Subject: [PATCH 417/850] libtool-host: add metafile support Signed-off-by: Stephan Raue --- .../toolchain/devel/autotools/libtool-host/build | 3 +-- .../toolchain/devel/autotools/libtool-host/meta | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 packages/toolchain/devel/autotools/libtool-host/meta diff --git a/packages/toolchain/devel/autotools/libtool-host/build b/packages/toolchain/devel/autotools/libtool-host/build index 357f69099e..f8778f6175 100755 --- a/packages/toolchain/devel/autotools/libtool-host/build +++ b/packages/toolchain/devel/autotools/libtool-host/build @@ -8,8 +8,7 @@ setup_toolchain host cd $BUILD/libtool* -mkdir -p .objdir-host -cd .objdir-host +mkdir -p .objdir-host && cd .objdir-host ../configure --host=$HOST_NAME \ --build=$HOST_NAME \ diff --git a/packages/toolchain/devel/autotools/libtool-host/meta b/packages/toolchain/devel/autotools/libtool-host/meta new file mode 100644 index 0000000000..ad8e1e48e2 --- /dev/null +++ b/packages/toolchain/devel/autotools/libtool-host/meta @@ -0,0 +1,14 @@ +PKG_NAME="libtool-host" +PKG_VERSION="" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.gnu.org/software/libtool/libtool.html" +PKG_URL="" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="ccache" +PKG_PRIORITY="optional" +PKG_SECTION="toolchain/devel" +PKG_SHORTDESC="libtool: Generic library support script" +PKG_LONGDESC="This is GNU Libtool, a generic library support script. Libtool hides the complexity of using shared libraries behind a consistent, portable interface." +PKG_IS_ADDON="no" \ No newline at end of file From e719beea6accc8d62426766e35a016f21a5b84ce Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 06:17:20 +0100 Subject: [PATCH 418/850] fakeroot: add metafile support Signed-off-by: Stephan Raue --- packages/toolchain/devel/fakeroot/meta | 14 ++++++++++++++ packages/toolchain/devel/fakeroot/url | 1 - 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/toolchain/devel/fakeroot/meta delete mode 100644 packages/toolchain/devel/fakeroot/url diff --git a/packages/toolchain/devel/fakeroot/meta b/packages/toolchain/devel/fakeroot/meta new file mode 100644 index 0000000000..3fcc041cb9 --- /dev/null +++ b/packages/toolchain/devel/fakeroot/meta @@ -0,0 +1,14 @@ +PKG_NAME="fakeroot" +PKG_VERSION="1.9.5" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://fakeroot.alioth.debian.org/" +PKG_URL="http://snapshot.debian.net/archive/2008/04/27/debian/pool/main/f/fakeroot/${PKG_NAME}_${PKG_VERSION}.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="ccache" +PKG_PRIORITY="optional" +PKG_SECTION="toolchain/devel" +PKG_SHORTDESC="fakeroot: provides a fake root environment by means of LD_PRELOAD and SYSV IPC (or TCP) trickery." +PKG_LONGDESC="fakeroot provides a fake root environment by means of LD_PRELOAD and SYSV IPC (or TCP) trickery." +PKG_IS_ADDON="no" diff --git a/packages/toolchain/devel/fakeroot/url b/packages/toolchain/devel/fakeroot/url deleted file mode 100644 index 130235716a..0000000000 --- a/packages/toolchain/devel/fakeroot/url +++ /dev/null @@ -1 +0,0 @@ -http://snapshot.debian.net/archive/2008/04/27/debian/pool/main/f/fakeroot/fakeroot_1.9.5.tar.gz \ No newline at end of file From c002b1cf3f410577981c1650e4b528b12d2f42fc Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 06:18:08 +0100 Subject: [PATCH 419/850] gcc-core: fix dependencies Signed-off-by: Stephan Raue --- packages/toolchain/lang/gcc-core/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/toolchain/lang/gcc-core/meta b/packages/toolchain/lang/gcc-core/meta index 625d9de3a3..3260d62126 100644 --- a/packages/toolchain/lang/gcc-core/meta +++ b/packages/toolchain/lang/gcc-core/meta @@ -6,7 +6,7 @@ PKG_LICENSE="GPL" PKG_SITE="http://gcc.gnu.org/" PKG_URL="" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="ccache binutils gmp mpfr mpc ppl cloog-ppl libelf autoconf-2.64" +PKG_BUILD_DEPENDS="ccache autoconf-2.64 binutils gmp mpfr mpc ppl cloog-ppl libelf" PKG_PRIORITY="optional" PKG_SECTION="toolchain/lang" PKG_SHORTDESC="gcc: The GNU Compiler Collection Version 4 (aka GNU C Compiler)" From 50f8023b846aee528d508fdd6cc96d9a90700809 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 06:18:20 +0100 Subject: [PATCH 420/850] gcc-final: fix dependencies Signed-off-by: Stephan Raue --- packages/toolchain/lang/gcc-final/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/toolchain/lang/gcc-final/meta b/packages/toolchain/lang/gcc-final/meta index d7804e596e..2fee14dd33 100644 --- a/packages/toolchain/lang/gcc-final/meta +++ b/packages/toolchain/lang/gcc-final/meta @@ -6,7 +6,7 @@ PKG_LICENSE="GPL" PKG_SITE="http://gcc.gnu.org/" PKG_URL="" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="ccache binutils gmp mpfr mpc ppl cloog-ppl libelf eglibc" +PKG_BUILD_DEPENDS="ccache autoconf-2.64 binutils gmp mpfr mpc ppl cloog-ppl libelf eglibc" PKG_PRIORITY="optional" PKG_SECTION="toolchain/lang" PKG_SHORTDESC="gcc: The GNU Compiler Collection Version 4 (aka GNU C Compiler)" From bf060fa1960c240a99963a714bdf39467b687c47 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 06:20:04 +0100 Subject: [PATCH 421/850] toolchain: add metafile support Signed-off-by: Stephan Raue --- packages/toolchain/build | 19 ------------------- packages/toolchain/meta | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 19 deletions(-) delete mode 100755 packages/toolchain/build create mode 100644 packages/toolchain/meta diff --git a/packages/toolchain/build b/packages/toolchain/build deleted file mode 100755 index c12fdc63d9..0000000000 --- a/packages/toolchain/build +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh - -. config/options $1 - -$SCRIPTS/build configtools toolchain - -$SCRIPTS/build make -$SCRIPTS/build ccache -$SCRIPTS/build sed -$SCRIPTS/build pkg-config - -$SCRIPTS/build autotools -$SCRIPTS/build intltool - -$SCRIPTS/build gcc-final - -$SCRIPTS/build cmake -$SCRIPTS/build jam -$SCRIPTS/build yasm diff --git a/packages/toolchain/meta b/packages/toolchain/meta new file mode 100644 index 0000000000..a943819098 --- /dev/null +++ b/packages/toolchain/meta @@ -0,0 +1,15 @@ +PKG_NAME="toolchain" +PKG_VERSION="" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.openelec.tv" +PKG_URL="" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="configtools make sed pkg-config automake autoconf intltool gcc-final cmake jam yasm" +PKG_PRIORITY="optional" +PKG_SECTION="toolchain/devel" +PKG_SHORTDESC="toolchain: OpenELEC.tv' toolchain" +PKG_LONGDESC="a crosscompiling toolchain to compile all packages" +PKG_IS_ADDON="no" + From 9e05de98f7cd8286a7c1d424e0bdba394841e4e1 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 06:21:32 +0100 Subject: [PATCH 422/850] autotools: remove unneeded buildscript Signed-off-by: Stephan Raue --- packages/toolchain/devel/autotools/build | 6 ------ 1 file changed, 6 deletions(-) delete mode 100755 packages/toolchain/devel/autotools/build diff --git a/packages/toolchain/devel/autotools/build b/packages/toolchain/devel/autotools/build deleted file mode 100755 index 1380f5ea78..0000000000 --- a/packages/toolchain/devel/autotools/build +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -. config/options $1 - -$SCRIPTS/build autoconf-2.64 -$SCRIPTS/build automake From cbfcd21e9218f813f15f28ea881c1c4a2dfd1d91 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 06:37:13 +0100 Subject: [PATCH 423/850] configtools: add config.guess and config.sub scripts to buildsystem, remove package 'configtools', cleanups Signed-off-by: Stephan Raue --- config/path | 24 +- packages/toolchain/devel/configtools/build | 5 - packages/toolchain/devel/configtools/url | 1 - packages/toolchain/meta | 2 +- scripts/configtools/README | 2 + scripts/configtools/config.guess | 1508 +++++++++++++++++ scripts/configtools/config.sub | 1739 ++++++++++++++++++++ scripts/fixconfigtools | 15 +- 8 files changed, 3265 insertions(+), 31 deletions(-) delete mode 100755 packages/toolchain/devel/configtools/build delete mode 100644 packages/toolchain/devel/configtools/url create mode 100644 scripts/configtools/README create mode 100755 scripts/configtools/config.guess create mode 100755 scripts/configtools/config.sub diff --git a/config/path b/config/path index 31cfa69612..85c9036ab3 100644 --- a/config/path +++ b/config/path @@ -1,5 +1,14 @@ set -e +# setup initial directorys + CONFIG=config + SCRIPTS=scripts + PACKAGES=packages + SOURCES=sources + BUILD_BASE=build + TARGET=target + ADDONS=addons + test -f config/target-$TARGET_PLATFORM && . config/target-$TARGET_PLATFORM # determine architecture's family @@ -26,16 +35,10 @@ if [ -z "$TARGET_CPU" ]; then esac fi +HOST_NAME=`$SCRIPTS/configtools/config.guess` TARGET_NAME=$TARGET_FAMILY-openelec-linux-gnu OPENELEC_SRC=http://sources.openelec.tv/src/$OPENELEC_VERSION -CONFIG=config -SCRIPTS=scripts -PACKAGES=packages -SOURCES=sources -BUILD_BASE=build -TARGET=target -ADDONS=addons BUILD=$BUILD_BASE.OpenELEC-$PROJECT.$TARGET_ARCH.$OPENELEC_VERSION [ -n "$TARGET_PLATFORM" ] && BUILD=$BUILD.$TARGET_PLATFORM TARGET_IMG=$ROOT/$TARGET @@ -60,13 +63,6 @@ elif [ "$OPENELEC_VERSION" = debug ]; then DEVTOOLS=yes fi -HOST_NAME_CACHE=$BUILD/configtools/host_name -if [ -f $HOST_NAME_CACHE ]; then - HOST_NAME=`cat $HOST_NAME_CACHE` -elif [ -x $BUILD/configtools/config.guess ]; then - HOST_NAME=`$BUILD/configtools/config.guess` -fi - MAKE="$ROOT/$TOOLCHAIN/bin/make" MAKEINSTALL="$ROOT/$TOOLCHAIN/bin/make -j1 DESTDIR=$SYSROOT_PREFIX install" SED="sed -i" diff --git a/packages/toolchain/devel/configtools/build b/packages/toolchain/devel/configtools/build deleted file mode 100755 index 473feeb26b..0000000000 --- a/packages/toolchain/devel/configtools/build +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -. config/options $1 - -$BUILD/$1/config.guess > $HOST_NAME_CACHE diff --git a/packages/toolchain/devel/configtools/url b/packages/toolchain/devel/configtools/url deleted file mode 100644 index dcdb5316f6..0000000000 --- a/packages/toolchain/devel/configtools/url +++ /dev/null @@ -1 +0,0 @@ -http://sources.openelec.tv/svn/configtools.tar.bz2 diff --git a/packages/toolchain/meta b/packages/toolchain/meta index a943819098..5d08561a87 100644 --- a/packages/toolchain/meta +++ b/packages/toolchain/meta @@ -6,7 +6,7 @@ PKG_LICENSE="GPL" PKG_SITE="http://www.openelec.tv" PKG_URL="" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="configtools make sed pkg-config automake autoconf intltool gcc-final cmake jam yasm" +PKG_BUILD_DEPENDS="make sed pkg-config automake autoconf intltool gcc-final cmake jam yasm" PKG_PRIORITY="optional" PKG_SECTION="toolchain/devel" PKG_SHORTDESC="toolchain: OpenELEC.tv' toolchain" diff --git a/scripts/configtools/README b/scripts/configtools/README new file mode 100644 index 0000000000..6ab86fe60d --- /dev/null +++ b/scripts/configtools/README @@ -0,0 +1,2 @@ +URL: http://git.savannah.gnu.org/cgit/config.git + diff --git a/scripts/configtools/config.guess b/scripts/configtools/config.guess new file mode 100755 index 0000000000..4c8f032e78 --- /dev/null +++ b/scripts/configtools/config.guess @@ -0,0 +1,1508 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 +# Free Software Foundation, Inc. + +timestamp='2010-09-24' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner. Please send patches (context +# diff format) to and include a ChangeLog +# entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free +Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' HUP INT TERM + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" HUP INT PIPE TERM ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + LIBC=gnu + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-tilera-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + i386) + eval $set_cc_for_build + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + UNAME_PROCESSOR="x86_64" + fi + fi ;; + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/scripts/configtools/config.sub b/scripts/configtools/config.sub new file mode 100755 index 0000000000..320e303881 --- /dev/null +++ b/scripts/configtools/config.sub @@ -0,0 +1,1739 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 +# Free Software Foundation, Inc. + +timestamp='2010-09-11' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Please send patches to . Submit a context +# diff and a properly formatted GNU ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free +Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | picochip) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile-* | tilegx-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze) + basic_machine=microblaze-xilinx + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + # This must be matched before tile*. + tilegx*) + basic_machine=tilegx-unknown + os=-linux-gnu + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -nacl*) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/scripts/fixconfigtools b/scripts/fixconfigtools index 3613d8f602..26f1015e87 100755 --- a/scripts/fixconfigtools +++ b/scripts/fixconfigtools @@ -1,17 +1,12 @@ #!/bin/sh -. config/options - -# Avoid infinite loop -[ "$*" = "$BUILD/configtools" ] && exit 0 - -$SCRIPTS/build configtools +. config/options $1 for i in $@; do - [ -f "$i/config.guess" ] && cp -f $BUILD/configtools/config.guess $i - [ -f "$i/config.sub" ] && cp -f $BUILD/configtools/config.sub $i - [ -f "$i/configure.guess" ] && cp -f $BUILD/configtools/config.guess $i/configure.guess - [ -f "$i/configure.sub" ] && cp -f $BUILD/configtools/config.sub $i/configure.sub + [ -f "$i/config.guess" ] && cp -f $SCRIPTS/configtools/config.guess $i + [ -f "$i/config.sub" ] && cp -f $SCRIPTS/configtools/config.sub $i + [ -f "$i/configure.guess" ] && cp -f $SCRIPTS/configtools/config.guess $i/configure.guess + [ -f "$i/configure.sub" ] && cp -f $SCRIPTS/configtools/config.sub $i/configure.sub done exit 0 From b42f8177fc3a63baf4a78028505b2e97cb3cfc58 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 07:26:53 +0100 Subject: [PATCH 424/850] xbmc-dharma: add script to rename patches Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc-dharma/patches/rename.sh | 5 +++++ 1 file changed, 5 insertions(+) create mode 100755 packages/mediacenter/xbmc-dharma/patches/rename.sh diff --git a/packages/mediacenter/xbmc-dharma/patches/rename.sh b/packages/mediacenter/xbmc-dharma/patches/rename.sh new file mode 100755 index 0000000000..9bd9be5d89 --- /dev/null +++ b/packages/mediacenter/xbmc-dharma/patches/rename.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +for i in `ls xbmc-dharma-*.patch`; do + mv $i `echo $i | sed "s,$1,$2,g"` +done From 8bbf762598cf0f03cef14b5cb15c5db802562b57 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 07:27:04 +0100 Subject: [PATCH 425/850] xbmc: add script to rename patches Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc/patches/rename.sh | 5 +++++ 1 file changed, 5 insertions(+) create mode 100755 packages/mediacenter/xbmc/patches/rename.sh diff --git a/packages/mediacenter/xbmc/patches/rename.sh b/packages/mediacenter/xbmc/patches/rename.sh new file mode 100755 index 0000000000..fb8a0dec17 --- /dev/null +++ b/packages/mediacenter/xbmc/patches/rename.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +for i in `ls xbmc-*.patch`; do + mv $i `echo $i | sed "s,$1,$2,g"` +done From 97c79401b77827cd98ef3882d096992f81184102 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 07:27:43 +0100 Subject: [PATCH 426/850] xbmc: update to xbmc-35326 Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mediacenter/xbmc/meta b/packages/mediacenter/xbmc/meta index 68438ad440..26d724ea37 100644 --- a/packages/mediacenter/xbmc/meta +++ b/packages/mediacenter/xbmc/meta @@ -1,5 +1,5 @@ PKG_NAME="xbmc" -PKG_VERSION="34321" +PKG_VERSION="35326" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From 0ad3a41081f5620877244ef37a18aeed82a40f2f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 07:27:57 +0100 Subject: [PATCH 427/850] xbmc-dharma: update to xbmc-dharma-35326 Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc-dharma/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mediacenter/xbmc-dharma/meta b/packages/mediacenter/xbmc-dharma/meta index 8c2fe9ebf1..5e7dbe1c74 100644 --- a/packages/mediacenter/xbmc-dharma/meta +++ b/packages/mediacenter/xbmc-dharma/meta @@ -1,5 +1,5 @@ PKG_NAME="xbmc-dharma" -PKG_VERSION="35248" +PKG_VERSION="35326" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From 6143999f194cbaadef1f4109837c978b337d5f53 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 07:28:12 +0100 Subject: [PATCH 428/850] xbmc-dharma-theme-Confluence: update to xbmc-dharma-theme-Confluence-35326 Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc-dharma-theme-Confluence/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mediacenter/xbmc-dharma-theme-Confluence/meta b/packages/mediacenter/xbmc-dharma-theme-Confluence/meta index 23784e5c37..d07860aaae 100644 --- a/packages/mediacenter/xbmc-dharma-theme-Confluence/meta +++ b/packages/mediacenter/xbmc-dharma-theme-Confluence/meta @@ -1,5 +1,5 @@ PKG_NAME="xbmc-dharma-theme-Confluence" -PKG_VERSION="35248" +PKG_VERSION="35326" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From 3640c6fc97358fabf7ef484e417344c093e35c5d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 07:28:27 +0100 Subject: [PATCH 429/850] xbmc-theme-Confluence: update to xbmc-theme-Confluence-35326 Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc-theme-Confluence/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mediacenter/xbmc-theme-Confluence/meta b/packages/mediacenter/xbmc-theme-Confluence/meta index 23d9bf285a..f159137abb 100644 --- a/packages/mediacenter/xbmc-theme-Confluence/meta +++ b/packages/mediacenter/xbmc-theme-Confluence/meta @@ -1,5 +1,5 @@ PKG_NAME="xbmc-theme-Confluence" -PKG_VERSION="34321" +PKG_VERSION="35326" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From 36ca363300a8f29dd5f3061430dcff66542904f8 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 07:30:48 +0100 Subject: [PATCH 430/850] xbmc: rename patches Signed-off-by: Stephan Raue --- ...-002-arm_remove_forced_python2.5-0.1.patch | 15 ++++++++++++++ ...326-201-let_select_XBMCProjectM-0.1.patch} | 0 ... xbmc-35326-202-let_select_RSXS-0.1.patch} | 0 ...c-35326-301-correct_lzo_include-0.1.patch} | 0 ...6-302-dont_hardcode_usr_include-0.1.patch} | 0 ...26-303-WiiRemote_crosscompiling-0.1.patch} | 0 ...bmc-35326-303-fix_libdvd_xFLAGS-0.1.patch} | 0 ...26-401-we_dont_need_libXinerama-0.1.patch} | 0 ...35326-402-enable_yasm_in_ffmpeg-0.1.patch} | 0 ...f => xbmc-35326-451-full_splash-0.1.patch} | 0 ...mc-35326-452-change_lcd_content-0.1.patch} | 0 ...26-452-ps3_remote_be_more_quiet-0.1.patch} | 0 ...-add_remote_irtrans_mediacenter-0.1.patch} | 0 ...c-35326-463-add_remote_devinput-0.1.patch} | 20 +++++++++++++------ ...advancedsettings_alwaysextractflags.patch} | 0 ...tings_videolibrary.flattenmoviesets.patch} | 0 16 files changed, 29 insertions(+), 6 deletions(-) create mode 100644 packages/mediacenter/xbmc/patches/xbmc-35326-002-arm_remove_forced_python2.5-0.1.patch rename packages/mediacenter/xbmc/patches/{201_xbmc-let_select_XBMCProjectM-0.1.diff => xbmc-35326-201-let_select_XBMCProjectM-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{202_xbmc-let_select_RSXS-0.1.diff => xbmc-35326-202-let_select_RSXS-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{301_xbmc-correct_lzo_include-0.1.diff => xbmc-35326-301-correct_lzo_include-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{302_xbmc-dont_hardcode_usr_include-0.1.diff => xbmc-35326-302-dont_hardcode_usr_include-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-WiiRemote_crosscompiling-0.1.diff => xbmc-35326-303-WiiRemote_crosscompiling-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-fix_libdvd_xFLAGS-0.1.diff => xbmc-35326-303-fix_libdvd_xFLAGS-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{401-xbmc-we_dont_need_libXinerama-0.1.diff => xbmc-35326-401-we_dont_need_libXinerama-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{402-xbmc-enable_yasm_in_ffmpeg-0.1.diff => xbmc-35326-402-enable_yasm_in_ffmpeg-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{451-xbmc-full_splash-0.1.diff => xbmc-35326-451-full_splash-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{452-xbmc-change_lcd_content-0.1.diff => xbmc-35326-452-change_lcd_content-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-ps3_remote_be_more_quiet-0.1.diff => xbmc-35326-452-ps3_remote_be_more_quiet-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{462-xbmc-add_remote_irtrans_mediacenter-0.1.diff => xbmc-35326-462-add_remote_irtrans_mediacenter-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{463-xbmc-add_remote_devinput-0.1.diff => xbmc-35326-463-add_remote_devinput-0.1.patch} (74%) rename packages/mediacenter/xbmc/patches/{901-advancedsettings-alwaysextractflags.diff => xbmc-35326-901-advancedsettings_alwaysextractflags.patch} (100%) rename packages/mediacenter/xbmc/patches/{902-advancedsettings-videolibrary.flattenmoviesets.diff => xbmc-35326-902-advancedsettings_videolibrary.flattenmoviesets.patch} (100%) diff --git a/packages/mediacenter/xbmc/patches/xbmc-35326-002-arm_remove_forced_python2.5-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-35326-002-arm_remove_forced_python2.5-0.1.patch new file mode 100644 index 0000000000..f90ee1faa0 --- /dev/null +++ b/packages/mediacenter/xbmc/patches/xbmc-35326-002-arm_remove_forced_python2.5-0.1.patch @@ -0,0 +1,15 @@ +diff -Naur xbmc-dharma-35100/Makefile.in xbmc-dharma-35100.patch/Makefile.in +--- xbmc-dharma-35100/Makefile.in 2010-10-30 05:36:41.000000000 +0200 ++++ xbmc-dharma-35100.patch/Makefile.in 2010-11-01 04:53:48.542705631 +0100 +@@ -471,11 +471,6 @@ + xbmc/cores/DllLoader/exports/util/exports_utils.a \ + xbmc/cores/DllLoader/exports/exports.a + +-ifeq (arm, $(ARCH)) +-# Force external python2.5 for now! +-LIBS +=-lpython2.5 +-endif +- + xbmc.bin: $(OBJSXBMC) $(DYNOBJSXBMC) + ifeq ($(findstring osx,$(ARCH)), osx) + $(CXX) $(LDFLAGS) -o xbmc.bin -Wl,-all_load,-ObjC $(DYNOBJSXBMC) $(OBJSXBMC) $(LIBS) -rdynamic diff --git a/packages/mediacenter/xbmc/patches/201_xbmc-let_select_XBMCProjectM-0.1.diff b/packages/mediacenter/xbmc/patches/xbmc-35326-201-let_select_XBMCProjectM-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/201_xbmc-let_select_XBMCProjectM-0.1.diff rename to packages/mediacenter/xbmc/patches/xbmc-35326-201-let_select_XBMCProjectM-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/202_xbmc-let_select_RSXS-0.1.diff b/packages/mediacenter/xbmc/patches/xbmc-35326-202-let_select_RSXS-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/202_xbmc-let_select_RSXS-0.1.diff rename to packages/mediacenter/xbmc/patches/xbmc-35326-202-let_select_RSXS-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/301_xbmc-correct_lzo_include-0.1.diff b/packages/mediacenter/xbmc/patches/xbmc-35326-301-correct_lzo_include-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/301_xbmc-correct_lzo_include-0.1.diff rename to packages/mediacenter/xbmc/patches/xbmc-35326-301-correct_lzo_include-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/302_xbmc-dont_hardcode_usr_include-0.1.diff b/packages/mediacenter/xbmc/patches/xbmc-35326-302-dont_hardcode_usr_include-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/302_xbmc-dont_hardcode_usr_include-0.1.diff rename to packages/mediacenter/xbmc/patches/xbmc-35326-302-dont_hardcode_usr_include-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-WiiRemote_crosscompiling-0.1.diff b/packages/mediacenter/xbmc/patches/xbmc-35326-303-WiiRemote_crosscompiling-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-WiiRemote_crosscompiling-0.1.diff rename to packages/mediacenter/xbmc/patches/xbmc-35326-303-WiiRemote_crosscompiling-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-fix_libdvd_xFLAGS-0.1.diff b/packages/mediacenter/xbmc/patches/xbmc-35326-303-fix_libdvd_xFLAGS-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-fix_libdvd_xFLAGS-0.1.diff rename to packages/mediacenter/xbmc/patches/xbmc-35326-303-fix_libdvd_xFLAGS-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/401-xbmc-we_dont_need_libXinerama-0.1.diff b/packages/mediacenter/xbmc/patches/xbmc-35326-401-we_dont_need_libXinerama-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/401-xbmc-we_dont_need_libXinerama-0.1.diff rename to packages/mediacenter/xbmc/patches/xbmc-35326-401-we_dont_need_libXinerama-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/402-xbmc-enable_yasm_in_ffmpeg-0.1.diff b/packages/mediacenter/xbmc/patches/xbmc-35326-402-enable_yasm_in_ffmpeg-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/402-xbmc-enable_yasm_in_ffmpeg-0.1.diff rename to packages/mediacenter/xbmc/patches/xbmc-35326-402-enable_yasm_in_ffmpeg-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/451-xbmc-full_splash-0.1.diff b/packages/mediacenter/xbmc/patches/xbmc-35326-451-full_splash-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/451-xbmc-full_splash-0.1.diff rename to packages/mediacenter/xbmc/patches/xbmc-35326-451-full_splash-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/452-xbmc-change_lcd_content-0.1.diff b/packages/mediacenter/xbmc/patches/xbmc-35326-452-change_lcd_content-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/452-xbmc-change_lcd_content-0.1.diff rename to packages/mediacenter/xbmc/patches/xbmc-35326-452-change_lcd_content-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-ps3_remote_be_more_quiet-0.1.diff b/packages/mediacenter/xbmc/patches/xbmc-35326-452-ps3_remote_be_more_quiet-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-ps3_remote_be_more_quiet-0.1.diff rename to packages/mediacenter/xbmc/patches/xbmc-35326-452-ps3_remote_be_more_quiet-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/462-xbmc-add_remote_irtrans_mediacenter-0.1.diff b/packages/mediacenter/xbmc/patches/xbmc-35326-462-add_remote_irtrans_mediacenter-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/462-xbmc-add_remote_irtrans_mediacenter-0.1.diff rename to packages/mediacenter/xbmc/patches/xbmc-35326-462-add_remote_irtrans_mediacenter-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/463-xbmc-add_remote_devinput-0.1.diff b/packages/mediacenter/xbmc/patches/xbmc-35326-463-add_remote_devinput-0.1.patch similarity index 74% rename from packages/mediacenter/xbmc/patches/463-xbmc-add_remote_devinput-0.1.diff rename to packages/mediacenter/xbmc/patches/xbmc-35326-463-add_remote_devinput-0.1.patch index 546137d387..8b0ef3b6b2 100644 --- a/packages/mediacenter/xbmc/patches/463-xbmc-add_remote_devinput-0.1.diff +++ b/packages/mediacenter/xbmc/patches/xbmc-35326-463-add_remote_devinput-0.1.patch @@ -1,9 +1,17 @@ -diff -Naur xbmc-dharma-33971/system/Lircmap.xml xbmc-dharma-33971.patch/system/Lircmap.xml ---- xbmc-dharma-33971/system/Lircmap.xml 2010-09-19 14:54:06.000000000 +0200 -+++ xbmc-dharma-33971.patch/system/Lircmap.xml 2010-09-28 17:45:10.196337846 +0200 -@@ -406,4 +406,57 @@ - KEY_YELLOW - KEY_BLUE +diff -Naur xbmc-dharma-35248/system/Lircmap.xml xbmc-dharma-35248.patch/system/Lircmap.xml +--- xbmc-dharma-35248/system/Lircmap.xml 2010-11-12 13:25:11.464538074 +0100 ++++ xbmc-dharma-35248.patch/system/Lircmap.xml 2010-11-12 13:26:26.486568902 +0100 +@@ -365,7 +365,6 @@ + + + cx23885_remote +- devinput + KEY_LEFT + KEY_RIGHT + KEY_UP +@@ -452,4 +451,57 @@ + yellow + blue + + diff --git a/packages/mediacenter/xbmc/patches/901-advancedsettings-alwaysextractflags.diff b/packages/mediacenter/xbmc/patches/xbmc-35326-901-advancedsettings_alwaysextractflags.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/901-advancedsettings-alwaysextractflags.diff rename to packages/mediacenter/xbmc/patches/xbmc-35326-901-advancedsettings_alwaysextractflags.patch diff --git a/packages/mediacenter/xbmc/patches/902-advancedsettings-videolibrary.flattenmoviesets.diff b/packages/mediacenter/xbmc/patches/xbmc-35326-902-advancedsettings_videolibrary.flattenmoviesets.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/902-advancedsettings-videolibrary.flattenmoviesets.diff rename to packages/mediacenter/xbmc/patches/xbmc-35326-902-advancedsettings_videolibrary.flattenmoviesets.patch From bffeffa84c4f1fc8f99dacde33f2660f13896b5c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 07:31:00 +0100 Subject: [PATCH 431/850] xbmc-dharma: rename patches Signed-off-by: Stephan Raue --- ...5326-002-arm_remove_forced_python2.5-0.1.patch | 15 +++++++++++++++ ...a-35326-201-let_select_XBMCProjectM-0.1.patch} | 0 ...mc-dharma-35326-202-let_select_RSXS-0.1.patch} | 0 ...harma-35326-301-correct_lzo_include-0.1.patch} | 0 ...35326-302-dont_hardcode_usr_include-0.1.patch} | 0 ...-35326-303-WiiRemote_crosscompiling-0.1.patch} | 0 ...-dharma-35326-303-fix_libdvd_xFLAGS-0.1.patch} | 0 ...-35326-401-we_dont_need_libXinerama-0.1.patch} | 0 ...rma-35326-402-enable_yasm_in_ffmpeg-0.1.patch} | 0 ...> xbmc-dharma-35326-451-full_splash-0.1.patch} | 0 ...dharma-35326-452-change_lcd_content-0.1.patch} | 0 ...-35326-452-ps3_remote_be_more_quiet-0.1.patch} | 0 ...-462-add_remote_irtrans_mediacenter-0.1.patch} | 0 ...harma-35326-463-add_remote_devinput-0.1.patch} | 0 ...901-advancedsettings_alwaysextractflags.patch} | 0 ...dsettings_videolibrary.flattenmoviesets.patch} | 0 16 files changed, 15 insertions(+) create mode 100644 packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-002-arm_remove_forced_python2.5-0.1.patch rename packages/mediacenter/xbmc-dharma/patches/{201_xbmc-let_select_XBMCProjectM-0.1.diff => xbmc-dharma-35326-201-let_select_XBMCProjectM-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{202_xbmc-let_select_RSXS-0.1.diff => xbmc-dharma-35326-202-let_select_RSXS-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{301_xbmc-correct_lzo_include-0.1.diff => xbmc-dharma-35326-301-correct_lzo_include-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{302_xbmc-dont_hardcode_usr_include-0.1.diff => xbmc-dharma-35326-302-dont_hardcode_usr_include-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-WiiRemote_crosscompiling-0.1.diff => xbmc-dharma-35326-303-WiiRemote_crosscompiling-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-fix_libdvd_xFLAGS-0.1.diff => xbmc-dharma-35326-303-fix_libdvd_xFLAGS-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{401-xbmc-we_dont_need_libXinerama-0.1.diff => xbmc-dharma-35326-401-we_dont_need_libXinerama-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{402-xbmc-enable_yasm_in_ffmpeg-0.1.diff => xbmc-dharma-35326-402-enable_yasm_in_ffmpeg-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{451-xbmc-full_splash-0.1.diff => xbmc-dharma-35326-451-full_splash-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{452-xbmc-change_lcd_content-0.1.diff => xbmc-dharma-35326-452-change_lcd_content-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-ps3_remote_be_more_quiet-0.1.diff => xbmc-dharma-35326-452-ps3_remote_be_more_quiet-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{462-xbmc-add_remote_irtrans_mediacenter-0.1.diff => xbmc-dharma-35326-462-add_remote_irtrans_mediacenter-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{463-xbmc-add_remote_devinput-0.1.diff => xbmc-dharma-35326-463-add_remote_devinput-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{901-advancedsettings-alwaysextractflags.diff => xbmc-dharma-35326-901-advancedsettings_alwaysextractflags.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{902-advancedsettings-videolibrary.flattenmoviesets.diff => xbmc-dharma-35326-902-advancedsettings_videolibrary.flattenmoviesets.patch} (100%) diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-002-arm_remove_forced_python2.5-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-002-arm_remove_forced_python2.5-0.1.patch new file mode 100644 index 0000000000..f90ee1faa0 --- /dev/null +++ b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-002-arm_remove_forced_python2.5-0.1.patch @@ -0,0 +1,15 @@ +diff -Naur xbmc-dharma-35100/Makefile.in xbmc-dharma-35100.patch/Makefile.in +--- xbmc-dharma-35100/Makefile.in 2010-10-30 05:36:41.000000000 +0200 ++++ xbmc-dharma-35100.patch/Makefile.in 2010-11-01 04:53:48.542705631 +0100 +@@ -471,11 +471,6 @@ + xbmc/cores/DllLoader/exports/util/exports_utils.a \ + xbmc/cores/DllLoader/exports/exports.a + +-ifeq (arm, $(ARCH)) +-# Force external python2.5 for now! +-LIBS +=-lpython2.5 +-endif +- + xbmc.bin: $(OBJSXBMC) $(DYNOBJSXBMC) + ifeq ($(findstring osx,$(ARCH)), osx) + $(CXX) $(LDFLAGS) -o xbmc.bin -Wl,-all_load,-ObjC $(DYNOBJSXBMC) $(OBJSXBMC) $(LIBS) -rdynamic diff --git a/packages/mediacenter/xbmc-dharma/patches/201_xbmc-let_select_XBMCProjectM-0.1.diff b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-201-let_select_XBMCProjectM-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/201_xbmc-let_select_XBMCProjectM-0.1.diff rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-201-let_select_XBMCProjectM-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/202_xbmc-let_select_RSXS-0.1.diff b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-202-let_select_RSXS-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/202_xbmc-let_select_RSXS-0.1.diff rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-202-let_select_RSXS-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/301_xbmc-correct_lzo_include-0.1.diff b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-301-correct_lzo_include-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/301_xbmc-correct_lzo_include-0.1.diff rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-301-correct_lzo_include-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/302_xbmc-dont_hardcode_usr_include-0.1.diff b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-302-dont_hardcode_usr_include-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/302_xbmc-dont_hardcode_usr_include-0.1.diff rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-302-dont_hardcode_usr_include-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-WiiRemote_crosscompiling-0.1.diff b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-303-WiiRemote_crosscompiling-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-WiiRemote_crosscompiling-0.1.diff rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-303-WiiRemote_crosscompiling-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-fix_libdvd_xFLAGS-0.1.diff b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-303-fix_libdvd_xFLAGS-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-fix_libdvd_xFLAGS-0.1.diff rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-303-fix_libdvd_xFLAGS-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/401-xbmc-we_dont_need_libXinerama-0.1.diff b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-401-we_dont_need_libXinerama-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/401-xbmc-we_dont_need_libXinerama-0.1.diff rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-401-we_dont_need_libXinerama-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/402-xbmc-enable_yasm_in_ffmpeg-0.1.diff b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-402-enable_yasm_in_ffmpeg-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/402-xbmc-enable_yasm_in_ffmpeg-0.1.diff rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-402-enable_yasm_in_ffmpeg-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/451-xbmc-full_splash-0.1.diff b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-451-full_splash-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/451-xbmc-full_splash-0.1.diff rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-451-full_splash-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/452-xbmc-change_lcd_content-0.1.diff b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-452-change_lcd_content-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/452-xbmc-change_lcd_content-0.1.diff rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-452-change_lcd_content-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-ps3_remote_be_more_quiet-0.1.diff b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-452-ps3_remote_be_more_quiet-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-ps3_remote_be_more_quiet-0.1.diff rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-452-ps3_remote_be_more_quiet-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/462-xbmc-add_remote_irtrans_mediacenter-0.1.diff b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-462-add_remote_irtrans_mediacenter-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/462-xbmc-add_remote_irtrans_mediacenter-0.1.diff rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-462-add_remote_irtrans_mediacenter-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/463-xbmc-add_remote_devinput-0.1.diff b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-463-add_remote_devinput-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/463-xbmc-add_remote_devinput-0.1.diff rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-463-add_remote_devinput-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/901-advancedsettings-alwaysextractflags.diff b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-901-advancedsettings_alwaysextractflags.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/901-advancedsettings-alwaysextractflags.diff rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-901-advancedsettings_alwaysextractflags.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/902-advancedsettings-videolibrary.flattenmoviesets.diff b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-902-advancedsettings_videolibrary.flattenmoviesets.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/902-advancedsettings-videolibrary.flattenmoviesets.diff rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-902-advancedsettings_videolibrary.flattenmoviesets.patch From 24b1bb3c8a7d271cb601335af544d234b49398e7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 07:31:35 +0100 Subject: [PATCH 432/850] xbmc-theme-Confluence: remove holiday theme patch Signed-off-by: Stephan Raue --- .../patches/010_Holiday-Theme-0.2.diff | Bin 1990674 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 packages/mediacenter/xbmc-theme-Confluence/patches/010_Holiday-Theme-0.2.diff diff --git a/packages/mediacenter/xbmc-theme-Confluence/patches/010_Holiday-Theme-0.2.diff b/packages/mediacenter/xbmc-theme-Confluence/patches/010_Holiday-Theme-0.2.diff deleted file mode 100644 index f3be4b598954cc9bf6bd638fe44609715add1d70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1990674 zcmd4&1yo$kwl)gmt_kjLjdkPh76|Tcja#5`4G;)Uf;Pdm@!)|#umrc@k|4pI1ozu{ z&-PtEzvTB~gx?d<5d)UCWd>HMr+ZMYx~U{^4g zoV%Nyi#OQK2F%3=Bpab%Y3J8hv0l9hqdeH%RLA<w zhzJRR{_Iy;nvP3YNSITQ4)FT`6rz)s#-hW7zr-EDj`j`^NjMVXJb!-1{qqzA><97o z1WWz~NY=&57Hk1=_u%$$vlr+2>(qZV73Z;WcY}DkyGY_<0pNYo!-3I(Sb0L|l-*q% zZLR$2{=lD(i%atNc}(#?o6|x3J-`wSj;>brV21xVg(+?e_OkJG^nf_JyGg3J*@8X5 z@B%(%bn;gI;yizQ_K&_W#eE#T9Iaizl3xB^5U?w^trY~!#w*0d3*`J=3b2dw{MF*m z3q0Jt{3L;Jd;j?GUzPrnz(4Bz{~C&~qbLGU%t$qR(@;(ubq@A>@aDDfMQe}xflU|;{=qyKx%{u?&@5A*$}oqs#s z`c^JrH;AJf_@9S_7sSOY%n2`n|N0{NR}t~~&*A?YG12q{dpW|L2gK|D&UwHQ5&Q!e zp?{q!!v7*wJpR*$eC}F!?Efo#fN&4< zkMI%rZ^R1!e^maT0`|AI|L^1qAH4ogE&C^f|59~-FJN8%82mqkhwgU=|5oiv_uSFb z)BXPlQh%w>|5L)+{&V@BE7;c23ZC%&k(B(Y&i`|!e%tp?WMBVlAOCA!_`mjm2^0~6 z=Ze3zDjhFSl$RI&_jkD>JSF)jbH)GtyZ$yW{VRVI<^{p?M`6(4=8wFbymSB{Cm;VG z$s-^}Q(Xz3?NML>5D*Y>Rg~qm5fBia;O}G%G0nJ)fNgjTLzpmvzhQbe+ z?uv?D@FOk!je`(Ls}lda(nHzkcctsA|Fxkp+Vu(L=kdm@7$D7;#sRx^*k{^jeea z9)2pZG>ksp9f#IF-qkujL>Qr^_>M?)JvDVvNc2xVmmqD$dBq1u|HmKbFdEsIMR~0qak{K@syN`q+R&FRE)}i2VeHuXO^s?}i$=JWSwHsSWS3XD z?sGZkHeI`Fk4A;@5ZPPI`5bfBc;=0{-T1K<{9MvdHCf9q-8AYGP_13fxN>bJg~4d+ z520y@^>v6Y^MqSOT)Q@?bqL8knf&SBk!KmqwQ}3d+w3 zQ)J2QEnpR#H2y|!TR|7yyFDvA z=oiSs+LiVNhuUj9oNkhcg0uCXV_1N-YT^(Vl+(uWvyWF&Zx7F)CQ?5acbE5H+JDQf zt9sfo+UB+6TGY9{{pg#o1FdEHN{e&$2DGBzlm|FX(7ml33Ifl#VO(nrJS0(_Cg|N7 zr3M3L9*l>AUd%i&J$7a}Dc$$mJ_hy&InRVpfmhU;I^TjU%$rumA9-Mld2gV#C5x5Z zD^&9#8=3B9i?vD%LYjxZI$Nq07nd84bDD=0!!2b3d170X6&ICS7hJlx9jVua75CKF zk9xX+d%y41FF2vYR!Fso+caNeK-@UJuOee4Afh)RA7BThiMT-_1 zP@byAysbwA?ZcIK(8uMGyGy$*(oU#9H*LU2{lT4pXfGq}XD!}}<1^}@{(TPiJRXaK z^N%&J>odUGKkEaWLOv8bZO)bGfwpZNiECe+tzOC&K;>V}&S(vAl$*}kEbNQcTnk@f zz-K#V^IT-f1DKjeZ>*1Rch!41-_vqeDAA56HIe5q-?j z*rdKCxgUvn=l>cjFuExe{F*q zenoR?VajKr`nK(DkBo~$=_lL~%eYihZ}_Ez%GTGKEP~fA`Vr<1w|q5%Zb6-aKR&)Z zVm1F39Na2&`_29qN9+`RpKcugNU-9Rwko1=uJ~dr0y!6vEhKogb+~f-_LlEn zv)It*Q_kSQxaMnHFH?KaaiqDy?�cjC&}*6zu>_=UIKyOLKLEMI@2w+D~6cw<)Ai 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�$U>j9TH^ff5& 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%0Am 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%0AYeR5kIrgX$FZPXXUqK$nR|uY4G`{rLYq*thGW`j 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 z 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%0D+=DFlxD6D<{TRNYqld?= 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⪙B$;qgw4oCxM>_zxbp=r#Xk)&d& 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 z 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 r!#wZ`UXbK;XcOvuytgX_)W|3l-q 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 Xl`so%xA-LSm3Vm(*oBt%^LEeVz%3C*l9_P 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 LIo=Sodt~lz<6-2y0 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

7j3vxuh1iT%dMhNze2k@xdZCyzqbkD!ecs0 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

!$**s@lgR@i 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∨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

9w|X_H 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

x!61;gPo36Z}_>lYm?fO0Z-z%ucQ8KT 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

d|1`$J}p~rf08Pg5RO43 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 %5L70?{6Rc__pl#C!*EhW^{9kkUhPoH-VreU1K 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

xR8QV`WB6rPA_cg%^%tBgAKDD1q;sdx-$m= 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 RjTQaesJl1{}35so!|(Ks&HkI0+o8f&1fw< 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

C*w@Wv-p{;)}h+Z>2i=j-APF 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�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 Date: Fri, 19 Nov 2010 07:31:55 +0100 Subject: [PATCH 433/850] xbmc-dharma-theme-Confluence: remove holiday theme patch Signed-off-by: Stephan Raue --- .../patches/010_Holiday-Theme-0.2.diff | Bin 1990674 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 packages/mediacenter/xbmc-dharma-theme-Confluence/patches/010_Holiday-Theme-0.2.diff diff --git a/packages/mediacenter/xbmc-dharma-theme-Confluence/patches/010_Holiday-Theme-0.2.diff b/packages/mediacenter/xbmc-dharma-theme-Confluence/patches/010_Holiday-Theme-0.2.diff deleted file mode 100644 index f3be4b598954cc9bf6bd638fe44609715add1d70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1990674 zcmd4&1yo$kwl)gmt_kjLjdkPh76|Tcja#5`4G;)Uf;Pdm@!)|#umrc@k|4pI1ozu{ z&-PtEzvTB~gx?d<5d)UCWd>HMr+ZMYx~U{^4g zoV%Nyi#OQK2F%3=Bpab%Y3J8hv0l9hqdeH%RLA<w zhzJRR{_Iy;nvP3YNSITQ4)FT`6rz)s#-hW7zr-EDj`j`^NjMVXJb!-1{qqzA><97o z1WWz~NY=&57Hk1=_u%$$vlr+2>(qZV73Z;WcY}DkyGY_<0pNYo!-3I(Sb0L|l-*q% zZLR$2{=lD(i%atNc}(#?o6|x3J-`wSj;>brV21xVg(+?e_OkJG^nf_JyGg3J*@8X5 z@B%(%bn;gI;yizQ_K&_W#eE#T9Iaizl3xB^5U?w^trY~!#w*0d3*`J=3b2dw{MF*m z3q0Jt{3L;Jd;j?GUzPrnz(4Bz{~C&~qbLGU%t$qR(@;(ubq@A>@aDDfMQe}xflU|;{=qyKx%{u?&@5A*$}oqs#s z`c^JrH;AJf_@9S_7sSOY%n2`n|N0{NR}t~~&*A?YG12q{dpW|L2gK|D&UwHQ5&Q!e zp?{q!!v7*wJpR*$eC}F!?Efo#fN&4< zkMI%rZ^R1!e^maT0`|AI|L^1qAH4ogE&C^f|59~-FJN8%82mqkhwgU=|5oiv_uSFb z)BXPlQh%w>|5L)+{&V@BE7;c23ZC%&k(B(Y&i`|!e%tp?WMBVlAOCA!_`mjm2^0~6 z=Ze3zDjhFSl$RI&_jkD>JSF)jbH)GtyZ$yW{VRVI<^{p?M`6(4=8wFbymSB{Cm;VG z$s-^}Q(Xz3?NML>5D*Y>Rg~qm5fBia;O}G%G0nJ)fNgjTLzpmvzhQbe+ z?uv?D@FOk!je`(Ls}lda(nHzkcctsA|Fxkp+Vu(L=kdm@7$D7;#sRx^*k{^jeea z9)2pZG>ksp9f#IF-qkujL>Qr^_>M?)JvDVvNc2xVmmqD$dBq1u|HmKbFdEsIMR~0qak{K@syN`q+R&FRE)}i2VeHuXO^s?}i$=JWSwHsSWS3XD z?sGZkHeI`Fk4A;@5ZPPI`5bfBc;=0{-T1K<{9MvdHCf9q-8AYGP_13fxN>bJg~4d+ z520y@^>v6Y^MqSOT)Q@?bqL8knf&SBk!KmqwQ}3d+w3 zQ)J2QEnpR#H2y|!TR|7yyFDvA z=oiSs+LiVNhuUj9oNkhcg0uCXV_1N-YT^(Vl+(uWvyWF&Zx7F)CQ?5acbE5H+JDQf zt9sfo+UB+6TGY9{{pg#o1FdEHN{e&$2DGBzlm|FX(7ml33Ifl#VO(nrJS0(_Cg|N7 zr3M3L9*l>AUd%i&J$7a}Dc$$mJ_hy&InRVpfmhU;I^TjU%$rumA9-Mld2gV#C5x5Z zD^&9#8=3B9i?vD%LYjxZI$Nq07nd84bDD=0!!2b3d170X6&ICS7hJlx9jVua75CKF zk9xX+d%y41FF2vYR!Fso+caNeK-@UJuOee4Afh)RA7BThiMT-_1 zP@byAysbwA?ZcIK(8uMGyGy$*(oU#9H*LU2{lT4pXfGq}XD!}}<1^}@{(TPiJRXaK z^N%&J>odUGKkEaWLOv8bZO)bGfwpZNiECe+tzOC&K;>V}&S(vAl$*}kEbNQcTnk@f zz-K#V^IT-f1DKjeZ>*1Rch!41-_vqeDAA56HIe5q-?j z*rdKCxgUvn=l>cjFuExe{F*q zenoR?VajKr`nK(DkBo~$=_lL~%eYihZ}_Ez%GTGKEP~fA`Vr<1w|q5%Zb6-aKR&)Z zVm1F39Na2&`_29qN9+`RpKcugNU-9Rwko1=uJ~dr0y!6vEhKogb+~f-_LlEn zv)It*Q_kSQxaMnHFH?KaaiqDy?�cjC&}*6zu>_=UIKyOLKLEMI@2w+D~6cw<)Ai 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�$U>j9TH^ff5& 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%0Am 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%0AYeR5kIrgX$FZPXXUqK$nR|uY4G`{rLYq*thGW`j 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 z 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%0D+=DFlxD6D<{TRNYqld?= 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⪙B$;qgw4oCxM>_zxbp=r#Xk)&d& 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 z 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 r!#wZ`UXbK;XcOvuytgX_)W|3l-q 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 Xl`so%xA-LSm3Vm(*oBt%^LEeVz%3C*l9_P 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 LIo=Sodt~lz<6-2y0 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

7j3vxuh1iT%dMhNze2k@xdZCyzqbkD!ecs0 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

!$**s@lgR@i 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∨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

9w|X_H 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

x!61;gPo36Z}_>lYm?fO0Z-z%ucQ8KT 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

d|1`$J}p~rf08Pg5RO43 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 %5L70?{6Rc__pl#C!*EhW^{9kkUhPoH-VreU1K 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

xR8QV`WB6rPA_cg%^%tBgAKDD1q;sdx-$m= za&R4`TWB&kW6b2qN1#K&H))QYc1*v`aU85Os)*wNE9*fx)CSWgt5efD?~gzJ__QE) zjv4|#-dq3$uy7NAyHA`>CR^qd_CZ_R2f;Db8U`*MoF9rbvJ{=gew-8YLrJ7YEu7Q8 z%O90poNpmU>haVhCp3Sn4?~f-4ZwY_>HOzG4#Ee2e11tp24XDHSS>4b+~?G_9(yPO zV-$v+G7P|IN1*-;Z>qNlJ*-7k7#UOm#43z*oT95E#ubNzXKJ-5-NFBA1S4VfmFFMtcd&Bsl0KN9-pKFZk3X}0+{7}gbC zHh2yA0^A3U4k%-0oW29*t7DUPA~H(9F5uyiTn#hYB36c1?n3Q3hH9-M6TInqUX#o~ zr`{A;-*h}-+vaoow^DeY<~e;iUv@iouWDt=bbV8iQiioL|08bWab8iYU3ysAveQ6* z^8pX(?6i-}u7V^WQ3(wu?^u_aFAj&PCTCu06`jP@!;* zvF4p=9nC2$+CJSYjPX6?fk&04GTB+FDk58>;W*{Ak&f5uZ`%%k(ZrCd#KnjseUWMD zU+ccVL?V})fJJXAqu>uQL{?<`;ovp<)UPMM*19(R?rGgqs!Zpp)_vMqxEQhFBzE+5Wy;mhn7Sh!Ty~6_u5gTZ?3ud zu`hr7_1CN3yuR-Xqek^0d{~t!#?^X^&knrjja}_Y;m8n|@6bGcxNc(UN&nuzxuU&b z#I&VLtyR7G%!i9-7Ik)=9j9P^YzwcJkW7D!rGpaRkZZ?qUB{UY%`>NBZ&Okt-*>z-6l2z`T zPJN8$?`7yA#1*k1Q(|TXEMcl-76o4&>fX?L|AjYQPX#l215!OtWJ2~| z3E+FOkU;HXHH?c~?=zWU?cf(va0G;&H0e-EGGUZeBv*1Irq`H}8MuM2Q@s?KIYa^9 zsoFhS?875?wx*%3S1VCsT6-4uMCdkqSEL7v6M%~IM(5H&a-MPR*=K3YCl)`8eu0Mo zd%kM++ld1k2+1QRPK<8WRNA}pGCM;=y2j($Gaova)45ASc^~<&5TnMkF>oWjV7!&@ zzWYaY>jtu$iBOl94!-BjT_>pPLNBcv50huOO#>uOxnT%q-aS)f#CTI*Ma-sip-ZOs zSp(ijaBN@@UlzG1SE=N~4oMPvzlfpZE&wgG0PV>PS}kKNI$LINfzIjlSJ^`ji9Svr zxl;eG$kRmDyY04DZ$AAb8nKhpwoK~K+g;ZphrD*T`P0G|Vx(HCbm`?{w7^DbJi|a= zcHWy5I!5x$9yOzz!E-FiLqufWUnbO}yZEP0{@OudE6{={fy2kqevwB->mSK^p5-nh z8QnvcN@|)2seV*Ey#Nu1)-;`Ymr_C=b8_tpx#gDS_RW!fAL9cuH!4L*EHu-$jFQ5r z^I=c4RzI#^{$a~^@66h0<2Wie{p8@qbK*K948a34r7ws2MserI+c*MQ?L)CG3>lOZ zF9CE(jbq1td|;_-Ac54f@?4zzmAR<1>r6ljPy!#cp9lAazP~y}*gUFyzgRQ6C1|sv z0~g+t6q*YDD0%Gj$CS#%n_hYNqxHayS`{>|A;d@OjmjFqzI6-e6cru(R!AG}Y~MbX zS)_SFo+shjxQLDJ{S$#ekDt*Oqys9(I-)a9d$N4rx*3#`^-iu;tB;BpnBMN1mgQmv zhH6}{aiAj0#q@qa{?M=8GL;lbSVFCP0w87a>}be$wjD-JrouOo-2+A9-p5?XIECR> zwU%iU!$F7A6Z(gD_4@IfirSCung9+YuCx88CNu-az=t|rms6wrdWwY6!x#PXXE7R< z4dx{;Yu-Fd1)#F9OkXtU`j|1jsYLt({(lx>6Rvhqr}zI|d<9^ERxe!~zD$^NUGe{ylB;hcr4 zEiL*D@!MHPtD9C3dA>Dq`?#S(NEsa&pb#wDM8OiB9b3C@q-@B*SmgQ7otMS6Zmg`GLe>Lttv1bfJ6ULB%$fBKVUXPnv9TnEh%*oWy}S#OL_Cu!i;}_@>NuT zrlW{@WEf>F*dXc)3CL~9`-Nx%jXI5*6%D$}?8K72NklKONj&hjUzbc8;5~T-SZqcP zPetcT%+~aR8z2H&ArBx^l(G-9$Aa}y@4Ry`-+)C6M@uVOcwIqz6{aysg3|cDXw+p& zp~I5B$F*iF^jTtcqff^TZ1CdEt6G4kWz2jZc}Ka&%p+A;HdY*TkU8a=mNyYVENON> zbAaj4t51<1%m@7&- z4uRn7)LGi>s=L~qdW~))!|M1y8Od;=h~W;)d53%VnIF&HaSEXc?8fG(OJ!r{Q>1-H z$G&_SY+03uzP!5_G6fATJicck}$Vqjm#tFt5mDjA-c_|w3|*?4s%mV&UeZovX(m!B;;6{ z#l1HKJG2!zU~a`!=3zwwHAoA}%JfKTSaW=eicCu*r+1D`{_-*&`r+Em1d5nMHa7b^x%K_!eMaCxaA7?sAVf{_B zzOR_tWUtuh#DZ`XN_o*2IxZ=k)3nn7{VM^51x*L5;vzVnb$C0O?IM@kIG*hG$*ITQ z8*AAwZ^3VxwmS8SGW+ebkE)t3bh3=commu2<)Q$0ns;GjfNc9LxvwHpJ zsxQC$^)@yt%$c7?OEup|g(KIGXFb)A#8E@cW(GwlyZimzZ1Nw&8Rj+E+{aZvd;SVVBDvdfw z?}Fa@nhm($AXCOojP5`po)|FTL;qj2k-iIY=(LW{Rvk3&elQcxJ*$5i=o8ZlsxVo_ zc3RsQf1+C8xxv0Qc*)7m*Z;i#JV2!$e)u}PoQoQ~K<%r6YYW&&w+=r7j?n`cel0F* zE5FHtTDuPs;WO!a?zw1qoEg`hwl1n_rx8va&_RD90c#K;eSoY|_(M1{RuLjg@KV5U zn^ITNwsBO2?WOoPhy|KAk4($i*Qj&#>ignT6pPv;eaxcHvpQ`rNp*em&qruBGofm# zMm^2jvh6LO{bp!EaXxY4mrs>`?WLDEk{&>Fg^dwRLSUf?4XwrU)r|+qd;Fiq4DptU zGBT{{g7)n5r$=u;<;qtk%4O4(!UA<*W9X^uai;~E>WxgX5K8$T z(G3_CxX@Yg+#zW0zjcPj!-A`Z)k8KEnTd{QR#m8vtK-NC69%w=d@_s#$PuavL}GcX zl6{c0Ju?_p23$tVhz*1`99;}3k^vq_389#r;z*@h6xo#Bl_0c8Be4lj16oD$)}#LL z2!!P!>yCZ;si#s%-gMJ(DJ>QL8ihA$+JQ1bN8v=WO_n?y(Zwnfax2sMfX{LEs0Qea4Q*t5qs}^yi@GF(KW?xYwd@Yn zK`vRcL_d}(wvelIFsLmRcLXmGk06j5&dirZzaqTF>s29b$zx-EhEJDn5&Z-`C)6=@4PGD0+;pPz(9Nlyr38N`?f42NnICPd~kZ{6Z0~m@MLx zzv_5W4Z%PIHnA@A9Pf6z&p`$HN`it&3?)aox@}+sy zGTKf&^3_)#k&7L_n{MeF*NUc{2C96`Uq#=9t9cPS>s8cWgdGT#1a9 zsaBCM_$2jI`$Z?G#ehy;t5u;pI>Kg{PKPcUVy>lSo3D$))wb{cp&4m4kBG^p?`ca% zx6Km*m@X<_O6H{6IL^Xj7$Mx3xPhJoE}9LuhPn&%E9MA1C%f1h_|^iLGQpfiKvpGQ zG=rW|7PYX`t}a1Syz@KK9cMJ9o>Do?8CkgReXFu(UeDIdmuqN+aTLMQfrh;-XO4=J%6& ztei6coz7dzj%z(}#X&WDTv)#OlP7*#qvmzxj=g8jgYPXrwONCqr{4Z~mD@jm=wHX) z)3C z3Bcd7`Wgm^Lf8=e-~uKkBNxL*&~~M z^WAqNugK;gEFMJM6ytQ?DjT%HCMnS zCahcZ`US@pyL;_|4Hf3WYs$?RIt*B3KB#V`qG8bqNanOUZ~mD?WQi0GT-gZCaVqXIv(R zm8vyD_((%DerpBj(-o zS@ka0KOY`S!Es*M-sXXV0J-;glS;LoRfA+}w=b-YqK&k8q^>#`yz5TycjVd6Q&a$^ z>0}Nu%SE-}Z{jFV?Ahs+FK^M-DC@O+b`GK>%I)};3#_OVS1f%q{xr*9#c)G_@qJQ9 zW?^EN?b-9|Q)U~vpzb(S`1z}8XLj8EQcy|ZLV0)l8!EvoEI)d8dnb;Nj-t!-5a4my z($j90*R}pTh#)4Azl-y_89DQDVoMK!18nNt^!!oNa;&t4D}sHa@y4Vj%POxvs#K0D zY^pt9+-$BVKJzWkE!@^&dhMay{+yw#f)EC~3Z9-e>G&ne!0=?664y>s-H*c29af!P ztDq*rB5h7jS8vPeO;_|W0Zd#SoVjM=oeuELSE_tgZV@JK(D;H9?M1@y@ zt@3V}%=Tji)3Rz$eHGcAB(uTPTFe)zOD_HM?XHDg%(Sb=R;YeNw$igAm``IAYcV#G zM7ClxT~NwVxl9}WBr`VMixjVs)cvK{%P$kD{8NBoGCWirq~yZEAM~=@9RHIjiEcyE z8lSM%5t;OY3Qwit--3W=d_PPvhB~02_gDbr%Y<-yD=$6y9@nt-?YGmQu8aytxx|2~ z1X#uWbq%@VH5mNYxo7UDjqup6^^bSnIsW9EJ9g+`O?-D%pq@C@3RS4CG#xXOeeks0 zPDU8O$9xDL35a1G-Y9I53uZb1!Ze+A-rYL*GwvSV<%lzPd+CDSj}=~(0r7hgC7o%a zY>>E7Q`>z)hxYBC(2=On7cN>fig-q|q?MKt=pv>+`d{}g*;1{gH#?mORr!%^h44k53(O{6z2+P051Cg`0ssa!@jWN z@4jns=hJ}9XT*!BXC~aZk2_S*Yp@3^%L{lGA}(D(Y^#(*b9t=G)~*d4CA_|KElS-U4#z)wNEA9#n;M_q0kT0=o>-> zom;IggOx~hvsV@51c;8fAdB0e*BZ6{j1;vx6v&#ghk&z!K%UOY(OjrG=(?T7(RMS6wU*?lU0@{&8R9F6IF$MMG%QdpZbVz6r=;&|i2u9(4(31X0@&bGDKr^34M z7Q$M1D>aur)pNivdaSae?=&X?!A-|2EigkyT-2;n=cFaY&b?({sVXlCWRWs04k7)x za~&3zU$0Hp=D0FmuaD@)i~53y?zwe#Y}ikEL~1$fi!Yv{b04wk>Z8lW(iRr%cV;M4 z$Z$>K9_&vls#wBA_2y1KA<4uJ%PCmJtu&2;i4g;2pzOW(6sz}dS$~u_ zAh7{pvccj)O^*f&65O7#k*+H{VaHFHkkP4>`yMk4pq}15TQU<|yfav>JV=1&!<|@A z@(y^bCB@|t5D5sX0W6r%nQcEYT&$<0hh`%s+`0%zCTq%k( zYT2sG)*IO3+g1A9f)*dN`EXAZUDh~fKPGvKiXk)$S2EE(8A{m@Y+7(Lp*tBVr);$WmZQIVK*buh%s&;R83Y6H& z4jMFD+955{cVu)L`TK-@J<_{-z+N&v z&#|w*^XMawsBnbeP5N5!SYy3}6cqfD!U*V2zMC`Sg!?`wlzs&7*u2&a`cdv*|6=S` zTG$NuYE!zt`y=9;O#LAC;56iQ;Zj_mc;+`4L9+oj7e&~lr^D(`uJfp%klCBAj>~QiYkx^H%n@`g{n#g-CGt2MZIPpnTa7w(`isxD zAhe;k#D@mK@D{S@-Ke=;)SQqB%vZU!&U-l|l6I1fR*#b}^J1o($#B&@0Ng`mg$>Hu z_R8)skMWlu*tagIq4c4>AP`9Fu*rUvBiOz5t+(GE(+;Lop_RdQIzJ03OshqN;99u3 z(RJ^%mJZsGHDdg=oquUAaa64hu&<~ulEyX4^tQ7WFCL98eF#Z2M`vo9X_YZ z$OFOP0+!JN!OlZs{z?qi)G#V_+x%@kSzV(dC#NZH8} zU#+vwYHAxZW<$7(SpCJzkFWbigy2~};%~pHbuwVCtt^^-Jid5`vufAo7X1k)*NIW~EoJnb`b96@aV|t9yNZ+#-nE zpi#?*-2p6+hdAH#Rs)^<>C0r7CjZc%p`9|!{mPf-D_hIP24G^=>5w37CX657O=awE zMy2@xKNR%>$Q1>DJz2muGa3In_kkGhONX%=$OP8;&>mnE6iK}a&4n_}7k@NWRgAz= zw-}3fhzEcQh}KNYWm48+gF#FV_@8Ouo+;by91Fm8y#aQle-ADgg^v(vG!IX`-r-1w zJ{m7Gi`>c&l}ufgpmSg%tjC*(#tdG<+DI?ZT0CL{xyacbcQ_GnkN7+bX^iLM?$X5R zjPOwdP8d6)bKI!)enu!%0r4{jvVnsy#)Pucr}CHo+(x66+32X?ug&!5X7uF`4q(?8 zJMHtoBJDcYu+)3@1zl$djb3enA-?3sn?D&fera;PHw*ZCaPs7HnvW~5+^6n|IcFyP z(=8WCr1E9F@s#DFPMdL?=bXRIL~p73J0fEc>BD8aXJ9SN8C|fA5eZDYG?V;vJ(#e= zE{Z3;0KBhaP}4|r&U2_@wIQ9bk9Kv-mLFNRqPSB>Md*W(IH>OI9F4Ap=gLbF*53Zz zL!zNhH3Qrgx^8**Gs#1#1kIeGrL%2L4d;9`+gF#9*}Udt~6ZyK@Zk04>zV zx}A*3cG6gkxox2v!m{iIDm1tJ?RZ z$RdkXyuK-9 zLICeo~{_WpQRm7>i$?^@xAZvTAZJcuyxVtY#OY~*37sF6z--h1`y;$ zU!f6Hc_-h&&-=1TYhLzhU?FpWp*(lAdhX3Z>sHX2NjW&s@>CM(ify@5jl1sxO`QCF z=#@T6%42=!4tuaHL+T?KN^Yh`lS;6Seib?{f(h5nM-qA3dV1WlvIac55u#q|A+=P>mW36u}y~q z?^SJcPX+KEDi$?C2D&o2N;>Q+# RjTQaesJl1{}35so!|(Ks&HkI0+o8f&1fw< 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

C*w@Wv-p{;)}h+Z>2i=j-APF zatg?3%Z`73zu#c8EaqFV&Ym-OuDW$FST{mnAC=ul76IwZ%Ir2@tpj1&o2pP=PWJK2 zW^`RD^RxXGcdfY4$Tt!XHS*o}ztO<3vR!|Hm74nIil2U-H$h&Ti$sQl%w$lLUwQZ zw#xKCeW%VU0@hx z+4AKd0<1bnOSi2)!wHG9{mslCF|Jv=cER_%{k*HPczumw;MrrwjKR%C{9H7grvVim z?_}(&&B&;tPb|M|-(kvHy$lR zY7e|;x zLsy`j@KI(x-e4~30;97>(NyM-LNjE=;hq25$yYio(0^js_&8uRfSnnz^$s8Z_kHV@ z)OHt`35Zk~g%KTGjI44gxM1$62|WZaF_vry-@3x02yipq18TZ^kHX1)zvob?TXPPT z;ytfuFCj>?jJB0 z1SmxAT{yYH|4@oc6gvZdfE>*g6ZE5av7S%&mX4p*H=;QN{gAKe3^hO=chBnI8A1$3 zh*WSYVT5{}&med(7jyj28Nn`HFU7s@cGskq?>;AzX2!*`?otnaA~QTSaG<9cOoES3 z*{Xn;5UGvl2C_Qw#E^uhRvqAsyI^25PM4{>FK-dtqZ1E451>$~D@l}GPE_e@e#)bD&J;e;j^+O7g?V`}5a|TVkH2(d&e%z~?j4&GaonUgyX_7|9 z{LHMDerRA4s#l_1@;INZ-Ql4SgA9T!95buPpd<+&u%kgmcxL13x^2wouH{q^Q4T!($}7vuNbd7pA?Lvl1f3O892QN z7s3n0>{@aL4g39p};`uU{iOMBE_wJ9D&Y z0sm5pQCi{P$ml}*nc<=Bn;W1M3n8fei(p72(x$=2<6c|6@YMaGOpUj+wbYgjHhz4V zLA4w}TddC9n**3JT1y)4LncNXLELac_3Gv9bOLqhFS6nf%;d9ssj~G(VyRwOID+54 zwBslvdSG)D4?NKF&S4Mr>b3COZ;!9lsKTT%Yu2pkRkeoJ3{%O1euXb2S{iKc%fFE_ z$rZ@~#32*F&7MDhKSJefvay>94i;}B4dv10`i@`xtUchGYDduDG$HZ9pI@~=fvjAy zBEXGOA=Z45z9DXFn}dc99eT-KchwL$#kP|PW90Zu^fGi)Gz$V8aW91T}9Ale9D1#e!cysXTi#aDFhpQZDaXcVnGx zn;{tv2?Mw}eijPU&!P{A5tM4Z`-0&LSa3at*1_--!{cdk#CCrXdh>>C&OB|7k9oCz zE!=W49_Mt#tI&ja&ysJ3pXg7MJu<)fQF$AtB!^w6gA3!~yPx~duQiDiOA~B3(a~Ak z7eV57AD0;ESvhg`Ueyl%_u5ufjwn26;b{+sz35|u=Py_4tmgoPRamMsdc4eDWB_i&Gtptn}#Jyefa~L<*~T7K6}J9nz^}mprnc?m#~f>qKpS&$WZ4BZ~EC z2lDNNuK;kcQW+KSi$E+<@r$9mr3x3NluDThZS#pgTQKL|1NzO(norTeYDM>?1UV^> z4!?R*0vxFP?0?T9@joc3b$!q21F8Niec`z7tM%+5(kSd5$c1(Z_+Xk+)S_>E z9&DFZ&3ys3o%rlNvMbW#Q+gw568IgHD6o*OEsoZ{x6qJ``Qe8bZ24Q}VcL!LR3?@G z`z5h1#zVSDk19b19?VJPM}>U)6w|-1uC%ZkrY9m6?pLLpmVwH}r*T``v~@mrj43l+ zLGpykqxt5IMF_=?9<|%A_-LUSkzenzY6qA_lA+r4^s>nV+o=U#R`qt=P1S*D?YY>W zD7WlYQQ$3Gx$*)M1HhHEl0kD_5fC{qBtdF89l$eeY?(mVp9M$Bbg z%fMZFpgntk5QHfn#@kC1xct)FJ zIol^@TE;XPe&hG=-EBlJ2%mr9oQj<+;pPB7q4ghZoLem#909F$>*p5?@yd+8Rid2u zNXZ1@-XToy-2b7=ohdyiz9&_DJ4V$iiu9XQW;2S zy8@^T)o-_!)q|WngI<36F3l1(;qeEUa98^?@yYP$xWA7AQeoEJClLj*=D8(@RP%_`_5UtSS%YGBo{fLM4Ktf+M|y9R`=Kq_B4IBmP8T&IqZAxKgrCX zf-28z4Lsx=IvAcG7P&CcL*kdrxT)$ z+PPqhVXdjL=mKxQy^)5_3(p9r6FJ^Ep_`KFIoRfBz~ikD>f3+qx_V9L!X4XxtRr?3 zx{toy9N3@l9enA|nqotR_$gfl)VXf`aSzlw{q(27C(G~bOlP9h#Y$wSjV?*7$SO+D z#iPierC2t->@piw0NvEj09EHx96Yvm?W+fWHB<012lm)%fto45p(W>E7)- zhzfR%(4qqjTR&@3(bAY^Cof60U9FjJCN%|>Y|WYn2t!J?;!PW91!W9HPZlqm%!z8i z;THBcM5hGo7_sIadLR0d>p1IZYuzvT+!p6Yd-v{L_R{S@$jsa8%V)zaV`5P0iCF4q zD>FRWLvO7VbLmE0llLUq6_YreQm_X!7;4!?3BY5{YM3l_N` zdf$cq&|-4>fHcqp2lhgc6m16|rXQe;%;Xi#AG}%gh1nU3WrHZwW+9Y2J;BykIn=Oz z7VP%vQ|h7Kz0(yV+ESO#*k`#*)(1r4ovV7YaVi#TKMk#0sg1Pp;^n2comFnv1_G!} z@%Foor-9>fa{P%W9#ms@qy-m_kVslfftB@rCe{#OX`aZfJbdZp(iScH!R$a3OQv)l z8XyOYB{fuPcz7M)Kz3Nm1D;F*23=)_4u3vfd#HNKm>5EbuVl{1>$YURi<)!j{y ze)7LGQ?Y!%3zbrI#~M0TzDDKu-+M2k zr_`U1)~o!*w$5S_ab~QewHvf<-mjPCK9)V~3RaWFA3U8qkQZlLj*y}H6XDg&4X&zo z(g`PI#~zuzwD0r*6fi7p1>ba3Dh28cb~&s19y_e;nG+mSu4?C5t|%sEBt2_BWNnnW zV`#nOMF7fp#k}|45IVpY>-Rr$`})GA^S8n@9$2q}oX@lL9X0t$EUlh5*-EuMxzZCi zb!yS#yMB)J{Kt4Fto`xFKW$WLq;MSm+@L{&8g6b-gyiiwd?QVLjTTh~^!@79t1Fi} z8KQb1*f7cj{Pi*Zx=};l*V~$Wt>KG*>tn5tJ6( zA=pQjMP({fP;$Dw5s6O~X5r|8&Y-ZDnRduXRup!h@UzO$Is`NYe;d9tx+S6enb)%HEg(wx+^!25w6V`_`ZhLPL=+6L*+=GMiz3ZDuC^M?;Ai}JeG9`Myor*^Md3mQ#o zG@{_MB0oOy!XY_e$gL`{tx%k~%I;qE2A}LE_?XlmwfqO|dSiF6JK)9diYXQV(j*WoHC+|LIoUN7_3W4mzPfCg8 zloFMeT{0CY$(plR$&w}0O$du>&Mb}bAtezA+x~|gR&~kNb96Azo_Y6P)igOat(jzi zllOE1%wUA@vK4H%Wj-7i$Y!-#h}vsJ?}NK6!%GDgU@0Mc%b_nS|8>`#1A6^GrtSpX z=Xz@&zeFjWvds!wTvCQ) zmtp^2%kKRDPuKNa&p93T{(e87_j|2--RoZW8uvN_mT={>epO|fKEDuSk<=7UL+sf_ z!$pf!4s!Nj7m1^Oq@iD@d@S9mB}PLloKrqk(8K+Y^Lih$0PYA%_)jN)%l!gLWE!r)m2XB$9 zxk8xjr*z=jx_OyfMH%f|E3hJEx;52fU3-Wt~PhU9UY+tAY~3;Xb>=)xi|oN;jb zbLNb|onXzlapv4zvEbegG^{wJu=ND-vDA0eFkyFw28Pb`G3>gSiLwlL89yy%7N^94g6;C zW-c%)cNIT8byTxwhItt{#uv6e!=m6bCji=J_mwO6Qq~)8cd~BjcWKHg)FA%>KS)>gWYO887z>E6>hoUWD;o8p37yXG@lRJXtwA z{q?G^rSGQ5qpN<~nS+CGU-2TYTK?ok1E$`wti0^(OrV7F7A#oflZI~_3=#99m&Z^I z&2z{8-yp~X{_lC(5Ysj{B*p*{&Ni0NSfD1x1>g*^sGh5VvmU1w?_@L*(|j(zMz~ZE z!emWikv;RHk2m~&C&us@r7YGi)*C)j@}!j68Y5bj%et4pKh7L9lrA=8-6?|8N#vUIW{>t&C0NP#d5|) z*NpZ&VhJOF#?o+*_dp|+ggDkPZ$YJC=K30=#dzEBP&!nDpnj`4%CM)=+viTWXVc8| z5qPz=p8r&z==h}9N0RicUe{6BUVZn;bc3~+50Gkbw)B=U`rsXgn1#~WYhnCPv0NOJB-GSl8?SCRgxl-Cp5_Yel0w4a2^4Ny=O&2kOovF6v~Kz zOSk+G&MvXm>hHgMO&wa8dPK6gvBXnLND~Y8z0`?nrp%sZrY2;Ga16%cVao?F^JK2M z$()g!8zM;!Zx5V+jU;C3A#}+Yxi&gr_ubc8f#biJZy3sT&)TMg1a-iO^R(WIxo80H z*m17@KEHH%AR4f`t5l$y`@pMIBoyKhegHSX9G(uaNi3%QeIB9lb0@yom)Pf z;g;hDX|)BfbM(VmL%YbnF=O8`{^GTByo~xupzlbsaYW@fQ&JxPTK#+e*~PIrTua*9 zOjH4_`taY!s=*cVZ40?;&A<@mDhrfd>gQbjlkK`2NXP=I_D5`Fsk;j;A_J~Lye|os zU-b!6G3y@&RK$jsICwpK##&wyq>v3uVIF1J*vMyYpUoAP65RFudNr1zs#rAm^7)l3 zfA`|7V_N^~ub<8@YEgv~PZ3dQ&o|{ORA8eX^pDsWvt`RL8E|2GgeF#7rLeb>*}mAJ zC^0?psN=zo8%rD;f*2Ks2HsfWK5RSCr)-_>NJ=k2+h*O}DA|Zmsn@(=FdCzo2UJU! zOG;JYQkEqnH56ewN2a92F|_9KwO(F~yROx}`xo`PJiwq`qgP70I$F$s^Ske22eYV+ zFTJru)~wI)BskCu^I}0?v&P$2`Udd&B!~Zwx<|Kw^Sb^ldf83>4pS-{?yB{73~6ZlIL;(So+}f*3VpfEfcev6~r9r~$=K@`(lw z-v0K<=jzp~qH@(mjs9qKzJ>oV#_wM)UgPQd?7|x#9^Ss*QDe{xTWiv`{f_BBh zA4Q_WF6OAdSN=NQw^WG|wfyDhw4k19)1kv7%^Nm+r)j-<^B*?E1tW+z2(SP!7~2>s zi)$~MhfKiZkEX8LQD_b(Q2}bnyHD(99p~OBv0kyxI+GW4yXUm!>>q#R|9<($|JYKlO;e}BeFR*A{cry)T8INK~)Of|}E-{7Iy^H#J3e_%oUU1+W3sx?ns()32Neg2qV6aC^9i)|2> zbQaQYR7ITjojadCv1uZM3TM~=08m>ULPDKJ-y#&kq75w{8=!H8dI>&8QC{fOseWn~ zB7_*wj25m{30WSX?`e^}qG>(R2!UaBOW0INv3L&fTw-~~zC~Z%BuuEGbS0IF$B-~s z6rHN#ZC?3T};}yNjn<@(fE{W->WIbO5GIRQ3gu#k$0lPub= zvNoZASWsdELK9`iT^0=e45kIAAT5969T<&xfzvZWyR$2w9P7@0KYX~${+&C&sCnT( zzoc(aOb+jm<*ze<`nQ&bZme7Is4oLq_>1%rcl91%AxL4y=W-?WnDSIwCQz|61@0My zb`Rbm+TrSY*{3kY3a@zMDiV2&^|-R3+OYma77fQ3=aAP(>}(Hf)vHsxkD_EHADLVR z&R4Kt?pq5LeB;sQnl^2%k|U*xtZ-wA1=gOR%{(Xsxug6eyD4uGb+j$=%XU24fWZv=v*hThRXWAKO+D;x4D^~ogegMyURQ_HPewdzgr z8dlc4=r{lU;mjKmp2lz{+U%5`7O$3M+5c{P`O>9Wc^sp`$`bgr!N30<^|c(K>M;mE zu)+f5yMcg|Fk8Cv$gh{%c75mg($BBCeR_RSYu}i9HM1A$cVhW%t>&-Jyl3J=b(fv` z^__`_ZoO+{fd^aOmglDHYR}7F==*xVFCX#s$FJNuqQ@ff&s$HuTrHCv4m$;8pC?8l$63aMnpyMWavMW zNp=(0RP;0P+#jgdjqb1gA)YyUE~MsHh-SRfKYCSGj0;i;2I)?m_;};g-Y4gL5$k+Z zfclToz*QSKs75H~b5je>bmPV;pL{YDg4jNFZ@SS{4BZ)0=+R?IY9AOP*XpBcT}8~) z2A`zU@DptL3uouf#98oHSbKQ@F_x+D#g9=^g%woj^nwba>fOBgu=ek>ue|*79=)L2 zSX9SWm7qb)5pf1pOz16FU#7jeu|!Z%F*luekW>IisUXAFm?|q8jPwnjDa8!po&>C9 z@{l19ojh{nzAw6dSvuF7wVHhQ_LcEZ6dn6`NVbmu38m0UH=B1n)}DBAcqif;ozBDu z=c$0*#t0{#q6FAND`8p|=-v;1E6xeZLTh5glGPu)|9%60Kp?S^+2CFY8)8(?oj&S& zS!L`_hbf|{%6vpVe^dPNhLFrtcl=BoQghx;SJX(%w4d%vpITCD#MlJxTiq)<<^F1j zhnU(DbWr|N5k17*@%mG^~>`KtQF4JynYZDD2k+cH{(^;1A=V&Gj9T z&!w>;8Mh&vIqelMUR;g(k;=!1?^>Y%ZSO2kTP5l{!}3$Y14=seBK-DBXEzoGIL_$@ zkPi*|pi#P11oRRiau>K?IFu&8J$W8FA(P(>BtdIJa7_4sf&trQ&rss3;Y4SV3Bv!{ zC`fsuB>LMqgaw~3%da1JKnkRQrHY@krWdR;8Ll}N@8*L}s#H)g#P-E<`uX&tk0BgG z)*x&uXiXx=oWjzj`6kw_NoVMjIWi+L{2|HEXVHINYwCg+Dr{EZDvkQ*T{d?naM_0+ zu2X7zCXN_kfvN1|HJZO!#0s8f!<)@BVK|(Ccnn$vH(vd-Z+%MAAA@*^91x=jLmHJ` zd@v_|RHd_7wCyD7n0_PRih>pw+x4Ma@;~%u`h2~iD)+6&kufzxH0oL((uK%)bk+|q zvt*7h@5zZC9uO%|XN_=!9pX_)PAKnVeaWzcKtmUvU|ys;ivsJ+7b`D^TR0SGS8qc8 z-{2=d!y#d;rO++BZ-aXuK8P-2@WZ;kShK(k@gZ>xMkgE-!7F@4eFb`VBj!Ow&!7Ko zh7ER|b zUff3F7A%Bcjj~)98zmQ5DGM&hv1G_cZf3@ilz6S%Zy58$OkX=(M`Bl@jB0o&7F;HM z8Aj-_ol%Us>aOb-s2>GF1Z0eauVSoQlTJ@zU{?NsnH2mTl~Hdy-YLq$V*$$oEQ&>m zV>cPiSf$G#lT|%MW|gz3`L_fgFUpAMyl+)2#|kE~A@Q>%`tp!z$cV2tVQ*q2?@>7C zp;uE!h2glM1WS-Y1%%h(sESDluW&S*{#9_WN}RY}oEG>r-LdDh;@tR1LWTKpG` zD903n2}mTgqtSBS_o^RLV$a{~;6%IJ#+G+m^ZVvQ-wv<);hs%5LIN|)%uluor1 zL-Tybwc2Bw0OG@HyjYeVf@eL2{sWd73yh>3@xG;dC*y{Z6wCC@P{@0x6^XSKU~GM= zP(S*kMow(sDmlDhbVR7=D)G|U!$IC3k9g%zfVE*&jvu;5qVpxf^+=zF>L#|6kkgM6 z?}>iP>H1T%-YkzSczw6E3JpHF6Ltofo=D1fS=BW|rcgVG^5LRq$c}i%@3DjINZUs) z=5tMyQ!x_j0jY65tkm;uaAs7PxHWD(M2|(m1@8duJshBCpmC)BQ84!zAHE&2&TF-1 z{o3G~B{PbY`nm6Wvir0v=N?HrcdsyRl}PlaH7{`QVY*{-7%;qK0qzD|gXV(1I%xJ@ z?V=T0V98w5Y}6cH$BBidzAL0hm$YG<4zKPJT@d})F&7;!K4?E0`JN!}hATpCsz1@S zf-?|Z+~v*8-QTBl6W7tK{`>BS03Boxn8cHl)wsk0T zwrrtQ2#r7Xq)d<)aI@AEa3BF9sl$#)mQ#uO_ThA@m0VUN12QG3g!kJiWwB#B_FX{mP@B~x z&$#Ek+FcD9l%j*MWT0xjGi_^c9fAjip2Oxx%5p&o ziFK&nDfX?Li9HL^gixXnNq16X)(+jSs&(t$EDleZJv*i)I??|p^j)~*^vWUon|#xL z$JI_&6vR%RBSUQ9k!Lcr^Mh69rH9;!T8AvIwVQDG6Ep1=57Vs$wYvRrqW+32f4`#6 z>dCiC)^vRpU_9p4R!W*J5G5tcD*WA+pC1`K;cs9Eg8_mvDv7JPtQyQ#e^mKL6 z2>o_2E+)*SQgINfc8-PJDh#0JDfeEW^UKjr@xpuoGIXl!(_fdEC$tpmc94%lHI5&& z#N+D4*B+Zi@Q=f(Nry_P?89xerV5{@n{d*=REUNIpsXQ$p*5BA>PyBfam@n?+1}hA^`D6 zK*ymzjCLw>u<*1|WyEd?WtP{caIG?H$I$w(d*0gU*zWE7_SJ=ki7N30LtaVUzok@i zJVQNf8>xU-w1uIEkq!t)H+|ko=jOt@b$^h> z3WiU}$FrT1CDK`sb(22u!r->BTvtvT0o#7^ymtcDyaiL3u^~i})52^WXQo6CSAIwm zSLK3V6VgvbK*+FRq!$R>*f6dBY}{jaBCgJbu0p-$L02=^=zM9LGecCEKLq*7i80)N zris(N#?Zi4$4J=}s~}qE>ejt`4(2iLNA;>pANoiut1bGnw+>wx9q9WK4TM?5Z*tday4PC8O|cZ=40}LKvb&5_AR%3T8YZ) z0*TmXz{}tfi>^P4Mg(bSknZl5wNCBYS|WE^uw%9iK6V()k6!Q8fEd+BcU6bQN-+OA z+EoxG)Pg+=0}1aFQ4feM&GKur-b;+y&0M~`fQ&3rrHnj^A0#WAFlB-OhK~noLZ7Lb zVnQ?M74Axy)_uLt)lvT9d#BHy{Ynr0tKD?wxl+KIBc3n8FgV2uFoSGIQKAQ^W5HA;~Xy#pkqoe0VUgOP92Ju6-Ye zzVjqKhD;T0$!7D~>Y1U3!15En{l;QBC(p$i(_3I0gE6r3lxBq5a`!fth7$n9bMLcQQ4(A9 zT`s*cFX7S9lwJrpz3Jimu7$OMIG&KM&B&LLgU=GS0wZdE*splhMSY+i8 z0LAVh;nN&gj-?Zl_tw)2pbf^a1d*sf30~lMJLhon}^;mmTnSMhtke5@(!>7;2+t1Op&OCT?B1SC1tRYt65U}GcoX| zQ7ve>3c;1>WyO-?GRsbf=-MGc?A+09gnhYH3yke!9K)>3*sA277h=^|8Ky7zsnW zL9-l;5yJ=8Pt-OMxqY6=z0ckNm`|G?lLD<;O|NoYqo<$NP~W6P-oyc#lp(r`09sTW z&T6dX%)H%4@4-YZe86=`VYyh|LP<)`62i~6?c0xZ8tfYkN)G!7t27?{Xb7(eIsrcC zArO+R7$rG906+Wr;k5bXmm!3Sn=)t+GOC)tzU|?QCE1pGA&-L0%~`i0LD4y z9C_d(U>-zE^UPPQm^*EoG=OwO%Y&#My?$3Q{!ZUmr-6 z$(N3;prqP1{zRew-J#5XZ|TtI+y!UhavZ2zN7Oj5qtAt}_SeT|JA9$%7s-T;EDz4q z=*#k{kzt)xb~)KE_6nDKuMes_bMbty%26zA-8yWZ`idc5EoqK z3)V9{wo3nbjT94|X>}Q~J}SiIWpr1CEow!uzb(BuQNUpnO2|ObT`6)V1fqgAvWu+y zKB*#4fvF)^f)@I)sD8@IYV1f*)fAnI7*a(_bt>6OPh*(xSSgPU~NryyD1U&BiX(7OAH1RWh~$~8P<+LAzFd;^2^pSbni}6 z8Xf`=tAF!E(hRBFy&Ryy6J>B?C*1kPC7gD>yO>halnicF!$b4jl%`ah8uR^Lvm~Mq{n*IMF{Fb7_j}tkSh7!&dHb- zu?eMI@y{163Ntos3ti`{aKeaZN^}hxJl?I_=Zz6WlJhsIUK-!q$M{j`Z>g2h~=ccpYZZcr|qg#C8&uhWnR z>VT+%#7eo$J07xiQr%fOUTr3R#*DD{9F{_Xw9A*jdvptxC#o6<$$)!-_iikKRFMK4 z?QpEp#`ji2erN1i6&sRVuJTMy^tZ#;J-YdfhL}aF$V0E{?Qo4lU>9Pj zV%N?CukMPuy6i)f4y5Gnpfvbg$_fWC)RxK)3JKGbbWed$<9YttjKRr`7-4!nhM;{T zezH~1Fzx9Ltc84|w^zY)mW-wz>-9bM_)tMIV4I7<|W z&=89mSyc{ubwf(t97ar<&AW^Bs2Ra*mX7!=P{_2?FPl)IO(*Iw)21~u?OJyUZ=KNZ zAYw#$rA!{F0){PY+-*Ag-?=x82=I8Zvj`U6*TlZwTsShDMqKrRz&L&|S+ z9(3y^3V|18$s_jZ5eS0Z$Lv2FDoJfHD7>9Cw;Tp;qOd&2`-;VV1IZv?=)_dw@iifYN`@@7vGUae|1Xz<|aJ5QzzdD`MD zHJ=8LuPGgO@wa@DtM7I85201lX(Q^y-1|1QlV+5xF{$JWhwS^v(&*D>^NbFT{_w-$ zo~*Mu@U6GP@dU`q;M+L{p$)|CDU19UrPL}2B^=&pTir^1hBs}Ro!KB3<$(Y^^ou&V zQhkt@CioU?D41hV7|E(}GAMG&ttn_vM$Zn(`QDI}605at-~MKnRV2cWX8-wg;xSrb zpQDHn{jb`!bAA>^jmjLJP1fD#R{laboHOjV8K-Gc?w)2Pb7Er@v5AfUBH8m5Iy+>#34;t@>X4X@B4};}C|Z!Zwz7U$J2fcN!}&2^PqVG9oT8Ud(uk z6f5@Fgf6+W&LL`7deBqjOv1@jM`F)Ws#~!|!>-7K59Uz-hF6w!6ga}E(Jk|--7Fl! zB5LCx_q-tbmo9A7#EP;xd-9L&&|#aj=_B1$qC~QMO=M;-femPN9(o5enYm>L@k3YK zGo;apBG5)C&&wOZnN?et9cOL$X&+>z?qqO@87mHg^KFJAqzbFcq%TVBGhZ$S)>WPcmtk7aI++T@NgkIC`b)(u6^M>pZc zhmd^qrX-KUP*BB--&jJeOdMd6b4KG8Pa1x^JuUTmQae5*UBB!*=W<*KfgpT^v+iCy z?bSN@Ut>YByl8GdhAMa*GMy*+s@bvQ{9^Ng zY0<_aiI_^ga(Zy|m6YadNsfkRrS27Vg;fM|KRP+@zU77O=2}z?9-m&s6i<_^L8^k& zp!%W3auAxSOl{aX9J53;Vl0rdPOLi^T2L!$+d_tqYF^{kXdt|(b=p`X3Bg3r>P9h6r)dxFEBUQUj*h7-CciWS1bqJs4OJ%fBT8Hl|CF z5oW9gi6XF*uW=}n1Vbsp@06QIyxTPyY?X^DOY=LZ0!E^80?rp3er-LC!Pc#3l+Awk zIJ9^Je*06fq+qc_9wic60WA9<4+~jv`uzD^C68Bc@=eSC&Tt(?*h{?QQ0dnx^5i!; zgH8qgG<3+21DLn$6=#qz*>WF7$AL~lM|#_BfxTn(GxFTgjV09nMYyV$D3Rm7_XWRb z5&&IFz@njuh4>^;@=hr`bde&kZT?yBG20K@uHk%08D{Mg#ex-i?ZbkU(}fE3~P z>!?d!h}`PMUQ>w*FzRzW;}B~dG_Xwqe>s8ycMGJIPjAM>@aT1_AjJmBbW*Qg75qp_ z{2@0ll?l`Wq2&hU_ioy_ammuI8O!_w?XLero8`(O1Vx`C1Zaih#-Q%X^f{At`%CXz zTT-l87S}%%E2$K@m!El(bCfOfJ>}d8l3j`yfh1sKa6$rYJL<> z2q0rFWh-e{_?0U%*KF7@SYDv^31&z7%k@laFEH);AJ>|p^4Hve2+S5Wp(I+|X#ybj zi&UR?)n6R_EnmcMr%)77Vgnyg+QM!LL)MWeH8O|Qopsp$qqgdFgd$bJYR`|IF}uPr zCy=@BO046)SThms>9H?awiOmNX0{{);oHHhA!Ng_3lgzzPL>7iofYUJ zpspL_B*i)dN5kj(h|*A7&Pd-jKOtIRQe2~X%|EVq!+*9k5XSLisXfo*cef{~DVRQd?7LAs{+frF6-X>$uW-D&g=Kq_#Re9LO=m zkl~p{lP?d4HO*ZuF>@B{V;qHP{IaCT_)3Kqm+bcP^$I=;9IS`~Jmj|}B>Ku}moT^# zIWQlCr*xkmbIC=A`7mW7RyuV42?x7S+hNo6k9jxrOYPI8TepwC`sy}ES%<-sT+hkz zP367aZP%<4{T#uTBp=iOv{YeU0C~t&T9)CFNMk%MwYP~dy{nr+t`L!0LA&GUm}o#{ z#p+O$uL37!z@{8eRzbr1g2P+Iv6l3{MzncLGkz0U6|dTOw- zkG}yivX+oNj4)q>Ce^=je+=uYWUKE?n!df>(@%%Nq~_`+#O9G`BT$&cciq|S^%0nq z&I~!Muze)9ZF}+YHofYQN}6y=_~TWKnqJq{NgZ=;OU$Ot#YYZ$Vy4|NwYyH&1QiJT zcMTgs2-XF5q+&~nnH7a@;tSS>gi{#;kK|60*w^!T0bFi~YHT>UG&#&fqJZJ146jH9 z<>oHe-Y2|Ji;~uAjZL31BNGA1Cr`~{Fwv@4FXIk*@sj4IIZ^c!1EMaCxuT&%!{8Q! z>K72)g(3$;9CO12O<*B1PCwGdY~-7L+Z4VoQ>O62;w>TlD!@amK{_F?IzSYNtFUDb zA@#~zcq`vw6V9;XoCh9!FgYbHrRD5TKfOtU47D5{$r(y~w5*H~ie%mBh@dc)*9g!L z{d5T@mZ%y@pSAqzH7m%oK~&%PAKIXB2{2{QLVFq9iehW}^Z~$=Co690E`>LR#xveM z;>Z{K`+VTmkPy|bRV#VpY>nDG)v5lK0zMXPpw45zZl=Un?z>fyp{14mQXALSA*}xE zsHDV@KC14;<3Yv^dMz)Ar-2K|g+@L6_YfU#QmPPMgWaS)V^m`R21HQE$}=$~uqG(1 zQL%XA++~{K+MxYgEssfCvc+u?$mxyHxY~FzM+*7JCNG4%)?#O!`=E_D<}&g_`FV5* zBBb8UqC})Sah~uZcGb}A(Zp}j=E$J*j((D9QhmYmEngjDqvN8q&|ICOc_g97^MK!vPrIJGp{^*=1jh36^4$#vBat(rCxeG z?FD`aegFQCczVec_Zn0Es_Euwe?N__rX(q?{3BrxhalgGF@l$jnXFFDfz$QAR7%nZdj!fqv7Nmu?ovsJBHo9y26*2ajQDf(BW?J|n-J zEy@lMrO_W=Qc8 z@(hCe)cK@SGc^`mEohGCD7+f$v}2$K^Z{<#DBpd>x_KLV(?2fjdGGkr&$Tp+_v^IR zx_1xu9lfaBLR!6vRHU4W0ZFh>9Rd^%mP)~f5Uxmm4$t15)!$!>SjhZRqFMo8=XzH^ zLS@;nW4`^~lfzf_I07YGf$vkED?`lZtNZbZ$4k*lG{5}I)4npAxfWFq!ta<+i@%Z) z22Nd1fkaBKge*C%{D>L@q#3$}xFUugt5)r|YXCvpy&{z6M_q+sk?Fp7jFgfud4EFnxr(Lwi;{yS%^fPx<%YbqAAfQZWQJhLh^b{7km@!F^n-}9-{|IyGLxVkv4 z05FnJfYk#t&qC%Wi8;kb;qahyBq7x7-HkZOqf%uAyMXi^bofgy@5n6Y3Hcg;_82?^ z5Jl%k#*oLn-w>d959X2+TJ0n09{NgS+XSihB9@vv4F2bnPu|;Y>a(Ukeydt{o%u(W zw;wN5d=$l6+7UxXU(2Cxy$=?;_p|z-i*!G4ERi*9_`ido{rjUFs!_YjAOZ9_=eaj| z(kZ2Av|d=5Ryj6ugf}l-cxOZjsgCCG#u6D&WI+k*4I>#WbPO`RcF`Oa8-R6mIm2%L zFQJqcd30S>&M`6P#h9kqa~i!~eelcNQTz;8QijP<{n()%ofkZ2mMW$bnKp{7S6yQ) zWXiL*+?$ea4zM832<{6DFUhF&gFhC_K@NsJMH|mXWm(c?;l^gwVfEAn5*375fnn90B`1F>?)3+3*|8P{HnptiAA-G*pJ+ z=AysKUKpXiW)f8mAouJAfA))@t; zT-nfe1Ajr2zqF&MLhO@|KUT5onMa+W>c%?|0x$h<>}X1}{aPIgZV>>XnCXc!KqvGoM3HD5SE#j2yK=edir&w3Bu@SS9?!M)xR)d+ zsp!_sT-M{V7xzF87vB6q> zZpUdBtfSi3U>Z|X%Jf;S?pHcZ`RuctzNq^dia+$9DXB&28=aPPJQ({&E3b?{{zcd9 zX)DVNm|1H+(fIG*`Lw-^z^rk?S46nML5TrfR^*UQc+8o@&&#|p&7t2b0L4+8i*%(h3Ss-}=rU+Qb zm8y#x@411SCX#pAh1>eanfpcdcD}Es`K$HERwGg~vXIUX|`bIN#P6huB)y2{N~2}UAlK~tA!IckL`VE znpL+14r@|9z*tG6d*%2qPzV8vF8JS%b$y^wJu zMV$w6mxc~{p<<{|u<1$W7kaYw=}2`g=JDsM_d zdumeI7EsNhBS!|B_C^%>fMBV^FS%7YQnR2{@f}wDRbxp{2oSrP+;M*M6}{gRQqD|4 z;AlP>${XSC#0-J2qIOdA1a9urXA;gRV3$H9u#eCl4e-@ek$`)KK<+es?%efa zf!_(x@kPCo8{_lTmtAiy^IG~~#s>{`6jM1sypejlQp@Wg?&UmnH0(eGiget$Y65VOf#9O^|eqP_B95W6|cb5+3Svdu_sat*y*A-%H?NHe~TaBAx z7t`TUpMLbwce{6o|0c{uk#b`RPa!%xkbrX*7!Lk&=oI-e>SNl;s5_gUs&g70R?|mn z6&i*)7}C9;7R@T%_wb7(?Q)AkBn$g=?AS53pj>tRdNZ)9jdUIH8jU}9ivi5opzGux zz`4s~Z{zR1El*Ir6rsvOF3;H^^Ngc~YT|%~*c(VaTBh$NN5+37?y)>D`WOJYL`G^| zAfbI_hWY%?X?GoNVK_E65|U0^W!x)Q;f8Y>m8dYA1Y2bo`gICgi}Q*a`KGf3O{5rT zFf<-M*n9Nr29{v^7+=*Z11>7l{nbc!krYBgu+em{jGfSnpx|rrIRtrlMziY+-=w*- zojxZBvO&(QftJ{-x@Tw%x&YPWH3C&EtA}X;5xtLl`3<1>6hy70(2RwP>Fh3EJag{c zx}%G669Lj^lGJ-J9)Lw9$wRLDg{F*?v4#(r!Rs^69p6ZTLiG)oc0(b0f)uz^dzsz? zAVZlQCRQu^K0=!mYpnP0zh#v=+{vDbeNbUW-{I^2pl-AQh^>POY1Jy~WsY=mOH4X7 z>-BRH1+dFqYcKboh0N77?|sGp+e26-sFqR5n9BMvJil}^xP4|54i)N!7a>pR7n zw`LAU5Izy2<&r-GGWJKAY z;w&z2Rwn-`?^Cpk#V(pz=Z@P5T(@GyuLjM`(eoc2dWY{Or(HTe56XTt%njvY?6JQ- zSSb*$U$L^$Q&di>2ya6MHhbgzzs=gkw2(iBg%X%!+C3hr{zgonI$M4I+T460y-Cc~ zur>Cb?5d_PRN)zA4LaIXn*noeXaW)|IE=IlCI(7cpe8tyl7VLeg8*su;jv2Hhb>8Ab%`DB_DtlhV zI+n6AEFLwD+>j_|Pp z8#`+@bv@U0S@f|lfCFTebsV!72fAxx0B-E29=ZrRvEsEmrq&+x9qE<3!@Lw)I`#|>M$VAFau z`9>4zzMNz3(UOfYW{=CFMfZZ|(cLaru3z0*F^i%N<^#vwi#bYnhUW$6+`G(Msl=Ru z5HG*;9z!Qa2C==$u~Rm+zURF{KZsM&Q@*Jnp4z8}Kts;yE=9q{2rBT$!^2vu>*zW*6|6fx^ z9%QUhk?y@fGr4>~CW>-=$JR4XS*I+D$^`EBBcV*FV%h06S+6cn;+;~l;^y={bzwYU z{x2rgLQZAIB}#ZI0L=5y_N@grn5>8_tz0>)r}p-{@2;2aoi=ixtRI~Qk_9@4`&uL> zloZRPHSH4r1kgJ(m8qJov*8`kl6*2Yuv0XsvTm>q(}sU1ve}K#865oxZK~M4`fouD@GT!5o4jT zCV=IDM|l;ISVe=BuN8KUTDP8FhZbS6GG+4gTL?}?TiHzV!S5We87oS(je@|146 z3g`&`E|)dR!;p5%;&gKZRZ;q8q5gMEW8f!PB5IPi1@{;%asTS77BDUh1Ds`TqdV2c zdN_!HcrmKj=)Sw}Y>-B-T)A?{uxpa;67F(RjrZa16`M=Fm>3VCwkqoeA0;i$ka6*1 zbf9%mE@Z6B)##T@Mw+!H5Qxe|cUaOWow^Zw7ap@QUKfE!<+Nbi&Ye4JUe&19m{3hP z1D0Iba`YVliKGEacC=M9I%^0A5Hx8%nL(H?prM|i)sP`D98`<3mHo>v6>V$eHMNispJ?t2WRf<6%R&?lfgbsM(4)Xux?6!5@+(n+3xG zrCv;5)O=0!7F0FLh!!ua;f|@WgOT=f5W+!g8&pzk#rAZ4{;BnhoYeN+a2A?s_g1=8 zW`}iN_Xrdro3gVddCF#TXc4!NDpbcceConn0@?2tD>hQC z3>u=yL{&NOF`r_;RP-x6?KN}YqY@Pk2+AO9)@d6PubdLmyo6!x=eV*Iqp|l>8t4dp z_+goL^dcGV|6G28W{dA$biY zf3>OE27L(#&0BW%Ms<4A7IYWp3rInd%~@#GMU>b!T@^2)IG=`R-&(x*ymayHH{ZRq z?E7o3PFQvL&g*$F0z!A1q39rlztpZ>6LkH9z~1-9h1k>rz2-bNEak;mh8=Bq=a7ih zkqG;B<;phfQ}s@5j1TGYxi5tnkz&;7Gh)IGrvt%+sM!Jx01}lHWJI^Opa@x?%}uki zuV;-f&FC)s&6||NPHtVL7$!k@+rDd8Fp+XDfe-YUgB#9cTHc;HJ2Dw(mY4MOz4Sb;k30DF|0$0P+B1^N8XN3Rzeo6)T0WB8jy-XfEKD@ zyO1%1<7G!M(v0zZ^P^sl)DZj3wDX)u9StKX*XjJX)iXw<8I_6dsB%*Qd?togcKjR- zB7J@xgMorTAfOt6cS$EFoFxIn7SER_3)K1Qf7?mhNNh7yDMi`LJL!p;_8AP51T>X0 z3*KaYmLH9T)Rk~KiVma0?N?~*RmE~R{su=$*6zWD$khXmwR-VaVJ(tZ!Nk(TPg1+f zG}XV^Xr$Doq^h#qt;~8$b0-BStn)hb(6dL^siQmNgJt;TqH$X4CF@{RzKd; zIS%Y3&x`q(gz&oKL$H1C=jrNP|ATXng(*^~PzH#_Qwb<0dF32q)Q3)^Bb~K>tA)RI z>((F($Qr1{^4yY0>FDo%iIX@0MYtpF9k_*ysC=P71_Wa_zHoJVCwrDJoX}Xa zpdlX}vn)?M{YgV&6g`i^doB*Xxj>i=9ilS^wuu5`H4WjS_8+2Ti;Rq5NYpBH0y7AU z2<}*9mbk7d=wYCNVSLAh&G|PFC!sTx9r-JEyNLv0^)FYDL-q}Q^Sx$zb9&wvn^hR| z|Izr@O?;$ppP$O~{cH0p6hC1xw5BX;#IIwW9umi-!NX*&>^K{^0$!hE%kW3N?%Cq6&KKi6;(ucv)rWh`p2qsNijt&fNrKWxDPMD5JzaoWAT5?{-Q75(0oODU(ZL~m5(q&fL zSp6}ARASe}XMY_++oZuAKS;cb49d1YKLJQABLj(ISNP1CgGgLfFW$SL)%8Lx0Yvj9 z?_2m_o|u@ODcobae2UBdZ*I4WN#F^AB!uFX=3u<+sgP+dd4tK0VZIzG%UsXKWg4&h z`R$`B-I(s4zg%d1?L(U^WsVMrT6~SGtdj63(!J==Qp^U&1|=pMJOQk^gm{ ztIBzsLI~d_d<|^bnRNj<_|8Q_i9Sn$hZGGR+Hjk+Jj>RJuCd5|5^N(Obbq-t^* zp*4sE!jmBUu$|_rstQoSBp+}-Y!7deR6p!zWy8?H1es^yQpi#dy!z5hVL|$){GB|p z93_T$2>%?Glt5IINY&c3DIyJcA^H`o*(AVV;rO|huIgHZ#}k2O(#?}pG`Q>5 z_{64Pb{(oe!ezv4+`poWt2NC!ME`xT3wB3}aEfYX=XOVQD##ApIcu4v*a49I^ZUK_ z4;}8{5kLOeBFQXh2^N>5sIwr9sDO#mhPD6Z(8Z-ol5-a*P)A!P9-a=5u%y#B82m9F z6k|`g%g95(5aig&r-gUxwre+MSHGrKCn+h-jAEvj^g18CZ!rPc|Cg=OTUFM$n?R1# zxccAe+W28GoX2IxIpz<%84I_J-bU%0@n1~uWA1us$AkShKG<~6Mds>eVeVldp+vq{K1Vcr|M)`oK^JbCVHCi7e`Q%64LuIH=mxDda!EDU(ne zUylI%i>e$bU$J6{RbU4&bj^F(;8kg)WmSraSZ>^~cnW!$e+WHgz8CcNw31@d18IjR z3Kt*ChwAT|`O!yCE3i9l#fnL~&}dSuF+OlC6W$vPS;JXnx^=fZJY1-0FN|}$qHarT zNZ^v?voUfA2va?T1exrEy^~t$YhcKTWozv^l`S%B-G9~~+BB64tA(>>&3fkB2YF`R zyR8z7vafzUzq9#%rU&o7UhA&2|7)B1;>$h`4x~C5fpk6{e*WUDku9&fH(hVg_wg^= zw9##il^QNt_;bXSfieVsX+bnKfnX+PINCXU@{pU@XO}U$nJ~M4K^7{q}Z!3a*z^4a~Y>}&+cSk>?_Id7~&Q-D0({Eg}aD^NJnS6A6T{(~u*7+7)a zfZ)(YLtcbU(Ga`swqylAR2S0cPK$0+NNXU_sVL2K!ebZ(ffOsN)en+x5o3!Ese~Eh zGkr(u@+0-%+ytHv2kS*FCf}KaKpAyBsOI0j*mCbRCOO=}G)a%AA zXur3Dg$Uu$7>W6T2RffSri)rTlo=2Kc~4wG8^TLAS7>O5bGl_nku>2>`q~2z++L~2 zXuL0>Vcz`tThrhL3EpUS$TEfKAT*q>AYNh`(BRN*L>JExy-ryY0R}Kw#7iZ;n~9{cS9Iu|_t03-LX9utCyn9wIA zp#e4KPM4pezl-l-l;jgdJ4f~1g?dA59!NG4GF@=OLBmzP#S>4!BGK^~NGY?u_bwnn zdDf)s$4`ISc(s2^m${ypois$Dq9IsVp73qcA4R71Tbx@+L|;0XGfYVI6JoF?_z`(r z2njRj=p;F%{W|LVbU1VV{J+^Y=acXAJz1xYfgEJrzd{*Cd+P#E_A+lQku|GGkh|yb z81xE}!KKRZJ}Bqw&R@9D=u2K-f5F&`OzbWl9dOITLxznSm3BO9nPnXxy8r&yUi$T` zh8aq~^mwhmyPtp_Zwnpmp7t-jRIVAq#tDv|0Gj}5KntU&*O1@d8CG=Dc)tL8vZZ8r zdV9^=hxQm={oUWtKX4JMC^~=|J;m<6yM?r(ScvI&Kxe2&4l*b_&ag7+Xv2YC003}Z zA&zQsb%@WRk4R`bg^UM9*0sXKj;;5x@rmaAg2SGp#yCRKX3qg%eDTGQdbHmm9@nhy z4E@W$p_bG@zztc}Hb9+irRc*k0rIgRF^skQ63|<7)16xU8Kap@UXT^d#UT zVNYFpXa0rZMQUHPZ!Ni|5`kjwbN>{@Y4>kvMJ&4?mRt*^d6{Vt{V`MDklB6^jNF|MFuLe3Omg>%Wl&ab^k7sJi z?Rc0F(mpzO!{#4T@`U59i*6WlojFl=Hkdw@oYO*}hJd^yu|5!F1S5A!ZSX;Bi2e|* zM}0rjqqXO@9L+UF7GGR^{!ncaM>oc?qf4V|l}}GBX||+eKQ3np4iP?BV_Sj8VqmL2 zWcrruX2VNkSNB`;>Cbw^6 ziWM}&!CbGVm(xN^P3WV2pb!9U-z!_gZI3A(89<2}B*ECRYojNG#i9l^n_97D>#vYk zwaP3{B5?5w0#&Qj9a;21r3-tyG+o{+7yc{#Dk6Q>$M+*xLEWL3(Ev{ktoS>nw~q)0 z;}zPSpgc^wghfd^ia74uN5`vA+ZSH=Z-MODkx2~}#`fuP&D3tU-S)u>xA0_04MPQ` zf`~m8phxUhr0@1?d~~(2&f>7ViRm^ZWBS&T&_7nzCa?G>7sBWo=8~>Tf>^lH} zTJX!_oy|5YA@8AbNE@!sQb%DZ!gO6FWZX5@_dSyK*S5sX?Gvs`i&d-cmV+A4J7ukJ zfXsVAX$PJQ^Ko0}&3m%-B3h`h+{Ah6mSLKCeUy6anwb4bNzrqu0egoNy1pJgRi{?% zRolvhn8)6;WVKjW%qqWGI~?S&+p}QG)QPwg^BNe*CDxtRC0ogk;ly7jU@^yoW$OkC|2?5QyR>#i3}1z17U(t zO1@ZQ)G!a@ilpsnUTVJwUsto~aztA-=WkKUiV1|t z(Z+EOYXT6i(hDZZg>cs(X)5cpEy_oGb0q5l0Gc49oEp9{5lIo-w(wf;fgn!>tfH&w zks2sB*muBd_9mc5wRMbD>QN#X@V4h335&bGdc`({nASbz3CB!Ir0DRIygKqw71}|0 zE2Oh$Fdb)U)UK&!{##&mq#ss`)xyAF|li4w6@UV=WRMpno7t`iX^E34} zSO1F-bF4PwRVq}PkrZOFsvCqAkn|0?`y+`RPK)#5%*cJ4>1J*6 zH|4z+ZFnDBXu!>#2$z6BXKHkzCee|Qm7~qBVoW`|xr|w|{wqt2-<)~t?+; z;Xi%51XL5T?8L^~&6n@)f_Fmc*Ir5<@v6X~Eb@DzT`dB``9zI&0Ccu;La`?ErJw$gn5)I7WElO(7tLhShY(~TO{ zZMXN!^JT)H`7nj#+wWc#9sj)lQy$Ql&nnQKYtA)4oby-w{YwdNz&6Hs1Fm1Fn9;pG z?b`Cq5-!#ete2fxe;bU?XGTVnu7_zi(l>>&LZX7Be9YCzk#G&%z59KqgC71zwu4T! z>L_}nE-p8fBPZvr42>(wYpmfju*=Ira70A4x$AKw$CNT3!PANnn+*(-uG_Mu&ZXDs zwpz2kl5zB{3^B%jQA7sL#|)W>5;|h7SFx9*;cU!rs2Fp(2GLA5o~#)2tz%WQfDm@C zvG36Ys2hZ6&;ULzz${*JGlFi~X!?jX{x=P0kl8#T=w4&^@la_v&AfiVO7$!yD*h*V zP%mLIl7vg8p9_dIjc4H&$7B{I=t5#Ma6l(P%d)WAr zs?m&#n|R{%t@-l(FmuL?BWY=!-_kkQCW#$BsbZ>BX516kMmdy}7)xy2=OKfmS*M?q zIw~#o7Mhd=JFOVFyjI(wdaYTf|Nk4s_V#%9*fenkN7?`BW<4`|(4gnaZ};tsm90|z zqov26-r2CHq45>8UwF8dA?V~ae`b$9AlF%s4E5FU)r;Ey*0%E1nos9ade?_KZ(|bHmgAJ&B7!y^;&)R z0ppn6v;>#WeE>AvjUl_ zXq&`mvz&4Ik|h&d5R^fZ3mUghL5%Yeng(;>!dzjv#Rz5;A4#g=bc>k9tOl4+9Zamd zfqF)pF=^h;FN50>FPtwc=>;xW5cX;%K zl;e@%eM5zgo|jW|5P_$9pG4mXUQrJj8JNg`Dgtl>V!aTJA*EvSn2Vu`#0XSTK$*tH z1;(x|DK2r${Jv>@Bp~|Nm^sASD=-kEGiS}JS?Eutw7&K+q(Yc2sUO0YzG3kqusp&_ zVRLn}1M4d;w6^w64h_gITG)&McY_;6xp~{ml7u=bpXv@F}$P-juWt&fzC_y^8UiEr4j= zfDj3uU;RR}8x}9v^GJd;cxH`4;rx%^-LP!N)h@u_x7UN{Q*W~|DEi#~-*rm%ONJ<- zZ3toD>LdSz38dW|(dkvU``==ASC~f>4As4;$1?=|OI`~#fxF%n9|(+J>j`*FLl(c~>CNpF1}5z|b5k+Z*0+ndc4i3*yt(QPDm6h&Nt=!_wlW8Q#$ z*8+PRLnhBJKFUhuOOPa_q^^*&C+x+mT(BVIGtxUa5!4G}#jIU$Y_Sj-zrnaLyDkBPD;~O1}^s)K8u>@ zhaZY8tn}4aU;XGA`F4JXtp;Vk&@UUC_F&tuwc#2%m6Wq*R9K0be$u@c*P{SFYQ*!* zY!7jsD0Tn;$yj}>1p3%N??3-(@&X40N?*q;lsQf;sQcHC+xo;)i8+IwMk*V#NJH@B z*Tb>4tU;*tBa-{AVMUiZ{*|Z64bu(#dX8P=+uw# z+R)qH?6AGdv^DlT$}!kQ6Lof@T&M!7Cwyju&Q$yyNmp_TwkVw@4g^;Q+b z=eR;?sI0~I2BkFoSW4NGDceuD%RaOi9j>FS)f~KO*Dl`p&U3>*i_fPE<_k&Tcm8?# z%2zp-&YgQRLuUmrf?N)4p7cS_2$&zrtGEq^sUKowS@1`T$dM(%NTD=2V$;4O|kusah0s(el?yYBKzon@DTre8JtZ z=P4Qs4BLY1B{MboR@B-ZgiNdwjS~6v>G{u>*v8m=$Bsu|c;TZVGeVY6(G!wc!LcLJ zp){z36HkbGihj8x)-%X_h02%D2WQ7MRBS3*qQ!%5_2gu54nASOrvL*JfD`QMuNPOA z%3yVUPMP*!y7e?QpM0jkSJ^#sCABa{^MkLy`R39uc?`+?{_e1qMM_<@AxInT_$;>r ze)_!7RoI2<8q=742lXl8@t#3K$Rwk+EBjvF*;gX%r~epa#n+b7)|#@0T$K5&B2s0s zRm;K*Pic~VVPlb|QNpFK403x>VW~v~i~(?`zWuqY7Caa9YKsS~+b63M=HtrW7sp63h5*p7X2FL_cC6uiE;DdwxVVXUJWE>mfcuapn(oGo9)q@+& z{vik`45-8hayWgF@fnHt>UAs7E!sH}4lDk+T89qvri==aq;id*!^;aKWM?{P3A!cz zUbpx-RH6Rn5gNmIc)m{tvjte?7=L!nJ6%fcB=_kN0UKe87wTJS+fO~nAQBauL3HyO zb?1t}@<6i|f7D+UKh+{owGNwbyEa3ObMu<;uNehQDE+)J=Ob{oF8QZc(+Z(s6D%CC z$BTvphFJQKtpU6(-WfNJPIRlb?Vzu|0Da+!vy;>QnrxEn8dZsE2IdII;D228%?riF zJla`N9e5R_gol|mM9bTK2m*`2UdC^`pW2aVmQ=&RHS{cVkVe0JV`8KG>>uGIxLdT(Dm zUO?D}`xo3PHOH!x=dHKAs?Ep{jl^xGFBNEQP;()0IT|NR!m@ zK{)y42b!;57f+AwkPHb=qfO>tvkkqSl{)RZAb$U zwPa#`00;&p`VF{i6+Wjq?IyO`MA@H@H%G1Rtxr;;ivX~bs_Ed%FCsylf>gaFSrhUpIgu} z$TB_KnLGDOO3cS(?&}g1Vc4SJfuxMLpt_jB36o**iyk8Om&W{_ zX18A+ie-%wq*?fePJGXcAGY8V7+L)yWvO>Idz(&Y#%n)^d!nSH!hI5)$B%iQ4RGGn z>6?UvT|^ss&pq5bwce64O1k(3O0uO{&i(LnSBlses1cXC(*(T0+2Gr9CA|k8Y=JSHhRx@W*@q7#7{UxH=+O1pWp!CMg~->-&47A44+V( zC9be)`u*XQULVIQ;*DoRlC@0i~={dfLfuMHnDpo8}yCKYzitvs%`L1)Nu72@H-ZndH z%{ux&_ARYyxFtAGr+akjv>-)c{G)|K%m(Kf0%3kofi! z)Y7--2ct6?{GAHD=|8Khg7`5yC$Ttyf3VVgD;$mD6LUdF;^E~ z&Y&z3KNuB{ZpzM+jtymH5Es#Q;o>LMuK97cJDKj;@q z`My^w$<&l`u^lulgX*79y$!3+XD=pt(*3gB1skuQTKApz$dE6_4L2@+cKCB*&+6T~ zZ*^3aurFSn*twmGlseTm&$Xt5picK7@E56?)TTDWgT?YA&NmoFMP!N~tXNv;y#bTX zckYWHhe{l~#(ucjLraXm1*k0iI{Kwt(erdG>i=*JQ19`3j&)4&N(2LU-(1ETq1y|M z(Uw4bCV+$;m=liu&S=1cd4+55_#}->n9+ZSRigSz&!U~eXC+cI3px3;4bHFErf0%}4Mk7q(5egTK z-V&z)=sL{Fi!G8&-BuHgzOhOA$DvKO8W5$`Ae*ow;NOPl%Vt@ZPl}c#A-?GXi90T% znD|_W0m1IQ%`zgNoD^M2d<@`rT$5Qkja_ayA4l^Lj06@RI(jq(r1s=6T<9k>NewptxP^5N)b`R$_0Q)e^gc?aI|lICRp z+j@-o@zn9-gE>~w6AJktCT7Q-4-iiw#f72Pr}O4DZ&RU2oqJx(Q0JbXSAMLik-x*f zW$yu*HHdD)Jzos=q@E(x0^VVj7~ygFPn-P;M;4vM_zbZMxaum$8_^M(6SY6QW`dQl zUXz>PYA{d|E>i^EN;btygmrBm_o>>D`_U`WN+GC?!Q)Py*lJG_&2B6)Fv?;q0sIxC zlZZO4J|C~z`hDrThCEqr_4BIDs`E+1&`eN)i)`wuSf$|BgcM9a*x8^3@I!>6r_5r- zjH0=bmlrpg@}v)EEI4WvtxI^hU&nIZJMKj z+|JO6nNR7@Fb=rE7YFNfHG=lLzF^$%HFK#9OJZ7BI>-K7{WQ}J#v-$+tl49tdb8hD zEqO*RyIc5vRd_4;y+Ik&4l&M1*DQrXgW*=DZqr^i3ql-2F0s~1N^PcDx?F@%jzH)= zWfUZ)eGGz|V=fWYCL#6Uu@jw@tp1mn)acf&(Z=s3n}Qh4#GUSdq0@GBy`%r>fpF`C*%pDj6rj3H;|zd)gI zJ~4rny~YYmqHb~s(6PJmbWux$>scOKrX0{8igf}KLwG}8{Ii{~7`Mp*49Q8DpPd{~)}8)tuzeTyOT)xjb{mB_>89kZs@ zvecM{F8JZ#tq9tow(wQQvIZuhJY1dcs}r3c?s_5{@F5gOg9`O--bCg!JzMP8k9=8W z)+%FJ2>HAtY8WmYw7(8m4Z!+XM7>C-gWWl4M+Z!yEiz$RLtDGFY3b*WLo+ky3&y_p(3zt#YuZ%DGOtl_89*Q;xE{zALO$S#Aw1BxpD^2GQLKKM#I zb5otfG0)$3s}=B=kPy&m#IRCKLr|DknCcV>^WMDkH42f4AId`XTCzy(TYdf^qq zNC08YYX;eFEK#uyAV;PB|CqWHa2?CGefTIM6;XIf=7>c!%iJ=Rge0NN4N7H*WL$_4 zLZXx*B=sOuGPjT+MM$R1Q%ITTVXg0X@Vx)+YuldfeM_x%-`91X$FT4Fu^*WZ^z&j| zyr|v@Xk0v}$vN8-4mC8o2Vs=btQECSYa?3B{7f)IKkMM?7BnalEMa0HwwKZr&;Pt zrC+|6sx5+Sv~Z|W@(zc+*w8mf3}SX!>F=^PFO>^M6rDuokfXL~QyWqVFw*(Y%=L*Y zW}WWKGSIw3WXxav&ldv<=L!a0NfnCTz>7ygWzySx)EysQGC=JkuM6F|YE8pPhdO@$ zSokc35oE%=`fxT9t*0-prc`m4M6- zd{ww|qB3=eu!&Y`nDNd$xpHOAaa9x`uiww{DQryQrQZAW$aqDsjq7d|&rSXu-r@~- zSIuco2>F3Jzp7-dcbq(<$fqX!0o#J72vW+H@S!<(Zt^ z|14Nh{zsC(7)=FB3###J*;H@@?fYb*eL6Ra?#$QrjnP@<&o%&a7cLh7-porkh()n0 z!tIrNQ2ijh;7osbdnXFHxFsorhw5GrKdE%PE;j3NWq;oN&KP@Ia+ly~6zz;1ASkz& zc_S81neUvq;Yrwn(kXtnXzy}dR5v#u+PyB0bhg!yPZS#wMmTZ&BCWDlaXqm0B~5^! z2*r)@b-$&ui(xrUgAY}M!6r>sq`l|RG#z0~>? za*;ckMuV%P^y zN}4u3+?*h-JFLL4L(hzE@_$v+W|#-%O7|pNcnqb)WU`ha9v0vr3he1yVjn=k;j1rf zn%-m1MVw31v`VrUn=bCsaq)&$%UeBMAlm@Gp+)!sH(SZw>*j>_rVH20TRdPp@ZoOi ztJo#sl&-!ZOS$l0LtQwa8Rx%+PjR$ILh6m3@Zl&zn8tNs91H-~`FPiJ#T^pJ-Gf@- z2E_~W(mFJ@Ybd=!m+sWWS)4Lupjzemt;eB@RsxKUH~rT3p!>uMlL1*xlncQS(ZK7O zmB2Us-Y8|nV}BDcx$JeL9np7b9-6ONnDZ!>_+^u5 z%CHjz191I6!K1fixFN7asp{Pvlz2`M(HDqv9>QgFO!Q32>tkuve!3FH{&@wC+e4LMeO zN;kRXlP1Ogrsw$uBxM%TT%nu&lkx!&Vqs`*HMTCQPpeVSO|CW5-rnBtzaJPSlAVEr zFMj{a_if&^srkcq8Dg01;(2mW|2Uj#;B*DPBLz?xD#Jtz!3U)uG|RBokxnZ$^6KexAM2w~7uPvezBv z2&FFFcC9&+00^<3>Ikl$tOM`Sw0`{@pNt;eEq{Rm6V`S}{QTu&*IR2Rt~$ymELCf0 z_|gtsv7^A=B~-w<K@^$rZv~Wp~qVQwI-zX1`&nlONZb{1bte8UfKs%*~?zW6e&W zf?Qc!J$!S*H^nV4J+PUGRs@f}LF_D8{iC*&%i-k71)A20Y_2){I2;qEHah#lJNs0< zAb%-6f1{Y#l1m&gAul#;g&&E^`R0TSz4Kb{)inK0H|_p2IVrVG$)-OpTBk}^2eYA& z$pZ<9ZSgr1J1Gj6@!S5@1?gG!#jje#`HGUndpC%txYLb5o`eiPIwt;UgO8C(Z$@($jLaAv}Fewhg%}3Ed z$HD=)L8TSlt)?KljJ1uZ1qs`QQt$kOxa zih^G^+_a%pwE09$ccZa@vkHrtzi&J6XooVIy3*Y)%ov*2a~rUs)d6(c@)awTpFd-l zg!!zuR2DDk%P?zlRMvB+JvDdMKUt47$4`Lh)ZDaEeU~hTDmIhNcg+z$lB6fLQ*Mi`uSD4^IUEkKm(k~f6oP*!U%K?XRl9em zcJVVu9O>|XT}8Y3^X9GTUuD8lHR`_vx3m1n5cM5BOBWO?7b{g-a+b?ng@b?p{ol)5 zh8&ga3BYbn$To0=s5O!HiH;R9&|Ji1tClTCj%rF^t%#O&xLw1oT79$RgAq>_!ajND zG0;iYj6?1%1%Mj*PP%F^quQRSAN1*yam^p%7aQTFW6O69gINJZs+4HMLN}5Hh@%J< zsS1Y@tl)w!XaD{P)-#e0{!2;k-hpp7R9QgHgbCQV$6XzE7%13BA5lF2?1EqTw@p&u zS7N_fpe-Q2*R2WJ2E;T3Z!HZ_n&usH(tqJa^gt?%cIWGRz}r67PWG2?vjCj47T0w;^Q5pGP60~Hio z0_XH81`f)lQpGAL*$?T;{yB)?8>PsOTKwU= zL}dk`~(G_GF$tdR%DkNEa<${D3L&*zACTh!<_%W`O3zyr0f2 zB)FZXHJP4ssJ^7+A!3S z9D$(4M#2^?3eZY0I=n|6>`Gy1vX*(?!%bJKgc!WrC^raUhR3WG4Z2qb6{YJ4I9P@B zjn+`%mZlg9vJDytLjXQKaM$2;w_ZmzKQb?`XPE%_~$QQ zeoXwHDCoBJaht-yC4{;}6gnc9h)a=q-ERNC(=Lh&9zQ8X9lntCn&i%O;R&P#o`k~z z<~1zfWi4MKf7McI9owc(LU!t--!eVk zLqO*|73*!@2cB)PFE1B2d(l*S zaW`xtkZ)uAg=`3evxfDM#t-ytC;dQ)o;F4Rc64ZlKmz!{5>>{#z8{YowHhHFxS~7| z;$DBcwAYKq&+C5sW@ouBX}&am@nTVcb9undY#9=z8-l?L|AG0r(a>o*JI=jzC1eBv zw^*o$G$OATd;e$P@U#(Q6aQ$K3pktnJ1D$VSA#=6Z zkrr#s-HfONmBhMT2WQc_KU>r5$7X~8aug^vGti915P`F% zP>v9f0zkp|0^xHTy@3DFYrH;bQh+m&Vp#M;wy6x%<_6F#v&}SU*NX1HRh=xpwGIq6 zCWg&CigXW=R8dtBCM6cn5skTb>dW)SzGYI~qWN|rFU@u4sFn&2P1or>#RsA$1}jOC znw2us@tZ2$s3u{uv?(L2znv-n4P`-tj6H))(ar#KLmibkKHv2%N_eJ1x%!62A?51j z$dVe(7HpX@{OA@vi6MlcW?23D2#Zsv2FXNE6H^xQ2y7^TW9kMT;?0ycDr%zpm1-jK zoj`5E#v>j9!$*Rer`7x6jRb3Lskk66j+~{K44+i#G~V81CTP01FL_#i@%Z_U4?-DU_t6 z&;90`CzmXE7`HK+|qE<`L{NVXk428y;u1vm>{ISREYJ)aX&_qS$ihfh?zYC3P zEvxMV_DebYh+ebN^Y!cJQ3F{i`=J~6#~X9@_KI(!&P{JHOiTfg|hj37qp~Rz!xi&qG86v&m_~c54lSQ)89VXDW(@&aJz~%W>Ff6 zp2pGxW34vv*)JQ3Bf~!VWO*RedEP==Lb!Q;o&4ju+B=JksF6gKwB?3dAOgOjk>&9ttxl zI+zP{7l;U~7MCY_5AUpPlDzBCorB?>r`}7$9-N>l3QCWh-YYamFdbdSO42tRRqO&W zDkBAjs7Rfzs>LwtoJ&b?4zuQjhiZWRs#PU*tfjM#WBc~lf{yds?|2T}aPOikr+!^_ zY=TDFr!e6MrMAMWiUM6AQU?fhg|I2=)|d;02g_mMBt>Br{{YsgK8^8U8tK^dru1<3 zi`dkalyWHPuW)jF@rO4!dy@1^>l$Ox2PRoY%g%37lO~1WNM-}KG&MoWwte3@6OFlJ zf6$=#UjV==#YX&)Oro;tnIhw^vkf&9r`2CKreac$t8mF(SAWWza^f)FCa}T!djzzTSMVUdXuuU2v}tN>^ILL35_Hwjn1PNc zG3#~v`B+7vC6yCHdr1Tp95!{Gr<|$kwzvVoya}=46A$@lSt=Jbxl=s*<<;2`0}T$e zd+n81Ac{>ho_qqf8_OpwK!8HVq?Lubu~93CZG{L`B@2K%RxUw)6)a!AaoeVM53W|P z*oYaQUf@Q>)VK5*YNCE$)M@j-MDSpyp6Z(k!QQ6UYuGT_#5@-d3Cm5L{&Tm_Y4q>t zp+iq>OWt)u?z`@qmBMiI^hY2>D1rl^s9jhr^c?1F=qm zgbK?a)VG2Le|B@i#46WCT=D8W2!X;9-ON3e3rL5==CR-lf*fjX^YqE*Po4Um7^^Tn z!Jl zm%hDM>U2ydqZhQq1@S5%U8^n++mz%RsE&*zuyk8$`-kA_>(fbOk_H5an-li`E>+`& zD~saM41fRq9f}K4MMoX}j_!!M%Ud-@)Q$^^C;^-woVD69Bb_KMkzaF?e?4W*Xjm^$ zVc4$+HFAM!hGxL@h0N;UdonBC0qx;J<4mb zqf?X2Vo{?r^3weF=^AS~7atci-9dms=YWkR38dYC&IDqt#L%B(9&uvZ>P6kXsO>OKsOC9`oLQd$90C zi8()f#z7H94ZNk>gT0?FQm&x@eEf3icNZ?dFlNb0X^cB}(KZ-p=LWR}-|02V)MBHh zrS|;u&n@9lE|LZ39iVf?idp!XKCWC2NCD>7plv~)Ar=M@!INKpHRGm3kQV4mV( z=~uDB4q&2W6{irxRlRtH;odc)9`Ygs1<^(rGq`Y3oY4=*Is_j%)&dvG7S8WpA|yiu zax0{*?E9ML7&sb}DHz4uMtWy&(Id2n?g4p(D(_jF+!ggQ0}d{HUybX8^2C%wl!l{6 z=k@|J-Fj=RgOrith#7xtF|$Fgb_1&vfRpK;!)grjq|2gldIf&Z7B{xP=Xq~WT6Od& zli0i-9VgIIG%`>e!b`)mTF%!jT+K`8-eXGrDO*;*{Gd~nUT7vLlw1>q8HYHGQav?M zO1t7gAea6(-5ti7o8GVmp|It%Rd3wa;>sZVIu-gwlt4a`6cXz#wGPX+c4WD0%V`Ly z=+5seUi^*;?Lh1?A}vTq>m}*|vuvY?HH{*D=ClW;n8abcIMx_GAQRoMlUAX{I^f8z zk5}fO1oeq6X$w@)RwPP>LZF-); z#+81+^7Vvtxk zd#b7HKKEQae4;})z__v(8auvJt{H2s@m*{lNEmbzEUF||wKJ(*r?VJ*@vYXaw>QC+ zkeweXFnl$N+v&>i{!;FbxA;BFn(SFUyvQ}zz&ECN#s>cBgkvu>gid?v&_(H?SOBkZ zB@Hus@S~@#FP;H0Bh&~p2Vh8a`f7RBT~*?G1`nqMm%U+W4G92@Z{;}l(3Os7%5(dr zi%(;;fylto1wyHENp_7Hsgl#a_3FcS^`FN;1Ame8mJIK|ig7uQ zWtx%}KTnq=QfJ&y6$*A!p7(kJzkGbqB7xGSiu;znz0%KnOJ@uRHj}p0` z@BU+hD_4iqd+xdYDT=vn5A$U}D@1c5Gn(UYh@xK*oq+MNn$8KhaqJN~0p=If;Z6E) z7K@dLxVwT9CnsheoelT8OT(q zRH-^`zkk8&w`>h=8ugIMjx;Q6m7pvF8lcZttt&s`m4+_J zCLeh`HX%_(xI?XMOFi|EaNA;LE@3WO6OuE30}z!aGiJ#$nV@=4Q3X-jtfnjA6(C73 zPXtO6?sPqNYi)?=Qj!y{im`rN1k%wpw*XNg5&}d~#PH6Y zitRA_|Elh{mBuvq>dSZ%lbG&< zQq%-7@eAS((@xEe#z1DZ7`Gbvk9!bIS&o6>`0w2WWSTYWlIclTTSK%-`0jn^q2YXO zbaX+HYn_(8J&s80`p^~No^;r`@gV14nESw(5hFUrimNAi#0kIB&>C5OdXFB+#k>Q<01<6xeA7I37?wJlCm)bD>9b;WWs1Vp*QSHrw!4vTPb&pZy4h6?@+fW2Qnoulw9geO&gy*x<%{^K-)dMot1!UjN4^M*Va``%?(NS z4_IudT{HE>-fKSJ)2D|{(^HKAUG7gu;O2yx4Qje;j+a+X`?nSfO1<&s_8)E~!tpn% zfW-XWxjm+x@+eN;gvon{$M^dIq__99!u~?p*IqlcZN>fPlJ8H+aq!=Nr^RmTJ8!zF z-#HSeG3*8hROt<}XO?~6CGudUb?>JeP27+%?FPY2K;@1`pO`MS!T371BhkQE_**aI zvdyg?4#ACWHYRZV1#s$Bc=)HE_LEWQ?*p*dvm|Y;vE^bIEASAwU4DCfhzlah8h0ph zW3Ns+k;fk|nyXWeRht!}NXwZHOoAO8$7-o}-#_xlgV%)ZA3v2eH#Q#j*z)`D`(j6z zEJCmsau&HS53`*Lmkt+HdDCP2GsSrrp$E?Aa?rTo#tZ)Q<>O__$QLX0VMvg4D0pEo zh+gu!=pzjexf7XMR`r{`{DyPh7%}69`t|B9_XV6eKw9HBUVClJj~$Nuz99KvC_2g( zEKuO>TW`B91IDBHr5s%<3-wW;29iZl}VLK7@P4-J-0%at2aJf?)D88DE-2*H|)YXj^Z#b)u z@d+X5F@yKvsHHHgmWx=@fSMCc~{K(BNBhE|MQ zCw}uyMj={gf^QrBKWcnrS>~Fkn2KipIQn7wwX*0E4dKXR^Zdz7f zz%+maEq8a&)~<_|;a>gb$oKzuCR4L^C&F9k2c0$36|T}Dhbon;?K|&qn;8xojF;r@ z3PtWN_`c7cy>#|tDbuGd7%CL zmvRjx4vmng#N{kU`e50CmF0JvtK7QjGHd9Q=g+S);o%#L*6FLCQ5l4u+rjmzu6tmp z@ZMK`0sy2fIM^7c_}ybW1|TQ=QM&uzvJ4)HBNmiyx9>)Z(%hxnR{Hzk!RJ8{cc3GN zA3uEf!tp$3yT12cD;Uf=mCOzTzy{m5YC`uX6gs;k;wR+rpXo=4%h&ub<8UlEyQBPGSv zcSW;0G=?falRf6WLkfh3OdPbzqm%z*K3`?*Fq);zHAKZ1L$%}t1P|Ft&x2m-2K(uv zJ|*1hm8rF9G+x&}GF7wW?7{e2A*uq`mCAL?4*#a%H1**WPyOJ)4*h73&1Zk;t|LBUt)`al+Du$GPN;-M=|6{qS1UZ+0Shsm?qvlL zJ^$OrjmPw?^NxV@<(HKXpKzQ2{htxXd))lZg-ucuK!4q5Po}>Az04bn7Mv{#7J^K^ z-F?TbhF17`iiYJ#`4KhlJ#cpZf(17xG+qghhpd?M55$w+1zJa6G#RNuF~YDC;<s+9{c@brVW^P%&BCJ303(IW&l|LQ1DYn2Cb6ezTT5&;a( zDh|2VWy8*A+P0l>{-1xQny%{jyaII1)ggBz4Lo(`Oug#Ws=e!&bnn{r@}D%s11N>S zUm^Uv@eb_1=2bL~p{*Dwk<`WsWuzW`5pQ}~cAKUS` z7L$^K`}@ra7yAXeiFe#1s8f_=(h&lwRjT;e{$Vp`n~MXghzZYKvImeInRyU5#M#5g zj!juXjdp6-k+1$=3@imRE_ur2Y?p^P`!OhVntW7#Tr_GLeC(psX9wYzjqGvOyvCbU4(ieW`t^Q;VVF^Ce z?Xb)MYPM1^l#`^!-&r?0Wd1`IRXlN53BuaTaJ;Y&%iP+O`qQ$t$}V>=%lMu+<5LR^ zwj-#0B~MNA(pC?L4{xo1Cah*(_tJe>r`I5-X#j+QEBxm_QGdEAVuP9`&9Ww6$jicz zJbQD(hLU(TFS~NC&Rsfp4$9nKxwTppP>y2}C(8>AO)X=t!ooT7M!ydN4A#n}W1v%V z&>ycnIBI=!eBJ~@s>p{}<>mgzj&Zfqj|LC_UXZlBb(s<+rmb1M`dh`+Z*#~{+s>@S z+>Gvm@HVE}6tHRuqt-?5I88AW_Jpy0L@}TS(20lgU73CZrY1|pE2d`hf_*@2`OF2r z_0}t>^2AqP#rH{q_?saA0%KD>F)<18EeIUow%6Ew437I_D1&4tEdmj0X!>OS(++yq zGWqf~Ti>D4sB237)n6s`cURNdmc8jk74W;rh1b_>xYxfADrmFxe8>WmU4RF~*I}eQ8VA(Sv zjPr19l=h7`YUFDD11pQyUJG{Kuf}4I6gV%_gbkEBA4)o2-fNv`WOC<&k34cO1La9R zlVB5*Pbij95Q53_5?~04X*2FD?tHi;$~oN-wOQcUp`tM*td8(;G3RFJMyl_mRGo+l z60jEI74DM2rG01sjSzdnFEz2sU}g!98DLPH1#;u6_x=0tT3D1ZHFF_Ln=z&^yGira zqQjZ#4Y%oK1RInHbuxx3yIHpltqjh#Q__;#Mfwd9{?@Ir3cyVa5%a8Bb@P23xd07l z4cFS(H>9W24TXt`0L`eF_AF=a@8u#b0VR0fm&#H1x+DzdLa9fVd77QwJs%Dpyg2eW|u-ZS7C4kIV`}v?a-&)fRF5!(UJbes^RMAF5VfCJ z01S`%+4KA5mlnRq|3-z`f?hP<8}$+C9tRUa5K8&es#X0EKDO5{F<-pZVHA&j4zq`x>{abFXJ*C37Ed<4twYBCt^jkCk1D3E-vzmRSCEaD)RM93z{II{6@ z8i3fLQDSdkSfqn?pSC_(z>gwof?|KyV@ z)Ys0&Pipp%20io;o8GW!6)*N45|j5io(}MJi;oa7JGeL9mK!ns--9~*jE{|JkXqr9 z#~yoeT)EDt#t81Q2<`**v}ZJ`=A&)ie!Ie3&6|(+_{W(!DKntTgKe0eQlOoF#ND7O zJM)hoHxIVee|=l{D17=n%zCAXxGS}(3;r_irviutCv<7m8Z`K<&QKJj%`#D? z#)4@Inc#@{VF3GL{K=mCHL)$SvJUv-UV<2s&SLR+cozjJY6W;_!-fz8UF-> z3v)4)BasBdkD7vsvrNmU@N{GJfP|S7)*rz%9bzwEutJ4AWG>^6mNxjT70$VErVNFs zu9cYByVQ?FBzMfpP_oIQCv~UdRt(NNE*>`nt2;j27&WNd=+Q|^i;rvT&ZZO`yS-=6 zo@GO%Dx)80KY!0ZUip5z&0cjYj{I zE_mQ`uaudYvZa`Td|6~G6UnD`Xe7f8oe^rb0R#xyTF+^88kw~aefBA8zcw++q`Kc; z`Sq7ya!V3pq=XlcQTLSTaCrR}UoU+9`t;sZb|EQ8zA)mnj*AsY;sqiwb?pJe*Fp1B z9;i=Z)H6mBn*KQ2PgaB~MtW!GN*tyH(tyhzJeNr=b8E1yawnGD0987*zH$~Mhnbmt za0P?^9utJq*oKR_6dP($>MN)tKu^AG1MC1G0Pqw0+w3-}F1_L>bD^W3CoNxW)bVrO zSA_$F*0L64p1^9TU#ApuRD#*|UdiSA?p}-Q)e^8dP{W7p%_)yDT6MWrFJMODQ_crK z+2^UJX(>8K?p3O0BOibtYdxz?tIs)SE%)`GtRdTTtnpX90?)A~5}@U361Uw?B~^;gpQ3-WSNPxsh4d8BQ!R7E87^Obixc04$~U!E4+XH`SXeoFnb zRbaX1wa`}KOpAZ^XXG$GQU3u0@*5HJ1BQ||K-zR^m8Wl!bAJlq@0vA*IAHgbT}6~W z-@Pk!Lt=};=;JP2~`_>;%O1+#V*-G^N zL>QOmA^LuZy4mzWk8`ufon%xVg?+RxVPHw}7{)G4IfGi;AKU-1fHJ8f&s6xnxH#(S z$}pmBN{sVg z#y{C;&A99Xs(9xa(cK{1ZCZ(o7W?u!dekuSL!vgGg7$9x~G<$dbc z)Re23;n=XOd89NkZAQF#rKYL@M(Bdle2SbgJIANabznut3y#N$3^ZeUX-Y>k#< zVeDWPfy_^61l*RwWy;(I-*UxtSGEz=IDFy$3@w8KwdQk1o4wO#7L#%iSDbfPFvV(9 zM1q*t_qSJZGvcwQNm10dX5oz#Gw4S>&Ia^ErOs8F^I4E+q>?RUo3I6TQ$ zyN=sFbm-6@^)#O$BQA??EX#iS_1C9=?!x`c?86}WL_JJfQb^n!RWo>?&<_3Bli6GX6!+~<0n>y&(XXLY<|Ltxl2Kj`cyt6$#l|CX<(iny}vwQ=DavG;g2 zG4;u+5CRgP2Xft_fU)D|N?%uo-9l$3M)Q@7dMYlY7k`MwQ`4ouDdu^kE`p_nGe^;CMjIfT_G8vS6s718F;c10S$X`xI zeGYOmzH&bgcIk>0_g?1dow_OMj!fq(4)@d0?HlIKn9=rmvkPiT^yTxplFL9f>rYAl z*KtBf#?|3St(7FG7zB&iQ+#m${(BS%&J7$)(>$3y2BD-o+Tg2c4mKac0UU_r%00hY z(ia0X$Q?)r;wlZ=F=yr8vx!(zE~1hvbO{;IMe>r=gN8Fw+Plt=QHo~3TXZ0 zG4RpZ=kL3tg8me{NyT*J`0*&LMN3V@jca!A%R|?Ei+|0{<*l$xU#YZ;xh*l9XqJpT zwp}>0%Gqd8Aa`m_Y#lxzdv0ELo0J^pj{2FRl*)`e(Zj7&$^+YgB=AqK!qAe|J1eEh zu^;R+OGr9y(b4WUTQ+U#$jf;MY%))`6Hidhi{Ifd1+EK`+;#UGc|YIq)i<6yRiLmz ziuS}KK9_&E96V-v?z+A+wxbeEsM&)^Jb99Lb*O5T2YTi^3iNd2{3{0!tR5b`OWv!8 ztH-1ldrUFPThH0F>%Vg*r_3Ik*G|eNh8b4-V(mzIpQh}2Y%y(k5_6>59>72fx4iX5 ziH6ov6u7+ma(OYk<6+K$mp0-`^Ij$L{3un`bP=z5bQqDyTROxqq>E1As<%&{I@PE> zLTw89*zQN^$?#qp`^N@z+&FabpgR%*YYC2h2;n0**lmB#&?0Hrd#($GO+;H7Vp^ip+n1rswg7SmuGqHQNjq!+~VS(P|5NwH$39mkDJ+T8I`n=9uiF6!gWfg~<^$@U)h3>@#AA$U>i> zdmyWRaJrc>QMPUena0lKL-Qe?k6?;wCs|(h_O`8CV;hl{CJX|YuPYHC{vh!~PV8S! zzUGTD;csvN+U7eJBvC*{@2VV*0s9#fh(-8G|QERdY7pcI5ca%A<6cvp8ZgRb9 z%bupryN-^CYF7Y`K2GV6o>tFl#=Gv1TmBu?oZG}ml13lNXSD8Fr_N6%6%w%xZpQz+I?UpzDp`)Zl?lIfArUq~6-y6fJ)IrF53 zI`x|-(}#>>$jmGqa%#+|@3XIH-NI!VQw zB39F`HfZgPdK`XVfMQ!$dxuI~v^u%nHAueeu$Vid4AG`!KAN8A>5rY1)Ps`G&tJ@a z%FBEHY8bzc?fln&sM;VuSwAeLM-)tyFe{psBAEF}bSVAai7$IDeD1zG0@2{}#vRQe z4L$@QfJv@uwm9Z3fymLud93vQqD!S>Bf=vYfF-E<4&FjIA8-YsHxF1WL={)h;H@sM zO+7YyyhJ@~(V}iIs#Deg)>d%DZlk8$H=%hr$wY^=Y#FV=oga47QF>!ErXdt4m5UAU zKF3S94BUwd#u>AUd454E#$$*}EtJxd?hYputncPLISRJZih5jWVyyl4r+_28 zpi6vpM;Nt@8S@N7aL15J#93BtQ(DFNoEbB}aG7OsfH=q=sO5iy{>s*o1FKB9sQX-aG#gd(>&%g~{wwSJ;^c3n3WglqB^@;Ky>3o$O*($v>F#T{F7?|p zB~wq8Os;?59VKBRh>N8Mn55tl9L+oHbKI@Cp1!Z z&7>C(g@Y?uSO$Y+pQhlni|76uGt#r!!Qg)B?)&1^)4*WFn`>j9^MhH|%TB0Q41dM) zCUkYQgRzgwu)T&nyUGJK(fag|`_rT)S=f%q>wWdgm1syOZU`dR^$fX+UmJ!k0k&Vc zxGw2cPAY*(*rb@p673G}<`}a!Mj1^J^KCuJR=K^lRNqB3fj+fjq^dzZ*O2V7Jvv3Rl$;POt1CatlTQsaTe@dSv1)0oG%1+y=; zH+`s0Y;*wum#4kyHM3Lb6^9vLl4;=};I8_@e-hJ$=8Iqf;jZGUq3F`pZonK>ouw;U z5u$xAsKPVYv*gN}&*fhl5C zQgokfJxTMygq)eBZMa8l=8U;#yasB@FR5sGdiVeYpzb1vtW>FTdRgX@p|-UC@Y{Or zjVzGXB6b5ua3jYb=4G=-M_v%QiP&^Ru>hSuM%+JtGI@VFU+&}R_Sfp$ZiOH=ml6EX z%=c`gFwr1H?Xci;)rYWhwbO1Gc&KPh{xqqWoN{*hMV4y+;eP;&2%B%wl~O61*eRP% zt*V%EyE64ya%ztzUH^T=sR`RDFwl5P<%|{2yRfXn;k>mbXD{=sYVKN&fB410}=&@E;EM>B3?HiGUCM-w|}MN`W{U9Mp9Dh-zFxG05yty*J#dv zCyXDz)cEEfoeU>z!r-TcEiObf)+;mSw=O+;G(j0w`1k117jx#wQ9o<0T&;e|d!@~T z|6Vg9P1hX@HKYfx+vKy3j5%zMiF-F*n9wfzRPrWM4rIx`Xl(Qr9K@Bqs&498RZ*;~ zGKzKpDd>P%2=t_|D7K`l^)|M3Koyrf9c}>xwQ=|El0y@W-6>6$8-a5HflOXtxHy_zl#-7pYlNmlw-6I7iN$$1y(30MfKg7IZKnFmM@S z^+W%P78%}8OGi|%7{8MnRK5_n0y74=fx)6p++b#ZjmW5N&&`5f<4b6Z9ErgC)?29i z5TFemy2P2JuKty=?fRy^z{-?etutrL_}QOs#x!~FMPq))q@mm4AiXzCM*LBW@VO;15!l;EkB#Y8c{_3kVLqGYX4^`-iEA^j$K9Ec0jI#&E%yds} z0OM_W$~`Ib0xCya#RnS=N`Z|%wVx=m5(T#S^xOufy zKYoov4sjTv;+R@RzT6Y&cgTBH_^2O(O{#4&?r^}Go}BWzgb`UEMJNnL87=R`DHhRV z9H&HyTWvXP-~K@$j<0|r95rT)3FW+MmmXGYq*Tmvshb1$eA0!V^6u(vBhHUgzx%Gq z0$KJ@kh-_t{pbvcK@5Y!>KHq&v|B=b>}C1!%^b^8`IOw4v%bTo0={V9915wS^gDmu z;(F#T_g+>J0*P>4Fplhv5ai)GdoIjRaFEb-i+++6s_+^5J@h53TN>L+EDJnXH#MtK zQWb{^G5#cX?m;kwC3iLL(B=I3^DW7K(G}C`#{@^(2QC^%01o{AFC4WZ>CFpmw#_P*PqVmb+L2a3{DS0$#P2T(8-0tw0Ob4JW^$}Jxl;A}KLx5;!&(I3&3>zejirqmv1Fwa zibX3hCneg`@!HM(0=+a|#TPf3{^FcBp5I&XRFk#8{q|qpbEm@P=ej$HlA})xkK)tt zsO4V?-3DZuY@o9>RHHA`t3<5|Nrpf?+oVaY)~%<^c&`bkIDn_LoPA%l9A$gMCj;uX zP!xFXnT-oGmWo#jPJf_y@i!mNm+wp3>x0!DEh-b!(z))rXA%Slktveryk~xFp)s`3 zr`tmIlDwLfs^KT$z-XcYit-n&`u%c7aL5b`F z6M+7~;)@o$boBF0jMYX^Hg-`eo==&$rOT-UtFMmhes0?o(f0%};LcL-IX25$uc2SV z6pw$eW2a89;SdzW&NDn>FD2PNa@gz{AE$&5XCg%-woEPzK^b^CmO6XU3b-#}%=7X( zs*#kj_Tj#aUjWh|u15JzALV}h)Jey?WNO8Zw?P$Zpxy@Tiw)BURhjEoqSUGz33<0G}UnY30mCWL<0S*D0~Y+CSuwh zGsbij@OeQ0{#kP$cLb@LdlAWrqGk;KYH`=n>D+G05Q6TCjg&_2oUp^$V$g%2uKLO7%L#UC{GlNlMZN$WhnB@y; z7~vea1pleHPm7dY;KMS(w))<-itUh5bJA2?e3*M_uX~RwK0;_0* zNE6F(Wp`$YS68@-bk~1qNf&jyc&cRia^+I~8uNv4KhtkL2?Tr{+PNB*wtL!^qZ`3j z4rk(hbwtt|yTkRH1gep&~-;XfhA8_0Y zKP6Axe<)SUSn*=Chx-HRpXsHpLl#j*gsZ*Subqm#0oRV#u6N`-0R5#2;IgW2m*@2% ztWNum{)wjQOqa!V3f*7rQn+J)#XShS6yW`2rC9(gmN5negi=EOt#k@t&Lkb-l!}#~ zcU&8lboy9RiX+Ar=elbi{wgcsW_LqV?@71}kx4qd^rpO11(`GL+qL6Fnoi9?0_u<` zZNdgz%M^=+R-V^iLYTwt7nfz7_C!Vzrl|xyNg`JK+<9l;`cv+u1;f*{SLMM_Vs_me z2)JSxXqDsvm8W6;SVP(l?Q-te&R=aKC7JpABmGV1d7{O%9=pL7}k2;qmgVs51qN*rA^3j&2#(Jn#XfpzmpZGQ*|9x ziS{Jl{61b$PUN4+EE{NvXs`S7&pV~HG6de2epV9^DIbHBf8jshP99sJV#RUxFAxLu z9kV$2Zb{+;h@aDnItmRi{kmJ1vFRjWn~kkVLp02pqS(^rcY8M}ya4fR2Ushv9q zD-d*L6yG{)xK{6{!h;>A13`+7Wi47P<7fKa!;e2c|45s~wf!3_D_+@~rQa_0tGjnm zJ|98%e6LW$goOzMEgYKDKMQw5Q6nEfVx{hOaJ3kq#3cg>SsAjAuJmoaa7M*}^z5mH z6|zl@t)2f)(%?=&!{`!B$7WR`yOi-XysTmin8M*Mwwrv;NqqRhU8eLA9bs>&~79y=~itf7YY)qS8 zw?1_Ic*W1hj%{)!dBLv9W4ru)g+p#T*3vsWKTxK6@f@eQkeKT1)8c+o#qgv zlw0->4-zptrpl{5;#Jk@Ti)RYw=S}7a_3biS*kytoO<oeOMW-ikqk zwQJTa8s(F80)Om?=CHcw6293`#s_sohnQRB_pJqWym2hHh9S5)DJS|>tYb<<1y<<^ zRBa2qtz3X*jx(T!U}jtU@R^c#bwMUG7Wv7#N~YcvCvH$oK9oroCgd#p7j<;pZ*hra0sL9K+C4FU;MLB$aH&b5zlwieFRbj*GJKEr zi!KymE$o}!x{jyG&YF!YU57)))ki}fm(S0ZJ-%pTeNO=&G&a%BPG?RJv*(ZS`|bT^ z&QqP=2l+k%b>#y)*$(^Q@J^tx#)h1m4P=fZvh ze52|p@Q<hOPGefedducydKDa45r z8k`|)p{Q`ly?DvSihAO_zW@BJB2`RW+kTxXQ-1m&$~gH3k{hrt)X1>MM^y?$k?e38 zD97P^Id$qSAlBwnbF<8l)98!oZZn>*QD9hUUCxQ&sS8^dFIx2ERS)RQDnZHtL_CBA z1TYpyk z=)}E`D=Yce<0i9U4k95@*acT92(}F#?rxc*Z!QToe~_#Ct5$wo!tYO0wqN+7 z+GEU(*I#BnRv|?S_@7ze(=l#D3W`T`a2)s>-#ux^%3A3s_zS!6 zLhi9<;2L=ltKprSa36n2jUp&31!DX+c2|7-Tm;zFk?^O zf-;HN6L=eoGYdG>d$9wUeZ>mKql=p)=Q^GL(v~f%zk}Qh&H&YaKWp@PNDqEn6*0b9 zE1W=2oC2H@PUib3A%|ry?3B!uL;Z`3q25-Sa8?6bsNTXX09@Id$k}$a;2IR?u#8v* zWW*t?93U^(1V4>;>u+4F8!PWb1ZuYzThgAH{%~Hx|zojg#s@;)- zJr=rqru3Cdhb&qg1`m?hLol}a-J7@0PoQ3aJ z>+dzqxNGg&X%FSgws3ws#BLePHsr`YAJep_8BVsN z$#6^h9BT{>Qd_%kYK$Ytj;)MUQg?D_kMbaAnE~O_>%<Hj{W;cYRe(OZw$*7Q%`wCT1rH}l~lVm!j#b@Adc$`A>rGju(4_{xa= z!CvX4gXOVputtp!m(&~i>%o|{*|u#!&B8Gn;E`*&V{$FVJ**c*aMjAUt@x`=@6R#X zIVTeegjV#?hV6;H@=36oA6O?m_vIMUoSRtKP9^hd+*OC(m?0Faj)(6Wyl3;~BORtX z|IrggR>C@PStkRRe)9hiiu^BGeTTAh@7|almbET?d61u%YK2W$#7dttHeB0>J3#d2 z>*KRTLi2i{R{x=YSz2Wz;wY9M8SR9N5Nh3=u=2~)A6~33ssXpvsODnB<+}X?{O$w$ z*2qiaCJ>Z3Q3U{vV--7%g8Z58QE2t2_dY$ct;`Pf3+IYixxCr*=ey%;mHm*?Oox*d z5|{2RT=?9Qrkx5vFF)@7_aEO@@PafoMdRp&kWv5EU2}g@61rjo^JdfhMK`WkG3gy6 zb9Vv*+0TAo&&=!>9OSRp-Io7>@^PoPRvTq z2$A@i6pXItn!0b6;a#!WVmEtCBD58(8s0 zI@WEb`sSvTKmWIRfV^I0g-ZjQUg_<^%|uJ^vw9EVvOf)#WEHGlh z>+6ULE(*-5<=bz6E;c7C>m2-HV7Bw0`hPpM6$oQr&hEV3?6zo8_weZOB}N z3XVaxCh(gMU3p*=y*}bLP!&SsP=^;GjR3BpI@U$`kZy!t^2d2IXSVy+6-8P?e!z!H zcxMlH5jC5N+?x!263lkgn5)TKFRwfC=&v1i-krL7I}n)Mt%xB0E5DsOve$t`bX_#j8Nd?N~dwQA=6dG`7aEAeal;UyZLOTA(G zv6hREFFb#Fck6!_Z)udbTlalGr(L@4^v?^XA6oF+=}t7~NA`~GdTg(_)Dq7n8`ZgP zg1t`D_>+sTCNxT?|b}tLL826jI^WD2Ck1!(Cw{WK6F)WWczg{HLw%oROUdFijXTIK+7n7=sHQ$z$BD2H-1+Q?33rGqVIKrw`hw9g^y$&Yz(E+sk zc^_^TYp<2NcJ*iv0mzx7_7|!18~u^y{>?3}-c(OK-2t~a@e9zrJ&@B_upyTg&VE4m z`>79CwwOuHu^dNQJon&OL0i0d%}V2s&p(uhK)J|{PaoUaAv^e0KqDL;B3NVX1MW0v z1^a{>Rh_t@Et9nvLW3d-l-)!FqHyCASpvCK*?c>7DoCTha$~0at>>@$i$S29?6GR` z;3!i=1p!1Mf&TrP|c_^G9jMP#IyJX?DGD;!@k+*H=Y%L5fzST)iCQsn+v=j$HdZ z6qnH5P$SXKgxA^wuORi8wU~Lr@K|hfL8T}_-QvMvT$VTW#qUlsJua#f+%PHHGn&i! zM13)7fxbq{1(>0$0m}3OKTFYA4vXAN{GJ;gNs>yAHo9M)F8u+apU_J9mTV*v$JaR# zdKKxE$Jk1FfN9et{+0yW!C%iHbD%8^a2yCTVVf^l$ZfDHsMhGxPbe831$GW$w5LW6 z!%V+ecF+Xd+(R{gk=$Q}JHV1RtOST$*DHzoebL9$OI26<3jaD9o?q(}kfGJR_g=d# zh$Ig9K$KA_2b-q!HD%ZG(Jyo%_PkbGKCfyuD-`Q40|ttn`*bP#2wx#qJ!AABvJU6^ zYL_lv9Ps2!tMj*mfand7n>Ztfq8P}YD)-=6^*^y($f5+-z^Ns z*KmRjs75QV9^d=--^FG;qlbwmAarNc+Y~U!FNOg9W&1XZ&*nfzEc+++5d!A*F;*s~ zLl{7%5}^sIs@rR|g$nBwgF4P^YWxY}Fqbyw`YG8rPj3o?z11zl*F^w_^n^(p35n%r z5#Ts;p@Te0gGnI~pFh9h%dJg<#R;`eW$5Hkrx;(C_dV#ucV2%hg*t6ThaLbR@7;{V za#GlEsqn`Eu-jtWuivV<Ih}W5$gexBHbzbuXTmloruVu0s=#1A@#bpHD4=LzDH_+(d=^beKsLmvsrHxGEB&CF+iFQ;yY z1jW+_nE1;e*PV^HJ3o-8^MTvLbdxh71Q5~c5y{?2YL!B}5~eR&X2y^%8N{RhhXF8&K-#eV8T|8mS4|ZVzMIZD%$7cWj?Anfn_LgXHPo$yd3WDOJ37#MWc<5w@>)}U z=~67h8d!hIq_DzB$lF%13`}g_>CfRKEn7}(`*EX*8P|<|{HO4ovg0?+2ds5k<_-w4Y3ijH zASBgYz@nu;z+o16%R1Z)Jb@^GTFi_R!L43*;ljL1Q*x8+V8F4>H^ogiSu3r<9tOM5 zr1G&>Lnia&rDy${?d!MU-86d?np&T1kZfnF)LnzMCFzn24R)EHDBW|~bG7|Iq#8Vl z^$M=Hs{h1ck1>v)pc}<{2_V^qukO%ZqcCFg?(A8z3~5-gVzM1TTQ9lg@4mlu#-6=< zH!S9${wwC=NAN^r!uAW>)X%wYzkP#AuMIQb+gJS2o&)DJNPXq+7$o?f*5OCp;zhKc zOl$3EZx<^T4h!kPAc!|6Z_SxA-}iiiYTY@Ds?Z80`xA4_-Zp64n=4;_(CTjUH=#AW z^7jkL*%G!9Zl#Ht!-^>9O!2PadBH(1=|k)D-$2JcK)W#DP@+sb-Qf zbr0dI?N7KY@P&z?43S9BIFh_okMh75YjNMFU}CdC91Glm>B`{G}x8UrsK3z`E-q(bzUZZf z4-K34n|sl4>DM=w`eJRmF)g}(hZ9^jqMNy$UX4sP5M$NF?nE~cu&{Et?6G<8n|P~Q z>J(pJ%AQvg?OMF0f6ZQSDNEi8Yu=i>({sJa$Nj8kVFH&1=00%F!`m)()L$XeG-LVWMpyA@1&@k7_9A;p`qbnwj6%ikJYEFaV5fD#4xZ(Q#7`1em17F|XCY2}{ zZ5K5DwrczKFPy=cHrp_W=SL#}cQ%w9_zj(#F)`BZzn2p4Flmd2tc4p*aJK ztZ8w>yaof$Hk}2ge!mDjy+u@&{gE)?S|D5SKWRyk8vBL~h!Ab?aHSc{Sg`+`OyM%9 z+jSuz`2Ard8X;YL2*Z^`{3XLTgcMS@tLQ{%u%8UozU?lzqN+6S?K}V#G}onjl<|`Q zh0<9cU)`Y%ArLnZ0xQ}rOmgA@cehr(dVkEJUOv4xb9sCE*a}X z%JkT*l_MMT=ESHu1x9nT4akcF)X~NQ0x{Fn`d8-I+#HQTQHZyR6&V_o^FLSYH+TPd zkNR1dp#=?R3Ly&q=h7L&WkcK(U_v1fy*BB&N-n@Mb!NzWT#yAZlzJs~%h@|~LpVf%c1V@xF0Y5o#1ms!HIe-fFIF8MmcBp zlzc%#4(BeusQxkvllg_#xDhRJ2p_IZp&m3|@!8r}hjrS)!$@fX2bF%?ZhYpk0p*T} z5aBrhrc&y9xGJ9*kcv3~f*x(Byx~bNyRqGt#+|}`k<6OK)xLepP-5)9V?E8Nni=wy z?xwVIw1K|{%*e(2-&bYI>w#@RJ%FDOoq+7sF~goXYStVO517nx+X)|_osZHE$KzWP z`CA?QS@4raruc@3TW5s|6+%}X5_9p@5MHGwO~!t9s=V_VyVVp=%vOKi_QRYxcP7-P z&41v|*{^PIRHUV%BHqXNcEv4Hd-G9NH{oc=c+=H3CMGE5XQ&KB7|z4+*rL<5A`$;G zB7sacEaT07aCq(o60vh&_O{}M2crcTLR;FTBHz5Z>8_`Asuh&a_Pi9wq@F+6-@3E-;2+KSv;$cUz7f7&9g9i64 z*{Ed#K&}7dk3NnVJWz%8F_CX9s3Wve{X>Cv9y)U5;+wQ(pH-XqdUE@Nzr3mhzocdS z3MAeuHR1S{rA}%Ck_w;pu?6q_^1oDl@NX?`J8RgxoKiJ5eDT?5V_yY9oYAfJUieA4 zgkrfT*2P3+khP4~#uy#37W!w2{ee+65#!NivV)8DxSpO7P&8z}T9YSEnv|ZoqLxeM zivQLS_V8iDdTHEnyD>aa;E{dsk6;P~p$B5FDeRPWwH%(FQq;rt8#L??zW$_1UulXv zsBy8XgQ?(N_Vz_7_0g6T|DLBQbk}wgcxs-k3S51s81>2Qu|Gr zT!h+jZ>a8*-+uk|&Ua*-xBsKEG1jEQmRsz`yd8eWyJKjB^j1xCC8v6Lg}Booi0%R* zu=LGGGq3$qzKe((GEoqs=01P65>po>Oc~f&fEEcqci+Z#JM~lmPMI13CAh4_!Gvk(j_tN}j zx;CqYfhV!xHa3KVmW7?*%5pY&uNR;x^v-DWxjWitrkIL(q?i9cn$82R=YH+uf3xfc zA+u1oLfIrqDk0h3Sw&V>l2J%mNhKsZB%2D!NTF?qkc`rj?u1IBNImb1^PJat&U21C z_3!uley{PlKA+Du?{{8yq~+(V^*^$1{{H@!5~@BO2hkkLJv-w4A5DXu54q$irX6qm z8qK0v2GkP6oPZva!_q0zS$4(dGcjwdkEl_sdof7WUJwg) z3tT3Tomx2ORle@A&*AJp6y1#6k@ZG@zV_CRCWa9dE}d{0=^})Yv?Zurt$33Uf zSO?+c4x>Xq@rIhe{B!K9Ke*hPe@Bk=`5f0=(~DB?BDZqDYjksnwh(E6AhqnS1gQ&l#NZe5p0$ zyO>R0HuRP7rl7(hvrb+zUIeX0*uZ1qngH*h>J^V+dNR~WgFUMU$#jG!^e%{fR*Tw-{`>atAHo2(p-8Aq zqy(>_8yT}0ByGPJDHwjRq&i0b#4TyhwP$NVQ)4O_h?_PMh6Qf2{LRjxWB88u(B}zX z+}RVPZE#1D&^Y!=L(O8K(Wt{aKAqsSj65l&C`hPlkEab`-Y*PhzNL)vo;{OyU}SU% zj)FMAQ#Qij&mk&MWT4!yqLD^qL<7NZ1meSgc{IN-ryljPXlVgxsEzBI;ws^v;+QM5 z#!3Ac_b?*iMyRSOg(amwd9oAI7*~SiCs@zOPU|PAK$yUzYyGtWNZX8Fx;=VqXF`~nl_eWT&pe+nd9pbd$ui%d$d}s0 zqSyZC&z@~!(FO@n00+pqbuMx1RGyngy?z9?3<8wb4eirD3QcZ`s4bO6`7TZ(^e+I( zSRTWCQ9@cUXw}D-*RwriE1etbw`d^-UAOEFE*ZWo%)shNNI2j&q#Oju&A4~GV=AnZ zbY;RZ=dy`%22gK4YCMY z>|x4~U-w~?(;Em7EjI3q>)_}(-Gb;p7oY*@Z+%gkzq@!y(42R$uYQXCT zg9le-e=e2%(GQ^B>A2DJFwOgN`061vzZW%t_)O7@5+9M7cN}9gCdu#1#1M7@9FX;dlf-uwg z#0%g;@`fmmnb-W+m)>^;%1Ji+sQ>`8Y^x$VBI5H5pxsgguaBJi>0Oz&bS)$)X8T|w z8#5)IF7E%=`cOMigsav%`OpdqK-GDc2Z(~=sLTzfaJlp}yx{$Nj(`35*Eq3}41+L* z1PTL0;IUxuVgYPT>A(fr#dsQV;W$Diij7F^>7YT0Yf%3|=Pi_qcgT=n=KI@$r81z8 z5i=?&n;OJJV~5I8PaL@ghCbK)<^0gor!B*^nD(Y}zwX2Mm0`95ueW2YXZY_Ov%pb! z#qo6V76czY{C?kb=UfP_;+u|y|NE!cNgR+-P>kkBwdM8qnh_n(F%@km1g%*#kuV<0 z`IQj~B(j=N3Dz=%H~$o~F=LuArKBn$BGZS+#xII`+F-gJk~h?*ltMS~@qSZZ>exW- zDJr_pCC9x!g&_7{H62I;TO5CL~e6AUJr_S#yPTE93TC*tEg3%p4D`!(f(TL0gbGv2#L=G(9 zOZL%Td+RJ_OR{~J^IzxcZA{F_b=^=V!RrSS-%@n%=a2LkFN6}tgQbyc({$@M^n90V z4Gh0I_Owy7UL097;{3UD_shU;Y6kHT%}%6oF=cMU`es6Ff&x?0mho?SRt(4Jq&hO; zqhFW(L{dm_GwJcrB1JNR5#)#RjIsLyF1;)c5gdZ+#-)eNpc;1l-8*|m#WyIw24jyw zvBaSgdlSZ;xHe$2;LEI>DZ%~6kMVOjJl*+*H+cIs6739vAxig;t6 zT*Rz*psxQyUv(4~2y&nfP)rCgbR^J=9zrGFX|2OJa61Dvp;|>o%Bhq6DwFl_h8Jw) z-TEIhm&bq3jtfEFK^U5%lfIj`{>Byk& zEXfjjKNCNJk}0PNn_~WWHX`B_hlS+FV2Y}_Gj{9b7c3UszuYL~pSDU{Dqx;)3ey(> zi(8aS)npdR#@|i+eU?YuW5-n4_wO1vhZUO_%j~Pbl_%gGb&WU6hmqffI>q4DH#L$e z1$Y_V^6UY@lqj?gN2$$vX!t+vN&UTTPapw?fGk)B22MfuWyz>cknfc%{g@jy(AF6` z^axCuzVvanVXa>6p@#<`Vh}G=0n|4~C^s7Gqa-@f1sG*hx%=G?ZZZOaPoRL^B>vDq z(6ZzcXgGn6fW{ZFg)qe2yE9c0YJAQ1G&8*|qI3?U*fAXPYs`TFT3ypioLSkQ%w&U` z12;sC!XJ+_rhtO80o{>S>~4G9FnwlsB#~lCpaE!-^qhBRx@B1qqY2434+m`Dj-)FQ z=SwE32=ZAY;o|0|J7h?^gVs9sdEryjNmNWckVjIq2u%~Mx|r?4kfv9nXjO;y`j@o> zE^lYpi9KLaxI)yU@ByzThO<9lKd7zN5Ky!atVX&CH^rDLf#O+%m{m4|@dwimf$-_0 zc=3WJ!-3PLkYj>_!;7wCi2$D|O@>=rH-$eyogmfo=g-|Bj9`}v#76BjJi@m2IvATp z-+O=2xsbTJHB6+I)liXi;xx^2abnpNtbu}gWc(c};*I|P{-zVai1GLA zYF-G5a2_yr22(^LF(KL;DHSk!R2<% z&&3o5vKSs=6!Hp~0T6t_5Y+K89)0RK0(7`46QMYhKM~3hY}w^~TT;0ZzB6&e@D&i!ayUQsG%67rYrBKCR1EzVtoB z>Wg>pI%2ke_%T45e+qo*_CQZE?*Ua~Vhfj#ZWf-)xrm5)V7S!kM63hf*v!IOq%jmj zybuWD$}6{GjRjVL!^f~5Fc1p zDw#qoXJ5E3h#loC(@dbTzq0tw+IeX7ISM1sO{Ow}`Fsk>AO{ENew2;Pe8^mhoxeTM zzgP+ZTS%Xr6Q0CeTyLTi*yL*73(7Z=$Lq`pPx(14UGbCHl($3tfJ$04ZTgClwKNm7 z?qhjm%yXC%P2`G0Sfxys!$}28V=8Ph5^hB~YXKmm#1aK7>HEyIY4p(REqd|hMx3@0)dqy(}pvo1JJ ziS)l9yQK_=g*<}*bj#}{^C^a5xUja(o8%+;yGfHKpzK1SoiHKLFqZU&BcJ%uF!@JK zAfjMe=q9 z>`U2N#{Kx;+CK6Q1sP>fTSjxx5yYz)PZ9jt zdyq);RXcwO{Exh*T`S9=; z9;B#?Uqd^{~ehvJ#*CtEro%8SsN!Vc(lmSG!? zbZ$s(wJtyzQAeB!iHCAE{uKC#o?;>Lo||^tW6kThilfy4e_6jE)E(CA(IayuE#DE> z8<_$<%k#xi@MBAcO8FR0Br^vh-*b}(voju`kPjniMa(^gxy)3Nh%9trjF4n`H^hm4MjQI_zMG-y|7ls#}DLWJQ82F-W|s7u>%8GR2*&)p#* z%yd+j4ATE1o>eS7;$u*GBtk&KPoHKCDVQufpvYpMHjrsU-hs3e$;swKlUFgT!k!)n zf0ET6)THDsi9egxIj#4F#}swpn&doW6)Y}FbE2HuO4cDYk?zmr+6$^{&uc z5-&|=Qbm>3{vMO-1{@*aDmjFer5WzLz$qRK5un)JWe#smeWW4_OOi;-S3x_U-yelMHTs?q6dB;qp z{H+ERPp$=gt^0Ydx7o$%*KG#Xkd}m#TJbR*L?gGPq-5!U;10+lgTt%iESmmrNFHL( z0iUkBcXaL9G^a{-MS+S^a+e~5*i2lahop}=6BQM-YnMvzwnF9F^qD^g-Xz&OYBP4J ze@zIwwEMYv{urxf#MOxGVp9WK7FjOy`Zb-naR*uzZrbPz#aCW>bbKSLFz(|w5q8Js z1XG>`MZGcoBl(_cmX@yo0Ki18UAyUD!4y5eF1ytU5Ha^1-EC$DgJr~7=Brl^kdBj% zVIagcG6;n(QwB%&7xq);){tcn!3Plr4ZKVl(Q~h0`u83+dhFN&@E)AqHeh{0@q)## z1*_GuqjE)z)t6OW^xd3U(TIwy>B9#d+t`lVM49y)zdY}T3N9dD-i9n1&*mWzL_~5co zr&49B6wfQ(^BS8Y`U+Ucl#6I`{P!-UlK>|{VC8?MGxY~VQgdhL3s$)l(Tv=i=}(7= zXKOv2ehDt1HhnXAHnC^q&W`h7ouPJHj-xxZ|6pbkaJqQTFiSM3T{m0njKH7`>J;t0 zoCdBA#5A_1Z3dP?ONy#i=J3`!K~|H2x<$Rnp@am(266GFVP=b@80R1wJjq%A^Rq9_#H4DDHQBDs!uhmMZB8Q5*n%q9X&VBGHRK8UnTX$GNt zEEefxVe&eHm%H?9oG7_|sOP3xTLOzofCoMj!zoZi+2sdZ%@@(NgG}GguK9kQl_+U_ z_4a;@q9Csg02rQ8d;Oh1p|XNO&dzt;gYMgo>Z&FwSJcb=bTwad^YzfkeXTB2<|f=8 z0yx3^8my6wC2Pp8Ufl~|XW^0;uCxH-DOy6guF^~+bcR&7rTMc%5v*>Sf)Ho{rvIFfCn0Q?CcOccbT1g7?LZX$)A*f%m_K))r2n|TP-EIMmW1yOYl z|AP@5wPXWshp@=0N}=CCjDbU>K~;#I3uQfw`Fs)-icy?M1Q)z>$HB!PFQhxnx;PpP zb_mKGr)g0K05%E_NLroAWTsq!*{mi z&Bj^{7LN>aasT^A=Zo!#=~PN|H)XKpPcVwVU}wDWf7jSmc%MsosO@?=+};k@LBBqq zVKi-rXvY9=XtG)s&sdzerJ{)mlYA&f442ILhJ3S4Np299RMph#no^8E4PDP0V4vd# z{A4&iV!Xvv7G1cIJ7ZTz9O&h}Ws6)|sTi^RVt8V0YEoS~0%_4{l*+oYiu*1lPsBi| z5L1t*InA$$yTE?HH>hYAe|M;TEo<%!L`YTzyUnH(6&h>{L1BR}C?$Ziv=ip=GdY~f zH^)-#%k_aDou~k_9yx8ACIvS$4m?z48_c+&6)i!{k4GY2<(;wPAa(4(tSuO?aRam? ziM63P&mKNJ7i|JyU+*-wVHGd|0)vEuu>qWcs0DR~#bAt4$@uSv1FeFXOO@KB2}G7J z@mSArcM0Ajgd$1R09iy{Fpr#Sz^_qox)t8XBWT&lX+ox?DkicLV6@*DARHEn9)AVe z27-QLx@!^>Cr z!VOd%g)~wepBR>Nn;`!Wp+Arr4#P*nyMoWgZD9FV5YrB#hA^3c+&Pfq36E;`U`U8q zmCANeoJK)o;0jW-^scz}K$t$Su!ZEX0}ruhQ2SXgJ$-#%zWVqN2=%E_72?3k+8|tU z;Pw%Upg_5>WVv_xL+Y+x`@!k&qJv90Pixu+$`!X1TB`QC7+L~TYozQw#cCd_6RKcF z?J$-BzGb>#a|W5VX}=fghqxN*?qZ1@}ye@C0hi_6{@VC-9SHUlS5aaI{8En#c|fkt<_x zN@5m+7&yM@Qhm^BNXbluC-^gEV&sLDm)Da=kCsd|p7;MbxPm&nwhWei958u+*m`c} zHw0xN(MRq+!pQ}dp>ZJUBDb=Lu$?q*+5=_~gbeMGD|sz{4P$`K=|t8FFJ&d3%~hiJ$|-t#^QpR;1Gs(%cQ`Hj!t1xo9}ih(Qt@I^4Xqy4 zCf0^nUgXFufoU6)AfZZusWT-L0R=+^T9_MaEA$vm5-X*S0AgZ~?WNlAFaI*%lT^yE zk6sb(s8ERj0i;A_P9tuU2d$}r?_%=CQ4kUlpP#42F9&Q&mB_DUZ7{wzro z9v?Nmlri+r8!d`h#Y374u-uG(Pq=VmaCiOszwdv3uc#2Lk3SYC0#@L>hl7HAVEjK~ zJBu#W%!Ktx4}dpm!Si^Dr>QGwc_})#&~VC(85%}shL2oMMrjPq=-Nk_dPNu+L-7Sa zWuWMo3J8fkgf1+@O@RY}R=m98o@Om&Ydkbzwg7<9y~j~Qh;RI5$Qa@rLA^dfPOM?WIP3SI3L{|35pEN_?r+S{45?CEs7MF)G>otg7?(Wmb5+p z0f+)JF&v2=Y^|0dMJYou3;n7D&+uiJnZ8F>~bH0ce#syei@-Be(+3=wxjR5k5F2|I- z-l%-Xl-dkJ1IE8h!ZV6R*MrL!?nKSuSQ4x1`xT19<=eNXm!jgUkBld)2IkyjnadP*LF3$}Pg(r*0@+w-5x+JV#W<$Z;rxn)f0MKrBYt zPTwHHaf>9Vc2+b@&}u{_psA^M#e|!WLszpKGfcn(ve!b{y3NfU_d7q%Z9O&8Y8ZoBiA7fa#a${N}>n6mLrycBF{J8;$kl!& z76K4+KAQ9$PCrJlNt_Le>rbOXt0TT@@H2^0kV(6-$dDce2EsT%RT3}lnKWGXYYJMK z{QA@v(S|V2@pHRq-tiOqFCe*A40s4p{_(%ysaxlG(w40GaBzVL^=O=XGyE55ZP>7J zG@=AJatzUo{#%=lj4_C)I3)jy4-3R7m*vYDRW-v;jf6}vHf70fT3P};lLr8`qzMtt zFxOWec!9=pmg%%3=Vh}uR1)$O^-0SfL&DyD68}qnPm0JOm@i;@G?=6^N;s->3+TU0 zbU9woF8Mh1K+zGi=i@|BNRjy-FKtW%!_DjH5X5 z^0@dF_%iCdl(p6Lc=3*rD(pVAv}_1lCSjH#-);F^N3`OA4m!_F zg`xk){Xz-Z0E4mk`C)C7j7EJbDPd}~l@* z<}?@fGtD+{8jTQEfd`lm1N!UhT$A}00_o}up%*?Juq-G;uDglJ`BqhWo8rkCt0 zgAj-#pR(gRfi8lY5^%ckx@k)x@7D^u_{U4g@P7ek>^C4byS4APL)`GI1Kf2@851Y1~kdJdZ zntZ+2h4%{IAOO^fksk9fI6K(8so&d0Q9~gkM-a?}7OhUq@BdEhgvxM+VIIkhf0!Jz z95hL2^O#O@evy;W$86Wd6$3ikXnOW&o*(^*hp~XrMnnkCX~b>B;WmnN2|FvM|q=Jtmm#o*csf zE0Tdc|NPw9vm~Jd$jg;UAvHBW;-b(4ff%aJV%^|nMWe7r3ZgZ1 zXa^crjw*P$R68{KrKOkRZx9wPv9SS4k4&s?-Rc11RAwB$wZY;&p{*AG|27ZVH4Ru+ z)}Gr1)R=f+Igu6CweE(8ghN>bz|E7Q_x$eA}R0@w$+y{#WlZwfjY?+EJmyJl9ZX?{u7eBJ($~v=}7~xNw{k+ zTgK(n*3#Mt!v+!qlmrAtM;JUXdgN~lose=Za`)1|o0SPQfq3JV z7RNMMYT;o>55e@|pz?9B!D$2R50v(m@Fc!l@cw~vWi$?JgkFYzBmoI7a0ZEyg8?b4 zv3}_i$o{lebn-a|5yt)+#{(>{)z7F!17q@&O2-&mGZm+RXO}$_o;-OXj<_No6FiMk zsPFdeCnF*P5Legy%!tb?EWAtk!^beY>1+|r)Jixr*o(;`+?_+ew_#WwILJlzr(%r2 z`kDj)ReV_;vJKiD2WnMyECHoLLryy9STbIb$=rq5FJhjROYv6_G|og-=?b)D7>UA> zW@`>yvOs%p`FLd5;vpE{ za|$V^q)7`Mzs)@!9G!+D<>O0~Ag~l=1{1&u0qXwimkCKIg^zNd7EmCXfPwEigB83Pt8BUJ+0x2x#c4;GlrLBK@no6Xjq1j3;^)M0 zoRcT-+19e}L2GT%rak9};qC#^mAO5MM52Uw!^kOb7a6vxZyp1!26^m0tnB3O0C96d zLD9uH0;(s^sqO@kW5xZUd8ZJ6OqPkB8tNjBVbAPM4N7C3^fCE zR)RCLae)jrM#6++K|n`B_@ntzie1z-c&Uhtgyb1-FkuIWhcZ$4yubxa+<0`@Ew^dk zp6%%};$rFo&7m8+K=@tSk-7lGq!a@V5_OCaU|7lnPoC*XVlHueJ41I)#ipr)_*4}9 ze{K(wa!@y-2BV@eaLdUOph^Vo*KuCM(4wD-A3HT}ATSjw493EnQGH&9eGuq;s01H)1bwEAG3^>HjHXSfK;ceaa~mx zUY*8Jfwo3gOd-mn=tLVmi;=A8_9&r=Ti6Wm5)j(yn2^Z-w}wDohXQi;lcO>c z_N@Jt4F&fu1#Kdxbm(^k(x+)-;4CJoP$IbOydEGd)`l`e5Yr4eFqy6odtR&6Pt6v# z>_;l&FZj@PTy%AsD!VCZy}(8A9Sb6fNKMRl6R$IRjhhUXR zBpcb$wlN$d?26jSL<#~4#k56G*knC#E#6B$3?5hjM1Q{3-%=Dc%^m16gd4~xsKXMq z4nw2@`D3UC78S(`R@yo+eSWUrly8)=00>wUZsBh{c;GpF3U>DV%blS;sx#1V%CFSFVi7WxFi^3BrIK2b6*DE=KBBe-IE7g#JLE=( zS4Z5}6WV)6I|t>6$^)D;=4AL#W3jshVg>j*5D!G8GS|6O^R{8=D8$i#qKf3Gr+jY<$6>F83EkXTZWh@KrRfx!7!);--imjfky2S84W zC(0mhC!kIc^Nx)dF6*3%HwausLKHp&L8{K{Yj!=%K3ryDI@ON(2qT;~?2Q1|6ilQG zkXFGrc*fukFDq_1V?SoMI={W<*9_>_?=0MzrQ~ppgB$+Zx75CVz)SJ`6nXa}C?&HJ zQ4PXDQ)8e^IY(H8J1TrEP(Wtr!X0IEAf{Z$J{nBDY#u$4s9eQJ8VzG^3$IEU+S2yO z2#1@Cgmf;3FOFHR6!20z>*+z=Rm1RNYVY_eSB-Ih4YHv9gqw;HrPxN}@J|-Q_StC?KFWh^Mt~uU#!icX4ky+l8%S@Q}3R>a0}>qb?G4xz#KkuMBHKF>6(rBfP8|snQ9B6m>6e}CBS-U zw4}{GbVz&1km=!N!n1|Pd1)4Llu%CzbHHlSgnwFsz^5(2!2lO^1)-CQ61G=;Jq#y1 zok;t~Q0L|SV4^LoDw%GfvA|x?iu#OuAlw+X3G(GMW2`wo1c{#At|>+p3^^>>e-2s? zpI9CzjTVuPR*e~%%J z`RG#;Y`LXS+nK`Bh!N1EopR^?5b zG@OAt-ZH#xLoWE!iO5l0#NQrYl^oV`4{^&}u0*QmQ>p%490N>75aCoIvP`DOq9|{K zUl=6}(g2_h#+5j2syFH;HabQ|B>By+muM7;w3UZUW8DeoyD?ym6dc;)rjjt$ogV)W zb%S`2vr%fYUI7~E511f`8z_6QJ8?pQ3gJJ&t^I_kJiEoqbsi||dy>ruY6Qo5dG%cM zM_JOW0!6_sPljjj0sSr`^N|q`2tRNDwK^+;t;dXM0$ll}K|*H}psUAJhfIEi zuFRGLiX*1lMhd81r(xF$(oCY;h2txoqd2WFyR~HCZ*SkL&%pgXr|al6f#uJ4q=|Zh zIzucdnFzzmnJ{I_RrXE2AC4O_M9YFB8vdtx(9za%gMaq@XN;=6!&t%34U3 z5C^$LBaYTFR)mLe*7dKZp)O zpj29jDTQZ(z?lk0O4w<=7u$r9AXxHFNk=6kCLpe^6AjD69vopPqiOOh^E!%(2og&c zTsc6Q5|e=gb-(W72@=dzcT6wtmx?P8+WX#Y_+Gg`?)T?qG7n~wgNZ0yc^1q^kBjJ) zPwz;<{CDj~drAx{QMS4YJ`H!ql_DAol3J6xX{DAr18iFfGeWP8F=TQD%_&GH+mM5pdzF^QW5)Q;YKRH(U&nXZ@{Ioy%m|)?V6o%>k-c7&(9DL|*W&W;&VT^l z{q6OO$LZ~bG;BeK2_g>Hx*QDDr8H+a3_sytG6EA@Ge(Ob6{%4-$)pr4GA9fNC z8Hcq5g!cjvFqfmwO=+D@vvr5baWXcDVg;>}Sj0~gk1Ek;U4CxbDK%%|>AuMatuynk|;SzS`lhKQUT}Vqr>W4u`+Vbw( zhbxF|4s>f70+3U23Ko#MQw|sy^y+0VbNvqJ@;CAhu!`boB7(?dLd<7joVHAabEIX7 zGIaR8z|)Pv-eiK@9zhHv)F^rz;Sk_J)9W-)RgJV@JXI9Ie6grr&m3LrNAXH*kW~}N z&VlbIhyUcrve1)4smw!LbHp9^@2KHRH?pG0AfR+4zw!_uk0I#;h zFrI=v2H);HTAJ*jqepvP8cIm)LAy$~uG+ROiCP&DIQC17KVkbQh!q3CHSC@>H$TwI z*4Ws%$5%gsD={KROj0GZGoAry^$&MgY=qy^dx{K-A8&9ON~Kp(3tBK6mUKgl!-1se zpnN!n92sB_R@11vJ+8IX~qNSb@QTb+$g& zS9R-z-i}i${7qCm5Fu!17$G6)-@pnWgfznDcZ^g{#hYHieUYXX^i*I;+N3QB^MUlJ zMrdNi=6(Bi@DExQ37yzbjy`3k6C{euz_sP5n_S*5y^c_i#uBNDI`14+Ca(fORgi5V zd(o{3Ra3V3@Z{)Lf*>T5FQGih=;QF=?TqrNE~zwG+9wOy)~?m0hNDlANzCBE>|yAs z<|rD{1a^z|k^AlM?_}SKF?Xr|Rz4ZK4^#Z7fVP;Y6|R>+!uZ>D{%+T)Cp>f z9&c)tyI#+~Hg8(R*%72Z9jg2U;az(C|$VUJh}uXV35RtCOv zuLlOq5f&~BIFO*Q%K1$`5KEM-_<6O&%r=c(H0yg)pO zgAeEl#OsuUq+5JwFcPSdj*G-4iiQ%`24n#Z^#;Tjc)cJJPSDDotA za5m_ipvmp!hKOB{#55s%!sR662z}W73bkD?`E3kA?5@`4Xd^15sm#u zSuqQOTnP@t;6d~!PW}2YQ-(A`u_D$a{Ms;Ns1(jfPi^En0P~4I`Btvg0^5CTc z^QToWm^;^n?G1hvhk+b<3Yspi2bFE`?A}9xqW&N)g?I z5RZX?xEW+{9yt@}x~rE2boj+Q0WUvu6zecAxNVdyG^T;;@lRyluU4AJ?2%6XG0hAU zcH!*KZLWU-mQn7fPunTC?H=yju|r%`+0xLee=>C;1TB6BuV3+s^&Vi9REeUm8PQ^> zIddl78?)~+T;LBiObLwD^#NPYTvp#*aubhQIFb^mR5e8m;$xoj?ZN53-nCL%-O*P*8KmN_7qHM~s zAU7Pypqf#)^3`bgwQtv_0>jA)wt@PDkv*na=@6POy|K;)M8LQ(%f$9i5TqN81%~6r0x(HYY#}( zBrO`QI;*aI2%}m>_vb?8SER|0H3n_+?vb8B9!oCq2NTs0&_kwB?9A1@)pMo2=&yL;!Y~Yt(*pVku+iCLKZUp0i{p8X^NE|1n?wCJlGujo_MlHdjvfqI0^YIpgTZQHf$Vr<+V zQ4Cxlxa^7KJz+20>ry13m;1D0BJU4rX>s)AdSMy;x ziGu^Y6R>cOj38mHD;rU)leT1~2l_fD>(q=+*kBP4soXI}khWbx9+K{qoth$J>A3bk zt;pMJVeufPPliy9h~WEtf7v1@_9LJ(5{bo{pKK(GMOh(*b{n9?+sXv0 zm+-@^dq2|yuI1B569eTi4jKf5U^^zitf_MZ%Z7X)OhH+F0_e~M!W%P6 z+42SsLS+qV@s$K6vlVb_Y4buuhyRyI{$(+u$``B3ZvD-XR`xjvdaSX-Zt=H$0DEkA zaU^xXmiFuJTM>sybL*_HgCWyknt>B;cNYEtg7Jun4U`9`D3+0vO9hW#oXaejYzU6; zVCy=Fie7+A7$5K4^P8d16OlS75D*3y&?A_O!kVNiW|^W$%JEBNKnj0NmXL%!1VjYu z#3)*q5sY{nLI|XQG6;di8R`5TE(VQ9HvnZQ z{UF7?HN672w9?RchQ|QaEU>SvC?njfW}UGOlevn>tzb>iKnVW)?exp^lT^6SA@Xk6 zW$d->Ig_h|y%YN5Lr?e_X~!0^+4|Y4<;z3k;v7ux!N*{XJ(ms;(mAmv3F3w@#i=kT zzsxTwB0S7;YVZ7xI<#3PNh~o3U=yk+9S;riT|mJt`K!5D#%}C>V$O~T#{(m20w{)4 z$$S;C?;I8eKgoN_F(NOAq%@zU_e=2e(+#IM#jI^LkSdX_}~p}6ZIYq3{KS^ zH5cY6B?n}O9CZH(QLQj4F#U;RAL5C=}JZQJ{>Dj5iO?b}!VptU8{19%IG zxjpAv7T-Y#@iwdhbrm`W@gHf)eY|GL?^qgcB9sGn3ONOmr>KEFeioh4K9S)VIg7SC z^BjpA3Lr(=z0}lskbCIe>5DA7%nmq5QGAnCz&IB8gM*O262ST(_9sxw$#rE|1~*u; zKa4AJ>SoCN3s}ZW{YNoc*FelJrqU@?jYLU9dGqMW6X=uO#`i_80P(FJO5exuH6PP$ zGfJOLau-)IrVKc#ihYo%t^fk-KKsSRN9*j)2gkxuX2RlOfrS*gMRp|9t4hy;&x0(G zi4rSMv6zAK#!pu*b^~LgP^1N+z+$PZENq7~b;RZ_6GkigI@&QBdoeLOw3@*a&>2$( zOfU`_s**O~^Xh)vNtlF4N=6oeHXsBAV{XpghXtbarNQ7ifVGS8g-V*&1@$~fsBDy` zn2|s#gv1q3oBdxyfC1T&$i>FJu(5vER47dUK{|sN!!-jkOgaDZ?p>wI2Is%9qaZFW z?!cj5f0pXnFqR^8)TP%U`k8;Ifb%9sr!$P7+o#dfb!hUqrQAH)YznWFsN)zT%aE9N zLQ*jg9WOh|Wg7*xDmA$F<;Oo?N9wEt0h0vGp)76kBklac3un*9GlS-#@zj|Xvhhw< zT}eGRW{i5<1mX!iDQZI|(usHOAhntR2u3Itff=D8J7#6kvk)rV8GZZonbvw-NJ_&$ z&{+hv{XEjnN3W{=UTM>w_Yhw!gu8@4Asd2OfTH@e==6aSvJh?uHNNb_NO2TrT59A- z+uxY($ry$*h{-6WBhxQ4hj}SOIKKk8(_o5~`_&Bld`4CI02-hfu84qgJ^SJDr*$Ma znECg#L7mwerG5AqnyUnSG6*TVDf)z$NHQbmp1OE(Tu%2I=+>7#f3Jmc!`w)=M3Os@ zpl)S|LxD~QL&42~)ZSE#t%Hb&MM5bI5BM>hUEG2S_yjU%D6ryy^pS!8~7Sv|9yc8b(=sTCShX1nU3~L6@rGIn+kB7G{ z$gbebKi;q!{n8~_sYiF?ICKhDxlc8(zgw#hnMRbHvU-m82q1`LCPsFw^bm>wvp2aB z!dJ!jN<5cIC1M(L{CSaJW3ccAq&!y!_{I6orvMxQb?l$!bk)?iHPa|ba?)RDacKY^#hK;Bpq8MgF~>0jCTYZ z%r9xlWyDO308q(6I$U?JjAqTvx0rUsZ4yOoN__l=1E=pKCksB{D!XtJ6A?;umiq~eIUjatg=CF!m=CI^Ms%H1v|FM zYqVZ6g^Y<2H&8{cG8u@UKAvaKKLLZz^TgZ>SKe;+&Dk-}XiPPD6CDe`Hj!xoNkKZ< z_U#{WC}lM&$4-be)Z?(w$mNM;H9o_tH)7V5#&Ss%{mDO9Bi)iww}`NqUIWfk-_jFO z(|5Mb<@S-{fXl^7S|p696%@kQVaUPbvGB+STfG11QOkww=<20?{E1&IRV^|o@%@CF z-04Pb&97m0#%unUmR~G#avINO^cGRCGhKz12jYiYre5>)1WR5IbWmxPw7WyzYJ&U$ z6k^MW$#fx*GcgL*F>Ly>dlJlj_!xD!Egm|HPMP>DCg&&^Bs{R;Xz=p9E%(N)XCMtF zoInpB028x%eGXbHhs!2D_TDrMizc+p;W~IalmVzCn>^{u*At=gE zKpFum5obDp>RZ;WF~($BNCwJSGJ~abqqfYfoTt z@UG-iX*Wn(dw}z(T3-0^qaQ^;PAib;+(V2?*b?2G$;reiP=f_+L=Ft3BhxSX0tRqA zSNfb(?oUeB`!PmWZSsM%dBi8fC3Pc#NSLMa+$wC}!;};YYu#U{gGZm@?gBL5hlPeN z)5AHUY%wC*{|2+HRaj}3mQ>-$rj%xZIq?Y^tv|ME+L8uh2Pgx`Q$sHoM(fL`rK}d)Z(gtYc|2oIGvx;nbG}_Q zU*P7Bg3cpaRMF6|WJu-Ii;Kpro7s;#YDo8eNbukeld3T&q0C@uj{a^lP)wXGPGg(S zF%9g#)O&*d-qAb*G@}@pAQU51%UKaJ7O}S~b(yDZj)!2TAZFEhYHw$!@}a4|_I-Y~ zh&^efmIDkB7YP~2%{KF^E?){hBQruuJsJF^-CRn{rJI;~^V?W!Yxat=(}mD;81R+q zU&g9T2^p}I^*NtWEDO9T*W_sPrV#uRg~Vq~DllL+{({7hew)Egm^%JrU?9q-2;10q zOzN+!DgTg}qW)j4M^D#3(`%*lw{MF(wr%@*4Q?~A$g8qSJV#Q~aKxmrf-N8w9k!8L zO*?S>#s8j0*X8@CsW|JghB?;dvG>-kexIItrOt`!nDa8}rDpeek#@+Afr0lOKHMI- zX(~!9id@Ptq_lPzdUJt{apU{+?p83!4_GQ3l!gE{-JnTwv1p|&DGJd$>H+`#86Vwq zo;UB5OZ@rtMT~0(aTU>3B(ABHRrTZl*;3xNGh7KCEMbFsM#$SB7XS&cLS#I}-NIFF zB%)mzqyN>oFqQt}EFzoGz+33YK(uHqs$pV}gkIC8jjX4lO63vIP9t-o`Y%5UwpcgVr)~};qHhKyY^*YW=l6oeH9%!bo?<$5z$koUe8)XGJ2nJ9AjS!DR zKrReyG65sZJ zXhptffe--Q&7pur5g|N4)xy)ZVcri1(C+i~TrNTOj+IbG@kXID6cCT76I)QE1bVV+ z5BKB+NR3$u(1DlAgL*_G1)9hZ0KYX17GmygLBQQuU*=?w(nt(IuQx$b1aX04qm>>F zIt!eGx99FXd$xdH64hXq2tXuezBo%U?=w3$dE)r-)Z#`WIi%ATM~%UQ*BrZe@uK~? z$pd=zsnO8=vw5id6dh&Z0*ak8{QVu1X4H++b6Y#-Q;4C$X1 zf5=|U{LmAU2RCUgNZ+&`7O&Y`4lETv)X^2Nzh+(a`3693Trg!A+OYYbr}*{?uH|k33EdMczGJ$7Z!uKD1Q$N3zNMU z(8bX$k}J)BvaUz$2H^@2Zm{HQt?CSkUsM-u24a2$?#w8y)sBZCR@fa(ncm&R3%&@H z_p#QYTvlSE(BC=PaE?-`{J>s5WyOk-E*LA`T4K8eFwo@4Y|ab=cA6OFLEnih+$8xa z`=w*>w=O`K$!J#e5C<0=4Q0AUqJk@g^!-dkL;yXabL{5avEvy0~AW{g9 zL9&9aAZs_7vazJ6oKrA0O}nnmlKviOYhWip<_S0EcSj042XzznO>q8cLZd(PEe^7O zHfTICS+<*;>e!}@iluOgDR0F-mXk}!*hNY3>W?*LVtoyD^&|+{4`qJIFHD*i1_sk+ zr2Sk|z{vovHQ9NKFs=8!yAr7Oq2ZL~D0#wOuzxUt)ZkhWKWejl6 zRE|d`nL+UV9Z#Grxw7aA#~yTwDm0HRYt*=hCH++_&QI6z`>zKlFSPgtd)d9crIUKrN`3>srzmG=*GX&4 z`sTa1jGtTg?d#W(ly)M`!S?`!l*~vA>a7sNFzi3ZFvz9E1#`jT74tE$If%EEr!prw ziQYIJ3MSWvuMxix9su|UCQw{1ycfwCf+sLH0D-Hhol`O_>8zUyqFB)yC(Jx=;LJbK%O+zV}aB-|@Y8u&a&skZbdX?Cu%%V|1(U z?@Tu}3!hc5&TfVB2F12=EzhHKo_IYt8dV;$;``CUANTi}t0^}AnE7N{@$F@cVm_@j zLMJ?Sq=z`165Qda$_5$Ny~(ZoQXKib^%UpB!p<$M;N1nn!@w{f?SCuB$Tr%6%BY)? zDY`zb9)b{@04-WxhOIebx6k$8Vy4B+hQ(#usmYAiW>b}1t(rQ0dQ$7#r469Rhy=?W zIZu3ntL%98C=bp~h7t}-SA60?j;2}f{?RgWh}NB_o^c^x3Mzj5U~qJF$B+9VM4Z`c z*0f~+nBy{tCXySoC3XIZ53e}TD@9C$(tiI1<6W(qIVQQ*)~uKPR=}pfTgSWi17(4N zWe$f_LIL!r7RwmsMgvC563UzO!_-@q&jUh|hBMc*IysNo9aDhy2Hkn>9>vqM%^)NY zBo|(8HZ@o3cW^qoS|7@Kxb>a8cCAmMiC$H#AN;v4-_S>&*6j>2o_{NB^Oj!%HC!WF7r_gR=&J`o2734&=i>?0<%6bPR5VHmZr)6X)G1u}xzTd&KE!F9uHD9|zriz}? z3oZ7-3*q<@i5n*hPVyYe74hEZBzndPI~cD!k#u{O`8&jaUY!qs7wuZmSf3Y%=wlN( z`8Yn}d}*J9O=VRrI5JeFhCcb@g7Q$2p{mtt)6@*N3^QXbtvY;T{>@ai-%{!`b|Ka0 zf8sJ?-dROJISR(JMr-HIYd{{WWXQ0*_+?MI+i4EK5%d_dqh7N(=f7sPyrAy&>()sn z+#V(D3-59GiCa9Q&-Zr!hBe;wV*{%fmt|BwGZE(-psKo4rmB}&P@qGmz?>!5WsvBD zX*-}u@FCN}*;+HD(!&ItTH*Cz3VHLG$*QhvK8R5bLpbQu#7U9Ba!vQHjsu1{*SnPD zVry%gQ(iUe`dbK?bwbBmefFYDl4lNQxnzCGI^y)H+a7cYw4B2MV>sV(b36V1Z{(FG z_X^8%%iJ%~%E;{yAwHGFzJ2@TPmF(mdycHh6v-8g#cqEb?_h+;_S7bYV57!0mHFVH zC;dt(&~Oi&g&iWsVeOmyyy>OteF;BhF4>X+?XE7NV%@+5@8cT(6d{Yos5e#A-KgM3 zQ&%Onj;plj0f42eTd1zOn4+R|?JX7M`YHtCZ)*ZCT%LH&+^~&ABlJbN1T~1H4D<-W z@$;h+iYo+Q1~j0DKGX38GcEoNfgCB3xmftf{E+Tc41}3>V`h~AY|)X1Py{qvo)ikU z1}6@_qAwpzc2Y}e&%P36JX%AZDB(E=CwS)Tv%QsJ)4I`ijT%ZeUzhYNt!Fs``qy+iNESn@+n0t#T_Yoa(&Raq+)@{V03r zP@`7+ZCq`A);#iaVq97%C>+EZtH{+2l4F*4*{|Pr1XgC6V!4Ny`R3OL`YXSUG0wed zZ%|RUDU4#NSc%UbRSzAuQig%1H|e$CpDiH`5pgLldDVJ)RD?NrTXmJS(yXB0KuXev z{6oJ#?FmtRyjMb}>Kr97VHg^6P{9~T9nF{~f=@`yfZVZ_!pgAC7PC-OFszz9gPOXu z(#kBOcIt<;N@yn6`jM1@nkJw7xYDRBC!rp@D>SLurOW2biKd! zLe$A6ND~+e;=4rgM)wl$TG9e2P`YB8*~>WOelc#M=pT7CMc zY4|tbn90}xJMI8LY(2-R)25km;CMg~!b*Racy+>e+l>4u6`x*R2-x`2X>glAJ5&6V z6DBPi(?_RU?=>BF`uH8DAo$!7=XZ$$Jah4uU<(O<${}T1NA0nku^2xc4?ek`3e#5i z5V~-LuRQgplY{NZKL;iQE zsjK?(8Rs&Vjo{}>xHsX)DVvmwPa@bE*`Q2$$ zy?IbTwZprrF?$OQ4{s`-Ml>H{6NyGimEqj!<)fj+9N*U#C{rRWs~6K=yfAMvWcS;J z1A>u0sbF-wcWBYvcDs6*gxq-^7~E=&Gx3C9 z4`xHOSFH)f02N2%?c2?1|1Nq~gt^3K$?^eOb;g7n38x~J(l8tl+>FCk`8MwNbUDrF z3uTCb;@T9jufkQ`Kjp=l)cmsX#d~NP03rnD4SdfN|2&zQt}tSt2Qf)Zgz^RuoH|`+ z>m!Z^KI=YN&Lc@Nuv48Dl=2M~rMd+!Bv^qMm%iOf@?Ug^SrEpDqn0jUG^o<5RfTVG z-18za0A=#(WU>rR7r4m|d~CU8;TJC=jo6@LKt^UZ`_rR+bEUtM&a*?COlV(TSHXBBc4Xb8t9wuJij1 zW_Qk?yyswNw;^@@X7;)Bg)$P@>-VH^b5gF-e(L>_dQV*)f*vzQQmoMGC3Eb73$jwWDjhaKsvcxTd3ks~Pg!+%-O41LT zC-I6)fq1kFhaDp*Ij(>nb1#9b z1*`%I40-LcD;vrlqPx?8k622_hpoIb@U{pH4m|=86_R|61A}24cFH1_t#5*?$Q@v; zEX?6|V||nopL9KS+Md{bOM7A^Gg*+uT%3K(*@;12iwh8u7ETpT`pO$kHvmTuI%2~d z7jx<^y?d(?^xRQW%(^-a!nQYRL}8#*l4ty=$c?mLpzM#DfBkLbwQCJcLdK=eNng~T zK92kcu6H$BYn=;{?Tw}i#<0}l{Zcknw(HfiCru3hp0G~Ev7+oqiH8z(F}_hO0YA~9 zcU}<4Nf{Eo&ML||iyeMx+Iv>b!%8bYzbpq^eG}?lb8S^|j^#kg<79fSGm#Wk5p^%OxCmFu2 zCJ!3wN#*M&o?D6E&+}H3PzW7YPMF`RgzsQt>C zHFct|UE4}=a_Fa79-g;fX$cUmoh@iSsx>g;3p3wO8egkCUfU-A7`h zFxfXNwU8bH$b=!227%Q6;(m?gAfeItp75HBLZ9Wj#OJy&yKYX+53}p|uQ19V8jg6H zSCz{#G3OsXc@pw#|Akagsr|cll`i|~Nr_#GD`mY;HV9v&krq>=Ma-|3)r%ivaBBkUdW#l3Lwtoc5mc~ z9gHX}ejdA#OPL{hfD5fUt5SIp}=Ga9jOb z=djUvnzFplwE!$g%!Hy~+Ia(qmV!up?06fnM8wr5*|E1=HZV_o%_g0 zd5BJBgTSC;nm|wX<+6Ab=sRpA;3L=GO4q_E!KjHZIZg>ec`Toq1Dv|4YLrz#mF&B6<4PlR-JtvfH zrLlkTps~Igc>UqS)?-)RAG`ZW;iTyrlsZHTf|{K9lP68PswL!?Z2;SNy&%MbAjnh{ z@CY--=8<+n?wl5#0gHv!zx3B{={aBaMU}y=#<9?nY5V6=d{Fsr0N_k!n}E{D{D=-q zH0L}eO?c}$!%-yw71iS~Qj@?fpjW8G7upxCsS-E}kD@ZO&}8IudwOlq2^fK_Cu>0h zC3i?0Gtg%w3Gw{snw9k$@ZVo>xjB0AuW(igV6DSXU&`E zZSsZ1R#Jk!Nz>^varalA_@&F2&2EhVoL8k+;Gj|XXwGIO0KvAiny*4Z<)uuA`R0vg zh1#d$;>{D!vF}lOW=Z=g+c`p6HjZv1{1U;5h$IxFu$)@r(hSXRB#{_oq%%LTjsl2? z2hMoioQLL|730lsc4(I?g1t5YcdAM4->S!C6tFY0l;G1Y?Ce>?n#CDkXjEU;i3hEA z4a&N2SLfcWY9AaqN3TMBpG1Hu^>?VQD>NAznVFM2p?u+L5cbK-3c4)5LYqedvHgYa zGPrnOj-_xsm?-?ol*~tR*Jc0eXo7>GaP=h<-U(RQYMb6G0+aLgBw~}EUSoZ#pOr-+ zvgT*(%3+l`^+b^j^NZszVU8|m%D4*`FXpps`wlO(jM;o^!lVFE)E<~En>9O^l$hwW z=^juG4H21gtOetPdLd8F9ElKyf>AqF1aJ!ndISh1Cc{)!74dHM1t>R?`DT2=y4gCZ6;ntH6yAkeLh>&q{_ z=&B|VD=aVhz2VkC0Oz1`=W{F8QdibtN(_(5X#Noxy*vyongf7pAPq}@0-m#J{v-a= z?B_4t({V6sN~Af0kSe^=3m1003FbGhu5hUB4@qeJ%$Wgb2lx{Tw2w)+M$}{NEk{%o z3le$1?vJys&2+xrg?^Ug3n+`4HO(A!Gl6pRFO_E`Y zR_3vuTXsnHzwx2G>P6)nV$Djm-M!l*zKdGO@=K7(nlB|a&A9+z8wmoZ((qG7|19U| zFMJbV)fF;n-6>gKi1Y6*^DJ+tFa@NeaiS**M7$k)lY>Js9jeq_t>}B%FI}Ic&?9I% zgf~g6!3ic>o3aax`bSKT0de5NfO{cf5hR!y@S6@@7kBHpQ%UjPIy=3+iTP#KweH?A zS|&!11YYc%X0y#^em(Udm%J5&5SQ>M ziTS3G!)b``bMe?`v z%Bvd2{kT;U3V}dk8yzwoI0p){V!vlg864vFGlGdUqoPYJC!&xA2%Qap0JVkL?^awP zf!wHDWfeV9_r$ep8V*07?LRwFUD52g?h&QkRYk5hs7c8@Memy3a1Yu({?x=O-@xWT zcZ#*4y7yZq`}_BpvtZu5jl?Rt2P!!rN~$t|Z~E2A5N-c)(mHP&rmCUQkUo|ON#`aA zH1#^99s$?DeJCM$U34!_;jigT|F5?+Ra>3XmB|9?HcpIrCvwO_w!xApy==jXGA<2cr_ zKsCtQTxB{<(x#kq+74uV3hq}s!eAh+iQd;w=06FQpvEZje);#_!V0~ylj-a;#u+n4 zRW>4W=*n#$|3NUrRODO&^vMx|YPwyf1W}<}3OXNXu8RqpEP?EQA(B(w2|2m z;jE{D+R(C4Pp$a zuulSy9F(JzOyXZkTZmr6zD-{&Z1MK^#p1R`YCqfLkABjFAhwx7efFSG8lyQMw>O_C zK=LJz84a^O{oL+(!uS(@^wc~TzG?*`#|G>~iZOo!wc{1PL*;vVfc|C2R#$TaapdLz zwa3Q@vj2!~B?AehfBILdL{q@9pxFZ1LeGDCg+54~Uqb76-tp`j%-WZKem#=HWdy#p z(`L?01BcEy1Xhx=6K%sg0pl6@5N*aVW1r%|5yjBVV z1rzJkwIjN08dVk=`YyQLrsGY&Rd3+e@Qr{MEx`N8A=Z~y4C!>K#RM}wz!R8Q*#Yd} zv;M}cB=^z34H9Se=4bMXbZ;I-Y{$7~ZvRyD1IvS+>R1H7saQkT7q@dQ3yFdj^0OS4 z?-5LujU_)(=kbqb7%8`C!La#JMNI%Sx;9R?E>#r;f@hUco2GK6apM6XlYMTAmw8mc z4Zsg`yuEAtKyd_hVF=NJz^BaUt{~FbJTX<|dO0VDx#fSg<110idMsalUcX-V z7gB!3d#V0)M!}`;pRwhbg>+U^dp;OgFcS$J)Icfb`GR4>eueU zZ_MLnI=3J5E_O$)Irxl2o6t);mU)-VxTI@g9zxlL)EVsVHmw6*(&Gb6c_g$$1guG! zgCM4#pCt+s#Wlv`I(wUtPfNyId3Do!IBl|=myB)4kNkVn`(Vxq1XH(`4AQ0b;wPy0 zC5A8)!1#v@s`GUb9~@yYO($f>>sXFP>=>M8xCR(xH8L!)_=d(2D zEsi1Z!e6R45azU{B51w6A<P4mVa@-&u|C|<@70n)Ku6SoS?9ED7az=6 zfW?D&hXIm%Za>d6yXu~Itn(32H`E5?gVDXi?;si#IDy8WK7dTTr~#{}idya2Z?$qr zrMKVz>A3mk}U<#GI3FnBf4HHF?EH%c~(a4v&n8@ri9(gYn5x0Hn;K6DMby?#f zoG8T4p^4q-8>nsh6(nr%KMV?d=`is205p)ADFw!CR zY|RZpv*EzV7|XHm-N5kcy~88d6JI|S(C2$j4Nvs69Uim#zx6H5ytPVy|r%8(Qkjyc_yAq5$2~ zr1S=Y6s0ODHXvl@y;bu!1F*q<3;c;{iFPclre+xB88>z0tu_T~oO{iK=~MOZOYY?E z5ul#dKBs!1!MNpWqyrPo)q^hEZlZOISVW4Ldo{OceLTMKz-hi9NqjvfHC*AJvwOt9 zG{lZP9?_~XGEHApkT3?v5zKO-&1mbbFD7f$vqVLTe3~CBE9b*6p%WG3dnSSx%)r@? zAC+F2Qw=S0(pjYEBJAhRh}M#wlofaTY*Zn$(aBJxF&8Dl3^#+ki@K4Gx&&L;{MHNM znm!IGrg)RyrfDNwW&)s{c(Ee5mtjT(!lbp%+UPsp3B$lf?H@(bQNx8MT)SrJ^N}#m zw}nD+4IN8O2~@?o!tSIm5H;WT)R5;zp4V0uw&tA4+*Q*?ip47}u0MlhlkO5;58Q{# zjlfD9Ny;fJFa+T)H8ge#0x6jX0B(^{q~lqxuHUqt+hG6q=`xSzHH5cUTgUH!>~N-J z;be2GrcIxoy3n}tFR4`rFMCar9YfPE^(^QY9W)F`a8MImuONO%<2V;7QYd$0}%tZZ{0eV0ecFR$8MLS?q8WTbLJMV?_Fo# z+%lLyQ5p&^ms2ZSZTKGu#^O?Wnge8lvLHRUfMFN$x(l4jxL-Qjrxkc$ix=CahEC9e zRHlr25Wwo`NksO_+waImNC{N<0QGx75x@sjg3v){fV`p^c7&snsdq5VjcH~;zp3E5 zFw&&w&OeuRc6&A?@$u2mCnYsE)WB1_ z+z%>5(YqT(5zZ5|VIwgo@foVCJ1;Qrd40E;OlRK$Nc-ZAS@v^gBk@AiZLcM4n;Y9mMeM1bh&yHZc3s{HDCQEpY0ul15k;{ZH zW|`^=;1#!Rkzo74C87@*W@Yymy(*-&`7#~7d3*I{3O{}FiW zt)*H5*GUjH(gy@g(IcuVrKrsG)i*0UZ+P2c_AS&}fJUI&+N%D$@xo#lPUB&FHomJ} z;P>!wsd?@(gBFC`lV^Gqv*hyU{BB!A?Ua0*;XgF{G#b~hsR98lYR7(*M!ssLYX zsUKrTnHNuoMEVe(-8}l}JkJaIW6ZP6woX{G_x{|hGB3u9Y;{*dS+Rd1IR%LhLD;iB zW;#zUx1@c-+DHaM3h~u!{Km%12x*c*t$&}cw$+$h>2zpG6Z?3x0~I!qGDtOeG#mzH zW^+T%HPSH7DZVUn#$bU2F#78+UyN44F2U&o2bLBW3y#4Zj%#Jdi4#qvy4u9Oal(^Kr9f{eyjDNE%Q|sr8WS zqz=d&VcN=%?WKK(4)v#{gz&_4Pf5AUh$G2MMOh?Fk=U=2-(|p34DOk<=t$p;bRCJ8 zY+WQvgM)lQNI@WQjHUX_nmp9DUFe+kc8`f2WWW&pBgk=KyC&so#J{wPes;h2et=)_ zP~kM;4!|pZoa>pDX!ob;vNesdyx7LIa9o%9l>O<4904g9wfZ(~hzXT3Uy z^ZgT_W9eN5T=w>k^m;D4MmGGo7$q#Cgm@rUgbz}kafL>~^R6g<*27Ij7xM3Ai8yi# zb&0(uH8TZ^l+EO1lwOjoQP1MC(2*yM6%|ku_c5IjPSKA7j&Y{QH`F1MgYVHYM08lm zzA`3~9{WXh7!y|4ZQeAy4viJ-uC{H~W8aSX6S!C-zo_&XrCQx&)5+Z+dD1H|g;1~v z;E6KUEzH!p7(%D>=42o!cXtR2iV!7L|MzVplj#v_I>6#ld33gb>t1tX)~Pi8=^qJI zC!=V8l03+0V9rQdT%CjSKQ{rv9PXQ@9>DL=Q_X6vRkS~}VVmrwnAr+lJoNqXA(Yo> zcCZ&Z_V+L5!sda!E*};NTT1#HJ8RZq{SGa^QlGSc6&WbNQOZLas?#wsF&*V%Getb? z^@`*?M(*#5Uv9(|6L)obFD$TSH5#p1>=SF~HU#Bfl_FUJW~YcCORxn)nKO>s{1$p^ zj$>?9$MAhCT4mEozg>cCb}0=?>kyR zEZNf0l2Zc$5dQK%=sV`Iunoz?C z`EQ(g#8 z_Q7NH>F2iz>1)<>fEgplNejxAWWHkSvJC|t5u~0R|0N^CnyM|wK}RWz!$7(xcdjUW z)R|i(WSP(RsXklLlIQ|BJ$(3(bB-d(0`82T6g?`$%^Zx{a&l!Vqo#kT$`}3=gqU>L z+yzE?TSC7IUp)x`%9bh`@p>wKiNtl(otd$%_oYdN=sH|vq;s$zL_mR6g`QNWtQ1_C67SjOJ4=LNxt-%#J} zG`jV6)4JXrT0V*TQ1z=QGt^S=6T5UFc<5YE>2We!a2z>C;AJ`fEc&s)riYUVL)v=8 zk5}`;v;XI=T4Bub4B(r=px5hK+=|+8T8jO|#Bt%@#rsv4Uk!|@tZ6J*9VlX)-CzW2 z)F{AzQPuw}oMdMwl1EXtAS)uH@&ZLxL@iB=&LQEikq3xF!^Tr~krqvvPoQ3fa434U zJ8h)Oi4s)J2tpeuFcD{g-0pwe*ST;Jam+F`Ly;q-FWKgr_pd=W7B$&C+Q6KFX}l#V zQW~jkm#Z4H;Id=fXm@I1r-^;KcbEF?Jc1iw1OAeW`|fUlB@PYIQ=Pjak0{zPRXJfd6EvoA|3g6n<; z^ST7V;^>O7)gw_J2u;1CW!ujqFBDwiNj}eqy#TNzV9Hk8n}IIxsYS=!?Vr}#439T& zD~2QpR=8_F?oB#pfTD3(+HXKnzvph$Oh>vbaj9C4ll$vA{M?qt-SLpO%MSdp4?@8zuZt!#{|MYzpbhxI9X z^$LR&z+=<{(^w36(^FdbxK@uKnj6E4!@u5fyZlau2KWbP{{>&hM(Yi%LcM?;Z?P^M zWS`oXK7j;fFkok7c-Pie>Qnw=up+1cdXeJPtCucqK~qiXK977wmPJ-{sk<8nno#Jy zb|50RWpA}bt^^4Ew_st8qe9y4BNjZVQs}YEvM{K78QmzEkNH{{?gqXlCQ9vH25#Er z&RjRoK6V<W2#2 zHyR%dQ4lAY+_eU|MLs1kGCN4PZ;?~vcr~On0a%Aq)bRB4ohiQ`rZn1qClyVFmU@7o>8Jcq^6NoQvQJ?9KTFkjrr*Hll{H?xq%#w~fnTzl}_pdS-0Ix{?}-Hy6`lmh+yH2^Ter08U)JdaykDqIcfpCJv@7g-0_eY$nPj zgdD(#L^>%57%QGMWy&^&$Z|&OMczyKm7HP}S?-%vIKoqoF& z{j!9SfR+R)kO!!IX~t=QNQ*L%O{&9X(NCtwU^?ij=^W}ybsiy8k?n|sBG#w8*`7M* z7WNmd;DKelKuo2frlg38sx4heC0qZGA%vQ&G8s@_;P?5hr^gfAqq_t{DiUbZ*vkZ< z$m1d#aj6^881@dgT5ZSy5UB&QRwf0S&>NzVJU0HLjd$_nXFU^9PcZZkGju$1#FOXm zmk$xqJbx5fkLVf~5gA*>*_1T^Hox`W4sR^5`Tj zI#tf;yMWThJgl0_?>CvAQ|6L#k|BgWCs?;OF`J~rODg(aSfHep;3r(sPtU}e-wH!6 zhj1Td=roe(K&s11k_4Hev0VU5*{qLz2dzeib!^> zg5=3ADjqcEkg>OhNRd}ml{-=EJ`K>bZMR_l{JA(7t8YENSg>C3lHYmxwVgMOn*S3m ztuw7MlSC%;f2a{YS%Wldab=O=b3&k}Xh5KMkr|Vv00NxhCO-bd!Xn%X2*@hvi1@sw z&()0q+ z3oyoPcymK#{%+asQ1=g1Y(zU^N zARahe+0H9N4!r_TqK>7_&gs|aPdg`dup1sCtpg9y(G0l{eK14L^C0W+F_VwMyk!=a zHfLwU#t7I8awSijMYy*q5?qblCr)flfq+P56T~iY`N*kL%?*7j+WYvjLF?b-)ykuO zrYgJc(zZSD6|9ljIgq7I00OMfY8CTzTyhqztGXj&{II`@l;KxKi5Vj$4svt$T5U!5 zOwl2&A1f6B1gV3!VZ0Gp&aaaaPDINx(6iy^+wJI(qQ@TQY(W$-4p=PPXFu+3pFWRW^PB}RksFAQ;Edo7f z_fl^G3INH%0>CEVgFrUOdF|$gQOuETDHf^M9Ev@LbOL9X+|V`Drn8hv8pjoMw`+U! z)yW%jHP?E;_Hj)@Ivu%h8Q$Si*hove(y+zd6ZffvWNoMyyrnJ{huNNiy%tPSh z@D+h*vV&HeYqDdmx#88Nxs90%q#GIbNXz^x69eyGGca*#Ti3=HG&7UBHaBzvlMX*P z?pktgnQTPi#FA8CB0gSaD1C!suoQ*$$CyohE5MG*OLtGsl zH6Z+WN%?xS??cl;x0k%UyiWkvP}IxeOFf5Rjq#)oOl42A%~Bi(%3(fGj^r|Hv2 zli|y5F**1S)itct7Cb2OCfW6z(Ni6SP4uJ)NIcI>@JhP>pF zD)J>!n`mPrm`R=iHw4NxsnC4aovO0jCcGo=#lK0bT1X>&$3`gK5Ld%=`0c}JLOkgJ|L-c*> z5VgyJWF6;s*z+l~`kI)pcX5Aap^x*_;4>q35B#hDB4z?T z|DBk0R5N9p>T{#&)p`c(!)?oF{PtaE`?S!QiKTO82B|N2%;T&&ni_8>QmojcGFtdV zWsRlf4s-5ew&i}cO}pwEu7$}P1xxuTi_P|L;WxPl_S1wIQlOy0z-Z5mp64v(4}PVdxhEN(&_DE!3hn)vPZ2_S6~7^=u2qq82z zUIDHkwE}Szuq1R%d1B$G@+`6o(M+2Pf`~>7AwdoJ9MT8T4stjITnw$+71p8Oc1!5n zx39_YrY@x}=>4x;F&``QJkS>>T9m(U)Ef<;juKj8#B6E<$t%P9?|JwETUK#)L>f|Y zAag@woZSCsQdv0MfKz~(Gof|_6lN@OClb7f!y-B(tKt?dTMRv0_6mO}pD&A32oxZy zJ1(6}NDWPZ`WA(gel}Grc&Vr7UUdEJ!g+%zHkGE2b#8uq6-rrlZ#2Z4`@~kG#O&R- z*6B>pUcaA!3eZyTcD`L%rUH}Z4Wga^c}6>kh@!pFAxs0ujXG+nrx=_rnTO1_0zV_c z*9i$=iqs24Lumy>vwci5DES5*$ylOKnU21m-lqL;kVDP|hNeQGV@#d1JE&($Mc}f> zD)Vu1aL>OPh;^_E-xdAy7D6KR6k$`gZ9ERC0eqKof(u!IZIfh7=}7w@h)o?(bo21g zm5sTGgu69pjbe8uvZqfb=EdH5)Mm3p4LVFpV5ph`rrza`&;N`EVw1r3>rsTSD9ag` zQ~SXqQAQ^<0(n*U_{jvuG~G0HLM)~7A(Tr`)jQmjVIx`P&Y!GAP+na~btHWmU{ovN zs^Qtme8gAi(y~*+4-?d!6ZWqg$R06KmC}-8ZwAT-OmXDbChB)y-m~!F*q#2$`u)tB z$Y=?|vL`d0bS`KcHo<#Gwo-7{2X^X~>~Z|GMd@l|_nv*i9vIKHt*jWcdqUs)N3A&4 zi|ye*xf&zyt9Bh=J0vV~WOi~_r;!(w2|$Y)FqO3G%xr#Iv<0?^0N`Lyv%$D$pFYw! zPC31I)(*5UuujB0Mz$x0e_Bb3Qfs8r7h1;|C8E!-t3IM%SeMgn=k#OCFFT$U^BFHz z0{>`x@(gOBlN-n)(F_r?@%n09@M4AzgF!Js(?VoVYXvU~V;P;-*7?YUq*G?U zC4z}S7}_6!@Esu1KzE&j7(rG(cxY3M5CTyqV6btUL&O}~W(;mb&w*E!^fYMN5J-$B zZ`W2c(0Od|aOf_Xe*kkMZ}@^5(N$1r@HAyQhZQ(;3HTy0$;+mL1SNfg&lJ0574qsj zGIvESZD3#^(*U#y*r1BSS}MMM;MTHHizRiNQ0DO9>7k?Pt@-44xCJsiG>3Nt0m63_ z;7i(6DtYu+LXKncbaZVpu#PC>p#da@NHP*1GN}P|{^tLzVCAnfH+od{1Dj9Q;pqjo z+FQ({Q9s-ha$aJG$V};dJdgT-3iE8lK7#YW-8RNzLB_yEv-aKd43o~VM3WpGw$d^r z4F}1g4G)m+lD=P(EjT-p$ z8j%XKozg84`A_{#$&gNJcX*FsKr|X^nF0I{<`mOC6nS73y1=Sf9{`SkJkfMVJZkb`3 zg;FaZl{T6>v#0vgF<}!NIE;MTxT%D)?x+jKOmA?Xvie?~B5e<2Ky8Sb7eB!HpcYPAdV|k+nk2(Q8@i`Oz=ki$$3zcL+!nn(>%=oByUpz8xEiT!7burBBwu z0n?jyGyj|F3J(H%ZHqk{(FWKTS$ItJUuyv60h=dfD2TF%<`{W~R3>|akb#C6=`W!^ zym^JkDu&J7#~@TdvKh?bqU0A$jiXHkK;DmD)Ryv6 z-$^n;U0F))V4^u5*{%L(7F}&EIM1Yu`RMs`RuCn`-~{8OAUIs<@p;))KJ|7QKor0U zVAw60SlyheK*SN|L=-0@o5uhG49WT@0hgjrc=>%RvpX?L_E&`*YRP{3t*p)cU-gxV=GUI!6zr z@YxB1sAKEZf_WVuqQJ+{6b7HYT>fx@$o$A(ErT>Bq&XkW z#jt{Tqt??6S18wgQT_>;9wdf$qeeyDdx7`pByFKArOV*GAO^{DhIDKS>0t(;K+nS; z3K=FTooGp6zQOtZKTIQfBr;eOjKn|U25bN&U`h3cKl;JxxvZ`<+F^F=DiCzp6sk6u zhHYL+{%We#kutl28w}@Bk@Lbgz*N*5ybj>i-pBxHYCc{faF)BmCOinjeHq1f) z0a`~ZwH*OdaFplRQ3gF%lY#pzzMRu{!_7XsG4-MEL z1$x>Yy$lQ@%30szV6b;3m-9J9%1Pe(ZL;Gd9@pO-!H*_dT97MiVKv?ty`1e+yHdPf zKfAxaKAl42BT1rIvrCtKu$V*1&5Xa~j9_Wn(#wwX*e=`3JUU@m&z}DbC3g3sQhu4{ zT#>^Di@zx}9IgRJg zFf|t>6J=x^Iu}5qV>|Q6>v$BZ(${XM76t6#=_946z&0!zyIBPL^?E>b3m8)z<(E<0 zv0_3BOu@5g0zhr=;IaYs3R;fFEDg^f4vOnl=~bw)WJqW&HZu*d6{%4V?L3?cm{k>^ zG29E*X@K%K${bnMNru0;p(3_nL=FXtIFrjLI*qO~#e(O|q{PJPW{bn=N)B;Rp?zTt z<=9ilr~LUIzo=Vi&s#Xt$|!(%Gw?aYl!&6kZ73^392`gXyNKFW5un zN9!b?!td*t^w>u8E>lSu;g#!c+p=X+>UdaA3X=1bTOuSSh%+4`3Kjl;pn*w_jyrLp ze}|Ez7z9Gw3O)Sl)edPP>L;0G5l8FRw@bbsyLPPu!=>`OX=21AR3HPS#)2v$LHP5v zPn{|wnzzK+1olFsdiAd#OT|eBEA%^<6YqlXw<~b7yXJHK$XURTr$wUKM4c}a#JXr^ zBL=k{j_qVS3Hc-~4zQ6;;>C+$J6Cv>h*)38lm>vXw zY&dHPU6w8z!vbD2I^Y=Fs&(sQ%wYvR1g3V?5g7`b)Rq&``E+(lUUTPae|Nc*TSjgC z;`+^-=YoQRKUceU(!5(xF{pFv?T)>}`+$XQGSf*2xm$;!8F>Sq8?4k@rz%lL&If;$cMXrS<#)txa*2hFf|cQ4OC54zaRZ5>`O z_r9*V4hWw1RG|$!0F?&-#BsolPL>t)^I!~+H}>p~t)8mw)*(f&RdfHkp!*LxTr3ch z^Cpg6m^K}OPSAq!VO2vCtS(Sy2L)|I#sDUV3Ie{AI+7b_u=v8UkUe|M?sn!+rdIVl z=G?b~vF)zV2iqwl8NLA$0#>HqSJ<@kim`j3>6u`v6`7qwZ{=p0LO%-=t zGv^QYM<4vT8qEj$%pb4c3bu#g%pcz7IuxeO4R6({0_4QejO>H?Os<0&4bR8TwHsL6 zFL?s4uCc=<$Y8q*kK$cPo}GRA>{)N`HEXV6!TJZ*k7@BP*drse8AG~4Tk&9Q@^w5$ z%S&e0)#Qs!StgsMNAl)ufoLZtOuK&N{P{VwrAAK4UQ6H6DbPVs2C%e3BpM)pgw*dZ zv6UGORPAsDSJsGqC`4LPAd|C1w8-MJh(cDVFqQ6m^aIbVW^B`%0Mi4;(cmM zn94|_Dg{9!z)$Z%qTV(`0y2l z5eH9Xr({u}M_2t~nxik@p4t>(*TiVQ62BGHPLOBjarVBDK+X^xkQ+c)?3<5>B*dbv ztX+xcFrlwyVgL^zn-*q(nvP_O<@}XQA68!3Its^psV%Bfr!JId0G^Hcvr=m5r^Sd7ar*3 zGHPQaIuezW$B$pDtNxzp(tjLT@w2W&BH-%eYkaM)VGj@iF@3ca;l{9=T~{pV5*)K} z-aOMQtdZfoxY)%#!}#Q%bvIrgf9{q6O;heuw5gTC`-H%tpyr0@_wJ2fGvf6ET+AbB zU0yA@vP?AoYIDuC<)qx)30d&_{@ZD=O%S&eV9?X2H61ziKsW5n}!Cp5c_E+*h zSGBl4E1n$FI;YGF7n`S@EsnkO`T0eAXFxz)ak$=&HuKB4o*7!*l5dhl;WO@y2>q^# zH^|D{{>zR-0%GPuY5ct#Onc0{d7)j)JQ5Xt_xL-goljb5cRjr=uNw-t&AH>GgK~1G zXat2LW`=mdgs`S}MY-asI(cz$y3FaKHRRIcRx)qVBL4~fJjlN_^?lr}x_PqkH6t@K zhM3rA*^(vqp~45tqAY z7ZxGro{UA#DnfKEGM2T}Wt~)1`r!fUkAXQ1TJYg33gRGzg$Xp75FE5UoL7oE@jqh} zf)yd+8i%&^R(OjpZ?QMiL?w6IO=gaYGkU!$>Ui|_;pN!ZqEOlF6{w= zaFo5xfVKg33=ZK(GZr;+ul>l`7$`w7C@kSE-e6>n}e5YuyZHd(A) zJCqXLb#-^Z?hA<%4bOAEcI>fui2(T5F!GRal?v~YWe;laChAw6fX=#ESOqb%Vz$fqZP9@qw> zvEshVTc7Vauta+oTuh|>{94TIMzxsdJNfi;q!ABQ0`4y6YWPg)lSt>V+1}uC1H_vy zvyfibQJw#=FmPn`>5^@;;x#eoxEdFN3oVh7(?ATFpKVzyk6pUVdT=n|F zJ$;T>VBNd8h%Z^=yf*JL5`mokE23<@Vw`P|G1_nR&K&x=ETrF78qncd@AIur*d<-- zh$4-tFUJik^G`dTJ(+k(a0HAo`0p`R&J$1D#mTva-IFeYhV7Z6Im#%8)u7O$qtC#E zC7D*rh_v9Ej}DIv;OfaJT!)r0y79<*twj6XCJ|P>{lqRIhU>_5k9Aow#xornnk%bmX@%NeUVM!?0bp+0x^#(>9 zP9}kz>Dq{;qPrvilUjX&hj`TJ`^7OJUpXO6>(?L#5o`A2&3EL?nO!>-c4#^?VT7(z zyo1RIyp~~q8?wlP#4VsTV8^5qwZxed(^Gj2p34H-*`!Sy1TaNyGMbtSk%*`P!IL7C zHZa@mwv)Ad@~hzp02;&+f<}rEEuNGddk`JD?g)2f%wE_QOs<)$x7wQyl+8{Bal8*yfs zVKq9aPrv3upCcG0q+a^vMIVZVjx(l9IDw1B080}R5O7PhuSy`-OANvZr43;8J=T}e zA2&B-w4W8w4fs<90(jAjWB2VN<5pW>Bb;TQ8O1-vx^;@y`U~^|LWI$|LQ?&+pz<|? z98SMhI(1`zku$B`-z^)P=AsH<4)6GbGOyL!w`|#S>UnWd-SZLIq;X>RD?NmbN42M~ zTUV2l@-pGK4|W+&#^0%o zg^qsJx@Ai(7V^Os+b#B4yg<%g zFp?B^3=bRG*bRSX|98sL+(AOm1BgU*sN3C7Xqd~Uvf~dPmw!N%yA=9w1RWrCheSo$ z^l9vJygIF|%^Pe9Z?UjK{A0rRv+D5+UixowWllxS6UcWH&p~2?_~lTclG;Rb6S0GK zYZrkT<&=!z@RDU$M(4Q-K8`v1KiUb_vZcAge{d}wce32x~!C=kv!ru2_K-Pz;wv<-pNoT~7<^d1 zK1RI*F+q-NA0UvV=P&^d*=SPpAS9@F#pae+D&&8Td02(^K;y~2y?e9zrQn6gbM3W{ z6}rnow^(1&fr8Q;1nj$|?#*DS1*AzdxX#{hz$klrnGL}4Stbp^P++QsuA=V}*@bj> z01ZY-^a9f33|U>?Nent@yF~1p7R5X@j|M|Jbz!nBEswZ;1o&knzAd3*EEN$IA>r9r z`?l6rXFiwpdRdYz&=kLNvS~5%Z)gSf?A`kon){N8Uc7Qb$XYaIqU?J0%JSvN9T~0G z+FZGO`6!e#l3^xAd@c2kt$o3X;5�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 Date: Fri, 19 Nov 2010 07:36:26 +0100 Subject: [PATCH 434/850] wiiuse: rename patches Signed-off-by: Stephan Raue --- .../{wiiuse-connect-0.1.diff => wiiuse-0.12-connect-0.1.patch} | 0 ...osscompiling-0.1.diff => wiiuse-0.12-crosscompiling-0.1.patch} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename packages/sysutils/wiiuse/patches/{wiiuse-connect-0.1.diff => wiiuse-0.12-connect-0.1.patch} (100%) rename packages/sysutils/wiiuse/patches/{wiiuse-crosscompiling-0.1.diff => wiiuse-0.12-crosscompiling-0.1.patch} (100%) diff --git a/packages/sysutils/wiiuse/patches/wiiuse-connect-0.1.diff b/packages/sysutils/wiiuse/patches/wiiuse-0.12-connect-0.1.patch similarity index 100% rename from packages/sysutils/wiiuse/patches/wiiuse-connect-0.1.diff rename to packages/sysutils/wiiuse/patches/wiiuse-0.12-connect-0.1.patch diff --git a/packages/sysutils/wiiuse/patches/wiiuse-crosscompiling-0.1.diff b/packages/sysutils/wiiuse/patches/wiiuse-0.12-crosscompiling-0.1.patch similarity index 100% rename from packages/sysutils/wiiuse/patches/wiiuse-crosscompiling-0.1.diff rename to packages/sysutils/wiiuse/patches/wiiuse-0.12-crosscompiling-0.1.patch From 6ce8c4b25268543bcc0240e31a85a517c0d9991a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 07:36:42 +0100 Subject: [PATCH 435/850] fribidi: rename patches Signed-off-by: Stephan Raue --- .../{10_chunk-size.diff => fribidi-0.19.2-chunk_size.patch} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/other/fribidi/patches/{10_chunk-size.diff => fribidi-0.19.2-chunk_size.patch} (100%) diff --git a/packages/other/fribidi/patches/10_chunk-size.diff b/packages/other/fribidi/patches/fribidi-0.19.2-chunk_size.patch similarity index 100% rename from packages/other/fribidi/patches/10_chunk-size.diff rename to packages/other/fribidi/patches/fribidi-0.19.2-chunk_size.patch From 7e5479d2b53d94b05006cfce1364d50fb1c9ed33 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 07:45:41 +0100 Subject: [PATCH 436/850] pulseaudio: remove package Signed-off-by: Stephan Raue --- packages/audio/pulseaudio/build | 58 ---- packages/audio/pulseaudio/config/default.pa | 140 --------- packages/audio/pulseaudio/install | 57 ---- packages/audio/pulseaudio/meta | 19 -- ...ter-functions-only-if-they-were-actua.diff | 289 ----------------- ...e-fix-request-counter-miscalculations.diff | 275 ----------------- ...we-always-return-a-valid-memblock-in-.diff | 161 ---------- ...uct-stream-only-if-it-is-not-already-.diff | 56 ---- ...-hit-an-assert-if-latency-is-queried-.diff | 35 --- ...etect-forking-in-sample-cache-API-too.diff | 87 ------ ...onnection-state-in-pa_stream_connect_.diff | 28 -- ...et-to-unref-devices-we-are-not-intere.diff | 29 -- ...-make-once-related-variables-volatile.diff | 91 ------ ...0-bluetooth-fix-invalid-memory-access.diff | 36 --- ...easy-way-to-disable-log-rate-limiting.diff | 154 --------- ...-we-get-events-only-for-sound-devices.diff | 28 -- ...ume-changes-from-the-hw-if-we-are-not.diff | 41 --- ...MOV-flag-before-using-this-intsructio.diff | 80 ----- .../0015-alsa-cover-Input-Source-Int-Mic.diff | 29 -- ...-alsa-Cover-the-Int-Mic-Boost-element.diff | 36 --- ...nd-cards-with-both-modem-and-audio-pr.diff | 117 ------- ...018-udev-rework-modem-detection-a-bit.diff | 182 ----------- ...ke-name-on-the-bus-then-return-in-sta.diff | 39 --- ...0-alsa-cover-bass-boost-mixer-element.diff | 49 --- ...021-Mark-shared-variables-as-volatile.diff | 55 ---- ...EL_ENC-instead-of-ID_MODEL-if-it-is-s.diff | 153 --------- ...llow-configuration-of-latency-in-msec.diff | 268 ---------------- ...4-client-implement-PULSE_LATENCY_MSEC.diff | 107 ------- ...clude-dolby-channel-names-in-comments.diff | 57 ---- ...ile-set-for-M-Audio-FastTrack-Pro-USB.diff | 116 ------- ...op-Properly-initialise-m-n_waiting_fo.diff | 35 --- ...CLASS-instead-of-SOUND_FORM_FACTOR-wh.diff | 29 -- ...e-src-pulsecore-cpu-arm.c-FTBFS-fixes.diff | 39 --- ...ng-warnings-which-now-cause-buildd-fa.diff | 33 -- ...pa_stream-pointers-to-hashmaps-instea.diff | 180 ----------- ...andling-of-seeks-that-depend-on-varia.diff | 166 ---------- ...typo-PA_SINK_IS_LINKED-PA_SINK_INPUT_.diff | 25 -- ...-cover-Desktop-Speaker-mixer-elements.diff | 292 ------------------ ...over-Shared-Mic-Line-in-Analog-Source.diff | 49 --- ...0036-alsa-cover-Internal-Mic-elements.diff | 214 ------------- ...37-alsa-use-default-output-port-names.diff | 82 ----- ...sys-add-gobject-to-build-dependencies.diff | 27 -- .../0039-padsp-emulate-dev-audio-too.diff | 142 --------- ...-first-restart-timer-then-dispatch-it.diff | 92 ------ ...erbose-when-reading-from-eventfd-fail.diff | 111 ------- ...t-always-fully-fulfill-write-requests.diff | 79 ----- .../0043-pacmd-store-away-fd-type.diff | 60 ---- ...er-busy-loop-when-reading-from-stdin-.diff | 257 --------------- ...t-complain-about-missing-SHM-segments.diff | 29 -- ...-vala-fix-definition-of-INVALID_INDEX.diff | 25 -- ...finition-of-the-GLib-mainloop-adapter.diff | 30 -- ...file-and-alsa-mixer-paths-to-src-Make.diff | 49 --- ...-Use-Subwoofer-as-pretty-name-for-LFE.diff | 28 -- ...la-fix-wrapping-of-port-setting-calls.diff | 34 -- ...oplist-explicitly-mention-a-role-test.diff | 25 -- ...be-a-little-bit-more-verbose-why-we-d.diff | 25 -- ...e-the-sample-name-as-unmodified-fallb.diff | 26 -- ...ying-a-sample-from-the-cache-make-sur.diff | 153 --------- ...-buffer_attr-to-recording-streams-too.diff | 28 -- ...-resume-audio-device-even-for-initial.diff | 47 --- ...tive-improve-logging-for-buffer_attrs.diff | 48 --- ...strip-spaces-from-ALSA-card-pcm-names.diff | 53 ---- ...x_rewind-max_request-while-suspending.diff | 48 --- ...l-introduce-generic-function-pa_strip.diff | 78 ----- ...d-simple-use-pa_memblockq_pop_missing.diff | 46 --- ...ow-stream-volumes-affect-sink-volumes.diff | 72 ----- .../pulseaudio/patches/02_no-st_uid.diff | 58 ---- 67 files changed, 5686 deletions(-) delete mode 100755 packages/audio/pulseaudio/build delete mode 100644 packages/audio/pulseaudio/config/default.pa delete mode 100755 packages/audio/pulseaudio/install delete mode 100644 packages/audio/pulseaudio/meta delete mode 100644 packages/audio/pulseaudio/patches/0001-dbus-remove-filter-functions-only-if-they-were-actua.diff delete mode 100644 packages/audio/pulseaudio/patches/0002-native-fix-request-counter-miscalculations.diff delete mode 100644 packages/audio/pulseaudio/patches/0003-core-make-sure-we-always-return-a-valid-memblock-in-.diff delete mode 100644 packages/audio/pulseaudio/patches/0004-bluetooth-destruct-stream-only-if-it-is-not-already-.diff delete mode 100644 packages/audio/pulseaudio/patches/0005-bluetooth-don-t-hit-an-assert-if-latency-is-queried-.diff delete mode 100644 packages/audio/pulseaudio/patches/0006-client-detect-forking-in-sample-cache-API-too.diff delete mode 100644 packages/audio/pulseaudio/patches/0007-client-verify-connection-state-in-pa_stream_connect_.diff delete mode 100644 packages/audio/pulseaudio/patches/0008-udev-don-t-forget-to-unref-devices-we-are-not-intere.diff delete mode 100644 packages/audio/pulseaudio/patches/0009-once-make-once-related-variables-volatile.diff delete mode 100644 packages/audio/pulseaudio/patches/0010-bluetooth-fix-invalid-memory-access.diff delete mode 100644 packages/audio/pulseaudio/patches/0011-log-add-an-easy-way-to-disable-log-rate-limiting.diff delete mode 100644 packages/audio/pulseaudio/patches/0012-udev-make-sure-we-get-events-only-for-sound-devices.diff delete mode 100644 packages/audio/pulseaudio/patches/0013-alsa-ignore-volume-changes-from-the-hw-if-we-are-not.diff delete mode 100644 packages/audio/pulseaudio/patches/0014-cpu-check-for-CMOV-flag-before-using-this-intsructio.diff delete mode 100644 packages/audio/pulseaudio/patches/0015-alsa-cover-Input-Source-Int-Mic.diff delete mode 100644 packages/audio/pulseaudio/patches/0016-alsa-Cover-the-Int-Mic-Boost-element.diff delete mode 100644 packages/audio/pulseaudio/patches/0017-udev-handle-sound-cards-with-both-modem-and-audio-pr.diff delete mode 100644 packages/audio/pulseaudio/patches/0018-udev-rework-modem-detection-a-bit.diff delete mode 100644 packages/audio/pulseaudio/patches/0019-daemon-first-take-name-on-the-bus-then-return-in-sta.diff delete mode 100644 packages/audio/pulseaudio/patches/0020-alsa-cover-bass-boost-mixer-element.diff delete mode 100644 packages/audio/pulseaudio/patches/0021-Mark-shared-variables-as-volatile.diff delete mode 100644 packages/audio/pulseaudio/patches/0022-udev-use-ID_MODEL_ENC-instead-of-ID_MODEL-if-it-is-s.diff delete mode 100644 packages/audio/pulseaudio/patches/0023-pacat-allow-configuration-of-latency-in-msec.diff delete mode 100644 packages/audio/pulseaudio/patches/0024-client-implement-PULSE_LATENCY_MSEC.diff delete mode 100644 packages/audio/pulseaudio/patches/0025-client-include-dolby-channel-names-in-comments.diff delete mode 100644 packages/audio/pulseaudio/patches/0026-alsa-add-profile-set-for-M-Audio-FastTrack-Pro-USB.diff delete mode 100644 packages/audio/pulseaudio/patches/0027-threaded-mainloop-Properly-initialise-m-n_waiting_fo.diff delete mode 100644 packages/audio/pulseaudio/patches/0028-udev-Use-SOUND_CLASS-instead-of-SOUND_FORM_FACTOR-wh.diff delete mode 100644 packages/audio/pulseaudio/patches/0029-More-src-pulsecore-cpu-arm.c-FTBFS-fixes.diff delete mode 100644 packages/audio/pulseaudio/patches/0030-Fix-the-following-warnings-which-now-cause-buildd-fa.diff delete mode 100644 packages/audio/pulseaudio/patches/0031-libpulse-Store-pa_stream-pointers-to-hashmaps-instea.diff delete mode 100644 packages/audio/pulseaudio/patches/0032-native-rework-handling-of-seeks-that-depend-on-varia.diff delete mode 100644 packages/audio/pulseaudio/patches/0033-core-Fix-macro-typo-PA_SINK_IS_LINKED-PA_SINK_INPUT_.diff delete mode 100644 packages/audio/pulseaudio/patches/0034-alsa-cover-Desktop-Speaker-mixer-elements.diff delete mode 100644 packages/audio/pulseaudio/patches/0035-alsa-cover-Shared-Mic-Line-in-Analog-Source.diff delete mode 100644 packages/audio/pulseaudio/patches/0036-alsa-cover-Internal-Mic-elements.diff delete mode 100644 packages/audio/pulseaudio/patches/0037-alsa-use-default-output-port-names.diff delete mode 100644 packages/audio/pulseaudio/patches/0038-build-sys-add-gobject-to-build-dependencies.diff delete mode 100644 packages/audio/pulseaudio/patches/0039-padsp-emulate-dev-audio-too.diff delete mode 100644 packages/audio/pulseaudio/patches/0040-dbus-first-restart-timer-then-dispatch-it.diff delete mode 100644 packages/audio/pulseaudio/patches/0041-fdsem-be-more-verbose-when-reading-from-eventfd-fail.diff delete mode 100644 packages/audio/pulseaudio/patches/0042-pacat-always-fully-fulfill-write-requests.diff delete mode 100644 packages/audio/pulseaudio/patches/0043-pacmd-store-away-fd-type.diff delete mode 100644 packages/audio/pulseaudio/patches/0044-pacmd-don-t-enter-busy-loop-when-reading-from-stdin-.diff delete mode 100644 packages/audio/pulseaudio/patches/0045-shm-don-t-complain-about-missing-SHM-segments.diff delete mode 100644 packages/audio/pulseaudio/patches/0046-vala-fix-definition-of-INVALID_INDEX.diff delete mode 100644 packages/audio/pulseaudio/patches/0047-vala-fix-definition-of-the-GLib-mainloop-adapter.diff delete mode 100644 packages/audio/pulseaudio/patches/0048-Add-missing-profile-and-alsa-mixer-paths-to-src-Make.diff delete mode 100644 packages/audio/pulseaudio/patches/0049-channelmap-Use-Subwoofer-as-pretty-name-for-LFE.diff delete mode 100644 packages/audio/pulseaudio/patches/0050-vala-fix-wrapping-of-port-setting-calls.diff delete mode 100644 packages/audio/pulseaudio/patches/0051-proplist-explicitly-mention-a-role-test.diff delete mode 100644 packages/audio/pulseaudio/patches/0052-stream-restore-be-a-little-bit-more-verbose-why-we-d.diff delete mode 100644 packages/audio/pulseaudio/patches/0053-sample-cache-use-the-sample-name-as-unmodified-fallb.diff delete mode 100644 packages/audio/pulseaudio/patches/0054-scache-when-playing-a-sample-from-the-cache-make-sur.diff delete mode 100644 packages/audio/pulseaudio/patches/0055-pacat-pass-buffer_attr-to-recording-streams-too.diff delete mode 100644 packages/audio/pulseaudio/patches/0056-suspend-on-idle-resume-audio-device-even-for-initial.diff delete mode 100644 packages/audio/pulseaudio/patches/0057-native-improve-logging-for-buffer_attrs.diff delete mode 100644 packages/audio/pulseaudio/patches/0058-alsa-util-strip-spaces-from-ALSA-card-pcm-names.diff delete mode 100644 packages/audio/pulseaudio/patches/0059-alsa-reset-max_rewind-max_request-while-suspending.diff delete mode 100644 packages/audio/pulseaudio/patches/0060-core-util-introduce-generic-function-pa_strip.diff delete mode 100644 packages/audio/pulseaudio/patches/0061-esd-simple-use-pa_memblockq_pop_missing.diff delete mode 100644 packages/audio/pulseaudio/patches/0062-core-rework-how-stream-volumes-affect-sink-volumes.diff delete mode 100644 packages/audio/pulseaudio/patches/02_no-st_uid.diff diff --git a/packages/audio/pulseaudio/build b/packages/audio/pulseaudio/build deleted file mode 100755 index 5a60cc8af0..0000000000 --- a/packages/audio/pulseaudio/build +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/sh - -. config/options $1 - -# ensure we dont use as-needed optimization. - LDFLAGS=`echo $LDFLAGS | sed -e "s|-Wl,--as-needed||"` - -if [ "$AVAHI_DAEMON" = yes ]; then - PULSEAUDIO_AVAHI="--enable-avahi" -else - PULSEAUDIO_AVAHI="--disable-avahi" -fi - -cd $PKG_BUILD - -$AUTORECONF - -./configure --host=$TARGET_NAME \ - --build=$HOST_NAME \ - --prefix=/usr \ - --sysconfdir=/etc \ - --localstatedir=/var \ - --disable-static \ - --enable-shared \ - --disable-x11 \ - --disable-samplerate \ - --disable-oss-output \ - --disable-oss-wrapper \ - --enable-alsa \ - --disable-solaris \ - --disable-glib2 \ - --disable-gtk2 \ - --disable-gconf \ - $PULSEAUDIO_AVAHI \ - --disable-jack \ - --disable-lirc \ - --disable-hal \ - --enable-udev \ - --disable-hal-compat \ - --disable-bluez \ - --enable-dbus \ - --disable-ipv6 \ - --enable-openssl \ - --disable-manpages \ - --disable-per-user-esound-socket \ - --disable-legacy-runtime-dir \ - --with-system-user=root \ - --with-system-group=root \ - --with-access-group=root \ - --with-module-dir="/usr/lib/pulse" \ - -# --with-system-user=pulse \ -# --with-system-group=pulse \ -# --with-access-group=pulse-access \ - -make - -$MAKEINSTALL diff --git a/packages/audio/pulseaudio/config/default.pa b/packages/audio/pulseaudio/config/default.pa deleted file mode 100644 index 50ec653b31..0000000000 --- a/packages/audio/pulseaudio/config/default.pa +++ /dev/null @@ -1,140 +0,0 @@ -#!/usr/bin/pulseaudio -nF -# -# This file is part of PulseAudio. -# -# PulseAudio is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# PulseAudio is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with PulseAudio; if not, write to the Free Software Foundation, -# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - -# This startup script is used only if PulseAudio is started per-user -# (i.e. not in system mode) - -.nofail - -### Load something into the sample cache -#load-sample-lazy x11-bell /usr/share/sounds/gtk-events/activate.wav -#load-sample-lazy pulse-hotplug /usr/share/sounds/startup3.wav -#load-sample-lazy pulse-coldplug /usr/share/sounds/startup3.wav -#load-sample-lazy pulse-access /usr/share/sounds/generic.wav - -.fail - -### Automatically restore the volume of streams and devices -load-module module-device-restore -#load-module module-stream-restore - -#geexbox-special: enable device switching, forget about the cache -load-module module-stream-restore restore_device=false -load-module module-card-restore - -### Automatically augment property information from .desktop files -### stored in /usr/share/application -#disabled for geexbox: load-module module-augment-properties - -### Load audio drivers statically (it's probably better to not load -### these drivers manually, but instead use module-hal-detect -- -### see below -- for doing this automatically) -#load-module module-alsa-sink -#load-module module-alsa-source device=hw:1,0 -#load-module module-oss device="/dev/dsp" sink_name=output source_name=input -#load-module module-oss-mmap device="/dev/dsp" sink_name=output source_name=input -#load-module module-null-sink -#load-module module-pipe-sink - -### Automatically load driver modules depending on the hardware available -#disabled for geexbox: .ifexists module-udev-detect.so -load-module module-udev-detect -#disabled for geexbox: .else -### Alternatively use the static hardware detection module (for systems that -### lack udev support) -#disabled for geexbox: load-module module-detect -#disabled for geexbox: .endif - -### Automatically load driver modules for Bluetooth hardware -#disabled for geexbox: .ifexists module-bluetooth-discover.so -#disabled for geexbox: load-module module-bluetooth-discover -#disabled for geexbox: .endif - -### Load several protocols -#disabled for geexbox: .ifexists module-esound-protocol-unix.so -#disabled for geexbox: load-module module-esound-protocol-unix -#disabled for geexbox: .endif -load-module module-native-protocol-unix - -### Network access (may be configured with paprefs, so leave this commented -### here if you plan to use paprefs) -#load-module module-esound-protocol-tcp -#load-module module-native-protocol-tcp -#load-module module-zeroconf-publish - -### Load the RTP reciever module (also configured via paprefs, see above) -#load-module module-rtp-recv - -### Load the RTP sender module (also configured via paprefs, see above) -#load-module module-null-sink sink_name=rtp format=s16be channels=2 rate=44100 description="RTP Multicast Sink" -#load-module module-rtp-send source=rtp.monitor - -### Load additional modules from GConf settings. This can be configured with the paprefs tool. -### Please keep in mind that the modules configured by paprefs might conflict with manually -### loaded modules. -#disabled for geexbox: .ifexists module-gconf.so -#disabled for geexbox: .nofail -#disabled for geexbox: load-module module-gconf -#disabled for geexbox: .fail -#disabled for geexbox: .endif - -### Automatically restore the default sink/source when changed by the user during runtime -load-module module-default-device-restore - -### Automatically move streams to the default sink if the sink they are -### connected to dies, similar for sources -load-module module-rescue-streams - -### Make sure we always have a sink around, even if it is a null sink. -load-module module-always-sink - -### Honour intended role device property -#disabled for geexbox: load-module module-intended-roles - -### Automatically suspend sinks/sources that become idle for too long -load-module module-suspend-on-idle - -### If autoexit on idle is enabled we want to make sure we only quit -### when no local session needs us anymore. -#disabled for geexbox: load-module module-console-kit - -### Enable positioned event sounds -load-module module-position-event-sounds - -### Cork music streams when a phone stream is active -#disabled for geexbox: load-module module-cork-music-on-phone - -# X11 modules should not be started from default.pa so that one daemon -# can be shared by multiple sessions. - -### Load X11 bell module -#load-module module-x11-bell sample=bell-windowing-system - -### Register ourselves in the X11 session manager -#load-module module-x11-xsmp - -### Publish connection data in the X11 root window -#.ifexists module-x11-publish.so -#.nofail -#load-module module-x11-publish -#.fail -#.endif - -### Make some devices default -#set-default-sink output -#set-default-source input diff --git a/packages/audio/pulseaudio/install b/packages/audio/pulseaudio/install deleted file mode 100755 index 772d3b3e9e..0000000000 --- a/packages/audio/pulseaudio/install +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/sh - -. config/options $1 - -# add_user pulse x 493 483 "PulseAudio System Daemon" "/var/run/pulse" "/bin/sh" -# add_group pulse 483 -# add_group pulse-access 482 - -mkdir -p $INSTALL/etc/dbus-1/system.d - cp $PKG_BUILD/src/daemon/pulseaudio-system.conf $INSTALL/etc/dbus-1/system.d - sed -e 's%user="pulse"%user="root"%g' -i $INSTALL/etc/dbus-1/system.d/pulseaudio-system.conf - -mkdir -p $INSTALL/etc/pulse - cp $PKG_BUILD/src/client.conf $INSTALL/etc/pulse - cp $PKG_BUILD/src/daemon.conf $INSTALL/etc/pulse -# cp $PKG_BUILD/src/default.pa $INSTALL/etc/pulse - cp $PKG_DIR/config/default.pa $INSTALL/etc/pulse - cp $PKG_BUILD/src/system.pa $INSTALL/etc/pulse - -mkdir -p $INSTALL/lib/udev/rules.d - cp $PKG_BUILD/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules $INSTALL/lib/udev/rules.d - -mkdir -p $INSTALL/usr/bin - cp $PKG_BUILD/src/.libs/pabrowse $INSTALL/usr/bin - cp $PKG_BUILD/src/.libs/pacat $INSTALL/usr/bin - cp $PKG_BUILD/src/.libs/pacmd $INSTALL/usr/bin - cp $PKG_BUILD/src/.libs/pactl $INSTALL/usr/bin - ln -sf pactl $INSTALL/usr/bin/pamon - ln -sf pactl $INSTALL/usr/bin/paplay - ln -sf pactl $INSTALL/usr/bin/parec - ln -sf pactl $INSTALL/usr/bin/parecord - cp $PKG_BUILD/src/.libs/pasuspender $INSTALL/usr/bin - cp $PKG_BUILD/src/.libs/pulseaudio $INSTALL/usr/bin - cp $PKG_BUILD/src/start-pulseaudio-x11 $INSTALL/usr/bin - -mkdir -p $INSTALL/usr/lib - cp -P $PKG_BUILD/src/.libs/libpulse*.so* $INSTALL/usr/lib - rm -rf $INSTALL/usr/lib/libpulse*.so*T - -mkdir -p $INSTALL/usr/lib/pulse - cp -P $PKG_BUILD/src/.libs/libalsa-util.so $INSTALL/usr/lib/pulse - cp -P $PKG_BUILD/src/.libs/libavahi-wrap.so $INSTALL/usr/lib/pulse - cp -P $PKG_BUILD/src/.libs/libcli.so $INSTALL/usr/lib/pulse - cp -P $PKG_BUILD/src/.libs/libprotocol-cli.so $INSTALL/usr/lib/pulse - cp -P $PKG_BUILD/src/.libs/libprotocol-esound.so $INSTALL/usr/lib/pulse - cp -P $PKG_BUILD/src/.libs/libprotocol-http.so $INSTALL/usr/lib/pulse - cp -P $PKG_BUILD/src/.libs/libprotocol-native.so $INSTALL/usr/lib/pulse - cp -P $PKG_BUILD/src/.libs/libprotocol-simple.so $INSTALL/usr/lib/pulse - cp -P $PKG_BUILD/src/.libs/libraop.so $INSTALL/usr/lib/pulse - cp -P $PKG_BUILD/src/.libs/librtp.so $INSTALL/usr/lib/pulse - cp -P $PKG_BUILD/src/.libs/module-*.so $INSTALL/usr/lib/pulse - -mkdir -p $INSTALL/usr/share/pulseaudio/alsa-mixer/paths - cp $PKG_BUILD/src/modules/alsa/mixer/paths/* $INSTALL/usr/share/pulseaudio/alsa-mixer/paths - -mkdir -p $INSTALL/usr/share/pulseaudio/alsa-mixer/profile-sets - cp $PKG_BUILD/src/modules/alsa/mixer/profile-sets/*.conf $INSTALL/usr/share/pulseaudio/alsa-mixer/profile-sets diff --git a/packages/audio/pulseaudio/meta b/packages/audio/pulseaudio/meta deleted file mode 100644 index 2a3ac7ff78..0000000000 --- a/packages/audio/pulseaudio/meta +++ /dev/null @@ -1,19 +0,0 @@ -PKG_NAME="pulseaudio" -PKG_VERSION="0.9.21" -PKG_REV="1" -PKG_ARCH="any" -PKG_LICENSE="GPL" -PKG_SITE="http://pulseaudio.org/" -PKG_URL="http://0pointer.de/lennart/projects/$PKG_NAME/$PKG_NAME-$PKG_VERSION.tar.gz" -PKG_DEPENDS="libtool alsa-lib libsndfile speex dbus udev openssl alsa-plugins" -PKG_BUILD_DEPENDS="toolchain libtool alsa-lib libsndfile speex dbus udev openssl" -PKG_PRIORITY="optional" -PKG_SECTION="audio" -PKG_SHORTDESC="pulseaudio: Yet another sound server for Unix" -PKG_LONGDESC="PulseAudio is a sound server for Linux and other Unix-like operating systems. It is intended to be an improved drop-in replacement for the Enlightened Sound Daemon (esound or esd). In addition to the features esound provides, PulseAudio has an extensible plugin architecture, support for more than one sink per source, better low-latency behavior, the ability to be embedded into other software, a completely asynchronous C API, a simple command line interface for reconfiguring the daemon while running, flexible and implicit sample type conversion and resampling, and a "Zero-Copy" architecture." -PKG_IS_ADDON="no" - -if [ "$AVAHI_DAEMON" = yes ]; then - PKG_DEPENDS="$PKG_DEPENDS avahi" - PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS avahi" -fi diff --git a/packages/audio/pulseaudio/patches/0001-dbus-remove-filter-functions-only-if-they-were-actua.diff b/packages/audio/pulseaudio/patches/0001-dbus-remove-filter-functions-only-if-they-were-actua.diff deleted file mode 100644 index 4f91d62284..0000000000 --- a/packages/audio/pulseaudio/patches/0001-dbus-remove-filter-functions-only-if-they-were-actua.diff +++ /dev/null @@ -1,289 +0,0 @@ -From c41ee00893b6b0d5cc48ee041b8e4835eac548f0 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Fri, 8 Jan 2010 20:06:21 +0100 -Subject: [PATCH 01/62] dbus: remove filter functions only if they were actually set before - -This fixes an assert when destructing modules that have not been fully -initialized. - -https://bugzilla.redhat.com/show_bug.cgi?id=548525 ---- - src/modules/bluetooth/bluetooth-util.c | 5 +++- - src/modules/bluetooth/module-bluetooth-device.c | 7 ++++- - src/modules/bluetooth/module-bluetooth-proximity.c | 11 ++++---- - src/modules/module-console-kit.c | 9 +++++- - src/modules/module-hal-detect.c | 10 ++++---- - src/pulse/context.c | 25 ++++--------------- - src/pulse/internal.h | 1 + - 7 files changed, 34 insertions(+), 34 deletions(-) - -diff --git a/src/modules/bluetooth/bluetooth-util.c b/src/modules/bluetooth/bluetooth-util.c -index 47d6200..795d510 100644 ---- a/src/modules/bluetooth/bluetooth-util.c -+++ b/src/modules/bluetooth/bluetooth-util.c -@@ -37,6 +37,7 @@ struct pa_bluetooth_discovery { - PA_LLIST_HEAD(pa_dbus_pending, pending); - pa_hashmap *devices; - pa_hook hook; -+ pa_bool_t filter_added; - }; - - static void get_properties_reply(DBusPendingCall *pending, void *userdata); -@@ -788,6 +789,7 @@ pa_bluetooth_discovery* pa_bluetooth_discovery_get(pa_core *c) { - pa_log_error("Failed to add filter function"); - goto fail; - } -+ y->filter_added = TRUE; - - if (pa_dbus_add_matches( - pa_dbus_connection_get(y->connection), &err, -@@ -856,7 +858,8 @@ void pa_bluetooth_discovery_unref(pa_bluetooth_discovery *y) { - "type='signal',sender='org.bluez',interface='org.bluez.AudioSink',member='PropertyChanged'", - "type='signal',sender='org.bluez',interface='org.bluez.AudioSource',member='PropertyChanged'", NULL); - -- dbus_connection_remove_filter(pa_dbus_connection_get(y->connection), filter_cb, y); -+ if (y->filter_added) -+ dbus_connection_remove_filter(pa_dbus_connection_get(y->connection), filter_cb, y); - - pa_dbus_connection_unref(y->connection); - } -diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c -index 0ba1421..19676df 100644 ---- a/src/modules/bluetooth/module-bluetooth-device.c -+++ b/src/modules/bluetooth/module-bluetooth-device.c -@@ -179,6 +179,8 @@ struct userdata { - - int stream_write_type; - int service_write_type, service_read_type; -+ -+ pa_bool_t filter_added; - }; - - #define FIXED_LATENCY_PLAYBACK_A2DP (25*PA_USEC_PER_MSEC) -@@ -2405,6 +2407,7 @@ int pa__init(pa_module* m) { - pa_log_error("Failed to add filter function"); - goto fail; - } -+ u->filter_added = TRUE; - - speaker = pa_sprintf_malloc("type='signal',sender='org.bluez',interface='org.bluez.Headset',member='SpeakerGainChanged',path='%s'", u->path); - mike = pa_sprintf_malloc("type='signal',sender='org.bluez',interface='org.bluez.Headset',member='MicrophoneGainChanged',path='%s'", u->path); -@@ -2494,7 +2497,9 @@ void pa__done(pa_module *m) { - pa_xfree(mike); - } - -- dbus_connection_remove_filter(pa_dbus_connection_get(u->connection), filter_cb, u); -+ if (u->filter_added) -+ dbus_connection_remove_filter(pa_dbus_connection_get(u->connection), filter_cb, u); -+ - pa_dbus_connection_unref(u->connection); - } - -diff --git a/src/modules/bluetooth/module-bluetooth-proximity.c b/src/modules/bluetooth/module-bluetooth-proximity.c -index c4cfd73..3eed9ce 100644 ---- a/src/modules/bluetooth/module-bluetooth-proximity.c -+++ b/src/modules/bluetooth/module-bluetooth-proximity.c -@@ -92,7 +92,8 @@ struct userdata { - unsigned n_found; - unsigned n_unknown; - -- pa_bool_t muted; -+ pa_bool_t muted:1; -+ pa_bool_t filter_added:1; - }; - - static void update_volume(struct userdata *u) { -@@ -358,9 +359,10 @@ static int add_matches(struct userdata *u, pa_bool_t add) { - } else - dbus_bus_remove_match(pa_dbus_connection_get(u->dbus_connection), filter2, &e); - -- if (add) -+ if (add) { - pa_assert_se(dbus_connection_add_filter(pa_dbus_connection_get(u->dbus_connection), filter_func, u, NULL)); -- else -+ u->filter_added = TRUE; -+ } else if (u->filter_added) - dbus_connection_remove_filter(pa_dbus_connection_get(u->dbus_connection), filter_func, u); - - r = 0; -@@ -393,9 +395,6 @@ int pa__init(pa_module*m) { - u->sink_name = pa_xstrdup(pa_modargs_get_value(ma, "sink", NULL)); - u->hci = pa_xstrdup(pa_modargs_get_value(ma, "hci", DEFAULT_HCI)); - u->hci_path = pa_sprintf_malloc("/org/bluez/%s", u->hci); -- u->n_found = u->n_unknown = 0; -- u->muted = FALSE; -- - u->bondings = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func); - - if (!(u->dbus_connection = pa_dbus_bus_get(m->core, DBUS_BUS_SYSTEM, &e))) { -diff --git a/src/modules/module-console-kit.c b/src/modules/module-console-kit.c -index 103f5c4..875852f 100644 ---- a/src/modules/module-console-kit.c -+++ b/src/modules/module-console-kit.c -@@ -67,6 +67,7 @@ struct userdata { - pa_core *core; - pa_dbus_connection *connection; - pa_hashmap *sessions; -+ pa_bool_t filter_added; - }; - - static void add_session(struct userdata *u, const char *id) { -@@ -300,7 +301,7 @@ int pa__init(pa_module*m) { - goto fail; - } - -- m->userdata = u = pa_xnew(struct userdata, 1); -+ m->userdata = u = pa_xnew0(struct userdata, 1); - u->core = m->core; - u->module = m; - u->connection = connection; -@@ -311,6 +312,8 @@ int pa__init(pa_module*m) { - goto fail; - } - -+ u->filter_added = TRUE; -+ - if (pa_dbus_add_matches( - pa_dbus_connection_get(connection), &error, - "type='signal',sender='org.freedesktop.ConsoleKit',interface='org.freedesktop.ConsoleKit.Seat',member='SessionAdded'", -@@ -359,7 +362,9 @@ void pa__done(pa_module *m) { - "type='signal',sender='org.freedesktop.ConsoleKit',interface='org.freedesktop.ConsoleKit.Seat',member='SessionAdded'", - "type='signal',sender='org.freedesktop.ConsoleKit',interface='org.freedesktop.ConsoleKit.Seat',member='SessionRemoved'", NULL); - -- dbus_connection_remove_filter(pa_dbus_connection_get(u->connection), filter_cb, u); -+ if (u->filter_added) -+ dbus_connection_remove_filter(pa_dbus_connection_get(u->connection), filter_cb, u); -+ - pa_dbus_connection_unref(u->connection); - } - -diff --git a/src/modules/module-hal-detect.c b/src/modules/module-hal-detect.c -index 1851913..23d4010 100644 ---- a/src/modules/module-hal-detect.c -+++ b/src/modules/module-hal-detect.c -@@ -87,6 +87,7 @@ struct userdata { - #ifdef HAVE_OSS_OUTPUT - pa_bool_t init_subdevs; - #endif -+ pa_bool_t filter_added:1; - }; - - #define CAPABILITY_ALSA "alsa" -@@ -733,12 +734,9 @@ int pa__init(pa_module*m) { - goto fail; - } - -- m->userdata = u = pa_xnew(struct userdata, 1); -+ m->userdata = u = pa_xnew0(struct userdata, 1); - u->core = m->core; -- u->context = NULL; -- u->connection = NULL; - u->devices = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func); -- u->capability = NULL; - - #ifdef HAVE_ALSA - u->use_tsched = TRUE; -@@ -800,6 +798,7 @@ int pa__init(pa_module*m) { - pa_log_error("Failed to add filter function"); - goto fail; - } -+ u->filter_added = TRUE; - - if (pa_dbus_add_matches( - pa_dbus_connection_get(u->connection), &error, -@@ -856,7 +855,8 @@ void pa__done(pa_module *m) { - "type='signal',sender='org.freedesktop.Hal',interface='org.freedesktop.Hal.Device.AccessControl',member='ACLRemoved'", - "type='signal',interface='org.pulseaudio.Server',member='DirtyGiveUpMessage'", NULL); - -- dbus_connection_remove_filter(pa_dbus_connection_get(u->connection), filter_cb, u); -+ if (u->filter_added) -+ dbus_connection_remove_filter(pa_dbus_connection_get(u->connection), filter_cb, u); - pa_dbus_connection_unref(u->connection); - } - -diff --git a/src/pulse/context.c b/src/pulse/context.c -index 7468d0a..c83230d 100644 ---- a/src/pulse/context.c -+++ b/src/pulse/context.c -@@ -145,7 +145,7 @@ pa_context *pa_context_new_with_proplist(pa_mainloop_api *mainloop, const char * - - pa_init_i18n(); - -- c = pa_xnew(pa_context, 1); -+ c = pa_xnew0(pa_context, 1); - PA_REFCNT_INIT(c); - - c->proplist = p ? pa_proplist_copy(p) : pa_proplist_new(); -@@ -157,9 +157,6 @@ pa_context *pa_context_new_with_proplist(pa_mainloop_api *mainloop, const char * - c->system_bus = c->session_bus = NULL; - #endif - c->mainloop = mainloop; -- c->client = NULL; -- c->pstream = NULL; -- c->pdispatch = NULL; - c->playback_streams = pa_dynarray_new(); - c->record_streams = pa_dynarray_new(); - c->client_index = PA_INVALID_INDEX; -@@ -170,22 +167,9 @@ pa_context *pa_context_new_with_proplist(pa_mainloop_api *mainloop, const char * - - c->error = PA_OK; - c->state = PA_CONTEXT_UNCONNECTED; -- c->ctag = 0; -- c->csyncid = 0; - - reset_callbacks(c); - -- c->is_local = FALSE; -- c->server_list = NULL; -- c->server = NULL; -- -- c->do_shm = FALSE; -- -- c->server_specified = FALSE; -- c->no_fail = FALSE; -- c->do_autospawn = FALSE; -- memset(&c->spawn_api, 0, sizeof(c->spawn_api)); -- - #ifndef MSG_NOSIGNAL - #ifdef SIGPIPE - pa_check_signal_is_blocked(SIGPIPE); -@@ -255,12 +239,14 @@ static void context_free(pa_context *c) { - - #ifdef HAVE_DBUS - if (c->system_bus) { -- dbus_connection_remove_filter(pa_dbus_wrap_connection_get(c->system_bus), filter_cb, c); -+ if (c->filter_added) -+ dbus_connection_remove_filter(pa_dbus_wrap_connection_get(c->system_bus), filter_cb, c); - pa_dbus_wrap_connection_free(c->system_bus); - } - - if (c->session_bus) { -- dbus_connection_remove_filter(pa_dbus_wrap_connection_get(c->session_bus), filter_cb, c); -+ if (c->filter_added) -+ dbus_connection_remove_filter(pa_dbus_wrap_connection_get(c->session_bus), filter_cb, c); - pa_dbus_wrap_connection_free(c->session_bus); - } - #endif -@@ -794,6 +780,7 @@ static void track_pulseaudio_on_dbus(pa_context *c, DBusBusType type, pa_dbus_wr - pa_log_warn("Failed to add filter function"); - goto fail; - } -+ c->filter_added = TRUE; - - if (pa_dbus_add_matches( - pa_dbus_wrap_connection_get(*conn), &error, -diff --git a/src/pulse/internal.h b/src/pulse/internal.h -index b371bfc..c3ebf74 100644 ---- a/src/pulse/internal.h -+++ b/src/pulse/internal.h -@@ -91,6 +91,7 @@ struct pa_context { - pa_bool_t no_fail:1; - pa_bool_t do_autospawn:1; - pa_bool_t use_rtclock:1; -+ pa_bool_t filter_added:1; - pa_spawn_api spawn_api; - - pa_strlist *server_list; --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0002-native-fix-request-counter-miscalculations.diff b/packages/audio/pulseaudio/patches/0002-native-fix-request-counter-miscalculations.diff deleted file mode 100644 index 52425678a9..0000000000 --- a/packages/audio/pulseaudio/patches/0002-native-fix-request-counter-miscalculations.diff +++ /dev/null @@ -1,275 +0,0 @@ -From 8d356659e69556fa25d0579a66084f820683e2b8 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Fri, 8 Jan 2010 20:07:34 +0100 -Subject: [PATCH 02/62] native: fix request counter miscalculations - -Do not subtract bytes the client sends us beyond what we requested from -our missing bytes counter. - -This was mostly a thinko that caused servers asking for too little data -when the client initially sent more data than requested, because that -data sent too much was accounted for twice. - -This commit fixes this miscalculation. - -http://bugzilla.redhat.com/show_bug.cgi?id=534130 ---- - src/pulse/stream.c | 4 ++ - src/pulsecore/memblockq.c | 101 ++++++++++++++++++--------------------- - src/pulsecore/protocol-native.c | 7 ++- - 3 files changed, 55 insertions(+), 57 deletions(-) - -diff --git a/src/pulse/stream.c b/src/pulse/stream.c -index d01985b..793277a 100644 ---- a/src/pulse/stream.c -+++ b/src/pulse/stream.c -@@ -741,6 +741,8 @@ void pa_command_request(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tag - - s->requested_bytes += bytes; - -+ /* pa_log("got request for %lli, now at %lli", (long long) bytes, (long long) s->requested_bytes); */ -+ - if (s->requested_bytes > 0 && s->write_callback) - s->write_callback(s, (size_t) s->requested_bytes, s->write_userdata); - -@@ -1354,6 +1356,8 @@ int pa_stream_write( - * that's OK, the server side applies the same error */ - s->requested_bytes -= (seek == PA_SEEK_RELATIVE ? offset : 0) + (int64_t) length; - -+ /* pa_log("wrote %lli, now at %lli", (long long) length, (long long) s->requested_bytes); */ -+ - if (s->direction == PA_STREAM_PLAYBACK) { - - /* Update latency request correction */ -diff --git a/src/pulsecore/memblockq.c b/src/pulsecore/memblockq.c -index 32758be..4641801 100644 ---- a/src/pulsecore/memblockq.c -+++ b/src/pulsecore/memblockq.c -@@ -55,8 +55,7 @@ struct pa_memblockq { - pa_bool_t in_prebuf; - pa_memchunk silence; - pa_mcalign *mcalign; -- int64_t missing; -- size_t requested; -+ int64_t missing, requested; - }; - - pa_memblockq* pa_memblockq_new( -@@ -84,8 +83,8 @@ pa_memblockq* pa_memblockq_new( - pa_log_debug("memblockq requested: maxlength=%lu, tlength=%lu, base=%lu, prebuf=%lu, minreq=%lu maxrewind=%lu", - (unsigned long) maxlength, (unsigned long) tlength, (unsigned long) base, (unsigned long) prebuf, (unsigned long) minreq, (unsigned long) maxrewind); - -- bq->missing = 0; -- bq->requested = bq->maxlength = bq->tlength = bq->prebuf = bq->minreq = bq->maxrewind = 0; -+ bq->missing = bq->requested = 0; -+ bq->maxlength = bq->tlength = bq->prebuf = bq->minreq = bq->maxrewind = 0; - bq->in_prebuf = TRUE; - - pa_memblockq_set_maxlength(bq, maxlength); -@@ -246,10 +245,34 @@ static pa_bool_t can_push(pa_memblockq *bq, size_t l) { - return TRUE; - } - -+static void write_index_changed(pa_memblockq *bq, int64_t old_write_index, pa_bool_t account) { -+ int64_t delta; -+ -+ pa_assert(bq); -+ -+ delta = bq->write_index - old_write_index; -+ -+ if (account) -+ bq->requested -= delta; -+ -+ /* pa_log("pushed/seeked %lli: requested counter at %lli, account=%i", (long long) delta, (long long) bq->requested, account); */ -+} -+ -+static void read_index_changed(pa_memblockq *bq, int64_t old_read_index) { -+ int64_t delta; -+ -+ pa_assert(bq); -+ -+ delta = bq->read_index - old_read_index; -+ bq->missing += delta; -+ -+ /* pa_log("popped %lli: missing counter at %lli", (long long) delta, (long long) bq->missing); */ -+} -+ - int pa_memblockq_push(pa_memblockq* bq, const pa_memchunk *uchunk) { - struct list_item *q, *n; - pa_memchunk chunk; -- int64_t old, delta; -+ int64_t old; - - pa_assert(bq); - pa_assert(uchunk); -@@ -409,18 +432,7 @@ int pa_memblockq_push(pa_memblockq* bq, const pa_memchunk *uchunk) { - - finish: - -- delta = bq->write_index - old; -- -- if (delta >= (int64_t) bq->requested) { -- delta -= (int64_t) bq->requested; -- bq->requested = 0; -- } else { -- bq->requested -= (size_t) delta; -- delta = 0; -- } -- -- bq->missing -= delta; -- -+ write_index_changed(bq, old, TRUE); - return 0; - } - -@@ -514,7 +526,7 @@ int pa_memblockq_peek(pa_memblockq* bq, pa_memchunk *chunk) { - } - - void pa_memblockq_drop(pa_memblockq *bq, size_t length) { -- int64_t old, delta; -+ int64_t old; - pa_assert(bq); - pa_assert(length % bq->base == 0); - -@@ -553,19 +565,21 @@ void pa_memblockq_drop(pa_memblockq *bq, size_t length) { - } - - drop_backlog(bq); -- -- delta = bq->read_index - old; -- bq->missing += delta; -+ read_index_changed(bq, old); - } - - void pa_memblockq_rewind(pa_memblockq *bq, size_t length) { -+ int64_t old; - pa_assert(bq); - pa_assert(length % bq->base == 0); - -+ old = bq->read_index; -+ - /* This is kind of the inverse of pa_memblockq_drop() */ - - bq->read_index -= (int64_t) length; -- bq->missing -= (int64_t) length; -+ -+ read_index_changed(bq, old); - } - - pa_bool_t pa_memblockq_is_readable(pa_memblockq *bq) { -@@ -602,7 +616,7 @@ size_t pa_memblockq_missing(pa_memblockq *bq) { - } - - void pa_memblockq_seek(pa_memblockq *bq, int64_t offset, pa_seek_mode_t seek, pa_bool_t account) { -- int64_t old, delta; -+ int64_t old; - pa_assert(bq); - - old = bq->write_index; -@@ -625,24 +639,11 @@ void pa_memblockq_seek(pa_memblockq *bq, int64_t offset, pa_seek_mode_t seek, pa - } - - drop_backlog(bq); -- -- delta = bq->write_index - old; -- -- if (account) { -- if (delta >= (int64_t) bq->requested) { -- delta -= (int64_t) bq->requested; -- bq->requested = 0; -- } else if (delta >= 0) { -- bq->requested -= (size_t) delta; -- delta = 0; -- } -- } -- -- bq->missing -= delta; -+ write_index_changed(bq, old, account); - } - - void pa_memblockq_flush_write(pa_memblockq *bq) { -- int64_t old, delta; -+ int64_t old; - pa_assert(bq); - - pa_memblockq_silence(bq); -@@ -651,22 +652,11 @@ void pa_memblockq_flush_write(pa_memblockq *bq) { - bq->write_index = bq->read_index; - - pa_memblockq_prebuf_force(bq); -- -- delta = bq->write_index - old; -- -- if (delta >= (int64_t) bq->requested) { -- delta -= (int64_t) bq->requested; -- bq->requested = 0; -- } else if (delta >= 0) { -- bq->requested -= (size_t) delta; -- delta = 0; -- } -- -- bq->missing -= delta; -+ write_index_changed(bq, old, TRUE); - } - - void pa_memblockq_flush_read(pa_memblockq *bq) { -- int64_t old, delta; -+ int64_t old; - pa_assert(bq); - - pa_memblockq_silence(bq); -@@ -675,9 +665,7 @@ void pa_memblockq_flush_read(pa_memblockq *bq) { - bq->read_index = bq->write_index; - - pa_memblockq_prebuf_force(bq); -- -- delta = bq->read_index - old; -- bq->missing += delta; -+ read_index_changed(bq, old); - } - - size_t pa_memblockq_get_tlength(pa_memblockq *bq) { -@@ -774,8 +762,11 @@ size_t pa_memblockq_pop_missing(pa_memblockq *bq) { - return 0; - - l = (size_t) bq->missing; -+ -+ bq->requested += bq->missing; - bq->missing = 0; -- bq->requested += l; -+ -+ /* pa_log("sent %lli: request counter is at %lli", (long long) l, (long long) bq->requested); */ - - return l; - } -diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c -index 6e35762..b7b3f59 100644 ---- a/src/pulsecore/protocol-native.c -+++ b/src/pulsecore/protocol-native.c -@@ -1113,6 +1113,8 @@ static playback_stream* playback_stream_new( - - *missing = (uint32_t) pa_memblockq_pop_missing(s->memblockq); - -+ /* pa_log("missing original: %li", (long int) *missing); */ -+ - *ss = s->sink_input->sample_spec; - *map = s->sink_input->channel_map; - -@@ -1137,11 +1139,12 @@ static void playback_stream_request_bytes(playback_stream *s) { - - m = pa_memblockq_pop_missing(s->memblockq); - -- /* pa_log("request_bytes(%lu) (tlength=%lu minreq=%lu length=%lu)", */ -+ /* pa_log("request_bytes(%lu) (tlength=%lu minreq=%lu length=%lu really missing=%lli)", */ - /* (unsigned long) m, */ - /* pa_memblockq_get_tlength(s->memblockq), */ - /* pa_memblockq_get_minreq(s->memblockq), */ -- /* pa_memblockq_get_length(s->memblockq)); */ -+ /* pa_memblockq_get_length(s->memblockq), */ -+ /* (long long) pa_memblockq_get_tlength(s->memblockq) - (long long) pa_memblockq_get_length(s->memblockq)); */ - - if (m <= 0) - return; --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0003-core-make-sure-we-always-return-a-valid-memblock-in-.diff b/packages/audio/pulseaudio/patches/0003-core-make-sure-we-always-return-a-valid-memblock-in-.diff deleted file mode 100644 index 5d02e8caf4..0000000000 --- a/packages/audio/pulseaudio/patches/0003-core-make-sure-we-always-return-a-valid-memblock-in-.diff +++ /dev/null @@ -1,161 +0,0 @@ -From 3eed219a50c943251b41814e779cc37daf47e8f4 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Fri, 8 Jan 2010 21:51:30 +0100 -Subject: [PATCH 03/62] core: make sure we always return a valid memblock in sink_input_pop() callbacks - -https://bugzilla.redhat.com/show_bug.cgi?id=553607 ---- - src/modules/module-combine.c | 2 +- - src/modules/module-ladspa-sink.c | 6 +++++- - src/pulsecore/play-memchunk.c | 6 +++++- - src/pulsecore/protocol-esound.c | 5 ++++- - src/pulsecore/protocol-simple.c | 6 +++++- - src/pulsecore/sound-file-stream.c | 5 ++++- - 6 files changed, 24 insertions(+), 6 deletions(-) - -diff --git a/src/modules/module-combine.c b/src/modules/module-combine.c -index a186c89..62e6267 100644 ---- a/src/modules/module-combine.c -+++ b/src/modules/module-combine.c -@@ -890,7 +890,7 @@ static struct output *output_new(struct userdata *u, pa_sink *sink) { - 1, - 0, - 0, -- NULL); -+ &u->sink->silence); - - pa_assert_se(pa_idxset_put(u->outputs, o, NULL) == 0); - update_description(u); -diff --git a/src/modules/module-ladspa-sink.c b/src/modules/module-ladspa-sink.c -index 994c778..185871b 100644 ---- a/src/modules/module-ladspa-sink.c -+++ b/src/modules/module-ladspa-sink.c -@@ -476,6 +476,7 @@ int pa__init(pa_module*m) { - unsigned long input_port, output_port, p, j, n_control; - unsigned c; - pa_bool_t *use_default = NULL; -+ pa_memchunk silence; - - pa_assert(m); - -@@ -514,7 +515,10 @@ int pa__init(pa_module*m) { - u = pa_xnew0(struct userdata, 1); - u->module = m; - m->userdata = u; -- u->memblockq = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH, 0, pa_frame_size(&ss), 1, 1, 0, NULL); -+ -+ pa_silence_memchunk_get(&m->core->silence_cache, m->core->mempool, &silence, &ss, 0); -+ u->memblockq = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH, 0, pa_frame_size(&ss), 1, 1, 0, &silence); -+ pa_memblock_unref(silence.memblock); - - if (!(e = getenv("LADSPA_PATH"))) - e = LADSPA_PATH; -diff --git a/src/pulsecore/play-memchunk.c b/src/pulsecore/play-memchunk.c -index f127d7a..1a3bd5b 100644 ---- a/src/pulsecore/play-memchunk.c -+++ b/src/pulsecore/play-memchunk.c -@@ -47,12 +47,16 @@ int pa_play_memchunk( - - pa_memblockq *q; - int r; -+ pa_memchunk silence; - - pa_assert(sink); - pa_assert(ss); - pa_assert(chunk); - -- q = pa_memblockq_new(0, chunk->length, 0, pa_frame_size(ss), 1, 1, 0, NULL); -+ pa_silence_memchunk_get(&sink->core->silence_cache, sink->core->mempool, &silence, ss, 0); -+ q = pa_memblockq_new(0, chunk->length, 0, pa_frame_size(ss), 1, 1, 0, &silence); -+ pa_memblock_unref(silence.memblock); -+ - pa_assert_se(pa_memblockq_push(q, chunk) >= 0); - - if ((r = pa_play_memblockq(sink, ss, map, q, volume, p, sink_input_index)) < 0) { -diff --git a/src/pulsecore/protocol-esound.c b/src/pulsecore/protocol-esound.c -index 2326eb3..a89f327 100644 ---- a/src/pulsecore/protocol-esound.c -+++ b/src/pulsecore/protocol-esound.c -@@ -389,6 +389,7 @@ static int esd_proto_stream_play(connection *c, esd_proto_t request, const void - size_t l; - pa_sink *sink = NULL; - pa_sink_input_new_data sdata; -+ pa_memchunk silence; - - connection_assert_ref(c); - pa_assert(data); -@@ -435,6 +436,7 @@ static int esd_proto_stream_play(connection *c, esd_proto_t request, const void - CHECK_VALIDITY(c->sink_input, "Failed to create sink input."); - - l = (size_t) ((double) pa_bytes_per_second(&ss)*PLAYBACK_BUFFER_SECONDS); -+ pa_sink_input_get_silence(c->sink_input, &silence); - c->input_memblockq = pa_memblockq_new( - 0, - l, -@@ -443,7 +445,8 @@ static int esd_proto_stream_play(connection *c, esd_proto_t request, const void - (size_t) -1, - l/PLAYBACK_BUFFER_FRAGMENTS, - 0, -- NULL); -+ &silence); -+ pa_memblock_unref(silence.memblock); - pa_iochannel_socket_set_rcvbuf(c->io, l); - - c->sink_input->parent.process_msg = sink_input_process_msg; -diff --git a/src/pulsecore/protocol-simple.c b/src/pulsecore/protocol-simple.c -index a9f7389..fb2e564 100644 ---- a/src/pulsecore/protocol-simple.c -+++ b/src/pulsecore/protocol-simple.c -@@ -525,6 +525,7 @@ void pa_simple_protocol_connect(pa_simple_protocol *p, pa_iochannel *io, pa_simp - - if (o->playback) { - pa_sink_input_new_data data; -+ pa_memchunk silence; - size_t l; - pa_sink *sink; - -@@ -559,6 +560,7 @@ void pa_simple_protocol_connect(pa_simple_protocol *p, pa_iochannel *io, pa_simp - pa_sink_input_set_requested_latency(c->sink_input, DEFAULT_SINK_LATENCY); - - l = (size_t) ((double) pa_bytes_per_second(&o->sample_spec)*PLAYBACK_BUFFER_SECONDS); -+ pa_sink_input_get_silence(c->sink_input, &silence); - c->input_memblockq = pa_memblockq_new( - 0, - l, -@@ -567,7 +569,9 @@ void pa_simple_protocol_connect(pa_simple_protocol *p, pa_iochannel *io, pa_simp - (size_t) -1, - l/PLAYBACK_BUFFER_FRAGMENTS, - 0, -- NULL); -+ &silence); -+ pa_memblock_unref(silence.memblock); -+ - pa_iochannel_socket_set_rcvbuf(io, l); - - pa_atomic_store(&c->playback.missing, (int) pa_memblockq_missing(c->input_memblockq)); -diff --git a/src/pulsecore/sound-file-stream.c b/src/pulsecore/sound-file-stream.c -index 16de492..2025c2a 100644 ---- a/src/pulsecore/sound-file-stream.c -+++ b/src/pulsecore/sound-file-stream.c -@@ -239,6 +239,7 @@ int pa_play_file( - pa_sink_input_new_data data; - int fd; - SF_INFO sfi; -+ pa_memchunk silence; - - pa_assert(sink); - pa_assert(fname); -@@ -324,7 +325,9 @@ int pa_play_file( - u->sink_input->state_change = sink_input_state_change_cb; - u->sink_input->userdata = u; - -- u->memblockq = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH, 0, pa_frame_size(&ss), 1, 1, 0, NULL); -+ pa_sink_input_get_silence(u->sink_input, &silence); -+ u->memblockq = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH, 0, pa_frame_size(&ss), 1, 1, 0, &silence); -+ pa_memblock_unref(silence.memblock); - - pa_sink_input_put(u->sink_input); - --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0004-bluetooth-destruct-stream-only-if-it-is-not-already-.diff b/packages/audio/pulseaudio/patches/0004-bluetooth-destruct-stream-only-if-it-is-not-already-.diff deleted file mode 100644 index 4d28682a6d..0000000000 --- a/packages/audio/pulseaudio/patches/0004-bluetooth-destruct-stream-only-if-it-is-not-already-.diff +++ /dev/null @@ -1,56 +0,0 @@ -From 11688eca4b2beb7aa1adcd4aa9a3ee933f7385fb Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Fri, 8 Jan 2010 22:18:15 +0100 -Subject: [PATCH 04/62] bluetooth: destruct stream only if it is not already destructed - -https://bugzilla.redhat.com/show_bug.cgi?id=551842 ---- - src/modules/bluetooth/module-bluetooth-device.c | 28 ++++++++++++---------- - 1 files changed, 15 insertions(+), 13 deletions(-) - -diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c -index 19676df..2bbae41 100644 ---- a/src/modules/bluetooth/module-bluetooth-device.c -+++ b/src/modules/bluetooth/module-bluetooth-device.c -@@ -823,23 +823,25 @@ static int stop_stream_fd(struct userdata *u) { - - pa_assert(u); - pa_assert(u->rtpoll); -- pa_assert(u->rtpoll_item); -- pa_assert(u->stream_fd >= 0); - -- pa_rtpoll_item_free(u->rtpoll_item); -- u->rtpoll_item = NULL; -+ if (u->rtpoll_item) { -+ pa_rtpoll_item_free(u->rtpoll_item); -+ u->rtpoll_item = NULL; -+ } - -- memset(msg.buf, 0, BT_SUGGESTED_BUFFER_SIZE); -- msg.start_req.h.type = BT_REQUEST; -- msg.start_req.h.name = BT_STOP_STREAM; -- msg.start_req.h.length = sizeof(msg.start_req); -+ if (u->stream_fd >= 0) { -+ memset(msg.buf, 0, BT_SUGGESTED_BUFFER_SIZE); -+ msg.start_req.h.type = BT_REQUEST; -+ msg.start_req.h.name = BT_STOP_STREAM; -+ msg.start_req.h.length = sizeof(msg.start_req); - -- if (service_send(u, &msg.start_req.h) < 0 || -- service_expect(u, &msg.rsp, sizeof(msg), BT_STOP_STREAM, sizeof(msg.start_rsp)) < 0) -- r = -1; -+ if (service_send(u, &msg.start_req.h) < 0 || -+ service_expect(u, &msg.rsp, sizeof(msg), BT_STOP_STREAM, sizeof(msg.start_rsp)) < 0) -+ r = -1; - -- pa_close(u->stream_fd); -- u->stream_fd = -1; -+ pa_close(u->stream_fd); -+ u->stream_fd = -1; -+ } - - if (u->read_smoother) { - pa_smoother_free(u->read_smoother); --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0005-bluetooth-don-t-hit-an-assert-if-latency-is-queried-.diff b/packages/audio/pulseaudio/patches/0005-bluetooth-don-t-hit-an-assert-if-latency-is-queried-.diff deleted file mode 100644 index fbb3ef940b..0000000000 --- a/packages/audio/pulseaudio/patches/0005-bluetooth-don-t-hit-an-assert-if-latency-is-queried-.diff +++ /dev/null @@ -1,35 +0,0 @@ -From e7d9f891e2a8e6b670098b80315ca1f0010c35ca Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Fri, 8 Jan 2010 23:44:42 +0100 -Subject: [PATCH 05/62] bluetooth: don't hit an assert if latency is queried for a stooped recording stream - -https://bugzilla.redhat.com/show_bug.cgi?id=537422 ---- - src/modules/bluetooth/module-bluetooth-device.c | 10 +++++++--- - 1 files changed, 7 insertions(+), 3 deletions(-) - -diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c -index 2bbae41..d6868b8 100644 ---- a/src/modules/bluetooth/module-bluetooth-device.c -+++ b/src/modules/bluetooth/module-bluetooth-device.c -@@ -972,10 +972,14 @@ static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t off - case PA_SOURCE_MESSAGE_GET_LATENCY: { - pa_usec_t wi, ri; - -- wi = pa_smoother_get(u->read_smoother, pa_rtclock_now()); -- ri = pa_bytes_to_usec(u->read_index, &u->sample_spec); -+ if (u->read_smoother) { -+ wi = pa_smoother_get(u->read_smoother, pa_rtclock_now()); -+ ri = pa_bytes_to_usec(u->read_index, &u->sample_spec); -+ -+ *((pa_usec_t*) data) = (wi > ri ? wi - ri : 0) + u->source->thread_info.fixed_latency; -+ } else -+ *((pa_usec_t*) data) = 0; - -- *((pa_usec_t*) data) = (wi > ri ? wi - ri : 0) + u->source->thread_info.fixed_latency; - return 0; - } - --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0006-client-detect-forking-in-sample-cache-API-too.diff b/packages/audio/pulseaudio/patches/0006-client-detect-forking-in-sample-cache-API-too.diff deleted file mode 100644 index 8466fd26b9..0000000000 --- a/packages/audio/pulseaudio/patches/0006-client-detect-forking-in-sample-cache-API-too.diff +++ /dev/null @@ -1,87 +0,0 @@ -From bf50dc42306857e361267d2ad39b737ad05b8604 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 12 Jan 2010 03:01:14 +0100 -Subject: [PATCH 06/62] client: detect forking in sample cache API, too - ---- - src/pulse/scache.c | 9 +++++++-- - src/pulse/stream.c | 1 + - 2 files changed, 8 insertions(+), 2 deletions(-) - -diff --git a/src/pulse/scache.c b/src/pulse/scache.c -index 27da688..2a7602f 100644 ---- a/src/pulse/scache.c -+++ b/src/pulse/scache.c -@@ -28,15 +28,15 @@ - #include - - #include -+#include - - #include - #include - #include - -+#include "fork-detect.h" - #include "internal.h" - --#include "scache.h" -- - int pa_stream_connect_upload(pa_stream *s, size_t length) { - pa_tagstruct *t; - uint32_t tag; -@@ -45,6 +45,7 @@ int pa_stream_connect_upload(pa_stream *s, size_t length) { - pa_assert(s); - pa_assert(PA_REFCNT_VALUE(s) >= 1); - -+ PA_CHECK_VALIDITY(s->context, !pa_detect_fork(), PA_ERR_FORKED); - PA_CHECK_VALIDITY(s->context, s->state == PA_STREAM_UNCONNECTED, PA_ERR_BADSTATE); - PA_CHECK_VALIDITY(s->context, length > 0, PA_ERR_INVALID); - PA_CHECK_VALIDITY(s->context, length == (size_t) (uint32_t) length, PA_ERR_INVALID); -@@ -85,6 +86,7 @@ int pa_stream_finish_upload(pa_stream *s) { - pa_assert(s); - pa_assert(PA_REFCNT_VALUE(s) >= 1); - -+ PA_CHECK_VALIDITY(s->context, !pa_detect_fork(), PA_ERR_FORKED); - PA_CHECK_VALIDITY(s->context, s->channel_valid, PA_ERR_BADSTATE); - PA_CHECK_VALIDITY(s->context, s->context->state == PA_CONTEXT_READY, PA_ERR_BADSTATE); - -@@ -174,6 +176,7 @@ pa_operation *pa_context_play_sample(pa_context *c, const char *name, const char - pa_assert(c); - pa_assert(PA_REFCNT_VALUE(c) >= 1); - -+ PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED); - PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE); - PA_CHECK_VALIDITY_RETURN_NULL(c, name && *name, PA_ERR_INVALID); - PA_CHECK_VALIDITY_RETURN_NULL(c, !dev || *dev, PA_ERR_INVALID); -@@ -213,6 +216,7 @@ pa_operation *pa_context_play_sample_with_proplist(pa_context *c, const char *na - pa_assert(c); - pa_assert(PA_REFCNT_VALUE(c) >= 1); - -+ PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED); - PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE); - PA_CHECK_VALIDITY_RETURN_NULL(c, name && *name, PA_ERR_INVALID); - PA_CHECK_VALIDITY_RETURN_NULL(c, !dev || *dev, PA_ERR_INVALID); -@@ -255,6 +259,7 @@ pa_operation* pa_context_remove_sample(pa_context *c, const char *name, pa_conte - pa_assert(c); - pa_assert(PA_REFCNT_VALUE(c) >= 1); - -+ PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED); - PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE); - PA_CHECK_VALIDITY_RETURN_NULL(c, name && *name, PA_ERR_INVALID); - -diff --git a/src/pulse/stream.c b/src/pulse/stream.c -index 793277a..79b2868 100644 ---- a/src/pulse/stream.c -+++ b/src/pulse/stream.c -@@ -29,6 +29,7 @@ - #include - - #include -+#include - #include - #include - #include --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0007-client-verify-connection-state-in-pa_stream_connect_.diff b/packages/audio/pulseaudio/patches/0007-client-verify-connection-state-in-pa_stream_connect_.diff deleted file mode 100644 index b9cd10d907..0000000000 --- a/packages/audio/pulseaudio/patches/0007-client-verify-connection-state-in-pa_stream_connect_.diff +++ /dev/null @@ -1,28 +0,0 @@ -From 78811c5653d0ba508b6558ba4578b61da26c60cf Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 12 Jan 2010 03:01:27 +0100 -Subject: [PATCH 07/62] client: verify connection state in pa_stream_connect_upload() - -Make suer we check the connection state before going on, so that we can -rely that s->context->pstream is properly initialized. - -https://bugzilla.redhat.com/show_bug.cgi?id=539500 ---- - src/pulse/scache.c | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -diff --git a/src/pulse/scache.c b/src/pulse/scache.c -index 2a7602f..b2169b6 100644 ---- a/src/pulse/scache.c -+++ b/src/pulse/scache.c -@@ -49,6 +49,7 @@ int pa_stream_connect_upload(pa_stream *s, size_t length) { - PA_CHECK_VALIDITY(s->context, s->state == PA_STREAM_UNCONNECTED, PA_ERR_BADSTATE); - PA_CHECK_VALIDITY(s->context, length > 0, PA_ERR_INVALID); - PA_CHECK_VALIDITY(s->context, length == (size_t) (uint32_t) length, PA_ERR_INVALID); -+ PA_CHECK_VALIDITY(s->context, s->context->state == PA_CONTEXT_READY, PA_ERR_BADSTATE); - - if (!(name = pa_proplist_gets(s->proplist, PA_PROP_EVENT_ID))) - name = pa_proplist_gets(s->proplist, PA_PROP_MEDIA_NAME); --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0008-udev-don-t-forget-to-unref-devices-we-are-not-intere.diff b/packages/audio/pulseaudio/patches/0008-udev-don-t-forget-to-unref-devices-we-are-not-intere.diff deleted file mode 100644 index 30cfa271fc..0000000000 --- a/packages/audio/pulseaudio/patches/0008-udev-don-t-forget-to-unref-devices-we-are-not-intere.diff +++ /dev/null @@ -1,29 +0,0 @@ -From 15a3018bda8ee92393671ceaf272be418e95a81f Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 12 Jan 2010 23:01:24 +0100 -Subject: [PATCH 08/62] udev: don't forget to unref devices we are not interested in - -https://bugzilla.redhat.com/show_bug.cgi?id=552932 ---- - src/modules/module-udev-detect.c | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) - -diff --git a/src/modules/module-udev-detect.c b/src/modules/module-udev-detect.c -index 1b1e9c1..7508d9a 100644 ---- a/src/modules/module-udev-detect.c -+++ b/src/modules/module-udev-detect.c -@@ -416,8 +416,10 @@ static void monitor_cb( - goto fail; - } - -- if (!path_get_card_id(udev_device_get_devpath(dev))) -+ if (!path_get_card_id(udev_device_get_devpath(dev))) { -+ udev_device_unref(dev); - return; -+ } - - process_device(u, dev); - udev_device_unref(dev); --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0009-once-make-once-related-variables-volatile.diff b/packages/audio/pulseaudio/patches/0009-once-make-once-related-variables-volatile.diff deleted file mode 100644 index e07ac4f6ac..0000000000 --- a/packages/audio/pulseaudio/patches/0009-once-make-once-related-variables-volatile.diff +++ /dev/null @@ -1,91 +0,0 @@ -From 73ae1fce001253677b7ab633f42d3c3300fe5cf5 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 12 Jan 2010 23:03:04 +0100 -Subject: [PATCH 09/62] once: make once related variables volatile - ---- - src/pulsecore/flist.h | 2 +- - src/pulsecore/once.c | 3 +-- - src/pulsecore/thread-posix.c | 8 ++------ - src/pulsecore/thread.h | 2 +- - 4 files changed, 5 insertions(+), 10 deletions(-) - -diff --git a/src/pulsecore/flist.h b/src/pulsecore/flist.h -index e147486..184e599 100644 ---- a/src/pulsecore/flist.h -+++ b/src/pulsecore/flist.h -@@ -45,7 +45,7 @@ void* pa_flist_pop(pa_flist*l); - - #define PA_STATIC_FLIST_DECLARE(name, size, free_cb) \ - static struct { \ -- pa_flist *flist; \ -+ pa_flist *volatile flist; \ - pa_once once; \ - } name##_flist = { NULL, PA_ONCE_INIT }; \ - static void name##_flist_init(void) { \ -diff --git a/src/pulsecore/once.c b/src/pulsecore/once.c -index 05a3ad2..4e509e0 100644 ---- a/src/pulsecore/once.c -+++ b/src/pulsecore/once.c -@@ -29,8 +29,6 @@ - #include "once.h" - - pa_bool_t pa_once_begin(pa_once *control) { -- pa_mutex *m; -- - pa_assert(control); - - if (pa_atomic_load(&control->done)) -@@ -43,6 +41,7 @@ pa_bool_t pa_once_begin(pa_once *control) { - * executed by us. Hence the awkward locking. */ - - for (;;) { -+ pa_mutex *m; - - if ((m = pa_atomic_ptr_load(&control->mutex))) { - -diff --git a/src/pulsecore/thread-posix.c b/src/pulsecore/thread-posix.c -index fdab270..bc0d6e3 100644 ---- a/src/pulsecore/thread-posix.c -+++ b/src/pulsecore/thread-posix.c -@@ -80,11 +80,9 @@ pa_thread* pa_thread_new(pa_thread_func_t thread_func, void *userdata) { - - pa_assert(thread_func); - -- t = pa_xnew(pa_thread, 1); -+ t = pa_xnew0(pa_thread, 1); - t->thread_func = thread_func; - t->userdata = userdata; -- t->joined = FALSE; -- pa_atomic_store(&t->running, 0); - - if (pthread_create(&t->id, NULL, internal_thread_func, t) < 0) { - pa_xfree(t); -@@ -135,10 +133,8 @@ pa_thread* pa_thread_self(void) { - /* This is a foreign thread, let's create a pthread structure to - * make sure that we can always return a sensible pointer */ - -- t = pa_xnew(pa_thread, 1); -+ t = pa_xnew0(pa_thread, 1); - t->id = pthread_self(); -- t->thread_func = NULL; -- t->userdata = NULL; - t->joined = TRUE; - pa_atomic_store(&t->running, 2); - -diff --git a/src/pulsecore/thread.h b/src/pulsecore/thread.h -index 25eace6..60c1267 100644 ---- a/src/pulsecore/thread.h -+++ b/src/pulsecore/thread.h -@@ -55,7 +55,7 @@ void *pa_tls_set(pa_tls *t, void *userdata); - #define PA_STATIC_TLS_DECLARE(name, free_cb) \ - static struct { \ - pa_once once; \ -- pa_tls *tls; \ -+ pa_tls *volatile tls; \ - } name##_tls = { \ - .once = PA_ONCE_INIT, \ - .tls = NULL \ --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0010-bluetooth-fix-invalid-memory-access.diff b/packages/audio/pulseaudio/patches/0010-bluetooth-fix-invalid-memory-access.diff deleted file mode 100644 index 8baf40c224..0000000000 --- a/packages/audio/pulseaudio/patches/0010-bluetooth-fix-invalid-memory-access.diff +++ /dev/null @@ -1,36 +0,0 @@ -From 4bcb1a909f936a63628273e7d35726bc64785eeb Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 13 Jan 2010 17:24:37 +0100 -Subject: [PATCH 10/62] bluetooth: fix invalid memory access - -When an GetProperties() reply arrives after we already deleted the -device structure for it make sure we don't accidentaly touch the -invalidated object. - -https://bugzilla.redhat.com/show_bug.cgi?id=543205 ---- - src/modules/bluetooth/bluetooth-util.c | 8 +++++++- - 1 files changed, 7 insertions(+), 1 deletions(-) - -diff --git a/src/modules/bluetooth/bluetooth-util.c b/src/modules/bluetooth/bluetooth-util.c -index 795d510..b2c0429 100644 ---- a/src/modules/bluetooth/bluetooth-util.c -+++ b/src/modules/bluetooth/bluetooth-util.c -@@ -342,7 +342,13 @@ static void get_properties_reply(DBusPendingCall *pending, void *userdata) { - /* dbus_message_get_interface(p->message), */ - /* dbus_message_get_path(p->message)); */ - -- d = p->call_data; -+ /* We don't use p->call_data here right-away since the device -+ * might already be invalidated at this point */ -+ -+ if (!(d = pa_hashmap_get(y->devices, dbus_message_get_path(p->message)))) -+ return; -+ -+ pa_assert(p->call_data == d); - - valid = dbus_message_get_type(r) == DBUS_MESSAGE_TYPE_ERROR ? -1 : 1; - --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0011-log-add-an-easy-way-to-disable-log-rate-limiting.diff b/packages/audio/pulseaudio/patches/0011-log-add-an-easy-way-to-disable-log-rate-limiting.diff deleted file mode 100644 index bdefce0ba8..0000000000 --- a/packages/audio/pulseaudio/patches/0011-log-add-an-easy-way-to-disable-log-rate-limiting.diff +++ /dev/null @@ -1,154 +0,0 @@ -From 21b484e056be445fdaf00f91ce50bc40b1ac9623 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 13 Jan 2010 17:35:04 +0100 -Subject: [PATCH 11/62] log: add an easy way to disable log rate limiting - -Should help with debuggin bugs like: - -https://bugzilla.redhat.com/show_bug.cgi?id=554405 ---- - src/pulsecore/log.c | 88 +++++++++++++++++++++++++++++---------------------- - 1 files changed, 50 insertions(+), 38 deletions(-) - -diff --git a/src/pulsecore/log.c b/src/pulsecore/log.c -index 8c21ee6..0c5a317 100644 ---- a/src/pulsecore/log.c -+++ b/src/pulsecore/log.c -@@ -61,6 +61,7 @@ - #define ENV_LOG_PRINT_LEVEL "PULSE_LOG_LEVEL" - #define ENV_LOG_BACKTRACE "PULSE_LOG_BACKTRACE" - #define ENV_LOG_BACKTRACE_SKIP "PULSE_LOG_BACKTRACE_SKIP" -+#define ENV_LOG_NO_RATELIMIT "PULSE_LOG_NO_RATE_LIMIT" - - static char *ident = NULL; /* in local charset format */ - static pa_log_target_t target = PA_LOG_STDERR, target_override; -@@ -68,6 +69,7 @@ static pa_bool_t target_override_set = FALSE; - static pa_log_level_t maximum_level = PA_LOG_ERROR, maximum_level_override = PA_LOG_ERROR; - static unsigned show_backtrace = 0, show_backtrace_override = 0, skip_backtrace = 0; - static pa_log_flags_t flags = 0, flags_override = 0; -+static pa_bool_t no_rate_limit = FALSE; - - #ifdef HAVE_SYSLOG_H - static const int level_to_syslog[] = { -@@ -195,54 +197,61 @@ static char* get_backtrace(unsigned show_nframes) { - #endif - - static void init_defaults(void) { -- const char *e; -+ PA_ONCE_BEGIN { - -- if (!ident) { -- char binary[256]; -- if (pa_get_binary_name(binary, sizeof(binary))) -- pa_log_set_ident(binary); -- } -+ const char *e; - -- if (getenv(ENV_LOG_SYSLOG)) { -- target_override = PA_LOG_SYSLOG; -- target_override_set = TRUE; -- } -+ if (!ident) { -+ char binary[256]; -+ if (pa_get_binary_name(binary, sizeof(binary))) -+ pa_log_set_ident(binary); -+ } - -- if ((e = getenv(ENV_LOG_LEVEL))) { -- maximum_level_override = (pa_log_level_t) atoi(e); -+ if (getenv(ENV_LOG_SYSLOG)) { -+ target_override = PA_LOG_SYSLOG; -+ target_override_set = TRUE; -+ } - -- if (maximum_level_override >= PA_LOG_LEVEL_MAX) -- maximum_level_override = PA_LOG_LEVEL_MAX-1; -- } -+ if ((e = getenv(ENV_LOG_LEVEL))) { -+ maximum_level_override = (pa_log_level_t) atoi(e); - -- if (getenv(ENV_LOG_COLORS)) -- flags_override |= PA_LOG_COLORS; -+ if (maximum_level_override >= PA_LOG_LEVEL_MAX) -+ maximum_level_override = PA_LOG_LEVEL_MAX-1; -+ } - -- if (getenv(ENV_LOG_PRINT_TIME)) -- flags_override |= PA_LOG_PRINT_TIME; -+ if (getenv(ENV_LOG_COLORS)) -+ flags_override |= PA_LOG_COLORS; - -- if (getenv(ENV_LOG_PRINT_FILE)) -- flags_override |= PA_LOG_PRINT_FILE; -+ if (getenv(ENV_LOG_PRINT_TIME)) -+ flags_override |= PA_LOG_PRINT_TIME; - -- if (getenv(ENV_LOG_PRINT_META)) -- flags_override |= PA_LOG_PRINT_META; -+ if (getenv(ENV_LOG_PRINT_FILE)) -+ flags_override |= PA_LOG_PRINT_FILE; - -- if (getenv(ENV_LOG_PRINT_LEVEL)) -- flags_override |= PA_LOG_PRINT_LEVEL; -+ if (getenv(ENV_LOG_PRINT_META)) -+ flags_override |= PA_LOG_PRINT_META; - -- if ((e = getenv(ENV_LOG_BACKTRACE))) { -- show_backtrace_override = (unsigned) atoi(e); -+ if (getenv(ENV_LOG_PRINT_LEVEL)) -+ flags_override |= PA_LOG_PRINT_LEVEL; - -- if (show_backtrace_override <= 0) -- show_backtrace_override = 0; -- } -+ if ((e = getenv(ENV_LOG_BACKTRACE))) { -+ show_backtrace_override = (unsigned) atoi(e); - -- if ((e = getenv(ENV_LOG_BACKTRACE_SKIP))) { -- skip_backtrace = (unsigned) atoi(e); -+ if (show_backtrace_override <= 0) -+ show_backtrace_override = 0; -+ } - -- if (skip_backtrace <= 0) -- skip_backtrace = 0; -- } -+ if ((e = getenv(ENV_LOG_BACKTRACE_SKIP))) { -+ skip_backtrace = (unsigned) atoi(e); -+ -+ if (skip_backtrace <= 0) -+ skip_backtrace = 0; -+ } -+ -+ if (getenv(ENV_LOG_NO_RATELIMIT)) -+ no_rate_limit = TRUE; -+ -+ } PA_ONCE_END; - } - - void pa_log_levelv_meta( -@@ -268,9 +277,7 @@ void pa_log_levelv_meta( - pa_assert(level < PA_LOG_LEVEL_MAX); - pa_assert(format); - -- PA_ONCE_BEGIN { -- init_defaults(); -- } PA_ONCE_END; -+ init_defaults(); - - _target = target_override_set ? target_override : target; - _maximum_level = PA_MAX(maximum_level, maximum_level_override); -@@ -428,5 +435,10 @@ pa_bool_t pa_log_ratelimit(void) { - /* Not more than 10 messages every 5s */ - static PA_DEFINE_RATELIMIT(ratelimit, 5 * PA_USEC_PER_SEC, 10); - -+ init_defaults(); -+ -+ if (no_rate_limit) -+ return TRUE; -+ - return pa_ratelimit_test(&ratelimit); - } --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0012-udev-make-sure-we-get-events-only-for-sound-devices.diff b/packages/audio/pulseaudio/patches/0012-udev-make-sure-we-get-events-only-for-sound-devices.diff deleted file mode 100644 index 37a21bd7b1..0000000000 --- a/packages/audio/pulseaudio/patches/0012-udev-make-sure-we-get-events-only-for-sound-devices.diff +++ /dev/null @@ -1,28 +0,0 @@ -From 9b37dce4223aaf7a5f48b04b52c89b46ad97cf73 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 13 Jan 2010 19:41:44 +0100 -Subject: [PATCH 12/62] udev: make sure we get events only for sound devices - ---- - src/modules/module-udev-detect.c | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -diff --git a/src/modules/module-udev-detect.c b/src/modules/module-udev-detect.c -index 7508d9a..58635a5 100644 ---- a/src/modules/module-udev-detect.c -+++ b/src/modules/module-udev-detect.c -@@ -639,6 +639,11 @@ int pa__init(pa_module *m) { - goto fail; - } - -+ if (udev_monitor_filter_add_match_subsystem_devtype(u->monitor, "sound", NULL) < 0) { -+ pa_log("Failed to subscribe to sound devices."); -+ goto fail; -+ } -+ - errno = 0; - if (udev_monitor_enable_receiving(u->monitor) < 0) { - pa_log("Failed to enable monitor: %s", pa_cstrerror(errno)); --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0013-alsa-ignore-volume-changes-from-the-hw-if-we-are-not.diff b/packages/audio/pulseaudio/patches/0013-alsa-ignore-volume-changes-from-the-hw-if-we-are-not.diff deleted file mode 100644 index 3b2c71c412..0000000000 --- a/packages/audio/pulseaudio/patches/0013-alsa-ignore-volume-changes-from-the-hw-if-we-are-not.diff +++ /dev/null @@ -1,41 +0,0 @@ -From 540ec7b961256d6c7702448ca995f61268064190 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 13 Jan 2010 20:30:36 +0100 -Subject: [PATCH 13/62] alsa: ignore volume changes from the hw if we are not on the active console - ---- - src/modules/alsa/alsa-sink.c | 3 +++ - src/modules/alsa/alsa-source.c | 3 +++ - 2 files changed, 6 insertions(+), 0 deletions(-) - -diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c -index ed16c83..690480f 100644 ---- a/src/modules/alsa/alsa-sink.c -+++ b/src/modules/alsa/alsa-sink.c -@@ -1103,6 +1103,9 @@ static int mixer_callback(snd_mixer_elem_t *elem, unsigned int mask) { - if (mask == SND_CTL_EVENT_MASK_REMOVE) - return 0; - -+ if (u->sink->suspend_cause & PA_SUSPEND_SESSION) -+ return 0; -+ - if (mask & SND_CTL_EVENT_MASK_VALUE) { - pa_sink_get_volume(u->sink, TRUE); - pa_sink_get_mute(u->sink, TRUE); -diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c -index 157698e..f8b583e 100644 ---- a/src/modules/alsa/alsa-source.c -+++ b/src/modules/alsa/alsa-source.c -@@ -1051,6 +1051,9 @@ static int mixer_callback(snd_mixer_elem_t *elem, unsigned int mask) { - if (mask == SND_CTL_EVENT_MASK_REMOVE) - return 0; - -+ if (u->source->suspend_cause & PA_SUSPEND_SESSION) -+ return 0; -+ - if (mask & SND_CTL_EVENT_MASK_VALUE) { - pa_source_get_volume(u->source, TRUE); - pa_source_get_mute(u->source, TRUE); --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0014-cpu-check-for-CMOV-flag-before-using-this-intsructio.diff b/packages/audio/pulseaudio/patches/0014-cpu-check-for-CMOV-flag-before-using-this-intsructio.diff deleted file mode 100644 index 2ea4fa8cfd..0000000000 --- a/packages/audio/pulseaudio/patches/0014-cpu-check-for-CMOV-flag-before-using-this-intsructio.diff +++ /dev/null @@ -1,80 +0,0 @@ -From 170812755e0ac235ed2b7182ef637eb317d8b2b2 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 13 Jan 2010 20:31:17 +0100 -Subject: [PATCH 14/62] cpu: check for CMOV flag before using this intsruction in assembly - -http://pulseaudio.org/ticket/776 ---- - src/pulsecore/cpu-x86.c | 6 +++++- - src/pulsecore/cpu-x86.h | 6 +++--- - src/pulsecore/svolume_mmx.c | 2 +- - 3 files changed, 9 insertions(+), 5 deletions(-) - -diff --git a/src/pulsecore/cpu-x86.c b/src/pulsecore/cpu-x86.c -index f194a60..b173072 100644 ---- a/src/pulsecore/cpu-x86.c -+++ b/src/pulsecore/cpu-x86.c -@@ -57,6 +57,9 @@ void pa_cpu_init_x86 (void) { - if (level >= 1) { - get_cpuid (0x00000001, &eax, &ebx, &ecx, &edx); - -+ if (edx & (1<<15)) -+ flags |= PA_CPU_X86_CMOV; -+ - if (edx & (1<<23)) - flags |= PA_CPU_X86_MMX; - -@@ -97,7 +100,8 @@ void pa_cpu_init_x86 (void) { - flags |= PA_CPU_X86_3DNOW; - } - -- pa_log_info ("CPU flags: %s%s%s%s%s%s%s%s%s%s", -+ pa_log_info ("CPU flags: %s%s%s%s%s%s%s%s%s%s%s", -+ (flags & PA_CPU_X86_CMOV) ? "CMOV " : "", - (flags & PA_CPU_X86_MMX) ? "MMX " : "", - (flags & PA_CPU_X86_SSE) ? "SSE " : "", - (flags & PA_CPU_X86_SSE2) ? "SSE2 " : "", -diff --git a/src/pulsecore/cpu-x86.h b/src/pulsecore/cpu-x86.h -index b40eb5c..285c203 100644 ---- a/src/pulsecore/cpu-x86.h -+++ b/src/pulsecore/cpu-x86.h -@@ -5,7 +5,7 @@ - This file is part of PulseAudio. - - Copyright 2004-2006 Lennart Poettering -- Copyright 2009 Wim Taymans -+ Copyright 2009 Wim Taymans - - PulseAudio is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published -@@ -35,12 +35,12 @@ typedef enum pa_cpu_x86_flag { - PA_CPU_X86_SSE4_1 = (1 << 6), - PA_CPU_X86_SSE4_2 = (1 << 7), - PA_CPU_X86_3DNOW = (1 << 8), -- PA_CPU_X86_3DNOWEXT = (1 << 9) -+ PA_CPU_X86_3DNOWEXT = (1 << 9), -+ PA_CPU_X86_CMOV = (1 << 10) - } pa_cpu_x86_flag_t; - - void pa_cpu_init_x86 (void); - -- - #if defined (__i386__) - typedef int32_t pa_reg_x86; - #define PA_REG_a "eax" -diff --git a/src/pulsecore/svolume_mmx.c b/src/pulsecore/svolume_mmx.c -index 46923ed..e50ebee 100644 ---- a/src/pulsecore/svolume_mmx.c -+++ b/src/pulsecore/svolume_mmx.c -@@ -305,7 +305,7 @@ void pa_volume_func_init_mmx (pa_cpu_x86_flag_t flags) { - run_test (); - #endif - -- if (flags & PA_CPU_X86_MMX) { -+ if ((flags & PA_CPU_X86_MMX) && (flags & PA_CPU_X86_CMOV)) { - pa_log_info("Initialising MMX optimized functions."); - - pa_set_volume_func (PA_SAMPLE_S16NE, (pa_do_volume_func_t) pa_volume_s16ne_mmx); --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0015-alsa-cover-Input-Source-Int-Mic.diff b/packages/audio/pulseaudio/patches/0015-alsa-cover-Input-Source-Int-Mic.diff deleted file mode 100644 index 2526026e35..0000000000 --- a/packages/audio/pulseaudio/patches/0015-alsa-cover-Input-Source-Int-Mic.diff +++ /dev/null @@ -1,29 +0,0 @@ -From 67c6535222508bd84a122860023a8dc7fd44cd35 Mon Sep 17 00:00:00 2001 -From: Colin Guthrie -Date: Wed, 13 Jan 2010 23:44:00 +0000 -Subject: [PATCH 15/62] alsa: cover Input Source:Int Mic - -As seen on some HDA chips (e.g. Fujitsu Siemens S6410) -Refs http://pulseaudio.org/ticket/772 ---- - .../alsa/mixer/paths/analog-input.conf.common | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -diff --git a/src/modules/alsa/mixer/paths/analog-input.conf.common b/src/modules/alsa/mixer/paths/analog-input.conf.common -index 951e11f..fbdc8fb 100644 ---- a/src/modules/alsa/mixer/paths/analog-input.conf.common -+++ b/src/modules/alsa/mixer/paths/analog-input.conf.common -@@ -78,6 +78,10 @@ priority = 19 - name = input-microphone - priority = 19 - -+[Option Input Source:Int Mic] -+name = input-microphone -+priority = 19 -+ - [Option Input Source:Internal Mic] - name = input-microphone - priority = 19 --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0016-alsa-Cover-the-Int-Mic-Boost-element.diff b/packages/audio/pulseaudio/patches/0016-alsa-Cover-the-Int-Mic-Boost-element.diff deleted file mode 100644 index 89d269c3b4..0000000000 --- a/packages/audio/pulseaudio/patches/0016-alsa-Cover-the-Int-Mic-Boost-element.diff +++ /dev/null @@ -1,36 +0,0 @@ -From 291cd096015d540d5064bfae94a66adc3bc3fc64 Mon Sep 17 00:00:00 2001 -From: Colin Guthrie -Date: Wed, 13 Jan 2010 23:47:21 +0000 -Subject: [PATCH 16/62] alsa: Cover the 'Int Mic Boost' element. - -This is not 100% ideal as we have not way to tie specific boosts to specific -inputs and this particular chipset (as noted in #772) appears to -support just that. - -For the time being incorporate it into the normal boost logic. - -See http://pulseaudio.org/ticket/772 ---- - .../alsa/mixer/paths/analog-input-mic.conf.common | 9 +++++++++ - 1 files changed, 9 insertions(+), 0 deletions(-) - -diff --git a/src/modules/alsa/mixer/paths/analog-input-mic.conf.common b/src/modules/alsa/mixer/paths/analog-input-mic.conf.common -index b35e7af..4663305 100644 ---- a/src/modules/alsa/mixer/paths/analog-input-mic.conf.common -+++ b/src/modules/alsa/mixer/paths/analog-input-mic.conf.common -@@ -61,3 +61,12 @@ name = input-boost-on - - [Option Front Mic Boost:off] - name = input-boost-off -+ -+[Element Int Mic Boost] -+switch = select -+ -+[Option Int Mic Boost:on] -+name = input-boost-on -+ -+[Option Int Mic Boost:off] -+name = input-boost-off --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0017-udev-handle-sound-cards-with-both-modem-and-audio-pr.diff b/packages/audio/pulseaudio/patches/0017-udev-handle-sound-cards-with-both-modem-and-audio-pr.diff deleted file mode 100644 index 1ed41c5057..0000000000 --- a/packages/audio/pulseaudio/patches/0017-udev-handle-sound-cards-with-both-modem-and-audio-pr.diff +++ /dev/null @@ -1,117 +0,0 @@ -From 63c968bf775ec7e172b89e45ddc4981d79587bc5 Mon Sep 17 00:00:00 2001 -From: Daniel T. Chen -Date: Thu, 14 Jan 2010 00:57:27 +0100 -Subject: [PATCH 17/62] udev: handle sound cards with both modem and audio properly - -http://pulseaudio.org/ticket/681 -https://bugs.launchpad.net/ubuntu/+source/pulseaudio/+bug/394500 ---- - src/modules/module-udev-detect.c | 59 ++++++++++++++++++++++++++++++++++++-- - 1 files changed, 56 insertions(+), 3 deletions(-) - -diff --git a/src/modules/module-udev-detect.c b/src/modules/module-udev-detect.c -index 58635a5..1fe9fdc 100644 ---- a/src/modules/module-udev-detect.c -+++ b/src/modules/module-udev-detect.c -@@ -103,13 +103,17 @@ static const char *path_get_card_id(const char *path) { - return e + 5; - } - -+static const char *pa_udev_get_sysattr(const char *card_idx, const char *name); -+ - static pa_bool_t is_card_busy(const char *id) { -- char *card_path = NULL, *pcm_path = NULL, *sub_status = NULL; -+ const char *pcm_class; -+ char *card_path = NULL, *pcm_path = NULL, *sub_status = NULL, -+ *sysfs_path = NULL; - DIR *card_dir = NULL, *pcm_dir = NULL; - FILE *status_file = NULL; - size_t len; - struct dirent *space = NULL, *de; -- pa_bool_t busy = FALSE; -+ pa_bool_t busy = FALSE, is_modem = FALSE; - int r; - - pa_assert(id); -@@ -127,6 +131,17 @@ static pa_bool_t is_card_busy(const char *id) { - len = offsetof(struct dirent, d_name) + fpathconf(dirfd(card_dir), _PC_NAME_MAX) + 1; - space = pa_xmalloc(len); - -+ /* Also check /sys/class/sound/card.../pcmC...D6p/pcm_class. An HDA -+ * modem can be used simultaneously with generic playback/record. */ -+ -+ pa_xfree(sysfs_path); -+ sysfs_path = pa_sprintf_malloc("pcmC%sD6p/pcm_class", id); -+ -+ pcm_class = pa_udev_get_sysattr(id, sysfs_path); -+ -+ if (pcm_class && pa_streq(pcm_class, "modem")) -+ is_modem = TRUE; -+ - for (;;) { - de = NULL; - -@@ -182,7 +197,7 @@ static pa_bool_t is_card_busy(const char *id) { - continue; - } - -- if (!pa_streq(line, "closed\n")) { -+ if (!is_modem && !pa_streq(line, "closed\n")) { - busy = TRUE; - break; - } -@@ -193,6 +208,7 @@ fail: - - pa_xfree(card_path); - pa_xfree(pcm_path); -+ pa_xfree(sysfs_path); - pa_xfree(sub_status); - pa_xfree(space); - -@@ -594,6 +610,43 @@ static int setup_inotify(struct userdata *u) { - return 0; - } - -+static const char *pa_udev_get_sysattr(const char *card_idx, const char *name) { -+ struct udev *udev; -+ struct udev_device *card = NULL; -+ char *t, *r = NULL; -+ const char *v; -+ -+ pa_assert(card_idx); -+ pa_assert(name); -+ -+ if (!(udev = udev_new())) { -+ pa_log_error("Failed to allocate udev context."); -+ goto finish; -+ } -+ -+ t = pa_sprintf_malloc("%s/class/sound/card%s", udev_get_sys_path(udev), card_idx); -+ card = udev_device_new_from_syspath(udev, t); -+ pa_xfree(t); -+ -+ if (!card) { -+ pa_log_error("Failed to get card object."); -+ goto finish; -+ } -+ -+ if ((v = udev_device_get_sysattr_value(card, name)) && *v) -+ r = pa_xstrdup(v); -+ -+finish: -+ -+ if (card) -+ udev_device_unref(card); -+ -+ if (udev) -+ udev_unref(udev); -+ -+ return r; -+} -+ - int pa__init(pa_module *m) { - struct userdata *u = NULL; - pa_modargs *ma; --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0018-udev-rework-modem-detection-a-bit.diff b/packages/audio/pulseaudio/patches/0018-udev-rework-modem-detection-a-bit.diff deleted file mode 100644 index 8e45a4b1a4..0000000000 --- a/packages/audio/pulseaudio/patches/0018-udev-rework-modem-detection-a-bit.diff +++ /dev/null @@ -1,182 +0,0 @@ -From acb4996203f6723d92a9b0df4e60db83c65116fc Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Thu, 14 Jan 2010 02:06:52 +0100 -Subject: [PATCH 18/62] udev: rework modem detection a bit - -Check every single pcm device of a card whether it is a modem. ---- - src/modules/module-udev-detect.c | 117 ++++++++++++++++++++------------------ - 1 files changed, 62 insertions(+), 55 deletions(-) - -diff --git a/src/modules/module-udev-detect.c b/src/modules/module-udev-detect.c -index 1fe9fdc..b8568b2 100644 ---- a/src/modules/module-udev-detect.c -+++ b/src/modules/module-udev-detect.c -@@ -103,17 +103,70 @@ static const char *path_get_card_id(const char *path) { - return e + 5; - } - --static const char *pa_udev_get_sysattr(const char *card_idx, const char *name); -+static char *card_get_sysattr(const char *card_idx, const char *name) { -+ struct udev *udev; -+ struct udev_device *card = NULL; -+ char *t, *r = NULL; -+ const char *v; -+ -+ pa_assert(card_idx); -+ pa_assert(name); -+ -+ if (!(udev = udev_new())) { -+ pa_log_error("Failed to allocate udev context."); -+ goto finish; -+ } -+ -+ t = pa_sprintf_malloc("%s/class/sound/card%s", udev_get_sys_path(udev), card_idx); -+ card = udev_device_new_from_syspath(udev, t); -+ pa_xfree(t); -+ -+ if (!card) { -+ pa_log_error("Failed to get card object."); -+ goto finish; -+ } -+ -+ if ((v = udev_device_get_sysattr_value(card, name)) && *v) -+ r = pa_xstrdup(v); -+ -+finish: -+ -+ if (card) -+ udev_device_unref(card); -+ -+ if (udev) -+ udev_unref(udev); -+ -+ return r; -+} -+ -+static pa_bool_t pcm_is_modem(const char *card_idx, const char *pcm) { -+ char *sysfs_path, *pcm_class; -+ pa_bool_t is_modem; -+ -+ pa_assert(card_idx); -+ pa_assert(pcm); -+ -+ /* Check /sys/class/sound/card.../pcmC...../pcm_class. An HDA -+ * modem can be used simultaneously with generic -+ * playback/record. */ -+ -+ sysfs_path = pa_sprintf_malloc("pcmC%sD%s/pcm_class", card_idx, pcm); -+ pcm_class = card_get_sysattr(card_idx, sysfs_path); -+ is_modem = pcm_class && pa_streq(pcm_class, "modem"); -+ pa_xfree(pcm_class); -+ pa_xfree(sysfs_path); -+ -+ return is_modem; -+} - - static pa_bool_t is_card_busy(const char *id) { -- const char *pcm_class; -- char *card_path = NULL, *pcm_path = NULL, *sub_status = NULL, -- *sysfs_path = NULL; -+ char *card_path = NULL, *pcm_path = NULL, *sub_status = NULL; - DIR *card_dir = NULL, *pcm_dir = NULL; - FILE *status_file = NULL; - size_t len; - struct dirent *space = NULL, *de; -- pa_bool_t busy = FALSE, is_modem = FALSE; -+ pa_bool_t busy = FALSE; - int r; - - pa_assert(id); -@@ -131,17 +184,6 @@ static pa_bool_t is_card_busy(const char *id) { - len = offsetof(struct dirent, d_name) + fpathconf(dirfd(card_dir), _PC_NAME_MAX) + 1; - space = pa_xmalloc(len); - -- /* Also check /sys/class/sound/card.../pcmC...D6p/pcm_class. An HDA -- * modem can be used simultaneously with generic playback/record. */ -- -- pa_xfree(sysfs_path); -- sysfs_path = pa_sprintf_malloc("pcmC%sD6p/pcm_class", id); -- -- pcm_class = pa_udev_get_sysattr(id, sysfs_path); -- -- if (pcm_class && pa_streq(pcm_class, "modem")) -- is_modem = TRUE; -- - for (;;) { - de = NULL; - -@@ -156,6 +198,9 @@ static pa_bool_t is_card_busy(const char *id) { - if (!pa_startswith(de->d_name, "pcm")) - continue; - -+ if (pcm_is_modem(id, de->d_name + 3)) -+ continue; -+ - pa_xfree(pcm_path); - pcm_path = pa_sprintf_malloc("%s/%s", card_path, de->d_name); - -@@ -197,7 +242,7 @@ static pa_bool_t is_card_busy(const char *id) { - continue; - } - -- if (!is_modem && !pa_streq(line, "closed\n")) { -+ if (!pa_streq(line, "closed\n")) { - busy = TRUE; - break; - } -@@ -208,7 +253,6 @@ fail: - - pa_xfree(card_path); - pa_xfree(pcm_path); -- pa_xfree(sysfs_path); - pa_xfree(sub_status); - pa_xfree(space); - -@@ -610,43 +654,6 @@ static int setup_inotify(struct userdata *u) { - return 0; - } - --static const char *pa_udev_get_sysattr(const char *card_idx, const char *name) { -- struct udev *udev; -- struct udev_device *card = NULL; -- char *t, *r = NULL; -- const char *v; -- -- pa_assert(card_idx); -- pa_assert(name); -- -- if (!(udev = udev_new())) { -- pa_log_error("Failed to allocate udev context."); -- goto finish; -- } -- -- t = pa_sprintf_malloc("%s/class/sound/card%s", udev_get_sys_path(udev), card_idx); -- card = udev_device_new_from_syspath(udev, t); -- pa_xfree(t); -- -- if (!card) { -- pa_log_error("Failed to get card object."); -- goto finish; -- } -- -- if ((v = udev_device_get_sysattr_value(card, name)) && *v) -- r = pa_xstrdup(v); -- --finish: -- -- if (card) -- udev_device_unref(card); -- -- if (udev) -- udev_unref(udev); -- -- return r; --} -- - int pa__init(pa_module *m) { - struct userdata *u = NULL; - pa_modargs *ma; --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0019-daemon-first-take-name-on-the-bus-then-return-in-sta.diff b/packages/audio/pulseaudio/patches/0019-daemon-first-take-name-on-the-bus-then-return-in-sta.diff deleted file mode 100644 index 2315a30dc7..0000000000 --- a/packages/audio/pulseaudio/patches/0019-daemon-first-take-name-on-the-bus-then-return-in-sta.diff +++ /dev/null @@ -1,39 +0,0 @@ -From 93cb75d78ed82c40e525a8b30f1ead147ad35ead Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Thu, 14 Jan 2010 02:33:49 +0100 -Subject: [PATCH 19/62] daemon: first take name on the bus, then return in starter process - -http://pulseaudio.org/ticket/748 ---- - src/daemon/main.c | 8 ++++---- - 1 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/src/daemon/main.c b/src/daemon/main.c -index eafd72a..c7e202a 100644 ---- a/src/daemon/main.c -+++ b/src/daemon/main.c -@@ -952,6 +952,10 @@ int main(int argc, char *argv[]) { - goto finish; - } - -+#ifdef HAVE_DBUS -+ dbus = register_dbus(c); -+#endif -+ - #ifdef HAVE_FORK - if (daemon_pipe[1] >= 0) { - int ok = 0; -@@ -961,10 +965,6 @@ int main(int argc, char *argv[]) { - } - #endif - --#ifdef HAVE_DBUS -- dbus = register_dbus(c); --#endif -- - pa_log_info(_("Daemon startup complete.")); - - retval = 0; --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0020-alsa-cover-bass-boost-mixer-element.diff b/packages/audio/pulseaudio/patches/0020-alsa-cover-bass-boost-mixer-element.diff deleted file mode 100644 index 8ba6278976..0000000000 --- a/packages/audio/pulseaudio/patches/0020-alsa-cover-bass-boost-mixer-element.diff +++ /dev/null @@ -1,49 +0,0 @@ -From 48e0f6808bcc8e07622e4a45b3aabfc4679e9966 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Thu, 14 Jan 2010 02:53:50 +0100 -Subject: [PATCH 20/62] alsa: cover bass boost mixer element - -http://pulseaudio.org/ticket/740 ---- - src/modules/alsa/alsa-mixer.c | 2 ++ - .../alsa/mixer/paths/analog-output.conf.common | 11 +++++++++++ - 2 files changed, 13 insertions(+), 0 deletions(-) - -diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c -index 8b13239..8bbd1f5 100644 ---- a/src/modules/alsa/alsa-mixer.c -+++ b/src/modules/alsa/alsa-mixer.c -@@ -1713,6 +1713,8 @@ static int option_verify(pa_alsa_option *o) { - { "input-boost-off", N_("No Boost") }, - { "output-amplifier-on", N_("Amplifier") }, - { "output-amplifier-off", N_("No Amplifier") }, -+ { "output-bass-boost-on", N_("Bass Boost") }, -+ { "output-bass-boost-off", N_("No Bass Boost") }, - { "output-speaker", N_("Speaker") }, - { "output-headphones", N_("Headphones") } - }; -diff --git a/src/modules/alsa/mixer/paths/analog-output.conf.common b/src/modules/alsa/mixer/paths/analog-output.conf.common -index fd7f0cf..6131da5 100644 ---- a/src/modules/alsa/mixer/paths/analog-output.conf.common -+++ b/src/modules/alsa/mixer/paths/analog-output.conf.common -@@ -110,6 +110,17 @@ priority = 10 - name = output-amplifier-off - priority = 0 - -+[Element Bass Boost] -+switch = select -+ -+[Option Bass Boost:on] -+name = output-bass-boost-on -+priority = 0 -+ -+[Option Bass Boost:off] -+name = output-bass-boost-off -+priority = 10 -+ - ;;; 'Analog Output' - - [Element Analog Output] --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0021-Mark-shared-variables-as-volatile.diff b/packages/audio/pulseaudio/patches/0021-Mark-shared-variables-as-volatile.diff deleted file mode 100644 index cfce6b6957..0000000000 --- a/packages/audio/pulseaudio/patches/0021-Mark-shared-variables-as-volatile.diff +++ /dev/null @@ -1,55 +0,0 @@ -From 366e6d7e90d3bebc98a1af3cfb04b4cfc8cff6f5 Mon Sep 17 00:00:00 2001 -From: Arun Raghavan -Date: Sun, 6 Dec 2009 12:20:53 +0530 -Subject: [PATCH 21/62] Mark shared variables as volatile - -'n_waiting' and 'n_waiting_for_accept' may be accessed from mulitple -threads, and thus need to be marked as volatile to suppres certain -compiler optimisations. All uses are protected by a mutex, so we don't -need to worry about cache issues (added documentation for this as well). - -This addresses bug #738. ---- - src/pulse/thread-mainloop.c | 5 ++++- - 1 files changed, 4 insertions(+), 1 deletions(-) - -diff --git a/src/pulse/thread-mainloop.c b/src/pulse/thread-mainloop.c -index a2b98ce..14ed926 100644 ---- a/src/pulse/thread-mainloop.c -+++ b/src/pulse/thread-mainloop.c -@@ -51,7 +51,7 @@ - - struct pa_threaded_mainloop { - pa_mainloop *real_mainloop; -- int n_waiting, n_waiting_for_accept; -+ volatile int n_waiting, n_waiting_for_accept; - - pa_thread* thread; - pa_mutex* mutex; -@@ -185,6 +185,7 @@ void pa_threaded_mainloop_unlock(pa_threaded_mainloop *m) { - pa_mutex_unlock(m->mutex); - } - -+/* Called with the lock taken */ - void pa_threaded_mainloop_signal(pa_threaded_mainloop *m, int wait_for_accept) { - pa_assert(m); - -@@ -198,6 +199,7 @@ void pa_threaded_mainloop_signal(pa_threaded_mainloop *m, int wait_for_accept) { - } - } - -+/* Called with the lock taken */ - void pa_threaded_mainloop_wait(pa_threaded_mainloop *m) { - pa_assert(m); - -@@ -212,6 +214,7 @@ void pa_threaded_mainloop_wait(pa_threaded_mainloop *m) { - m->n_waiting --; - } - -+/* Called with the lock taken */ - void pa_threaded_mainloop_accept(pa_threaded_mainloop *m) { - pa_assert(m); - --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0022-udev-use-ID_MODEL_ENC-instead-of-ID_MODEL-if-it-is-s.diff b/packages/audio/pulseaudio/patches/0022-udev-use-ID_MODEL_ENC-instead-of-ID_MODEL-if-it-is-s.diff deleted file mode 100644 index cd7a968785..0000000000 --- a/packages/audio/pulseaudio/patches/0022-udev-use-ID_MODEL_ENC-instead-of-ID_MODEL-if-it-is-s.diff +++ /dev/null @@ -1,153 +0,0 @@ -From e129f8577a405266a5b7d4a7ee75bd56dd43953e Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Thu, 14 Jan 2010 20:31:00 +0100 -Subject: [PATCH 22/62] udev: use ID_MODEL_ENC instead of ID_MODEL if it is set - -That way we should be able to make use of the nicer USB strings the USB -hw provides. - -Fixes the issues pointed out in: - -https://tango.0pointer.de/pipermail/pulseaudio-discuss/2010-January/006248.html ---- - src/modules/udev-util.c | 110 +++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 110 insertions(+), 0 deletions(-) - -diff --git a/src/modules/udev-util.c b/src/modules/udev-util.c -index cc82446..eee5409 100644 ---- a/src/modules/udev-util.c -+++ b/src/modules/udev-util.c -@@ -58,6 +58,112 @@ static int read_id(struct udev_device *d, const char *n) { - return u; - } - -+static int dehex(char x) { -+ if (x >= '0' && x <= '9') -+ return x - '0'; -+ -+ if (x >= 'A' && x <= 'F') -+ return x - 'A'; -+ -+ if (x >= 'a' && x <= 'f') -+ return x - 'a'; -+ -+ return -1; -+} -+ -+static void proplist_sets_unescape(pa_proplist *p, const char *prop, const char *s) { -+ const char *f; -+ char *t, *r; -+ int c; -+ -+ enum { -+ TEXT, -+ BACKSLASH, -+ EX, -+ FIRST -+ } state = TEXT; -+ -+ /* The resulting string is definitely shorter than the source string */ -+ r = pa_xnew(char, strlen(s)+1); -+ -+ for (f = s, t = r; *f; f++) { -+ -+ switch (state) { -+ -+ case TEXT: -+ if (*f == '\\') -+ state = BACKSLASH; -+ else -+ *(t++) = *f; -+ break; -+ -+ case BACKSLASH: -+ if (*f == 'x') -+ state = EX; -+ else { -+ *(t++) = '\\'; -+ *(t++) = *f; -+ state = TEXT; -+ } -+ break; -+ -+ case EX: -+ c = dehex(*f); -+ -+ if (c < 0) { -+ *(t++) = '\\'; -+ *(t++) = 'x'; -+ *(t++) = *f; -+ state = TEXT; -+ } else -+ state = FIRST; -+ -+ break; -+ -+ case FIRST: { -+ int d = dehex(*f); -+ -+ if (d < 0) { -+ *(t++) = '\\'; -+ *(t++) = 'x'; -+ *(t++) = *(f-1); -+ *(t++) = *f; -+ } else -+ *(t++) = (char) (c << 4) | d; -+ -+ state = TEXT; -+ break; -+ } -+ } -+ } -+ -+ switch (state) { -+ -+ case TEXT: -+ break; -+ -+ case BACKSLASH: -+ *(t++) = '\\'; -+ break; -+ -+ case EX: -+ *(t++) = '\\'; -+ *(t++) = 'x'; -+ break; -+ -+ case FIRST: -+ *(t++) = '\\'; -+ *(t++) = 'x'; -+ *(t++) = *(f-1); -+ break; -+ } -+ -+ *t = 0; -+ -+ pa_proplist_sets(p, prop, r); -+ pa_xfree(r); -+} -+ - int pa_udev_get_info(int card_idx, pa_proplist *p) { - int r = -1; - struct udev *udev; -@@ -107,6 +213,8 @@ int pa_udev_get_info(int card_idx, pa_proplist *p) { - if (!pa_proplist_contains(p, PA_PROP_DEVICE_VENDOR_NAME)) { - if ((v = udev_device_get_property_value(card, "ID_VENDOR_FROM_DATABASE")) && *v) - pa_proplist_sets(p, PA_PROP_DEVICE_VENDOR_NAME, v); -+ else if ((v = udev_device_get_property_value(card, "ID_VENDOR_ENC")) && *v) -+ proplist_sets_unescape(p, PA_PROP_DEVICE_VENDOR_NAME, v); - else if ((v = udev_device_get_property_value(card, "ID_VENDOR")) && *v) - pa_proplist_sets(p, PA_PROP_DEVICE_VENDOR_NAME, v); - } -@@ -118,6 +226,8 @@ int pa_udev_get_info(int card_idx, pa_proplist *p) { - if (!pa_proplist_contains(p, PA_PROP_DEVICE_PRODUCT_NAME)) { - if ((v = udev_device_get_property_value(card, "ID_MODEL_FROM_DATABASE")) && *v) - pa_proplist_sets(p, PA_PROP_DEVICE_PRODUCT_NAME, v); -+ else if ((v = udev_device_get_property_value(card, "ID_MODEL_ENC")) && *v) -+ proplist_sets_unescape(p, PA_PROP_DEVICE_PRODUCT_NAME, v); - else if ((v = udev_device_get_property_value(card, "ID_MODEL")) && *v) - pa_proplist_sets(p, PA_PROP_DEVICE_PRODUCT_NAME, v); - } --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0023-pacat-allow-configuration-of-latency-in-msec.diff b/packages/audio/pulseaudio/patches/0023-pacat-allow-configuration-of-latency-in-msec.diff deleted file mode 100644 index 5cf591475d..0000000000 --- a/packages/audio/pulseaudio/patches/0023-pacat-allow-configuration-of-latency-in-msec.diff +++ /dev/null @@ -1,268 +0,0 @@ -From 27df02779a26e0356497a39bee04a28138ba52af Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Fri, 15 Jan 2010 01:25:21 +0100 -Subject: [PATCH 23/62] pacat: allow configuration of latency in msec - ---- - man/pacat.1.xml.in | 96 +++++++++++++++++++++++++++++++++++++++++++-------- - src/utils/pacat.c | 46 ++++++++++++++++++++----- - 2 files changed, 118 insertions(+), 24 deletions(-) - -diff --git a/man/pacat.1.xml.in b/man/pacat.1.xml.in -index 68a3a12..2e27450 100644 ---- a/man/pacat.1.xml.in -+++ b/man/pacat.1.xml.in -@@ -21,18 +21,22 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA. - --> - -- -+ - - -+ paplay [options] [FILE] -+ parecord [options] [FILE] - pacat [options] [FILE] - parec [options] [FILE] -- paplay --help -- paplay --version -+ pamon [options] [FILE] -+ pacat --help -+ pacat --version - - - -

pacat is a simple tool for playing back or -- capturing raw audio files on a PulseAudio sound server.

-+ capturing raw or encoded audio files on a PulseAudio sound -+ server.

- - - -@@ -52,13 +56,13 @@ USA. - - - - - - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - - -
-@@ -178,7 +244,7 @@ USA. - -
-

-- , -+ , -

-
- -diff --git a/src/utils/pacat.c b/src/utils/pacat.c -index 5f29ba3..a5d2e9a 100644 ---- a/src/utils/pacat.c -+++ b/src/utils/pacat.c -@@ -45,6 +45,7 @@ - #include - #include - #include -+#include - - #define TIME_EVENT_USEC 50000 - -@@ -86,6 +87,7 @@ static sf_count_t (*writef_function)(SNDFILE *_sndfile, const void *ptr, sf_coun - static pa_stream_flags_t flags = 0; - - static size_t latency = 0, process_time = 0; -+static int32_t latency_msec = 0, process_time_msec = 0; - - static pa_bool_t raw = TRUE; - static int file_format = -1; -@@ -434,19 +436,25 @@ static void context_state_callback(pa_context *c, void *userdata) { - buffer_attr.maxlength = (uint32_t) -1; - buffer_attr.prebuf = (uint32_t) -1; - -- if (latency > 0) { -+ if (latency_msec > 0) { -+ buffer_attr.fragsize = buffer_attr.tlength = pa_usec_to_bytes(latency_msec * PA_USEC_PER_MSEC, &sample_spec); -+ flags |= PA_STREAM_ADJUST_LATENCY; -+ } else if (latency > 0) { - buffer_attr.fragsize = buffer_attr.tlength = (uint32_t) latency; -- buffer_attr.minreq = (uint32_t) process_time; - flags |= PA_STREAM_ADJUST_LATENCY; -- } else { -- buffer_attr.tlength = (uint32_t) -1; -+ } else -+ buffer_attr.fragsize = buffer_attr.tlength = (uint32_t) -1; -+ -+ if (process_time_msec > 0) { -+ buffer_attr.minreq = pa_usec_to_bytes(process_time_msec * PA_USEC_PER_MSEC, &sample_spec); -+ } else if (process_time > 0) -+ buffer_attr.minreq = (uint32_t) process_time; -+ else - buffer_attr.minreq = (uint32_t) -1; -- buffer_attr.fragsize = (uint32_t) -1; -- } - - if (mode == PLAYBACK) { - pa_cvolume cv; -- if (pa_stream_connect_playback(stream, device, latency > 0 ? &buffer_attr : NULL, flags, volume_is_set ? pa_cvolume_set(&cv, sample_spec.channels, volume) : NULL, NULL) < 0) { -+ if (pa_stream_connect_playback(stream, device, &buffer_attr, flags, volume_is_set ? pa_cvolume_set(&cv, sample_spec.channels, volume) : NULL, NULL) < 0) { - pa_log(_("pa_stream_connect_playback() failed: %s"), pa_strerror(pa_context_errno(c))); - goto fail; - } -@@ -634,9 +642,11 @@ static void help(const char *argv0) { - " --no-remap Map channels by index instead of name.\n" - " --latency=BYTES Request the specified latency in bytes.\n" - " --process-time=BYTES Request the specified process time per request in bytes.\n" -+ " --latency-msec=MSEC Request the specified latency in msec.\n" -+ " --process-time-msec=MSEC Request the specified process time per request in msec.\n" - " --property=PROPERTY=VALUE Set the specified property to the specified value.\n" - " --raw Record/play raw PCM data.\n" -- " --file-format=FFORMAT Record/play formatted PCM data.\n" -+ " --file-format[=FFORMAT] Record/play formatted PCM data.\n" - " --list-file-formats List available file formats.\n") - , argv0); - } -@@ -659,7 +669,9 @@ enum { - ARG_RAW, - ARG_PROPERTY, - ARG_FILE_FORMAT, -- ARG_LIST_FILE_FORMATS -+ ARG_LIST_FILE_FORMATS, -+ ARG_LATENCY_MSEC, -+ ARG_PROCESS_TIME_MSEC - }; - - int main(int argc, char *argv[]) { -@@ -695,6 +707,8 @@ int main(int argc, char *argv[]) { - {"raw", 0, NULL, ARG_RAW}, - {"file-format", 2, NULL, ARG_FILE_FORMAT}, - {"list-file-formats", 0, NULL, ARG_LIST_FILE_FORMATS}, -+ {"latency-msec", 1, NULL, ARG_LATENCY_MSEC}, -+ {"process-time-msec", 1, NULL, ARG_PROCESS_TIME_MSEC}, - {NULL, 0, NULL, 0} - }; - -@@ -854,6 +868,20 @@ int main(int argc, char *argv[]) { - } - break; - -+ case ARG_LATENCY_MSEC: -+ if (((latency_msec = (int32_t) atoi(optarg))) <= 0) { -+ pa_log(_("Invalid latency specification '%s'"), optarg); -+ goto quit; -+ } -+ break; -+ -+ case ARG_PROCESS_TIME_MSEC: -+ if (((process_time_msec = (int32_t) atoi(optarg))) <= 0) { -+ pa_log(_("Invalid process time specification '%s'"), optarg); -+ goto quit; -+ } -+ break; -+ - case ARG_PROPERTY: { - char *t; - --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0024-client-implement-PULSE_LATENCY_MSEC.diff b/packages/audio/pulseaudio/patches/0024-client-implement-PULSE_LATENCY_MSEC.diff deleted file mode 100644 index 37cb5d1f3b..0000000000 --- a/packages/audio/pulseaudio/patches/0024-client-implement-PULSE_LATENCY_MSEC.diff +++ /dev/null @@ -1,107 +0,0 @@ -From fa64230107bd348ceda271dc9db74765c694d311 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Fri, 15 Jan 2010 01:25:42 +0100 -Subject: [PATCH 24/62] client: implement $PULSE_LATENCY_MSEC - -This allows easy overriding of a clients latency setting for debugging -purposes. - -http://pulseaudio.org/ticket/753 ---- - src/pulse/stream.c | 37 +++++++++++++++++++++++++++++++------ - 1 files changed, 31 insertions(+), 6 deletions(-) - -diff --git a/src/pulse/stream.c b/src/pulse/stream.c -index 79b2868..daeb53a 100644 ---- a/src/pulse/stream.c -+++ b/src/pulse/stream.c -@@ -39,6 +39,7 @@ - #include - #include - #include -+#include - - #include "fork-detect.h" - #include "internal.h" -@@ -855,10 +856,28 @@ static void create_stream_complete(pa_stream *s) { - check_smoother_status(s, TRUE, FALSE, FALSE); - } - --static void automatic_buffer_attr(pa_stream *s, pa_buffer_attr *attr, const pa_sample_spec *ss) { -+static void patch_buffer_attr(pa_stream *s, pa_buffer_attr *attr, pa_stream_flags_t *flags) { -+ const char *e; -+ - pa_assert(s); - pa_assert(attr); -- pa_assert(ss); -+ -+ if ((e = getenv("PULSE_LATENCY_MSEC"))) { -+ uint32_t ms; -+ -+ if (pa_atou(e, &ms) < 0 || ms <= 0) -+ pa_log_debug("Failed to parse $PULSE_LATENCY_MSEC: %s", e); -+ else { -+ attr->maxlength = (uint32_t) -1; -+ attr->tlength = pa_usec_to_bytes(ms * PA_USEC_PER_MSEC, &s->sample_spec); -+ attr->minreq = (uint32_t) -1; -+ attr->prebuf = (uint32_t) -1; -+ attr->fragsize = attr->tlength; -+ } -+ -+ if (flags) -+ *flags |= PA_STREAM_ADJUST_LATENCY; -+ } - - if (s->context->version >= 13) - return; -@@ -873,7 +892,7 @@ static void automatic_buffer_attr(pa_stream *s, pa_buffer_attr *attr, const pa_s - attr->maxlength = 4*1024*1024; /* 4MB is the maximum queue length PulseAudio <= 0.9.9 supported. */ - - if (attr->tlength == (uint32_t) -1) -- attr->tlength = (uint32_t) pa_usec_to_bytes(250*PA_USEC_PER_MSEC, ss); /* 250ms of buffering */ -+ attr->tlength = (uint32_t) pa_usec_to_bytes(250*PA_USEC_PER_MSEC, &s->sample_spec); /* 250ms of buffering */ - - if (attr->minreq == (uint32_t) -1) - attr->minreq = (attr->tlength)/5; /* Ask for more data when there are only 200ms left in the playback buffer */ -@@ -1064,15 +1083,16 @@ static int create_stream( - pa_stream_ref(s); - - s->direction = direction; -- s->flags = flags; -- s->corked = !!(flags & PA_STREAM_START_CORKED); - - if (sync_stream) - s->syncid = sync_stream->syncid; - - if (attr) - s->buffer_attr = *attr; -- automatic_buffer_attr(s, &s->buffer_attr, &s->sample_spec); -+ patch_buffer_attr(s, &s->buffer_attr, &flags); -+ -+ s->flags = flags; -+ s->corked = !!(flags & PA_STREAM_START_CORKED); - - if (flags & PA_STREAM_INTERPOLATE_TIMING) { - pa_usec_t x; -@@ -2412,6 +2432,7 @@ pa_operation* pa_stream_set_buffer_attr(pa_stream *s, const pa_buffer_attr *attr - pa_operation *o; - pa_tagstruct *t; - uint32_t tag; -+ pa_buffer_attr copy; - - pa_assert(s); - pa_assert(PA_REFCNT_VALUE(s) >= 1); -@@ -2435,6 +2456,10 @@ pa_operation* pa_stream_set_buffer_attr(pa_stream *s, const pa_buffer_attr *attr - &tag); - pa_tagstruct_putu32(t, s->channel); - -+ copy = *attr; -+ patch_buffer_attr(s, ©, NULL); -+ attr = © -+ - pa_tagstruct_putu32(t, attr->maxlength); - - if (s->direction == PA_STREAM_PLAYBACK) --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0025-client-include-dolby-channel-names-in-comments.diff b/packages/audio/pulseaudio/patches/0025-client-include-dolby-channel-names-in-comments.diff deleted file mode 100644 index 8ecba0ac3e..0000000000 --- a/packages/audio/pulseaudio/patches/0025-client-include-dolby-channel-names-in-comments.diff +++ /dev/null @@ -1,57 +0,0 @@ -From 86144ee6cb6af54903a8d3d8395751ae26a4d134 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Thu, 14 Jan 2010 21:32:26 +0100 -Subject: [PATCH 25/62] client: include dolby channel names in comments - ---- - src/pulse/channelmap.h | 20 ++++++++++---------- - 1 files changed, 10 insertions(+), 10 deletions(-) - -diff --git a/src/pulse/channelmap.h b/src/pulse/channelmap.h -index 469effc..d1d5c8b 100644 ---- a/src/pulse/channelmap.h -+++ b/src/pulse/channelmap.h -@@ -74,9 +74,9 @@ typedef enum pa_channel_position { - PA_CHANNEL_POSITION_INVALID = -1, - PA_CHANNEL_POSITION_MONO = 0, - -- PA_CHANNEL_POSITION_FRONT_LEFT, /* Apple calls this 'Left' */ -- PA_CHANNEL_POSITION_FRONT_RIGHT, /* Apple calls this 'Right' */ -- PA_CHANNEL_POSITION_FRONT_CENTER, /* Apple calls this 'Center' */ -+ PA_CHANNEL_POSITION_FRONT_LEFT, /* Apple, Dolby call this 'Left' */ -+ PA_CHANNEL_POSITION_FRONT_RIGHT, /* Apple, Dolby call this 'Right' */ -+ PA_CHANNEL_POSITION_FRONT_CENTER, /* Apple, Dolby call this 'Center' */ - - /** \cond fulldocs */ - PA_CHANNEL_POSITION_LEFT = PA_CHANNEL_POSITION_FRONT_LEFT, -@@ -84,20 +84,20 @@ typedef enum pa_channel_position { - PA_CHANNEL_POSITION_CENTER = PA_CHANNEL_POSITION_FRONT_CENTER, - /** \endcond */ - -- PA_CHANNEL_POSITION_REAR_CENTER, /* Microsoft calls this 'Back Center', Apple calls this 'Center Surround' */ -- PA_CHANNEL_POSITION_REAR_LEFT, /* Microsoft calls this 'Back Left', Apple calls this 'Left Surround' */ -- PA_CHANNEL_POSITION_REAR_RIGHT, /* Microsoft calls this 'Back Right', Apple calls this 'Right Surround' */ -+ PA_CHANNEL_POSITION_REAR_CENTER, /* Microsoft calls this 'Back Center', Apple calls this 'Center Surround', Dolby calls this 'Surround Rear Center' */ -+ PA_CHANNEL_POSITION_REAR_LEFT, /* Microsoft calls this 'Back Left', Apple calls this 'Left Surround' (!), Dolby calls this 'Surround Rear Left' */ -+ PA_CHANNEL_POSITION_REAR_RIGHT, /* Microsoft calls this 'Back Right', Apple calls this 'Right Surround' (!), Dolby calls this 'Surround Rear Right' */ - - PA_CHANNEL_POSITION_LFE, /* Microsoft calls this 'Low Frequency', Apple calls this 'LFEScreen' */ - /** \cond fulldocs */ - PA_CHANNEL_POSITION_SUBWOOFER = PA_CHANNEL_POSITION_LFE, - /** \endcond */ - -- PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER, /* Apple calls this 'Left Center' */ -- PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER, /* Apple calls this 'Right Center */ -+ PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER, /* Apple, Dolby call this 'Left Center' */ -+ PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER, /* Apple, Dolby call this 'Right Center */ - -- PA_CHANNEL_POSITION_SIDE_LEFT, /* Apple calls this 'Left Surround Direct' */ -- PA_CHANNEL_POSITION_SIDE_RIGHT, /* Apple calls this 'Right Surround Direct' */ -+ PA_CHANNEL_POSITION_SIDE_LEFT, /* Apple calls this 'Left Surround Direct', Dolby calls this 'Surround Left' (!) */ -+ PA_CHANNEL_POSITION_SIDE_RIGHT, /* Apple calls this 'Right Surround Direct', Dolby calls this 'Surround Right' (!) */ - - PA_CHANNEL_POSITION_AUX0, - PA_CHANNEL_POSITION_AUX1, --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0026-alsa-add-profile-set-for-M-Audio-FastTrack-Pro-USB.diff b/packages/audio/pulseaudio/patches/0026-alsa-add-profile-set-for-M-Audio-FastTrack-Pro-USB.diff deleted file mode 100644 index 593952b3c7..0000000000 --- a/packages/audio/pulseaudio/patches/0026-alsa-add-profile-set-for-M-Audio-FastTrack-Pro-USB.diff +++ /dev/null @@ -1,116 +0,0 @@ -From 66e1a2d05139d7968d41d9f1a88c22093cdd04d5 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20K=C3=A5gedal?= -Date: Tue, 5 Jan 2010 20:14:11 +0100 -Subject: [PATCH 26/62] alsa: add profile set for M-Audio FastTrack Pro USB - ---- - .../alsa/mixer/profile-sets/90-pulseaudio.rules | 1 + - .../mixer/profile-sets/maudio-fasttrack-pro.conf | 85 ++++++++++++++++++++ - 2 files changed, 86 insertions(+), 0 deletions(-) - create mode 100644 src/modules/alsa/mixer/profile-sets/maudio-fasttrack-pro.conf - -diff --git a/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules b/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules -index ea1a2fe..b8e88d0 100644 ---- a/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules -+++ b/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules -@@ -22,5 +22,6 @@ KERNEL!="card*", GOTO="pulseaudio_end" - - SUBSYSTEMS=="usb", ATTRS{idVendor}=="17cc", ATTRS{idProduct}=="1978", ENV{PULSE_PROFILE_SET}="native-instruments-audio8dj.conf" - SUBSYSTEMS=="usb", ATTRS{idVendor}=="17cc", ATTRS{idProduct}=="0839", ENV{PULSE_PROFILE_SET}="native-instruments-audio4dj.conf" -+SUBSYSTEMS=="usb", ATTRS{idVendor}=="0763", ATTRS{idProduct}=="2012", ENV{PULSE_PROFILE_SET}="maudio-fasttrack-pro.conf" - - LABEL="pulseaudio_end" -diff --git a/src/modules/alsa/mixer/profile-sets/maudio-fasttrack-pro.conf b/src/modules/alsa/mixer/profile-sets/maudio-fasttrack-pro.conf -new file mode 100644 -index 0000000..75f5112 ---- /dev/null -+++ b/src/modules/alsa/mixer/profile-sets/maudio-fasttrack-pro.conf -@@ -0,0 +1,85 @@ -+# This file is part of PulseAudio. -+# -+# PulseAudio is free software; you can redistribute it and/or modify -+# it under the terms of the GNU Lesser General Public License as -+# published by the Free Software Foundation; either version 2.1 of the -+# License, or (at your option) any later version. -+# -+# PulseAudio is distributed in the hope that it will be useful, but -+# WITHOUT ANY WARRANTY; without even the implied warranty of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+# General Public License for more details. -+# -+# You should have received a copy of the GNU Lesser General Public License -+# along with PulseAudio; if not, write to the Free Software Foundation, -+# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ -+; M-Audio FastTrack Pro -+; -+; This card has one duplex stereo channel called A and an additional -+; stereo output channel called B. -+; -+; We knowingly only define a subset of the theoretically possible -+; mapping combinations as profiles here. -+; -+; See default.conf for an explanation on the directives used here. -+ -+[General] -+auto-profiles = no -+ -+[Mapping analog-stereo-a-output] -+description = Analog Stereo Channel A -+device-strings = hw:%f,0,0 -+channel-map = left,right -+direction = output -+ -+[Mapping analog-stereo-a-input] -+description = Analog Stereo Channel A -+device-strings = hw:%f,0,0 -+channel-map = left,right -+direction = input -+ -+[Mapping analog-stereo-b-output] -+description = Analog Stereo Channel B -+device-strings = hw:%f,1,0 -+channel-map = left,right -+direction = output -+ -+[Profile output:analog-stereo-all+input:analog-stereo-all] -+description = Analog Stereo Duplex Channel A, Analog Stereo output Channel B -+output-mappings = analog-stereo-a-output analog-stereo-b-output -+input-mappings = analog-stereo-a-input -+priority = 100 -+skip-probe = yes -+ -+[Profile output:analog-stereo-a-output+input:analog-stereo-a-input] -+description = Analog Stereo Duplex Channel A -+output-mappings = analog-stereo-a-output -+input-mappings = analog-stereo-a-input -+priority = 40 -+skip-probe = yes -+ -+[Profile output:analog-stereo-b+input:analog-stereo-b] -+description = Analog Stereo Output Channel B -+output-mappings = analog-stereo-b-output -+input-mappings = -+priority = 50 -+skip-probe = yes -+ -+[Profile output:analog-stereo-a] -+description = Analog Stereo Output Channel A -+output-mappings = analog-stereo-a-output -+priority = 5 -+skip-probe = yes -+ -+[Profile output:analog-stereo-b] -+description = Analog Stereo Output Channel B -+output-mappings = analog-stereo-b-output -+priority = 6 -+skip-probe = yes -+ -+[Profile input:analog-stereo-a] -+description = Analog Stereo Input Channel A -+input-mappings = analog-stereo-a-input -+priority = 2 -+skip-probe = yes --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0027-threaded-mainloop-Properly-initialise-m-n_waiting_fo.diff b/packages/audio/pulseaudio/patches/0027-threaded-mainloop-Properly-initialise-m-n_waiting_fo.diff deleted file mode 100644 index 333599145d..0000000000 --- a/packages/audio/pulseaudio/patches/0027-threaded-mainloop-Properly-initialise-m-n_waiting_fo.diff +++ /dev/null @@ -1,35 +0,0 @@ -From a2418effe7c4bc54390939ccd07dd6227e6cdfa5 Mon Sep 17 00:00:00 2001 -From: Daniel T Chen -Date: Mon, 4 Jan 2010 21:44:37 -0500 -Subject: [PATCH 27/62] threaded-mainloop: Properly initialise m->n_waiting_for_accept to prevent deadlock -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Compiler optimisations have been seen to initialise -m->n_waiting_for_accept to a positive non-zero value, so the while() in -pa_threaded_mainloop_signal() never proceeds. Fix this by properly -initializing m->n_waiting_for_accept in pa_threaded_mainloop_new(). - -Patch from Iain Bucław. - -https://bugs.launchpad.net/bugs/502992 ---- - src/pulse/thread-mainloop.c | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -diff --git a/src/pulse/thread-mainloop.c b/src/pulse/thread-mainloop.c -index 14ed926..1693404 100644 ---- a/src/pulse/thread-mainloop.c -+++ b/src/pulse/thread-mainloop.c -@@ -116,6 +116,7 @@ pa_threaded_mainloop *pa_threaded_mainloop_new(void) { - pa_mainloop_set_poll_func(m->real_mainloop, poll_func, m->mutex); - - m->n_waiting = 0; -+ m->n_waiting_for_accept = 0; - - return m; - } --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0028-udev-Use-SOUND_CLASS-instead-of-SOUND_FORM_FACTOR-wh.diff b/packages/audio/pulseaudio/patches/0028-udev-Use-SOUND_CLASS-instead-of-SOUND_FORM_FACTOR-wh.diff deleted file mode 100644 index eebd0f1685..0000000000 --- a/packages/audio/pulseaudio/patches/0028-udev-Use-SOUND_CLASS-instead-of-SOUND_FORM_FACTOR-wh.diff +++ /dev/null @@ -1,29 +0,0 @@ -From 8c7148a4eaecd687a004b0611748452fd4b41e92 Mon Sep 17 00:00:00 2001 -From: Daniel T Chen -Date: Mon, 4 Jan 2010 21:53:36 -0500 -Subject: [PATCH 28/62] udev: Use SOUND_CLASS instead of SOUND_FORM_FACTOR when checking for modem - -The fact whether an ALSA card is a modem is stored in the SOUND_CLASS, -not the SOUND_FORM_FACTOR property. So read it from there. - -Patch from Whoopie. ---- - src/modules/module-udev-detect.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/src/modules/module-udev-detect.c b/src/modules/module-udev-detect.c -index b8568b2..3cf3e58 100644 ---- a/src/modules/module-udev-detect.c -+++ b/src/modules/module-udev-detect.c -@@ -426,7 +426,7 @@ static void process_device(struct userdata *u, struct udev_device *dev) { - return; - } - -- if ((ff = udev_device_get_property_value(dev, "SOUND_FORM_FACTOR")) && -+ if ((ff = udev_device_get_property_value(dev, "SOUND_CLASS")) && - pa_streq(ff, "modem")) { - pa_log_debug("Ignoring %s, because it is a modem.", udev_device_get_devpath(dev)); - return; --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0029-More-src-pulsecore-cpu-arm.c-FTBFS-fixes.diff b/packages/audio/pulseaudio/patches/0029-More-src-pulsecore-cpu-arm.c-FTBFS-fixes.diff deleted file mode 100644 index d6edbf8ebc..0000000000 --- a/packages/audio/pulseaudio/patches/0029-More-src-pulsecore-cpu-arm.c-FTBFS-fixes.diff +++ /dev/null @@ -1,39 +0,0 @@ -From 09c416e11fe4f53c468f68ad0a67f4696241050a Mon Sep 17 00:00:00 2001 -From: Daniel T Chen -Date: Wed, 16 Dec 2009 23:55:05 -0500 -Subject: [PATCH 29/62] More src/pulsecore/cpu-arm.c FTBFS fixes - -Fix missing argument to pa_read(), and be consistent with declaration of -state variable in pa_cpu_init_arm(). - -Signed-off-by: Daniel T Chen ---- - src/pulsecore/cpu-arm.c | 5 +++-- - 1 files changed, 3 insertions(+), 2 deletions(-) - -diff --git a/src/pulsecore/cpu-arm.c b/src/pulsecore/cpu-arm.c -index 453b784..61299cc 100644 ---- a/src/pulsecore/cpu-arm.c -+++ b/src/pulsecore/cpu-arm.c -@@ -67,7 +67,7 @@ static char *get_cpuinfo(void) { - return NULL; - } - -- if ((n = pa_read(fd, cpuinfo, MAX_BUFFER-1)) < 0) { -+ if ((n = pa_read(fd, cpuinfo, MAX_BUFFER-1, NULL)) < 0) { - pa_xfree(cpuinfo); - pa_close(fd); - return NULL; -@@ -105,7 +105,8 @@ void pa_cpu_init_arm (void) { - } - /* get the CPU features */ - if ((line = get_cpuinfo_line (cpuinfo, "Features"))) { -- char *state = NULL, *current; -+ const char *state = NULL; -+ char *current; - - while ((current = pa_split_spaces (line, &state))) { - if (!strcmp (current, "vfp")) --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0030-Fix-the-following-warnings-which-now-cause-buildd-fa.diff b/packages/audio/pulseaudio/patches/0030-Fix-the-following-warnings-which-now-cause-buildd-fa.diff deleted file mode 100644 index c9f82bfdc3..0000000000 --- a/packages/audio/pulseaudio/patches/0030-Fix-the-following-warnings-which-now-cause-buildd-fa.diff +++ /dev/null @@ -1,33 +0,0 @@ -From fd5c802ecb5ae5ed9b294422410761126a37d1b3 Mon Sep 17 00:00:00 2001 -From: Daniel T Chen -Date: Wed, 16 Dec 2009 22:53:18 -0500 -Subject: [PATCH 30/62] Fix the following warnings (which now cause buildd failures in Ubuntu 10.04): - -pulsecore/cpu-arm.c: In function 'get_cpuinfo': -pulsecore/cpu-arm.c:70: warning: implicit declaration of function 'pa_read' [-Wimplicit-function-declaration] -pulsecore/cpu-arm.c:72: warning: implicit declaration of function 'pa_close' [-Wimplicit-function-declaration] -pulsecore/cpu-arm.c: In function 'pa_cpu_init_arm': -pulsecore/cpu-arm.c:110: warning: implicit declaration of function 'pa_split_spaces' [-Wimplicit-function-declaration] -pulsecore/cpu-arm.c:110: warning: assignment makes pointer from integer without a cast -Function `pa_split_spaces' implicitly converted to pointer at pulsecore/cpu-arm.c:110 - -Signed-off-by: Daniel T Chen ---- - src/pulsecore/cpu-arm.c | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -diff --git a/src/pulsecore/cpu-arm.c b/src/pulsecore/cpu-arm.c -index 61299cc..56d0bbc 100644 ---- a/src/pulsecore/cpu-arm.c -+++ b/src/pulsecore/cpu-arm.c -@@ -30,6 +30,7 @@ - #include - - #include -+#include - #include - - #include "cpu-arm.h" --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0031-libpulse-Store-pa_stream-pointers-to-hashmaps-instea.diff b/packages/audio/pulseaudio/patches/0031-libpulse-Store-pa_stream-pointers-to-hashmaps-instea.diff deleted file mode 100644 index 38ebc7c6b0..0000000000 --- a/packages/audio/pulseaudio/patches/0031-libpulse-Store-pa_stream-pointers-to-hashmaps-instea.diff +++ /dev/null @@ -1,180 +0,0 @@ -From 52c66b47664d47154b2c8368e32beef27d4b2d03 Mon Sep 17 00:00:00 2001 -From: Tanu Kaskinen -Date: Thu, 3 Dec 2009 13:22:05 +0200 -Subject: [PATCH 31/62] libpulse: Store pa_stream pointers to hashmaps instead of dynarrays. - -Since the stream identifiers (channels) are monotonically growing integer, it -isn't a good idea to use them as index to a dynamic array, because the array -will grow all the time. This is not a problem with client connections that -don't create many streams, but, for example, long-running clients that use -libcanberra for playing event sounds, this means that the client connection -effectively leaks memory. ---- - src/pulse/context.c | 12 ++++++------ - src/pulse/internal.h | 3 +-- - src/pulse/stream.c | 20 ++++++++++---------- - 3 files changed, 17 insertions(+), 18 deletions(-) - -diff --git a/src/pulse/context.c b/src/pulse/context.c -index c83230d..91f4817 100644 ---- a/src/pulse/context.c -+++ b/src/pulse/context.c -@@ -63,7 +63,7 @@ - #include - #include - #include --#include -+#include - #include - #include - #include -@@ -157,8 +157,8 @@ pa_context *pa_context_new_with_proplist(pa_mainloop_api *mainloop, const char * - c->system_bus = c->session_bus = NULL; - #endif - c->mainloop = mainloop; -- c->playback_streams = pa_dynarray_new(); -- c->record_streams = pa_dynarray_new(); -+ c->playback_streams = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func); -+ c->record_streams = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func); - c->client_index = PA_INVALID_INDEX; - c->use_rtclock = pa_mainloop_is_our_api(mainloop); - -@@ -252,9 +252,9 @@ static void context_free(pa_context *c) { - #endif - - if (c->record_streams) -- pa_dynarray_free(c->record_streams, NULL, NULL); -+ pa_hashmap_free(c->record_streams, NULL, NULL); - if (c->playback_streams) -- pa_dynarray_free(c->playback_streams, NULL, NULL); -+ pa_hashmap_free(c->playback_streams, NULL, NULL); - - if (c->mempool) - pa_mempool_free(c->mempool); -@@ -361,7 +361,7 @@ static void pstream_memblock_callback(pa_pstream *p, uint32_t channel, int64_t o - - pa_context_ref(c); - -- if ((s = pa_dynarray_get(c->record_streams, channel))) { -+ if ((s = pa_hashmap_get(c->record_streams, PA_UINT32_TO_PTR(channel)))) { - - if (chunk->memblock) { - pa_memblockq_seek(s->record_memblockq, offset, seek, TRUE); -diff --git a/src/pulse/internal.h b/src/pulse/internal.h -index c3ebf74..ab702b9 100644 ---- a/src/pulse/internal.h -+++ b/src/pulse/internal.h -@@ -34,7 +34,6 @@ - #include - #include - #include --#include - #include - #include - #include -@@ -66,7 +65,7 @@ struct pa_context { - pa_pstream *pstream; - pa_pdispatch *pdispatch; - -- pa_dynarray *record_streams, *playback_streams; -+ pa_hashmap *record_streams, *playback_streams; - PA_LLIST_HEAD(pa_stream, streams); - PA_LLIST_HEAD(pa_operation, operations); - -diff --git a/src/pulse/stream.c b/src/pulse/stream.c -index daeb53a..ab8f8f4 100644 ---- a/src/pulse/stream.c -+++ b/src/pulse/stream.c -@@ -201,7 +201,7 @@ static void stream_unlink(pa_stream *s) { - pa_pdispatch_unregister_reply(s->context->pdispatch, s); - - if (s->channel_valid) { -- pa_dynarray_put((s->direction == PA_STREAM_PLAYBACK) ? s->context->playback_streams : s->context->record_streams, s->channel, NULL); -+ pa_hashmap_remove((s->direction == PA_STREAM_PLAYBACK) ? s->context->playback_streams : s->context->record_streams, PA_UINT32_TO_PTR(s->channel)); - s->channel = 0; - s->channel_valid = FALSE; - } -@@ -356,7 +356,7 @@ void pa_command_stream_killed(pa_pdispatch *pd, uint32_t command, uint32_t tag, - goto finish; - } - -- if (!(s = pa_dynarray_get(command == PA_COMMAND_PLAYBACK_STREAM_KILLED ? c->playback_streams : c->record_streams, channel))) -+ if (!(s = pa_hashmap_get(command == PA_COMMAND_PLAYBACK_STREAM_KILLED ? c->playback_streams : c->record_streams, PA_UINT32_TO_PTR(channel)))) - goto finish; - - if (s->state != PA_STREAM_READY) -@@ -476,7 +476,7 @@ void pa_command_stream_moved(pa_pdispatch *pd, uint32_t command, uint32_t tag, p - goto finish; - } - -- if (!(s = pa_dynarray_get(command == PA_COMMAND_PLAYBACK_STREAM_MOVED ? c->playback_streams : c->record_streams, channel))) -+ if (!(s = pa_hashmap_get(command == PA_COMMAND_PLAYBACK_STREAM_MOVED ? c->playback_streams : c->record_streams, PA_UINT32_TO_PTR(channel)))) - goto finish; - - if (s->state != PA_STREAM_READY) -@@ -559,7 +559,7 @@ void pa_command_stream_buffer_attr(pa_pdispatch *pd, uint32_t command, uint32_t - goto finish; - } - -- if (!(s = pa_dynarray_get(command == PA_COMMAND_PLAYBACK_BUFFER_ATTR_CHANGED ? c->playback_streams : c->record_streams, channel))) -+ if (!(s = pa_hashmap_get(command == PA_COMMAND_PLAYBACK_BUFFER_ATTR_CHANGED ? c->playback_streams : c->record_streams, PA_UINT32_TO_PTR(channel)))) - goto finish; - - if (s->state != PA_STREAM_READY) -@@ -611,7 +611,7 @@ void pa_command_stream_suspended(pa_pdispatch *pd, uint32_t command, uint32_t ta - goto finish; - } - -- if (!(s = pa_dynarray_get(command == PA_COMMAND_PLAYBACK_STREAM_SUSPENDED ? c->playback_streams : c->record_streams, channel))) -+ if (!(s = pa_hashmap_get(command == PA_COMMAND_PLAYBACK_STREAM_SUSPENDED ? c->playback_streams : c->record_streams, PA_UINT32_TO_PTR(channel)))) - goto finish; - - if (s->state != PA_STREAM_READY) -@@ -653,7 +653,7 @@ void pa_command_stream_started(pa_pdispatch *pd, uint32_t command, uint32_t tag, - goto finish; - } - -- if (!(s = pa_dynarray_get(c->playback_streams, channel))) -+ if (!(s = pa_hashmap_get(c->playback_streams, PA_UINT32_TO_PTR(channel)))) - goto finish; - - if (s->state != PA_STREAM_READY) -@@ -699,7 +699,7 @@ void pa_command_stream_event(pa_pdispatch *pd, uint32_t command, uint32_t tag, p - goto finish; - } - -- if (!(s = pa_dynarray_get(command == PA_COMMAND_PLAYBACK_STREAM_EVENT ? c->playback_streams : c->record_streams, channel))) -+ if (!(s = pa_hashmap_get(command == PA_COMMAND_PLAYBACK_STREAM_EVENT ? c->playback_streams : c->record_streams, PA_UINT32_TO_PTR(channel)))) - goto finish; - - if (s->state != PA_STREAM_READY) -@@ -735,7 +735,7 @@ void pa_command_request(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tag - goto finish; - } - -- if (!(s = pa_dynarray_get(c->playback_streams, channel))) -+ if (!(s = pa_hashmap_get(c->playback_streams, PA_UINT32_TO_PTR(channel)))) - goto finish; - - if (s->state != PA_STREAM_READY) -@@ -771,7 +771,7 @@ void pa_command_overflow_or_underflow(pa_pdispatch *pd, uint32_t command, uint32 - goto finish; - } - -- if (!(s = pa_dynarray_get(c->playback_streams, channel))) -+ if (!(s = pa_hashmap_get(c->playback_streams, PA_UINT32_TO_PTR(channel)))) - goto finish; - - if (s->state != PA_STREAM_READY) -@@ -1019,7 +1019,7 @@ void pa_create_stream_callback(pa_pdispatch *pd, uint32_t command, uint32_t tag, - } - - s->channel_valid = TRUE; -- pa_dynarray_put((s->direction == PA_STREAM_RECORD) ? s->context->record_streams : s->context->playback_streams, s->channel, s); -+ pa_hashmap_put((s->direction == PA_STREAM_RECORD) ? s->context->record_streams : s->context->playback_streams, PA_UINT32_TO_PTR(s->channel), s); - - create_stream_complete(s); - --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0032-native-rework-handling-of-seeks-that-depend-on-varia.diff b/packages/audio/pulseaudio/patches/0032-native-rework-handling-of-seeks-that-depend-on-varia.diff deleted file mode 100644 index 1a85b5c11a..0000000000 --- a/packages/audio/pulseaudio/patches/0032-native-rework-handling-of-seeks-that-depend-on-varia.diff +++ /dev/null @@ -1,166 +0,0 @@ -From 84782f24c5f43456430c796bd12f9face24f0573 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Mon, 18 Jan 2010 01:33:04 +0100 -Subject: [PATCH 32/62] native: rework handling of seeks that depend on variables the client does not know anything about - -All seeks/flushes that depend on the playback buffer read pointer cannot -be accounted for properly in the client since it does not know the -actual read pointer. Due to that the clients do not account for it at -all. We need do the same on the server side. And we did, but a little -bit too extreme. While we properly have not applied the changes to the -"request" counter we still do have to apply it to the "missing" counter. -This patch fixes that. ---- - src/modules/module-combine.c | 4 ++-- - src/modules/module-loopback.c | 4 ++-- - src/pulse/stream.c | 5 +++++ - src/pulsecore/memblockq.c | 6 ++++-- - src/pulsecore/memblockq.h | 2 +- - src/pulsecore/protocol-native.c | 6 +++++- - src/pulsecore/sink-input.c | 2 +- - 7 files changed, 20 insertions(+), 9 deletions(-) - -diff --git a/src/modules/module-combine.c b/src/modules/module-combine.c -index 62e6267..cffb901 100644 ---- a/src/modules/module-combine.c -+++ b/src/modules/module-combine.c -@@ -562,7 +562,7 @@ static int sink_input_process_msg(pa_msgobject *obj, int code, void *data, int64 - if (PA_SINK_IS_OPENED(o->sink_input->sink->thread_info.state)) - pa_memblockq_push_align(o->memblockq, chunk); - else -- pa_memblockq_flush_write(o->memblockq); -+ pa_memblockq_flush_write(o->memblockq, TRUE); - - return 0; - } -@@ -982,7 +982,7 @@ static void output_disable(struct output *o) { - o->sink_input = NULL; - - /* Finally, drop all queued data */ -- pa_memblockq_flush_write(o->memblockq); -+ pa_memblockq_flush_write(o->memblockq, TRUE); - pa_asyncmsgq_flush(o->inq, FALSE); - pa_asyncmsgq_flush(o->outq, FALSE); - } -diff --git a/src/modules/module-loopback.c b/src/modules/module-loopback.c -index bb0182b..15ef96e 100644 ---- a/src/modules/module-loopback.c -+++ b/src/modules/module-loopback.c -@@ -430,7 +430,7 @@ static int sink_input_process_msg_cb(pa_msgobject *obj, int code, void *data, in - if (PA_SINK_IS_OPENED(u->sink_input->sink->thread_info.state)) - pa_memblockq_push_align(u->memblockq, chunk); - else -- pa_memblockq_flush_write(u->memblockq); -+ pa_memblockq_flush_write(u->memblockq, TRUE); - - update_min_memblockq_length(u); - -@@ -457,7 +457,7 @@ static int sink_input_process_msg_cb(pa_msgobject *obj, int code, void *data, in - if (PA_SINK_IS_OPENED(u->sink_input->sink->thread_info.state)) - pa_memblockq_seek(u->memblockq, -offset, PA_SEEK_RELATIVE, TRUE); - else -- pa_memblockq_flush_write(u->memblockq); -+ pa_memblockq_flush_write(u->memblockq, TRUE); - - u->recv_counter -= offset; - -diff --git a/src/pulse/stream.c b/src/pulse/stream.c -index ab8f8f4..8da40ec 100644 ---- a/src/pulse/stream.c -+++ b/src/pulse/stream.c -@@ -2146,6 +2146,11 @@ pa_operation* pa_stream_flush(pa_stream *s, pa_stream_success_cb_t cb, void *use - * index, but the read index might jump. */ - invalidate_indexes(s, TRUE, FALSE); - -+ /* Note that we do not update requested_bytes here. This is -+ * because we cannot really know how data actually was dropped -+ * from the write index due to this. This 'error' will be applied -+ * by both client and server and hence we should be fine. */ -+ - return o; - } - -diff --git a/src/pulsecore/memblockq.c b/src/pulsecore/memblockq.c -index 4641801..2b063fa 100644 ---- a/src/pulsecore/memblockq.c -+++ b/src/pulsecore/memblockq.c -@@ -254,6 +254,8 @@ static void write_index_changed(pa_memblockq *bq, int64_t old_write_index, pa_bo - - if (account) - bq->requested -= delta; -+ else -+ bq->missing -= delta; - - /* pa_log("pushed/seeked %lli: requested counter at %lli, account=%i", (long long) delta, (long long) bq->requested, account); */ - } -@@ -642,7 +644,7 @@ void pa_memblockq_seek(pa_memblockq *bq, int64_t offset, pa_seek_mode_t seek, pa - write_index_changed(bq, old, account); - } - --void pa_memblockq_flush_write(pa_memblockq *bq) { -+void pa_memblockq_flush_write(pa_memblockq *bq, pa_bool_t account) { - int64_t old; - pa_assert(bq); - -@@ -652,7 +654,7 @@ void pa_memblockq_flush_write(pa_memblockq *bq) { - bq->write_index = bq->read_index; - - pa_memblockq_prebuf_force(bq); -- write_index_changed(bq, old, TRUE); -+ write_index_changed(bq, old, account); - } - - void pa_memblockq_flush_read(pa_memblockq *bq) { -diff --git a/src/pulsecore/memblockq.h b/src/pulsecore/memblockq.h -index 587c364..6132f31 100644 ---- a/src/pulsecore/memblockq.h -+++ b/src/pulsecore/memblockq.h -@@ -118,7 +118,7 @@ size_t pa_memblockq_pop_missing(pa_memblockq *bq); - int pa_memblockq_splice(pa_memblockq *bq, pa_memblockq *source); - - /* Set the queue to silence, set write index to read index */ --void pa_memblockq_flush_write(pa_memblockq *bq); -+void pa_memblockq_flush_write(pa_memblockq *bq, pa_bool_t account); - - /* Set the queue to silence, set write read index to write index*/ - void pa_memblockq_flush_read(pa_memblockq *bq); -diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c -index b7b3f59..f80b0c2 100644 ---- a/src/pulsecore/protocol-native.c -+++ b/src/pulsecore/protocol-native.c -@@ -1325,6 +1325,10 @@ static void handle_seek(playback_stream *s, int64_t indexw) { - playback_stream_request_bytes(s); - } - -+static void flush_write_no_account(pa_memblockq *q) { -+ pa_memblockq_flush_write(q, FALSE); -+} -+ - /* Called from thread context */ - static int sink_input_process_msg(pa_msgobject *o, int code, void *userdata, int64_t offset, pa_memchunk *chunk) { - pa_sink_input *i = PA_SINK_INPUT(o); -@@ -1386,7 +1390,7 @@ static int sink_input_process_msg(pa_msgobject *o, int code, void *userdata, int - - switch (code) { - case SINK_INPUT_MESSAGE_FLUSH: -- func = pa_memblockq_flush_write; -+ func = flush_write_no_account; - break; - - case SINK_INPUT_MESSAGE_PREBUF_FORCE: -diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c -index aa84ccb..7acb25f 100644 ---- a/src/pulsecore/sink-input.c -+++ b/src/pulsecore/sink-input.c -@@ -801,7 +801,7 @@ void pa_sink_input_process_rewind(pa_sink_input *i, size_t nbytes /* in sink sam - /* We were asked to drop all buffered data, and rerequest new - * data from implementor the next time push() is called */ - -- pa_memblockq_flush_write(i->thread_info.render_memblockq); -+ pa_memblockq_flush_write(i->thread_info.render_memblockq, TRUE); - - } else if (i->thread_info.rewrite_nbytes > 0) { - size_t max_rewrite, amount; --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0033-core-Fix-macro-typo-PA_SINK_IS_LINKED-PA_SINK_INPUT_.diff b/packages/audio/pulseaudio/patches/0033-core-Fix-macro-typo-PA_SINK_IS_LINKED-PA_SINK_INPUT_.diff deleted file mode 100644 index 552f7f5b4a..0000000000 --- a/packages/audio/pulseaudio/patches/0033-core-Fix-macro-typo-PA_SINK_IS_LINKED-PA_SINK_INPUT_.diff +++ /dev/null @@ -1,25 +0,0 @@ -From a631beeafb4729f8bed1c538846d0bb142cee7bf Mon Sep 17 00:00:00 2001 -From: Colin Guthrie -Date: Tue, 9 Feb 2010 21:37:32 +0000 -Subject: [PATCH 33/62] core: Fix macro typo - PA_SINK_IS_LINKED -> PA_SINK_INPUT_IS_LINKED - ---- - src/pulsecore/sink-input.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c -index 7acb25f..3c957f1 100644 ---- a/src/pulsecore/sink-input.c -+++ b/src/pulsecore/sink-input.c -@@ -1086,7 +1086,7 @@ void pa_sink_input_update_proplist(pa_sink_input *i, pa_update_mode_t mode, pa_p - if (p) - pa_proplist_update(i->proplist, mode, p); - -- if (PA_SINK_IS_LINKED(i->state)) { -+ if (PA_SINK_INPUT_IS_LINKED(i->state)) { - pa_hook_fire(&i->core->hooks[PA_CORE_HOOK_SINK_INPUT_PROPLIST_CHANGED], i); - pa_subscription_post(i->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_CHANGE, i->index); - } --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0034-alsa-cover-Desktop-Speaker-mixer-elements.diff b/packages/audio/pulseaudio/patches/0034-alsa-cover-Desktop-Speaker-mixer-elements.diff deleted file mode 100644 index 54d6cd9a39..0000000000 --- a/packages/audio/pulseaudio/patches/0034-alsa-cover-Desktop-Speaker-mixer-elements.diff +++ /dev/null @@ -1,292 +0,0 @@ -From e8cb96c0103d5bd23fe945afdc658a5f60b70a9d Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Mon, 15 Feb 2010 22:23:39 +0100 -Subject: [PATCH 34/62] alsa: cover "Desktop Speaker" mixer elements - -As exposed by really old Microsoft USB sound systems ---- - src/modules/alsa/alsa-mixer.c | 3 +- - .../mixer/paths/analog-output-desktop-speaker.conf | 98 ++++++++++++++++++++ - .../mixer/paths/analog-output-headphones-2.conf | 4 + - .../alsa/mixer/paths/analog-output-headphones.conf | 4 + - .../mixer/paths/analog-output-lfe-on-mono.conf | 4 + - .../alsa/mixer/paths/analog-output-mono.conf | 4 + - .../alsa/mixer/paths/analog-output-speaker.conf | 4 + - src/modules/alsa/mixer/paths/analog-output.conf | 4 + - src/modules/alsa/mixer/profile-sets/default.conf | 14 ++-- - 9 files changed, 131 insertions(+), 8 deletions(-) - create mode 100644 src/modules/alsa/mixer/paths/analog-output-desktop-speaker.conf - -diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c -index 8bbd1f5..cb814af 100644 ---- a/src/modules/alsa/alsa-mixer.c -+++ b/src/modules/alsa/alsa-mixer.c -@@ -1784,7 +1784,8 @@ static int path_verify(pa_alsa_path *p) { - { "analog-output-lfe-on-mono", N_("Analog Output (LFE)") }, - { "analog-output-mono", N_("Analog Mono Output") }, - { "analog-output-headphones-2", N_("Analog Headphones 2") }, -- { "analog-output-speaker", N_("Analog Speaker") } -+ { "analog-output-speaker", N_("Analog Speakers") } -+ { "analog-output-desktop-speaker", N_("Analog Speakers 2") } - }; - - pa_alsa_element *e; -diff --git a/src/modules/alsa/mixer/paths/analog-output-desktop-speaker.conf b/src/modules/alsa/mixer/paths/analog-output-desktop-speaker.conf -new file mode 100644 -index 0000000..9f18b25 ---- /dev/null -+++ b/src/modules/alsa/mixer/paths/analog-output-desktop-speaker.conf -@@ -0,0 +1,98 @@ -+# This file is part of PulseAudio. -+# -+# PulseAudio is free software; you can redistribute it and/or modify -+# it under the terms of the GNU Lesser General Public License as -+# published by the Free Software Foundation; either version 2.1 of the -+# License, or (at your option) any later version. -+# -+# PulseAudio is distributed in the hope that it will be useful, but -+# WITHOUT ANY WARRANTY; without even the implied warranty of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+# General Public License for more details. -+# -+# You should have received a copy of the GNU Lesser General Public License -+# along with PulseAudio; if not, write to the Free Software Foundation, -+# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ -+; Path for mixers that have a 'Desktop Speaker' control -+; -+; See analog-output.conf.common for an explanation on the directives -+ -+[General] -+priority = 100 -+ -+[Element Hardware Master] -+switch = mute -+volume = merge -+override-map.1 = all -+override-map.2 = all-left,all-right -+ -+[Element Master] -+switch = mute -+volume = merge -+override-map.1 = all -+override-map.2 = all-left,all-right -+ -+[Element Master Mono] -+switch = off -+volume = off -+ -+; This profile path is intended to control the desktop speaker, not -+; the headphones. But it should not hurt if we leave the headphone -+; jack enabled nonetheless. -+[Element Headphone] -+switch = mute -+volume = zero -+ -+[Element Headphone2] -+switch = mute -+volume = zero -+ -+[Element Speaker] -+switch = off -+volume = off -+ -+[Element Desktop Speaker] -+required = any -+switch = mute -+volume = merge -+override-map.1 = all -+override-map.2 = all-left,all-right -+ -+[Element Front] -+switch = mute -+volume = merge -+override-map.1 = all-front -+override-map.2 = front-left,front-right -+ -+[Element Rear] -+switch = mute -+volume = merge -+override-map.1 = all-rear -+override-map.2 = rear-left,rear-right -+ -+[Element Surround] -+switch = mute -+volume = merge -+override-map.1 = all-rear -+override-map.2 = rear-left,rear-right -+ -+[Element Side] -+switch = mute -+volume = merge -+override-map.1 = all-side -+override-map.2 = side-left,side-right -+ -+[Element Center] -+switch = mute -+volume = merge -+override-map.1 = all-center -+override-map.2 = all-center,all-center -+ -+[Element LFE] -+switch = mute -+volume = merge -+override-map.1 = lfe -+override-map.2 = lfe,lfe -+ -+.include analog-output.conf.common -diff --git a/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf b/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf -index f2fd31c..580c798 100644 ---- a/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf -+++ b/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf -@@ -55,6 +55,10 @@ override-map.2 = all-left,all-right - switch = off - volume = off - -+[Element Desktop Speaker] -+switch = off -+volume = off -+ - [Element Front] - switch = off - volume = off -diff --git a/src/modules/alsa/mixer/paths/analog-output-headphones.conf b/src/modules/alsa/mixer/paths/analog-output-headphones.conf -index 2131cfe..79ebc7f 100644 ---- a/src/modules/alsa/mixer/paths/analog-output-headphones.conf -+++ b/src/modules/alsa/mixer/paths/analog-output-headphones.conf -@@ -55,6 +55,10 @@ volume = zero - switch = off - volume = off - -+[Element Desktop Speaker] -+switch = off -+volume = off -+ - [Element Front] - switch = off - volume = off -diff --git a/src/modules/alsa/mixer/paths/analog-output-lfe-on-mono.conf b/src/modules/alsa/mixer/paths/analog-output-lfe-on-mono.conf -index 0a43e27..67ee32f 100644 ---- a/src/modules/alsa/mixer/paths/analog-output-lfe-on-mono.conf -+++ b/src/modules/alsa/mixer/paths/analog-output-lfe-on-mono.conf -@@ -58,6 +58,10 @@ volume = merge - override-map.1 = all - override-map.2 = all-left,all-right - -+[Element Desktop Speaker] -+switch = off -+volume = off -+ - [Element Front] - switch = off - volume = off -diff --git a/src/modules/alsa/mixer/paths/analog-output-mono.conf b/src/modules/alsa/mixer/paths/analog-output-mono.conf -index 542edc4..13a2d6a 100644 ---- a/src/modules/alsa/mixer/paths/analog-output-mono.conf -+++ b/src/modules/alsa/mixer/paths/analog-output-mono.conf -@@ -55,6 +55,10 @@ volume = merge - override-map.1 = all - override-map.2 = all-left,all-right - -+[Element Desktop Speaker] -+switch = off -+volume = off -+ - [Element Front] - switch = off - volume = off -diff --git a/src/modules/alsa/mixer/paths/analog-output-speaker.conf b/src/modules/alsa/mixer/paths/analog-output-speaker.conf -index aea7853..b133a2e 100644 ---- a/src/modules/alsa/mixer/paths/analog-output-speaker.conf -+++ b/src/modules/alsa/mixer/paths/analog-output-speaker.conf -@@ -55,6 +55,10 @@ volume = merge - override-map.1 = all - override-map.2 = all-left,all-right - -+[Element Desktop Speaker] -+switch = off -+volume = off -+ - [Element Front] - switch = mute - volume = merge -diff --git a/src/modules/alsa/mixer/paths/analog-output.conf b/src/modules/alsa/mixer/paths/analog-output.conf -index d7c1223..50fc88e 100644 ---- a/src/modules/alsa/mixer/paths/analog-output.conf -+++ b/src/modules/alsa/mixer/paths/analog-output.conf -@@ -53,6 +53,10 @@ volume = zero - switch = mute - volume = off - -+[Element Desktop Speaker] -+switch = mute -+volume = off -+ - [Element Front] - switch = mute - volume = merge -diff --git a/src/modules/alsa/mixer/profile-sets/default.conf b/src/modules/alsa/mixer/profile-sets/default.conf -index 046938f..5d352f1 100644 ---- a/src/modules/alsa/mixer/profile-sets/default.conf -+++ b/src/modules/alsa/mixer/profile-sets/default.conf -@@ -62,42 +62,42 @@ auto-profiles = yes - [Mapping analog-mono] - device-strings = hw:%f - channel-map = mono --paths-output = analog-output analog-output-speaker analog-output-headphones analog-output-headphones-2 analog-output-mono analog-output-lfe-on-mono -+paths-output = analog-output analog-output-speaker analog-output-desktop-speaker analog-output-headphones analog-output-headphones-2 analog-output-mono analog-output-lfe-on-mono - paths-input = analog-input analog-input-mic analog-input-linein analog-input-aux analog-input-video analog-input-tvtuner analog-input-fm analog-input-mic-line - priority = 1 - - [Mapping analog-stereo] - device-strings = front:%f hw:%f - channel-map = left,right --paths-output = analog-output analog-output-speaker analog-output-headphones analog-output-headphones-2 analog-output-mono analog-output-lfe-on-mono -+paths-output = analog-output analog-output-speaker analog-output-desktop-speaker analog-output-headphones analog-output-headphones-2 analog-output-mono analog-output-lfe-on-mono - paths-input = analog-input analog-input-mic analog-input-linein analog-input-aux analog-input-video analog-input-tvtuner analog-input-fm analog-input-mic-line - priority = 10 - - [Mapping analog-surround-40] - device-strings = surround40:%f - channel-map = front-left,front-right,rear-left,rear-right --paths-output = analog-output analog-output-speaker analog-output-lfe-on-mono -+paths-output = analog-output analog-output-speaker analog-output-desktop-speaker analog-output-lfe-on-mono - priority = 7 - direction = output - - [Mapping analog-surround-41] - device-strings = surround41:%f - channel-map = front-left,front-right,rear-left,rear-right,lfe --paths-output = analog-output analog-output-speaker analog-output-lfe-on-mono -+paths-output = analog-output analog-output-speaker analog-output-desktop-speaker analog-output-lfe-on-mono - priority = 8 - direction = output - - [Mapping analog-surround-50] - device-strings = surround50:%f - channel-map = front-left,front-right,rear-left,rear-right,front-center --paths-output = analog-output analog-output-speaker analog-output-lfe-on-mono -+paths-output = analog-output analog-output-speaker analog-output-desktop-speaker analog-output-lfe-on-mono - priority = 7 - direction = output - - [Mapping analog-surround-51] - device-strings = surround51:%f - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe --paths-output = analog-output analog-output-speaker analog-output-lfe-on-mono -+paths-output = analog-output analog-output-speaker analog-output-desktop-speaker analog-output-lfe-on-mono - priority = 8 - direction = output - -@@ -105,7 +105,7 @@ direction = output - device-strings = surround71:%f - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right - description = Analog Surround 7.1 --paths-output = analog-output analog-output-speaker analog-output-lfe-on-mono -+paths-output = analog-output analog-output-speaker analog-output-desktop-speaker analog-output-lfe-on-mono - priority = 7 - direction = output - --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0035-alsa-cover-Shared-Mic-Line-in-Analog-Source.diff b/packages/audio/pulseaudio/patches/0035-alsa-cover-Shared-Mic-Line-in-Analog-Source.diff deleted file mode 100644 index 08b57de3e0..0000000000 --- a/packages/audio/pulseaudio/patches/0035-alsa-cover-Shared-Mic-Line-in-Analog-Source.diff +++ /dev/null @@ -1,49 +0,0 @@ -From 7d6bab0d003386baba3ff3fad4cc3caa5839b361 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Mon, 15 Feb 2010 23:39:12 +0100 -Subject: [PATCH 35/62] alsa: cover 'Shared Mic/Line in', 'Analog Source' - -https://bugzilla.redhat.com/show_bug.cgi?id=558638 ---- - .../alsa/mixer/paths/analog-input.conf.common | 25 ++++++++++++++++++++ - 1 files changed, 25 insertions(+), 0 deletions(-) - -diff --git a/src/modules/alsa/mixer/paths/analog-input.conf.common b/src/modules/alsa/mixer/paths/analog-input.conf.common -index fbdc8fb..66c3dda 100644 ---- a/src/modules/alsa/mixer/paths/analog-input.conf.common -+++ b/src/modules/alsa/mixer/paths/analog-input.conf.common -@@ -277,6 +277,31 @@ name = input-microphone - [Option Digital Input Source:Digital Mic 2] - name = input-microphone - -+;;; 'Analog Source' -+ -+[Element Analog Source] -+enumeration = select -+ -+[Option Analog Source:Mic] -+name = input-microphone -+ -+[Option Analog Source:Line in] -+name = input-linein -+ -+[Option Analog Source:Aux] -+name = input -+ -+;;; 'Shared Mic/Line in' -+ -+[Element Shared Mic/Line in] -+enumeration = select -+ -+[Option Shared Mic/Line in:Mic in] -+name = input-microphone -+ -+[Option Shared Mic/Line in:Line in] -+name = input-linein -+ - ;;; Various Boosts - - [Element Capture Boost] --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0036-alsa-cover-Internal-Mic-elements.diff b/packages/audio/pulseaudio/patches/0036-alsa-cover-Internal-Mic-elements.diff deleted file mode 100644 index 3329bd8e6e..0000000000 --- a/packages/audio/pulseaudio/patches/0036-alsa-cover-Internal-Mic-elements.diff +++ /dev/null @@ -1,214 +0,0 @@ -From 0c836aacd8be34bcb5e02581495f7d30a5fbee05 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 16 Feb 2010 00:58:49 +0100 -Subject: [PATCH 36/62] alsa: cover "Internal Mic" elements - -https://bugzilla.redhat.com/show_bug.cgi?id=562216 ---- - src/modules/alsa/mixer/paths/analog-input-aux.conf | 4 + - src/modules/alsa/mixer/paths/analog-input-fm.conf | 4 + - .../mixer/paths/analog-input-internal-mic.conf | 67 ++++++++++++++++++++ - .../alsa/mixer/paths/analog-input-linein.conf | 4 + - .../alsa/mixer/paths/analog-input-mic-line.conf | 4 + - src/modules/alsa/mixer/paths/analog-input-mic.conf | 4 + - .../alsa/mixer/paths/analog-input-tvtuner.conf | 4 + - .../alsa/mixer/paths/analog-input-video.conf | 4 + - src/modules/alsa/mixer/paths/analog-input.conf | 3 + - 9 files changed, 98 insertions(+), 0 deletions(-) - create mode 100644 src/modules/alsa/mixer/paths/analog-input-internal-mic.conf - -diff --git a/src/modules/alsa/mixer/paths/analog-input-aux.conf b/src/modules/alsa/mixer/paths/analog-input-aux.conf -index db78eb4..3a7cb7b 100644 ---- a/src/modules/alsa/mixer/paths/analog-input-aux.conf -+++ b/src/modules/alsa/mixer/paths/analog-input-aux.conf -@@ -32,6 +32,10 @@ override-map.2 = all-left,all-right - switch = off - volume = off - -+[Element Internal Mic] -+switch = off -+volume = off -+ - [Element Line] - switch = off - volume = off -diff --git a/src/modules/alsa/mixer/paths/analog-input-fm.conf b/src/modules/alsa/mixer/paths/analog-input-fm.conf -index baf674a..7f150e3 100644 ---- a/src/modules/alsa/mixer/paths/analog-input-fm.conf -+++ b/src/modules/alsa/mixer/paths/analog-input-fm.conf -@@ -32,6 +32,10 @@ override-map.2 = all-left,all-right - switch = off - volume = off - -+[Element Internal Mic] -+switch = off -+volume = off -+ - [Element Line] - switch = off - volume = off -diff --git a/src/modules/alsa/mixer/paths/analog-input-internal-mic.conf b/src/modules/alsa/mixer/paths/analog-input-internal-mic.conf -new file mode 100644 -index 0000000..70cd512 ---- /dev/null -+++ b/src/modules/alsa/mixer/paths/analog-input-internal-mic.conf -@@ -0,0 +1,67 @@ -+# This file is part of PulseAudio. -+# -+# PulseAudio is free software; you can redistribute it and/or modify -+# it under the terms of the GNU Lesser General Public License as -+# published by the Free Software Foundation; either version 2.1 of the -+# License, or (at your option) any later version. -+# -+# PulseAudio is distributed in the hope that it will be useful, but -+# WITHOUT ANY WARRANTY; without even the implied warranty of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+# General Public License for more details. -+# -+# You should have received a copy of the GNU Lesser General Public License -+# along with PulseAudio; if not, write to the Free Software Foundation, -+# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ -+; For devices where a 'Internal Mic' element exists -+; -+; See analog-output.conf.common for an explanation on the directives -+ -+[General] -+priority = 90 -+name = analog-input-microphone -+ -+[Element Capture] -+switch = mute -+volume = merge -+override-map.1 = all -+override-map.2 = all-left,all-right -+ -+[Element Mic] -+switch = off -+volume = off -+ -+[Element Internal Mic] -+required = any -+switch = mute -+volume = merge -+override-map.1 = all -+override-map.2 = all-left,all-right -+ -+[Element Line] -+switch = off -+volume = off -+ -+[Element Aux] -+switch = off -+volume = off -+ -+[Element Video] -+switch = off -+volume = off -+ -+[Element Mic/Line] -+switch = off -+volume = off -+ -+[Element TV Tuner] -+switch = off -+volume = off -+ -+[Element FM] -+switch = off -+volume = off -+ -+.include analog-input.conf.common -+.include analog-input-mic.conf.common -diff --git a/src/modules/alsa/mixer/paths/analog-input-linein.conf b/src/modules/alsa/mixer/paths/analog-input-linein.conf -index 4be5722..57568cc 100644 ---- a/src/modules/alsa/mixer/paths/analog-input-linein.conf -+++ b/src/modules/alsa/mixer/paths/analog-input-linein.conf -@@ -31,6 +31,10 @@ override-map.2 = all-left,all-right - switch = off - volume = off - -+[Element Internal Mic] -+switch = off -+volume = off -+ - [Element Line] - required = any - switch = mute -diff --git a/src/modules/alsa/mixer/paths/analog-input-mic-line.conf b/src/modules/alsa/mixer/paths/analog-input-mic-line.conf -index f7f3085..fa680aa 100644 ---- a/src/modules/alsa/mixer/paths/analog-input-mic-line.conf -+++ b/src/modules/alsa/mixer/paths/analog-input-mic-line.conf -@@ -32,6 +32,10 @@ override-map.2 = all-left,all-right - switch = off - volume = off - -+[Element Internal Mic] -+switch = off -+volume = off -+ - [Element Line] - switch = off - volume = off -diff --git a/src/modules/alsa/mixer/paths/analog-input-mic.conf b/src/modules/alsa/mixer/paths/analog-input-mic.conf -index 2a36f2f..9b8b75a 100644 ---- a/src/modules/alsa/mixer/paths/analog-input-mic.conf -+++ b/src/modules/alsa/mixer/paths/analog-input-mic.conf -@@ -35,6 +35,10 @@ volume = merge - override-map.1 = all - override-map.2 = all-left,all-right - -+[Element Internal Mic] -+switch = off -+volume = off -+ - [Element Line] - switch = off - volume = off -diff --git a/src/modules/alsa/mixer/paths/analog-input-tvtuner.conf b/src/modules/alsa/mixer/paths/analog-input-tvtuner.conf -index 8531ec7..fae3ce8 100644 ---- a/src/modules/alsa/mixer/paths/analog-input-tvtuner.conf -+++ b/src/modules/alsa/mixer/paths/analog-input-tvtuner.conf -@@ -32,6 +32,10 @@ override-map.2 = all-left,all-right - switch = off - volume = off - -+[Element Internal Mic] -+switch = off -+volume = off -+ - [Element Line] - switch = off - volume = off -diff --git a/src/modules/alsa/mixer/paths/analog-input-video.conf b/src/modules/alsa/mixer/paths/analog-input-video.conf -index 74c76f0..19f1809 100644 ---- a/src/modules/alsa/mixer/paths/analog-input-video.conf -+++ b/src/modules/alsa/mixer/paths/analog-input-video.conf -@@ -31,6 +31,10 @@ override-map.2 = all-left,all-right - switch = off - volume = off - -+[Element Internal Mic] -+switch = off -+volume = off -+ - [Element Line] - switch = off - volume = off -diff --git a/src/modules/alsa/mixer/paths/analog-input.conf b/src/modules/alsa/mixer/paths/analog-input.conf -index 5055f90..3050738 100644 ---- a/src/modules/alsa/mixer/paths/analog-input.conf -+++ b/src/modules/alsa/mixer/paths/analog-input.conf -@@ -32,6 +32,9 @@ override-map.2 = all-left,all-right - [Element Mic] - required-absent = any - -+[Element Internal Mic] -+required-absent = any -+ - [Element Line] - required-absent = any - --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0037-alsa-use-default-output-port-names.diff b/packages/audio/pulseaudio/patches/0037-alsa-use-default-output-port-names.diff deleted file mode 100644 index d8b7cd28aa..0000000000 --- a/packages/audio/pulseaudio/patches/0037-alsa-use-default-output-port-names.diff +++ /dev/null @@ -1,82 +0,0 @@ -From 307bd142feef8f42d3adcea354b72f4c076470e4 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 16 Feb 2010 00:59:24 +0100 -Subject: [PATCH 37/62] alsa: use default output port names - -instead of coming up with pointless aliases, reuse the already established -names, for second headphones, and second speakers. ---- - src/modules/alsa/alsa-mixer.c | 2 -- - .../mixer/paths/analog-output-desktop-speaker.conf | 3 ++- - .../mixer/paths/analog-output-headphones-2.conf | 1 + - .../alsa/mixer/paths/analog-output-headphones.conf | 1 + - .../alsa/mixer/paths/analog-output-speaker.conf | 1 + - 5 files changed, 5 insertions(+), 3 deletions(-) - -diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c -index cb814af..93f2ed0 100644 ---- a/src/modules/alsa/alsa-mixer.c -+++ b/src/modules/alsa/alsa-mixer.c -@@ -1783,9 +1783,7 @@ static int path_verify(pa_alsa_path *p) { - { "analog-output-headphones", N_("Analog Headphones") }, - { "analog-output-lfe-on-mono", N_("Analog Output (LFE)") }, - { "analog-output-mono", N_("Analog Mono Output") }, -- { "analog-output-headphones-2", N_("Analog Headphones 2") }, - { "analog-output-speaker", N_("Analog Speakers") } -- { "analog-output-desktop-speaker", N_("Analog Speakers 2") } - }; - - pa_alsa_element *e; -diff --git a/src/modules/alsa/mixer/paths/analog-output-desktop-speaker.conf b/src/modules/alsa/mixer/paths/analog-output-desktop-speaker.conf -index 9f18b25..dfdecf4 100644 ---- a/src/modules/alsa/mixer/paths/analog-output-desktop-speaker.conf -+++ b/src/modules/alsa/mixer/paths/analog-output-desktop-speaker.conf -@@ -19,7 +19,8 @@ - ; See analog-output.conf.common for an explanation on the directives - - [General] --priority = 100 -+priority = 101 -+name = analog-output-speaker - - [Element Hardware Master] - switch = mute -diff --git a/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf b/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf -index 580c798..e47543f 100644 ---- a/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf -+++ b/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf -@@ -20,6 +20,7 @@ - - [General] - priority = 89 -+name = analog-output-headphones - - [Element Hardware Master] - switch = mute -diff --git a/src/modules/alsa/mixer/paths/analog-output-headphones.conf b/src/modules/alsa/mixer/paths/analog-output-headphones.conf -index 79ebc7f..1d7bb0b 100644 ---- a/src/modules/alsa/mixer/paths/analog-output-headphones.conf -+++ b/src/modules/alsa/mixer/paths/analog-output-headphones.conf -@@ -20,6 +20,7 @@ - - [General] - priority = 90 -+name = analog-output-headphones - - [Element Hardware Master] - switch = mute -diff --git a/src/modules/alsa/mixer/paths/analog-output-speaker.conf b/src/modules/alsa/mixer/paths/analog-output-speaker.conf -index b133a2e..c6916d6 100644 ---- a/src/modules/alsa/mixer/paths/analog-output-speaker.conf -+++ b/src/modules/alsa/mixer/paths/analog-output-speaker.conf -@@ -20,6 +20,7 @@ - - [General] - priority = 100 -+name = analog-output-speaker - - [Element Hardware Master] - switch = mute --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0038-build-sys-add-gobject-to-build-dependencies.diff b/packages/audio/pulseaudio/patches/0038-build-sys-add-gobject-to-build-dependencies.diff deleted file mode 100644 index c424d2e393..0000000000 --- a/packages/audio/pulseaudio/patches/0038-build-sys-add-gobject-to-build-dependencies.diff +++ /dev/null @@ -1,27 +0,0 @@ -From f9b31fe5443bded4a55b0900f08f04486c3395bd Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 16 Feb 2010 01:43:00 +0100 -Subject: [PATCH 38/62] build-sys: add gobject to build dependencies - -Since we call g_object_unref() we need to link against gobject in -compliance of the new Fedora implicit DSO linking policy. ---- - configure.ac | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/configure.ac b/configure.ac -index c9ec490..1b80788 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -893,7 +893,7 @@ AC_ARG_ENABLE([gconf], - [gconf=auto]) - - if test "x${gconf}" != xno ; then -- PKG_CHECK_MODULES(GCONF, [ gconf-2.0 >= 2.4.0 ], -+ PKG_CHECK_MODULES(GCONF, [ gconf-2.0 >= 2.4.0 gobject-2.0 ], - HAVE_GCONF=1, - [ - HAVE_GCONF=0 --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0039-padsp-emulate-dev-audio-too.diff b/packages/audio/pulseaudio/patches/0039-padsp-emulate-dev-audio-too.diff deleted file mode 100644 index 4b20ef245e..0000000000 --- a/packages/audio/pulseaudio/patches/0039-padsp-emulate-dev-audio-too.diff +++ /dev/null @@ -1,142 +0,0 @@ -From ff2474e5fc9eaa4c7f687e71a39a5bed4f56c259 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 16 Feb 2010 02:03:45 +0100 -Subject: [PATCH 39/62] padsp: emulate /dev/audio, too - -https://bugzilla.redhat.com/show_bug.cgi?id=561262 ---- - src/utils/padsp.c | 55 +++++++++++++++++++--------------------------------- - 1 files changed, 20 insertions(+), 35 deletions(-) - -diff --git a/src/utils/padsp.c b/src/utils/padsp.c -index 2ed0a03..fb756d3 100644 ---- a/src/utils/padsp.c -+++ b/src/utils/padsp.c -@@ -1458,11 +1458,11 @@ static int real_open(const char *filename, int flags, mode_t mode) { - return _open(filename, flags, mode); - } - -- if (filename && dsp_cloak_enable() && (strcmp(filename, "/dev/dsp") == 0 || strcmp(filename, "/dev/adsp") == 0)) -+ if (filename && dsp_cloak_enable() && (pa_streq(filename, "/dev/dsp") || pa_streq(filename, "/dev/adsp") || pa_streq(filename, "/dev/audio"))) - r = dsp_open(flags, &_errno); -- else if (filename && mixer_cloak_enable() && strcmp(filename, "/dev/mixer") == 0) -+ else if (filename && mixer_cloak_enable() && pa_streq(filename, "/dev/mixer")) - r = mixer_open(flags, &_errno); -- else if (filename && sndstat_cloak_enable() && strcmp(filename, "/dev/sndstat") == 0) -+ else if (filename && sndstat_cloak_enable() && pa_streq(filename, "/dev/sndstat")) - r = sndstat_open(flags, &_errno); - else { - function_exit(); -@@ -2383,15 +2383,21 @@ int close(int fd) { - return 0; - } - -+static pa_bool_t is_audio_device_node(const char *path) { -+ return -+ pa_streq(path, "/dev/dsp") || -+ pa_streq(path, "/dev/adsp") || -+ pa_streq(path, "/dev/audio") || -+ pa_streq(path, "/dev/sndstat") || -+ pa_streq(path, "/dev/mixer"); -+} -+ - int access(const char *pathname, int mode) { - - debug(DEBUG_LEVEL_VERBOSE, __FILE__": access(%s)\n", pathname?pathname:"NULL"); - - if (!pathname || -- (strcmp(pathname, "/dev/dsp") != 0 && -- strcmp(pathname, "/dev/adsp") != 0 && -- strcmp(pathname, "/dev/sndstat") != 0 && -- strcmp(pathname, "/dev/mixer") != 0 )) { -+ !is_audio_device_node(pathname)) { - LOAD_ACCESS_FUNC(); - return _access(pathname, mode); - } -@@ -2417,10 +2423,7 @@ int stat(const char *pathname, struct stat *buf) { - - if (!pathname || - !buf || -- ( strcmp(pathname, "/dev/dsp") != 0 && -- strcmp(pathname, "/dev/adsp") != 0 && -- strcmp(pathname, "/dev/sndstat") != 0 && -- strcmp(pathname, "/dev/mixer") != 0 )) { -+ !is_audio_device_node(pathname)) { - debug(DEBUG_LEVEL_VERBOSE, __FILE__": stat(%s)\n", pathname?pathname:"NULL"); - LOAD_STAT_FUNC(); - return _stat(pathname, buf); -@@ -2474,10 +2477,7 @@ int stat64(const char *pathname, struct stat64 *buf) { - - if (!pathname || - !buf || -- ( strcmp(pathname, "/dev/dsp") != 0 && -- strcmp(pathname, "/dev/adsp") != 0 && -- strcmp(pathname, "/dev/sndstat") != 0 && -- strcmp(pathname, "/dev/mixer") != 0 )) { -+ !is_audio_device_node(pathname)) { - LOAD_STAT64_FUNC(); - return _stat64(pathname, buf); - } -@@ -2519,10 +2519,7 @@ int open64(const char *filename, int flags, ...) { - } - - if (!filename || -- ( strcmp(filename, "/dev/dsp") != 0 && -- strcmp(filename, "/dev/adsp") != 0 && -- strcmp(filename, "/dev/sndstat") != 0 && -- strcmp(filename, "/dev/mixer") != 0 )) { -+ !is_audio_device_node(filename)) { - LOAD_OPEN64_FUNC(); - return _open64(filename, flags, mode); - } -@@ -2539,10 +2536,7 @@ int __xstat(int ver, const char *pathname, struct stat *buf) { - - if (!pathname || - !buf || -- ( strcmp(pathname, "/dev/dsp") != 0 && -- strcmp(pathname, "/dev/adsp") != 0 && -- strcmp(pathname, "/dev/sndstat") != 0 && -- strcmp(pathname, "/dev/mixer") != 0 )) { -+ !is_audio_device_node(pathname)) { - LOAD_XSTAT_FUNC(); - return ___xstat(ver, pathname, buf); - } -@@ -2562,10 +2556,7 @@ int __xstat64(int ver, const char *pathname, struct stat64 *buf) { - - if (!pathname || - !buf || -- ( strcmp(pathname, "/dev/dsp") != 0 && -- strcmp(pathname, "/dev/adsp") != 0 && -- strcmp(pathname, "/dev/sndstat") != 0 && -- strcmp(pathname, "/dev/mixer") != 0 )) { -+ !is_audio_device_node(pathname)) { - LOAD_XSTAT64_FUNC(); - return ___xstat64(ver, pathname, buf); - } -@@ -2591,10 +2582,7 @@ FILE* fopen(const char *filename, const char *mode) { - - if (!filename || - !mode || -- ( strcmp(filename, "/dev/dsp") != 0 && -- strcmp(filename, "/dev/adsp") != 0 && -- strcmp(filename, "/dev/sndstat") != 0 && -- strcmp(filename, "/dev/mixer") != 0 )) { -+ !is_audio_device_node(filename)) { - LOAD_FOPEN_FUNC(); - return _fopen(filename, mode); - } -@@ -2634,10 +2622,7 @@ FILE *fopen64(const char *filename, const char *mode) { - - if (!filename || - !mode || -- ( strcmp(filename, "/dev/dsp") != 0 && -- strcmp(filename, "/dev/adsp") != 0 && -- strcmp(filename, "/dev/sndstat") != 0 && -- strcmp(filename, "/dev/mixer") != 0 )) { -+ !is_audio_device_node(filename)) { - LOAD_FOPEN64_FUNC(); - return _fopen64(filename, mode); - } --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0040-dbus-first-restart-timer-then-dispatch-it.diff b/packages/audio/pulseaudio/patches/0040-dbus-first-restart-timer-then-dispatch-it.diff deleted file mode 100644 index 93e97734d1..0000000000 --- a/packages/audio/pulseaudio/patches/0040-dbus-first-restart-timer-then-dispatch-it.diff +++ /dev/null @@ -1,92 +0,0 @@ -From 96592c21150e789156153dcebd14e201cd41cbeb Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 16 Feb 2010 02:49:44 +0100 -Subject: [PATCH 40/62] dbus: first restart timer, then dispatch it - -This makes sure that we don't access the timer after it might have been -destroyed already from the dbus timeout callback. - -https://bugzilla.redhat.com/attachment.cgi?id=389952 ---- - src/pulsecore/dbus-util.c | 29 ++++++++++++++++------------- - 1 files changed, 16 insertions(+), 13 deletions(-) - -diff --git a/src/pulsecore/dbus-util.c b/src/pulsecore/dbus-util.c -index 4e6148f..40b64a0 100644 ---- a/src/pulsecore/dbus-util.c -+++ b/src/pulsecore/dbus-util.c -@@ -44,17 +44,16 @@ struct pa_dbus_wrap_connection { - }; - - struct timeout_data { -- pa_dbus_wrap_connection *c; -+ pa_dbus_wrap_connection *connection; - DBusTimeout *timeout; - }; - - static void dispatch_cb(pa_mainloop_api *ea, pa_defer_event *ev, void *userdata) { - DBusConnection *conn = userdata; - -- if (dbus_connection_dispatch(conn) == DBUS_DISPATCH_COMPLETE) { -+ if (dbus_connection_dispatch(conn) == DBUS_DISPATCH_COMPLETE) - /* no more data to process, disable the deferred */ - ea->defer_enable(ev, 0); -- } - } - - /* DBusDispatchStatusFunction callback for the pa mainloop */ -@@ -131,13 +130,17 @@ static void handle_time_event(pa_mainloop_api *ea, pa_time_event* e, const struc - struct timeout_data *d = userdata; - - pa_assert(d); -- pa_assert(d->c); -+ pa_assert(d->connection); - - if (dbus_timeout_get_enabled(d->timeout)) { -- dbus_timeout_handle(d->timeout); -+ /* Restart it for the next scheduled time. We do this before -+ * calling dbus_timeout_handle() to make sure that the time -+ * event is still around. */ -+ ea->time_restart(e, pa_timeval_rtstore(&tv, -+ pa_timeval_load(t) + dbus_timeout_get_interval(d->timeout) * PA_USEC_PER_MSEC, -+ d->connection->use_rtclock)); - -- /* restart it for the next scheduled time */ -- ea->time_restart(e, pa_timeval_rtstore(&tv, pa_timeval_load(t) + dbus_timeout_get_interval(d->timeout) * PA_USEC_PER_MSEC, d->c->use_rtclock)); -+ dbus_timeout_handle(d->timeout); - } - } - -@@ -207,7 +210,7 @@ static dbus_bool_t add_timeout(DBusTimeout *timeout, void *data) { - return FALSE; - - d = pa_xnew(struct timeout_data, 1); -- d->c = c; -+ d->connection = c; - d->timeout = timeout; - ev = c->mainloop->time_new(c->mainloop, pa_timeval_rtstore(&tv, pa_rtclock_now() + dbus_timeout_get_interval(timeout) * PA_USEC_PER_MSEC, c->use_rtclock), handle_time_event, d); - c->mainloop->time_set_destroy(ev, time_event_destroy_cb); -@@ -236,15 +239,15 @@ static void toggle_timeout(DBusTimeout *timeout, void *data) { - struct timeval tv; - - pa_assert(d); -- pa_assert(d->c); -+ pa_assert(d->connection); - pa_assert(timeout); - - pa_assert_se(ev = dbus_timeout_get_data(timeout)); - -- if (dbus_timeout_get_enabled(timeout)) { -- d->c->mainloop->time_restart(ev, pa_timeval_rtstore(&tv, pa_rtclock_now() + dbus_timeout_get_interval(timeout) * PA_USEC_PER_MSEC, d->c->use_rtclock)); -- } else -- d->c->mainloop->time_restart(ev, pa_timeval_rtstore(&tv, PA_USEC_INVALID, d->c->use_rtclock)); -+ if (dbus_timeout_get_enabled(timeout)) -+ d->connection->mainloop->time_restart(ev, pa_timeval_rtstore(&tv, pa_rtclock_now() + dbus_timeout_get_interval(timeout) * PA_USEC_PER_MSEC, d->connection->use_rtclock)); -+ else -+ d->connection->mainloop->time_restart(ev, pa_timeval_rtstore(&tv, PA_USEC_INVALID, d->connection->use_rtclock)); - } - - static void wakeup_main(void *userdata) { --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0041-fdsem-be-more-verbose-when-reading-from-eventfd-fail.diff b/packages/audio/pulseaudio/patches/0041-fdsem-be-more-verbose-when-reading-from-eventfd-fail.diff deleted file mode 100644 index 9267fe1f2b..0000000000 --- a/packages/audio/pulseaudio/patches/0041-fdsem-be-more-verbose-when-reading-from-eventfd-fail.diff +++ /dev/null @@ -1,111 +0,0 @@ -From 5e2af2d3f3dea473d46b33a5e90a993ac5da3f35 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 16 Feb 2010 03:36:44 +0100 -Subject: [PATCH 41/62] fdsem: be more verbose when reading from eventfd fails. - -Apperently reading from an eventfd can fail, which results in an assert -to be hit. I am not sure about the reason for the failure, but in -attempt to track down the issue the next time is hit this prints a more -useful log message. - -https://bugzilla.redhat.com/attachment.cgi?id=386380 ---- - src/pulsecore/fdsem.c | 41 +++++++++++++++++++++++++++++++++++------ - 1 files changed, 35 insertions(+), 6 deletions(-) - -diff --git a/src/pulsecore/fdsem.c b/src/pulsecore/fdsem.c -index 380f34f..00836f9 100644 ---- a/src/pulsecore/fdsem.c -+++ b/src/pulsecore/fdsem.c -@@ -35,6 +35,7 @@ - #include - #include - #include -+#include - #include - - #ifndef HAVE_PIPE -@@ -159,7 +160,12 @@ static void flush(pa_fdsem *f) { - uint64_t u; - - if ((r = read(f->efd, &u, sizeof(u))) != sizeof(u)) { -- pa_assert(r < 0 && errno == EINTR); -+ -+ if (r >= 0 || errno != EINTR) { -+ pa_log_error("Invalid read from eventfd: %s", r < 0 ? pa_cstrerror(errno) : "EOF"); -+ pa_assert_not_reached(); -+ } -+ - continue; - } - r = (ssize_t) u; -@@ -167,7 +173,12 @@ static void flush(pa_fdsem *f) { - #endif - - if ((r = read(f->fds[0], &x, sizeof(x))) <= 0) { -- pa_assert(r < 0 && errno == EINTR); -+ -+ if (r >= 0 || errno != EINTR) { -+ pa_log_error("Invalid read from pipe: %s", r < 0 ? pa_cstrerror(errno) : "EOF"); -+ pa_assert_not_reached(); -+ } -+ - continue; - } - -@@ -192,14 +203,22 @@ void pa_fdsem_post(pa_fdsem *f) { - uint64_t u = 1; - - if ((r = write(f->efd, &u, sizeof(u))) != sizeof(u)) { -- pa_assert(r < 0 && errno == EINTR); -+ if (r >= 0 || errno != EINTR) { -+ pa_log_error("Invalid read from pipe: %s", r < 0 ? pa_cstrerror(errno) : "EOF"); -+ pa_assert_not_reached(); -+ } -+ - continue; - } - } else - #endif - - if ((r = write(f->fds[1], &x, 1)) != 1) { -- pa_assert(r < 0 && errno == EINTR); -+ if (r >= 0 || errno != EINTR) { -+ pa_log_error("Invalid read from pipe: %s", r < 0 ? pa_cstrerror(errno) : "EOF"); -+ pa_assert_not_reached(); -+ } -+ - continue; - } - -@@ -228,7 +247,12 @@ void pa_fdsem_wait(pa_fdsem *f) { - uint64_t u; - - if ((r = read(f->efd, &u, sizeof(u))) != sizeof(u)) { -- pa_assert(r < 0 && errno == EINTR); -+ -+ if (r >= 0 || errno != EINTR) { -+ pa_log_error("Invalid read from pipe: %s", r < 0 ? pa_cstrerror(errno) : "EOF"); -+ pa_assert_not_reached(); -+ } -+ - continue; - } - -@@ -237,7 +261,12 @@ void pa_fdsem_wait(pa_fdsem *f) { - #endif - - if ((r = read(f->fds[0], &x, sizeof(x))) <= 0) { -- pa_assert(r < 0 && errno == EINTR); -+ -+ if (r >= 0 || errno != EINTR) { -+ pa_log_error("Invalid read from pipe: %s", r < 0 ? pa_cstrerror(errno) : "EOF"); -+ pa_assert_not_reached(); -+ } -+ - continue; - } - --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0042-pacat-always-fully-fulfill-write-requests.diff b/packages/audio/pulseaudio/patches/0042-pacat-always-fully-fulfill-write-requests.diff deleted file mode 100644 index c69438f1fe..0000000000 --- a/packages/audio/pulseaudio/patches/0042-pacat-always-fully-fulfill-write-requests.diff +++ /dev/null @@ -1,79 +0,0 @@ -From 19fa81bf1375032cb1a27c7715a28a52b238d4cb Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Thu, 18 Feb 2010 01:54:51 +0100 -Subject: [PATCH 42/62] pacat: always fully fulfill write requests - -Make sure we always fulfill write requests from the server. If we don't -the server won't ask us again and playback will stay stuck. - -https://tango.0pointer.de/pipermail/pulseaudio-discuss/2010-February/006611.html ---- - src/utils/pacat.c | 47 ++++++++++++++++++++++++++++++----------------- - 1 files changed, 30 insertions(+), 17 deletions(-) - -diff --git a/src/utils/pacat.c b/src/utils/pacat.c -index a5d2e9a..d136f6b 100644 ---- a/src/utils/pacat.c -+++ b/src/utils/pacat.c -@@ -195,28 +195,41 @@ static void stream_write_callback(pa_stream *s, size_t length, void *userdata) { - - pa_assert(sndfile); - -- if (pa_stream_begin_write(s, &data, &length) < 0) { -- pa_log(_("pa_stream_begin_write() failed: %s"), pa_strerror(pa_context_errno(context))); -- quit(1); -- return; -- } -+ for (;;) { -+ size_t data_length = length; - -- if (readf_function) { -- size_t k = pa_frame_size(&sample_spec); -+ if (pa_stream_begin_write(s, &data, &data_length) < 0) { -+ pa_log(_("pa_stream_begin_write() failed: %s"), pa_strerror(pa_context_errno(context))); -+ quit(1); -+ return; -+ } - -- if ((bytes = readf_function(sndfile, data, (sf_count_t) (length/k))) > 0) -- bytes *= (sf_count_t) k; -+ if (readf_function) { -+ size_t k = pa_frame_size(&sample_spec); - -- } else -- bytes = sf_read_raw(sndfile, data, (sf_count_t) length); -+ if ((bytes = readf_function(sndfile, data, (sf_count_t) (data_length/k))) > 0) -+ bytes *= (sf_count_t) k; - -- if (bytes > 0) -- pa_stream_write(s, data, (size_t) bytes, NULL, 0, PA_SEEK_RELATIVE); -- else -- pa_stream_cancel_write(s); -+ } else -+ bytes = sf_read_raw(sndfile, data, (sf_count_t) data_length); - -- if (bytes < (sf_count_t) length) -- start_drain(); -+ if (bytes > 0) -+ pa_stream_write(s, data, (size_t) bytes, NULL, 0, PA_SEEK_RELATIVE); -+ else -+ pa_stream_cancel_write(s); -+ -+ /* EOF? */ -+ if (bytes < (sf_count_t) data_length) { -+ start_drain(); -+ break; -+ } -+ -+ /* Request fulfilled */ -+ if ((size_t) bytes >= length) -+ break; -+ -+ length -= bytes; -+ } - } - } - --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0043-pacmd-store-away-fd-type.diff b/packages/audio/pulseaudio/patches/0043-pacmd-store-away-fd-type.diff deleted file mode 100644 index d71cb81aa8..0000000000 --- a/packages/audio/pulseaudio/patches/0043-pacmd-store-away-fd-type.diff +++ /dev/null @@ -1,60 +0,0 @@ -From 96ec29c6b2a40d3851f46587143a4ba6dce29d0d Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Thu, 18 Feb 2010 02:32:35 +0100 -Subject: [PATCH 43/62] pacmd: store away fd type - ---- - src/utils/pacmd.c | 9 +++++---- - 1 files changed, 5 insertions(+), 4 deletions(-) - -diff --git a/src/utils/pacmd.c b/src/utils/pacmd.c -index 5ef57e3..59aae48 100644 ---- a/src/utils/pacmd.c -+++ b/src/utils/pacmd.c -@@ -61,6 +61,7 @@ int main(int argc, char*argv[]) { - char *cli; - pa_bool_t ibuf_eof, obuf_eof, ibuf_closed, obuf_closed; - struct pollfd pollfd[N_WATCH]; -+ int stdin_type = 0, stdout_type = 0, fd_type = 0; - - setlocale(LC_ALL, ""); - bindtextdomain(GETTEXT_PACKAGE, PULSE_LOCALEDIR); -@@ -166,7 +167,7 @@ int main(int argc, char*argv[]) { - ssize_t r; - pa_assert(!ibuf_length); - -- if ((r = pa_read(STDIN_FILENO, ibuf, sizeof(ibuf), NULL)) <= 0) { -+ if ((r = pa_read(STDIN_FILENO, ibuf, sizeof(ibuf), &stdin_type)) <= 0) { - if (r < 0) { - pa_log(_("read(): %s"), strerror(errno)); - goto fail; -@@ -183,7 +184,7 @@ int main(int argc, char*argv[]) { - ssize_t r; - pa_assert(!obuf_length); - -- if ((r = pa_read(fd, obuf, sizeof(obuf), NULL)) <= 0) { -+ if ((r = pa_read(fd, obuf, sizeof(obuf), &fd_type)) <= 0) { - if (r < 0) { - pa_log(_("read(): %s"), strerror(errno)); - goto fail; -@@ -203,7 +204,7 @@ int main(int argc, char*argv[]) { - ssize_t r; - pa_assert(obuf_length); - -- if ((r = pa_write(STDOUT_FILENO, obuf + obuf_index, obuf_length, NULL)) < 0) { -+ if ((r = pa_write(STDOUT_FILENO, obuf + obuf_index, obuf_length, &stdout_type)) < 0) { - pa_log(_("write(): %s"), strerror(errno)); - goto fail; - } -@@ -219,7 +220,7 @@ int main(int argc, char*argv[]) { - ssize_t r; - pa_assert(ibuf_length); - -- if ((r = pa_write(fd, ibuf + ibuf_index, ibuf_length, NULL)) < 0) { -+ if ((r = pa_write(fd, ibuf + ibuf_index, ibuf_length, &fd_type)) < 0) { - pa_log(_("write(): %s"), strerror(errno)); - goto fail; - } --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0044-pacmd-don-t-enter-busy-loop-when-reading-from-stdin-.diff b/packages/audio/pulseaudio/patches/0044-pacmd-don-t-enter-busy-loop-when-reading-from-stdin-.diff deleted file mode 100644 index 5066980811..0000000000 --- a/packages/audio/pulseaudio/patches/0044-pacmd-don-t-enter-busy-loop-when-reading-from-stdin-.diff +++ /dev/null @@ -1,257 +0,0 @@ -From 6e064d1d6d0292d230c752b1f41034fd0754487b Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Thu, 18 Feb 2010 03:28:56 +0100 -Subject: [PATCH 44/62] pacmd: don't enter busy loop when reading from stdin very early - -pointed out in: - -https://tango.0pointer.de/pipermail/pulseaudio-discuss/2010-January/006365.html ---- - src/utils/pacmd.c | 186 ++++++++++++++++++++++++++++------------------------ - 1 files changed, 100 insertions(+), 86 deletions(-) - -diff --git a/src/utils/pacmd.c b/src/utils/pacmd.c -index 59aae48..87661e3 100644 ---- a/src/utils/pacmd.c -+++ b/src/utils/pacmd.c -@@ -45,13 +45,6 @@ - - int main(int argc, char*argv[]) { - -- enum { -- WATCH_STDIN, -- WATCH_STDOUT, -- WATCH_SOCKET, -- N_WATCH -- }; -- - pid_t pid ; - int fd = -1; - int ret = 1, i; -@@ -60,7 +53,9 @@ int main(int argc, char*argv[]) { - size_t ibuf_index, ibuf_length, obuf_index, obuf_length; - char *cli; - pa_bool_t ibuf_eof, obuf_eof, ibuf_closed, obuf_closed; -- struct pollfd pollfd[N_WATCH]; -+ struct pollfd pollfd[3]; -+ struct pollfd *watch_socket, *watch_stdin, *watch_stdout; -+ - int stdin_type = 0, stdout_type = 0, fd_type = 0; - - setlocale(LC_ALL, ""); -@@ -129,32 +124,53 @@ int main(int argc, char*argv[]) { - ibuf_eof = TRUE; - } - -- pa_zero(pollfd); -- -- pollfd[WATCH_STDIN].fd = STDIN_FILENO; -- pollfd[WATCH_STDOUT].fd = STDOUT_FILENO; -- pollfd[WATCH_SOCKET].fd = fd; -- - for (;;) { -+ struct pollfd *p; -+ - if (ibuf_eof && - obuf_eof && - ibuf_length <= 0 && - obuf_length <= 0) - break; - -- pollfd[WATCH_STDIN].events = pollfd[WATCH_STDOUT].events = pollfd[WATCH_SOCKET].events = 0; -+ if (ibuf_length <= 0 && ibuf_eof && !ibuf_closed) { -+ shutdown(fd, SHUT_WR); -+ ibuf_closed = TRUE; -+ } - -- if (obuf_length > 0) -- pollfd[WATCH_STDOUT].events |= POLLOUT; -- else if (!obuf_eof) -- pollfd[WATCH_SOCKET].events |= POLLIN; -+ if (obuf_length <= 0 && obuf_eof && !obuf_closed) { -+ shutdown(fd, SHUT_RD); -+ obuf_closed = TRUE; -+ } -+ -+ pa_zero(pollfd); -+ -+ p = pollfd; - -- if (ibuf_length > 0) -- pollfd[WATCH_SOCKET].events |= POLLOUT; -- else if (!ibuf_eof) -- pollfd[WATCH_STDIN].events |= POLLIN; -+ if (ibuf_length > 0 || (!obuf_eof && obuf_length <= 0)) { -+ watch_socket = p++; -+ watch_socket->fd = fd; -+ watch_socket->events = -+ (ibuf_length > 0 ? POLLOUT : 0) | -+ (!obuf_eof && obuf_length <= 0 ? POLLIN : 0); -+ } else -+ watch_socket = NULL; - -- if (poll(pollfd, N_WATCH, -1) < 0) { -+ if (!ibuf_eof && ibuf_length <= 0) { -+ watch_stdin = p++; -+ watch_stdin->fd = STDIN_FILENO; -+ watch_stdin->events = POLLIN; -+ } else -+ watch_stdin = NULL; -+ -+ if (obuf_length > 0) { -+ watch_stdout = p++; -+ watch_stdout->fd = STDOUT_FILENO; -+ watch_stdout->events = POLLOUT; -+ } else -+ watch_stdout = NULL; -+ -+ if (poll(pollfd, p-pollfd, -1) < 0) { - - if (errno == EINTR) - continue; -@@ -163,82 +179,80 @@ int main(int argc, char*argv[]) { - goto fail; - } - -- if (pollfd[WATCH_STDIN].revents & POLLIN) { -- ssize_t r; -- pa_assert(!ibuf_length); -- -- if ((r = pa_read(STDIN_FILENO, ibuf, sizeof(ibuf), &stdin_type)) <= 0) { -- if (r < 0) { -- pa_log(_("read(): %s"), strerror(errno)); -- goto fail; -+ if (watch_stdin) { -+ if (watch_stdin->revents & POLLIN) { -+ ssize_t r; -+ pa_assert(ibuf_length <= 0); -+ -+ if ((r = pa_read(STDIN_FILENO, ibuf, sizeof(ibuf), &stdin_type)) <= 0) { -+ if (r < 0) { -+ pa_log(_("read(): %s"), strerror(errno)); -+ goto fail; -+ } -+ -+ ibuf_eof = TRUE; -+ } else { -+ ibuf_length = (size_t) r; -+ ibuf_index = 0; - } -- -+ } else if (watch_stdin->revents & POLLHUP) - ibuf_eof = TRUE; -- } else { -- ibuf_length = (size_t) r; -- ibuf_index = 0; -- } - } - -- if (pollfd[WATCH_SOCKET].revents & POLLIN) { -- ssize_t r; -- pa_assert(!obuf_length); -- -- if ((r = pa_read(fd, obuf, sizeof(obuf), &fd_type)) <= 0) { -- if (r < 0) { -- pa_log(_("read(): %s"), strerror(errno)); -- goto fail; -+ if (watch_socket) { -+ if (watch_socket->revents & POLLIN) { -+ ssize_t r; -+ pa_assert(obuf_length <= 0); -+ -+ if ((r = pa_read(fd, obuf, sizeof(obuf), &fd_type)) <= 0) { -+ if (r < 0) { -+ pa_log(_("read(): %s"), strerror(errno)); -+ goto fail; -+ } -+ -+ obuf_eof = TRUE; -+ } else { -+ obuf_length = (size_t) r; -+ obuf_index = 0; - } -- -+ } else if (watch_socket->revents & POLLHUP) - obuf_eof = TRUE; -- } else { -- obuf_length = (size_t) r; -- obuf_index = 0; -- } - } - -- if (pollfd[WATCH_STDOUT].revents & POLLHUP) { -- obuf_eof = TRUE; -- obuf_length = 0; -- } else if (pollfd[WATCH_STDOUT].revents & POLLOUT) { -- ssize_t r; -- pa_assert(obuf_length); -- -- if ((r = pa_write(STDOUT_FILENO, obuf + obuf_index, obuf_length, &stdout_type)) < 0) { -- pa_log(_("write(): %s"), strerror(errno)); -- goto fail; -- } -- -- obuf_length -= (size_t) r; -- obuf_index += obuf_index; -- } -+ if (watch_stdout) { -+ if (watch_stdout->revents & POLLHUP) { -+ obuf_eof = TRUE; -+ obuf_length = 0; -+ } else if (watch_stdout->revents & POLLOUT) { -+ ssize_t r; -+ pa_assert(obuf_length > 0); - -- if (pollfd[WATCH_SOCKET].revents & POLLHUP) { -- ibuf_eof = TRUE; -- ibuf_length = 0; -- } if (pollfd[WATCH_SOCKET].revents & POLLOUT) { -- ssize_t r; -- pa_assert(ibuf_length); -+ if ((r = pa_write(STDOUT_FILENO, obuf + obuf_index, obuf_length, &stdout_type)) < 0) { -+ pa_log(_("write(): %s"), strerror(errno)); -+ goto fail; -+ } - -- if ((r = pa_write(fd, ibuf + ibuf_index, ibuf_length, &fd_type)) < 0) { -- pa_log(_("write(): %s"), strerror(errno)); -- goto fail; -+ obuf_length -= (size_t) r; -+ obuf_index += obuf_index; - } -- -- ibuf_length -= (size_t) r; -- ibuf_index += obuf_index; - } - -- if (ibuf_length <= 0 && ibuf_eof && !ibuf_closed) { -- pa_close(STDIN_FILENO); -- shutdown(fd, SHUT_WR); -- ibuf_closed = TRUE; -- } -+ if (watch_socket) { -+ if (watch_socket->revents & POLLHUP) { -+ ibuf_eof = TRUE; -+ ibuf_length = 0; -+ } if (watch_socket->revents & POLLOUT) { -+ ssize_t r; -+ pa_assert(ibuf_length > 0); - -- if (obuf_length <= 0 && obuf_eof && !obuf_closed) { -- shutdown(fd, SHUT_RD); -- pa_close(STDOUT_FILENO); -- obuf_closed = TRUE; -+ if ((r = pa_write(fd, ibuf + ibuf_index, ibuf_length, &fd_type)) < 0) { -+ pa_log(_("write(): %s"), strerror(errno)); -+ goto fail; -+ } -+ -+ ibuf_length -= (size_t) r; -+ ibuf_index += obuf_index; -+ } - } - } - --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0045-shm-don-t-complain-about-missing-SHM-segments.diff b/packages/audio/pulseaudio/patches/0045-shm-don-t-complain-about-missing-SHM-segments.diff deleted file mode 100644 index 8f2af7aeeb..0000000000 --- a/packages/audio/pulseaudio/patches/0045-shm-don-t-complain-about-missing-SHM-segments.diff +++ /dev/null @@ -1,29 +0,0 @@ -From dfe27f623765b20bdaff2306109f89baca67d0cf Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Fri, 19 Feb 2010 03:29:36 +0100 -Subject: [PATCH 45/62] shm: don't complain about missing SHM segments - -If two clients try to cleanup the SHM directory at the same time, they -might want to open and then delete the same segment at the same time, in -which case one client might win, the other one lose. In this case, don't -warn about ENOENT. ---- - src/pulsecore/shm.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/src/pulsecore/shm.c b/src/pulsecore/shm.c -index fbf777a..1e31d54 100644 ---- a/src/pulsecore/shm.c -+++ b/src/pulsecore/shm.c -@@ -286,7 +286,7 @@ int pa_shm_attach_ro(pa_shm *m, unsigned id) { - segment_name(fn, sizeof(fn), m->id = id); - - if ((fd = shm_open(fn, O_RDONLY, 0)) < 0) { -- if (errno != EACCES) -+ if (errno != EACCES && errno != ENOENT) - pa_log("shm_open() failed: %s", pa_cstrerror(errno)); - goto fail; - } --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0046-vala-fix-definition-of-INVALID_INDEX.diff b/packages/audio/pulseaudio/patches/0046-vala-fix-definition-of-INVALID_INDEX.diff deleted file mode 100644 index dbad446fbd..0000000000 --- a/packages/audio/pulseaudio/patches/0046-vala-fix-definition-of-INVALID_INDEX.diff +++ /dev/null @@ -1,25 +0,0 @@ -From 5ce18c32f6ba8202c9f17f84aaffbdbbd8df071c Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Fri, 19 Feb 2010 03:31:46 +0100 -Subject: [PATCH 46/62] vala: fix definition of INVALID_INDEX - ---- - vala/libpulse.vapi | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/vala/libpulse.vapi b/vala/libpulse.vapi -index 9e05b14..b02bb56 100644 ---- a/vala/libpulse.vapi -+++ b/vala/libpulse.vapi -@@ -46,7 +46,7 @@ namespace PulseAudio { - [CCode (cname="PA_CHECK_VERSION")] - public bool CHECK_VERSION(int major, int minor, int micro); - -- [CCode (cname="INVALID_INDEX")] -+ [CCode (cname="PA_INVALID_INDEX")] - public const uint32 INVALID_INDEX; - - [CCode (cname="pa_free_cb_t")] --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0047-vala-fix-definition-of-the-GLib-mainloop-adapter.diff b/packages/audio/pulseaudio/patches/0047-vala-fix-definition-of-the-GLib-mainloop-adapter.diff deleted file mode 100644 index 6946e6bd78..0000000000 --- a/packages/audio/pulseaudio/patches/0047-vala-fix-definition-of-the-GLib-mainloop-adapter.diff +++ /dev/null @@ -1,30 +0,0 @@ -From 6bbdd200e89bdbf180071e5281c0feb9617de81d Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Fri, 19 Feb 2010 03:32:00 +0100 -Subject: [PATCH 47/62] vala: fix definition of the GLib mainloop adapter - ---- - vala/libpulse.vapi | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/vala/libpulse.vapi b/vala/libpulse.vapi -index b02bb56..d47ef73 100644 ---- a/vala/libpulse.vapi -+++ b/vala/libpulse.vapi -@@ -879,11 +879,11 @@ namespace PulseAudio { - } - - [Compact] -- [CCode (cname="pa_glib_mainloop", cprefix="pa_glib_mainloop_", free_function="pa_glib_mainloop_free")] -+ [CCode (cheader_filename="pulse/glib-mainloop.h", cname="pa_glib_mainloop", cprefix="pa_glib_mainloop_", free_function="pa_glib_mainloop_free")] - public class GLibMainLoop { - - [CCode (cname="pa_glib_mainloop_new")] -- public GLibMainLoop(); -+ public GLibMainLoop(MainContext? c = null); - - public unowned MainLoopApi get_api(); - } --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0048-Add-missing-profile-and-alsa-mixer-paths-to-src-Make.diff b/packages/audio/pulseaudio/patches/0048-Add-missing-profile-and-alsa-mixer-paths-to-src-Make.diff deleted file mode 100644 index 79eb009e62..0000000000 --- a/packages/audio/pulseaudio/patches/0048-Add-missing-profile-and-alsa-mixer-paths-to-src-Make.diff +++ /dev/null @@ -1,49 +0,0 @@ -From 047e16f2d18c20ea8d9dbb8a24175e1c4bb34d5e Mon Sep 17 00:00:00 2001 -From: Daniel T Chen -Date: Fri, 19 Feb 2010 00:23:17 -0500 -Subject: [PATCH 48/62] Add missing profile and alsa-mixer/paths to src/Makefile.am - -Commits e8cb96c and 0c836aa created mixer paths but did not update -src/Makefile.am. Building a snapshot containing these two commits -therefore results in the user being unable to adjust the volume or -(un)mute through PA. Fix this by adding the two new mixer paths -files to src/Makefile.am. - -Likewise, commit 66e1a2d created a profile for the M-Audio FastTrack -Pro USB but did not update src/Makefile.am. Fix this by adding the -profile to src/Makefile.am. ---- - src/Makefile.am | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -diff --git a/src/Makefile.am b/src/Makefile.am -index 598e77f..ffe7558 100644 ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -109,6 +109,7 @@ MODULE_LDFLAGS = -module -disable-static -avoid-version $(LDFLAGS_NOUNDEFINED) - - ALSA_PROFILES = \ - modules/alsa/mixer/profile-sets/default.conf \ -+ modules/alsa/mixer/profile-sets/maudio-fasttrack-pro.conf \ - modules/alsa/mixer/profile-sets/native-instruments-audio4dj.conf \ - modules/alsa/mixer/profile-sets/native-instruments-audio8dj.conf - -@@ -117,6 +118,7 @@ ALSA_PATHS = \ - modules/alsa/mixer/paths/analog-input.conf \ - modules/alsa/mixer/paths/analog-input.conf.common \ - modules/alsa/mixer/paths/analog-input-fm.conf \ -+ modules/alsa/mixer/paths/analog-input-internal-mic.conf \ - modules/alsa/mixer/paths/analog-input-linein.conf \ - modules/alsa/mixer/paths/analog-input-mic.conf \ - modules/alsa/mixer/paths/analog-input-mic.conf.common \ -@@ -126,6 +128,7 @@ ALSA_PATHS = \ - modules/alsa/mixer/paths/analog-output.conf \ - modules/alsa/mixer/paths/analog-output-speaker.conf \ - modules/alsa/mixer/paths/analog-output.conf.common \ -+ modules/alsa/mixer/paths/analog-output-desktop-speaker.conf \ - modules/alsa/mixer/paths/analog-output-headphones.conf \ - modules/alsa/mixer/paths/analog-output-headphones-2.conf \ - modules/alsa/mixer/paths/analog-output-lfe-on-mono.conf \ --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0049-channelmap-Use-Subwoofer-as-pretty-name-for-LFE.diff b/packages/audio/pulseaudio/patches/0049-channelmap-Use-Subwoofer-as-pretty-name-for-LFE.diff deleted file mode 100644 index 2223ee0962..0000000000 --- a/packages/audio/pulseaudio/patches/0049-channelmap-Use-Subwoofer-as-pretty-name-for-LFE.diff +++ /dev/null @@ -1,28 +0,0 @@ -From 3f44bf0afaba9c227f09a475f4886c14813afc2f Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Sun, 21 Feb 2010 16:19:40 +0100 -Subject: [PATCH 49/62] channelmap: Use "Subwoofer" as pretty name for LFE - -The pretty name is suspposed to be understandable by non-technical -folks, and they are generally more used to the term "Subwoofer" than -"Low Frequency Emitter", so let's change the name here. ---- - src/pulse/channelmap.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/src/pulse/channelmap.c b/src/pulse/channelmap.c -index 9b51626..83fdb43 100644 ---- a/src/pulse/channelmap.c -+++ b/src/pulse/channelmap.c -@@ -112,7 +112,7 @@ const char *const pretty_table[PA_CHANNEL_POSITION_MAX] = { - [PA_CHANNEL_POSITION_REAR_LEFT] = N_("Rear Left"), - [PA_CHANNEL_POSITION_REAR_RIGHT] = N_("Rear Right"), - -- [PA_CHANNEL_POSITION_LFE] = N_("Low Frequency Emmiter"), -+ [PA_CHANNEL_POSITION_LFE] = N_("Subwoofer"), - - [PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER] = N_("Front Left-of-center"), - [PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER] = N_("Front Right-of-center"), --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0050-vala-fix-wrapping-of-port-setting-calls.diff b/packages/audio/pulseaudio/patches/0050-vala-fix-wrapping-of-port-setting-calls.diff deleted file mode 100644 index 9bc20b8f11..0000000000 --- a/packages/audio/pulseaudio/patches/0050-vala-fix-wrapping-of-port-setting-calls.diff +++ /dev/null @@ -1,34 +0,0 @@ -From 117c99de3af9a19104d946852821f7b2f5646526 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Sun, 21 Feb 2010 16:21:13 +0100 -Subject: [PATCH 50/62] vala: fix wrapping of port setting calls - ---- - vala/libpulse.vapi | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/vala/libpulse.vapi b/vala/libpulse.vapi -index d47ef73..21c0f7c 100644 ---- a/vala/libpulse.vapi -+++ b/vala/libpulse.vapi -@@ -1024,7 +1024,7 @@ namespace PulseAudio { - public Operation? suspend_sink_by_index(uint32 idx, bool suspend, SuccessCb? cb = null); - - public Operation? set_sink_port_by_name(string name, string port, SuccessCb? cb = null); -- public Operation? set_sink_port_by_index(string idx, string port, SuccessCb? cb = null); -+ public Operation? set_sink_port_by_index(uint32 idx, string port, SuccessCb? cb = null); - - public Operation? get_source_info_by_name(string name, SourceInfoCb cb); - public Operation? get_source_info_by_index(uint32 idx, SourceInfoCb cb); -@@ -1039,7 +1039,7 @@ namespace PulseAudio { - public Operation? suspend_source_by_index(uint32 idx, bool suspend, SuccessCb? cb = null); - - public Operation? set_source_port_by_name(string name, string port, SuccessCb? cb = null); -- public Operation? set_source_port_by_index(string idx, string port, SuccessCb? cb = null); -+ public Operation? set_source_port_by_index(uint32 idx, string port, SuccessCb? cb = null); - - public Operation? get_server_info(ServerInfoCb cb); - --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0051-proplist-explicitly-mention-a-role-test.diff b/packages/audio/pulseaudio/patches/0051-proplist-explicitly-mention-a-role-test.diff deleted file mode 100644 index 739f20231a..0000000000 --- a/packages/audio/pulseaudio/patches/0051-proplist-explicitly-mention-a-role-test.diff +++ /dev/null @@ -1,25 +0,0 @@ -From ddabaa3b0f7b95e2cf5279f5be74769905af8496 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Sun, 21 Feb 2010 16:21:43 +0100 -Subject: [PATCH 51/62] proplist: explicitly mention a role 'test' - ---- - src/pulse/proplist.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/src/pulse/proplist.h b/src/pulse/proplist.h -index 8dff8df..6283177 100644 ---- a/src/pulse/proplist.h -+++ b/src/pulse/proplist.h -@@ -59,7 +59,7 @@ PA_C_DECL_BEGIN - /** For streams: an XDG icon name for the media. e.g. "audio-x-mp3" */ - #define PA_PROP_MEDIA_ICON_NAME "media.icon_name" - --/** For streams: logic role of this media. One of the strings "video", "music", "game", "event", "phone", "animation", "production", "a11y" */ -+/** For streams: logic role of this media. One of the strings "video", "music", "game", "event", "phone", "animation", "production", "a11y", "test" */ - #define PA_PROP_MEDIA_ROLE "media.role" - - /** For event sound streams: XDG event sound name. e.g. "message-new-email" (Event sound streams are those with media.role set to "event") */ --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0052-stream-restore-be-a-little-bit-more-verbose-why-we-d.diff b/packages/audio/pulseaudio/patches/0052-stream-restore-be-a-little-bit-more-verbose-why-we-d.diff deleted file mode 100644 index 23d1cd8891..0000000000 --- a/packages/audio/pulseaudio/patches/0052-stream-restore-be-a-little-bit-more-verbose-why-we-d.diff +++ /dev/null @@ -1,25 +0,0 @@ -From 8adf536426a86e986fb5bd4ad31ba2d50054c485 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Sun, 21 Feb 2010 16:22:17 +0100 -Subject: [PATCH 52/62] stream-restore: be a little bit more verbose why we don't reastore a sink - ---- - src/modules/module-stream-restore.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/src/modules/module-stream-restore.c b/src/modules/module-stream-restore.c -index 9b6f914..00ce5ab 100644 ---- a/src/modules/module-stream-restore.c -+++ b/src/modules/module-stream-restore.c -@@ -394,7 +394,7 @@ static pa_hook_result_t sink_input_new_hook_callback(pa_core *c, pa_sink_input_n - return PA_HOOK_OK; - - if (new_data->sink) -- pa_log_debug("Not restoring device for stream %s, because already set.", name); -+ pa_log_debug("Not restoring device for stream %s, because already set to '%s'.", name, new_data->sink->name); - else if ((e = read_entry(u, name))) { - pa_sink *s = NULL; - --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0053-sample-cache-use-the-sample-name-as-unmodified-fallb.diff b/packages/audio/pulseaudio/patches/0053-sample-cache-use-the-sample-name-as-unmodified-fallb.diff deleted file mode 100644 index 0461375223..0000000000 --- a/packages/audio/pulseaudio/patches/0053-sample-cache-use-the-sample-name-as-unmodified-fallb.diff +++ /dev/null @@ -1,26 +0,0 @@ -From 180589511dab1b5d0388b58b41a0e9843ea1a35a Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Sun, 21 Feb 2010 16:23:25 +0100 -Subject: [PATCH 53/62] sample-cache: use the sample name as unmodified fallback in the properties when playing a sample from the cache - ---- - src/pulsecore/core-scache.c | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -diff --git a/src/pulsecore/core-scache.c b/src/pulsecore/core-scache.c -index 1fb81d0..95aaa10 100644 ---- a/src/pulsecore/core-scache.c -+++ b/src/pulsecore/core-scache.c -@@ -310,7 +310,8 @@ int pa_scache_play_item(pa_core *c, const char *name, pa_sink *sink, pa_volume_t - return -1; - - merged = pa_proplist_new(); -- pa_proplist_setf(merged, PA_PROP_MEDIA_NAME, "Sample %s", name); -+ pa_proplist_sets(merged, PA_PROP_MEDIA_NAME, name); -+ pa_proplist_sets(merged, PA_PROP_EVENT_ID, name); - - if (e->lazy && !e->memchunk.memblock) { - pa_channel_map old_channel_map = e->channel_map; --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0054-scache-when-playing-a-sample-from-the-cache-make-sur.diff b/packages/audio/pulseaudio/patches/0054-scache-when-playing-a-sample-from-the-cache-make-sur.diff deleted file mode 100644 index 93bc081722..0000000000 --- a/packages/audio/pulseaudio/patches/0054-scache-when-playing-a-sample-from-the-cache-make-sur.diff +++ /dev/null @@ -1,153 +0,0 @@ -From f9b9579cf4fe65d3619629b5bc28ce02ceca305e Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Sun, 21 Feb 2010 17:35:05 +0100 -Subject: [PATCH 54/62] scache: when playing a sample from the cache make sure not queue them up when the sink is suspended - -libcanberra already sets the appropriate flags for uncached sample -streams, we now need to make sure to set them for cached samples too. ---- - src/pulsecore/core-scache.c | 7 ++++++- - src/pulsecore/play-memblockq.c | 7 +++++-- - src/pulsecore/play-memblockq.h | 18 ++++++++++-------- - src/pulsecore/play-memchunk.c | 3 ++- - src/pulsecore/play-memchunk.h | 15 ++++++++------- - 5 files changed, 31 insertions(+), 19 deletions(-) - -diff --git a/src/pulsecore/core-scache.c b/src/pulsecore/core-scache.c -index 95aaa10..0172419 100644 ---- a/src/pulsecore/core-scache.c -+++ b/src/pulsecore/core-scache.c -@@ -351,7 +351,12 @@ int pa_scache_play_item(pa_core *c, const char *name, pa_sink *sink, pa_volume_t - if (p) - pa_proplist_update(merged, PA_UPDATE_REPLACE, p); - -- if (pa_play_memchunk(sink, &e->sample_spec, &e->channel_map, &e->memchunk, pass_volume ? &r : NULL, merged, sink_input_idx) < 0) -+ if (pa_play_memchunk(sink, -+ &e->sample_spec, &e->channel_map, -+ &e->memchunk, -+ pass_volume ? &r : NULL, -+ merged, -+ PA_SINK_INPUT_NO_CREATE_ON_SUSPEND|PA_SINK_INPUT_KILL_ON_SUSPEND, sink_input_idx) < 0) - goto fail; - - pa_proplist_free(merged); -diff --git a/src/pulsecore/play-memblockq.c b/src/pulsecore/play-memblockq.c -index f528c49..0d6da3e 100644 ---- a/src/pulsecore/play-memblockq.c -+++ b/src/pulsecore/play-memblockq.c -@@ -173,7 +173,8 @@ pa_sink_input* pa_memblockq_sink_input_new( - const pa_channel_map *map, - pa_memblockq *q, - pa_cvolume *volume, -- pa_proplist *p) { -+ pa_proplist *p, -+ pa_sink_input_flags_t flags) { - - memblockq_stream *u = NULL; - pa_sink_input_new_data data; -@@ -198,6 +199,7 @@ pa_sink_input* pa_memblockq_sink_input_new( - pa_sink_input_new_data_set_channel_map(&data, map); - pa_sink_input_new_data_set_volume(&data, volume); - pa_proplist_update(data.proplist, PA_UPDATE_REPLACE, p); -+ data.flags |= flags; - - pa_sink_input_new(&u->sink_input, sink->core, &data); - pa_sink_input_new_data_done(&data); -@@ -237,6 +239,7 @@ int pa_play_memblockq( - pa_memblockq *q, - pa_cvolume *volume, - pa_proplist *p, -+ pa_sink_input_flags_t flags, - uint32_t *sink_input_index) { - - pa_sink_input *i; -@@ -245,7 +248,7 @@ int pa_play_memblockq( - pa_assert(ss); - pa_assert(q); - -- if (!(i = pa_memblockq_sink_input_new(sink, ss, map, q, volume, p))) -+ if (!(i = pa_memblockq_sink_input_new(sink, ss, map, q, volume, p, flags))) - return -1; - - pa_sink_input_put(i); -diff --git a/src/pulsecore/play-memblockq.h b/src/pulsecore/play-memblockq.h -index 9d5f40f..a55fed0 100644 ---- a/src/pulsecore/play-memblockq.h -+++ b/src/pulsecore/play-memblockq.h -@@ -31,17 +31,19 @@ pa_sink_input* pa_memblockq_sink_input_new( - const pa_channel_map *map, - pa_memblockq *q, - pa_cvolume *volume, -- pa_proplist *p); -+ pa_proplist *p, -+ pa_sink_input_flags_t flags); - - void pa_memblockq_sink_input_set_queue(pa_sink_input *i, pa_memblockq *q); - - int pa_play_memblockq( -- pa_sink *sink, -- const pa_sample_spec *ss, -- const pa_channel_map *map, -- pa_memblockq *q, -- pa_cvolume *cvolume, -- pa_proplist *p, -- uint32_t *sink_input_index); -+ pa_sink *sink, -+ const pa_sample_spec *ss, -+ const pa_channel_map *map, -+ pa_memblockq *q, -+ pa_cvolume *cvolume, -+ pa_proplist *p, -+ pa_sink_input_flags_t flags, -+ uint32_t *sink_input_index); - - #endif -diff --git a/src/pulsecore/play-memchunk.c b/src/pulsecore/play-memchunk.c -index 1a3bd5b..6fb8902 100644 ---- a/src/pulsecore/play-memchunk.c -+++ b/src/pulsecore/play-memchunk.c -@@ -43,6 +43,7 @@ int pa_play_memchunk( - const pa_memchunk *chunk, - pa_cvolume *volume, - pa_proplist *p, -+ pa_sink_input_flags_t flags, - uint32_t *sink_input_index) { - - pa_memblockq *q; -@@ -59,7 +60,7 @@ int pa_play_memchunk( - - pa_assert_se(pa_memblockq_push(q, chunk) >= 0); - -- if ((r = pa_play_memblockq(sink, ss, map, q, volume, p, sink_input_index)) < 0) { -+ if ((r = pa_play_memblockq(sink, ss, map, q, volume, p, flags, sink_input_index)) < 0) { - pa_memblockq_free(q); - return r; - } -diff --git a/src/pulsecore/play-memchunk.h b/src/pulsecore/play-memchunk.h -index c813611..068add1 100644 ---- a/src/pulsecore/play-memchunk.h -+++ b/src/pulsecore/play-memchunk.h -@@ -26,12 +26,13 @@ - #include - - int pa_play_memchunk( -- pa_sink *sink, -- const pa_sample_spec *ss, -- const pa_channel_map *map, -- const pa_memchunk *chunk, -- pa_cvolume *cvolume, -- pa_proplist *p, -- uint32_t *sink_input_index); -+ pa_sink *sink, -+ const pa_sample_spec *ss, -+ const pa_channel_map *map, -+ const pa_memchunk *chunk, -+ pa_cvolume *cvolume, -+ pa_proplist *p, -+ pa_sink_input_flags_t flags, -+ uint32_t *sink_input_index); - - #endif --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0055-pacat-pass-buffer_attr-to-recording-streams-too.diff b/packages/audio/pulseaudio/patches/0055-pacat-pass-buffer_attr-to-recording-streams-too.diff deleted file mode 100644 index a3e4acccda..0000000000 --- a/packages/audio/pulseaudio/patches/0055-pacat-pass-buffer_attr-to-recording-streams-too.diff +++ /dev/null @@ -1,28 +0,0 @@ -From b2e9fb6f6e12a3eab8a41c67017507e60d616e2a Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Sun, 21 Feb 2010 21:09:26 +0100 -Subject: [PATCH 55/62] pacat: pass buffer_attr to recording streams too - -Pointed out by Colin Guthrie. - -https://tango.0pointer.de/pipermail/pulseaudio-discuss/2010-February/006698.html ---- - src/utils/pacat.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/src/utils/pacat.c b/src/utils/pacat.c -index d136f6b..394cfbf 100644 ---- a/src/utils/pacat.c -+++ b/src/utils/pacat.c -@@ -473,7 +473,7 @@ static void context_state_callback(pa_context *c, void *userdata) { - } - - } else { -- if (pa_stream_connect_record(stream, device, latency > 0 ? &buffer_attr : NULL, flags) < 0) { -+ if (pa_stream_connect_record(stream, device, &buffer_attr, flags) < 0) { - pa_log(_("pa_stream_connect_record() failed: %s"), pa_strerror(pa_context_errno(c))); - goto fail; - } --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0056-suspend-on-idle-resume-audio-device-even-for-initial.diff b/packages/audio/pulseaudio/patches/0056-suspend-on-idle-resume-audio-device-even-for-initial.diff deleted file mode 100644 index 08ff9099d6..0000000000 --- a/packages/audio/pulseaudio/patches/0056-suspend-on-idle-resume-audio-device-even-for-initial.diff +++ /dev/null @@ -1,47 +0,0 @@ -From a469d44e6993c4e9e7a53ac91ed53eacb500e279 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Mon, 22 Feb 2010 03:22:28 +0100 -Subject: [PATCH 56/62] suspend-on-idle: resume audio device even for initially corked streams - -We need to resume audio devices even for streams that are created in -corked stat, so that the latency ranges of the audio device are known -during the initial latency negotiation. If we don't the latency -negotiation will be based on placeholder data and changed later on which -clients do not expect. - -This should fix issues with Skype. - -https://bugzilla.redhat.com/show_bug.cgi?id=554929 ---- - src/modules/module-suspend-on-idle.c | 8 +++----- - 1 files changed, 3 insertions(+), 5 deletions(-) - -diff --git a/src/modules/module-suspend-on-idle.c b/src/modules/module-suspend-on-idle.c -index 7adaa0b..cfb7879 100644 ---- a/src/modules/module-suspend-on-idle.c -+++ b/src/modules/module-suspend-on-idle.c -@@ -145,8 +145,9 @@ static pa_hook_result_t sink_input_fixate_hook_cb(pa_core *c, pa_sink_input_new_ - pa_assert(data); - pa_assert(u); - -- if (data->flags & PA_SINK_INPUT_START_CORKED) -- return PA_HOOK_OK; -+ /* We need to resume the audio device here even for -+ * PA_SINK_INPUT_START_CORKED, since we need the device parameters -+ * to be fully available while the stream is set up. */ - - if ((d = pa_hashmap_get(u->device_infos, data->sink))) - resume(d); -@@ -161,9 +162,6 @@ static pa_hook_result_t source_output_fixate_hook_cb(pa_core *c, pa_source_outpu - pa_assert(data); - pa_assert(u); - -- if (data->flags & PA_SOURCE_OUTPUT_START_CORKED) -- return PA_HOOK_OK; -- - if (data->source->monitor_of) - d = pa_hashmap_get(u->device_infos, data->source->monitor_of); - else --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0057-native-improve-logging-for-buffer_attrs.diff b/packages/audio/pulseaudio/patches/0057-native-improve-logging-for-buffer_attrs.diff deleted file mode 100644 index fa971fc54b..0000000000 --- a/packages/audio/pulseaudio/patches/0057-native-improve-logging-for-buffer_attrs.diff +++ /dev/null @@ -1,48 +0,0 @@ -From 4a32103d84102ee91368eed1f30613de6da12f6a Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Mon, 22 Feb 2010 03:40:29 +0100 -Subject: [PATCH 57/62] native: improve logging for buffer_attrs - ---- - src/pulsecore/protocol-native.c | 18 ++++++++++++++++++ - 1 files changed, 18 insertions(+), 0 deletions(-) - -diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c -index f80b0c2..337869d 100644 ---- a/src/pulsecore/protocol-native.c -+++ b/src/pulsecore/protocol-native.c -@@ -858,6 +858,18 @@ static void fix_playback_buffer_attr(playback_stream *s) { - - pa_assert(s); - -+ /* pa_log("Client requested: maxlength=%li bytes tlength=%li bytes minreq=%li bytes prebuf=%li bytes", */ -+ /* (long) s->buffer_attr.maxlength, */ -+ /* (long) s->buffer_attr.tlength, */ -+ /* (long) s->buffer_attr.minreq, */ -+ /* (long) s->buffer_attr.prebuf); */ -+ -+ /* pa_log("Client requested: maxlength=%lu ms tlength=%lu ms minreq=%lu ms prebuf=%lu ms", */ -+ /* (unsigned long) (pa_bytes_to_usec(s->buffer_attr.maxlength, &s->sink_input->sample_spec) / PA_USEC_PER_MSEC), */ -+ /* (unsigned long) (pa_bytes_to_usec(s->buffer_attr.tlength, &s->sink_input->sample_spec) / PA_USEC_PER_MSEC), */ -+ /* (unsigned long) (pa_bytes_to_usec(s->buffer_attr.minreq, &s->sink_input->sample_spec) / PA_USEC_PER_MSEC), */ -+ /* (unsigned long) (pa_bytes_to_usec(s->buffer_attr.prebuf, &s->sink_input->sample_spec) / PA_USEC_PER_MSEC)); */ -+ - /* This function will be called from the main thread, before as - * well as after the sink input has been activated using - * pa_sink_input_put()! That means it may not touch any -@@ -984,6 +996,12 @@ static void fix_playback_buffer_attr(playback_stream *s) { - if (s->buffer_attr.prebuf == (uint32_t) -1 || - s->buffer_attr.prebuf > max_prebuf) - s->buffer_attr.prebuf = max_prebuf; -+ -+ /* pa_log("Client accepted: maxlength=%lu ms tlength=%lu ms minreq=%lu ms prebuf=%lu ms", */ -+ /* (unsigned long) (pa_bytes_to_usec(s->buffer_attr.maxlength, &s->sink_input->sample_spec) / PA_USEC_PER_MSEC), */ -+ /* (unsigned long) (pa_bytes_to_usec(s->buffer_attr.tlength, &s->sink_input->sample_spec) / PA_USEC_PER_MSEC), */ -+ /* (unsigned long) (pa_bytes_to_usec(s->buffer_attr.minreq, &s->sink_input->sample_spec) / PA_USEC_PER_MSEC), */ -+ /* (unsigned long) (pa_bytes_to_usec(s->buffer_attr.prebuf, &s->sink_input->sample_spec) / PA_USEC_PER_MSEC)); */ - } - - /* Called from main context */ --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0058-alsa-util-strip-spaces-from-ALSA-card-pcm-names.diff b/packages/audio/pulseaudio/patches/0058-alsa-util-strip-spaces-from-ALSA-card-pcm-names.diff deleted file mode 100644 index 50439fd292..0000000000 --- a/packages/audio/pulseaudio/patches/0058-alsa-util-strip-spaces-from-ALSA-card-pcm-names.diff +++ /dev/null @@ -1,53 +0,0 @@ -From 522c446ddc2bf2f4467f9de16f8618fc544a94fe Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Sun, 21 Feb 2010 22:00:49 +0100 -Subject: [PATCH 58/62] alsa-util: strip spaces from ALSA card/pcm names - -http://pulseaudio.org/ticket/778 ---- - src/modules/alsa/alsa-util.c | 12 +++++++----- - 1 files changed, 7 insertions(+), 5 deletions(-) - -diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c -index 52f1259..1cbb3f3 100644 ---- a/src/modules/alsa/alsa-util.c -+++ b/src/modules/alsa/alsa-util.c -@@ -874,12 +874,12 @@ void pa_alsa_init_proplist_card(pa_core *c, pa_proplist *p, int card) { - pa_proplist_setf(p, "alsa.card", "%i", card); - - if (snd_card_get_name(card, &cn) >= 0) { -- pa_proplist_sets(p, "alsa.card_name", cn); -+ pa_proplist_sets(p, "alsa.card_name", pa_strip(cn)); - free(cn); - } - - if (snd_card_get_longname(card, &lcn) >= 0) { -- pa_proplist_sets(p, "alsa.long_card_name", lcn); -+ pa_proplist_sets(p, "alsa.long_card_name", pa_strip(lcn)); - free(lcn); - } - -@@ -937,8 +937,11 @@ void pa_alsa_init_proplist_pcm_info(pa_core *c, pa_proplist *p, snd_pcm_info_t * - if (alsa_subclass_table[subclass]) - pa_proplist_sets(p, "alsa.subclass", alsa_subclass_table[subclass]); - -- if ((n = snd_pcm_info_get_name(pcm_info))) -- pa_proplist_sets(p, "alsa.name", n); -+ if ((n = snd_pcm_info_get_name(pcm_info))) { -+ char *t = pa_xstrdup(n); -+ pa_proplist_sets(p, "alsa.name", pa_strip(t)); -+ pa_xfree(t); -+ } - - if ((id = snd_pcm_info_get_id(pcm_info))) - pa_proplist_sets(p, "alsa.id", id); -@@ -1331,6 +1334,5 @@ pa_bool_t pa_alsa_may_tsched(pa_bool_t want) { - return FALSE; - } - -- - return TRUE; - } --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0059-alsa-reset-max_rewind-max_request-while-suspending.diff b/packages/audio/pulseaudio/patches/0059-alsa-reset-max_rewind-max_request-while-suspending.diff deleted file mode 100644 index 2931eddd0f..0000000000 --- a/packages/audio/pulseaudio/patches/0059-alsa-reset-max_rewind-max_request-while-suspending.diff +++ /dev/null @@ -1,48 +0,0 @@ -From dd682d6f96fe7133b866c97b72edcb6136a9737c Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Mon, 22 Feb 2010 04:54:24 +0100 -Subject: [PATCH 59/62] alsa: reset max_rewind/max_request while suspending - ---- - src/modules/alsa/alsa-sink.c | 11 ++++++++++- - 1 files changed, 10 insertions(+), 1 deletions(-) - -diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c -index 690480f..60c10c4 100644 ---- a/src/modules/alsa/alsa-sink.c -+++ b/src/modules/alsa/alsa-sink.c -@@ -79,7 +79,7 @@ - #define TSCHED_MIN_WAKEUP_USEC (4*PA_USEC_PER_MSEC) /* 4ms -- Wakeup at least this long before the buffer runs empty*/ - - #define SMOOTHER_MIN_INTERVAL (2*PA_USEC_PER_MSEC) /* 2ms -- min smoother update interval */ --#define SMOOTHER_MAX_INTERVAL (200*PA_USEC_PER_MSEC) /* 200ms -- max smoother update inteval */ -+#define SMOOTHER_MAX_INTERVAL (200*PA_USEC_PER_MSEC) /* 200ms -- max smoother update interval */ - - #define VOLUME_ACCURACY (PA_VOLUME_NORM/100) /* don't require volume adjustments to be perfectly correct. don't necessarily extend granularity in software unless the differences get greater than this level */ - -@@ -876,6 +876,14 @@ static int suspend(struct userdata *u) { - u->alsa_rtpoll_item = NULL; - } - -+ /* We reset max_rewind/max_request here to make sure that while we -+ * are suspended the old max_request/max_rewind values set before -+ * the suspend can influence the per-stream buffer of newly -+ * created streams, without their requirements having any -+ * influence on them. */ -+ pa_sink_set_max_rewind_within_thread(u->sink, 0); -+ pa_sink_set_max_request_within_thread(u->sink, 0); -+ - pa_log_info("Device suspended..."); - - return 0; -@@ -933,6 +941,7 @@ static int update_sw_params(struct userdata *u) { - } - - pa_sink_set_max_request_within_thread(u->sink, u->hwbuf_size - u->hwbuf_unused); -+ pa_sink_set_max_rewind_within_thread(u->sink, u->hwbuf_size); - - return 0; - } --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0060-core-util-introduce-generic-function-pa_strip.diff b/packages/audio/pulseaudio/patches/0060-core-util-introduce-generic-function-pa_strip.diff deleted file mode 100644 index 9e7b01a469..0000000000 --- a/packages/audio/pulseaudio/patches/0060-core-util-introduce-generic-function-pa_strip.diff +++ /dev/null @@ -1,78 +0,0 @@ -From 195069c1815a1483b2c44f8cc72e2dd25e9b8fb1 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Sun, 21 Feb 2010 21:59:53 +0100 -Subject: [PATCH 60/62] core-util: introduce generic function pa_strip() - ---- - src/pulsecore/core-util.c | 28 ++++++++++++++++++++++++---- - src/pulsecore/core-util.h | 1 + - 2 files changed, 25 insertions(+), 4 deletions(-) - -diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c -index 258e8ee..d6017b9 100644 ---- a/src/pulsecore/core-util.c -+++ b/src/pulsecore/core-util.c -@@ -126,6 +126,9 @@ - #define MSG_NOSIGNAL 0 - #endif - -+#define NEWLINE "\r\n" -+#define WHITESPACE "\n\r \t" -+ - static pa_strlist *recorded_env = NULL; - - #ifdef OS_IS_WIN32 -@@ -830,9 +833,6 @@ char *pa_split(const char *c, const char *delimiter, const char**state) { - return pa_xstrndup(current, l); - } - --/* What is interpreted as whitespace? */ --#define WHITESPACE " \t\n" -- - /* Split a string into words. Otherwise similar to pa_split(). */ - char *pa_split_spaces(const char *c, const char **state) { - const char *current = *state ? *state : c; -@@ -1189,7 +1189,27 @@ int pa_lock_fd(int fd, int b) { - char* pa_strip_nl(char *s) { - pa_assert(s); - -- s[strcspn(s, "\r\n")] = 0; -+ s[strcspn(s, NEWLINE)] = 0; -+ return s; -+} -+ -+char *pa_strip(char *s) { -+ char *e, *l = NULL; -+ -+ /* Drops trailing whitespace. Modifies the string in -+ * place. Returns pointer to first non-space character */ -+ -+ s += strspn(s, WHITESPACE); -+ -+ for (e = s; *e; e++) -+ if (!strchr(WHITESPACE, *e)) -+ l = e; -+ -+ if (l) -+ *(l+1) = 0; -+ else -+ *s = 0; -+ - return s; - } - -diff --git a/src/pulsecore/core-util.h b/src/pulsecore/core-util.h -index eba1b40..71be9de 100644 ---- a/src/pulsecore/core-util.h -+++ b/src/pulsecore/core-util.h -@@ -102,6 +102,7 @@ char *pa_split(const char *c, const char*delimiters, const char **state); - char *pa_split_spaces(const char *c, const char **state); - - char *pa_strip_nl(char *s); -+char *pa_strip(char *s); - - const char *pa_sig2str(int sig) PA_GCC_PURE; - --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0061-esd-simple-use-pa_memblockq_pop_missing.diff b/packages/audio/pulseaudio/patches/0061-esd-simple-use-pa_memblockq_pop_missing.diff deleted file mode 100644 index 19fd57b14d..0000000000 --- a/packages/audio/pulseaudio/patches/0061-esd-simple-use-pa_memblockq_pop_missing.diff +++ /dev/null @@ -1,46 +0,0 @@ -From 30f28ebf3619a86b49009e8dbce154233f597dbb Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 23 Feb 2010 00:48:35 +0100 -Subject: [PATCH 61/62] esd,simple: use pa_memblockq_pop_missing() - -We need to use pa_memblockq_pop_missing() for all request handling, -including the initial request, because otherwise the counters will be -stay off during the entire runtime. - -This should fix: - -https://bugzilla.redhat.com/show_bug.cgi?id=559467 ---- - src/pulsecore/protocol-esound.c | 2 +- - src/pulsecore/protocol-simple.c | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/pulsecore/protocol-esound.c b/src/pulsecore/protocol-esound.c -index a89f327..1e16334 100644 ---- a/src/pulsecore/protocol-esound.c -+++ b/src/pulsecore/protocol-esound.c -@@ -462,7 +462,7 @@ static int esd_proto_stream_play(connection *c, esd_proto_t request, const void - - c->protocol->n_player++; - -- pa_atomic_store(&c->playback.missing, (int) pa_memblockq_missing(c->input_memblockq)); -+ pa_atomic_store(&c->playback.missing, (int) pa_memblockq_pop_missing(c->input_memblockq)); - - pa_sink_input_put(c->sink_input); - -diff --git a/src/pulsecore/protocol-simple.c b/src/pulsecore/protocol-simple.c -index fb2e564..77277e1 100644 ---- a/src/pulsecore/protocol-simple.c -+++ b/src/pulsecore/protocol-simple.c -@@ -574,7 +574,7 @@ void pa_simple_protocol_connect(pa_simple_protocol *p, pa_iochannel *io, pa_simp - - pa_iochannel_socket_set_rcvbuf(io, l); - -- pa_atomic_store(&c->playback.missing, (int) pa_memblockq_missing(c->input_memblockq)); -+ pa_atomic_store(&c->playback.missing, (int) pa_memblockq_pop_missing(c->input_memblockq)); - - pa_sink_input_put(c->sink_input); - } --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/0062-core-rework-how-stream-volumes-affect-sink-volumes.diff b/packages/audio/pulseaudio/patches/0062-core-rework-how-stream-volumes-affect-sink-volumes.diff deleted file mode 100644 index 6197e5e1a8..0000000000 --- a/packages/audio/pulseaudio/patches/0062-core-rework-how-stream-volumes-affect-sink-volumes.diff +++ /dev/null @@ -1,72 +0,0 @@ -From 0d1154d078f8f149e2ab9a67b09835a829416e49 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 23 Feb 2010 18:41:18 +0100 -Subject: [PATCH 62/62] core: rework how stream volumes affect sink volumes - ---- - src/pulsecore/sink.c | 42 +++++++++++++++++++++++++++++++++++++++++- - 1 files changed, 41 insertions(+), 1 deletions(-) - -diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c -index e6d718f..3a92f67 100644 ---- a/src/pulsecore/sink.c -+++ b/src/pulsecore/sink.c -@@ -1162,6 +1162,46 @@ pa_usec_t pa_sink_get_latency_within_thread(pa_sink *s) { - return usec; - } - -+static pa_cvolume* cvolume_remap_minimal_impact( -+ pa_cvolume *v, -+ const pa_cvolume *template, -+ const pa_channel_map *from, -+ const pa_channel_map *to) { -+ -+ pa_cvolume t; -+ -+ pa_assert(v); -+ pa_assert(template); -+ pa_assert(from); -+ pa_assert(to); -+ -+ pa_return_val_if_fail(pa_cvolume_compatible_with_channel_map(v, from), NULL); -+ pa_return_val_if_fail(pa_cvolume_compatible_with_channel_map(template, to), NULL); -+ -+ /* Much like pa_cvolume_remap(), but tries to minimize impact when -+ * mapping from sink input to sink volumes: -+ * -+ * If template is a possible remapping from v it is used instead -+ * of remapping anew. -+ * -+ * If the channel maps don't match we set an all-channel volume on -+ * the sink to ensure that changing a volume on one stream has no -+ * effect that cannot be compensated for in another stream that -+ * does not have the same channel map as the sink. */ -+ -+ if (pa_channel_map_equal(from, to)) -+ return v; -+ -+ t = *template; -+ if (pa_cvolume_equal(pa_cvolume_remap(&t, to, from), v)) { -+ *v = *template; -+ return v; -+ } -+ -+ pa_cvolume_set(v, to->channels, pa_cvolume_max(v)); -+ return v; -+} -+ - /* Called from main context */ - static void compute_reference_ratios(pa_sink *s) { - uint32_t idx; -@@ -1289,7 +1329,7 @@ static void compute_real_volume(pa_sink *s) { - pa_cvolume remapped; - - remapped = i->volume; -- pa_cvolume_remap(&remapped, &i->channel_map, &s->channel_map); -+ cvolume_remap_minimal_impact(&remapped, &s->real_volume, &i->channel_map, &s->channel_map); - pa_cvolume_merge(&s->real_volume, &s->real_volume, &remapped); - } - --- -1.7.0 - diff --git a/packages/audio/pulseaudio/patches/02_no-st_uid.diff b/packages/audio/pulseaudio/patches/02_no-st_uid.diff deleted file mode 100644 index ebb630c859..0000000000 --- a/packages/audio/pulseaudio/patches/02_no-st_uid.diff +++ /dev/null @@ -1,58 +0,0 @@ ---- pulseaudio-0.9.21/src/pulse/context.c.orig 2009-11-22 22:57:06.000000000 -0500 -+++ pulseaudio-0.9.21/src/pulse/context.c 2010-05-10 10:57:57.000000000 -0400 -@@ -603,11 +603,6 @@ - return NULL; - } - -- if (st.st_uid != getuid()) { -- pa_xfree(p); -- return NULL; -- } -- - return p; - } - -@@ -625,11 +620,6 @@ - return NULL; - } - -- if (st.st_uid != getuid()) { -- pa_xfree(p); -- return NULL; -- } -- - return p; - } - #endif ---- pulseaudio-0.9.21/src/pulsecore/core-util.c.orig 2009-11-22 22:57:07.000000000 -0500 -+++ pulseaudio-0.9.21/src/pulsecore/core-util.c 2010-05-10 10:59:12.000000000 -0400 -@@ -235,8 +235,6 @@ - - #ifndef OS_IS_WIN32 - if (!S_ISDIR(st.st_mode) || -- (st.st_uid != uid) || -- (st.st_gid != gid) || - ((st.st_mode & 0777) != m)) { - errno = EACCES; - goto fail; -@@ -1293,12 +1291,6 @@ - goto finish; - } - -- if (st.st_uid != getuid()) { -- pa_log_error("Home directory %s not ours.", h); -- errno = EACCES; -- goto finish; -- } -- - ret = pa_sprintf_malloc("%s" PA_PATH_SEP ".pulse", h); - - finish: -@@ -1524,7 +1516,6 @@ - } else { - - if (S_ISDIR(st.st_mode) && -- (st.st_uid == getuid()) && - ((st.st_mode & 0777) == 0700)) { - - pa_xfree(p); From fedd0ddb26cdf16261f65947c263fb936bbf305f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 07:47:53 +0100 Subject: [PATCH 437/850] alsa-plugins: remove references to pulseaudio Signed-off-by: Stephan Raue --- packages/audio/alsa-plugins/build | 8 +------- packages/audio/alsa-plugins/meta | 5 ----- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/packages/audio/alsa-plugins/build b/packages/audio/alsa-plugins/build index 84fe0f6708..a96f82b7e5 100755 --- a/packages/audio/alsa-plugins/build +++ b/packages/audio/alsa-plugins/build @@ -2,12 +2,6 @@ . config/options $1 -if [ "$PULSEAUDIO_SUPPORT" = yes ]; then - ALSAPLUGINS_PULSEAUDIO="--enable-pulseaudio" -else - ALSAPLUGINS_PULSEAUDIO="--disable-pulseaudio" -fi - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ @@ -21,7 +15,7 @@ cd $PKG_BUILD --disable-jack \ --disable-samplerate \ --disable-avcodec \ - $ALSAPLUGINS_PULSEAUDIO \ + --disable-pulseaudio \ --with-speex=lib \ $MAKE diff --git a/packages/audio/alsa-plugins/meta b/packages/audio/alsa-plugins/meta index d7ad61fb5a..a7f99e7c0b 100644 --- a/packages/audio/alsa-plugins/meta +++ b/packages/audio/alsa-plugins/meta @@ -13,8 +13,3 @@ PKG_SHORTDESC="alsa-plugins: Advanced Linux Sound Architecture Plugins" PKG_LONGDESC="ALSA (Advanced Linux Sound Architecture) is the next generation Linux Sound API. It provides much finer (->better) access to the sound hardware, has a unbeatable mixer API and supports stuff like multi channel hardware, digital outs and ins, uninterleaved sound data access, and an oss emulation layer (for the old applications). It is the prefered API for professional sound apps under Linux." PKG_IS_ADDON="no" - -if [ "$PULSEAUDIO_SUPPORT" = yes ]; then - PKG_DEPENDS="$PKG_DEPENDS pulseaudio" - PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS pulseaudio" -fi From d38e2fb92eb0e9d9c176b7ac5ffbcd9609f93df4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 07:48:10 +0100 Subject: [PATCH 438/850] xbmc-dharma: remove references to pulseaudio Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc-dharma/init.d/61_xbmc | 4 ---- packages/mediacenter/xbmc-dharma/meta | 5 ----- 2 files changed, 9 deletions(-) diff --git a/packages/mediacenter/xbmc-dharma/init.d/61_xbmc b/packages/mediacenter/xbmc-dharma/init.d/61_xbmc index 6406c7e13e..d63a879008 100755 --- a/packages/mediacenter/xbmc-dharma/init.d/61_xbmc +++ b/packages/mediacenter/xbmc-dharma/init.d/61_xbmc @@ -33,10 +33,6 @@ progress "starting XBMC" XBMC_ARGS="--standalone -fs --lircdev $LIRCDEV" -# starting pulseaudio if avaible - [ -f /usr/bin/pulseaudio ] && /usr/bin/pulseaudio \ - --start --log-target=syslog --daemonize 2>&1 > /dev/null - # starting xbmc-wiimote if avaible [ "$(pidof bluetoothd)" -a -f /usr/bin/xbmc-wiiremote ] && \ /usr/bin/xbmc-wiiremote >/dev/null 2>&1 & diff --git a/packages/mediacenter/xbmc-dharma/meta b/packages/mediacenter/xbmc-dharma/meta index 5e7dbe1c74..bc70843f71 100644 --- a/packages/mediacenter/xbmc-dharma/meta +++ b/packages/mediacenter/xbmc-dharma/meta @@ -13,11 +13,6 @@ PKG_SHORTDESC="xbmc: XBMC Mediacenter" PKG_LONGDESC="XBMC Media Center (which was formerly named Xbox Media Center) is a free and open source cross-platform media player and home entertainment system software with a 10-foot user interface designed for the living-room TV. Its graphical user interface allows the user to easily manage video, photos, podcasts, and music from a computer, optical disk, local network, and the internet using a remote control." PKG_IS_ADDON="no" -if [ "$PULSEAUDIO_SUPPORT" = yes ]; then - PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS pulseaudio" - PKG_DEPENDS="$PKG_DEPENDS pulseaudio" -fi - if [ "$FAAC_SUPPORT" = yes ]; then PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS faac" PKG_DEPENDS="$PKG_DEPENDS faac" From b3e958b8a496130dff4cf630cebaea045d19c485 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 07:48:17 +0100 Subject: [PATCH 439/850] xbmc: remove references to pulseaudio Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc/init.d/61_xbmc | 4 ---- packages/mediacenter/xbmc/meta | 5 ----- 2 files changed, 9 deletions(-) diff --git a/packages/mediacenter/xbmc/init.d/61_xbmc b/packages/mediacenter/xbmc/init.d/61_xbmc index 6406c7e13e..d63a879008 100755 --- a/packages/mediacenter/xbmc/init.d/61_xbmc +++ b/packages/mediacenter/xbmc/init.d/61_xbmc @@ -33,10 +33,6 @@ progress "starting XBMC" XBMC_ARGS="--standalone -fs --lircdev $LIRCDEV" -# starting pulseaudio if avaible - [ -f /usr/bin/pulseaudio ] && /usr/bin/pulseaudio \ - --start --log-target=syslog --daemonize 2>&1 > /dev/null - # starting xbmc-wiimote if avaible [ "$(pidof bluetoothd)" -a -f /usr/bin/xbmc-wiiremote ] && \ /usr/bin/xbmc-wiiremote >/dev/null 2>&1 & diff --git a/packages/mediacenter/xbmc/meta b/packages/mediacenter/xbmc/meta index 26d724ea37..73c6ecf6d0 100644 --- a/packages/mediacenter/xbmc/meta +++ b/packages/mediacenter/xbmc/meta @@ -13,11 +13,6 @@ PKG_SHORTDESC="xbmc: XBMC Mediacenter" PKG_LONGDESC="XBMC Media Center (which was formerly named Xbox Media Center) is a free and open source cross-platform media player and home entertainment system software with a 10-foot user interface designed for the living-room TV. Its graphical user interface allows the user to easily manage video, photos, podcasts, and music from a computer, optical disk, local network, and the internet using a remote control." PKG_IS_ADDON="no" -if [ "$PULSEAUDIO_SUPPORT" = yes ]; then - PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS pulseaudio" - PKG_DEPENDS="$PKG_DEPENDS pulseaudio" -fi - if [ "$FAAC_SUPPORT" = yes ]; then PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS faac" PKG_DEPENDS="$PKG_DEPENDS faac" From 9a8126d5ae6760d80b52b2f234fbb99684720ba0 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 07:48:31 +0100 Subject: [PATCH 440/850] SDL: remove references to pulseaudio Signed-off-by: Stephan Raue --- packages/multimedia/SDL/build | 9 ++------- packages/multimedia/SDL/meta | 4 ---- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/packages/multimedia/SDL/build b/packages/multimedia/SDL/build index 2e8b42354b..5359544df7 100755 --- a/packages/multimedia/SDL/build +++ b/packages/multimedia/SDL/build @@ -2,12 +2,6 @@ . config/options $1 -if [ "$PULSEAUDIO_SUPPORT" = yes ]; then - SDL_PULSEAUDIO="--enable-pulseaudio --enable-pulseaudio-shared" -else - SDL_PULSEAUDIO="--disable-pulseaudio --disable-pulseaudio-shared" -fi - cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -38,7 +32,8 @@ cd $PKG_BUILD --disable-esd \ --disable-esdtest \ --disable-esd-shared \ - $SDL_PULSEAUDIO \ + --disable-pulseaudio \ + --disable-pulseaudio-shared \ --disable-arts \ --disable-arts-shared \ --disable-nas \ diff --git a/packages/multimedia/SDL/meta b/packages/multimedia/SDL/meta index 5302c0ca9d..0214f7b0e5 100644 --- a/packages/multimedia/SDL/meta +++ b/packages/multimedia/SDL/meta @@ -13,7 +13,3 @@ PKG_SHORTDESC="libsdl: A cross-platform Graphic API" PKG_LONGDESC="Simple DirectMedia Layer is a cross-platform multimedia library designed to provide fast access to the graphics framebuffer and audio device. It is used by MPEG playback software, emulators, and many popular games, including the award winning Linux port of 'Civilization: Call To Power.' Simple DirectMedia Layer supports Linux, Win32, BeOS, MacOS, Solaris, IRIX, and FreeBSD." PKG_IS_ADDON="no" -if [ "$PULSEAUDIO_SUPPORT" = yes ]; then - PKG_DEPENDS="$PKG_DEPENDS pulseaudio" - PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS pulseaudio" -fi From 8cbbb0c966328bce9254542bc2922929e8e87acf Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 07:48:49 +0100 Subject: [PATCH 441/850] openal-soft: remove references to pulseaudio Signed-off-by: Stephan Raue --- packages/multimedia/openal-soft/meta | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/multimedia/openal-soft/meta b/packages/multimedia/openal-soft/meta index d80ac22b8c..da80304a8e 100644 --- a/packages/multimedia/openal-soft/meta +++ b/packages/multimedia/openal-soft/meta @@ -13,7 +13,3 @@ PKG_SHORTDESC="openal: Open Audio Library" PKG_LONGDESC="OpenAL, the Open Audio Library, is a joint effort to create an open, vendor- neutral, cross-platform API for interactive, primarily spatialized audio. OpenAL's primary audience are application developers and desktop users that rely on portable standards like OpenGL, for games and other multimedia applications. OpenAL is already supported by a number of hardware vendors and developers." PKG_IS_ADDON="no" -if [ "$PULSEAUDIO_SUPPORT" = yes ]; then - PKG_DEPENDS="$PKG_DEPENDS pulseaudio" - PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS pulseaudio" -fi From ae141f72718decf866a6051413f46c2b46c5358c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 07:51:28 +0100 Subject: [PATCH 442/850] projects/*/options: remove references to pulseaudio Signed-off-by: Stephan Raue --- projects/ATV/options | 3 --- projects/ION/options | 3 --- projects/generic/options | 3 --- projects/intel/options | 3 --- 4 files changed, 12 deletions(-) diff --git a/projects/ATV/options b/projects/ATV/options index 5a2abebe00..43acdaf58e 100644 --- a/projects/ATV/options +++ b/projects/ATV/options @@ -97,9 +97,6 @@ # build and install Avahi (Zeroconf) daemon (yes / no) AVAHI_DAEMON="yes" -# build and install PulseAudio support (yes / no) - PULSEAUDIO_SUPPORT="no" - # build and install Samba Server (yes / no) SAMBA_SERVER="yes" diff --git a/projects/ION/options b/projects/ION/options index f7d5cd9c35..7b47a7b5cb 100644 --- a/projects/ION/options +++ b/projects/ION/options @@ -97,9 +97,6 @@ # build and install Avahi (Zeroconf) daemon (yes / no) AVAHI_DAEMON="yes" -# build and install PulseAudio support (yes / no) - PULSEAUDIO_SUPPORT="no" - # build and install Samba Server (yes / no) SAMBA_SERVER="yes" diff --git a/projects/generic/options b/projects/generic/options index efa94a9555..11ef559f6b 100644 --- a/projects/generic/options +++ b/projects/generic/options @@ -97,9 +97,6 @@ # build and install Avahi (Zeroconf) daemon (yes / no) AVAHI_DAEMON="yes" -# build and install PulseAudio support (yes / no) - PULSEAUDIO_SUPPORT="no" - # build and install Samba Server (yes / no) SAMBA_SERVER="yes" diff --git a/projects/intel/options b/projects/intel/options index 01c30a808a..de23f43cb6 100644 --- a/projects/intel/options +++ b/projects/intel/options @@ -97,9 +97,6 @@ # build and install Avahi (Zeroconf) daemon (yes / no) AVAHI_DAEMON="yes" -# build and install PulseAudio support (yes / no) - PULSEAUDIO_SUPPORT="no" - # build and install Samba Server (yes / no) SAMBA_SERVER="yes" From 2f54ec017a141b0b05f557b2453ba5d9dc99e2dc Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 09:46:13 +0100 Subject: [PATCH 443/850] jasper: fix unpack script Signed-off-by: Stephan Raue --- packages/graphics/jasper/unpack | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/graphics/jasper/unpack b/packages/graphics/jasper/unpack index edc69ccc9d..d481377295 100755 --- a/packages/graphics/jasper/unpack +++ b/packages/graphics/jasper/unpack @@ -2,5 +2,5 @@ . config/options $1 -cp $BUILD/configtools/config.guess $BUILD/$1*/acaux -cp $BUILD/configtools/config.sub $BUILD/$1*/acaux \ No newline at end of file +cp $SCRIPTS/configtools/config.guess $BUILD/$1*/acaux +cp $SCRIPTS/configtools/config.sub $BUILD/$1*/acaux From f7c7cb77792acf6bae44a920fd581c3e4b87fe74 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 09:49:02 +0100 Subject: [PATCH 444/850] scripts/install: remove unneded inclusion of project options file Signed-off-by: Stephan Raue --- scripts/install | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/install b/scripts/install index e0f5cce301..9a24665e65 100755 --- a/scripts/install +++ b/scripts/install @@ -54,8 +54,6 @@ if [ -f $PKG_DIR/install ]; then $PKG_DIR/install $@ >&$VERBOSE_OUT fi -. $PROJECT_DIR/$PROJECT/options - for i in `sed -n "s/^\([^#].*\)=\".*$/\1/p" $PROJECT_DIR/$PROJECT/options | grep -v "#"`; do eval val=\$$i echo "STAMP_$i=\"$val"\" >> $STAMP From 3ea40e68e58645bc668508035c7735544d3a0aa6 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 13:27:50 +0100 Subject: [PATCH 445/850] curl: fix metafile Signed-off-by: Stephan Raue --- packages/web/curl/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web/curl/meta b/packages/web/curl/meta index d740de3862..58d3af0752 100644 --- a/packages/web/curl/meta +++ b/packages/web/curl/meta @@ -4,7 +4,7 @@ PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="MIT" PKG_SITE="http://curl.haxx.se" -PKG_URL=" http://curl.haxx.se/download/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_URL="http://curl.haxx.se/download/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="zlib openssl rtmpdump" PKG_BUILD_DEPENDS="toolchain zlib openssl rtmpdump" PKG_PRIORITY="optional" From 8c6620af2d7807d7cf89179736c53bfa6788003e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 13:34:51 +0100 Subject: [PATCH 446/850] scripts/extract: remove unneeded code Signed-off-by: Stephan Raue --- scripts/extract | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/scripts/extract b/scripts/extract index ffc2a0355c..189b648ace 100755 --- a/scripts/extract +++ b/scripts/extract @@ -7,12 +7,9 @@ if [ -z "$3" ]; then exit 1 fi -[ ! -f $PACKAGE_URL -a -z "$PKG_URL" ] && exit 1 +[ -z "$PKG_URL" ] && exit 1 [ ! -d "$SOURCES/$1" -o ! -d "$3" ] && exit 1 -[ -f $PACKAGE_URL ] && \ - FILES=`sed 's%.*/\(.*\)\$%\1%' $PACKAGE_URL` - [ -n "$PKG_URL" ] && \ FILES="$FILES `echo $PKG_URL | sed 's%.*/\(.*\)\$%\1%'`" From add47814c3d6890ca1e540f3d1488b8fb08d9774 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 13:35:01 +0100 Subject: [PATCH 447/850] scripts/get: remove unneeded code Signed-off-by: Stephan Raue --- scripts/get | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/scripts/get b/scripts/get index 0077e05647..366ff0bab3 100755 --- a/scripts/get +++ b/scripts/get @@ -1,5 +1,5 @@ #!/bin/sh - +set -x . config/options $1 if [ -z $1 ]; then @@ -12,13 +12,6 @@ fi mkdir -p $STAMPS_NOARCH/$1 STAMP=$STAMPS_NOARCH/$1/get -if [ -f $PACKAGE_URL ]; then - if [ -f $STAMP ]; then - [ ! $STAMP -ot $PACKAGE_URL ] && exit 0 - fi - DL="yes" -fi - # if [ -n "$PKG_URL" ]; then # if [ -f $STAMP ]; then # [ ! $STAMP -ot $PKG_DIR/meta ] && exit 0 @@ -45,9 +38,6 @@ if [ "$DL" = yes ]; then mkdir -p $SOURCES/$1 - [ -f $PACKAGE_URL ] && \ - URLS=`sed s%GEEXBOX_SRCS%$GEEXBOX_SRCS% $PACKAGE_URL` - [ -n "$PKG_URL" ] && \ URLS="$URLS `echo $PKG_URL | sed s%GEEXBOX_SRCS%$GEEXBOX_SRCS%`" @@ -63,9 +53,6 @@ if [ "$DL" = yes ]; then touch $STAMPS_NOARCH/$1/`basename $i`.ok done - [ -f $PACKAGE_URL ] && \ - cp -p $PACKAGE_URL $STAMP - [ -n "$PKG_URL" ] && \ echo $PKG_URL > $STAMP # cp -p $PKG_DIR/meta $STAMP From 681ae55860eeb2337482918bec2f29afcfa4492d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 13:35:11 +0100 Subject: [PATCH 448/850] scripts/unpack: remove unneeded code Signed-off-by: Stephan Raue --- scripts/unpack | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/unpack b/scripts/unpack index 11c7e3ecfb..0a5735bf0f 100755 --- a/scripts/unpack +++ b/scripts/unpack @@ -34,7 +34,7 @@ rm -rf $BUILD/$1[-_]cvs* rm -rf $BUILD/$1[-_]svn* rm -rf $BUILD/$1[-_]git* -if [ -f $PACKAGE_URL -o -n "$PKG_URL" ]; then +if [ -n "$PKG_URL" ]; then $SCRIPTS/extract $1 "$1*.tar.bz2" $BUILD $SCRIPTS/extract $1 "$1*.tar.gz" $BUILD $SCRIPTS/extract $1 "$1*.tgz" $BUILD From e258dca5923540182cc7afd64cb930426603695f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 13:35:38 +0100 Subject: [PATCH 449/850] config/path: remove unneeded code Signed-off-by: Stephan Raue --- config/path | 5 ----- 1 file changed, 5 deletions(-) diff --git a/config/path b/config/path index 85c9036ab3..73d6d10347 100644 --- a/config/path +++ b/config/path @@ -289,11 +289,6 @@ VERSION_SUFFIX=$TARGET_ARCH . ~/.openelec/$PROJECT/options fi -PACKAGE_URL="$PKG_DIR/url" -[ -r "$PACKAGE_URL.$TARGET_ARCH" ] && PACKAGE_URL="$PACKAGE_URL.$TARGET_ARCH" -[ -n "$TARGET_PLATFORM" -a -r "$PACKAGE_URL.$TARGET_PLATFORM" ] && \ -PACKAGE_URL="$PACKAGE_URL.$TARGET_PLATFORM" - kernel_path() { ls -d $ROOT/$BUILD/linux-[0-9]* } From d691d2b8f6ef2efaa87b1434b15c9e051bd99acf Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 22:01:08 +0100 Subject: [PATCH 450/850] buildsystem: big rework & cleanup - PART-1: split functions from 'config/path' to an seperate file 'config/functions', rework and cleanup some build scripts, remove references to $TARGET_PLATFORM, add support for more then one downloadurl for $PKG_URL (partially done), remove support for: $PKG_DIR/arch, $PKG_DIR/platform, $PKG_DIR/url files, remove support for *.diff patches, create download-stampfiles in sources/$PKG_NAME, create md5 files after download, add support to download all sources at once with './scripts/get' Signed-off-by: Stephan Raue --- config/functions | 112 ++++++++++++++ config/path | 145 ++---------------- packages/drivers/rtl8192se/need_unpack | 2 - packages/linux/need_unpack | 1 - packages/multimedia/crystalhd/need_unpack | 2 - packages/toolchain/devel/ccache/meta | 2 +- .../x11/driver/xf86-video-nvidia/need_unpack | 2 - scripts/build | 14 +- scripts/create_addon | 11 +- scripts/extract | 13 +- scripts/get | 71 ++++----- scripts/install | 12 +- scripts/unpack | 10 +- 13 files changed, 179 insertions(+), 218 deletions(-) create mode 100644 config/functions diff --git a/config/functions b/config/functions new file mode 100644 index 0000000000..45daaefd9c --- /dev/null +++ b/config/functions @@ -0,0 +1,112 @@ +setup_toolchain() { + if [ "$1" = "--optimize" ]; then + OPTIMIZE=yes + shift + fi + + if [ "$1" = target ]; then + export CC=$TARGET_CC + export CXX=$TARGET_CXX + export LD=$TARGET_LD + export AS=$TARGET_AS + export AR=$TARGET_AR + export NM=$TARGET_NM + export RANLIB=$TARGET_RANLIB + export OBJCOPY=$TARGET_OBJCOPY + export STRIP=$TARGET_STRIP + export CPPFLAGS="$TARGET_CPPFLAGS" + export CFLAGS="$TARGET_CFLAGS" + export CXXFLAGS="$TARGET_CXXFLAGS" + export LDFLAGS="$TARGET_LDFLAGS" + export PKG_CONFIG_PATH="$TARGET_PKG_CONFIG_PATH" + export PKG_CONFIG_LIBDIR="$TARGET_PKG_CONFIG_LIBDIR" + export PKG_CONFIG_SYSROOT_DIR="$TARGET_PKG_CONFIG_SYSROOT_DIR" + + # set CMAKE configfile for target + export CMAKE_CONF=$ROOT/$TOOLCHAIN/etc/cmake-$TARGET_NAME.conf + + elif [ "$1" = host ]; then + export AWK=$HOST_AWK + export CC=$HOST_CC + export CXX=$HOST_CXX + export LD=$HOST_LD + export AS=$HOST_AS + export AR=$HOST_AR + export NM=$HOST_NM + export RANLIB=$HOST_RANLIB + export OBJCOPY=$HOST_OBJCOPY + export STRIP=$HOST_STRIP + export CPPFLAGS="$HOST_CPPFLAGS" + export CFLAGS="$HOST_CFLAGS" + export CXXFLAGS="$HOST_CXXFLAGS" + export LDFLAGS="$HOST_LDFLAGS" + export PKG_CONFIG_PATH="$HOST_PKG_CONFIG_PATH" + export PKG_CONFIG_LIBDIR="$HOST_PKG_CONFIG_LIBDIR" + export PKG_CONFIG_SYSROOT_DIR="$HOST_PKG_CONFIG_SYSROOT_DIR" + + # set CMAKE configfile for host + export CMAKE_CONF=$ROOT/$TOOLCHAIN/etc/cmake-$HOST_NAME.conf + + fi +} + +kernel_path() { + ls -d $ROOT/$BUILD/linux-[0-9]* +} + +tolower(){ + echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz +} + +require_eglibc() { + if [ "$TARGET_LIBC" != eglibc ]; then + echo "$1 requires eglibc, aborting." + exit 1 + fi +} + +require_cxx() { + if [ "$TOOLCHAIN_CXX" != yes ]; then + echo "$1 requires C++ toolchain support, aborting." + exit 1 + fi +} + +xorg_drv_configure_prepend() { + incdir=${SYSROOT_PREFIX}/usr/include/xorg + for f in dri.h sarea.h dristruct.h exa.h damage.h xf86Module.h; do + incfile="$incdir/$f" + if [ -f "$incfile" ]; then + p=`echo "$incfile" | sed 'y%*+%pp%;s%[^_[:alnum:]]%_%g'` + eval "export ac_cv_file_$p=yes" + fi + done +} + +add_user() { + # Usage: add_user "username" "password" "userid" "groupid" "description" "home" "shell" + mkdir -p ${INSTALL}/etc + touch ${INSTALL}/etc/passwd + if [ -z "`grep "$1:" ${INSTALL}/etc/passwd`" ]; then + echo "$1:$2:$3:$4:$5:$6:$7" >> ${INSTALL}/etc/passwd + fi +} + +add_group() { + # Usage: add_group "groupname" "groupid" ("members") + mkdir -p ${INSTALL}/etc + touch ${INSTALL}/etc/group + if [ -z "`grep "$1:" ${INSTALL}/etc/group`" ]; then + echo "$1:x:$2:$3" >> ${INSTALL}/etc/group + fi +} + +get_version() { + if [ "$OPENELEC_VERSION" = devel -o "$OPENELEC_VERSION" = debug ]; then + BUILD_DATE=`date +%Y%m%d` + GIT_BUILD=`git log --pretty=format:'' | wc -l` + OPENELEC_VERSION=$OPENELEC_VERSION-$BUILD_DATE-r$GIT_BUILD + fi + + TARGET_VERSION="$PROJECT.$TARGET_ARCH-$OPENELEC_VERSION" +} diff --git a/config/path b/config/path index 73d6d10347..06624152e3 100644 --- a/config/path +++ b/config/path @@ -1,16 +1,5 @@ set -e -# setup initial directorys - CONFIG=config - SCRIPTS=scripts - PACKAGES=packages - SOURCES=sources - BUILD_BASE=build - TARGET=target - ADDONS=addons - -test -f config/target-$TARGET_PLATFORM && . config/target-$TARGET_PLATFORM - # determine architecture's family case $TARGET_ARCH in i386) @@ -35,12 +24,20 @@ if [ -z "$TARGET_CPU" ]; then esac fi +# setup initial directorys + CONFIG=config + SCRIPTS=scripts + PACKAGES=packages + SOURCES=sources + BUILD_BASE=build + TARGET=target + ADDONS=addons + HOST_NAME=`$SCRIPTS/configtools/config.guess` TARGET_NAME=$TARGET_FAMILY-openelec-linux-gnu OPENELEC_SRC=http://sources.openelec.tv/src/$OPENELEC_VERSION BUILD=$BUILD_BASE.OpenELEC-$PROJECT.$TARGET_ARCH.$OPENELEC_VERSION -[ -n "$TARGET_PLATFORM" ] && BUILD=$BUILD.$TARGET_PLATFORM TARGET_IMG=$ROOT/$TARGET TARGET_ADDONS="$TARGET_IMG/$ADDONS/$ADDON_PATH" ADDON_BUILD="$BUILD/$ADDONS/$1" @@ -212,57 +209,10 @@ if [ -f $ROOT/$TOOLCHAIN/bin/autoconf ]; then export AUTORECONF="$ROOT/$TOOLCHAIN/bin/autoreconf -v -f -i -I $ACLOCAL_DIR" fi -setup_toolchain() { - if [ "$1" = "--optimize" ]; then - OPTIMIZE=yes - shift - fi +VERSION_SUFFIX=$TARGET_ARCH - if [ "$1" = target ]; then - export CC=$TARGET_CC - export CXX=$TARGET_CXX - export LD=$TARGET_LD - export AS=$TARGET_AS - export AR=$TARGET_AR - export NM=$TARGET_NM - export RANLIB=$TARGET_RANLIB - export OBJCOPY=$TARGET_OBJCOPY - export STRIP=$TARGET_STRIP - export CPPFLAGS="$TARGET_CPPFLAGS" - export CFLAGS="$TARGET_CFLAGS" - export CXXFLAGS="$TARGET_CXXFLAGS" - export LDFLAGS="$TARGET_LDFLAGS" - export PKG_CONFIG_PATH="$TARGET_PKG_CONFIG_PATH" - export PKG_CONFIG_LIBDIR="$TARGET_PKG_CONFIG_LIBDIR" - export PKG_CONFIG_SYSROOT_DIR="$TARGET_PKG_CONFIG_SYSROOT_DIR" +. config/functions - # set CMAKE configfile for target - export CMAKE_CONF=$ROOT/$TOOLCHAIN/etc/cmake-$TARGET_NAME.conf - - elif [ "$1" = host ]; then - export AWK=$HOST_AWK - export CC=$HOST_CC - export CXX=$HOST_CXX - export LD=$HOST_LD - export AS=$HOST_AS - export AR=$HOST_AR - export NM=$HOST_NM - export RANLIB=$HOST_RANLIB - export OBJCOPY=$HOST_OBJCOPY - export STRIP=$HOST_STRIP - export CPPFLAGS="$HOST_CPPFLAGS" - export CFLAGS="$HOST_CFLAGS" - export CXXFLAGS="$HOST_CXXFLAGS" - export LDFLAGS="$HOST_LDFLAGS" - export PKG_CONFIG_PATH="$HOST_PKG_CONFIG_PATH" - export PKG_CONFIG_LIBDIR="$HOST_PKG_CONFIG_LIBDIR" - export PKG_CONFIG_SYSROOT_DIR="$HOST_PKG_CONFIG_SYSROOT_DIR" - - # set CMAKE configfile for host - export CMAKE_CONF=$ROOT/$TOOLCHAIN/etc/cmake-$HOST_NAME.conf - - fi -} setup_toolchain target SILENT_OUT=3 @@ -276,76 +226,3 @@ else fi INDENT_SIZE=4 -VERSION_SUFFIX=$TARGET_ARCH -[ -n "$TARGET_PLATFORM" ] && VERSION_SUFFIX=$TARGET_PLATFORM - -# read generic personal options if available - if [ -f ~/.openelec/options ]; then - . ~/.openelec/options - fi - -# read project based personal options if available - if [ -f ~/.openelec/$PROJECT/options ]; then - . ~/.openelec/$PROJECT/options - fi - -kernel_path() { - ls -d $ROOT/$BUILD/linux-[0-9]* -} - -tolower(){ - echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz -} - -require_eglibc() { - if [ "$TARGET_LIBC" != eglibc ]; then - echo "$1 requires eglibc, aborting." - exit 1 - fi -} - -require_cxx() { - if [ "$TOOLCHAIN_CXX" != yes ]; then - echo "$1 requires C++ toolchain support, aborting." - exit 1 - fi -} - -xorg_drv_configure_prepend() { - incdir=${SYSROOT_PREFIX}/usr/include/xorg - for f in dri.h sarea.h dristruct.h exa.h damage.h xf86Module.h; do - incfile="$incdir/$f" - if [ -f "$incfile" ]; then - p=`echo "$incfile" | sed 'y%*+%pp%;s%[^_[:alnum:]]%_%g'` - eval "export ac_cv_file_$p=yes" - fi - done -} - -add_user() { - # Usage: add_user "username" "password" "userid" "groupid" "description" "home" "shell" - mkdir -p ${INSTALL}/etc - touch ${INSTALL}/etc/passwd - if [ -z "`grep "$1:" ${INSTALL}/etc/passwd`" ]; then - echo "$1:$2:$3:$4:$5:$6:$7" >> ${INSTALL}/etc/passwd - fi -} - -add_group() { - # Usage: add_group "groupname" "groupid" ("members") - mkdir -p ${INSTALL}/etc - touch ${INSTALL}/etc/group - if [ -z "`grep "$1:" ${INSTALL}/etc/group`" ]; then - echo "$1:x:$2:$3" >> ${INSTALL}/etc/group - fi -} - -get_version() { - if [ "$OPENELEC_VERSION" = devel -o "$OPENELEC_VERSION" = debug ]; then - BUILD_DATE=`date +%Y%m%d` - GIT_BUILD=`git log --pretty=format:'' | wc -l` - OPENELEC_VERSION=$OPENELEC_VERSION-$BUILD_DATE-r$GIT_BUILD - fi - - TARGET_VERSION="$PROJECT.$TARGET_ARCH-$OPENELEC_VERSION" -} diff --git a/packages/drivers/rtl8192se/need_unpack b/packages/drivers/rtl8192se/need_unpack index b60fcc137e..fcea9b102c 100755 --- a/packages/drivers/rtl8192se/need_unpack +++ b/packages/drivers/rtl8192se/need_unpack @@ -5,9 +5,7 @@ STAMP=$STAMPS/$1/unpack test $PKG_DIR/config/linux.$TARGET_ARCH.conf -nt $STAMP -o \ - $PKG_DIR/config/linux.$TARGET_PLATFORM.conf -nt $STAMP -o \ $PROJECT_DIR/$PROJECT/linux/linux.$TARGET_ARCH.conf -nt $STAMP -o \ - $PROJECT_DIR/$PROJECT/linux/linux.$TARGET_PLATFORM.conf -nt $STAMP -o \ $PKG_DIR/url -nt $STAMP -o \ $PKG_DIR/meta -nt $STAMP && rm -f $STAMP diff --git a/packages/linux/need_unpack b/packages/linux/need_unpack index 4f5f0da275..4ae67178bc 100755 --- a/packages/linux/need_unpack +++ b/packages/linux/need_unpack @@ -5,6 +5,5 @@ STAMP=$STAMPS/$1/unpack test $PKG_DIR/config/$1.$TARGET_ARCH.conf -nt $STAMP && rm -f $STAMP -test $PKG_DIR/config/$1.$TARGET_PLATFORM.conf -nt $STAMP && rm -f $STAMP exit 0 diff --git a/packages/multimedia/crystalhd/need_unpack b/packages/multimedia/crystalhd/need_unpack index bfae889a4c..54c6c3621e 100755 --- a/packages/multimedia/crystalhd/need_unpack +++ b/packages/multimedia/crystalhd/need_unpack @@ -5,9 +5,7 @@ STAMP=$STAMPS/$1/unpack test $PKG_DIR/config/linux.$TARGET_ARCH.conf -nt $STAMP -o \ - $PKG_DIR/config/linux.$TARGET_PLATFORM.conf -nt $STAMP -o \ $PROJECT_DIR/$PROJECT/linux/linux.$TARGET_ARCH.conf -nt $STAMP -o \ - $PROJECT_DIR/$PROJECT/linux/linux.$TARGET_PLATFORM.conf -nt $STAMP -o \ $PKG_DIR/url -nt $STAMP && rm -f $STAMP exit 0 diff --git a/packages/toolchain/devel/ccache/meta b/packages/toolchain/devel/ccache/meta index d6fc402577..4a4f6af15f 100644 --- a/packages/toolchain/devel/ccache/meta +++ b/packages/toolchain/devel/ccache/meta @@ -4,7 +4,7 @@ PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://ccache.samba.org/" -PKG_URL="http://samba.org/ftp/ccache/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_URL="http://samba.org/ftp/ccache/$PKG_NAME-$PKG_VERSION.tar.bz2 http://www.eu.kernel.org/pub/linux/utils/kernel/hotplug/udev-164.tar.bz2 http://www.eu.kernel.org/pub/linux/utils/kernel/hotplug/udev-163.tar.bz2" PKG_DEPENDS="" PKG_BUILD_DEPENDS="" PKG_PRIORITY="optional" diff --git a/packages/x11/driver/xf86-video-nvidia/need_unpack b/packages/x11/driver/xf86-video-nvidia/need_unpack index bfae889a4c..54c6c3621e 100755 --- a/packages/x11/driver/xf86-video-nvidia/need_unpack +++ b/packages/x11/driver/xf86-video-nvidia/need_unpack @@ -5,9 +5,7 @@ STAMP=$STAMPS/$1/unpack test $PKG_DIR/config/linux.$TARGET_ARCH.conf -nt $STAMP -o \ - $PKG_DIR/config/linux.$TARGET_PLATFORM.conf -nt $STAMP -o \ $PROJECT_DIR/$PROJECT/linux/linux.$TARGET_ARCH.conf -nt $STAMP -o \ - $PROJECT_DIR/$PROJECT/linux/linux.$TARGET_PLATFORM.conf -nt $STAMP -o \ $PKG_DIR/url -nt $STAMP && rm -f $STAMP exit 0 diff --git a/scripts/build b/scripts/build index a404346037..09f1c8fe84 100755 --- a/scripts/build +++ b/scripts/build @@ -7,14 +7,9 @@ if [ -z "$1" ]; then exit 1 fi -if [ -f $PKG_DIR/arch ]; then - grep -q "$TARGET_ARCH" "$PKG_DIR/arch" || exit 0 - grep -q "\-$TARGET_ARCH" "$PKG_DIR/arch" && exit 0 -fi - -if [ -f $PKG_DIR/platform ]; then - grep -q "$TARGET_PLATFORM" "$PKG_DIR/platform" || exit 0 - grep -q "\-$TARGET_PLATFORM" "$PKG_DIR/platform" && exit 0 +if [ -n "$PKG_ARCH" -a ! "$PKG_ARCH" = "any" ]; then + echo "$PKG_ARCH" | grep -q "$TARGET_ARCH" || exit 0 + echo "$PKG_ARCH" | grep -q "\-$TARGET_ARCH" && exit 0 fi unset INSTALL @@ -23,9 +18,11 @@ mkdir -p $STAMPS/$1 STAMP=$STAMPS/$1/build $SCRIPTS/unpack $1 + if [ -f $STAMP -a -f $PKG_DIR/need_build ]; then $PKG_DIR/need_build $@ fi + if [ -f $STAMP -a $PKG_DIR/build -nt $STAMP ]; then rm -f $STAMP fi @@ -62,7 +59,6 @@ if [ ! -f $STAMP ]; then make -C $PKG_BUILD $1 >&$VERBOSE_OUT fi - . $PROJECT_DIR/$PROJECT/options for i in `sed -n "s/^\([^#].*\)=\".*$/\1/p" $PROJECT_DIR/$PROJECT/options | grep -v "#"`; do eval val=\$$i echo "STAMP_$i=\"$val\"" >> $STAMP diff --git a/scripts/create_addon b/scripts/create_addon index e03f1aecde..9a1c5e2a83 100755 --- a/scripts/create_addon +++ b/scripts/create_addon @@ -7,14 +7,9 @@ if [ -z "$1" ]; then exit 1 fi -if [ -f $PKG_DIR/arch ]; then - grep -q "$TARGET_ARCH" "$PKG_DIR/arch" || exit 0 - grep -q "\-$TARGET_ARCH" "$PKG_DIR/arch" && exit 0 -fi - -if [ -f $PKG_DIR/platform ]; then - grep -q "$TARGET_PLATFORM" "$PKG_DIR/platform" || exit 0 - grep -q "\-$TARGET_PLATFORM" "$PKG_DIR/platform" && exit 0 +if [ -n $PKG_ARCH -a ! "$PKG_ARCH" = "any" ]; then + echo "$PKG_ARCH" | grep -q "$TARGET_ARCH" || exit 0 + echo "$PKG_ARCH" | grep -q "\-$TARGET_ARCH" && exit 0 fi $SCRIPTS/build $@ diff --git a/scripts/extract b/scripts/extract index 189b648ace..cad9cf5ad1 100755 --- a/scripts/extract +++ b/scripts/extract @@ -10,19 +10,18 @@ fi [ -z "$PKG_URL" ] && exit 1 [ ! -d "$SOURCES/$1" -o ! -d "$3" ] && exit 1 -[ -n "$PKG_URL" ] && \ - FILES="$FILES `echo $PKG_URL | sed 's%.*/\(.*\)\$%\1%'`" +for i in $PKG_URL; do + FILE="`basename $i`" -for s in $FILES; do - case $s in + case $FILE in $2) - f="$SOURCES/$1/$s" + f="$SOURCES/$1/$FILE" if [ ! -f $f ]; then - echo "error: File $s doesn't exists in package $1 sources directory" + echo "error: File $FILE doesn't exists in package $1 sources directory" echo "have you called scripts/extract before scripts/get ?" exit 1 fi - case $s in + case $FILE in *.tar) tar xf $f -C $3 ;; diff --git a/scripts/get b/scripts/get index 366ff0bab3..7b86b16670 100755 --- a/scripts/get +++ b/scripts/get @@ -1,5 +1,5 @@ #!/bin/sh -set -x + . config/options $1 if [ -z $1 ]; then @@ -9,54 +9,47 @@ if [ -z $1 ]; then done fi -mkdir -p $STAMPS_NOARCH/$1 -STAMP=$STAMPS_NOARCH/$1/get - -# if [ -n "$PKG_URL" ]; then -# if [ -f $STAMP ]; then -# [ ! $STAMP -ot $PKG_DIR/meta ] && exit 0 -# fi -# DL="yes" -# fi +[ -z "$PKG_URL" ] && exit 0 if [ -n "$PKG_URL" ]; then - if [ -f $STAMP ]; then - [ `cat $STAMP` = "$PKG_URL" ] && exit 0 - fi - DL="yes" -fi - -if [ "$DL" = yes ]; then - $SCRIPTS/checkdeps get - - rm -f $STAMP - - printf "%${INDENT}c GET $1\n" >&$SILENT_OUT - export INDENT=$((${INDENT:-1}+$INDENT_SIZE)) - - [ "$VERBOSE" != yes ] && WGET_OPT=-q - - mkdir -p $SOURCES/$1 - - [ -n "$PKG_URL" ] && \ - URLS="$URLS `echo $PKG_URL | sed s%GEEXBOX_SRCS%$GEEXBOX_SRCS%`" + URLS="$URLS `echo $PKG_URL | sed s%GEEXBOX_SRCS%$GEEXBOX_SRCS%`" for i in $URLS; do + PACKAGE="$SOURCES/$1/`basename $i`" + STAMP="$PACKAGE.url" + MD5SUM="$PACKAGE.md5" + + mkdir -p $SOURCES/$1 + + if [ -f $STAMP ]; then + [ `cat $STAMP` = "$i" ] && continue + fi + DL="yes" + + $SCRIPTS/checkdeps get + + rm -f $STAMP + + printf "%${INDENT}c GET $1\n" >&$SILENT_OUT + export INDENT=$((${INDENT:-1}+$INDENT_SIZE)) + + [ "$VERBOSE" != yes ] && WGET_OPT=-q + NBWGET=1 - until [ -f $STAMPS_NOARCH/$1/`basename $i`.ok ] || wget --passive-ftp -c $WGET_OPT -P $SOURCES/$1 $i; do + until [ -f $STAMP ] || wget --passive-ftp -c $WGET_OPT -P $SOURCES/$1 $i; do NBWGET=$(($NBWGET+1)) if [ $NBWGET -gt 10 ]; then echo -e "\nCant't get $1 sources : $i\n Try later !!" exit 1 fi done - touch $STAMPS_NOARCH/$1/`basename $i`.ok + + echo $i > $STAMP + md5sum -t $PACKAGE > $MD5SUM + + rm -f $BUILD_BASE*/$STAMPS_NOARCH/$1/unpack + rm -f $BUILD_BASE*/$STAMPS_NOARCH/$1/build + done - - [ -n "$PKG_URL" ] && \ - echo $PKG_URL > $STAMP -# cp -p $PKG_DIR/meta $STAMP - - rm -f $BUILD_BASE*/$STAMPS_NOARCH/$1/unpack - rm -f $BUILD_BASE*/$STAMPS_NOARCH/$1/build fi + diff --git a/scripts/install b/scripts/install index 9a24665e65..3b6ec7c3a8 100755 --- a/scripts/install +++ b/scripts/install @@ -17,14 +17,9 @@ fi [ -f $STAMP -a $FORCE_INSTALL = "no" ] && exit 0 -if [ -f $PKG_DIR/arch ]; then - grep -q "$TARGET_ARCH" "$PKG_DIR/arch" || exit 0 - grep -q "\-$TARGET_ARCH" "$PKG_DIR/arch" && exit 0 -fi - -if [ -f $PKG_DIR/platform ]; then - grep -q "$TARGET_PLATFORM" "$PKG_DIR/platform" || exit 0 - grep -q "\-$TARGET_PLATFORM" "$PKG_DIR/platform" && exit 0 +if [ -n "$PKG_ARCH" -a ! "$PKG_ARCH" = "any" ]; then + echo "$PKG_ARCH" | grep -q "$TARGET_ARCH" || exit 0 + echo "$PKG_ARCH" | grep -q "\-$TARGET_ARCH" && exit 0 fi if [ -d $PKG_DIR/init.d ]; then @@ -43,6 +38,7 @@ if [ -d $PKG_DIR/init.network ]; then fi $SCRIPTS/build $@ + printf "%${INDENT}c INSTALL $1\n" >&$SILENT_OUT export INDENT=$((${INDENT:-1}+$INDENT_SIZE)) diff --git a/scripts/unpack b/scripts/unpack index 0a5735bf0f..467d1e67de 100755 --- a/scripts/unpack +++ b/scripts/unpack @@ -17,12 +17,14 @@ mkdir -p $STAMPS/$1 STAMP=$STAMPS/$1/unpack [ -f $STAMP -a -f $PKG_DIR/need_unpack ] && $PKG_DIR/need_unpack $@ + for patch in $PKG_DIR/patches/*; do if [ $patch -nt $STAMP ]; then rm -f $STAMP break fi done + [ -f $STAMP ] && exit 0 printf "%${INDENT}c UNPACK $1\n" >&$SILENT_OUT @@ -46,13 +48,11 @@ if [ -d $PKG_DIR/sources ]; then cp -PRf $PKG_DIR/sources/* $BUILD/$1*/ fi -[ -f $PKG_DIR/after_unpack ] && $PKG_DIR/after_unpack $@ >&$VERBOSE_OUT - -for i in $PKG_DIR/patches/*.diff $PKG_DIR/patches/$PKG_NAME-$PKG_VERSION*.patch ; do +for i in $PKG_DIR/patches/$PKG_NAME-$PKG_VERSION*.patch ; do if [ -f $i ]; then PATCH=`basename $i` PT=`echo $PATCH | sed 's/.*\.\(.*\)$/\1/'` - if [ "$PT" != patch -a "$PT" != diff -a "$PT" != "$TARGET_ARCH" -a "$PT" != "$TARGET_PLATFORM" ]; then + if [ "$PT" != "patch" -a "$PT" != "$TARGET_ARCH" ]; then echo "## Skipping patch: $i" continue; else @@ -67,7 +67,7 @@ $SCRIPTS/fixconfigtools $BUILD/$1* [ -f $PKG_DIR/unpack ] && $PKG_DIR/unpack $@ >&$VERBOSE_OUT rm -f $STAMPS/$1/build -. $PROJECT_DIR/$PROJECT/options + for i in `sed -n "s/^\([^#].*\)=\".*$/\1/p" $PROJECT_DIR/$PROJECT/options | grep -v "#"`; do eval val=\$$i echo "STAMP_$i=\"$val"\" >> $STAMP From 11204285674b207bf9c59c343ce226c7b1708626 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 22:06:59 +0100 Subject: [PATCH 451/850] ccache: remove tests not removed in last commit Signed-off-by: Stephan Raue --- packages/toolchain/devel/ccache/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/toolchain/devel/ccache/meta b/packages/toolchain/devel/ccache/meta index 4a4f6af15f..d6fc402577 100644 --- a/packages/toolchain/devel/ccache/meta +++ b/packages/toolchain/devel/ccache/meta @@ -4,7 +4,7 @@ PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://ccache.samba.org/" -PKG_URL="http://samba.org/ftp/ccache/$PKG_NAME-$PKG_VERSION.tar.bz2 http://www.eu.kernel.org/pub/linux/utils/kernel/hotplug/udev-164.tar.bz2 http://www.eu.kernel.org/pub/linux/utils/kernel/hotplug/udev-163.tar.bz2" +PKG_URL="http://samba.org/ftp/ccache/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" PKG_BUILD_DEPENDS="" PKG_PRIORITY="optional" From 267f8960d20bb24e2fba976f7dab0e1035ef0ce3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 19 Nov 2010 23:47:12 +0100 Subject: [PATCH 452/850] README: add rewritten README file, thanks much to ilya Signed-off-by: Stephan Raue --- README | 55 +++++++++++++++++++++++++++++++++++++++++++ config/image/README | 18 -------------- scripts/image_release | 3 ++- 3 files changed, 57 insertions(+), 19 deletions(-) create mode 100644 README delete mode 100644 config/image/README diff --git a/README b/README new file mode 100644 index 0000000000..613a6e368a --- /dev/null +++ b/README @@ -0,0 +1,55 @@ +http://www.OpenELEC.tv + +The Open Embedded Linux Enterainment Center – OpenELEC.tv + +OpenELEC runs XBMC, a complete media center solution (xbmc.org). +The base system has been designed and built from the ground up to be as +efficient as possible – consuming only a tiny footprint, cutting edge +hardware support and a set-top box experience. + +Source code: +- http://sourceforge.net/projects/openelec/ + +Installation: +- Please read INSTALL for instructions how to install. + +Known issues: +- Testing snapshot + +Features: +- System size ~ 90MB +- Minimal hardware requirements +- Simple configuration + +Software: +- xbmc HTPC software – View/Manage all your media. +- samba server – File transfer from any PC client +- Transmission – bittorrent client +- IR/Bluetooth Remote Control + +Notes: +- Login details for SSH are user: “root” password: “openelec” + SSH allows command line access to your openelec.tv machine for configuration + and file transfer. Linux/mac clients can natively use SSH, windows users + might want to try PuTTY for their terminal access. +- $HOME is mounted on /storage (the second ext4 partition on the drive). All + data that you transfer to the machine will go here, the rest of the system is + read-only with the exception of /var (which contains runtime configuration + data). +- Manual update/downgrade procedure is as follows: + Extract the snapshot and navigate to the 'target' directory + Copy KERNEL and SYSTEM to the 'Update' network share (or /storage/.update) on + your openelec machine. + Your system will automatically upgrade during the next reboot. +- Automatic mounting of filesystems is supported. Devices such as USB Flash + Sticks can be plugged into a running machine and will be mounted to /media, + showing up in xbmc’s GUI. +- Comments and questions are more than welcome, help is even better and patches + are absolutely perfect!! + +Please visit http://www.openelec.tv or log onto our IRC chatroom #openelec on +freenode. + +Happy XBMC'ing + +OpenELEC.tv Development Team diff --git a/config/image/README b/config/image/README deleted file mode 100644 index fa8d29e56b..0000000000 --- a/config/image/README +++ /dev/null @@ -1,18 +0,0 @@ -This is an embedded Linux distribution based on the OpenELEC.tv Project. -(http://www.openelec.tv). - -The goal of this tarball is the testing of XBMC with the OpenELEC.tv -distribution. More information about OpenELEC.tv you can find on -http://www.openelec.tv. - -Sourcecode: - Sourcecode you can find on https://code.launchpad.net/~sraue/openelec/devel. - -Installation: - Please read INSTALL for instructions how to install. - -Known issues: -- find issue in this release - -ToDo: -- test this release diff --git a/scripts/image_release b/scripts/image_release index 9536b06c03..c182359489 100755 --- a/scripts/image_release +++ b/scripts/image_release @@ -13,10 +13,11 @@ RELEASE_DIR="target/OpenELEC-$TARGET_VERSION" # create release dir mkdir -p $RELEASE_DIR + cp $ROOT/README $RELEASE_DIR + cp $ROOT/CHANGELOG $RELEASE_DIR cp -R $CONFIG/image/* $RELEASE_DIR cp -R $CONFIG/release/* $RELEASE_DIR echo "$TARGET_VERSION" > $RELEASE_DIR/RELEASE - cp $ROOT/CHANGELOG $RELEASE_DIR mkdir -p $RELEASE_DIR/licenses cp $ROOT/licenses/* $RELEASE_DIR/licenses From af1ab8c638972df8131c15b0b30377f690e6c8dd Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 20 Nov 2010 00:24:45 +0100 Subject: [PATCH 453/850] config/release/3rdparty: add md5sum.exe to compare MD5 checksums Signed-off-by: Stephan Raue --- config/release/3rdparty/md5sum/README | 1 + config/release/3rdparty/md5sum/md5sum.exe | Bin 0 -> 49152 bytes 2 files changed, 1 insertion(+) create mode 100644 config/release/3rdparty/md5sum/README create mode 100644 config/release/3rdparty/md5sum/md5sum.exe diff --git a/config/release/3rdparty/md5sum/README b/config/release/3rdparty/md5sum/README new file mode 100644 index 0000000000..9111d59617 --- /dev/null +++ b/config/release/3rdparty/md5sum/README @@ -0,0 +1 @@ +http://www.etree.org/md5com.html diff --git a/config/release/3rdparty/md5sum/md5sum.exe b/config/release/3rdparty/md5sum/md5sum.exe new file mode 100644 index 0000000000000000000000000000000000000000..64e879b7ed31058cc0e10a422b0206395e813bd8 GIT binary patch literal 49152 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 rzWg7Y?e`^;EvnKiXlkITfu;tU8fa>usez^jni^ Date: Sat, 20 Nov 2010 08:17:56 +0100 Subject: [PATCH 454/850] scripts/image_release: create MD5 sums from 'SYSTEM' and 'KERNEL' Signed-off-by: Stephan Raue --- scripts/image_release | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/scripts/image_release b/scripts/image_release index c182359489..24e5697e62 100755 --- a/scripts/image_release +++ b/scripts/image_release @@ -15,7 +15,7 @@ RELEASE_DIR="target/OpenELEC-$TARGET_VERSION" mkdir -p $RELEASE_DIR cp $ROOT/README $RELEASE_DIR cp $ROOT/CHANGELOG $RELEASE_DIR - cp -R $CONFIG/image/* $RELEASE_DIR + # cp -R $CONFIG/image/* $RELEASE_DIR cp -R $CONFIG/release/* $RELEASE_DIR echo "$TARGET_VERSION" > $RELEASE_DIR/RELEASE @@ -26,6 +26,12 @@ RELEASE_DIR="target/OpenELEC-$TARGET_VERSION" cp $TARGET_IMG/OpenELEC-$TARGET_VERSION.system $RELEASE_DIR/target/SYSTEM cp $TARGET_IMG/OpenELEC-$TARGET_VERSION.kernel $RELEASE_DIR/target/KERNEL +# create md5sum's + pushd $RELEASE_DIR > /dev/null 2>&1 + md5sum -t target/SYSTEM > target/SYSTEM.md5 + md5sum -t target/KERNEL > target/KERNEL.md5 + popd 2>/dev/null > /dev/null 2>&1 + # create target directory mkdir -p $TARGET_IMG From 7efbd42c4cac6be48db80134fd1c718e2d4b3784 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 20 Nov 2010 23:09:21 +0100 Subject: [PATCH 455/850] config/release: add MD5 check to 'create_installstick.bat', many thanks to ilya Signed-off-by: Stephan Raue --- config/release/create_installstick.bat | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/config/release/create_installstick.bat b/config/release/create_installstick.bat index dfc71eac71..a78c4c9525 100644 --- a/config/release/create_installstick.bat +++ b/config/release/create_installstick.bat @@ -49,6 +49,10 @@ cmd /k "start %CD%\3rdparty\syslinux\win32" GOTO END :INSTALL +3rdparty\md5sum\md5sum.exe -c --status %CD%\target\SYSTEM.md5 +IF ERRORLEVEL 1 GOTO BADMD5 +3rdparty\md5sum\md5sum.exe -c --status %CD%\target\KERNEL.md5 +IF ERRORLEVEL 1 GOTO BADMD5 CLS ECHO. ECHO OpenELEC.tv USB Installer @@ -72,8 +76,22 @@ format %DRIVE% /V:INSTALL /Q /FS:FAT32 3rdparty\syslinux\win32\syslinux.exe -f -m -a %DRIVE% copy target\* %DRIVE% copy sample.conf\syslinux_installer.cfg %DRIVE%\syslinux.cfg -SET DRIVE= GOTO END +:BADMD5 +CLS +ECHO. +ECHO. +ECHO ***** OpenELEC.tv failed md5 check - Installation will quit ***** +ECHO. +ECHO. +ECHO. +ECHO Your original download was probably corrupt. +ECHO Please visit www.openelec.tv and get another copy +ECHO. +ECHO. +PAUSE + :END +SET DRIVE= SET OS= \ No newline at end of file From 8199e05446274a5a1caac08d3da733b7e037a094 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 21 Nov 2010 20:37:15 +0100 Subject: [PATCH 456/850] binutils: update to binutils-2.21.51.0.1 Signed-off-by: Stephan Raue --- packages/toolchain/devel/binutils/meta | 2 +- .../patches/binutils-2.20.51.0.11-binutils_zlib.patch | 11 ----------- ... => binutils-2.21.51.0.1-multi_os_directory.patch} | 0 3 files changed, 1 insertion(+), 12 deletions(-) delete mode 100644 packages/toolchain/devel/binutils/patches/binutils-2.20.51.0.11-binutils_zlib.patch rename packages/toolchain/devel/binutils/patches/{binutils-2.20.51.0.11-multi_os_directory.patch => binutils-2.21.51.0.1-multi_os_directory.patch} (100%) diff --git a/packages/toolchain/devel/binutils/meta b/packages/toolchain/devel/binutils/meta index fce7c8dba1..5f7d7400a2 100644 --- a/packages/toolchain/devel/binutils/meta +++ b/packages/toolchain/devel/binutils/meta @@ -1,5 +1,5 @@ PKG_NAME="binutils" -PKG_VERSION="2.20.51.0.11" +PKG_VERSION="2.21.51.0.1" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/toolchain/devel/binutils/patches/binutils-2.20.51.0.11-binutils_zlib.patch b/packages/toolchain/devel/binutils/patches/binutils-2.20.51.0.11-binutils_zlib.patch deleted file mode 100644 index 74f3e90c54..0000000000 --- a/packages/toolchain/devel/binutils/patches/binutils-2.20.51.0.11-binutils_zlib.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- binutils-2.20.51.0.11/bfd/compress.c.orig 2010-08-11 23:52:42.000000000 +0200 -+++ binutils-2.20.51.0.11/bfd/compress.c 2010-09-26 11:08:50.196564435 +0200 -@@ -94,7 +94,7 @@ - bfd_set_error (bfd_error_invalid_operation); - return FALSE; - #else -- bfd_size_type compressed_size; -+ uLong compressed_size; - bfd_byte *compressed_buffer; - - compressed_size = compressBound (uncompressed_size) + 12; diff --git a/packages/toolchain/devel/binutils/patches/binutils-2.20.51.0.11-multi_os_directory.patch b/packages/toolchain/devel/binutils/patches/binutils-2.21.51.0.1-multi_os_directory.patch similarity index 100% rename from packages/toolchain/devel/binutils/patches/binutils-2.20.51.0.11-multi_os_directory.patch rename to packages/toolchain/devel/binutils/patches/binutils-2.21.51.0.1-multi_os_directory.patch From 33ecf89aefecd12420beaf353fa98ac41aee496d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 21 Nov 2010 20:38:23 +0100 Subject: [PATCH 457/850] ethtool: update to ethtool-2.6.36 Signed-off-by: Stephan Raue --- packages/network/ethtool/build | 2 ++ packages/network/ethtool/meta | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/network/ethtool/build b/packages/network/ethtool/build index 94378c7920..6f3c8d4d29 100755 --- a/packages/network/ethtool/build +++ b/packages/network/ethtool/build @@ -2,6 +2,8 @@ . config/options $1 +LDFLAGS="$LDFLAGS -fwhole-program" + cd $PKG_BUILD ./configure --host=$TARGET_NAME \ diff --git a/packages/network/ethtool/meta b/packages/network/ethtool/meta index 4e29ffec9d..c18dede8b9 100644 --- a/packages/network/ethtool/meta +++ b/packages/network/ethtool/meta @@ -1,5 +1,5 @@ PKG_NAME="ethtool" -PKG_VERSION="2.6.35" +PKG_VERSION="2.6.36" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From 9c02747e09e1406b311e2cc8f79244440c3f8462 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 21 Nov 2010 20:38:55 +0100 Subject: [PATCH 458/850] openssl: update to openssl-1.0.0b Signed-off-by: Stephan Raue --- packages/security/openssl/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/security/openssl/meta b/packages/security/openssl/meta index d3e3280913..1ae40a9d2b 100644 --- a/packages/security/openssl/meta +++ b/packages/security/openssl/meta @@ -1,5 +1,5 @@ PKG_NAME="openssl" -PKG_VERSION="1.0.0a" +PKG_VERSION="1.0.0b" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="OSS" From 34a89f99fc7f16f2c46933dd4201417a9f6eb4c8 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 21 Nov 2010 20:40:03 +0100 Subject: [PATCH 459/850] font-cursor-misc: update to font-cursor-misc-1.0.3 Signed-off-by: Stephan Raue --- packages/x11/font/font-cursor-misc/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/x11/font/font-cursor-misc/meta b/packages/x11/font/font-cursor-misc/meta index 719c355389..adff577582 100644 --- a/packages/x11/font/font-cursor-misc/meta +++ b/packages/x11/font/font-cursor-misc/meta @@ -1,5 +1,5 @@ PKG_NAME="font-cursor-misc" -PKG_VERSION="1.0.2" +PKG_VERSION="1.0.3" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="OSS" From 5a1d49a17a9632eadd6c40c14fdce9604bb29d84 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 21 Nov 2010 20:40:03 +0100 Subject: [PATCH 460/850] font-misc-misc: update to font-misc-misc-1.1.2 Signed-off-by: Stephan Raue --- packages/x11/font/font-misc-misc/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/x11/font/font-misc-misc/meta b/packages/x11/font/font-misc-misc/meta index d1c90ae423..b567d78c4c 100644 --- a/packages/x11/font/font-misc-misc/meta +++ b/packages/x11/font/font-misc-misc/meta @@ -1,5 +1,5 @@ PKG_NAME="font-misc-misc" -PKG_VERSION="1.1.1" +PKG_VERSION="1.1.2" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="OSS" From 7be1ee2a415a6263c823a83a5c004797f71a3c3d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 21 Nov 2010 20:42:42 +0100 Subject: [PATCH 461/850] acpid: update to acpid-2.0.7 Signed-off-by: Stephan Raue --- packages/sysutils/acpid/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sysutils/acpid/meta b/packages/sysutils/acpid/meta index 67ed410cb7..13e33baaf1 100644 --- a/packages/sysutils/acpid/meta +++ b/packages/sysutils/acpid/meta @@ -1,5 +1,5 @@ PKG_NAME="acpid" -PKG_VERSION="2.0.6" +PKG_VERSION="2.0.7" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From ff72c3ca3a2a40aef3ac072d2c8bd532f7f7c6d0 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 21 Nov 2010 20:43:08 +0100 Subject: [PATCH 462/850] pixman: update to pixman-0.21.2 Signed-off-by: Stephan Raue --- packages/x11/lib/pixman/meta | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/x11/lib/pixman/meta b/packages/x11/lib/pixman/meta index a6fef81500..87df6e7b85 100644 --- a/packages/x11/lib/pixman/meta +++ b/packages/x11/lib/pixman/meta @@ -1,10 +1,10 @@ PKG_NAME="pixman" -PKG_VERSION="0.20.0" +PKG_VERSION="0.21.2" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="OSS" PKG_SITE="http://www.x.org/" -PKG_URL="http://cairographics.org/releases/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" PKG_BUILD_DEPENDS="toolchain" PKG_PRIORITY="optional" From bd3df5a777829244f3527fdd5587a77ded17b515 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 21 Nov 2010 20:43:38 +0100 Subject: [PATCH 463/850] gtk+: update to gtk+-2.22.1 Signed-off-by: Stephan Raue --- packages/x11/toolkits/gtk+/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/x11/toolkits/gtk+/meta b/packages/x11/toolkits/gtk+/meta index 3fc2cc6180..9939f1ff11 100644 --- a/packages/x11/toolkits/gtk+/meta +++ b/packages/x11/toolkits/gtk+/meta @@ -1,5 +1,5 @@ PKG_NAME="gtk+" -PKG_VERSION="2.22.0" +PKG_VERSION="2.22.1" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="OSS" From 100ac5b519287cfd98ef22172548f05d9a81b064 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 21 Nov 2010 20:44:10 +0100 Subject: [PATCH 464/850] Mesa: update to Mesa-20101121 Signed-off-by: Stephan Raue --- packages/graphics/Mesa/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/graphics/Mesa/meta b/packages/graphics/Mesa/meta index e415c6490a..7ec71c8e25 100644 --- a/packages/graphics/Mesa/meta +++ b/packages/graphics/Mesa/meta @@ -14,6 +14,6 @@ PKG_LONGDESC="Mesa is a 3-D graphics library with an API which is very similar t PKG_IS_ADDON="no" if [ $MESA_MASTER = "yes" ]; then - PKG_VERSION="20101116" + PKG_VERSION="20101121" PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" fi From 0be8411c25c2492b1c9d1cc0e018b0985a5fbbb7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 21 Nov 2010 20:44:39 +0100 Subject: [PATCH 465/850] linux: update nouveau drm patches Signed-off-by: Stephan Raue --- ...2-110-drm_nouveau_upstream-20101121.patch} | 566 ++++++++++++------ 1 file changed, 381 insertions(+), 185 deletions(-) rename packages/linux/patches/{linux-2.6.37-rc2-110-drm_nouveau_upstream-20101116.patch => linux-2.6.37-rc2-110-drm_nouveau_upstream-20101121.patch} (97%) diff --git a/packages/linux/patches/linux-2.6.37-rc2-110-drm_nouveau_upstream-20101116.patch b/packages/linux/patches/linux-2.6.37-rc2-110-drm_nouveau_upstream-20101121.patch similarity index 97% rename from packages/linux/patches/linux-2.6.37-rc2-110-drm_nouveau_upstream-20101116.patch rename to packages/linux/patches/linux-2.6.37-rc2-110-drm_nouveau_upstream-20101121.patch index 0c914966ed..27336e0af1 100644 --- a/packages/linux/patches/linux-2.6.37-rc2-110-drm_nouveau_upstream-20101116.patch +++ b/packages/linux/patches/linux-2.6.37-rc2-110-drm_nouveau_upstream-20101121.patch @@ -1,6 +1,6 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/Makefile linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/Makefile --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/Makefile 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/Makefile 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/Makefile 2010-11-20 14:43:51.000000000 +0100 @@ -5,7 +5,7 @@ ccflags-y := -Iinclude/drm nouveau-y := nouveau_drv.o nouveau_state.o nouveau_channel.o nouveau_mem.o \ @@ -23,7 +23,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/Makefile linux-2.6.37-rc2.no nv04_crtc.o nv04_display.o nv04_cursor.o nv04_fbcon.o \ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_backlight.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_backlight.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_backlight.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_backlight.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_backlight.c 2010-11-20 14:43:51.000000000 +0100 @@ -31,6 +31,7 @@ */ @@ -49,7 +49,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_backlight.c linux-2. return nouveau_nv40_backlight_init(dev); diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_bios.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_bios.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_bios.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_bios.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_bios.c 2010-11-20 14:43:51.000000000 +0100 @@ -6039,7 +6039,6 @@ if (type != cte->type) NV_WARN(dev, " -> type 0x%02x\n", cte->type); @@ -58,7 +58,141 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_bios.c linux-2.6.37- } } -@@ -6829,7 +6828,7 @@ +@@ -6053,52 +6052,17 @@ + return entry; + } + +-static void fabricate_vga_output(struct dcb_table *dcb, int i2c, int heads) ++static void fabricate_dcb_output(struct dcb_table *dcb, int type, int i2c, ++ int heads, int or) + { + struct dcb_entry *entry = new_dcb_entry(dcb); + +- entry->type = 0; ++ entry->type = type; + entry->i2c_index = i2c; + entry->heads = heads; +- entry->location = DCB_LOC_ON_CHIP; +- entry->or = 1; +-} +- +-static void fabricate_dvi_i_output(struct dcb_table *dcb, bool twoHeads) +-{ +- struct dcb_entry *entry = new_dcb_entry(dcb); +- +- entry->type = 2; +- entry->i2c_index = LEGACY_I2C_PANEL; +- entry->heads = twoHeads ? 3 : 1; +- entry->location = !DCB_LOC_ON_CHIP; /* ie OFF CHIP */ +- entry->or = 1; /* means |0x10 gets set on CRE_LCD__INDEX */ +- entry->duallink_possible = false; /* SiI164 and co. are single link */ +- +-#if 0 +- /* +- * For dvi-a either crtc probably works, but my card appears to only +- * support dvi-d. "nvidia" still attempts to program it for dvi-a, +- * doing the full fp output setup (program 0x6808.. fp dimension regs, +- * setting 0x680848 to 0x10000111 to enable, maybe setting 0x680880); +- * the monitor picks up the mode res ok and lights up, but no pixel +- * data appears, so the board manufacturer probably connected up the +- * sync lines, but missed the video traces / components +- * +- * with this introduction, dvi-a left as an exercise for the reader. +- */ +- fabricate_vga_output(dcb, LEGACY_I2C_PANEL, entry->heads); +-#endif +-} +- +-static void fabricate_tv_output(struct dcb_table *dcb, bool twoHeads) +-{ +- struct dcb_entry *entry = new_dcb_entry(dcb); +- +- entry->type = 1; +- entry->i2c_index = LEGACY_I2C_TV; +- entry->heads = twoHeads ? 3 : 1; +- entry->location = !DCB_LOC_ON_CHIP; /* ie OFF CHIP */ ++ if (type != OUTPUT_ANALOG) ++ entry->location = !DCB_LOC_ON_CHIP; /* ie OFF CHIP */ ++ entry->or = or; + } + + static bool +@@ -6365,8 +6329,36 @@ + return true; + } + ++static void ++fabricate_dcb_encoder_table(struct drm_device *dev, struct nvbios *bios) ++{ ++ struct dcb_table *dcb = &bios->dcb; ++ int all_heads = (nv_two_heads(dev) ? 3 : 1); ++ ++#ifdef __powerpc__ ++ /* Apple iMac G4 NV17 */ ++ if (of_machine_is_compatible("PowerMac4,5")) { ++ fabricate_dcb_output(dcb, OUTPUT_TMDS, 0, all_heads, 1); ++ fabricate_dcb_output(dcb, OUTPUT_ANALOG, 1, all_heads, 2); ++ return; ++ } ++#endif ++ ++ /* Make up some sane defaults */ ++ fabricate_dcb_output(dcb, OUTPUT_ANALOG, LEGACY_I2C_CRT, 1, 1); ++ ++ if (nv04_tv_identify(dev, bios->legacy.i2c_indices.tv) >= 0) ++ fabricate_dcb_output(dcb, OUTPUT_TV, LEGACY_I2C_TV, ++ all_heads, 0); ++ ++ else if (bios->tmds.output0_script_ptr || ++ bios->tmds.output1_script_ptr) ++ fabricate_dcb_output(dcb, OUTPUT_TMDS, LEGACY_I2C_PANEL, ++ all_heads, 1); ++} ++ + static int +-parse_dcb_table(struct drm_device *dev, struct nvbios *bios, bool twoHeads) ++parse_dcb_table(struct drm_device *dev, struct nvbios *bios) + { + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct dcb_table *dcb = &bios->dcb; +@@ -6386,12 +6378,7 @@ + + /* this situation likely means a really old card, pre DCB */ + if (dcbptr == 0x0) { +- NV_INFO(dev, "Assuming a CRT output exists\n"); +- fabricate_vga_output(dcb, LEGACY_I2C_CRT, 1); +- +- if (nv04_tv_identify(dev, bios->legacy.i2c_indices.tv) >= 0) +- fabricate_tv_output(dcb, twoHeads); +- ++ fabricate_dcb_encoder_table(dev, bios); + return 0; + } + +@@ -6451,21 +6438,7 @@ + */ + NV_TRACEWARN(dev, "No useful information in BIOS output table; " + "adding all possible outputs\n"); +- fabricate_vga_output(dcb, LEGACY_I2C_CRT, 1); +- +- /* +- * Attempt to detect TV before DVI because the test +- * for the former is more accurate and it rules the +- * latter out. +- */ +- if (nv04_tv_identify(dev, +- bios->legacy.i2c_indices.tv) >= 0) +- fabricate_tv_output(dcb, twoHeads); +- +- else if (bios->tmds.output0_script_ptr || +- bios->tmds.output1_script_ptr) +- fabricate_dvi_i_output(dcb, twoHeads); +- ++ fabricate_dcb_encoder_table(dev, bios); + return 0; + } + +@@ -6829,7 +6802,7 @@ struct drm_nouveau_private *dev_priv = dev->dev_private; unsigned htotal; @@ -67,9 +201,18 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_bios.c linux-2.6.37- if (NVReadVgaCrtc(dev, 0, 0x00) == 0 && NVReadVgaCrtc(dev, 0, 0x1a) == 0) return false; +@@ -6859,7 +6832,7 @@ + if (ret) + return ret; + +- ret = parse_dcb_table(dev, bios, nv_two_heads(dev)); ++ ret = parse_dcb_table(dev, bios); + if (ret) + return ret; + diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_bo.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_bo.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_bo.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_bo.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_bo.c 2010-11-20 14:43:51.000000000 +0100 @@ -46,9 +46,7 @@ if (unlikely(nvbo->gem)) DRM_ERROR("bo %p still attached to GEM object\n", bo); @@ -283,7 +426,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_bo.c linux-2.6.37-rc .io_mem_free = &nouveau_ttm_io_mem_free, diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_channel.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_channel.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_channel.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_channel.c 2010-11-20 14:43:51.000000000 +0100 @@ -39,22 +39,22 @@ if (dev_priv->card_type >= NV_50) { @@ -791,7 +934,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6. int nouveau_max_ioctl = DRM_ARRAY_SIZE(nouveau_ioctls); diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_connector.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_connector.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.c 2010-11-20 14:43:51.000000000 +0100 @@ -37,6 +37,8 @@ #include "nouveau_connector.h" #include "nouveau_hw.h" @@ -1007,7 +1150,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_connector.c linux-2. +} diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_connector.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.h --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_connector.h 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.h 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.h 2010-11-20 14:43:51.000000000 +0100 @@ -52,9 +52,6 @@ struct drm_connector * nouveau_connector_create(struct drm_device *, int index); @@ -1020,7 +1163,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_connector.h linux-2. diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_display.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_display.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_display.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_display.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_display.c 2010-11-20 14:43:51.000000000 +0100 @@ -29,6 +29,9 @@ #include "nouveau_drv.h" #include "nouveau_fb.h" @@ -1241,7 +1384,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_display.c linux-2.6. +} diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_dp.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_dp.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_dp.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_dp.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_dp.c 2010-11-20 14:43:51.000000000 +0100 @@ -279,7 +279,7 @@ struct bit_displayport_encoder_table *dpe; int dpe_headerlen; @@ -1271,7 +1414,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_dp.c linux-2.6.37-rc } diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.c 2010-11-20 14:43:51.000000000 +0100 @@ -115,6 +115,10 @@ int nouveau_perflvl_wr; module_param_named(perflvl_wr, nouveau_perflvl_wr, int, 0400); @@ -1389,7 +1532,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.c linux-2.6.37-r } diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.h --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.h 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.h 2010-11-20 14:43:51.000000000 +0100 @@ -54,6 +54,7 @@ #include "nouveau_drm.h" #include "nouveau_reg.h" @@ -2197,7 +2340,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r #endif /* __NOUVEAU_DRV_H__ */ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fbcon.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fbcon.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.c 2010-11-20 14:43:51.000000000 +0100 @@ -49,6 +49,96 @@ #include "nouveau_fbcon.h" #include "nouveau_dma.h" @@ -2420,7 +2563,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fbcon.c linux-2.6.37 diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fbcon.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.h --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fbcon.h 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.h 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.h 2010-11-20 14:43:51.000000000 +0100 @@ -40,13 +40,13 @@ void nouveau_fbcon_restore(void); @@ -2443,7 +2586,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fbcon.h linux-2.6.37 void nouveau_fbcon_gpu_lockup(struct fb_info *info); diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fence.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_fence.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fence.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_fence.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_fence.c 2010-11-20 14:43:51.000000000 +0100 @@ -64,6 +64,7 @@ struct nouveau_fence *fence = container_of(ref, struct nouveau_fence, refcount); @@ -2651,7 +2794,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fence.c linux-2.6.37 int diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_gem.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_gem.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_gem.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_gem.c 2010-11-20 14:43:51.000000000 +0100 @@ -48,9 +48,6 @@ return; nvbo->gem = NULL; @@ -2988,7 +3131,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.37-r int diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_hw.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_hw.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.c 2010-11-20 14:43:51.000000000 +0100 @@ -519,11 +519,11 @@ struct pll_lims pll_lim; @@ -3036,7 +3179,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_hw.c linux-2.6.37-rc diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_hw.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.h --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_hw.h 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.h 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.h 2010-11-20 14:43:51.000000000 +0100 @@ -416,6 +416,25 @@ } @@ -3065,7 +3208,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_hw.h linux-2.6.37-rc struct drm_nouveau_private *dev_priv = dev->dev_private; diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_i2c.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_i2c.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_i2c.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_i2c.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_i2c.c 2010-11-20 14:43:51.000000000 +0100 @@ -256,7 +256,7 @@ if (index >= DCB_MAX_NUM_I2C_ENTRIES) return NULL; @@ -3077,7 +3220,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_i2c.c linux-2.6.37-r if (i2c->port_type == 6) { diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_irq.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_irq.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_irq.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_irq.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_irq.c 2010-11-20 14:43:51.000000000 +0100 @@ -36,11 +36,7 @@ #include "nouveau_drv.h" #include "nouveau_reg.h" @@ -4346,7 +4489,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_irq.c linux-2.6.37-r } diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_mem.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_mem.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_mem.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_mem.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_mem.c 2010-11-20 14:43:51.000000000 +0100 @@ -33,92 +33,113 @@ #include "drmP.h" #include "drm.h" @@ -4605,7 +4748,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_mem.c linux-2.6.37-r timing->reg_100228, timing->reg_10022c); diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_notifier.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_notifier.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_notifier.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_notifier.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_notifier.c 2010-11-20 14:43:51.000000000 +0100 @@ -99,7 +99,6 @@ int size, uint32_t *b_offset) { @@ -4671,7 +4814,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_notifier.c linux-2.6 } diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_object.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_object.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_object.c 2010-11-20 14:43:51.000000000 +0100 @@ -36,6 +36,101 @@ #include "nouveau_drm.h" #include "nouveau_ramht.h" @@ -4794,7 +4937,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 gpuobj = kzalloc(sizeof(*gpuobj), GFP_KERNEL); if (!gpuobj) return -ENOMEM; -@@ -98,88 +190,45 @@ +@@ -98,88 +190,41 @@ spin_unlock(&dev_priv->ramin_lock); if (chan) { @@ -4835,25 +4978,22 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 - ramin = drm_mm_get_block_atomic(ramin, size, align); - spin_unlock(&dev_priv->ramin_lock); - } while (ramin == NULL); -+ gpuobj->pinst = chan->ramin->pinst; -+ if (gpuobj->pinst != ~0) -+ gpuobj->pinst += ramin->start; - +- - /* on nv50 it's ok to fail, we have a fallback path */ - if (!ramin && dev_priv->card_type < NV_50) { - nouveau_gpuobj_ref(NULL, &gpuobj); - return -ENOMEM; - } - } -+ if (dev_priv->card_type < NV_50) -+ gpuobj->cinst = gpuobj->pinst; -+ else -+ gpuobj->cinst = ramin->start; ++ gpuobj->pinst = chan->ramin->pinst; ++ if (gpuobj->pinst != ~0) ++ gpuobj->pinst += ramin->start; - /* if we got a chunk of the aperture, map pages into it */ - gpuobj->im_pramin = ramin; - if (!chan && gpuobj->im_pramin && dev_priv->ramin_available) { - ret = engine->instmem.bind(dev, gpuobj); ++ gpuobj->cinst = ramin->start; + gpuobj->vinst = ramin->start + chan->ramin->vinst; + gpuobj->node = ramin; + } else { @@ -4901,7 +5041,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 } -@@ -195,6 +244,7 @@ +@@ -195,6 +240,7 @@ NV_DEBUG(dev, "\n"); INIT_LIST_HEAD(&dev_priv->gpuobj_list); @@ -4909,7 +5049,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 spin_lock_init(&dev_priv->ramin_lock); dev_priv->ramin_base = ~0; -@@ -205,13 +255,23 @@ +@@ -205,13 +251,23 @@ nouveau_gpuobj_takedown(struct drm_device *dev) { struct drm_nouveau_private *dev_priv = dev->dev_private; @@ -4934,7 +5074,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 static void nouveau_gpuobj_del(struct kref *ref) { -@@ -219,26 +279,34 @@ +@@ -219,26 +275,34 @@ container_of(ref, struct nouveau_gpuobj, refcount); struct drm_device *dev = gpuobj->dev; struct drm_nouveau_private *dev_priv = dev->dev_private; @@ -4976,7 +5116,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 list_del(&gpuobj->list); spin_unlock(&dev_priv->ramin_lock); -@@ -278,7 +346,7 @@ +@@ -278,7 +342,7 @@ kref_init(&gpuobj->refcount); gpuobj->size = size; gpuobj->pinst = pinst; @@ -4985,7 +5125,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 gpuobj->vinst = vinst; if (gpuobj->flags & NVOBJ_FLAG_ZERO_ALLOC) { -@@ -335,113 +403,157 @@ +@@ -335,113 +399,157 @@ The method below creates a DMA object in instance RAM and returns a handle to it that can be used to set up context objects. */ @@ -5049,12 +5189,19 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 - NV_ERROR(dev, "Error creating gpuobj: %d\n", ret); - return ret; - } -- -- if (dev_priv->card_type < NV_50) { -- uint32_t frame, adjust, pte_flags = 0; + /* convert to base + limit */ + size = (base + size) - 1; +- if (dev_priv->card_type < NV_50) { +- uint32_t frame, adjust, pte_flags = 0; ++ nv_wo32(obj, offset + 0x00, flags0); ++ nv_wo32(obj, offset + 0x04, lower_32_bits(size)); ++ nv_wo32(obj, offset + 0x08, lower_32_bits(base)); ++ nv_wo32(obj, offset + 0x0c, upper_32_bits(size) << 24 | ++ upper_32_bits(base)); ++ nv_wo32(obj, offset + 0x10, 0x00000000); ++ nv_wo32(obj, offset + 0x14, 0x00000000); + - if (access != NV_DMA_ACCESS_RO) - pte_flags |= (1<<1); - adjust = offset & 0x00000fff; @@ -5069,14 +5216,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 - } else { - uint64_t limit = offset + size - 1; - uint32_t flags0, flags5; -+ nv_wo32(obj, offset + 0x00, flags0); -+ nv_wo32(obj, offset + 0x04, lower_32_bits(size)); -+ nv_wo32(obj, offset + 0x08, lower_32_bits(base)); -+ nv_wo32(obj, offset + 0x0c, upper_32_bits(size) << 24 | -+ upper_32_bits(base)); -+ nv_wo32(obj, offset + 0x10, 0x00000000); -+ nv_wo32(obj, offset + 0x14, 0x00000000); - +- - if (target == NV_DMA_TARGET_VIDMEM) { - flags0 = 0x00190000; - flags5 = 0x00010000; @@ -5227,7 +5367,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 } /* Context objects in the instance RAM have the following structure. -@@ -495,23 +607,86 @@ +@@ -495,23 +603,86 @@ entry[5]: set to 0? */ @@ -5316,7 +5456,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 return ret; } -@@ -541,35 +716,8 @@ +@@ -541,35 +712,8 @@ } dev_priv->engine.instmem.flush(dev); @@ -5354,7 +5494,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 return 0; } -@@ -585,7 +733,7 @@ +@@ -585,7 +729,7 @@ NV_DEBUG(dev, "ch%d\n", chan->id); /* Base amount for object storage (4KiB enough?) */ @@ -5363,7 +5503,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 base = 0; /* PGRAPH context */ -@@ -701,8 +849,8 @@ +@@ -701,8 +845,8 @@ if (dev_priv->card_type >= NV_50) { ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, 0, dev_priv->vm_end, @@ -5374,7 +5514,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 if (ret) { NV_ERROR(dev, "Error creating VRAM ctxdma: %d\n", ret); return ret; -@@ -710,8 +858,8 @@ +@@ -710,8 +854,8 @@ } else { ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, 0, dev_priv->fb_available_size, @@ -5385,7 +5525,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 if (ret) { NV_ERROR(dev, "Error creating VRAM ctxdma: %d\n", ret); return ret; -@@ -729,20 +877,13 @@ +@@ -729,20 +873,13 @@ if (dev_priv->card_type >= NV_50) { ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, 0, dev_priv->vm_end, @@ -5412,7 +5552,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 } if (ret) { -@@ -791,119 +932,69 @@ +@@ -791,119 +928,69 @@ struct nouveau_gpuobj *gpuobj; int i; @@ -5550,7 +5690,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 } ret = nouveau_ramht_insert(chan, init->handle, gr); -@@ -911,27 +1002,27 @@ +@@ -911,27 +998,27 @@ if (ret) { NV_ERROR(dev, "Error referencing object: %d (%d/0x%08x)\n", ret, init->channel, init->handle); @@ -5590,7 +5730,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 u32 diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_pm.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_pm.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_pm.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_pm.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_pm.c 2010-11-20 14:43:51.000000000 +0100 @@ -27,6 +27,10 @@ #include "nouveau_drv.h" #include "nouveau_pm.h" @@ -5690,8 +5830,20 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_pm.c linux-2.6.37-rc } diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_ramht.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_ramht.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.c 2010-11-17 02:20:11.000000000 +0100 -@@ -114,7 +114,7 @@ ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.c 2010-11-20 14:43:51.000000000 +0100 +@@ -104,17 +104,17 @@ + nouveau_gpuobj_ref(gpuobj, &entry->gpuobj); + + if (dev_priv->card_type < NV_40) { +- ctx = NV_RAMHT_CONTEXT_VALID | (gpuobj->cinst >> 4) | ++ ctx = NV_RAMHT_CONTEXT_VALID | (gpuobj->pinst >> 4) | + (chan->id << NV_RAMHT_CONTEXT_CHANNEL_SHIFT) | + (gpuobj->engine << NV_RAMHT_CONTEXT_ENGINE_SHIFT); + } else + if (dev_priv->card_type < NV_50) { +- ctx = (gpuobj->cinst >> 4) | ++ ctx = (gpuobj->pinst >> 4) | + (chan->id << NV40_RAMHT_CONTEXT_CHANNEL_SHIFT) | (gpuobj->engine << NV40_RAMHT_CONTEXT_ENGINE_SHIFT); } else { if (gpuobj->engine == NVOBJ_ENGINE_DISPLAY) { @@ -5825,7 +5977,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_ramht.c linux-2.6.37 } diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_ramht.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.h --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_ramht.h 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.h 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.h 2010-11-20 14:43:51.000000000 +0100 @@ -48,7 +48,7 @@ extern int nouveau_ramht_insert(struct nouveau_channel *, u32 handle, @@ -5837,7 +5989,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_ramht.h linux-2.6.37 diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_reg.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_reg.h --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_reg.h 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_reg.h 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_reg.h 2010-11-20 14:43:51.000000000 +0100 @@ -45,6 +45,11 @@ # define NV04_PFB_REF_CMD_REFRESH (1 << 0) #define NV04_PFB_PRE 0x001002d4 @@ -5961,7 +6113,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_reg.h linux-2.6.37-r #define NV50_PDISPLAY_CRTC_C(i, r) (4 + (i) * 0x540 + NV50_PDISPLAY_CRTC_##r) diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_sgdma.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_sgdma.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_sgdma.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_sgdma.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_sgdma.c 2010-11-20 14:43:51.000000000 +0100 @@ -120,8 +120,8 @@ dev_priv->engine.instmem.flush(nvbe->dev); @@ -6022,7 +6174,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_sgdma.c linux-2.6.37 obj_size = (aper_size >> NV_CTXDMA_PAGE_SHIFT) * 4; obj_size += 8; /* ctxdma header */ } else { -@@ -241,22 +240,6 @@ +@@ -241,42 +240,15 @@ return ret; } @@ -6043,12 +6195,12 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_sgdma.c linux-2.6.37 - } - if (dev_priv->card_type < NV_50) { - /* special case, allocated from global instmem heap so - * cinst is invalid, we use it on all channels though so -@@ -264,19 +247,14 @@ - */ - gpuobj->cinst = gpuobj->pinst; - +- /* special case, allocated from global instmem heap so +- * cinst is invalid, we use it on all channels though so +- * cinst needs to be valid, set it the same as pinst +- */ +- gpuobj->cinst = gpuobj->pinst; +- - /* Maybe use NV_DMA_TARGET_AGP for PCIE? NVIDIA do this, and - * confirmed to work on c51. Perhaps means NV_DMA_TARGET_PCIE - * on those cards? */ @@ -6069,7 +6221,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_sgdma.c linux-2.6.37 } else { for (i = 0; i < obj_size; i += 8) { nv_wo32(gpuobj, i + 0, 0x00000000); -@@ -297,15 +275,6 @@ +@@ -297,15 +269,6 @@ { struct drm_nouveau_private *dev_priv = dev->dev_private; @@ -6087,7 +6239,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_sgdma.c linux-2.6.37 diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_state.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_state.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_state.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_state.c 2010-11-20 14:43:51.000000000 +0100 @@ -53,10 +53,10 @@ engine->instmem.takedown = nv04_instmem_takedown; engine->instmem.suspend = nv04_instmem_suspend; @@ -6705,7 +6857,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 return false; diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_temp.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_temp.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_temp.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_temp.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_temp.c 2010-11-20 14:43:51.000000000 +0100 @@ -191,7 +191,7 @@ int offset = sensor->offset_mult / sensor->offset_div; int core_temp; @@ -6717,7 +6869,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_temp.c linux-2.6.37- core_temp = nv_rd32(dev, 0x0015b4) & 0x1fff; diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_util.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_util.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_util.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_util.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_util.c 2010-11-20 14:43:51.000000000 +0100 @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2010 Nouveau Project @@ -6790,7 +6942,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_util.c linux-2.6.37- +} diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_util.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_util.h --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_util.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_util.h 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_util.h 2010-11-20 14:43:51.000000000 +0100 @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2010 Nouveau Project @@ -6839,7 +6991,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_util.h linux-2.6.37- +#endif diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_crtc.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_crtc.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_crtc.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_crtc.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_crtc.c 2010-11-20 14:43:51.000000000 +0100 @@ -158,7 +158,6 @@ { struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); @@ -6906,7 +7058,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_crtc.c linux-2.6.37-rc2 diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_dfp.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_dfp.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_dfp.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_dfp.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_dfp.c 2010-11-20 14:43:51.000000000 +0100 @@ -185,14 +185,15 @@ struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); struct nouveau_connector *nv_connector = nouveau_encoder_connector_get(nv_encoder); @@ -6931,7 +7083,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_dfp.c linux-2.6.37-rc2. return true; diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_display.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_display.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_display.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_display.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_display.c 2010-11-20 14:43:51.000000000 +0100 @@ -32,6 +32,9 @@ #include "nouveau_encoder.h" #include "nouveau_connector.h" @@ -6980,7 +7132,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_display.c linux-2.6.37- +} diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_fbcon.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_fbcon.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_fbcon.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_fbcon.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_fbcon.c 2010-11-20 14:43:51.000000000 +0100 @@ -28,52 +28,39 @@ #include "nouveau_ramht.h" #include "nouveau_fbcon.h" @@ -7112,7 +7264,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_fbcon.c linux-2.6.37-rc static int diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_fifo.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_fifo.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_fifo.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_fifo.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_fifo.c 2010-11-20 14:43:51.000000000 +0100 @@ -28,6 +28,7 @@ #include "drm.h" #include "nouveau_drv.h" @@ -7387,7 +7539,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_fifo.c linux-2.6.37-rc2 +} diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_graph.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_graph.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_graph.c 2010-11-20 14:43:51.000000000 +0100 @@ -26,6 +26,11 @@ #include "drm.h" #include "nouveau_drm.h" @@ -7413,7 +7565,15 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc nv04_graph_context_switch(struct drm_device *dev) { struct drm_nouveau_private *dev_priv = dev->dev_private; -@@ -376,7 +381,7 @@ +@@ -368,7 +373,6 @@ + struct nouveau_channel *chan = NULL; + int chid; + +- pgraph->fifo_access(dev, false); + nouveau_wait_for_idle(dev); + + /* If previous context is valid, we need to save it */ +@@ -376,11 +380,9 @@ /* Load context for next channel */ chid = dev_priv->engine.fifo.channel_id(dev); @@ -7421,8 +7581,12 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc + chan = dev_priv->channels.ptr[chid]; if (chan) nv04_graph_load_context(chan); +- +- pgraph->fifo_access(dev, true); + } -@@ -412,10 +417,25 @@ + static uint32_t *ctx_reg(struct graph_state *ctx, uint32_t reg) +@@ -412,10 +414,25 @@ void nv04_graph_destroy_context(struct nouveau_channel *chan) { @@ -7448,7 +7612,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc } int nv04_graph_load_context(struct nouveau_channel *chan) -@@ -468,13 +488,19 @@ +@@ -468,13 +485,19 @@ { struct drm_nouveau_private *dev_priv = dev->dev_private; uint32_t tmp; @@ -7468,7 +7632,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc nv_wr32(dev, NV03_PGRAPH_INTR, 0xFFFFFFFF); nv_wr32(dev, NV03_PGRAPH_INTR_EN, 0xFFFFFFFF); -@@ -510,6 +536,8 @@ +@@ -510,6 +533,8 @@ void nv04_graph_takedown(struct drm_device *dev) { @@ -7477,7 +7641,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc } void -@@ -524,13 +552,27 @@ +@@ -524,13 +549,27 @@ } static int @@ -7507,7 +7671,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc /* * Software methods, why they are needed, and how they all work: * -@@ -606,12 +648,12 @@ +@@ -606,12 +645,12 @@ */ static void @@ -7523,7 +7687,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc tmp = nv_ri32(dev, instance); tmp &= ~mask; -@@ -623,11 +665,11 @@ +@@ -623,11 +662,11 @@ } static void @@ -7538,7 +7702,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc int class, op, valid = 1; ctx1 = nv_ri32(dev, instance); -@@ -672,13 +714,13 @@ +@@ -672,13 +711,13 @@ } static int @@ -7555,7 +7719,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc return 1; nv04_graph_set_ctx1(chan, 0x00038000, data << 15); /* changing operation changes set of objects needed for validation */ -@@ -687,8 +729,8 @@ +@@ -687,8 +726,8 @@ } static int @@ -7566,7 +7730,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc { uint32_t min = data & 0xffff, max; uint32_t w = data >> 16; -@@ -706,8 +748,8 @@ +@@ -706,8 +745,8 @@ } static int @@ -7577,7 +7741,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc { uint32_t min = data & 0xffff, max; uint32_t w = data >> 16; -@@ -725,8 +767,8 @@ +@@ -725,8 +764,8 @@ } static int @@ -7588,7 +7752,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc { switch (nv_ri32(chan->dev, data << 4) & 0xff) { case 0x30: -@@ -742,8 +784,8 @@ +@@ -742,8 +781,8 @@ } static int @@ -7599,7 +7763,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc { switch (nv_ri32(chan->dev, data << 4) & 0xff) { case 0x30: -@@ -763,8 +805,8 @@ +@@ -763,8 +802,8 @@ } static int @@ -7610,7 +7774,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc { switch (nv_ri32(chan->dev, data << 4) & 0xff) { case 0x30: -@@ -778,8 +820,8 @@ +@@ -778,8 +817,8 @@ } static int @@ -7621,7 +7785,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc { switch (nv_ri32(chan->dev, data << 4) & 0xff) { case 0x30: -@@ -793,8 +835,8 @@ +@@ -793,8 +832,8 @@ } static int @@ -7632,7 +7796,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc { switch (nv_ri32(chan->dev, data << 4) & 0xff) { case 0x30: -@@ -808,8 +850,8 @@ +@@ -808,8 +847,8 @@ } static int @@ -7643,7 +7807,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc { switch (nv_ri32(chan->dev, data << 4) & 0xff) { case 0x30: -@@ -823,8 +865,8 @@ +@@ -823,8 +862,8 @@ } static int @@ -7654,7 +7818,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc { switch (nv_ri32(chan->dev, data << 4) & 0xff) { case 0x30: -@@ -838,8 +880,8 @@ +@@ -838,8 +877,8 @@ } static int @@ -7665,7 +7829,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc { switch (nv_ri32(chan->dev, data << 4) & 0xff) { case 0x30: -@@ -853,8 +895,8 @@ +@@ -853,8 +892,8 @@ } static int @@ -7676,7 +7840,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc { switch (nv_ri32(chan->dev, data << 4) & 0xff) { case 0x30: -@@ -868,8 +910,8 @@ +@@ -868,8 +907,8 @@ } static int @@ -7687,7 +7851,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc { switch (nv_ri32(chan->dev, data << 4) & 0xff) { case 0x30: -@@ -883,8 +925,8 @@ +@@ -883,8 +922,8 @@ } static int @@ -7698,7 +7862,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc { switch (nv_ri32(chan->dev, data << 4) & 0xff) { case 0x30: -@@ -898,8 +940,8 @@ +@@ -898,8 +937,8 @@ } static int @@ -7709,7 +7873,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc { switch (nv_ri32(chan->dev, data << 4) & 0xff) { case 0x30: -@@ -913,8 +955,8 @@ +@@ -913,8 +952,8 @@ } static int @@ -7720,7 +7884,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc { switch (nv_ri32(chan->dev, data << 4) & 0xff) { case 0x30: -@@ -930,194 +972,346 @@ +@@ -930,194 +969,346 @@ return 1; } @@ -7783,11 +7947,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc - { 0x03e4, nv04_graph_mthd_set_operation }, - {}, -}; -+static int -+nv04_graph_register(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; - +- -static struct nouveau_pgraph_object_method nv04_graph_mthds_nv01_ifc[] = { - { 0x0184, nv04_graph_mthd_bind_chroma }, - { 0x0188, nv04_graph_mthd_bind_clip }, @@ -7798,9 +7958,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc - { 0x02fc, nv04_graph_mthd_set_operation }, - {}, -}; -+ if (dev_priv->engine.graph.registered) -+ return 0; - +- -static struct nouveau_pgraph_object_method nv04_graph_mthds_nv03_sifc[] = { - { 0x0184, nv04_graph_mthd_bind_chroma }, - { 0x0188, nv04_graph_mthd_bind_nv01_patt }, @@ -7810,8 +7968,10 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc - { 0x02fc, nv04_graph_mthd_set_operation }, - {}, -}; -+ /* dvd subpicture */ -+ NVOBJ_CLASS(dev, 0x0038, GR); ++static int ++nv04_graph_register(struct drm_device *dev) ++{ ++ struct drm_nouveau_private *dev_priv = dev->dev_private; -static struct nouveau_pgraph_object_method nv04_graph_mthds_nv04_sifc[] = { - { 0x0184, nv04_graph_mthd_bind_chroma }, @@ -7823,8 +7983,8 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc - { 0x02fc, nv04_graph_mthd_set_operation }, - {}, -}; -+ /* m2mf */ -+ NVOBJ_CLASS(dev, 0x0039, GR); ++ if (dev_priv->engine.graph.registered) ++ return 0; -static struct nouveau_pgraph_object_method nv04_graph_mthds_nv03_sifm[] = { - { 0x0188, nv04_graph_mthd_bind_nv01_patt }, @@ -7834,6 +7994,30 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc - { 0x0304, nv04_graph_mthd_set_operation }, - {}, -}; ++ /* dvd subpicture */ ++ NVOBJ_CLASS(dev, 0x0038, GR); + +-static struct nouveau_pgraph_object_method nv04_graph_mthds_nv04_sifm[] = { +- { 0x0188, nv04_graph_mthd_bind_nv04_patt }, +- { 0x018c, nv04_graph_mthd_bind_rop }, +- { 0x0190, nv04_graph_mthd_bind_beta1 }, +- { 0x0194, nv04_graph_mthd_bind_beta4 }, +- { 0x0198, nv04_graph_mthd_bind_surf2d_swzsurf }, +- { 0x0304, nv04_graph_mthd_set_operation }, +- {}, +-}; ++ /* m2mf */ ++ NVOBJ_CLASS(dev, 0x0039, GR); + +-static struct nouveau_pgraph_object_method nv04_graph_mthds_nv01_shape[] = { +- { 0x0184, nv04_graph_mthd_bind_clip }, +- { 0x0188, nv04_graph_mthd_bind_nv01_patt }, +- { 0x018c, nv04_graph_mthd_bind_rop }, +- { 0x0190, nv04_graph_mthd_bind_beta1 }, +- { 0x0194, nv04_graph_mthd_bind_surf_dst }, +- { 0x02fc, nv04_graph_mthd_set_operation }, +- {}, +-}; + /* nv03 gdirect */ + NVOBJ_CLASS(dev, 0x004b, GR); + NVOBJ_MTHD (dev, 0x004b, 0x0184, nv04_graph_mthd_bind_nv01_patt); @@ -8074,26 +8258,6 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc + NVOBJ_MTHD (dev, 0x506e, 0x0150, nv04_graph_mthd_set_ref); + NVOBJ_MTHD (dev, 0x506e, 0x0500, nv04_graph_mthd_page_flip); --static struct nouveau_pgraph_object_method nv04_graph_mthds_nv04_sifm[] = { -- { 0x0188, nv04_graph_mthd_bind_nv04_patt }, -- { 0x018c, nv04_graph_mthd_bind_rop }, -- { 0x0190, nv04_graph_mthd_bind_beta1 }, -- { 0x0194, nv04_graph_mthd_bind_beta4 }, -- { 0x0198, nv04_graph_mthd_bind_surf2d_swzsurf }, -- { 0x0304, nv04_graph_mthd_set_operation }, -- {}, --}; -- --static struct nouveau_pgraph_object_method nv04_graph_mthds_nv01_shape[] = { -- { 0x0184, nv04_graph_mthd_bind_clip }, -- { 0x0188, nv04_graph_mthd_bind_nv01_patt }, -- { 0x018c, nv04_graph_mthd_bind_rop }, -- { 0x0190, nv04_graph_mthd_bind_beta1 }, -- { 0x0194, nv04_graph_mthd_bind_surf_dst }, -- { 0x02fc, nv04_graph_mthd_set_operation }, -- {}, --}; -- -static struct nouveau_pgraph_object_method nv04_graph_mthds_nv04_shape[] = { - { 0x0184, nv04_graph_mthd_bind_clip }, - { 0x0188, nv04_graph_mthd_bind_nv04_patt }, @@ -8246,7 +8410,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc +} diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_instmem.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_instmem.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_instmem.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_instmem.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_instmem.c 2010-11-20 14:43:51.000000000 +0100 @@ -98,42 +98,66 @@ } @@ -8328,7 +8492,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_instmem.c linux-2.6.37- +} diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_pm.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_pm.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_pm.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_pm.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_pm.c 2010-11-20 14:43:51.000000000 +0100 @@ -76,6 +76,15 @@ reg += 4; @@ -8347,7 +8511,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_pm.c linux-2.6.37-rc2.n diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_fb.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv10_fb.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_fb.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv10_fb.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv10_fb.c 2010-11-20 14:43:51.000000000 +0100 @@ -3,23 +3,109 @@ #include "nouveau_drv.h" #include "nouveau_drm.h" @@ -8501,7 +8665,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_fb.c linux-2.6.37-rc2.n } diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_fifo.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv10_fifo.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_fifo.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv10_fifo.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv10_fifo.c 2010-11-20 14:43:51.000000000 +0100 @@ -73,17 +73,6 @@ return 0; } @@ -8539,7 +8703,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_fifo.c linux-2.6.37-rc2 } diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_graph.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv10_graph.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_graph.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv10_graph.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv10_graph.c 2010-11-20 14:43:51.000000000 +0100 @@ -26,6 +26,10 @@ #include "drm.h" #include "nouveau_drm.h" @@ -8551,7 +8715,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_graph.c linux-2.6.37-rc #define NV10_FIFO_NUMBER 32 -@@ -786,7 +790,7 @@ +@@ -786,15 +790,13 @@ return 0; } @@ -8560,7 +8724,15 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_graph.c linux-2.6.37-rc nv10_graph_context_switch(struct drm_device *dev) { struct drm_nouveau_private *dev_priv = dev->dev_private; -@@ -802,7 +806,7 @@ +- struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; + struct nouveau_channel *chan = NULL; + int chid; + +- pgraph->fifo_access(dev, false); + nouveau_wait_for_idle(dev); + + /* If previous context is valid, we need to save it */ +@@ -802,11 +804,9 @@ /* Load context for next channel */ chid = (nv_rd32(dev, NV04_PGRAPH_TRAPPED_ADDR) >> 20) & 0x1f; @@ -8568,8 +8740,12 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_graph.c linux-2.6.37-rc + chan = dev_priv->channels.ptr[chid]; if (chan && chan->pgraph_ctx) nv10_graph_load_context(chan); +- +- pgraph->fifo_access(dev, true); + } -@@ -833,7 +837,7 @@ + #define NV_WRITE_CTX(reg, val) do { \ +@@ -833,7 +833,7 @@ if (chid >= dev_priv->engine.fifo.channels) return NULL; @@ -8578,7 +8754,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_graph.c linux-2.6.37-rc } int nv10_graph_create_context(struct nouveau_channel *chan) -@@ -875,37 +879,54 @@ +@@ -875,37 +875,54 @@ void nv10_graph_destroy_context(struct nouveau_channel *chan) { @@ -8587,14 +8763,14 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_graph.c linux-2.6.37-rc + struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; struct graph_state *pgraph_ctx = chan->pgraph_ctx; + unsigned long flags; - ++ + spin_lock_irqsave(&dev_priv->context_switch_lock, flags); + pgraph->fifo_access(dev, false); + + /* Unload the context if it's the currently active one */ + if (pgraph->channel(dev) == chan) + pgraph->unload_context(dev); -+ + + /* Free the context resources */ kfree(pgraph_ctx); chan->pgraph_ctx = NULL; @@ -8643,7 +8819,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_graph.c linux-2.6.37-rc nv_wr32(dev, NV03_PGRAPH_INTR , 0xFFFFFFFF); nv_wr32(dev, NV03_PGRAPH_INTR_EN, 0xFFFFFFFF); -@@ -928,7 +949,7 @@ +@@ -928,7 +945,7 @@ /* Turn all the tiling regions off. */ for (i = 0; i < NV10_PFB_TILE__SIZE; i++) @@ -8652,7 +8828,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_graph.c linux-2.6.37-rc nv_wr32(dev, NV10_PGRAPH_CTX_SWITCH(0), 0x00000000); nv_wr32(dev, NV10_PGRAPH_CTX_SWITCH(1), 0x00000000); -@@ -948,11 +969,13 @@ +@@ -948,17 +965,17 @@ void nv10_graph_takedown(struct drm_device *dev) { @@ -8668,7 +8844,19 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_graph.c linux-2.6.37-rc { struct drm_device *dev = chan->dev; struct graph_state *ctx = chan->pgraph_ctx; -@@ -1031,8 +1054,8 @@ + struct pipe_state *pipe = &ctx->pipe_state; +- struct drm_nouveau_private *dev_priv = dev->dev_private; +- struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; + uint32_t pipe_0x0040[1], pipe_0x64c0[8], pipe_0x6a80[3], pipe_0x6ab0[3]; + uint32_t xfmode0, xfmode1; + int i; +@@ -1025,18 +1042,14 @@ + + nouveau_wait_for_idle(dev); + +- pgraph->fifo_access(dev, true); +- + return 0; } static int @@ -8678,17 +8866,19 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_graph.c linux-2.6.37-rc + u32 class, u32 mthd, u32 data) { struct drm_device *dev = chan->dev; - struct drm_nouveau_private *dev_priv = dev->dev_private; -@@ -1050,35 +1073,115 @@ - return 0; - } +- struct drm_nouveau_private *dev_priv = dev->dev_private; +- struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; --static struct nouveau_pgraph_object_method nv17_graph_celsius_mthds[] = { -- { 0x1638, nv17_graph_mthd_lma_window }, -- { 0x163c, nv17_graph_mthd_lma_window }, -- { 0x1640, nv17_graph_mthd_lma_window }, -- { 0x1644, nv17_graph_mthd_lma_window }, -- { 0x1658, nv17_graph_mthd_lma_enable }, + nouveau_wait_for_idle(dev); + +@@ -1045,40 +1058,118 @@ + nv_wr32(dev, 0x004006b0, + nv_rd32(dev, 0x004006b0) | 0x8 << 24); + +- pgraph->fifo_access(dev, true); ++ return 0; ++} ++ +static int +nv10_graph_register(struct drm_device *dev) +{ @@ -8734,11 +8924,17 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_graph.c linux-2.6.37-rc + /* nvsw */ + NVOBJ_CLASS(dev, 0x506e, SW); + NVOBJ_MTHD (dev, 0x506e, 0x0500, nv04_graph_mthd_page_flip); -+ + + dev_priv->engine.graph.registered = true; -+ return 0; -+} -+ + return 0; + } + +-static struct nouveau_pgraph_object_method nv17_graph_celsius_mthds[] = { +- { 0x1638, nv17_graph_mthd_lma_window }, +- { 0x163c, nv17_graph_mthd_lma_window }, +- { 0x1640, nv17_graph_mthd_lma_window }, +- { 0x1644, nv17_graph_mthd_lma_window }, +- { 0x1658, nv17_graph_mthd_lma_enable }, +struct nouveau_bitfield nv10_graph_intr[] = { + { NV_PGRAPH_INTR_NOTIFY, "NOTIFY" }, + { NV_PGRAPH_INTR_ERROR, "ERROR" }, @@ -8824,7 +9020,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_graph.c linux-2.6.37-rc +} diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv20_graph.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv20_graph.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv20_graph.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv20_graph.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv20_graph.c 2010-11-20 14:43:51.000000000 +0100 @@ -32,6 +32,10 @@ #define NV34_GRCTX_SIZE (18140) #define NV35_36_GRCTX_SIZE (22396) @@ -9157,7 +9353,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv20_graph.c linux-2.6.37-rc +} diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv30_fb.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv30_fb.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv30_fb.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv30_fb.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv30_fb.c 2010-11-20 14:43:51.000000000 +0100 @@ -29,6 +29,27 @@ #include "nouveau_drv.h" #include "nouveau_drm.h" @@ -9197,7 +9393,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv30_fb.c linux-2.6.37-rc2.n if (dev_priv->chipset == 0x30 || diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv40_fb.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv40_fb.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv40_fb.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv40_fb.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv40_fb.c 2010-11-20 14:43:51.000000000 +0100 @@ -4,26 +4,22 @@ #include "nouveau_drm.h" @@ -9244,7 +9440,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv40_fb.c linux-2.6.37-rc2.n } diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv40_fifo.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv40_fifo.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv40_fifo.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv40_fifo.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv40_fifo.c 2010-11-20 14:43:51.000000000 +0100 @@ -70,17 +70,6 @@ return 0; } @@ -9282,7 +9478,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv40_fifo.c linux-2.6.37-rc2 } diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv40_graph.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv40_graph.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv40_graph.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv40_graph.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv40_graph.c 2010-11-20 14:43:51.000000000 +0100 @@ -29,6 +29,9 @@ #include "nouveau_drv.h" #include "nouveau_grctx.h" @@ -9553,7 +9749,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv40_graph.c linux-2.6.37-rc +} diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_calc.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_calc.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_calc.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_calc.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_calc.c 2010-11-20 14:43:51.000000000 +0100 @@ -51,24 +51,28 @@ int *N, int *fN, int *M, int *P) { @@ -9591,7 +9787,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_calc.c linux-2.6.37-rc2 /* *N = floor(fb_div); */ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_crtc.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_crtc.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_crtc.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_crtc.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_crtc.c 2010-11-20 14:43:51.000000000 +0100 @@ -437,6 +437,7 @@ .cursor_move = nv50_crtc_cursor_move, .gamma_set = nv50_crtc_gamma_set, @@ -9636,7 +9832,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_crtc.c linux-2.6.37-rc2 diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_display.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_display.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_display.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_display.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_display.c 2010-11-20 14:43:51.000000000 +0100 @@ -33,6 +33,8 @@ #include "nouveau_ramht.h" #include "drm_crtc_helper.h" @@ -10219,7 +10415,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_display.c linux-2.6.37- - diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_display.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_display.h --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_display.h 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_display.h 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_display.h 2010-11-20 14:43:51.000000000 +0100 @@ -35,9 +35,7 @@ #include "nouveau_crtc.h" #include "nv50_evo.h" @@ -10232,7 +10428,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_display.h linux-2.6.37- int nv50_display_create(struct drm_device *dev); diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_evo.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_evo.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_evo.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_evo.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_evo.c 2010-11-20 14:43:51.000000000 +0100 @@ -0,0 +1,318 @@ +/* + * Copyright 2010 Red Hat Inc. @@ -10554,7 +10750,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_evo.c linux-2.6.37-rc2. +} diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_evo.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_evo.h --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_evo.h 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_evo.h 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_evo.h 2010-11-20 14:43:51.000000000 +0100 @@ -24,6 +24,15 @@ * */ @@ -10578,7 +10774,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_evo.h linux-2.6.37-rc2. +#endif diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_fb.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_fb.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_fb.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_fb.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_fb.c 2010-11-20 14:43:51.000000000 +0100 @@ -3,30 +3,75 @@ #include "nouveau_drv.h" #include "nouveau_drm.h" @@ -10707,7 +10903,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_fb.c linux-2.6.37-rc2.n "channel %d (0x%08x)\n", diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_fbcon.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_fbcon.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_fbcon.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_fbcon.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_fbcon.c 2010-11-20 14:43:51.000000000 +0100 @@ -4,26 +4,18 @@ #include "nouveau_ramht.h" #include "nouveau_fbcon.h" @@ -10841,7 +11037,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_fbcon.c linux-2.6.37-rc int diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_fifo.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_fifo.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_fifo.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_fifo.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_fifo.c 2010-11-20 14:43:51.000000000 +0100 @@ -44,7 +44,8 @@ /* We never schedule channel 0 or 127 */ @@ -10943,7 +11139,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_fifo.c linux-2.6.37-rc2 +} diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_gpio.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_gpio.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_gpio.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_gpio.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_gpio.c 2010-11-20 14:43:51.000000000 +0100 @@ -26,6 +26,28 @@ #include "nouveau_drv.h" #include "nouveau_hw.h" @@ -11182,7 +11378,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_gpio.c linux-2.6.37-rc2 +} diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_graph.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_graph.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_graph.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_graph.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_graph.c 2010-11-20 14:43:51.000000000 +0100 @@ -29,6 +29,11 @@ #include "nouveau_drv.h" #include "nouveau_ramht.h" @@ -11976,7 +12172,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_graph.c linux-2.6.37-rc +} diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_instmem.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_instmem.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_instmem.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_instmem.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_instmem.c 2010-11-20 14:43:51.000000000 +0100 @@ -131,10 +131,10 @@ } @@ -12258,7 +12454,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_instmem.c linux-2.6.37- void diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv84_crypt.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv84_crypt.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv84_crypt.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv84_crypt.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv84_crypt.c 2010-11-20 14:43:51.000000000 +0100 @@ -0,0 +1,137 @@ +/* + * Copyright 2010 Red Hat Inc. @@ -12399,7 +12595,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv84_crypt.c linux-2.6.37-rc +} diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nvc0_instmem.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nvc0_instmem.c --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nvc0_instmem.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nvc0_instmem.c 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nvc0_instmem.c 2010-11-20 14:43:51.000000000 +0100 @@ -26,67 +26,89 @@ #include "nouveau_drv.h" @@ -12574,7 +12770,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nvc0_instmem.c linux-2.6.37- void diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nvreg.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nvreg.h --- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nvreg.h 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nvreg.h 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nvreg.h 2010-11-20 14:43:51.000000000 +0100 @@ -153,7 +153,8 @@ #define NV_PCRTC_START 0x00600800 #define NV_PCRTC_CONFIG 0x00600804 @@ -12587,7 +12783,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nvreg.h linux-2.6.37-rc2.nou # define NV_PCRTC_CURSOR_CONFIG_DOUBLE_SCAN_ENABLE (1 << 4) diff -Naur linux-2.6.37-rc2/include/drm/nouveau_drm.h linux-2.6.37-rc2.nouveau/include/drm/nouveau_drm.h --- linux-2.6.37-rc2/include/drm/nouveau_drm.h 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/include/drm/nouveau_drm.h 2010-11-17 02:20:11.000000000 +0100 ++++ linux-2.6.37-rc2.nouveau/include/drm/nouveau_drm.h 2010-11-20 14:43:51.000000000 +0100 @@ -71,15 +71,14 @@ #define NOUVEAU_GETPARAM_PCI_VENDOR 3 #define NOUVEAU_GETPARAM_PCI_DEVICE 4 From 5f7ab9134f9e21acaa97da26a8b02a01e3f9636e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 21 Nov 2010 20:57:03 +0100 Subject: [PATCH 466/850] README: update README Signed-off-by: Stephan Raue --- README | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README b/README index 613a6e368a..e4ea56c5ea 100644 --- a/README +++ b/README @@ -2,13 +2,13 @@ http://www.OpenELEC.tv The Open Embedded Linux Enterainment Center – OpenELEC.tv -OpenELEC runs XBMC, a complete media center solution (xbmc.org). +OpenELEC.tv runs XBMC, a complete media center solution (xbmc.org). The base system has been designed and built from the ground up to be as efficient as possible – consuming only a tiny footprint, cutting edge hardware support and a set-top box experience. Source code: -- http://sourceforge.net/projects/openelec/ +- https://github.com/OpenELEC/OpenELEC.tv Installation: - Please read INSTALL for instructions how to install. From a10aa9e38a2ce95fd0cf74b6bb1bc4471fcfa9a7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 21 Nov 2010 23:00:38 +0100 Subject: [PATCH 467/850] config/release: add MD5 check to 'create_installstick' Signed-off-by: Stephan Raue --- config/release/create_installstick | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/config/release/create_installstick b/config/release/create_installstick index faebd19fd6..2d44276291 100755 --- a/config/release/create_installstick +++ b/config/release/create_installstick @@ -56,6 +56,25 @@ echo "# Please read the instructions and use very carefully.. #" echo "# #" echo "#########################################################" +# check MD5 sums + echo "checking MD5 sum..." + md5sum -c target/KERNEL.md5 + MD5_ERROR=$? + md5sum -c target/SYSTEM.md5 + MD5_ERROR=$? + +if [ $MD5_ERROR = 1 ]; then + echo "#########################################################" + echo "# #" + echo "# OpenELEC.tv failed md5 check - Installation will quit #" + echo "# #" + echo "# Your original download was probably corrupt. #" + echo "# Please visit www.openelec.tv and get another copy #" + echo "# #" + echo "#########################################################" + exit 1 +fi + # (TODO) umount anything umount $PART From ff074726b8e29a1cb86865803411d29170562ac3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 22 Nov 2010 00:00:35 +0100 Subject: [PATCH 468/850] drivers: rename to 'linux-drivers', add metafile support Signed-off-by: Stephan Raue --- packages/drivers/install | 11 ---------- packages/linux-drivers/meta | 20 +++++++++++++++++++ .../rtl8192se/build | 0 .../rtl8192se/install | 0 .../{drivers => linux-drivers}/rtl8192se/meta | 0 .../rtl8192se/need_unpack | 0 ...18.1025.2010-add_missing_include-0.1.patch | 0 7 files changed, 20 insertions(+), 11 deletions(-) delete mode 100755 packages/drivers/install create mode 100644 packages/linux-drivers/meta rename packages/{drivers => linux-drivers}/rtl8192se/build (100%) rename packages/{drivers => linux-drivers}/rtl8192se/install (100%) rename packages/{drivers => linux-drivers}/rtl8192se/meta (100%) rename packages/{drivers => linux-drivers}/rtl8192se/need_unpack (100%) rename packages/{drivers => linux-drivers}/rtl8192se/patches/rtl8192se-0018.1025.2010-add_missing_include-0.1.patch (100%) diff --git a/packages/drivers/install b/packages/drivers/install deleted file mode 100755 index aa6fa92f87..0000000000 --- a/packages/drivers/install +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -. config/options $1 - -for drivers in "$ADDITIONAL_DRIVERS"; do - - [ "$drivers" = rtl8192se ] && $SCRIPTS/install rtl8192se - -done - -exit 0 diff --git a/packages/linux-drivers/meta b/packages/linux-drivers/meta new file mode 100644 index 0000000000..3a451ef5c4 --- /dev/null +++ b/packages/linux-drivers/meta @@ -0,0 +1,20 @@ +PKG_NAME="linux-drivers" +PKG_VERSION="" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.openelec.tv" +PKG_URL="" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="linux-drivers" +PKG_SHORTDESC="linux-drivers: Meta package to install additional drivers" +PKG_LONGDESC="linux-drivers is a Meta package to install additional drivers" +PKG_IS_ADDON="no" + +for drivers in "$ADDITIONAL_DRIVERS"; do + + [ "$drivers" = rtl8192se ] && PKG_DEPENDS="$PKG_DEPENDS rtl8192se" + +done diff --git a/packages/drivers/rtl8192se/build b/packages/linux-drivers/rtl8192se/build similarity index 100% rename from packages/drivers/rtl8192se/build rename to packages/linux-drivers/rtl8192se/build diff --git a/packages/drivers/rtl8192se/install b/packages/linux-drivers/rtl8192se/install similarity index 100% rename from packages/drivers/rtl8192se/install rename to packages/linux-drivers/rtl8192se/install diff --git a/packages/drivers/rtl8192se/meta b/packages/linux-drivers/rtl8192se/meta similarity index 100% rename from packages/drivers/rtl8192se/meta rename to packages/linux-drivers/rtl8192se/meta diff --git a/packages/drivers/rtl8192se/need_unpack b/packages/linux-drivers/rtl8192se/need_unpack similarity index 100% rename from packages/drivers/rtl8192se/need_unpack rename to packages/linux-drivers/rtl8192se/need_unpack diff --git a/packages/drivers/rtl8192se/patches/rtl8192se-0018.1025.2010-add_missing_include-0.1.patch b/packages/linux-drivers/rtl8192se/patches/rtl8192se-0018.1025.2010-add_missing_include-0.1.patch similarity index 100% rename from packages/drivers/rtl8192se/patches/rtl8192se-0018.1025.2010-add_missing_include-0.1.patch rename to packages/linux-drivers/rtl8192se/patches/rtl8192se-0018.1025.2010-add_missing_include-0.1.patch From 95d70ad6846704701ba6af69a0664ab0043e0e87 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 22 Nov 2010 06:19:15 +0100 Subject: [PATCH 469/850] new package: add initial package 'bcm_sta' Signed-off-by: Stephan Raue --- packages/linux-drivers/bcm_sta/build | 10 +++++++++ packages/linux-drivers/bcm_sta/install | 18 +++++++++++++++ packages/linux-drivers/bcm_sta/meta | 17 ++++++++++++++ packages/linux-drivers/bcm_sta/need_unpack | 12 ++++++++++ ...sta-5.60.246.6-010_remove_sysioc_sem.patch | 22 +++++++++++++++++++ projects/ATV/linux/linux.i386.conf | 21 ++++++++---------- projects/ATV/options | 4 +++- projects/ION/options | 1 + projects/generic/options | 1 + projects/intel/options | 1 + 10 files changed, 94 insertions(+), 13 deletions(-) create mode 100755 packages/linux-drivers/bcm_sta/build create mode 100755 packages/linux-drivers/bcm_sta/install create mode 100644 packages/linux-drivers/bcm_sta/meta create mode 100755 packages/linux-drivers/bcm_sta/need_unpack create mode 100644 packages/linux-drivers/bcm_sta/patches/bcm_sta-5.60.246.6-010_remove_sysioc_sem.patch diff --git a/packages/linux-drivers/bcm_sta/build b/packages/linux-drivers/bcm_sta/build new file mode 100755 index 0000000000..8f3aebb8ad --- /dev/null +++ b/packages/linux-drivers/bcm_sta/build @@ -0,0 +1,10 @@ +#!/bin/sh + +. config/options $1 + +cd $PKG_BUILD + +[ $TARGET_ARCH = i386 ] && cd x86-32 +[ $TARGET_ARCH = x86_64 ] && cd x86-64 + +KBUILD_NOPEDANTIC=1 make V=1 CC=$CC -C $(kernel_path) M=`pwd` diff --git a/packages/linux-drivers/bcm_sta/install b/packages/linux-drivers/bcm_sta/install new file mode 100755 index 0000000000..0cd12e1763 --- /dev/null +++ b/packages/linux-drivers/bcm_sta/install @@ -0,0 +1,18 @@ +#!/bin/sh + +. config/options $1 + +VER=`ls $BUILD/linux*/modules/lib/modules` + +mkdir -p $INSTALL/lib/modules/$VER/bcm_sta +[ $TARGET_ARCH = i386 ] && cp $PKG_BUILD/x86-32/wl.ko $INSTALL/lib/modules/$VER/bcm_sta +[ $TARGET_ARCH = x86_64 ] && cp $PKG_BUILD/x86-64/wl.ko $INSTALL/lib/modules/$VER/bcm_sta + + for MOD in `find $INSTALL/lib/modules/$VER/bcm_sta -name *.ko`; do + $STRIP --strip-debug $MOD + done + + $ROOT/$TOOLCHAIN/sbin/depmod -b $INSTALL $VER > /dev/null + for i in `ls $INSTALL/lib/modules/*/modules.* | grep -v modules.dep | grep -v modules.alias | grep -v modules.symbols`; do + rm -f $i + done diff --git a/packages/linux-drivers/bcm_sta/meta b/packages/linux-drivers/bcm_sta/meta new file mode 100644 index 0000000000..2a95949c1d --- /dev/null +++ b/packages/linux-drivers/bcm_sta/meta @@ -0,0 +1,17 @@ +PKG_NAME="bcm_sta" +PKG_VERSION="5.60.246.6" +PKG_REV="1" +PKG_ARCH="i386 x86_64" +PKG_LICENSE="nonfree" +PKG_SITE="http://www.broadcom.com/" +PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain linux busybox-hosttools" +PKG_PRIORITY="optional" +PKG_SECTION="driver" +PKG_SHORTDESC="bcm_sta: Broadcom's BCM4311-, BCM4312-, BCM4313-, BCM4321-, BCM4322-, BCM43224-, and BCM43225-based WLAN driver" +PKG_LONGDESC="These packages contain Broadcom's IEEE 802.11a/b/g/n hybrid Linux® device driver for use with Broadcom's BCM4311-, BCM4312-, BCM4313-, BCM4321-, BCM4322-, BCM43224-, and BCM43225-based hardware. There are different tars for 32-bit and 64-bit x86 CPU architectures. Make sure that you download the appropriate tar because the hybrid binary file must be of the appropriate architecture type. The hybrid binary file is agnostic to the specific version of the Linux kernel because it is designed to perform all interactions with the operating system through operating-system-specific files and an operating system abstraction layer file. All Linux operating-system-specific code is provided in source form, making it possible to retarget to different kernel versions and fix operating system related issues." +PKG_IS_ADDON="no" + +# Downloadlocation: +# http://www.broadcom.com/support/802.11/linux_sta.php \ No newline at end of file diff --git a/packages/linux-drivers/bcm_sta/need_unpack b/packages/linux-drivers/bcm_sta/need_unpack new file mode 100755 index 0000000000..fcea9b102c --- /dev/null +++ b/packages/linux-drivers/bcm_sta/need_unpack @@ -0,0 +1,12 @@ +#!/bin/sh + +. config/options $1 + +STAMP=$STAMPS/$1/unpack + +test $PKG_DIR/config/linux.$TARGET_ARCH.conf -nt $STAMP -o \ + $PROJECT_DIR/$PROJECT/linux/linux.$TARGET_ARCH.conf -nt $STAMP -o \ + $PKG_DIR/url -nt $STAMP -o \ + $PKG_DIR/meta -nt $STAMP && rm -f $STAMP + +exit 0 diff --git a/packages/linux-drivers/bcm_sta/patches/bcm_sta-5.60.246.6-010_remove_sysioc_sem.patch b/packages/linux-drivers/bcm_sta/patches/bcm_sta-5.60.246.6-010_remove_sysioc_sem.patch new file mode 100644 index 0000000000..fb7021e7a3 --- /dev/null +++ b/packages/linux-drivers/bcm_sta/patches/bcm_sta-5.60.246.6-010_remove_sysioc_sem.patch @@ -0,0 +1,22 @@ +diff -Naur bcm_sta-5.60.246.6/x86-32/src/wl/sys/wl_iw.h bcm_sta-5.60.246.6.patch/x86-32/src/wl/sys/wl_iw.h +--- bcm_sta-5.60.246.6/x86-32/src/wl/sys/wl_iw.h 2010-11-22 03:01:28.267226695 +0100 ++++ bcm_sta-5.60.246.6.patch/x86-32/src/wl/sys/wl_iw.h 2010-11-22 03:00:28.308506905 +0100 +@@ -62,6 +62,7 @@ + struct timer_list *timer; + struct net_device *dev; + long sysioc_pid; ++ struct semaphore sysioc_sem; + struct completion sysioc_exited; + }; + +diff -Naur bcm_sta-5.60.246.6/x86-64/src/wl/sys/wl_iw.h bcm_sta-5.60.246.6.patch/x86-64/src/wl/sys/wl_iw.h +--- bcm_sta-5.60.246.6/x86-64/src/wl/sys/wl_iw.h 2010-11-22 03:01:49.840485699 +0100 ++++ bcm_sta-5.60.246.6.patch/x86-64/src/wl/sys/wl_iw.h 2010-11-22 03:00:28.322507073 +0100 +@@ -62,6 +62,7 @@ + struct timer_list *timer; + struct net_device *dev; + long sysioc_pid; ++ struct semaphore sysioc_sem; + struct completion sysioc_exited; + }; + diff --git a/projects/ATV/linux/linux.i386.conf b/projects/ATV/linux/linux.i386.conf index 50e5971961..87c03aef29 100644 --- a/projects/ATV/linux/linux.i386.conf +++ b/projects/ATV/linux/linux.i386.conf @@ -100,8 +100,6 @@ CONFIG_GENERIC_PENDING_IRQ=y # RCU Subsystem # CONFIG_TREE_PREEMPT_RCU=y -# CONFIG_TINY_RCU is not set -# CONFIG_TINY_PREEMPT_RCU is not set CONFIG_PREEMPT_RCU=y # CONFIG_RCU_TRACE is not set CONFIG_RCU_FANOUT=32 @@ -617,8 +615,10 @@ CONFIG_RPS=y # CONFIG_BT is not set # CONFIG_AF_RXRPC is not set CONFIG_WIRELESS=y +CONFIG_WIRELESS_EXT=y CONFIG_WEXT_CORE=y CONFIG_WEXT_PROC=y +CONFIG_WEXT_PRIV=y CONFIG_CFG80211=y # CONFIG_NL80211_TESTMODE is not set # CONFIG_CFG80211_DEVELOPER_WARNINGS is not set @@ -912,7 +912,7 @@ CONFIG_WLAN=y # CONFIG_ATMEL is not set # CONFIG_AT76C50X_USB is not set # CONFIG_PRISM54 is not set -# CONFIG_USB_ZD1201 is not set +CONFIG_USB_ZD1201=m # CONFIG_USB_NET_RNDIS_WLAN is not set # CONFIG_RTL8180 is not set # CONFIG_RTL8187 is not set @@ -920,14 +920,11 @@ CONFIG_WLAN=y # CONFIG_MAC80211_HWSIM is not set # CONFIG_MWL8K is not set # CONFIG_ATH_COMMON is not set -CONFIG_B43=m -CONFIG_B43_PCI_AUTOSELECT=y -CONFIG_B43_PCICORE_AUTOSELECT=y -CONFIG_B43_PIO=y -CONFIG_B43_PHY_LP=y -CONFIG_B43_LEDS=y -# CONFIG_B43_DEBUG is not set +# CONFIG_B43 is not set # CONFIG_B43LEGACY is not set +# CONFIG_B43LEGACY_DMA_AND_PIO_MODE is not set +# CONFIG_B43LEGACY_DMA_MODE is not set +# CONFIG_B43LEGACY_PIO_MODE is not set # CONFIG_HOSTAP is not set # CONFIG_IPW2100 is not set # CONFIG_IPW2200 is not set @@ -1220,10 +1217,9 @@ CONFIG_SSB_POSSIBLE=y # CONFIG_SSB=m CONFIG_SSB_SPROM=y -CONFIG_SSB_BLOCKIO=y CONFIG_SSB_PCIHOST_POSSIBLE=y CONFIG_SSB_PCIHOST=y -CONFIG_SSB_B43_PCI_BRIDGE=y +# CONFIG_SSB_B43_PCI_BRIDGE is not set # CONFIG_SSB_SILENT is not set # CONFIG_SSB_DEBUG is not set CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y @@ -1811,6 +1807,7 @@ CONFIG_STAGING=y # CONFIG_PRISM2_USB is not set # CONFIG_ECHO is not set # CONFIG_BRCM80211 is not set +# CONFIG_BRCM80211_PCI is not set # CONFIG_RT2860 is not set # CONFIG_RT2870 is not set # CONFIG_COMEDI is not set diff --git a/projects/ATV/options b/projects/ATV/options index 43acdaf58e..f28aeb12c9 100644 --- a/projects/ATV/options +++ b/projects/ATV/options @@ -80,10 +80,12 @@ FAAC_SUPPORT="yes" # additional drivers to install: +# bcm_sta: Broadcom STA WLAN Driver # rtl8192se: Realtek RTL8192SE WLAN driver +# bcm_sta: Broadcom STA WLAN Driver # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="rtl8192se" - ADDITIONAL_DRIVERS="" + ADDITIONAL_DRIVERS="bcm_sta" # build with network support (yes / no) NETWORK="yes" diff --git a/projects/ION/options b/projects/ION/options index 7b47a7b5cb..4d63090531 100644 --- a/projects/ION/options +++ b/projects/ION/options @@ -80,6 +80,7 @@ FAAC_SUPPORT="yes" # additional drivers to install: +# bcm_sta: Broadcom STA WLAN Driver # rtl8192se: Realtek RTL8192SE WLAN driver # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="rtl8192se" diff --git a/projects/generic/options b/projects/generic/options index 11ef559f6b..5a2e708bfd 100644 --- a/projects/generic/options +++ b/projects/generic/options @@ -80,6 +80,7 @@ FAAC_SUPPORT="yes" # additional drivers to install: +# bcm_sta: Broadcom STA WLAN Driver # rtl8192se: Realtek RTL8192SE WLAN driver # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="rtl8192se" diff --git a/projects/intel/options b/projects/intel/options index de23f43cb6..832f54e17d 100644 --- a/projects/intel/options +++ b/projects/intel/options @@ -80,6 +80,7 @@ FAAC_SUPPORT="yes" # additional drivers to install: +# bcm_sta: Broadcom STA WLAN Driver # rtl8192se: Realtek RTL8192SE WLAN driver # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="rtl8192se" From 834a17217ff411ff4338ee3a20ad617e54a3c364 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 22 Nov 2010 06:23:20 +0100 Subject: [PATCH 470/850] new package: add initial package 'tvheadend' Signed-off-by: Stephan Raue --- packages/multimedia/tvheadend/build | 12 +++++++ .../multimedia/tvheadend/init.d/55_tvheadend | 31 +++++++++++++++++++ packages/multimedia/tvheadend/install | 6 ++++ packages/multimedia/tvheadend/meta | 14 +++++++++ projects/ATV/options | 6 ++++ projects/ION/options | 6 ++++ projects/generic/options | 3 ++ projects/intel/options | 3 ++ scripts/image | 1 + 9 files changed, 82 insertions(+) create mode 100755 packages/multimedia/tvheadend/build create mode 100755 packages/multimedia/tvheadend/init.d/55_tvheadend create mode 100755 packages/multimedia/tvheadend/install create mode 100644 packages/multimedia/tvheadend/meta diff --git a/packages/multimedia/tvheadend/build b/packages/multimedia/tvheadend/build new file mode 100755 index 0000000000..c3b94196c5 --- /dev/null +++ b/packages/multimedia/tvheadend/build @@ -0,0 +1,12 @@ +#!/bin/sh + +. config/options $1 + +cd $PKG_BUILD +./configure --prefix=/usr \ + --arch=$TARGET_ARCH \ + --cpu=$TARGET_CPU \ + --cc=$TARGET_CC \ + --release + +make diff --git a/packages/multimedia/tvheadend/init.d/55_tvheadend b/packages/multimedia/tvheadend/init.d/55_tvheadend new file mode 100755 index 0000000000..06c3b0456f --- /dev/null +++ b/packages/multimedia/tvheadend/init.d/55_tvheadend @@ -0,0 +1,31 @@ +#!/bin/sh + +################################################################################ +# Copyright (C) 2009-2010 OpenELEC.tv +# http://www.openelec.tv +# +# This Program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This Program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +# start tvheadend tv server +# +# runlevels: openelec, textmode + +. /etc/profile + + progress "starting TV Server" + + tvheadend -C -s -f -u root -g root diff --git a/packages/multimedia/tvheadend/install b/packages/multimedia/tvheadend/install new file mode 100755 index 0000000000..fad8da7b9b --- /dev/null +++ b/packages/multimedia/tvheadend/install @@ -0,0 +1,6 @@ +#!/bin/sh + +. config/options $1 + +mkdir -p $INSTALL/usr/bin + cp -P $PKG_BUILD/build.Linux/tvheadend $INSTALL/usr/bin diff --git a/packages/multimedia/tvheadend/meta b/packages/multimedia/tvheadend/meta new file mode 100644 index 0000000000..c64f26ddda --- /dev/null +++ b/packages/multimedia/tvheadend/meta @@ -0,0 +1,14 @@ +PKG_NAME="tvheadend" +PKG_VERSION="5650" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.lonelycoder.com/hts/tvheadend_overview.html" +PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="avahi" +PKG_BUILD_DEPENDS="toolchain avahi" +PKG_PRIORITY="optional" +PKG_SECTION="multimedia" +PKG_SHORTDESC="tvheadend: a TV streaming server for Linux supporting DVB-S, DVB-S2, DVB-C, DVB-T, ATSC, IPTV, and Analog video (V4L) as input sources." +PKG_LONGDESC="Tvheadend is a TV streaming server for Linux supporting DVB-S, DVB-S2, DVB-C, DVB-T, ATSC, IPTV, and Analog video (V4L) as input sources. It also comes with a powerful and easy to use web interface both used for configuration and day-to-day operations, such as searching the EPG and scheduling recordings. Even so, the most notable feature of Tvheadend is how easy it is to set up: Install it, navigate to the web user interface, drill into the TV adapters tab, select your current location and Tvheadend will start scanning channels and present them to you in just a few minutes" +PKG_IS_ADDON="no" diff --git a/projects/ATV/options b/projects/ATV/options index f28aeb12c9..60fe8965ba 100644 --- a/projects/ATV/options +++ b/projects/ATV/options @@ -53,6 +53,9 @@ # Mediacenter to use (xbmc / no) MEDIACENTER="xbmc-dharma" +# build and install Tvheadend TV server (yes / no) + TVHEADEND="no" + # Skins to install (Confluence) SKINS="Confluence" @@ -79,6 +82,9 @@ # FAAC is an MPEG-4 and MPEG-2 AAC encoder (yes / no) FAAC_SUPPORT="yes" +# build and install Tvheadend TV server (yes / no) + TVHEADEND="no" + # additional drivers to install: # bcm_sta: Broadcom STA WLAN Driver # rtl8192se: Realtek RTL8192SE WLAN driver diff --git a/projects/ION/options b/projects/ION/options index 4d63090531..387acfeecc 100644 --- a/projects/ION/options +++ b/projects/ION/options @@ -53,6 +53,9 @@ # Mediacenter to use (xbmc / no) MEDIACENTER="xbmc-dharma" +# build and install Tvheadend TV server (yes / no) + TVHEADEND="yes" + # Skins to install (Confluence) SKINS="Confluence" @@ -79,6 +82,9 @@ # FAAC is an MPEG-4 and MPEG-2 AAC encoder (yes / no) FAAC_SUPPORT="yes" +# build and install Tvheadend TV server (yes / no) + TVHEADEND="no" + # additional drivers to install: # bcm_sta: Broadcom STA WLAN Driver # rtl8192se: Realtek RTL8192SE WLAN driver diff --git a/projects/generic/options b/projects/generic/options index 5a2e708bfd..2c0b268c0a 100644 --- a/projects/generic/options +++ b/projects/generic/options @@ -79,6 +79,9 @@ # FAAC is an MPEG-4 and MPEG-2 AAC encoder (yes / no) FAAC_SUPPORT="yes" +# build and install Tvheadend TV server (yes / no) + TVHEADEND="yes" + # additional drivers to install: # bcm_sta: Broadcom STA WLAN Driver # rtl8192se: Realtek RTL8192SE WLAN driver diff --git a/projects/intel/options b/projects/intel/options index 832f54e17d..9446bc5f01 100644 --- a/projects/intel/options +++ b/projects/intel/options @@ -79,6 +79,9 @@ # FAAC is an MPEG-4 and MPEG-2 AAC encoder (yes / no) FAAC_SUPPORT="yes" +# build and install Tvheadend TV server (yes / no) + TVHEADEND="yes" + # additional drivers to install: # bcm_sta: Broadcom STA WLAN Driver # rtl8192se: Realtek RTL8192SE WLAN driver diff --git a/scripts/image b/scripts/image index e3986992fe..ac242fb063 100755 --- a/scripts/image +++ b/scripts/image @@ -69,6 +69,7 @@ mkdir -p $INSTALL # Multimedia support [ ! "$MEDIACENTER" = no ] && $SCRIPTS/install mediacenter + [ "$TVHEADEND" = yes ] && $SCRIPTS/install tvheadend # Automounter support [ "$UDISKS" = yes ] && $SCRIPTS/install udisks From 625afd68c77cb9bd0cc1767fcca3e7d86f8e19b9 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 22 Nov 2010 06:36:42 +0100 Subject: [PATCH 471/850] tvheadend: enable on ION builds too Signed-off-by: Stephan Raue --- projects/ION/options | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/ION/options b/projects/ION/options index 387acfeecc..d35e3f1215 100644 --- a/projects/ION/options +++ b/projects/ION/options @@ -83,7 +83,7 @@ FAAC_SUPPORT="yes" # build and install Tvheadend TV server (yes / no) - TVHEADEND="no" + TVHEADEND="yes" # additional drivers to install: # bcm_sta: Broadcom STA WLAN Driver From 393a43bb76b338f4d0296c73581d336b685ed519 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 22 Nov 2010 16:10:21 +0100 Subject: [PATCH 472/850] linux-drivers: fix meta file Signed-off-by: Stephan Raue --- packages/linux-drivers/meta | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/linux-drivers/meta b/packages/linux-drivers/meta index 3a451ef5c4..60769b78cc 100644 --- a/packages/linux-drivers/meta +++ b/packages/linux-drivers/meta @@ -14,7 +14,12 @@ PKG_LONGDESC="linux-drivers is a Meta package to install additional drivers" PKG_IS_ADDON="no" for drivers in "$ADDITIONAL_DRIVERS"; do + case $drivers in - [ "$drivers" = rtl8192se ] && PKG_DEPENDS="$PKG_DEPENDS rtl8192se" + rtl8192se) PKG_DEPENDS="$PKG_DEPENDS rtl8192se" + ;; + broadcom) PKG_DEPENDS="$PKG_DEPENDS bcm_sta" + ;; + esac done From 85f4ffc9b5ee7854f9938ee501f1b2577a4b35b3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 22 Nov 2010 16:10:35 +0100 Subject: [PATCH 473/850] linux-drivers: fix meta file Signed-off-by: Stephan Raue --- packages/linux-firmware/meta | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/packages/linux-firmware/meta b/packages/linux-firmware/meta index 4bf93107e9..81ae92c72f 100644 --- a/packages/linux-firmware/meta +++ b/packages/linux-firmware/meta @@ -13,16 +13,25 @@ PKG_SHORTDESC="linux-firmware: Meta package to install firmware drivers" PKG_LONGDESC="linux-firmware is a Meta package to install firmware drivers" PKG_IS_ADDON="no" -for firmware in $FIRMWARE; do - - [ "$firmware" = ipw2100 ] && PKG_DEPENDS="$PKG_DEPENDS ipw2100-fw" - [ "$firmware" = ipw2200 ] && PKG_DEPENDS="$PKG_DEPENDS ipw2200-fw" - [ "$firmware" = iwl1000 ] && PKG_DEPENDS="$PKG_DEPENDS iwlwifi-1000-ucode" - [ "$firmware" = iwl3945 ] && PKG_DEPENDS="$PKG_DEPENDS iwlwifi-3945-ucode" - [ "$firmware" = iwl4965 ] && PKG_DEPENDS="$PKG_DEPENDS iwlwifi-4965-ucode" - [ "$firmware" = iwl5000 ] && PKG_DEPENDS="$PKG_DEPENDS iwlwifi-5000-ucode" - [ "$firmware" = iwl5150 ] && PKG_DEPENDS="$PKG_DEPENDS iwlwifi-5150-ucode" - [ "$firmware" = iwl6000 ] && PKG_DEPENDS="$PKG_DEPENDS iwlwifi-6000-ucode" - [ "$firmware" = iwl6050 ] && PKG_DEPENDS="$PKG_DEPENDS iwlwifi-6050-ucode" - +for firmware in "$FIRMWARE"; do + case $firmware in + ipw2100) PKG_DEPENDS="$PKG_DEPENDS ipw2100-fw" + ;; + ipw2200) PKG_DEPENDS="$PKG_DEPENDS ipw2200-fw" + ;; + iwl1000) PKG_DEPENDS="$PKG_DEPENDS iwlwifi-1000-ucode" + ;; + iwl3945) PKG_DEPENDS="$PKG_DEPENDS iwlwifi-3945-ucode" + ;; + iwl4965) PKG_DEPENDS="$PKG_DEPENDS iwlwifi-4965-ucode" + ;; + iwl5000) PKG_DEPENDS="$PKG_DEPENDS iwlwifi-5000-ucode" + ;; + iwl5150) PKG_DEPENDS="$PKG_DEPENDS iwlwifi-5150-ucode" + ;; + iwl6000) PKG_DEPENDS="$PKG_DEPENDS iwlwifi-6000-ucode" + ;; + iwl6050) PKG_DEPENDS="$PKG_DEPENDS iwlwifi-6050-ucode" + ;; + esac done From f322568c609ffaf6939a654bf2ae8a75a37ef0fb Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 22 Nov 2010 16:11:33 +0100 Subject: [PATCH 474/850] rtl8192se: cleanup Signed-off-by: Stephan Raue --- packages/linux-drivers/rtl8192se/install | 2 -- packages/linux-drivers/rtl8192se/meta | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/linux-drivers/rtl8192se/install b/packages/linux-drivers/rtl8192se/install index 25c1ba8ccf..120460e5e9 100755 --- a/packages/linux-drivers/rtl8192se/install +++ b/packages/linux-drivers/rtl8192se/install @@ -2,8 +2,6 @@ . config/options $1 -$SCRIPTS/build busybox-hosttools - VER=`ls $BUILD/linux*/modules/lib/modules` mkdir -p $INSTALL/lib/modules/$VER/rtl8192se diff --git a/packages/linux-drivers/rtl8192se/meta b/packages/linux-drivers/rtl8192se/meta index 44f13470db..9b186582ca 100644 --- a/packages/linux-drivers/rtl8192se/meta +++ b/packages/linux-drivers/rtl8192se/meta @@ -6,7 +6,7 @@ PKG_LICENSE="nonfree" PKG_SITE="http://www.realtek.com/" PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain linux" +PKG_BUILD_DEPENDS="toolchain linux busybox-hosttools" PKG_PRIORITY="optional" PKG_SECTION="driver" PKG_SHORTDESC="rtl8192se: Realtek RTL8191SE, RTL8192SE WLAN driver" From fe28c80d83034a498b3c7ff18aeb0e836d807b12 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 22 Nov 2010 16:12:28 +0100 Subject: [PATCH 475/850] linux: fix deps Signed-off-by: Stephan Raue --- packages/linux/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/linux/meta b/packages/linux/meta index 208299b283..7953dafa85 100644 --- a/packages/linux/meta +++ b/packages/linux/meta @@ -5,7 +5,7 @@ PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://www.kernel.org" PKG_URL="http://www.kernel.org/pub/linux/kernel/v2.6/$PKG_NAME-$PKG_VERSION.tar.bz2" -PKG_DEPENDS="busybox linux-firmware drivers" +PKG_DEPENDS="busybox linux-drivers linux-firmware" PKG_BUILD_DEPENDS="toolchain busybox-hosttools" PKG_PRIORITY="optional" PKG_SECTION="linux" From 26b989107db8671262a1a714bdfc4a613a9c3801 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 22 Nov 2010 16:15:12 +0100 Subject: [PATCH 476/850] libX11: update to libX11-1.4.0 Signed-off-by: Stephan Raue --- packages/x11/lib/libX11/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/x11/lib/libX11/meta b/packages/x11/lib/libX11/meta index eceae46c7b..21d58b31e6 100644 --- a/packages/x11/lib/libX11/meta +++ b/packages/x11/lib/libX11/meta @@ -1,5 +1,5 @@ PKG_NAME="libX11" -PKG_VERSION="1.3.99.903" +PKG_VERSION="1.4.0" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="OSS" From 18276c86de89c20d07a2f640ac7dfbeb75232c6a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 22 Nov 2010 16:56:19 +0100 Subject: [PATCH 477/850] create_installstick: copy MD5 sums too Signed-off-by: Stephan Raue --- config/release/create_installstick | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config/release/create_installstick b/config/release/create_installstick index 2d44276291..c0692da16b 100755 --- a/config/release/create_installstick +++ b/config/release/create_installstick @@ -111,7 +111,9 @@ fi # copy files echo "copy files to $PART..." cp target/KERNEL /tmp/usb_install + cp target/KERNEL.md5 /tmp/usb_install cp target/SYSTEM /tmp/usb_install + cp target/SYSTEM.md5 /tmp/usb_install cp sample.conf/syslinux_installer.cfg /tmp/usb_install/syslinux.cfg # syncing disk From 5f4c14deb012db4e8f5fc4258b0640c5f4684b99 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 22 Nov 2010 16:57:03 +0100 Subject: [PATCH 478/850] busybox: add 'md5sums' aplet Signed-off-by: Stephan Raue --- packages/sysutils/busybox/config/busybox.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sysutils/busybox/config/busybox.conf b/packages/sysutils/busybox/config/busybox.conf index 3cd2126b5b..eac032f123 100644 --- a/packages/sysutils/busybox/config/busybox.conf +++ b/packages/sysutils/busybox/config/busybox.conf @@ -224,7 +224,7 @@ CONFIG_FEATURE_LS_TIMESTAMPS=y CONFIG_FEATURE_LS_USERNAME=y CONFIG_FEATURE_LS_COLOR=y CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y -# CONFIG_MD5SUM is not set +CONFIG_MD5SUM=y CONFIG_MKDIR=y CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y CONFIG_MKFIFO=y From 258068f2bf4f8ac018e0620f0fc95248d46397c2 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 22 Nov 2010 16:57:59 +0100 Subject: [PATCH 479/850] busybox-initramfs: add 'md5sum' aplet Signed-off-by: Stephan Raue --- .../sysutils/busybox-initramfs/config/busybox-initramfs.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sysutils/busybox-initramfs/config/busybox-initramfs.conf b/packages/sysutils/busybox-initramfs/config/busybox-initramfs.conf index 570af963c7..b01aed5a0b 100644 --- a/packages/sysutils/busybox-initramfs/config/busybox-initramfs.conf +++ b/packages/sysutils/busybox-initramfs/config/busybox-initramfs.conf @@ -224,7 +224,7 @@ CONFIG_LS=y # CONFIG_FEATURE_LS_USERNAME is not set # CONFIG_FEATURE_LS_COLOR is not set # CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set -# CONFIG_MD5SUM is not set +CONFIG_MD5SUM=y CONFIG_MKDIR=y # CONFIG_FEATURE_MKDIR_LONG_OPTIONS is not set # CONFIG_MKFIFO is not set From 662dd49605ce41448c61dcb4b767bc0c2f8dfbe0 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 22 Nov 2010 17:40:33 +0100 Subject: [PATCH 480/850] projects/*/linux: add support for Anysee DVB-C/T USB DVB (except on ATV) Signed-off-by: Stephan Raue --- projects/ION/linux/linux.i386.conf | 221 ++++++++++++++++++++++++- projects/ION/linux/linux.x86_64.conf | 221 ++++++++++++++++++++++++- projects/generic/linux/linux.i386.conf | 221 ++++++++++++++++++++++++- projects/intel/linux/linux.i386.conf | 221 ++++++++++++++++++++++++- projects/intel/linux/linux.x86_64.conf | 221 ++++++++++++++++++++++++- 5 files changed, 1095 insertions(+), 10 deletions(-) diff --git a/projects/ION/linux/linux.i386.conf b/projects/ION/linux/linux.i386.conf index 90ee3e142f..1b0754d775 100644 --- a/projects/ION/linux/linux.i386.conf +++ b/projects/ION/linux/linux.i386.conf @@ -1378,8 +1378,8 @@ CONFIG_MEDIA_SUPPORT=m # Multimedia core support # # CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_VIDEO_MEDIA is not set +CONFIG_DVB_CORE=m +CONFIG_VIDEO_MEDIA=m # # Multimedia drivers @@ -1399,6 +1399,223 @@ CONFIG_IR_NUVOTON=m CONFIG_IR_MCEUSB=m CONFIG_IR_ENE=m CONFIG_IR_STREAMZAP=m +CONFIG_MEDIA_ATTACH=y +CONFIG_MEDIA_TUNER=m +CONFIG_MEDIA_TUNER_CUSTOMISE=y +# CONFIG_MEDIA_TUNER_SIMPLE is not set +# CONFIG_MEDIA_TUNER_TDA8290 is not set +# CONFIG_MEDIA_TUNER_TDA827X is not set +# CONFIG_MEDIA_TUNER_TDA18271 is not set +# CONFIG_MEDIA_TUNER_TDA9887 is not set +# CONFIG_MEDIA_TUNER_TEA5761 is not set +# CONFIG_MEDIA_TUNER_TEA5767 is not set +# CONFIG_MEDIA_TUNER_MT20XX is not set +# CONFIG_MEDIA_TUNER_MT2060 is not set +# CONFIG_MEDIA_TUNER_MT2266 is not set +# CONFIG_MEDIA_TUNER_MT2131 is not set +# CONFIG_MEDIA_TUNER_QT1010 is not set +# CONFIG_MEDIA_TUNER_XC2028 is not set +# CONFIG_MEDIA_TUNER_XC5000 is not set +# CONFIG_MEDIA_TUNER_MXL5005S is not set +# CONFIG_MEDIA_TUNER_MXL5007T is not set +# CONFIG_MEDIA_TUNER_MC44S803 is not set +# CONFIG_MEDIA_TUNER_MAX2165 is not set +CONFIG_DVB_MAX_ADAPTERS=8 +# CONFIG_DVB_DYNAMIC_MINORS is not set +CONFIG_DVB_CAPTURE_DRIVERS=y + +# +# Supported SAA7146 based PCI Adapters +# +# CONFIG_TTPCI_EEPROM is not set +# CONFIG_DVB_BUDGET_CORE is not set + +# +# Supported USB Adapters +# +CONFIG_DVB_USB=m +# CONFIG_DVB_USB_DEBUG is not set +# CONFIG_DVB_USB_A800 is not set +# CONFIG_DVB_USB_DIBUSB_MB is not set +# CONFIG_DVB_USB_DIBUSB_MC is not set +# CONFIG_DVB_USB_DIB0700 is not set +# CONFIG_DVB_USB_UMT_010 is not set +# CONFIG_DVB_USB_CXUSB is not set +# CONFIG_DVB_USB_M920X is not set +# CONFIG_DVB_USB_GL861 is not set +# CONFIG_DVB_USB_AU6610 is not set +# CONFIG_DVB_USB_DIGITV is not set +# CONFIG_DVB_USB_VP7045 is not set +# CONFIG_DVB_USB_VP702X is not set +# CONFIG_DVB_USB_GP8PSK is not set +# CONFIG_DVB_USB_NOVA_T_USB2 is not set +# CONFIG_DVB_USB_TTUSB2 is not set +# CONFIG_DVB_USB_DTT200U is not set +# CONFIG_DVB_USB_OPERA1 is not set +# CONFIG_DVB_USB_AF9005 is not set +# CONFIG_DVB_USB_DW2102 is not set +# CONFIG_DVB_USB_CINERGY_T2 is not set +CONFIG_DVB_USB_ANYSEE=m +# CONFIG_DVB_USB_DTV5100 is not set +# CONFIG_DVB_USB_AF9015 is not set +# CONFIG_DVB_USB_CE6230 is not set +# CONFIG_DVB_USB_FRIIO is not set +# CONFIG_DVB_USB_EC168 is not set +# CONFIG_DVB_USB_AZ6027 is not set +# CONFIG_DVB_TTUSB_BUDGET is not set +# CONFIG_DVB_TTUSB_DEC is not set +# CONFIG_SMS_SIANO_MDTV is not set + +# +# Supported FlexCopII (B2C2) Adapters +# +# CONFIG_DVB_B2C2_FLEXCOP is not set + +# +# Supported BT878 Adapters +# + +# +# Supported Pluto2 Adapters +# +# CONFIG_DVB_PLUTO2 is not set + +# +# Supported SDMC DM1105 Adapters +# +# CONFIG_DVB_DM1105 is not set +# CONFIG_DVB_FIREDTV is not set + +# +# Supported Earthsoft PT1 Adapters +# +# CONFIG_DVB_PT1 is not set + +# +# Supported Mantis Adapters +# +# CONFIG_MANTIS_CORE is not set + +# +# Supported nGene Adapters +# +# CONFIG_DVB_NGENE is not set + +# +# Supported DVB Frontends +# +CONFIG_DVB_FE_CUSTOMISE=y + +# +# Customise DVB Frontends +# + +# +# Multistandard (satellite) frontends +# +# CONFIG_DVB_STB0899 is not set +# CONFIG_DVB_STB6100 is not set +# CONFIG_DVB_STV090x is not set +# CONFIG_DVB_STV6110x is not set + +# +# DVB-S (satellite) frontends +# +# CONFIG_DVB_CX24110 is not set +# CONFIG_DVB_CX24123 is not set +# CONFIG_DVB_MT312 is not set +# CONFIG_DVB_ZL10036 is not set +# CONFIG_DVB_ZL10039 is not set +# CONFIG_DVB_S5H1420 is not set +# CONFIG_DVB_STV0288 is not set +# CONFIG_DVB_STB6000 is not set +# CONFIG_DVB_STV0299 is not set +# CONFIG_DVB_STV6110 is not set +# CONFIG_DVB_STV0900 is not set +# CONFIG_DVB_TDA8083 is not set +# CONFIG_DVB_TDA10086 is not set +# CONFIG_DVB_TDA8261 is not set +# CONFIG_DVB_VES1X93 is not set +# CONFIG_DVB_TUNER_ITD1000 is not set +# CONFIG_DVB_TUNER_CX24113 is not set +# CONFIG_DVB_TDA826X is not set +# CONFIG_DVB_TUA6100 is not set +# CONFIG_DVB_CX24116 is not set +# CONFIG_DVB_SI21XX is not set +# CONFIG_DVB_DS3000 is not set +# CONFIG_DVB_MB86A16 is not set + +# +# DVB-T (terrestrial) frontends +# +# CONFIG_DVB_SP8870 is not set +# CONFIG_DVB_SP887X is not set +# CONFIG_DVB_CX22700 is not set +# CONFIG_DVB_CX22702 is not set +# CONFIG_DVB_DRX397XD is not set +# CONFIG_DVB_L64781 is not set +# CONFIG_DVB_TDA1004X is not set +# CONFIG_DVB_NXT6000 is not set +CONFIG_DVB_MT352=m +CONFIG_DVB_ZL10353=m +# CONFIG_DVB_DIB3000MB is not set +# CONFIG_DVB_DIB3000MC is not set +# CONFIG_DVB_DIB7000M is not set +# CONFIG_DVB_DIB7000P is not set +# CONFIG_DVB_TDA10048 is not set +# CONFIG_DVB_AF9013 is not set +# CONFIG_DVB_EC100 is not set + +# +# DVB-C (cable) frontends +# +# CONFIG_DVB_VES1820 is not set +# CONFIG_DVB_TDA10021 is not set +CONFIG_DVB_TDA10023=m +# CONFIG_DVB_STV0297 is not set + +# +# ATSC (North American/Korean Terrestrial/Cable DTV) frontends +# +# CONFIG_DVB_NXT200X is not set +# CONFIG_DVB_OR51211 is not set +# CONFIG_DVB_OR51132 is not set +# CONFIG_DVB_BCM3510 is not set +# CONFIG_DVB_LGDT330X is not set +# CONFIG_DVB_LGDT3304 is not set +# CONFIG_DVB_LGDT3305 is not set +# CONFIG_DVB_S5H1409 is not set +# CONFIG_DVB_S5H1411 is not set + +# +# ISDB-T (terrestrial) frontends +# +# CONFIG_DVB_S921 is not set +# CONFIG_DVB_DIB8000 is not set + +# +# Digital terrestrial only tuners/PLL +# +CONFIG_DVB_PLL=m +# CONFIG_DVB_TUNER_DIB0070 is not set +# CONFIG_DVB_TUNER_DIB0090 is not set + +# +# SEC control devices for DVB-S +# +# CONFIG_DVB_LNBP21 is not set +# CONFIG_DVB_ISL6405 is not set +# CONFIG_DVB_ISL6421 is not set +# CONFIG_DVB_ISL6423 is not set +# CONFIG_DVB_LGS8GL5 is not set +# CONFIG_DVB_LGS8GXX is not set +# CONFIG_DVB_ATBM8830 is not set +# CONFIG_DVB_TDA665x is not set + +# +# Tools to develop new frontends +# +# CONFIG_DVB_DUMMY_FE is not set # CONFIG_DAB is not set # diff --git a/projects/ION/linux/linux.x86_64.conf b/projects/ION/linux/linux.x86_64.conf index 4e8f8e0b1a..23fb8cb4d4 100644 --- a/projects/ION/linux/linux.x86_64.conf +++ b/projects/ION/linux/linux.x86_64.conf @@ -1320,8 +1320,8 @@ CONFIG_MEDIA_SUPPORT=m # Multimedia core support # # CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_VIDEO_MEDIA is not set +CONFIG_DVB_CORE=m +CONFIG_VIDEO_MEDIA=m # # Multimedia drivers @@ -1341,6 +1341,223 @@ CONFIG_IR_NUVOTON=m CONFIG_IR_MCEUSB=m CONFIG_IR_ENE=m CONFIG_IR_STREAMZAP=m +CONFIG_MEDIA_ATTACH=y +CONFIG_MEDIA_TUNER=m +CONFIG_MEDIA_TUNER_CUSTOMISE=y +# CONFIG_MEDIA_TUNER_SIMPLE is not set +# CONFIG_MEDIA_TUNER_TDA8290 is not set +# CONFIG_MEDIA_TUNER_TDA827X is not set +# CONFIG_MEDIA_TUNER_TDA18271 is not set +# CONFIG_MEDIA_TUNER_TDA9887 is not set +# CONFIG_MEDIA_TUNER_TEA5761 is not set +# CONFIG_MEDIA_TUNER_TEA5767 is not set +# CONFIG_MEDIA_TUNER_MT20XX is not set +# CONFIG_MEDIA_TUNER_MT2060 is not set +# CONFIG_MEDIA_TUNER_MT2266 is not set +# CONFIG_MEDIA_TUNER_MT2131 is not set +# CONFIG_MEDIA_TUNER_QT1010 is not set +# CONFIG_MEDIA_TUNER_XC2028 is not set +# CONFIG_MEDIA_TUNER_XC5000 is not set +# CONFIG_MEDIA_TUNER_MXL5005S is not set +# CONFIG_MEDIA_TUNER_MXL5007T is not set +# CONFIG_MEDIA_TUNER_MC44S803 is not set +# CONFIG_MEDIA_TUNER_MAX2165 is not set +CONFIG_DVB_MAX_ADAPTERS=8 +# CONFIG_DVB_DYNAMIC_MINORS is not set +CONFIG_DVB_CAPTURE_DRIVERS=y + +# +# Supported SAA7146 based PCI Adapters +# +# CONFIG_TTPCI_EEPROM is not set +# CONFIG_DVB_BUDGET_CORE is not set + +# +# Supported USB Adapters +# +CONFIG_DVB_USB=m +# CONFIG_DVB_USB_DEBUG is not set +# CONFIG_DVB_USB_A800 is not set +# CONFIG_DVB_USB_DIBUSB_MB is not set +# CONFIG_DVB_USB_DIBUSB_MC is not set +# CONFIG_DVB_USB_DIB0700 is not set +# CONFIG_DVB_USB_UMT_010 is not set +# CONFIG_DVB_USB_CXUSB is not set +# CONFIG_DVB_USB_M920X is not set +# CONFIG_DVB_USB_GL861 is not set +# CONFIG_DVB_USB_AU6610 is not set +# CONFIG_DVB_USB_DIGITV is not set +# CONFIG_DVB_USB_VP7045 is not set +# CONFIG_DVB_USB_VP702X is not set +# CONFIG_DVB_USB_GP8PSK is not set +# CONFIG_DVB_USB_NOVA_T_USB2 is not set +# CONFIG_DVB_USB_TTUSB2 is not set +# CONFIG_DVB_USB_DTT200U is not set +# CONFIG_DVB_USB_OPERA1 is not set +# CONFIG_DVB_USB_AF9005 is not set +# CONFIG_DVB_USB_DW2102 is not set +# CONFIG_DVB_USB_CINERGY_T2 is not set +CONFIG_DVB_USB_ANYSEE=m +# CONFIG_DVB_USB_DTV5100 is not set +# CONFIG_DVB_USB_AF9015 is not set +# CONFIG_DVB_USB_CE6230 is not set +# CONFIG_DVB_USB_FRIIO is not set +# CONFIG_DVB_USB_EC168 is not set +# CONFIG_DVB_USB_AZ6027 is not set +# CONFIG_DVB_TTUSB_BUDGET is not set +# CONFIG_DVB_TTUSB_DEC is not set +# CONFIG_SMS_SIANO_MDTV is not set + +# +# Supported FlexCopII (B2C2) Adapters +# +# CONFIG_DVB_B2C2_FLEXCOP is not set + +# +# Supported BT878 Adapters +# + +# +# Supported Pluto2 Adapters +# +# CONFIG_DVB_PLUTO2 is not set + +# +# Supported SDMC DM1105 Adapters +# +# CONFIG_DVB_DM1105 is not set +# CONFIG_DVB_FIREDTV is not set + +# +# Supported Earthsoft PT1 Adapters +# +# CONFIG_DVB_PT1 is not set + +# +# Supported Mantis Adapters +# +# CONFIG_MANTIS_CORE is not set + +# +# Supported nGene Adapters +# +# CONFIG_DVB_NGENE is not set + +# +# Supported DVB Frontends +# +CONFIG_DVB_FE_CUSTOMISE=y + +# +# Customise DVB Frontends +# + +# +# Multistandard (satellite) frontends +# +# CONFIG_DVB_STB0899 is not set +# CONFIG_DVB_STB6100 is not set +# CONFIG_DVB_STV090x is not set +# CONFIG_DVB_STV6110x is not set + +# +# DVB-S (satellite) frontends +# +# CONFIG_DVB_CX24110 is not set +# CONFIG_DVB_CX24123 is not set +# CONFIG_DVB_MT312 is not set +# CONFIG_DVB_ZL10036 is not set +# CONFIG_DVB_ZL10039 is not set +# CONFIG_DVB_S5H1420 is not set +# CONFIG_DVB_STV0288 is not set +# CONFIG_DVB_STB6000 is not set +# CONFIG_DVB_STV0299 is not set +# CONFIG_DVB_STV6110 is not set +# CONFIG_DVB_STV0900 is not set +# CONFIG_DVB_TDA8083 is not set +# CONFIG_DVB_TDA10086 is not set +# CONFIG_DVB_TDA8261 is not set +# CONFIG_DVB_VES1X93 is not set +# CONFIG_DVB_TUNER_ITD1000 is not set +# CONFIG_DVB_TUNER_CX24113 is not set +# CONFIG_DVB_TDA826X is not set +# CONFIG_DVB_TUA6100 is not set +# CONFIG_DVB_CX24116 is not set +# CONFIG_DVB_SI21XX is not set +# CONFIG_DVB_DS3000 is not set +# CONFIG_DVB_MB86A16 is not set + +# +# DVB-T (terrestrial) frontends +# +# CONFIG_DVB_SP8870 is not set +# CONFIG_DVB_SP887X is not set +# CONFIG_DVB_CX22700 is not set +# CONFIG_DVB_CX22702 is not set +# CONFIG_DVB_DRX397XD is not set +# CONFIG_DVB_L64781 is not set +# CONFIG_DVB_TDA1004X is not set +# CONFIG_DVB_NXT6000 is not set +CONFIG_DVB_MT352=m +CONFIG_DVB_ZL10353=m +# CONFIG_DVB_DIB3000MB is not set +# CONFIG_DVB_DIB3000MC is not set +# CONFIG_DVB_DIB7000M is not set +# CONFIG_DVB_DIB7000P is not set +# CONFIG_DVB_TDA10048 is not set +# CONFIG_DVB_AF9013 is not set +# CONFIG_DVB_EC100 is not set + +# +# DVB-C (cable) frontends +# +# CONFIG_DVB_VES1820 is not set +# CONFIG_DVB_TDA10021 is not set +CONFIG_DVB_TDA10023=m +# CONFIG_DVB_STV0297 is not set + +# +# ATSC (North American/Korean Terrestrial/Cable DTV) frontends +# +# CONFIG_DVB_NXT200X is not set +# CONFIG_DVB_OR51211 is not set +# CONFIG_DVB_OR51132 is not set +# CONFIG_DVB_BCM3510 is not set +# CONFIG_DVB_LGDT330X is not set +# CONFIG_DVB_LGDT3304 is not set +# CONFIG_DVB_LGDT3305 is not set +# CONFIG_DVB_S5H1409 is not set +# CONFIG_DVB_S5H1411 is not set + +# +# ISDB-T (terrestrial) frontends +# +# CONFIG_DVB_S921 is not set +# CONFIG_DVB_DIB8000 is not set + +# +# Digital terrestrial only tuners/PLL +# +CONFIG_DVB_PLL=m +# CONFIG_DVB_TUNER_DIB0070 is not set +# CONFIG_DVB_TUNER_DIB0090 is not set + +# +# SEC control devices for DVB-S +# +# CONFIG_DVB_LNBP21 is not set +# CONFIG_DVB_ISL6405 is not set +# CONFIG_DVB_ISL6421 is not set +# CONFIG_DVB_ISL6423 is not set +# CONFIG_DVB_LGS8GL5 is not set +# CONFIG_DVB_LGS8GXX is not set +# CONFIG_DVB_ATBM8830 is not set +# CONFIG_DVB_TDA665x is not set + +# +# Tools to develop new frontends +# +# CONFIG_DVB_DUMMY_FE is not set # CONFIG_DAB is not set # diff --git a/projects/generic/linux/linux.i386.conf b/projects/generic/linux/linux.i386.conf index 7c32291554..f85dbe149e 100644 --- a/projects/generic/linux/linux.i386.conf +++ b/projects/generic/linux/linux.i386.conf @@ -1488,8 +1488,8 @@ CONFIG_MEDIA_SUPPORT=m # Multimedia core support # # CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_VIDEO_MEDIA is not set +CONFIG_DVB_CORE=m +CONFIG_VIDEO_MEDIA=m # # Multimedia drivers @@ -1509,6 +1509,223 @@ CONFIG_IR_NUVOTON=m CONFIG_IR_MCEUSB=m CONFIG_IR_ENE=m CONFIG_IR_STREAMZAP=m +CONFIG_MEDIA_ATTACH=y +CONFIG_MEDIA_TUNER=m +CONFIG_MEDIA_TUNER_CUSTOMISE=y +# CONFIG_MEDIA_TUNER_SIMPLE is not set +# CONFIG_MEDIA_TUNER_TDA8290 is not set +# CONFIG_MEDIA_TUNER_TDA827X is not set +# CONFIG_MEDIA_TUNER_TDA18271 is not set +# CONFIG_MEDIA_TUNER_TDA9887 is not set +# CONFIG_MEDIA_TUNER_TEA5761 is not set +# CONFIG_MEDIA_TUNER_TEA5767 is not set +# CONFIG_MEDIA_TUNER_MT20XX is not set +# CONFIG_MEDIA_TUNER_MT2060 is not set +# CONFIG_MEDIA_TUNER_MT2266 is not set +# CONFIG_MEDIA_TUNER_MT2131 is not set +# CONFIG_MEDIA_TUNER_QT1010 is not set +# CONFIG_MEDIA_TUNER_XC2028 is not set +# CONFIG_MEDIA_TUNER_XC5000 is not set +# CONFIG_MEDIA_TUNER_MXL5005S is not set +# CONFIG_MEDIA_TUNER_MXL5007T is not set +# CONFIG_MEDIA_TUNER_MC44S803 is not set +# CONFIG_MEDIA_TUNER_MAX2165 is not set +CONFIG_DVB_MAX_ADAPTERS=8 +# CONFIG_DVB_DYNAMIC_MINORS is not set +CONFIG_DVB_CAPTURE_DRIVERS=y + +# +# Supported SAA7146 based PCI Adapters +# +# CONFIG_TTPCI_EEPROM is not set +# CONFIG_DVB_BUDGET_CORE is not set + +# +# Supported USB Adapters +# +CONFIG_DVB_USB=m +# CONFIG_DVB_USB_DEBUG is not set +# CONFIG_DVB_USB_A800 is not set +# CONFIG_DVB_USB_DIBUSB_MB is not set +# CONFIG_DVB_USB_DIBUSB_MC is not set +# CONFIG_DVB_USB_DIB0700 is not set +# CONFIG_DVB_USB_UMT_010 is not set +# CONFIG_DVB_USB_CXUSB is not set +# CONFIG_DVB_USB_M920X is not set +# CONFIG_DVB_USB_GL861 is not set +# CONFIG_DVB_USB_AU6610 is not set +# CONFIG_DVB_USB_DIGITV is not set +# CONFIG_DVB_USB_VP7045 is not set +# CONFIG_DVB_USB_VP702X is not set +# CONFIG_DVB_USB_GP8PSK is not set +# CONFIG_DVB_USB_NOVA_T_USB2 is not set +# CONFIG_DVB_USB_TTUSB2 is not set +# CONFIG_DVB_USB_DTT200U is not set +# CONFIG_DVB_USB_OPERA1 is not set +# CONFIG_DVB_USB_AF9005 is not set +# CONFIG_DVB_USB_DW2102 is not set +# CONFIG_DVB_USB_CINERGY_T2 is not set +CONFIG_DVB_USB_ANYSEE=m +# CONFIG_DVB_USB_DTV5100 is not set +# CONFIG_DVB_USB_AF9015 is not set +# CONFIG_DVB_USB_CE6230 is not set +# CONFIG_DVB_USB_FRIIO is not set +# CONFIG_DVB_USB_EC168 is not set +# CONFIG_DVB_USB_AZ6027 is not set +# CONFIG_DVB_TTUSB_BUDGET is not set +# CONFIG_DVB_TTUSB_DEC is not set +# CONFIG_SMS_SIANO_MDTV is not set + +# +# Supported FlexCopII (B2C2) Adapters +# +# CONFIG_DVB_B2C2_FLEXCOP is not set + +# +# Supported BT878 Adapters +# + +# +# Supported Pluto2 Adapters +# +# CONFIG_DVB_PLUTO2 is not set + +# +# Supported SDMC DM1105 Adapters +# +# CONFIG_DVB_DM1105 is not set +# CONFIG_DVB_FIREDTV is not set + +# +# Supported Earthsoft PT1 Adapters +# +# CONFIG_DVB_PT1 is not set + +# +# Supported Mantis Adapters +# +# CONFIG_MANTIS_CORE is not set + +# +# Supported nGene Adapters +# +# CONFIG_DVB_NGENE is not set + +# +# Supported DVB Frontends +# +CONFIG_DVB_FE_CUSTOMISE=y + +# +# Customise DVB Frontends +# + +# +# Multistandard (satellite) frontends +# +# CONFIG_DVB_STB0899 is not set +# CONFIG_DVB_STB6100 is not set +# CONFIG_DVB_STV090x is not set +# CONFIG_DVB_STV6110x is not set + +# +# DVB-S (satellite) frontends +# +# CONFIG_DVB_CX24110 is not set +# CONFIG_DVB_CX24123 is not set +# CONFIG_DVB_MT312 is not set +# CONFIG_DVB_ZL10036 is not set +# CONFIG_DVB_ZL10039 is not set +# CONFIG_DVB_S5H1420 is not set +# CONFIG_DVB_STV0288 is not set +# CONFIG_DVB_STB6000 is not set +# CONFIG_DVB_STV0299 is not set +# CONFIG_DVB_STV6110 is not set +# CONFIG_DVB_STV0900 is not set +# CONFIG_DVB_TDA8083 is not set +# CONFIG_DVB_TDA10086 is not set +# CONFIG_DVB_TDA8261 is not set +# CONFIG_DVB_VES1X93 is not set +# CONFIG_DVB_TUNER_ITD1000 is not set +# CONFIG_DVB_TUNER_CX24113 is not set +# CONFIG_DVB_TDA826X is not set +# CONFIG_DVB_TUA6100 is not set +# CONFIG_DVB_CX24116 is not set +# CONFIG_DVB_SI21XX is not set +# CONFIG_DVB_DS3000 is not set +# CONFIG_DVB_MB86A16 is not set + +# +# DVB-T (terrestrial) frontends +# +# CONFIG_DVB_SP8870 is not set +# CONFIG_DVB_SP887X is not set +# CONFIG_DVB_CX22700 is not set +# CONFIG_DVB_CX22702 is not set +# CONFIG_DVB_DRX397XD is not set +# CONFIG_DVB_L64781 is not set +# CONFIG_DVB_TDA1004X is not set +# CONFIG_DVB_NXT6000 is not set +CONFIG_DVB_MT352=m +CONFIG_DVB_ZL10353=m +# CONFIG_DVB_DIB3000MB is not set +# CONFIG_DVB_DIB3000MC is not set +# CONFIG_DVB_DIB7000M is not set +# CONFIG_DVB_DIB7000P is not set +# CONFIG_DVB_TDA10048 is not set +# CONFIG_DVB_AF9013 is not set +# CONFIG_DVB_EC100 is not set + +# +# DVB-C (cable) frontends +# +# CONFIG_DVB_VES1820 is not set +# CONFIG_DVB_TDA10021 is not set +CONFIG_DVB_TDA10023=m +# CONFIG_DVB_STV0297 is not set + +# +# ATSC (North American/Korean Terrestrial/Cable DTV) frontends +# +# CONFIG_DVB_NXT200X is not set +# CONFIG_DVB_OR51211 is not set +# CONFIG_DVB_OR51132 is not set +# CONFIG_DVB_BCM3510 is not set +# CONFIG_DVB_LGDT330X is not set +# CONFIG_DVB_LGDT3304 is not set +# CONFIG_DVB_LGDT3305 is not set +# CONFIG_DVB_S5H1409 is not set +# CONFIG_DVB_S5H1411 is not set + +# +# ISDB-T (terrestrial) frontends +# +# CONFIG_DVB_S921 is not set +# CONFIG_DVB_DIB8000 is not set + +# +# Digital terrestrial only tuners/PLL +# +CONFIG_DVB_PLL=m +# CONFIG_DVB_TUNER_DIB0070 is not set +# CONFIG_DVB_TUNER_DIB0090 is not set + +# +# SEC control devices for DVB-S +# +# CONFIG_DVB_LNBP21 is not set +# CONFIG_DVB_ISL6405 is not set +# CONFIG_DVB_ISL6421 is not set +# CONFIG_DVB_ISL6423 is not set +# CONFIG_DVB_LGS8GL5 is not set +# CONFIG_DVB_LGS8GXX is not set +# CONFIG_DVB_ATBM8830 is not set +# CONFIG_DVB_TDA665x is not set + +# +# Tools to develop new frontends +# +# CONFIG_DVB_DUMMY_FE is not set # CONFIG_DAB is not set # diff --git a/projects/intel/linux/linux.i386.conf b/projects/intel/linux/linux.i386.conf index d7713734e1..aefaac51e0 100644 --- a/projects/intel/linux/linux.i386.conf +++ b/projects/intel/linux/linux.i386.conf @@ -1339,8 +1339,8 @@ CONFIG_MEDIA_SUPPORT=m # Multimedia core support # # CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_VIDEO_MEDIA is not set +CONFIG_DVB_CORE=m +CONFIG_VIDEO_MEDIA=m # # Multimedia drivers @@ -1360,6 +1360,223 @@ CONFIG_IR_NUVOTON=m CONFIG_IR_MCEUSB=m CONFIG_IR_ENE=m CONFIG_IR_STREAMZAP=m +CONFIG_MEDIA_ATTACH=y +CONFIG_MEDIA_TUNER=m +CONFIG_MEDIA_TUNER_CUSTOMISE=y +# CONFIG_MEDIA_TUNER_SIMPLE is not set +# CONFIG_MEDIA_TUNER_TDA8290 is not set +# CONFIG_MEDIA_TUNER_TDA827X is not set +# CONFIG_MEDIA_TUNER_TDA18271 is not set +# CONFIG_MEDIA_TUNER_TDA9887 is not set +# CONFIG_MEDIA_TUNER_TEA5761 is not set +# CONFIG_MEDIA_TUNER_TEA5767 is not set +# CONFIG_MEDIA_TUNER_MT20XX is not set +# CONFIG_MEDIA_TUNER_MT2060 is not set +# CONFIG_MEDIA_TUNER_MT2266 is not set +# CONFIG_MEDIA_TUNER_MT2131 is not set +# CONFIG_MEDIA_TUNER_QT1010 is not set +# CONFIG_MEDIA_TUNER_XC2028 is not set +# CONFIG_MEDIA_TUNER_XC5000 is not set +# CONFIG_MEDIA_TUNER_MXL5005S is not set +# CONFIG_MEDIA_TUNER_MXL5007T is not set +# CONFIG_MEDIA_TUNER_MC44S803 is not set +# CONFIG_MEDIA_TUNER_MAX2165 is not set +CONFIG_DVB_MAX_ADAPTERS=8 +# CONFIG_DVB_DYNAMIC_MINORS is not set +CONFIG_DVB_CAPTURE_DRIVERS=y + +# +# Supported SAA7146 based PCI Adapters +# +# CONFIG_TTPCI_EEPROM is not set +# CONFIG_DVB_BUDGET_CORE is not set + +# +# Supported USB Adapters +# +CONFIG_DVB_USB=m +# CONFIG_DVB_USB_DEBUG is not set +# CONFIG_DVB_USB_A800 is not set +# CONFIG_DVB_USB_DIBUSB_MB is not set +# CONFIG_DVB_USB_DIBUSB_MC is not set +# CONFIG_DVB_USB_DIB0700 is not set +# CONFIG_DVB_USB_UMT_010 is not set +# CONFIG_DVB_USB_CXUSB is not set +# CONFIG_DVB_USB_M920X is not set +# CONFIG_DVB_USB_GL861 is not set +# CONFIG_DVB_USB_AU6610 is not set +# CONFIG_DVB_USB_DIGITV is not set +# CONFIG_DVB_USB_VP7045 is not set +# CONFIG_DVB_USB_VP702X is not set +# CONFIG_DVB_USB_GP8PSK is not set +# CONFIG_DVB_USB_NOVA_T_USB2 is not set +# CONFIG_DVB_USB_TTUSB2 is not set +# CONFIG_DVB_USB_DTT200U is not set +# CONFIG_DVB_USB_OPERA1 is not set +# CONFIG_DVB_USB_AF9005 is not set +# CONFIG_DVB_USB_DW2102 is not set +# CONFIG_DVB_USB_CINERGY_T2 is not set +CONFIG_DVB_USB_ANYSEE=m +# CONFIG_DVB_USB_DTV5100 is not set +# CONFIG_DVB_USB_AF9015 is not set +# CONFIG_DVB_USB_CE6230 is not set +# CONFIG_DVB_USB_FRIIO is not set +# CONFIG_DVB_USB_EC168 is not set +# CONFIG_DVB_USB_AZ6027 is not set +# CONFIG_DVB_TTUSB_BUDGET is not set +# CONFIG_DVB_TTUSB_DEC is not set +# CONFIG_SMS_SIANO_MDTV is not set + +# +# Supported FlexCopII (B2C2) Adapters +# +# CONFIG_DVB_B2C2_FLEXCOP is not set + +# +# Supported BT878 Adapters +# + +# +# Supported Pluto2 Adapters +# +# CONFIG_DVB_PLUTO2 is not set + +# +# Supported SDMC DM1105 Adapters +# +# CONFIG_DVB_DM1105 is not set +# CONFIG_DVB_FIREDTV is not set + +# +# Supported Earthsoft PT1 Adapters +# +# CONFIG_DVB_PT1 is not set + +# +# Supported Mantis Adapters +# +# CONFIG_MANTIS_CORE is not set + +# +# Supported nGene Adapters +# +# CONFIG_DVB_NGENE is not set + +# +# Supported DVB Frontends +# +CONFIG_DVB_FE_CUSTOMISE=y + +# +# Customise DVB Frontends +# + +# +# Multistandard (satellite) frontends +# +# CONFIG_DVB_STB0899 is not set +# CONFIG_DVB_STB6100 is not set +# CONFIG_DVB_STV090x is not set +# CONFIG_DVB_STV6110x is not set + +# +# DVB-S (satellite) frontends +# +# CONFIG_DVB_CX24110 is not set +# CONFIG_DVB_CX24123 is not set +# CONFIG_DVB_MT312 is not set +# CONFIG_DVB_ZL10036 is not set +# CONFIG_DVB_ZL10039 is not set +# CONFIG_DVB_S5H1420 is not set +# CONFIG_DVB_STV0288 is not set +# CONFIG_DVB_STB6000 is not set +# CONFIG_DVB_STV0299 is not set +# CONFIG_DVB_STV6110 is not set +# CONFIG_DVB_STV0900 is not set +# CONFIG_DVB_TDA8083 is not set +# CONFIG_DVB_TDA10086 is not set +# CONFIG_DVB_TDA8261 is not set +# CONFIG_DVB_VES1X93 is not set +# CONFIG_DVB_TUNER_ITD1000 is not set +# CONFIG_DVB_TUNER_CX24113 is not set +# CONFIG_DVB_TDA826X is not set +# CONFIG_DVB_TUA6100 is not set +# CONFIG_DVB_CX24116 is not set +# CONFIG_DVB_SI21XX is not set +# CONFIG_DVB_DS3000 is not set +# CONFIG_DVB_MB86A16 is not set + +# +# DVB-T (terrestrial) frontends +# +# CONFIG_DVB_SP8870 is not set +# CONFIG_DVB_SP887X is not set +# CONFIG_DVB_CX22700 is not set +# CONFIG_DVB_CX22702 is not set +# CONFIG_DVB_DRX397XD is not set +# CONFIG_DVB_L64781 is not set +# CONFIG_DVB_TDA1004X is not set +# CONFIG_DVB_NXT6000 is not set +CONFIG_DVB_MT352=m +CONFIG_DVB_ZL10353=m +# CONFIG_DVB_DIB3000MB is not set +# CONFIG_DVB_DIB3000MC is not set +# CONFIG_DVB_DIB7000M is not set +# CONFIG_DVB_DIB7000P is not set +# CONFIG_DVB_TDA10048 is not set +# CONFIG_DVB_AF9013 is not set +# CONFIG_DVB_EC100 is not set + +# +# DVB-C (cable) frontends +# +# CONFIG_DVB_VES1820 is not set +# CONFIG_DVB_TDA10021 is not set +CONFIG_DVB_TDA10023=m +# CONFIG_DVB_STV0297 is not set + +# +# ATSC (North American/Korean Terrestrial/Cable DTV) frontends +# +# CONFIG_DVB_NXT200X is not set +# CONFIG_DVB_OR51211 is not set +# CONFIG_DVB_OR51132 is not set +# CONFIG_DVB_BCM3510 is not set +# CONFIG_DVB_LGDT330X is not set +# CONFIG_DVB_LGDT3304 is not set +# CONFIG_DVB_LGDT3305 is not set +# CONFIG_DVB_S5H1409 is not set +# CONFIG_DVB_S5H1411 is not set + +# +# ISDB-T (terrestrial) frontends +# +# CONFIG_DVB_S921 is not set +# CONFIG_DVB_DIB8000 is not set + +# +# Digital terrestrial only tuners/PLL +# +CONFIG_DVB_PLL=m +# CONFIG_DVB_TUNER_DIB0070 is not set +# CONFIG_DVB_TUNER_DIB0090 is not set + +# +# SEC control devices for DVB-S +# +# CONFIG_DVB_LNBP21 is not set +# CONFIG_DVB_ISL6405 is not set +# CONFIG_DVB_ISL6421 is not set +# CONFIG_DVB_ISL6423 is not set +# CONFIG_DVB_LGS8GL5 is not set +# CONFIG_DVB_LGS8GXX is not set +# CONFIG_DVB_ATBM8830 is not set +# CONFIG_DVB_TDA665x is not set + +# +# Tools to develop new frontends +# +# CONFIG_DVB_DUMMY_FE is not set # CONFIG_DAB is not set # diff --git a/projects/intel/linux/linux.x86_64.conf b/projects/intel/linux/linux.x86_64.conf index 5ce3aa08fd..09599c1c03 100644 --- a/projects/intel/linux/linux.x86_64.conf +++ b/projects/intel/linux/linux.x86_64.conf @@ -1282,8 +1282,8 @@ CONFIG_MEDIA_SUPPORT=m # Multimedia core support # # CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_VIDEO_MEDIA is not set +CONFIG_DVB_CORE=m +CONFIG_VIDEO_MEDIA=m # # Multimedia drivers @@ -1303,6 +1303,223 @@ CONFIG_IR_NUVOTON=m CONFIG_IR_MCEUSB=m CONFIG_IR_ENE=m CONFIG_IR_STREAMZAP=m +CONFIG_MEDIA_ATTACH=y +CONFIG_MEDIA_TUNER=m +CONFIG_MEDIA_TUNER_CUSTOMISE=y +# CONFIG_MEDIA_TUNER_SIMPLE is not set +# CONFIG_MEDIA_TUNER_TDA8290 is not set +# CONFIG_MEDIA_TUNER_TDA827X is not set +# CONFIG_MEDIA_TUNER_TDA18271 is not set +# CONFIG_MEDIA_TUNER_TDA9887 is not set +# CONFIG_MEDIA_TUNER_TEA5761 is not set +# CONFIG_MEDIA_TUNER_TEA5767 is not set +# CONFIG_MEDIA_TUNER_MT20XX is not set +# CONFIG_MEDIA_TUNER_MT2060 is not set +# CONFIG_MEDIA_TUNER_MT2266 is not set +# CONFIG_MEDIA_TUNER_MT2131 is not set +# CONFIG_MEDIA_TUNER_QT1010 is not set +# CONFIG_MEDIA_TUNER_XC2028 is not set +# CONFIG_MEDIA_TUNER_XC5000 is not set +# CONFIG_MEDIA_TUNER_MXL5005S is not set +# CONFIG_MEDIA_TUNER_MXL5007T is not set +# CONFIG_MEDIA_TUNER_MC44S803 is not set +# CONFIG_MEDIA_TUNER_MAX2165 is not set +CONFIG_DVB_MAX_ADAPTERS=8 +# CONFIG_DVB_DYNAMIC_MINORS is not set +CONFIG_DVB_CAPTURE_DRIVERS=y + +# +# Supported SAA7146 based PCI Adapters +# +# CONFIG_TTPCI_EEPROM is not set +# CONFIG_DVB_BUDGET_CORE is not set + +# +# Supported USB Adapters +# +CONFIG_DVB_USB=m +# CONFIG_DVB_USB_DEBUG is not set +# CONFIG_DVB_USB_A800 is not set +# CONFIG_DVB_USB_DIBUSB_MB is not set +# CONFIG_DVB_USB_DIBUSB_MC is not set +# CONFIG_DVB_USB_DIB0700 is not set +# CONFIG_DVB_USB_UMT_010 is not set +# CONFIG_DVB_USB_CXUSB is not set +# CONFIG_DVB_USB_M920X is not set +# CONFIG_DVB_USB_GL861 is not set +# CONFIG_DVB_USB_AU6610 is not set +# CONFIG_DVB_USB_DIGITV is not set +# CONFIG_DVB_USB_VP7045 is not set +# CONFIG_DVB_USB_VP702X is not set +# CONFIG_DVB_USB_GP8PSK is not set +# CONFIG_DVB_USB_NOVA_T_USB2 is not set +# CONFIG_DVB_USB_TTUSB2 is not set +# CONFIG_DVB_USB_DTT200U is not set +# CONFIG_DVB_USB_OPERA1 is not set +# CONFIG_DVB_USB_AF9005 is not set +# CONFIG_DVB_USB_DW2102 is not set +# CONFIG_DVB_USB_CINERGY_T2 is not set +CONFIG_DVB_USB_ANYSEE=m +# CONFIG_DVB_USB_DTV5100 is not set +# CONFIG_DVB_USB_AF9015 is not set +# CONFIG_DVB_USB_CE6230 is not set +# CONFIG_DVB_USB_FRIIO is not set +# CONFIG_DVB_USB_EC168 is not set +# CONFIG_DVB_USB_AZ6027 is not set +# CONFIG_DVB_TTUSB_BUDGET is not set +# CONFIG_DVB_TTUSB_DEC is not set +# CONFIG_SMS_SIANO_MDTV is not set + +# +# Supported FlexCopII (B2C2) Adapters +# +# CONFIG_DVB_B2C2_FLEXCOP is not set + +# +# Supported BT878 Adapters +# + +# +# Supported Pluto2 Adapters +# +# CONFIG_DVB_PLUTO2 is not set + +# +# Supported SDMC DM1105 Adapters +# +# CONFIG_DVB_DM1105 is not set +# CONFIG_DVB_FIREDTV is not set + +# +# Supported Earthsoft PT1 Adapters +# +# CONFIG_DVB_PT1 is not set + +# +# Supported Mantis Adapters +# +# CONFIG_MANTIS_CORE is not set + +# +# Supported nGene Adapters +# +# CONFIG_DVB_NGENE is not set + +# +# Supported DVB Frontends +# +CONFIG_DVB_FE_CUSTOMISE=y + +# +# Customise DVB Frontends +# + +# +# Multistandard (satellite) frontends +# +# CONFIG_DVB_STB0899 is not set +# CONFIG_DVB_STB6100 is not set +# CONFIG_DVB_STV090x is not set +# CONFIG_DVB_STV6110x is not set + +# +# DVB-S (satellite) frontends +# +# CONFIG_DVB_CX24110 is not set +# CONFIG_DVB_CX24123 is not set +# CONFIG_DVB_MT312 is not set +# CONFIG_DVB_ZL10036 is not set +# CONFIG_DVB_ZL10039 is not set +# CONFIG_DVB_S5H1420 is not set +# CONFIG_DVB_STV0288 is not set +# CONFIG_DVB_STB6000 is not set +# CONFIG_DVB_STV0299 is not set +# CONFIG_DVB_STV6110 is not set +# CONFIG_DVB_STV0900 is not set +# CONFIG_DVB_TDA8083 is not set +# CONFIG_DVB_TDA10086 is not set +# CONFIG_DVB_TDA8261 is not set +# CONFIG_DVB_VES1X93 is not set +# CONFIG_DVB_TUNER_ITD1000 is not set +# CONFIG_DVB_TUNER_CX24113 is not set +# CONFIG_DVB_TDA826X is not set +# CONFIG_DVB_TUA6100 is not set +# CONFIG_DVB_CX24116 is not set +# CONFIG_DVB_SI21XX is not set +# CONFIG_DVB_DS3000 is not set +# CONFIG_DVB_MB86A16 is not set + +# +# DVB-T (terrestrial) frontends +# +# CONFIG_DVB_SP8870 is not set +# CONFIG_DVB_SP887X is not set +# CONFIG_DVB_CX22700 is not set +# CONFIG_DVB_CX22702 is not set +# CONFIG_DVB_DRX397XD is not set +# CONFIG_DVB_L64781 is not set +# CONFIG_DVB_TDA1004X is not set +# CONFIG_DVB_NXT6000 is not set +CONFIG_DVB_MT352=m +CONFIG_DVB_ZL10353=m +# CONFIG_DVB_DIB3000MB is not set +# CONFIG_DVB_DIB3000MC is not set +# CONFIG_DVB_DIB7000M is not set +# CONFIG_DVB_DIB7000P is not set +# CONFIG_DVB_TDA10048 is not set +# CONFIG_DVB_AF9013 is not set +# CONFIG_DVB_EC100 is not set + +# +# DVB-C (cable) frontends +# +# CONFIG_DVB_VES1820 is not set +# CONFIG_DVB_TDA10021 is not set +CONFIG_DVB_TDA10023=m +# CONFIG_DVB_STV0297 is not set + +# +# ATSC (North American/Korean Terrestrial/Cable DTV) frontends +# +# CONFIG_DVB_NXT200X is not set +# CONFIG_DVB_OR51211 is not set +# CONFIG_DVB_OR51132 is not set +# CONFIG_DVB_BCM3510 is not set +# CONFIG_DVB_LGDT330X is not set +# CONFIG_DVB_LGDT3304 is not set +# CONFIG_DVB_LGDT3305 is not set +# CONFIG_DVB_S5H1409 is not set +# CONFIG_DVB_S5H1411 is not set + +# +# ISDB-T (terrestrial) frontends +# +# CONFIG_DVB_S921 is not set +# CONFIG_DVB_DIB8000 is not set + +# +# Digital terrestrial only tuners/PLL +# +CONFIG_DVB_PLL=m +# CONFIG_DVB_TUNER_DIB0070 is not set +# CONFIG_DVB_TUNER_DIB0090 is not set + +# +# SEC control devices for DVB-S +# +# CONFIG_DVB_LNBP21 is not set +# CONFIG_DVB_ISL6405 is not set +# CONFIG_DVB_ISL6421 is not set +# CONFIG_DVB_ISL6423 is not set +# CONFIG_DVB_LGS8GL5 is not set +# CONFIG_DVB_LGS8GXX is not set +# CONFIG_DVB_ATBM8830 is not set +# CONFIG_DVB_TDA665x is not set + +# +# Tools to develop new frontends +# +# CONFIG_DVB_DUMMY_FE is not set # CONFIG_DAB is not set # From 61507ecf6bbcd7072ed9b7522596c59e4408126e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 22 Nov 2010 19:36:35 +0100 Subject: [PATCH 481/850] linux: update to linux-2.6.37-rc3, update nouveau drm patches, add script to rename patches Signed-off-by: Stephan Raue --- packages/linux/meta | 2 +- ...36-110-drm_nouveau_upstream-20101104.patch | 21613 ---------------- ...> linux-2.6.37-rc3-000_crosscompile.patch} | 0 ...=> linux-2.6.37-rc3-000_fix_include.patch} | 0 ...rc3-000_fix_userspace_build_of_fs.h.patch} | 0 ...ux-2.6.37-rc3-002_bash_only_feature.patch} | 0 ...linux-2.6.37-rc3-003-no_dev_console.patch} | 0 ...c3-004_lower_undefined_mode_timeout.patch} | 0 ...2.6.37-rc3-005_kconfig_no_timestamp.patch} | 0 ...=> linux-2.6.37-rc3-006_enable_utf8.patch} | 0 ...linux-2.6.37-rc3-007_die_floppy_die.patch} | 0 ...08-hda_intel_prealloc_4mb_dmabuffer.patch} | 0 ...09_disable_i8042_check_on_apple_mac.patch} | 0 ...6.37-rc3-050_add_appleir_usb_driver.patch} | 0 ....37-rc3-052-aureal_remote_quirk-0.1.patch} | 0 ...3-110-drm_nouveau_upstream-20101122.patch} | 1956 +- ...sched-automated-per-tty-task-groups.patch} | 0 packages/linux/patches/rename.sh | 5 + 18 files changed, 521 insertions(+), 23055 deletions(-) delete mode 100644 packages/linux/patches/linux-2.6.36-110-drm_nouveau_upstream-20101104.patch rename packages/linux/patches/{linux-2.6.37-rc2-000_crosscompile.patch => linux-2.6.37-rc3-000_crosscompile.patch} (100%) rename packages/linux/patches/{linux-2.6.37-rc2-000_fix_include.patch => linux-2.6.37-rc3-000_fix_include.patch} (100%) rename packages/linux/patches/{linux-2.6.37-rc2-000_fix_userspace_build_of_fs.h.patch => linux-2.6.37-rc3-000_fix_userspace_build_of_fs.h.patch} (100%) rename packages/linux/patches/{linux-2.6.37-rc2-002_bash_only_feature.patch => linux-2.6.37-rc3-002_bash_only_feature.patch} (100%) rename packages/linux/patches/{linux-2.6.37-rc2-003-no_dev_console.patch => linux-2.6.37-rc3-003-no_dev_console.patch} (100%) rename packages/linux/patches/{linux-2.6.37-rc2-004_lower_undefined_mode_timeout.patch => linux-2.6.37-rc3-004_lower_undefined_mode_timeout.patch} (100%) rename packages/linux/patches/{linux-2.6.37-rc2-005_kconfig_no_timestamp.patch => linux-2.6.37-rc3-005_kconfig_no_timestamp.patch} (100%) rename packages/linux/patches/{linux-2.6.37-rc2-006_enable_utf8.patch => linux-2.6.37-rc3-006_enable_utf8.patch} (100%) rename packages/linux/patches/{linux-2.6.37-rc2-007_die_floppy_die.patch => linux-2.6.37-rc3-007_die_floppy_die.patch} (100%) rename packages/linux/patches/{linux-2.6.37-rc2-008-hda_intel_prealloc_4mb_dmabuffer.patch => linux-2.6.37-rc3-008-hda_intel_prealloc_4mb_dmabuffer.patch} (100%) rename packages/linux/patches/{linux-2.6.37-rc2-009_disable_i8042_check_on_apple_mac.patch => linux-2.6.37-rc3-009_disable_i8042_check_on_apple_mac.patch} (100%) rename packages/linux/patches/{linux-2.6.37-rc2-050_add_appleir_usb_driver.patch => linux-2.6.37-rc3-050_add_appleir_usb_driver.patch} (100%) rename packages/linux/patches/{linux-2.6.37-rc2-052-aureal_remote_quirk-0.1.patch => linux-2.6.37-rc3-052-aureal_remote_quirk-0.1.patch} (100%) rename packages/linux/patches/{linux-2.6.37-rc2-110-drm_nouveau_upstream-20101121.patch => linux-2.6.37-rc3-110-drm_nouveau_upstream-20101122.patch} (87%) rename packages/linux/patches/{linux-2.6.37-rc2-120_RFC-RFT-v3-sched-automated-per-tty-task-groups.patch => linux-2.6.37-rc3-120_RFC-RFT-v3-sched-automated-per-tty-task-groups.patch} (100%) create mode 100755 packages/linux/patches/rename.sh diff --git a/packages/linux/meta b/packages/linux/meta index 7953dafa85..a09710262e 100644 --- a/packages/linux/meta +++ b/packages/linux/meta @@ -14,6 +14,6 @@ PKG_LONGDESC="This package contains a precompiled kernel image and the modules." PKG_IS_ADDON="no" if [ "$LINUX_NEXT" = "yes" ]; then - PKG_VERSION="2.6.37-rc2" + PKG_VERSION="2.6.37-rc3" PKG_URL="http://www.kernel.org/pub/linux/kernel/v2.6/testing/$PKG_NAME-$PKG_VERSION.tar.bz2" fi diff --git a/packages/linux/patches/linux-2.6.36-110-drm_nouveau_upstream-20101104.patch b/packages/linux/patches/linux-2.6.36-110-drm_nouveau_upstream-20101104.patch deleted file mode 100644 index e1117bffd6..0000000000 --- a/packages/linux/patches/linux-2.6.36-110-drm_nouveau_upstream-20101104.patch +++ /dev/null @@ -1,21613 +0,0 @@ -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/Kconfig linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/Kconfig ---- linux-2.6.36/drivers/gpu/drm/nouveau/Kconfig 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/Kconfig 2010-11-05 00:40:00.000000000 +0100 -@@ -10,6 +10,7 @@ - select FB - select FRAMEBUFFER_CONSOLE if !EMBEDDED - select FB_BACKLIGHT if DRM_NOUVEAU_BACKLIGHT -+ select ACPI_VIDEO if ACPI - help - Choose this option for open-source nVidia support. - -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/Makefile linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/Makefile ---- linux-2.6.36/drivers/gpu/drm/nouveau/Makefile 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/Makefile 2010-11-05 00:40:00.000000000 +0100 -@@ -9,7 +9,8 @@ - nouveau_bo.o nouveau_fence.o nouveau_gem.o nouveau_ttm.o \ - nouveau_hw.o nouveau_calc.o nouveau_bios.o nouveau_i2c.o \ - nouveau_display.o nouveau_connector.o nouveau_fbcon.o \ -- nouveau_dp.o \ -+ nouveau_dp.o nouveau_ramht.o \ -+ nouveau_pm.o nouveau_volt.o nouveau_perf.o nouveau_temp.o \ - nv04_timer.o \ - nv04_mc.o nv40_mc.o nv50_mc.o \ - nv04_fb.o nv10_fb.o nv30_fb.o nv40_fb.o nv50_fb.o nvc0_fb.o \ -@@ -17,13 +18,15 @@ - nv04_graph.o nv10_graph.o nv20_graph.o \ - nv40_graph.o nv50_graph.o nvc0_graph.o \ - nv40_grctx.o nv50_grctx.o \ -+ nv84_crypt.o \ - nv04_instmem.o nv50_instmem.o nvc0_instmem.o \ -- nv50_crtc.o nv50_dac.o nv50_sor.o \ -+ nv50_evo.o nv50_crtc.o nv50_dac.o nv50_sor.o \ - nv50_cursor.o nv50_display.o nv50_fbcon.o \ - nv04_dac.o nv04_dfp.o nv04_tv.o nv17_tv.o nv17_tv_modes.o \ - nv04_crtc.o nv04_display.o nv04_cursor.o nv04_fbcon.o \ - nv10_gpio.o nv50_gpio.o \ -- nv50_calc.o -+ nv50_calc.o \ -+ nv04_pm.o nv50_pm.o nva3_pm.o - - nouveau-$(CONFIG_DRM_NOUVEAU_DEBUG) += nouveau_debugfs.o - nouveau-$(CONFIG_COMPAT) += nouveau_ioc32.o -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_acpi.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_acpi.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_acpi.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_acpi.c 2010-11-05 00:40:00.000000000 +0100 -@@ -292,6 +292,6 @@ - if (ret < 0) - return ret; - -- nv_connector->edid = edid; -+ nv_connector->edid = kmemdup(edid, EDID_LENGTH, GFP_KERNEL); - return 0; - } -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_backlight.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_backlight.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_backlight.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_backlight.c 2010-11-05 00:40:00.000000000 +0100 -@@ -31,6 +31,7 @@ - */ - - #include -+#include - - #include "drmP.h" - #include "nouveau_drv.h" -@@ -136,6 +137,14 @@ - { - struct drm_nouveau_private *dev_priv = dev->dev_private; - -+#ifdef CONFIG_ACPI -+ if (acpi_video_backlight_support()) { -+ NV_INFO(dev, "ACPI backlight interface available, " -+ "not registering our own\n"); -+ return 0; -+ } -+#endif -+ - switch (dev_priv->card_type) { - case NV_40: - return nouveau_nv40_backlight_init(dev); -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_bios.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_bios.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_bios.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_bios.c 2010-11-05 00:40:00.000000000 +0100 -@@ -43,9 +43,6 @@ - #define BIOSLOG(sip, fmt, arg...) NV_DEBUG(sip->dev, fmt, ##arg) - #define LOG_OLD_VALUE(x) - --#define ROM16(x) le16_to_cpu(*(uint16_t *)&(x)) --#define ROM32(x) le32_to_cpu(*(uint32_t *)&(x)) -- - struct init_exec { - bool execute; - bool repeat; -@@ -272,12 +269,6 @@ - int (*handler)(struct nvbios *, uint16_t, struct init_exec *); - }; - --struct bit_entry { -- uint8_t id[2]; -- uint16_t length; -- uint16_t offset; --}; -- - static int parse_init_table(struct nvbios *, unsigned int, struct init_exec *); - - #define MACRO_INDEX_SIZE 2 -@@ -1231,7 +1222,7 @@ - return 3; - } - -- if (cond & 1) -+ if (!(cond & 1)) - iexec->execute = false; - } - break; -@@ -4675,6 +4666,92 @@ - return 0; - } - -+struct pll_mapping { -+ u8 type; -+ u32 reg; -+}; -+ -+static struct pll_mapping nv04_pll_mapping[] = { -+ { PLL_CORE , NV_PRAMDAC_NVPLL_COEFF }, -+ { PLL_MEMORY, NV_PRAMDAC_MPLL_COEFF }, -+ { PLL_VPLL0 , NV_PRAMDAC_VPLL_COEFF }, -+ { PLL_VPLL1 , NV_RAMDAC_VPLL2 }, -+ {} -+}; -+ -+static struct pll_mapping nv40_pll_mapping[] = { -+ { PLL_CORE , 0x004000 }, -+ { PLL_MEMORY, 0x004020 }, -+ { PLL_VPLL0 , NV_PRAMDAC_VPLL_COEFF }, -+ { PLL_VPLL1 , NV_RAMDAC_VPLL2 }, -+ {} -+}; -+ -+static struct pll_mapping nv50_pll_mapping[] = { -+ { PLL_CORE , 0x004028 }, -+ { PLL_SHADER, 0x004020 }, -+ { PLL_UNK03 , 0x004000 }, -+ { PLL_MEMORY, 0x004008 }, -+ { PLL_UNK40 , 0x00e810 }, -+ { PLL_UNK41 , 0x00e818 }, -+ { PLL_UNK42 , 0x00e824 }, -+ { PLL_VPLL0 , 0x614100 }, -+ { PLL_VPLL1 , 0x614900 }, -+ {} -+}; -+ -+static struct pll_mapping nv84_pll_mapping[] = { -+ { PLL_CORE , 0x004028 }, -+ { PLL_SHADER, 0x004020 }, -+ { PLL_MEMORY, 0x004008 }, -+ { PLL_UNK05 , 0x004030 }, -+ { PLL_UNK41 , 0x00e818 }, -+ { PLL_VPLL0 , 0x614100 }, -+ { PLL_VPLL1 , 0x614900 }, -+ {} -+}; -+ -+u32 -+get_pll_register(struct drm_device *dev, enum pll_types type) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nvbios *bios = &dev_priv->vbios; -+ struct pll_mapping *map; -+ int i; -+ -+ if (dev_priv->card_type < NV_40) -+ map = nv04_pll_mapping; -+ else -+ if (dev_priv->card_type < NV_50) -+ map = nv40_pll_mapping; -+ else { -+ u8 *plim = &bios->data[bios->pll_limit_tbl_ptr]; -+ -+ if (plim[0] >= 0x30) { -+ u8 *entry = plim + plim[1]; -+ for (i = 0; i < plim[3]; i++, entry += plim[2]) { -+ if (entry[0] == type) -+ return ROM32(entry[3]); -+ } -+ -+ return 0; -+ } -+ -+ if (dev_priv->chipset == 0x50) -+ map = nv50_pll_mapping; -+ else -+ map = nv84_pll_mapping; -+ } -+ -+ while (map->reg) { -+ if (map->type == type) -+ return map->reg; -+ map++; -+ } -+ -+ return 0; -+} -+ - int get_pll_limits(struct drm_device *dev, uint32_t limit_match, struct pll_lims *pll_lim) - { - /* -@@ -4750,6 +4827,17 @@ - /* initialize all members to zero */ - memset(pll_lim, 0, sizeof(struct pll_lims)); - -+ /* if we were passed a type rather than a register, figure -+ * out the register and store it -+ */ -+ if (limit_match > PLL_MAX) -+ pll_lim->reg = limit_match; -+ else { -+ pll_lim->reg = get_pll_register(dev, limit_match); -+ if (!pll_lim->reg) -+ return -ENOENT; -+ } -+ - if (pll_lim_ver == 0x10 || pll_lim_ver == 0x11) { - uint8_t *pll_rec = &bios->data[bios->pll_limit_tbl_ptr + headerlen + recordlen * pllindex]; - -@@ -4785,7 +4873,6 @@ - pll_lim->max_usable_log2p = 0x6; - } else if (pll_lim_ver == 0x20 || pll_lim_ver == 0x21) { - uint16_t plloffs = bios->pll_limit_tbl_ptr + headerlen; -- uint32_t reg = 0; /* default match */ - uint8_t *pll_rec; - int i; - -@@ -4797,37 +4884,22 @@ - NV_WARN(dev, "Default PLL limit entry has non-zero " - "register field\n"); - -- if (limit_match > MAX_PLL_TYPES) -- /* we've been passed a reg as the match */ -- reg = limit_match; -- else /* limit match is a pll type */ -- for (i = 1; i < entries && !reg; i++) { -- uint32_t cmpreg = ROM32(bios->data[plloffs + recordlen * i]); -- -- if (limit_match == NVPLL && -- (cmpreg == NV_PRAMDAC_NVPLL_COEFF || cmpreg == 0x4000)) -- reg = cmpreg; -- if (limit_match == MPLL && -- (cmpreg == NV_PRAMDAC_MPLL_COEFF || cmpreg == 0x4020)) -- reg = cmpreg; -- if (limit_match == VPLL1 && -- (cmpreg == NV_PRAMDAC_VPLL_COEFF || cmpreg == 0x4010)) -- reg = cmpreg; -- if (limit_match == VPLL2 && -- (cmpreg == NV_RAMDAC_VPLL2 || cmpreg == 0x4018)) -- reg = cmpreg; -- } -- - for (i = 1; i < entries; i++) -- if (ROM32(bios->data[plloffs + recordlen * i]) == reg) { -+ if (ROM32(bios->data[plloffs + recordlen * i]) == pll_lim->reg) { - pllindex = i; - break; - } - -+ if ((dev_priv->card_type >= NV_50) && (pllindex == 0)) { -+ NV_ERROR(dev, "Register 0x%08x not found in PLL " -+ "limits table", pll_lim->reg); -+ return -ENOENT; -+ } -+ - pll_rec = &bios->data[plloffs + recordlen * pllindex]; - - BIOSLOG(bios, "Loading PLL limits for reg 0x%08x\n", -- pllindex ? reg : 0); -+ pllindex ? pll_lim->reg : 0); - - /* - * Frequencies are stored in tables in MHz, kHz are more -@@ -4877,8 +4949,8 @@ - if (cv == 0x51 && !pll_lim->refclk) { - uint32_t sel_clk = bios_rd32(bios, NV_PRAMDAC_SEL_CLK); - -- if (((limit_match == NV_PRAMDAC_VPLL_COEFF || limit_match == VPLL1) && sel_clk & 0x20) || -- ((limit_match == NV_RAMDAC_VPLL2 || limit_match == VPLL2) && sel_clk & 0x80)) { -+ if ((pll_lim->reg == NV_PRAMDAC_VPLL_COEFF && sel_clk & 0x20) || -+ (pll_lim->reg == NV_RAMDAC_VPLL2 && sel_clk & 0x80)) { - if (bios_idxprt_rd(bios, NV_CIO_CRX__COLOR, NV_CIO_CRE_CHIP_ID_INDEX) < 0xa3) - pll_lim->refclk = 200000; - else -@@ -4891,10 +4963,10 @@ - int i; - - BIOSLOG(bios, "Loading PLL limits for register 0x%08x\n", -- limit_match); -+ pll_lim->reg); - - for (i = 0; i < entries; i++, entry += recordlen) { -- if (ROM32(entry[3]) == limit_match) { -+ if (ROM32(entry[3]) == pll_lim->reg) { - record = &bios->data[ROM16(entry[1])]; - break; - } -@@ -4902,7 +4974,7 @@ - - if (!record) { - NV_ERROR(dev, "Register 0x%08x not found in PLL " -- "limits table", limit_match); -+ "limits table", pll_lim->reg); - return -ENOENT; - } - -@@ -4931,10 +5003,10 @@ - int i; - - BIOSLOG(bios, "Loading PLL limits for register 0x%08x\n", -- limit_match); -+ pll_lim->reg); - - for (i = 0; i < entries; i++, entry += recordlen) { -- if (ROM32(entry[3]) == limit_match) { -+ if (ROM32(entry[3]) == pll_lim->reg) { - record = &bios->data[ROM16(entry[1])]; - break; - } -@@ -4942,7 +5014,7 @@ - - if (!record) { - NV_ERROR(dev, "Register 0x%08x not found in PLL " -- "limits table", limit_match); -+ "limits table", pll_lim->reg); - return -ENOENT; - } - -@@ -5293,7 +5365,7 @@ - if (bitentry->length < 0x5) - return 0; - -- if (bitentry->id[1] < 2) { -+ if (bitentry->version < 2) { - bios->ram_restrict_group_count = bios->data[bitentry->offset + 2]; - bios->ram_restrict_tbl_ptr = ROM16(bios->data[bitentry->offset + 3]); - } else { -@@ -5403,27 +5475,40 @@ - - #define BIT_TABLE(id, funcid) ((struct bit_table){ id, parse_bit_##funcid##_tbl_entry }) - -+int -+bit_table(struct drm_device *dev, u8 id, struct bit_entry *bit) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nvbios *bios = &dev_priv->vbios; -+ u8 entries, *entry; -+ -+ entries = bios->data[bios->offset + 10]; -+ entry = &bios->data[bios->offset + 12]; -+ while (entries--) { -+ if (entry[0] == id) { -+ bit->id = entry[0]; -+ bit->version = entry[1]; -+ bit->length = ROM16(entry[2]); -+ bit->offset = ROM16(entry[4]); -+ bit->data = ROMPTR(bios, entry[4]); -+ return 0; -+ } -+ -+ entry += bios->data[bios->offset + 9]; -+ } -+ -+ return -ENOENT; -+} -+ - static int - parse_bit_table(struct nvbios *bios, const uint16_t bitoffset, - struct bit_table *table) - { - struct drm_device *dev = bios->dev; -- uint8_t maxentries = bios->data[bitoffset + 4]; -- int i, offset; - struct bit_entry bitentry; - -- for (i = 0, offset = bitoffset + 6; i < maxentries; i++, offset += 6) { -- bitentry.id[0] = bios->data[offset]; -- -- if (bitentry.id[0] != table->id) -- continue; -- -- bitentry.id[1] = bios->data[offset + 1]; -- bitentry.length = ROM16(bios->data[offset + 2]); -- bitentry.offset = ROM16(bios->data[offset + 4]); -- -+ if (bit_table(dev, table->id, &bitentry) == 0) - return table->parse_fn(dev, bios, &bitentry); -- } - - NV_INFO(dev, "BIT table '%c' not found\n", table->id); - return -ENOSYS; -@@ -5683,8 +5768,14 @@ - static struct dcb_gpio_entry * - new_gpio_entry(struct nvbios *bios) - { -+ struct drm_device *dev = bios->dev; - struct dcb_gpio_table *gpio = &bios->dcb.gpio; - -+ if (gpio->entries >= DCB_MAX_NUM_GPIO_ENTRIES) { -+ NV_ERROR(dev, "exceeded maximum number of gpio entries!!\n"); -+ return NULL; -+ } -+ - return &gpio->entry[gpio->entries++]; - } - -@@ -5706,113 +5797,90 @@ - } - - static void --parse_dcb30_gpio_entry(struct nvbios *bios, uint16_t offset) --{ -- struct dcb_gpio_entry *gpio; -- uint16_t ent = ROM16(bios->data[offset]); -- uint8_t line = ent & 0x1f, -- tag = ent >> 5 & 0x3f, -- flags = ent >> 11 & 0x1f; -- -- if (tag == 0x3f) -- return; -- -- gpio = new_gpio_entry(bios); -- -- gpio->tag = tag; -- gpio->line = line; -- gpio->invert = flags != 4; -- gpio->entry = ent; --} -- --static void --parse_dcb40_gpio_entry(struct nvbios *bios, uint16_t offset) --{ -- uint32_t entry = ROM32(bios->data[offset]); -- struct dcb_gpio_entry *gpio; -- -- if ((entry & 0x0000ff00) == 0x0000ff00) -- return; -- -- gpio = new_gpio_entry(bios); -- gpio->tag = (entry & 0x0000ff00) >> 8; -- gpio->line = (entry & 0x0000001f) >> 0; -- gpio->state_default = (entry & 0x01000000) >> 24; -- gpio->state[0] = (entry & 0x18000000) >> 27; -- gpio->state[1] = (entry & 0x60000000) >> 29; -- gpio->entry = entry; --} -- --static void - parse_dcb_gpio_table(struct nvbios *bios) - { - struct drm_device *dev = bios->dev; -- uint16_t gpio_table_ptr = bios->dcb.gpio_table_ptr; -- uint8_t *gpio_table = &bios->data[gpio_table_ptr]; -- int header_len = gpio_table[1], -- entries = gpio_table[2], -- entry_len = gpio_table[3]; -- void (*parse_entry)(struct nvbios *, uint16_t) = NULL; -+ struct dcb_gpio_entry *e; -+ u8 headerlen, entries, recordlen; -+ u8 *dcb, *gpio = NULL, *entry; - int i; - -- if (bios->dcb.version >= 0x40) { -- if (gpio_table_ptr && entry_len != 4) { -- NV_WARN(dev, "Invalid DCB GPIO table entry length.\n"); -- return; -- } -- -- parse_entry = parse_dcb40_gpio_entry; -+ dcb = ROMPTR(bios, bios->data[0x36]); -+ if (dcb[0] >= 0x30) { -+ gpio = ROMPTR(bios, dcb[10]); -+ if (!gpio) -+ goto no_table; -+ -+ headerlen = gpio[1]; -+ entries = gpio[2]; -+ recordlen = gpio[3]; -+ } else -+ if (dcb[0] >= 0x22 && dcb[-1] >= 0x13) { -+ gpio = ROMPTR(bios, dcb[-15]); -+ if (!gpio) -+ goto no_table; -+ -+ headerlen = 3; -+ entries = gpio[2]; -+ recordlen = gpio[1]; -+ } else -+ if (dcb[0] >= 0x22) { -+ /* No GPIO table present, parse the TVDAC GPIO data. */ -+ uint8_t *tvdac_gpio = &dcb[-5]; - -- } else if (bios->dcb.version >= 0x30) { -- if (gpio_table_ptr && entry_len != 2) { -- NV_WARN(dev, "Invalid DCB GPIO table entry length.\n"); -- return; -+ if (tvdac_gpio[0] & 1) { -+ e = new_gpio_entry(bios); -+ e->tag = DCB_GPIO_TVDAC0; -+ e->line = tvdac_gpio[1] >> 4; -+ e->invert = tvdac_gpio[0] & 2; - } - -- parse_entry = parse_dcb30_gpio_entry; -- -- } else if (bios->dcb.version >= 0x22) { -- /* -- * DCBs older than v3.0 don't really have a GPIO -- * table, instead they keep some GPIO info at fixed -- * locations. -- */ -- uint16_t dcbptr = ROM16(bios->data[0x36]); -- uint8_t *tvdac_gpio = &bios->data[dcbptr - 5]; -+ goto no_table; -+ } else { -+ NV_DEBUG(dev, "no/unknown gpio table on DCB 0x%02x\n", dcb[0]); -+ goto no_table; -+ } - -- if (tvdac_gpio[0] & 1) { -- struct dcb_gpio_entry *gpio = new_gpio_entry(bios); -+ entry = gpio + headerlen; -+ for (i = 0; i < entries; i++, entry += recordlen) { -+ e = new_gpio_entry(bios); -+ if (!e) -+ break; - -- gpio->tag = DCB_GPIO_TVDAC0; -- gpio->line = tvdac_gpio[1] >> 4; -- gpio->invert = tvdac_gpio[0] & 2; -- } -- } else { -- /* -- * No systematic way to store GPIO info on pre-v2.2 -- * DCBs, try to match the PCI device IDs. -- */ -+ if (gpio[0] < 0x40) { -+ e->entry = ROM16(entry[0]); -+ e->tag = (e->entry & 0x07e0) >> 5; -+ if (e->tag == 0x3f) { -+ bios->dcb.gpio.entries--; -+ continue; -+ } - -- /* Apple iMac G4 NV18 */ -- if (nv_match_device(dev, 0x0189, 0x10de, 0x0010)) { -- struct dcb_gpio_entry *gpio = new_gpio_entry(bios); -+ e->line = (e->entry & 0x001f); -+ e->invert = ((e->entry & 0xf800) >> 11) != 4; -+ } else { -+ e->entry = ROM32(entry[0]); -+ e->tag = (e->entry & 0x0000ff00) >> 8; -+ if (e->tag == 0xff) { -+ bios->dcb.gpio.entries--; -+ continue; -+ } - -- gpio->tag = DCB_GPIO_TVDAC0; -- gpio->line = 4; -+ e->line = (e->entry & 0x0000001f) >> 0; -+ e->state_default = (e->entry & 0x01000000) >> 24; -+ e->state[0] = (e->entry & 0x18000000) >> 27; -+ e->state[1] = (e->entry & 0x60000000) >> 29; - } -- - } - -- if (!gpio_table_ptr) -- return; -- -- if (entries > DCB_MAX_NUM_GPIO_ENTRIES) { -- NV_WARN(dev, "Too many entries in the DCB GPIO table.\n"); -- entries = DCB_MAX_NUM_GPIO_ENTRIES; -+no_table: -+ /* Apple iMac G4 NV18 */ -+ if (nv_match_device(dev, 0x0189, 0x10de, 0x0010)) { -+ e = new_gpio_entry(bios); -+ if (e) { -+ e->tag = DCB_GPIO_TVDAC0; -+ e->line = 4; -+ } - } -- -- for (i = 0; i < entries; i++) -- parse_entry(bios, gpio_table_ptr + header_len + entry_len * i); - } - - struct dcb_connector_table_entry * -@@ -5971,7 +6039,6 @@ - if (type != cte->type) - NV_WARN(dev, " -> type 0x%02x\n", cte->type); - } -- - } - } - -@@ -6680,6 +6747,8 @@ - bit_signature, sizeof(bit_signature)); - if (offset) { - NV_TRACE(dev, "BIT BIOS found\n"); -+ bios->type = NVBIOS_BIT; -+ bios->offset = offset; - return parse_bit_structure(bios, offset + 6); - } - -@@ -6687,6 +6756,8 @@ - bmp_signature, sizeof(bmp_signature)); - if (offset) { - NV_TRACE(dev, "BMP BIOS found\n"); -+ bios->type = NVBIOS_BMP; -+ bios->offset = offset; - return parse_bmp_structure(dev, bios, offset); - } - -@@ -6806,6 +6877,8 @@ - "running VBIOS init tables.\n"); - bios->execute = true; - } -+ if (nouveau_force_post) -+ bios->execute = true; - - ret = nouveau_run_vbios_init(dev); - if (ret) -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_bios.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_bios.h ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_bios.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_bios.h 2010-11-05 00:40:00.000000000 +0100 -@@ -34,6 +34,20 @@ - - #define DCB_LOC_ON_CHIP 0 - -+#define ROM16(x) le16_to_cpu(*(uint16_t *)&(x)) -+#define ROM32(x) le32_to_cpu(*(uint32_t *)&(x)) -+#define ROMPTR(bios, x) (ROM16(x) ? &(bios)->data[ROM16(x)] : NULL) -+ -+struct bit_entry { -+ uint8_t id; -+ uint8_t version; -+ uint16_t length; -+ uint16_t offset; -+ uint8_t *data; -+}; -+ -+int bit_table(struct drm_device *, u8 id, struct bit_entry *); -+ - struct dcb_i2c_entry { - uint32_t entry; - uint8_t port_type; -@@ -170,16 +184,28 @@ - LVDS_PANEL_OFF - }; - --/* changing these requires matching changes to reg tables in nv_get_clock */ --#define MAX_PLL_TYPES 4 -+/* these match types in pll limits table version 0x40, -+ * nouveau uses them on all chipsets internally where a -+ * specific pll needs to be referenced, but the exact -+ * register isn't known. -+ */ - enum pll_types { -- NVPLL, -- MPLL, -- VPLL1, -- VPLL2 -+ PLL_CORE = 0x01, -+ PLL_SHADER = 0x02, -+ PLL_UNK03 = 0x03, -+ PLL_MEMORY = 0x04, -+ PLL_UNK05 = 0x05, -+ PLL_UNK40 = 0x40, -+ PLL_UNK41 = 0x41, -+ PLL_UNK42 = 0x42, -+ PLL_VPLL0 = 0x80, -+ PLL_VPLL1 = 0x81, -+ PLL_MAX = 0xff - }; - - struct pll_lims { -+ u32 reg; -+ - struct { - int minfreq; - int maxfreq; -@@ -212,6 +238,11 @@ - - struct nvbios { - struct drm_device *dev; -+ enum { -+ NVBIOS_BMP, -+ NVBIOS_BIT -+ } type; -+ uint16_t offset; - - uint8_t chip_version; - -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_bo.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_bo.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_bo.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_bo.c 2010-11-05 00:40:00.000000000 +0100 -@@ -36,21 +36,6 @@ - #include - #include - --int --nouveau_bo_sync_gpu(struct nouveau_bo *nvbo, struct nouveau_channel *chan) --{ -- struct nouveau_fence *prev_fence = nvbo->bo.sync_obj; -- int ret; -- -- if (!prev_fence || nouveau_fence_channel(prev_fence) == chan) -- return 0; -- -- spin_lock(&nvbo->bo.lock); -- ret = ttm_bo_wait(&nvbo->bo, false, false, false); -- spin_unlock(&nvbo->bo.lock); -- return ret; --} -- - static void - nouveau_bo_del_ttm(struct ttm_buffer_object *bo) - { -@@ -58,14 +43,10 @@ - struct drm_device *dev = dev_priv->dev; - struct nouveau_bo *nvbo = nouveau_bo(bo); - -- ttm_bo_kunmap(&nvbo->kmap); -- - if (unlikely(nvbo->gem)) - DRM_ERROR("bo %p still attached to GEM object\n", bo); - -- if (nvbo->tile) -- nv10_mem_expire_tiling(dev, nvbo->tile, NULL); -- -+ nv10_mem_put_tile_region(dev, nvbo->tile, NULL); - kfree(nvbo); - } - -@@ -160,12 +141,12 @@ - nvbo->no_vm = no_vm; - nvbo->tile_mode = tile_mode; - nvbo->tile_flags = tile_flags; -+ nvbo->bo.bdev = &dev_priv->ttm.bdev; - -- nouveau_bo_fixup_align(dev, tile_mode, tile_flags, &align, &size); -+ nouveau_bo_fixup_align(dev, tile_mode, nouveau_bo_tile_layout(nvbo), -+ &align, &size); - align >>= PAGE_SHIFT; - -- nvbo->placement.fpfn = 0; -- nvbo->placement.lpfn = mappable ? dev_priv->fb_mappable_pages : 0; - nouveau_bo_placement_set(nvbo, flags, 0); - - nvbo->channel = chan; -@@ -195,6 +176,31 @@ - pl[(*n)++] = TTM_PL_FLAG_SYSTEM | flags; - } - -+static void -+set_placement_range(struct nouveau_bo *nvbo, uint32_t type) -+{ -+ struct drm_nouveau_private *dev_priv = nouveau_bdev(nvbo->bo.bdev); -+ -+ if (dev_priv->card_type == NV_10 && -+ nvbo->tile_mode && (type & TTM_PL_FLAG_VRAM)) { -+ /* -+ * Make sure that the color and depth buffers are handled -+ * by independent memory controller units. Up to a 9x -+ * speed up when alpha-blending and depth-test are enabled -+ * at the same time. -+ */ -+ int vram_pages = dev_priv->vram_size >> PAGE_SHIFT; -+ -+ if (nvbo->tile_flags & NOUVEAU_GEM_TILE_ZETA) { -+ nvbo->placement.fpfn = vram_pages / 2; -+ nvbo->placement.lpfn = ~0; -+ } else { -+ nvbo->placement.fpfn = 0; -+ nvbo->placement.lpfn = vram_pages / 2; -+ } -+ } -+} -+ - void - nouveau_bo_placement_set(struct nouveau_bo *nvbo, uint32_t type, uint32_t busy) - { -@@ -209,6 +215,8 @@ - pl->busy_placement = nvbo->busy_placements; - set_placement_list(nvbo->busy_placements, &pl->num_busy_placement, - type | busy, flags); -+ -+ set_placement_range(nvbo, type); - } - - int -@@ -305,7 +313,8 @@ - void - nouveau_bo_unmap(struct nouveau_bo *nvbo) - { -- ttm_bo_kunmap(&nvbo->kmap); -+ if (nvbo) -+ ttm_bo_kunmap(&nvbo->kmap); - } - - u16 -@@ -399,14 +408,19 @@ - man->default_caching = TTM_PL_FLAG_CACHED; - break; - case TTM_PL_VRAM: -+ man->func = &ttm_bo_manager_func; - man->flags = TTM_MEMTYPE_FLAG_FIXED | - TTM_MEMTYPE_FLAG_MAPPABLE; - man->available_caching = TTM_PL_FLAG_UNCACHED | - TTM_PL_FLAG_WC; - man->default_caching = TTM_PL_FLAG_WC; -- man->gpu_offset = dev_priv->vm_vram_base; -+ if (dev_priv->card_type == NV_50) -+ man->gpu_offset = 0x40000000; -+ else -+ man->gpu_offset = 0; - break; - case TTM_PL_TT: -+ man->func = &ttm_bo_manager_func; - switch (dev_priv->gart_info.type) { - case NOUVEAU_GART_AGP: - man->flags = TTM_MEMTYPE_FLAG_MAPPABLE; -@@ -469,19 +483,19 @@ - if (ret) - return ret; - -- ret = ttm_bo_move_accel_cleanup(&nvbo->bo, fence, NULL, -- evict || (nvbo->channel && -- nvbo->channel != chan), -+ ret = ttm_bo_move_accel_cleanup(&nvbo->bo, fence, NULL, evict, - no_wait_reserve, no_wait_gpu, new_mem); -- nouveau_fence_unref((void *)&fence); -+ nouveau_fence_unref(&fence); - return ret; - } - - static inline uint32_t --nouveau_bo_mem_ctxdma(struct nouveau_bo *nvbo, struct nouveau_channel *chan, -- struct ttm_mem_reg *mem) -+nouveau_bo_mem_ctxdma(struct ttm_buffer_object *bo, -+ struct nouveau_channel *chan, struct ttm_mem_reg *mem) - { -- if (chan == nouveau_bdev(nvbo->bo.bdev)->channel) { -+ struct nouveau_bo *nvbo = nouveau_bo(bo); -+ -+ if (nvbo->no_vm) { - if (mem->mem_type == TTM_PL_TT) - return NvDmaGART; - return NvDmaVRAM; -@@ -493,87 +507,191 @@ - } - - static int --nouveau_bo_move_m2mf(struct ttm_buffer_object *bo, int evict, bool intr, -- bool no_wait_reserve, bool no_wait_gpu, -- struct ttm_mem_reg *new_mem) -+nv50_bo_move_m2mf(struct nouveau_channel *chan, struct ttm_buffer_object *bo, -+ struct ttm_mem_reg *old_mem, struct ttm_mem_reg *new_mem) - { -- struct nouveau_bo *nvbo = nouveau_bo(bo); - struct drm_nouveau_private *dev_priv = nouveau_bdev(bo->bdev); -- struct ttm_mem_reg *old_mem = &bo->mem; -- struct nouveau_channel *chan; -- uint64_t src_offset, dst_offset; -- uint32_t page_count; -+ struct nouveau_bo *nvbo = nouveau_bo(bo); -+ u64 length = (new_mem->num_pages << PAGE_SHIFT); -+ u64 src_offset, dst_offset; - int ret; - -- chan = nvbo->channel; -- if (!chan || nvbo->tile_flags || nvbo->no_vm) -- chan = dev_priv->channel; -- -- src_offset = old_mem->mm_node->start << PAGE_SHIFT; -- dst_offset = new_mem->mm_node->start << PAGE_SHIFT; -- if (chan != dev_priv->channel) { -- if (old_mem->mem_type == TTM_PL_TT) -- src_offset += dev_priv->vm_gart_base; -- else -+ src_offset = old_mem->start << PAGE_SHIFT; -+ dst_offset = new_mem->start << PAGE_SHIFT; -+ if (!nvbo->no_vm) { -+ if (old_mem->mem_type == TTM_PL_VRAM) - src_offset += dev_priv->vm_vram_base; -- -- if (new_mem->mem_type == TTM_PL_TT) -- dst_offset += dev_priv->vm_gart_base; - else -+ src_offset += dev_priv->vm_gart_base; -+ -+ if (new_mem->mem_type == TTM_PL_VRAM) - dst_offset += dev_priv->vm_vram_base; -+ else -+ dst_offset += dev_priv->vm_gart_base; - } - - ret = RING_SPACE(chan, 3); - if (ret) - return ret; -- BEGIN_RING(chan, NvSubM2MF, NV_MEMORY_TO_MEMORY_FORMAT_DMA_SOURCE, 2); -- OUT_RING(chan, nouveau_bo_mem_ctxdma(nvbo, chan, old_mem)); -- OUT_RING(chan, nouveau_bo_mem_ctxdma(nvbo, chan, new_mem)); - -- if (dev_priv->card_type >= NV_50) { -- ret = RING_SPACE(chan, 4); -+ BEGIN_RING(chan, NvSubM2MF, 0x0184, 2); -+ OUT_RING (chan, nouveau_bo_mem_ctxdma(bo, chan, old_mem)); -+ OUT_RING (chan, nouveau_bo_mem_ctxdma(bo, chan, new_mem)); -+ -+ while (length) { -+ u32 amount, stride, height; -+ -+ amount = min(length, (u64)(4 * 1024 * 1024)); -+ stride = 16 * 4; -+ height = amount / stride; -+ -+ if (new_mem->mem_type == TTM_PL_VRAM && -+ nouveau_bo_tile_layout(nvbo)) { -+ ret = RING_SPACE(chan, 8); -+ if (ret) -+ return ret; -+ -+ BEGIN_RING(chan, NvSubM2MF, 0x0200, 7); -+ OUT_RING (chan, 0); -+ OUT_RING (chan, 0); -+ OUT_RING (chan, stride); -+ OUT_RING (chan, height); -+ OUT_RING (chan, 1); -+ OUT_RING (chan, 0); -+ OUT_RING (chan, 0); -+ } else { -+ ret = RING_SPACE(chan, 2); -+ if (ret) -+ return ret; -+ -+ BEGIN_RING(chan, NvSubM2MF, 0x0200, 1); -+ OUT_RING (chan, 1); -+ } -+ if (old_mem->mem_type == TTM_PL_VRAM && -+ nouveau_bo_tile_layout(nvbo)) { -+ ret = RING_SPACE(chan, 8); -+ if (ret) -+ return ret; -+ -+ BEGIN_RING(chan, NvSubM2MF, 0x021c, 7); -+ OUT_RING (chan, 0); -+ OUT_RING (chan, 0); -+ OUT_RING (chan, stride); -+ OUT_RING (chan, height); -+ OUT_RING (chan, 1); -+ OUT_RING (chan, 0); -+ OUT_RING (chan, 0); -+ } else { -+ ret = RING_SPACE(chan, 2); -+ if (ret) -+ return ret; -+ -+ BEGIN_RING(chan, NvSubM2MF, 0x021c, 1); -+ OUT_RING (chan, 1); -+ } -+ -+ ret = RING_SPACE(chan, 14); - if (ret) - return ret; -- BEGIN_RING(chan, NvSubM2MF, 0x0200, 1); -- OUT_RING(chan, 1); -- BEGIN_RING(chan, NvSubM2MF, 0x021c, 1); -- OUT_RING(chan, 1); -+ -+ BEGIN_RING(chan, NvSubM2MF, 0x0238, 2); -+ OUT_RING (chan, upper_32_bits(src_offset)); -+ OUT_RING (chan, upper_32_bits(dst_offset)); -+ BEGIN_RING(chan, NvSubM2MF, 0x030c, 8); -+ OUT_RING (chan, lower_32_bits(src_offset)); -+ OUT_RING (chan, lower_32_bits(dst_offset)); -+ OUT_RING (chan, stride); -+ OUT_RING (chan, stride); -+ OUT_RING (chan, stride); -+ OUT_RING (chan, height); -+ OUT_RING (chan, 0x00000101); -+ OUT_RING (chan, 0x00000000); -+ BEGIN_RING(chan, NvSubM2MF, NV_MEMORY_TO_MEMORY_FORMAT_NOP, 1); -+ OUT_RING (chan, 0); -+ -+ length -= amount; -+ src_offset += amount; -+ dst_offset += amount; - } - -+ return 0; -+} -+ -+static int -+nv04_bo_move_m2mf(struct nouveau_channel *chan, struct ttm_buffer_object *bo, -+ struct ttm_mem_reg *old_mem, struct ttm_mem_reg *new_mem) -+{ -+ u32 src_offset = old_mem->start << PAGE_SHIFT; -+ u32 dst_offset = new_mem->start << PAGE_SHIFT; -+ u32 page_count = new_mem->num_pages; -+ int ret; -+ -+ ret = RING_SPACE(chan, 3); -+ if (ret) -+ return ret; -+ -+ BEGIN_RING(chan, NvSubM2MF, NV_MEMORY_TO_MEMORY_FORMAT_DMA_SOURCE, 2); -+ OUT_RING (chan, nouveau_bo_mem_ctxdma(bo, chan, old_mem)); -+ OUT_RING (chan, nouveau_bo_mem_ctxdma(bo, chan, new_mem)); -+ - page_count = new_mem->num_pages; - while (page_count) { - int line_count = (page_count > 2047) ? 2047 : page_count; - -- if (dev_priv->card_type >= NV_50) { -- ret = RING_SPACE(chan, 3); -- if (ret) -- return ret; -- BEGIN_RING(chan, NvSubM2MF, 0x0238, 2); -- OUT_RING(chan, upper_32_bits(src_offset)); -- OUT_RING(chan, upper_32_bits(dst_offset)); -- } - ret = RING_SPACE(chan, 11); - if (ret) - return ret; -+ - BEGIN_RING(chan, NvSubM2MF, - NV_MEMORY_TO_MEMORY_FORMAT_OFFSET_IN, 8); -- OUT_RING(chan, lower_32_bits(src_offset)); -- OUT_RING(chan, lower_32_bits(dst_offset)); -- OUT_RING(chan, PAGE_SIZE); /* src_pitch */ -- OUT_RING(chan, PAGE_SIZE); /* dst_pitch */ -- OUT_RING(chan, PAGE_SIZE); /* line_length */ -- OUT_RING(chan, line_count); -- OUT_RING(chan, (1<<8)|(1<<0)); -- OUT_RING(chan, 0); -+ OUT_RING (chan, src_offset); -+ OUT_RING (chan, dst_offset); -+ OUT_RING (chan, PAGE_SIZE); /* src_pitch */ -+ OUT_RING (chan, PAGE_SIZE); /* dst_pitch */ -+ OUT_RING (chan, PAGE_SIZE); /* line_length */ -+ OUT_RING (chan, line_count); -+ OUT_RING (chan, 0x00000101); -+ OUT_RING (chan, 0x00000000); - BEGIN_RING(chan, NvSubM2MF, NV_MEMORY_TO_MEMORY_FORMAT_NOP, 1); -- OUT_RING(chan, 0); -+ OUT_RING (chan, 0); - - page_count -= line_count; - src_offset += (PAGE_SIZE * line_count); - dst_offset += (PAGE_SIZE * line_count); - } - -- return nouveau_bo_move_accel_cleanup(chan, nvbo, evict, no_wait_reserve, no_wait_gpu, new_mem); -+ return 0; -+} -+ -+static int -+nouveau_bo_move_m2mf(struct ttm_buffer_object *bo, int evict, bool intr, -+ bool no_wait_reserve, bool no_wait_gpu, -+ struct ttm_mem_reg *new_mem) -+{ -+ struct drm_nouveau_private *dev_priv = nouveau_bdev(bo->bdev); -+ struct nouveau_bo *nvbo = nouveau_bo(bo); -+ struct nouveau_channel *chan; -+ int ret; -+ -+ chan = nvbo->channel; -+ if (!chan || nvbo->no_vm) { -+ chan = dev_priv->channel; -+ mutex_lock_nested(&chan->mutex, NOUVEAU_KCHANNEL_MUTEX); -+ } -+ -+ if (dev_priv->card_type < NV_50) -+ ret = nv04_bo_move_m2mf(chan, bo, &bo->mem, new_mem); -+ else -+ ret = nv50_bo_move_m2mf(chan, bo, &bo->mem, new_mem); -+ if (ret == 0) { -+ ret = nouveau_bo_move_accel_cleanup(chan, nvbo, evict, -+ no_wait_reserve, -+ no_wait_gpu, new_mem); -+ } -+ -+ if (chan == dev_priv->channel) -+ mutex_unlock(&chan->mutex); -+ return ret; - } - - static int -@@ -606,12 +724,7 @@ - - ret = ttm_bo_move_ttm(bo, evict, no_wait_reserve, no_wait_gpu, new_mem); - out: -- if (tmp_mem.mm_node) { -- spin_lock(&bo->bdev->glob->lru_lock); -- drm_mm_put_block(tmp_mem.mm_node); -- spin_unlock(&bo->bdev->glob->lru_lock); -- } -- -+ ttm_bo_mem_put(bo, &tmp_mem); - return ret; - } - -@@ -644,12 +757,7 @@ - goto out; - - out: -- if (tmp_mem.mm_node) { -- spin_lock(&bo->bdev->glob->lru_lock); -- drm_mm_put_block(tmp_mem.mm_node); -- spin_unlock(&bo->bdev->glob->lru_lock); -- } -- -+ ttm_bo_mem_put(bo, &tmp_mem); - return ret; - } - -@@ -669,19 +777,21 @@ - return 0; - } - -- offset = new_mem->mm_node->start << PAGE_SHIFT; -+ offset = new_mem->start << PAGE_SHIFT; - - if (dev_priv->card_type == NV_50) { - ret = nv50_mem_vm_bind_linear(dev, - offset + dev_priv->vm_vram_base, -- new_mem->size, nvbo->tile_flags, -+ new_mem->size, -+ nouveau_bo_tile_layout(nvbo), - offset); - if (ret) - return ret; - - } else if (dev_priv->card_type >= NV_10) { - *new_tile = nv10_mem_set_tiling(dev, offset, new_mem->size, -- nvbo->tile_mode); -+ nvbo->tile_mode, -+ nvbo->tile_flags); - } - - return 0; -@@ -697,9 +807,7 @@ - - if (dev_priv->card_type >= NV_10 && - dev_priv->card_type < NV_50) { -- if (*old_tile) -- nv10_mem_expire_tiling(dev, *old_tile, bo->sync_obj); -- -+ nv10_mem_put_tile_region(dev, *old_tile, bo->sync_obj); - *old_tile = new_tile; - } - } -@@ -719,12 +827,6 @@ - if (ret) - return ret; - -- /* Software copy if the card isn't up and running yet. */ -- if (!dev_priv->channel) { -- ret = ttm_bo_move_memcpy(bo, evict, no_wait_reserve, no_wait_gpu, new_mem); -- goto out; -- } -- - /* Fake bo copy. */ - if (old_mem->mem_type == TTM_PL_SYSTEM && !bo->ttm) { - BUG_ON(bo->mem.mm_node != NULL); -@@ -733,6 +835,12 @@ - goto out; - } - -+ /* Software copy if the card isn't up and running yet. */ -+ if (!dev_priv->channel) { -+ ret = ttm_bo_move_memcpy(bo, evict, no_wait_reserve, no_wait_gpu, new_mem); -+ goto out; -+ } -+ - /* Hardware assisted copy. */ - if (new_mem->mem_type == TTM_PL_SYSTEM) - ret = nouveau_bo_move_flipd(bo, evict, intr, no_wait_reserve, no_wait_gpu, new_mem); -@@ -783,14 +891,14 @@ - case TTM_PL_TT: - #if __OS_HAS_AGP - if (dev_priv->gart_info.type == NOUVEAU_GART_AGP) { -- mem->bus.offset = mem->mm_node->start << PAGE_SHIFT; -+ mem->bus.offset = mem->start << PAGE_SHIFT; - mem->bus.base = dev_priv->gart_info.aper_base; - mem->bus.is_iomem = true; - } - #endif - break; - case TTM_PL_VRAM: -- mem->bus.offset = mem->mm_node->start << PAGE_SHIFT; -+ mem->bus.offset = mem->start << PAGE_SHIFT; - mem->bus.base = pci_resource_start(dev->pdev, 1); - mem->bus.is_iomem = true; - break; -@@ -808,7 +916,43 @@ - static int - nouveau_ttm_fault_reserve_notify(struct ttm_buffer_object *bo) - { -- return 0; -+ struct drm_nouveau_private *dev_priv = nouveau_bdev(bo->bdev); -+ struct nouveau_bo *nvbo = nouveau_bo(bo); -+ -+ /* as long as the bo isn't in vram, and isn't tiled, we've got -+ * nothing to do here. -+ */ -+ if (bo->mem.mem_type != TTM_PL_VRAM) { -+ if (dev_priv->card_type < NV_50 || -+ !nouveau_bo_tile_layout(nvbo)) -+ return 0; -+ } -+ -+ /* make sure bo is in mappable vram */ -+ if (bo->mem.start + bo->mem.num_pages < dev_priv->fb_mappable_pages) -+ return 0; -+ -+ -+ nvbo->placement.fpfn = 0; -+ nvbo->placement.lpfn = dev_priv->fb_mappable_pages; -+ nouveau_bo_placement_set(nvbo, TTM_PL_VRAM, 0); -+ return ttm_bo_validate(bo, &nvbo->placement, false, true, false); -+} -+ -+void -+nouveau_bo_fence(struct nouveau_bo *nvbo, struct nouveau_fence *fence) -+{ -+ struct nouveau_fence *old_fence; -+ -+ if (likely(fence)) -+ nouveau_fence_ref(fence); -+ -+ spin_lock(&nvbo->bo.lock); -+ old_fence = nvbo->bo.sync_obj; -+ nvbo->bo.sync_obj = fence; -+ spin_unlock(&nvbo->bo.lock); -+ -+ nouveau_fence_unref(&old_fence); - } - - struct ttm_bo_driver nouveau_bo_driver = { -@@ -818,11 +962,11 @@ - .evict_flags = nouveau_bo_evict_flags, - .move = nouveau_bo_move, - .verify_access = nouveau_bo_verify_access, -- .sync_obj_signaled = nouveau_fence_signalled, -- .sync_obj_wait = nouveau_fence_wait, -- .sync_obj_flush = nouveau_fence_flush, -- .sync_obj_unref = nouveau_fence_unref, -- .sync_obj_ref = nouveau_fence_ref, -+ .sync_obj_signaled = __nouveau_fence_signalled, -+ .sync_obj_wait = __nouveau_fence_wait, -+ .sync_obj_flush = __nouveau_fence_flush, -+ .sync_obj_unref = __nouveau_fence_unref, -+ .sync_obj_ref = __nouveau_fence_ref, - .fault_reserve_notify = &nouveau_ttm_fault_reserve_notify, - .io_mem_reserve = &nouveau_ttm_io_mem_reserve, - .io_mem_free = &nouveau_ttm_io_mem_free, -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_calc.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_calc.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_calc.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_calc.c 2010-11-05 00:40:00.000000000 +0100 -@@ -198,8 +198,8 @@ - struct drm_nouveau_private *dev_priv = dev->dev_private; - struct nv_fifo_info fifo_data; - struct nv_sim_state sim_data; -- int MClk = nouveau_hw_get_clock(dev, MPLL); -- int NVClk = nouveau_hw_get_clock(dev, NVPLL); -+ int MClk = nouveau_hw_get_clock(dev, PLL_MEMORY); -+ int NVClk = nouveau_hw_get_clock(dev, PLL_CORE); - uint32_t cfg1 = nvReadFB(dev, NV04_PFB_CFG1); - - sim_data.pclk_khz = VClk; -@@ -234,7 +234,7 @@ - } - - static void --nv30_update_arb(int *burst, int *lwm) -+nv20_update_arb(int *burst, int *lwm) - { - unsigned int fifo_size, burst_size, graphics_lwm; - -@@ -251,14 +251,14 @@ - { - struct drm_nouveau_private *dev_priv = dev->dev_private; - -- if (dev_priv->card_type < NV_30) -+ if (dev_priv->card_type < NV_20) - nv04_update_arb(dev, vclk, bpp, burst, lwm); - else if ((dev->pci_device & 0xfff0) == 0x0240 /*CHIPSET_C51*/ || - (dev->pci_device & 0xfff0) == 0x03d0 /*CHIPSET_C512*/) { - *burst = 128; - *lwm = 0x0480; - } else -- nv30_update_arb(burst, lwm); -+ nv20_update_arb(burst, lwm); - } - - static int -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_channel.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_channel.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_channel.c 2010-11-05 00:40:00.000000000 +0100 -@@ -48,14 +48,14 @@ - dev_priv->gart_info.aper_size, - NV_DMA_ACCESS_RO, &pushbuf, - NULL); -- chan->pushbuf_base = pb->bo.mem.mm_node->start << PAGE_SHIFT; -+ chan->pushbuf_base = pb->bo.mem.start << PAGE_SHIFT; - } else - if (dev_priv->card_type != NV_04) { - ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, 0, - dev_priv->fb_available_size, - NV_DMA_ACCESS_RO, - NV_DMA_TARGET_VIDMEM, &pushbuf); -- chan->pushbuf_base = pb->bo.mem.mm_node->start << PAGE_SHIFT; -+ chan->pushbuf_base = pb->bo.mem.start << PAGE_SHIFT; - } else { - /* NV04 cmdbuf hack, from original ddx.. not sure of it's - * exact reason for existing :) PCI access to cmdbuf in -@@ -67,17 +67,11 @@ - dev_priv->fb_available_size, - NV_DMA_ACCESS_RO, - NV_DMA_TARGET_PCI, &pushbuf); -- chan->pushbuf_base = pb->bo.mem.mm_node->start << PAGE_SHIFT; -- } -- -- ret = nouveau_gpuobj_ref_add(dev, chan, 0, pushbuf, &chan->pushbuf); -- if (ret) { -- NV_ERROR(dev, "Error referencing pushbuf ctxdma: %d\n", ret); -- if (pushbuf != dev_priv->gart_info.sg_ctxdma) -- nouveau_gpuobj_del(dev, &pushbuf); -- return ret; -+ chan->pushbuf_base = pb->bo.mem.start << PAGE_SHIFT; - } - -+ nouveau_gpuobj_ref(pushbuf, &chan->pushbuf); -+ nouveau_gpuobj_ref(NULL, &pushbuf); - return 0; - } - -@@ -113,53 +107,56 @@ - int - nouveau_channel_alloc(struct drm_device *dev, struct nouveau_channel **chan_ret, - struct drm_file *file_priv, -- uint32_t vram_handle, uint32_t tt_handle) -+ uint32_t vram_handle, uint32_t gart_handle) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; - struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; - struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; - struct nouveau_channel *chan; -- int channel, user; -- int ret; -+ unsigned long flags; -+ int user, ret; - -- /* -- * Alright, here is the full story -- * Nvidia cards have multiple hw fifo contexts (praise them for that, -- * no complicated crash-prone context switches) -- * We allocate a new context for each app and let it write to it -- * directly (woo, full userspace command submission !) -- * When there are no more contexts, you lost -- */ -- for (channel = 0; channel < pfifo->channels; channel++) { -- if (dev_priv->fifos[channel] == NULL) -+ /* allocate and lock channel structure */ -+ chan = kzalloc(sizeof(*chan), GFP_KERNEL); -+ if (!chan) -+ return -ENOMEM; -+ chan->dev = dev; -+ chan->file_priv = file_priv; -+ chan->vram_handle = vram_handle; -+ chan->gart_handle = gart_handle; -+ -+ kref_init(&chan->ref); -+ atomic_set(&chan->users, 1); -+ mutex_init(&chan->mutex); -+ mutex_lock(&chan->mutex); -+ -+ /* allocate hw channel id */ -+ spin_lock_irqsave(&dev_priv->channels.lock, flags); -+ for (chan->id = 0; chan->id < pfifo->channels; chan->id++) { -+ if (!dev_priv->channels.ptr[chan->id]) { -+ nouveau_channel_ref(chan, &dev_priv->channels.ptr[chan->id]); - break; -+ } - } -+ spin_unlock_irqrestore(&dev_priv->channels.lock, flags); - -- /* no more fifos. you lost. */ -- if (channel == pfifo->channels) -- return -EINVAL; -+ if (chan->id == pfifo->channels) { -+ mutex_unlock(&chan->mutex); -+ kfree(chan); -+ return -ENODEV; -+ } - -- dev_priv->fifos[channel] = kzalloc(sizeof(struct nouveau_channel), -- GFP_KERNEL); -- if (!dev_priv->fifos[channel]) -- return -ENOMEM; -- chan = dev_priv->fifos[channel]; -+ NV_DEBUG(dev, "initialising channel %d\n", chan->id); - INIT_LIST_HEAD(&chan->nvsw.vbl_wait); -+ INIT_LIST_HEAD(&chan->nvsw.flip); - INIT_LIST_HEAD(&chan->fence.pending); -- chan->dev = dev; -- chan->id = channel; -- chan->file_priv = file_priv; -- chan->vram_handle = vram_handle; -- chan->gart_handle = tt_handle; -- -- NV_INFO(dev, "Allocating FIFO number %d\n", channel); - - /* Allocate DMA push buffer */ - chan->pushbuf_bo = nouveau_channel_user_pushbuf_alloc(dev); - if (!chan->pushbuf_bo) { - ret = -ENOMEM; - NV_ERROR(dev, "pushbuf %d\n", ret); -- nouveau_channel_free(chan); -+ nouveau_channel_put(&chan); - return ret; - } - -@@ -167,18 +164,18 @@ - - /* Locate channel's user control regs */ - if (dev_priv->card_type < NV_40) -- user = NV03_USER(channel); -+ user = NV03_USER(chan->id); - else - if (dev_priv->card_type < NV_50) -- user = NV40_USER(channel); -+ user = NV40_USER(chan->id); - else -- user = NV50_USER(channel); -+ user = NV50_USER(chan->id); - - chan->user = ioremap(pci_resource_start(dev->pdev, 0) + user, - PAGE_SIZE); - if (!chan->user) { - NV_ERROR(dev, "ioremap of regs failed.\n"); -- nouveau_channel_free(chan); -+ nouveau_channel_put(&chan); - return -ENOMEM; - } - chan->user_put = 0x40; -@@ -188,15 +185,15 @@ - ret = nouveau_notifier_init_channel(chan); - if (ret) { - NV_ERROR(dev, "ntfy %d\n", ret); -- nouveau_channel_free(chan); -+ nouveau_channel_put(&chan); - return ret; - } - - /* Setup channel's default objects */ -- ret = nouveau_gpuobj_channel_init(chan, vram_handle, tt_handle); -+ ret = nouveau_gpuobj_channel_init(chan, vram_handle, gart_handle); - if (ret) { - NV_ERROR(dev, "gpuobj %d\n", ret); -- nouveau_channel_free(chan); -+ nouveau_channel_put(&chan); - return ret; - } - -@@ -204,7 +201,7 @@ - ret = nouveau_channel_pushbuf_ctxdma_init(chan); - if (ret) { - NV_ERROR(dev, "pbctxdma %d\n", ret); -- nouveau_channel_free(chan); -+ nouveau_channel_put(&chan); - return ret; - } - -@@ -212,16 +209,18 @@ - pfifo->reassign(dev, false); - - /* Create a graphics context for new channel */ -- ret = pgraph->create_context(chan); -- if (ret) { -- nouveau_channel_free(chan); -- return ret; -+ if (dev_priv->card_type < NV_50) { -+ ret = pgraph->create_context(chan); -+ if (ret) { -+ nouveau_channel_put(&chan); -+ return ret; -+ } - } - - /* Construct inital RAMFC for new channel */ - ret = pfifo->create_context(chan); - if (ret) { -- nouveau_channel_free(chan); -+ nouveau_channel_put(&chan); - return ret; - } - -@@ -229,130 +228,187 @@ - - ret = nouveau_dma_init(chan); - if (!ret) -- ret = nouveau_fence_init(chan); -+ ret = nouveau_fence_channel_init(chan); - if (ret) { -- nouveau_channel_free(chan); -+ nouveau_channel_put(&chan); - return ret; - } - - nouveau_debugfs_channel_init(chan); - -- NV_INFO(dev, "%s: initialised FIFO %d\n", __func__, channel); -+ NV_DEBUG(dev, "channel %d initialised\n", chan->id); - *chan_ret = chan; - return 0; - } - --/* stops a fifo */ -+struct nouveau_channel * -+nouveau_channel_get_unlocked(struct nouveau_channel *ref) -+{ -+ struct nouveau_channel *chan = NULL; -+ -+ if (likely(ref && atomic_inc_not_zero(&ref->users))) -+ nouveau_channel_ref(ref, &chan); -+ -+ return chan; -+} -+ -+struct nouveau_channel * -+nouveau_channel_get(struct drm_device *dev, struct drm_file *file_priv, int id) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_channel *chan; -+ unsigned long flags; -+ -+ spin_lock_irqsave(&dev_priv->channels.lock, flags); -+ chan = nouveau_channel_get_unlocked(dev_priv->channels.ptr[id]); -+ spin_unlock_irqrestore(&dev_priv->channels.lock, flags); -+ -+ if (unlikely(!chan)) -+ return ERR_PTR(-EINVAL); -+ -+ if (unlikely(file_priv && chan->file_priv != file_priv)) { -+ nouveau_channel_put_unlocked(&chan); -+ return ERR_PTR(-EINVAL); -+ } -+ -+ mutex_lock(&chan->mutex); -+ return chan; -+} -+ - void --nouveau_channel_free(struct nouveau_channel *chan) -+nouveau_channel_put_unlocked(struct nouveau_channel **pchan) - { -+ struct nouveau_channel *chan = *pchan; - struct drm_device *dev = chan->dev; - struct drm_nouveau_private *dev_priv = dev->dev_private; -- struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; - struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; -+ struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; -+ struct nouveau_crypt_engine *pcrypt = &dev_priv->engine.crypt; - unsigned long flags; - int ret; - -- NV_INFO(dev, "%s: freeing fifo %d\n", __func__, chan->id); -+ /* decrement the refcount, and we're done if there's still refs */ -+ if (likely(!atomic_dec_and_test(&chan->users))) { -+ nouveau_channel_ref(NULL, pchan); -+ return; -+ } - -+ /* noone wants the channel anymore */ -+ NV_DEBUG(dev, "freeing channel %d\n", chan->id); - nouveau_debugfs_channel_fini(chan); - -- /* Give outstanding push buffers a chance to complete */ -+ /* give it chance to idle */ - nouveau_fence_update(chan); - if (chan->fence.sequence != chan->fence.sequence_ack) { - struct nouveau_fence *fence = NULL; - - ret = nouveau_fence_new(chan, &fence, true); - if (ret == 0) { -- ret = nouveau_fence_wait(fence, NULL, false, false); -- nouveau_fence_unref((void *)&fence); -+ ret = nouveau_fence_wait(fence, false, false); -+ nouveau_fence_unref(&fence); - } - - if (ret) - NV_ERROR(dev, "Failed to idle channel %d.\n", chan->id); - } - -- /* Ensure all outstanding fences are signaled. They should be if the -+ /* ensure all outstanding fences are signaled. they should be if the - * above attempts at idling were OK, but if we failed this'll tell TTM - * we're done with the buffers. - */ -- nouveau_fence_fini(chan); -+ nouveau_fence_channel_fini(chan); - -- /* This will prevent pfifo from switching channels. */ -+ /* boot it off the hardware */ - pfifo->reassign(dev, false); - -- /* We want to give pgraph a chance to idle and get rid of all potential -- * errors. We need to do this before the lock, otherwise the irq handler -- * is unable to process them. -+ /* We want to give pgraph a chance to idle and get rid of all -+ * potential errors. We need to do this without the context -+ * switch lock held, otherwise the irq handler is unable to -+ * process them. - */ - if (pgraph->channel(dev) == chan) - nouveau_wait_for_idle(dev); - -- spin_lock_irqsave(&dev_priv->context_switch_lock, flags); -- -- pgraph->fifo_access(dev, false); -- if (pgraph->channel(dev) == chan) -- pgraph->unload_context(dev); -- pgraph->destroy_context(chan); -- pgraph->fifo_access(dev, true); -- -- if (pfifo->channel_id(dev) == chan->id) { -- pfifo->disable(dev); -- pfifo->unload_context(dev); -- pfifo->enable(dev); -- } -+ /* destroy the engine specific contexts */ - pfifo->destroy_context(chan); -+ pgraph->destroy_context(chan); -+ if (pcrypt->destroy_context) -+ pcrypt->destroy_context(chan); - - pfifo->reassign(dev, true); - -- spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); -+ /* aside from its resources, the channel should now be dead, -+ * remove it from the channel list -+ */ -+ spin_lock_irqsave(&dev_priv->channels.lock, flags); -+ nouveau_channel_ref(NULL, &dev_priv->channels.ptr[chan->id]); -+ spin_unlock_irqrestore(&dev_priv->channels.lock, flags); - -- /* Release the channel's resources */ -- nouveau_gpuobj_ref_del(dev, &chan->pushbuf); -+ /* destroy any resources the channel owned */ -+ nouveau_gpuobj_ref(NULL, &chan->pushbuf); - if (chan->pushbuf_bo) { -+ nouveau_bo_unmap(chan->pushbuf_bo); - nouveau_bo_unpin(chan->pushbuf_bo); - nouveau_bo_ref(NULL, &chan->pushbuf_bo); - } - nouveau_gpuobj_channel_takedown(chan); - nouveau_notifier_takedown_channel(chan); -+ -+ nouveau_channel_ref(NULL, pchan); -+} -+ -+void -+nouveau_channel_put(struct nouveau_channel **pchan) -+{ -+ mutex_unlock(&(*pchan)->mutex); -+ nouveau_channel_put_unlocked(pchan); -+} -+ -+static void -+nouveau_channel_del(struct kref *ref) -+{ -+ struct nouveau_channel *chan = -+ container_of(ref, struct nouveau_channel, ref); -+ - if (chan->user) - iounmap(chan->user); - -- dev_priv->fifos[chan->id] = NULL; - kfree(chan); - } - -+void -+nouveau_channel_ref(struct nouveau_channel *chan, -+ struct nouveau_channel **pchan) -+{ -+ if (chan) -+ kref_get(&chan->ref); -+ -+ if (*pchan) -+ kref_put(&(*pchan)->ref, nouveau_channel_del); -+ -+ *pchan = chan; -+} -+ - /* cleans up all the fifos from file_priv */ - void - nouveau_channel_cleanup(struct drm_device *dev, struct drm_file *file_priv) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; - struct nouveau_engine *engine = &dev_priv->engine; -+ struct nouveau_channel *chan; - int i; - - NV_DEBUG(dev, "clearing FIFO enables from file_priv\n"); - for (i = 0; i < engine->fifo.channels; i++) { -- struct nouveau_channel *chan = dev_priv->fifos[i]; -+ chan = nouveau_channel_get(dev, file_priv, i); -+ if (IS_ERR(chan)) -+ continue; - -- if (chan && chan->file_priv == file_priv) -- nouveau_channel_free(chan); -+ atomic_dec(&chan->users); -+ nouveau_channel_put(&chan); - } - } - --int --nouveau_channel_owner(struct drm_device *dev, struct drm_file *file_priv, -- int channel) --{ -- struct drm_nouveau_private *dev_priv = dev->dev_private; -- struct nouveau_engine *engine = &dev_priv->engine; -- -- if (channel >= engine->fifo.channels) -- return 0; -- if (dev_priv->fifos[channel] == NULL) -- return 0; -- -- return (dev_priv->fifos[channel]->file_priv == file_priv); --} - - /*********************************** - * ioctls wrapping the functions -@@ -400,24 +456,26 @@ - /* Named memory object area */ - ret = drm_gem_handle_create(file_priv, chan->notifier_bo->gem, - &init->notifier_handle); -- if (ret) { -- nouveau_channel_free(chan); -- return ret; -- } - -- return 0; -+ if (ret == 0) -+ atomic_inc(&chan->users); /* userspace reference */ -+ nouveau_channel_put(&chan); -+ return ret; - } - - static int - nouveau_ioctl_fifo_free(struct drm_device *dev, void *data, - struct drm_file *file_priv) - { -- struct drm_nouveau_channel_free *cfree = data; -+ struct drm_nouveau_channel_free *req = data; - struct nouveau_channel *chan; - -- NOUVEAU_GET_USER_CHANNEL_WITH_RETURN(cfree->channel, file_priv, chan); -+ chan = nouveau_channel_get(dev, file_priv, req->channel); -+ if (IS_ERR(chan)) -+ return PTR_ERR(chan); - -- nouveau_channel_free(chan); -+ atomic_dec(&chan->users); -+ nouveau_channel_put(&chan); - return 0; - } - -@@ -426,18 +484,18 @@ - ***********************************/ - - struct drm_ioctl_desc nouveau_ioctls[] = { -- DRM_IOCTL_DEF_DRV(NOUVEAU_GETPARAM, nouveau_ioctl_getparam, DRM_AUTH), -- DRM_IOCTL_DEF_DRV(NOUVEAU_SETPARAM, nouveau_ioctl_setparam, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), -- DRM_IOCTL_DEF_DRV(NOUVEAU_CHANNEL_ALLOC, nouveau_ioctl_fifo_alloc, DRM_AUTH), -- DRM_IOCTL_DEF_DRV(NOUVEAU_CHANNEL_FREE, nouveau_ioctl_fifo_free, DRM_AUTH), -- DRM_IOCTL_DEF_DRV(NOUVEAU_GROBJ_ALLOC, nouveau_ioctl_grobj_alloc, DRM_AUTH), -- DRM_IOCTL_DEF_DRV(NOUVEAU_NOTIFIEROBJ_ALLOC, nouveau_ioctl_notifier_alloc, DRM_AUTH), -- DRM_IOCTL_DEF_DRV(NOUVEAU_GPUOBJ_FREE, nouveau_ioctl_gpuobj_free, DRM_AUTH), -- DRM_IOCTL_DEF_DRV(NOUVEAU_GEM_NEW, nouveau_gem_ioctl_new, DRM_AUTH), -- DRM_IOCTL_DEF_DRV(NOUVEAU_GEM_PUSHBUF, nouveau_gem_ioctl_pushbuf, DRM_AUTH), -- DRM_IOCTL_DEF_DRV(NOUVEAU_GEM_CPU_PREP, nouveau_gem_ioctl_cpu_prep, DRM_AUTH), -- DRM_IOCTL_DEF_DRV(NOUVEAU_GEM_CPU_FINI, nouveau_gem_ioctl_cpu_fini, DRM_AUTH), -- DRM_IOCTL_DEF_DRV(NOUVEAU_GEM_INFO, nouveau_gem_ioctl_info, DRM_AUTH), -+ DRM_IOCTL_DEF_DRV(NOUVEAU_GETPARAM, nouveau_ioctl_getparam, DRM_UNLOCKED|DRM_AUTH), -+ DRM_IOCTL_DEF_DRV(NOUVEAU_SETPARAM, nouveau_ioctl_setparam, DRM_UNLOCKED|DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), -+ DRM_IOCTL_DEF_DRV(NOUVEAU_CHANNEL_ALLOC, nouveau_ioctl_fifo_alloc, DRM_UNLOCKED|DRM_AUTH), -+ DRM_IOCTL_DEF_DRV(NOUVEAU_CHANNEL_FREE, nouveau_ioctl_fifo_free, DRM_UNLOCKED|DRM_AUTH), -+ DRM_IOCTL_DEF_DRV(NOUVEAU_GROBJ_ALLOC, nouveau_ioctl_grobj_alloc, DRM_UNLOCKED|DRM_AUTH), -+ DRM_IOCTL_DEF_DRV(NOUVEAU_NOTIFIEROBJ_ALLOC, nouveau_ioctl_notifier_alloc, DRM_UNLOCKED|DRM_AUTH), -+ DRM_IOCTL_DEF_DRV(NOUVEAU_GPUOBJ_FREE, nouveau_ioctl_gpuobj_free, DRM_UNLOCKED|DRM_AUTH), -+ DRM_IOCTL_DEF_DRV(NOUVEAU_GEM_NEW, nouveau_gem_ioctl_new, DRM_UNLOCKED|DRM_AUTH), -+ DRM_IOCTL_DEF_DRV(NOUVEAU_GEM_PUSHBUF, nouveau_gem_ioctl_pushbuf, DRM_UNLOCKED|DRM_AUTH), -+ DRM_IOCTL_DEF_DRV(NOUVEAU_GEM_CPU_PREP, nouveau_gem_ioctl_cpu_prep, DRM_UNLOCKED|DRM_AUTH), -+ DRM_IOCTL_DEF_DRV(NOUVEAU_GEM_CPU_FINI, nouveau_gem_ioctl_cpu_fini, DRM_UNLOCKED|DRM_AUTH), -+ DRM_IOCTL_DEF_DRV(NOUVEAU_GEM_INFO, nouveau_gem_ioctl_info, DRM_UNLOCKED|DRM_AUTH), - }; - - int nouveau_max_ioctl = DRM_ARRAY_SIZE(nouveau_ioctls); -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_connector.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_connector.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.c 2010-11-05 00:40:00.000000000 +0100 -@@ -76,6 +76,22 @@ - return NULL; - } - -+/*TODO: This could use improvement, and learn to handle the fixed -+ * BIOS tables etc. It's fine currently, for its only user. -+ */ -+int -+nouveau_connector_bpp(struct drm_connector *connector) -+{ -+ struct nouveau_connector *nv_connector = nouveau_connector(connector); -+ -+ if (nv_connector->edid && nv_connector->edid->revision >= 4) { -+ u8 bpc = ((nv_connector->edid->input & 0x70) >> 3) + 4; -+ if (bpc > 4) -+ return bpc; -+ } -+ -+ return 18; -+} - - static void - nouveau_connector_destroy(struct drm_connector *drm_connector) -@@ -130,6 +146,36 @@ - return NULL; - } - -+static struct nouveau_encoder * -+nouveau_connector_of_detect(struct drm_connector *connector) -+{ -+#ifdef __powerpc__ -+ struct drm_device *dev = connector->dev; -+ struct nouveau_connector *nv_connector = nouveau_connector(connector); -+ struct nouveau_encoder *nv_encoder; -+ struct device_node *cn, *dn = pci_device_to_OF_node(dev->pdev); -+ -+ if (!dn || -+ !((nv_encoder = find_encoder_by_type(connector, OUTPUT_TMDS)) || -+ (nv_encoder = find_encoder_by_type(connector, OUTPUT_ANALOG)))) -+ return NULL; -+ -+ for_each_child_of_node(dn, cn) { -+ const char *name = of_get_property(cn, "name", NULL); -+ const void *edid = of_get_property(cn, "EDID", NULL); -+ int idx = name ? name[strlen(name) - 1] - 'A' : 0; -+ -+ if (nv_encoder->dcb->i2c_index == idx && edid) { -+ nv_connector->edid = -+ kmemdup(edid, EDID_LENGTH, GFP_KERNEL); -+ of_node_put(cn); -+ return nv_encoder; -+ } -+ } -+#endif -+ return NULL; -+} -+ - static void - nouveau_connector_set_encoder(struct drm_connector *connector, - struct nouveau_encoder *nv_encoder) -@@ -225,11 +271,17 @@ - return connector_status_connected; - } - -+ nv_encoder = nouveau_connector_of_detect(connector); -+ if (nv_encoder) { -+ nouveau_connector_set_encoder(connector, nv_encoder); -+ return connector_status_connected; -+ } -+ - detect_analog: - nv_encoder = find_encoder_by_type(connector, OUTPUT_ANALOG); - if (!nv_encoder && !nouveau_tv_disable) - nv_encoder = find_encoder_by_type(connector, OUTPUT_TV); -- if (nv_encoder) { -+ if (nv_encoder && force) { - struct drm_encoder *encoder = to_drm_encoder(nv_encoder); - struct drm_encoder_helper_funcs *helper = - encoder->helper_private; -@@ -589,11 +641,28 @@ - return ret; - } - -+static unsigned -+get_tmds_link_bandwidth(struct drm_connector *connector) -+{ -+ struct nouveau_connector *nv_connector = nouveau_connector(connector); -+ struct drm_nouveau_private *dev_priv = connector->dev->dev_private; -+ struct dcb_entry *dcb = nv_connector->detected_encoder->dcb; -+ -+ if (dcb->location != DCB_LOC_ON_CHIP || -+ dev_priv->chipset >= 0x46) -+ return 165000; -+ else if (dev_priv->chipset >= 0x40) -+ return 155000; -+ else if (dev_priv->chipset >= 0x18) -+ return 135000; -+ else -+ return 112000; -+} -+ - static int - nouveau_connector_mode_valid(struct drm_connector *connector, - struct drm_display_mode *mode) - { -- struct drm_nouveau_private *dev_priv = connector->dev->dev_private; - struct nouveau_connector *nv_connector = nouveau_connector(connector); - struct nouveau_encoder *nv_encoder = nv_connector->detected_encoder; - struct drm_encoder *encoder = to_drm_encoder(nv_encoder); -@@ -611,11 +680,9 @@ - max_clock = 400000; - break; - case OUTPUT_TMDS: -- if ((dev_priv->card_type >= NV_50 && !nouveau_duallink) || -- !nv_encoder->dcb->duallink_possible) -- max_clock = 165000; -- else -- max_clock = 330000; -+ max_clock = get_tmds_link_bandwidth(connector); -+ if (nouveau_duallink && nv_encoder->dcb->duallink_possible) -+ max_clock *= 2; - break; - case OUTPUT_ANALOG: - max_clock = nv_encoder->dcb->crtconf.maxfreq; -@@ -630,7 +697,7 @@ - else - max_clock = nv_encoder->dp.link_nr * 162000; - -- clock *= 3; -+ clock = clock * nouveau_connector_bpp(connector) / 8; - break; - default: - BUG_ON(1); -@@ -657,44 +724,6 @@ - return NULL; - } - --void --nouveau_connector_set_polling(struct drm_connector *connector) --{ -- struct drm_device *dev = connector->dev; -- struct drm_nouveau_private *dev_priv = dev->dev_private; -- struct drm_crtc *crtc; -- bool spare_crtc = false; -- -- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) -- spare_crtc |= !crtc->enabled; -- -- connector->polled = 0; -- -- switch (connector->connector_type) { -- case DRM_MODE_CONNECTOR_VGA: -- case DRM_MODE_CONNECTOR_TV: -- if (dev_priv->card_type >= NV_50 || -- (nv_gf4_disp_arch(dev) && spare_crtc)) -- connector->polled = DRM_CONNECTOR_POLL_CONNECT; -- break; -- -- case DRM_MODE_CONNECTOR_DVII: -- case DRM_MODE_CONNECTOR_DVID: -- case DRM_MODE_CONNECTOR_HDMIA: -- case DRM_MODE_CONNECTOR_DisplayPort: -- case DRM_MODE_CONNECTOR_eDP: -- if (dev_priv->card_type >= NV_50) -- connector->polled = DRM_CONNECTOR_POLL_HPD; -- else if (connector->connector_type == DRM_MODE_CONNECTOR_DVID || -- spare_crtc) -- connector->polled = DRM_CONNECTOR_POLL_CONNECT; -- break; -- -- default: -- break; -- } --} -- - static const struct drm_connector_helper_funcs - nouveau_connector_helper_funcs = { - .get_modes = nouveau_connector_get_modes, -@@ -820,6 +849,7 @@ - dev->mode_config.scaling_mode_property, - nv_connector->scaling_mode); - } -+ connector->polled = DRM_CONNECTOR_POLL_CONNECT; - /* fall-through */ - case DCB_CONNECTOR_TV_0: - case DCB_CONNECTOR_TV_1: -@@ -836,11 +866,16 @@ - dev->mode_config.dithering_mode_property, - nv_connector->use_dithering ? - DRM_MODE_DITHERING_ON : DRM_MODE_DITHERING_OFF); -+ -+ if (dcb->type != DCB_CONNECTOR_LVDS) { -+ if (dev_priv->card_type >= NV_50) -+ connector->polled = DRM_CONNECTOR_POLL_HPD; -+ else -+ connector->polled = DRM_CONNECTOR_POLL_CONNECT; -+ } - break; - } - -- nouveau_connector_set_polling(connector); -- - drm_sysfs_connector_add(connector); - dcb->drm = connector; - return dcb->drm; -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_connector.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.h ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_connector.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.h 2010-11-05 00:40:00.000000000 +0100 -@@ -52,7 +52,7 @@ - struct drm_connector * - nouveau_connector_create(struct drm_device *, int index); - --void --nouveau_connector_set_polling(struct drm_connector *); -+int -+nouveau_connector_bpp(struct drm_connector *); - - #endif /* __NOUVEAU_CONNECTOR_H__ */ -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_debugfs.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_debugfs.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_debugfs.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_debugfs.c 2010-11-05 00:40:00.000000000 +0100 -@@ -157,7 +157,23 @@ - return 0; - } - -+static int -+nouveau_debugfs_evict_vram(struct seq_file *m, void *data) -+{ -+ struct drm_info_node *node = (struct drm_info_node *) m->private; -+ struct drm_nouveau_private *dev_priv = node->minor->dev->dev_private; -+ int ret; -+ -+ ret = ttm_bo_evict_mm(&dev_priv->ttm.bdev, TTM_PL_VRAM); -+ if (ret) -+ seq_printf(m, "failed: %d", ret); -+ else -+ seq_printf(m, "succeeded\n"); -+ return 0; -+} -+ - static struct drm_info_list nouveau_debugfs_list[] = { -+ { "evict_vram", nouveau_debugfs_evict_vram, 0, NULL }, - { "chipset", nouveau_debugfs_chipset_info, 0, NULL }, - { "memory", nouveau_debugfs_memory_info, 0, NULL }, - { "vbios.rom", nouveau_debugfs_vbios_image, 0, NULL }, -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_display.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_display.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_display.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_display.c 2010-11-05 00:40:00.000000000 +0100 -@@ -29,6 +29,9 @@ - #include "nouveau_drv.h" - #include "nouveau_fb.h" - #include "nouveau_fbcon.h" -+#include "nouveau_hw.h" -+#include "nouveau_crtc.h" -+#include "nouveau_dma.h" - - static void - nouveau_user_framebuffer_destroy(struct drm_framebuffer *drm_fb) -@@ -104,3 +107,207 @@ - .output_poll_changed = nouveau_fbcon_output_poll_changed, - }; - -+int -+nouveau_vblank_enable(struct drm_device *dev, int crtc) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ -+ if (dev_priv->card_type >= NV_50) -+ nv_mask(dev, NV50_PDISPLAY_INTR_EN_1, 0, -+ NV50_PDISPLAY_INTR_EN_1_VBLANK_CRTC_(crtc)); -+ else -+ NVWriteCRTC(dev, crtc, NV_PCRTC_INTR_EN_0, -+ NV_PCRTC_INTR_0_VBLANK); -+ -+ return 0; -+} -+ -+void -+nouveau_vblank_disable(struct drm_device *dev, int crtc) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ -+ if (dev_priv->card_type >= NV_50) -+ nv_mask(dev, NV50_PDISPLAY_INTR_EN_1, -+ NV50_PDISPLAY_INTR_EN_1_VBLANK_CRTC_(crtc), 0); -+ else -+ NVWriteCRTC(dev, crtc, NV_PCRTC_INTR_EN_0, 0); -+} -+ -+static int -+nouveau_page_flip_reserve(struct nouveau_bo *old_bo, -+ struct nouveau_bo *new_bo) -+{ -+ int ret; -+ -+ ret = nouveau_bo_pin(new_bo, TTM_PL_FLAG_VRAM); -+ if (ret) -+ return ret; -+ -+ ret = ttm_bo_reserve(&new_bo->bo, false, false, false, 0); -+ if (ret) -+ goto fail; -+ -+ ret = ttm_bo_reserve(&old_bo->bo, false, false, false, 0); -+ if (ret) -+ goto fail_unreserve; -+ -+ return 0; -+ -+fail_unreserve: -+ ttm_bo_unreserve(&new_bo->bo); -+fail: -+ nouveau_bo_unpin(new_bo); -+ return ret; -+} -+ -+static void -+nouveau_page_flip_unreserve(struct nouveau_bo *old_bo, -+ struct nouveau_bo *new_bo, -+ struct nouveau_fence *fence) -+{ -+ nouveau_bo_fence(new_bo, fence); -+ ttm_bo_unreserve(&new_bo->bo); -+ -+ nouveau_bo_fence(old_bo, fence); -+ ttm_bo_unreserve(&old_bo->bo); -+ -+ nouveau_bo_unpin(old_bo); -+} -+ -+static int -+nouveau_page_flip_emit(struct nouveau_channel *chan, -+ struct nouveau_bo *old_bo, -+ struct nouveau_bo *new_bo, -+ struct nouveau_page_flip_state *s, -+ struct nouveau_fence **pfence) -+{ -+ struct drm_device *dev = chan->dev; -+ unsigned long flags; -+ int ret; -+ -+ /* Queue it to the pending list */ -+ spin_lock_irqsave(&dev->event_lock, flags); -+ list_add_tail(&s->head, &chan->nvsw.flip); -+ spin_unlock_irqrestore(&dev->event_lock, flags); -+ -+ /* Synchronize with the old framebuffer */ -+ ret = nouveau_fence_sync(old_bo->bo.sync_obj, chan); -+ if (ret) -+ goto fail; -+ -+ /* Emit the pageflip */ -+ ret = RING_SPACE(chan, 2); -+ if (ret) -+ goto fail; -+ -+ BEGIN_RING(chan, NvSubSw, NV_SW_PAGE_FLIP, 1); -+ OUT_RING(chan, 0); -+ FIRE_RING(chan); -+ -+ ret = nouveau_fence_new(chan, pfence, true); -+ if (ret) -+ goto fail; -+ -+ return 0; -+fail: -+ spin_lock_irqsave(&dev->event_lock, flags); -+ list_del(&s->head); -+ spin_unlock_irqrestore(&dev->event_lock, flags); -+ return ret; -+} -+ -+int -+nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb, -+ struct drm_pending_vblank_event *event) -+{ -+ struct drm_device *dev = crtc->dev; -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_bo *old_bo = nouveau_framebuffer(crtc->fb)->nvbo; -+ struct nouveau_bo *new_bo = nouveau_framebuffer(fb)->nvbo; -+ struct nouveau_page_flip_state *s; -+ struct nouveau_channel *chan; -+ struct nouveau_fence *fence; -+ int ret; -+ -+ if (dev_priv->engine.graph.accel_blocked) -+ return -ENODEV; -+ -+ s = kzalloc(sizeof(*s), GFP_KERNEL); -+ if (!s) -+ return -ENOMEM; -+ -+ /* Don't let the buffers go away while we flip */ -+ ret = nouveau_page_flip_reserve(old_bo, new_bo); -+ if (ret) -+ goto fail_free; -+ -+ /* Initialize a page flip struct */ -+ *s = (struct nouveau_page_flip_state) -+ { { }, s->event, nouveau_crtc(crtc)->index, -+ fb->bits_per_pixel, fb->pitch, crtc->x, crtc->y, -+ new_bo->bo.offset }; -+ -+ /* Choose the channel the flip will be handled in */ -+ chan = nouveau_fence_channel(new_bo->bo.sync_obj); -+ if (!chan) -+ chan = nouveau_channel_get_unlocked(dev_priv->channel); -+ mutex_lock(&chan->mutex); -+ -+ /* Emit a page flip */ -+ ret = nouveau_page_flip_emit(chan, old_bo, new_bo, s, &fence); -+ nouveau_channel_put(&chan); -+ if (ret) -+ goto fail_unreserve; -+ -+ /* Update the crtc struct and cleanup */ -+ crtc->fb = fb; -+ -+ nouveau_page_flip_unreserve(old_bo, new_bo, fence); -+ nouveau_fence_unref(&fence); -+ return 0; -+ -+fail_unreserve: -+ nouveau_page_flip_unreserve(old_bo, new_bo, NULL); -+fail_free: -+ kfree(s); -+ return ret; -+} -+ -+int -+nouveau_finish_page_flip(struct nouveau_channel *chan, -+ struct nouveau_page_flip_state *ps) -+{ -+ struct drm_device *dev = chan->dev; -+ struct nouveau_page_flip_state *s; -+ unsigned long flags; -+ -+ spin_lock_irqsave(&dev->event_lock, flags); -+ -+ if (list_empty(&chan->nvsw.flip)) { -+ NV_ERROR(dev, "Unexpected pageflip in channel %d.\n", chan->id); -+ spin_unlock_irqrestore(&dev->event_lock, flags); -+ return -EINVAL; -+ } -+ -+ s = list_first_entry(&chan->nvsw.flip, -+ struct nouveau_page_flip_state, head); -+ if (s->event) { -+ struct drm_pending_vblank_event *e = s->event; -+ struct timeval now; -+ -+ do_gettimeofday(&now); -+ e->event.sequence = 0; -+ e->event.tv_sec = now.tv_sec; -+ e->event.tv_usec = now.tv_usec; -+ list_add_tail(&e->base.link, &e->base.file_priv->event_list); -+ wake_up_interruptible(&e->base.file_priv->event_wait); -+ } -+ -+ list_del(&s->head); -+ *ps = *s; -+ kfree(s); -+ -+ spin_unlock_irqrestore(&dev->event_lock, flags); -+ return 0; -+} -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_dma.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_dma.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_dma.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_dma.c 2010-11-05 00:40:00.000000000 +0100 -@@ -28,6 +28,7 @@ - #include "drm.h" - #include "nouveau_drv.h" - #include "nouveau_dma.h" -+#include "nouveau_ramht.h" - - void - nouveau_dma_pre_init(struct nouveau_channel *chan) -@@ -58,26 +59,17 @@ - { - struct drm_device *dev = chan->dev; - struct drm_nouveau_private *dev_priv = dev->dev_private; -- struct nouveau_gpuobj *m2mf = NULL; -- struct nouveau_gpuobj *nvsw = NULL; -+ struct nouveau_gpuobj *obj = NULL; - int ret, i; - - /* Create NV_MEMORY_TO_MEMORY_FORMAT for buffer moves */ - ret = nouveau_gpuobj_gr_new(chan, dev_priv->card_type < NV_50 ? -- 0x0039 : 0x5039, &m2mf); -+ 0x0039 : 0x5039, &obj); - if (ret) - return ret; - -- ret = nouveau_gpuobj_ref_add(dev, chan, NvM2MF, m2mf, NULL); -- if (ret) -- return ret; -- -- /* Create an NV_SW object for various sync purposes */ -- ret = nouveau_gpuobj_sw_new(chan, NV_SW, &nvsw); -- if (ret) -- return ret; -- -- ret = nouveau_gpuobj_ref_add(dev, chan, NvSw, nvsw, NULL); -+ ret = nouveau_ramht_insert(chan, NvM2MF, obj); -+ nouveau_gpuobj_ref(NULL, &obj); - if (ret) - return ret; - -@@ -91,11 +83,6 @@ - if (ret) - return ret; - -- /* Map M2MF notifier object - fbcon. */ -- ret = nouveau_bo_map(chan->notifier_bo); -- if (ret) -- return ret; -- - /* Insert NOPS for NOUVEAU_DMA_SKIPS */ - ret = RING_SPACE(chan, NOUVEAU_DMA_SKIPS); - if (ret) -@@ -113,13 +100,6 @@ - BEGIN_RING(chan, NvSubM2MF, NV_MEMORY_TO_MEMORY_FORMAT_DMA_NOTIFY, 1); - OUT_RING(chan, NvNotify0); - -- /* Initialise NV_SW */ -- ret = RING_SPACE(chan, 2); -- if (ret) -- return ret; -- BEGIN_RING(chan, NvSubSw, 0, 1); -- OUT_RING(chan, NvSw); -- - /* Sit back and pray the channel works.. */ - FIRE_RING(chan); - -@@ -217,7 +197,7 @@ - - chan->dma.ib_free = get - chan->dma.ib_put; - if (chan->dma.ib_free <= 0) -- chan->dma.ib_free += chan->dma.ib_max + 1; -+ chan->dma.ib_free += chan->dma.ib_max; - } - - return 0; -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_dma.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_dma.h ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_dma.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_dma.h 2010-11-05 00:40:00.000000000 +0100 -@@ -72,6 +72,7 @@ - NvGdiRect = 0x8000000c, - NvImageBlit = 0x8000000d, - NvSw = 0x8000000e, -+ NvSema = 0x8000000f, - - /* G80+ display objects */ - NvEvoVRAM = 0x01000000, -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_dp.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_dp.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_dp.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_dp.c 2010-11-05 00:40:00.000000000 +0100 -@@ -317,7 +317,8 @@ - return false; - - config[0] = nv_encoder->dp.link_nr; -- if (nv_encoder->dp.dpcd_version >= 0x11) -+ if (nv_encoder->dp.dpcd_version >= 0x11 && -+ nv_encoder->dp.enhanced_frame) - config[0] |= DP_LANE_COUNT_ENHANCED_FRAME_EN; - - ret = nouveau_dp_lane_count_set(encoder, config[0]); -@@ -468,10 +469,12 @@ - !nv_encoder->dcb->dpconf.link_bw) - nv_encoder->dp.link_bw = DP_LINK_BW_1_62; - -- nv_encoder->dp.link_nr = dpcd[2] & 0xf; -+ nv_encoder->dp.link_nr = dpcd[2] & DP_MAX_LANE_COUNT_MASK; - if (nv_encoder->dp.link_nr > nv_encoder->dcb->dpconf.link_nr) - nv_encoder->dp.link_nr = nv_encoder->dcb->dpconf.link_nr; - -+ nv_encoder->dp.enhanced_frame = (dpcd[2] & DP_ENHANCED_FRAME_CAP); -+ - return true; - } - -@@ -524,7 +527,8 @@ - nv_wr32(dev, NV50_AUXCH_CTRL(index), ctrl | 0x80000000); - nv_wr32(dev, NV50_AUXCH_CTRL(index), ctrl); - nv_wr32(dev, NV50_AUXCH_CTRL(index), ctrl | 0x00010000); -- if (!nv_wait(NV50_AUXCH_CTRL(index), 0x00010000, 0x00000000)) { -+ if (!nv_wait(dev, NV50_AUXCH_CTRL(index), -+ 0x00010000, 0x00000000)) { - NV_ERROR(dev, "expected bit 16 == 0, got 0x%08x\n", - nv_rd32(dev, NV50_AUXCH_CTRL(index))); - ret = -EBUSY; -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_drv.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_drv.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.c 2010-11-05 00:40:00.000000000 +0100 -@@ -31,13 +31,14 @@ - #include "nouveau_hw.h" - #include "nouveau_fb.h" - #include "nouveau_fbcon.h" -+#include "nouveau_pm.h" - #include "nv50_display.h" - - #include "drm_pciids.h" - --MODULE_PARM_DESC(noagp, "Disable AGP"); --int nouveau_noagp; --module_param_named(noagp, nouveau_noagp, int, 0400); -+MODULE_PARM_DESC(agpmode, "AGP mode (0 to disable AGP)"); -+int nouveau_agpmode = -1; -+module_param_named(agpmode, nouveau_agpmode, int, 0400); - - MODULE_PARM_DESC(modeset, "Enable kernel modesetting"); - static int nouveau_modeset = -1; /* kms */ -@@ -79,6 +80,10 @@ - int nouveau_nofbaccel = 0; - module_param_named(nofbaccel, nouveau_nofbaccel, int, 0400); - -+MODULE_PARM_DESC(force_post, "Force POST"); -+int nouveau_force_post = 0; -+module_param_named(force_post, nouveau_force_post, int, 0400); -+ - MODULE_PARM_DESC(override_conntype, "Ignore DCB connector type"); - int nouveau_override_conntype = 0; - module_param_named(override_conntype, nouveau_override_conntype, int, 0400); -@@ -102,6 +107,18 @@ - int nouveau_reg_debug; - module_param_named(reg_debug, nouveau_reg_debug, int, 0600); - -+MODULE_PARM_DESC(perflvl, "Performance level (default: boot)\n"); -+char *nouveau_perflvl; -+module_param_named(perflvl, nouveau_perflvl, charp, 0400); -+ -+MODULE_PARM_DESC(perflvl_wr, "Allow perflvl changes (warning: dangerous!)\n"); -+int nouveau_perflvl_wr; -+module_param_named(perflvl_wr, nouveau_perflvl_wr, int, 0400); -+ -+MODULE_PARM_DESC(msi, "Enable MSI (default: off)\n"); -+int nouveau_msi; -+module_param_named(msi, nouveau_msi, int, 0400); -+ - int nouveau_fbpercrtc; - #if 0 - module_param_named(fbpercrtc, nouveau_fbpercrtc, int, 0400); -@@ -182,15 +199,14 @@ - for (i = 0; i < pfifo->channels; i++) { - struct nouveau_fence *fence = NULL; - -- chan = dev_priv->fifos[i]; -- if (!chan || (dev_priv->card_type >= NV_50 && -- chan == dev_priv->fifos[0])) -+ chan = dev_priv->channels.ptr[i]; -+ if (!chan || !chan->pushbuf_bo) - continue; - - ret = nouveau_fence_new(chan, &fence, true); - if (ret == 0) { -- ret = nouveau_fence_wait(fence, NULL, false, false); -- nouveau_fence_unref((void *)&fence); -+ ret = nouveau_fence_wait(fence, false, false); -+ nouveau_fence_unref(&fence); - } - - if (ret) { -@@ -271,6 +287,8 @@ - if (ret) - return ret; - -+ nouveau_pm_resume(dev); -+ - if (dev_priv->gart_info.type == NOUVEAU_GART_AGP) { - ret = nouveau_mem_init_agp(dev); - if (ret) { -@@ -285,6 +303,7 @@ - engine->timer.init(dev); - engine->fb.init(dev); - engine->graph.init(dev); -+ engine->crypt.init(dev); - engine->fifo.init(dev); - - NV_INFO(dev, "Restoring GPU objects...\n"); -@@ -298,7 +317,7 @@ - int j; - - for (i = 0; i < dev_priv->engine.fifo.channels; i++) { -- chan = dev_priv->fifos[i]; -+ chan = dev_priv->channels.ptr[i]; - if (!chan || !chan->pushbuf_bo) - continue; - -@@ -378,6 +397,9 @@ - .irq_postinstall = nouveau_irq_postinstall, - .irq_uninstall = nouveau_irq_uninstall, - .irq_handler = nouveau_irq_handler, -+ .get_vblank_counter = drm_vblank_count, -+ .enable_vblank = nouveau_vblank_enable, -+ .disable_vblank = nouveau_vblank_disable, - .reclaim_buffers = drm_core_reclaim_buffers, - .get_map_ofs = drm_core_get_map_ofs, - .get_reg_ofs = drm_core_get_reg_ofs, -@@ -390,6 +412,7 @@ - .mmap = nouveau_ttm_mmap, - .poll = drm_poll, - .fasync = drm_fasync, -+ .read = drm_read, - #if defined(CONFIG_COMPAT) - .compat_ioctl = nouveau_compat_ioctl, - #endif -@@ -434,6 +457,12 @@ - if (!nouveau_modeset) - return 0; - -+#if defined(CONFIG_FRAMEBUFFER_CONSOLE_MODULE) -+ request_module("fbcon"); -+#elif !defined(CONFIG_FRAMEBUFFER_CONSOLE) -+ printk(KERN_INFO "CONFIG_FRAMEBUFFER_CONSOLE was not enabled. You won't get any console output.\n"); -+#endif -+ - nouveau_register_dsm_handler(); - return drm_init(&driver); - } -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.h ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_drv.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.h 2010-11-05 00:40:00.000000000 +0100 -@@ -66,10 +66,13 @@ - #define NV50_VM_VRAM_NR (NV50_VM_MAX_VRAM / NV50_VM_BLOCK) - - struct nouveau_tile_reg { -- struct nouveau_fence *fence; -- uint32_t addr; -- uint32_t size; - bool used; -+ uint32_t addr; -+ uint32_t limit; -+ uint32_t pitch; -+ uint32_t zcomp; -+ struct drm_mm_node *tag_mem; -+ struct nouveau_fence *fence; - }; - - struct nouveau_bo { -@@ -96,10 +99,12 @@ - struct nouveau_tile_reg *tile; - - struct drm_gem_object *gem; -- struct drm_file *cpu_filp; - int pin_refcnt; - }; - -+#define nouveau_bo_tile_layout(nvbo) \ -+ ((nvbo)->tile_flags & NOUVEAU_GEM_TILE_LAYOUT_MASK) -+ - static inline struct nouveau_bo * - nouveau_bo(struct ttm_buffer_object *bo) - { -@@ -130,25 +135,32 @@ - - #define NVOBJ_ENGINE_SW 0 - #define NVOBJ_ENGINE_GR 1 --#define NVOBJ_ENGINE_DISPLAY 2 -+#define NVOBJ_ENGINE_PPP 2 -+#define NVOBJ_ENGINE_COPY 3 -+#define NVOBJ_ENGINE_VP 4 -+#define NVOBJ_ENGINE_CRYPT 5 -+#define NVOBJ_ENGINE_BSP 6 -+#define NVOBJ_ENGINE_DISPLAY 0xcafe0001 - #define NVOBJ_ENGINE_INT 0xdeadbeef - --#define NVOBJ_FLAG_ALLOW_NO_REFS (1 << 0) - #define NVOBJ_FLAG_ZERO_ALLOC (1 << 1) - #define NVOBJ_FLAG_ZERO_FREE (1 << 2) --#define NVOBJ_FLAG_FAKE (1 << 3) - struct nouveau_gpuobj { -+ struct drm_device *dev; -+ struct kref refcount; - struct list_head list; - -- struct nouveau_channel *im_channel; - struct drm_mm_node *im_pramin; - struct nouveau_bo *im_backing; -- uint32_t im_backing_start; - uint32_t *im_backing_suspend; - int im_bound; - - uint32_t flags; -- int refcount; -+ -+ u32 size; -+ u32 pinst; -+ u32 cinst; -+ u64 vinst; - - uint32_t engine; - uint32_t class; -@@ -157,20 +169,29 @@ - void *priv; - }; - --struct nouveau_gpuobj_ref { -- struct list_head list; -- -- struct nouveau_gpuobj *gpuobj; -- uint32_t instance; -+struct nouveau_page_flip_state { -+ struct list_head head; -+ struct drm_pending_vblank_event *event; -+ int crtc, bpp, pitch, x, y; -+ uint64_t offset; -+}; - -- struct nouveau_channel *channel; -- int handle; -+enum nouveau_channel_mutex_class { -+ NOUVEAU_UCHANNEL_MUTEX, -+ NOUVEAU_KCHANNEL_MUTEX - }; - - struct nouveau_channel { - struct drm_device *dev; - int id; - -+ /* references to the channel data structure */ -+ struct kref ref; -+ /* users of the hardware channel resources, the hardware -+ * context will be kicked off when it reaches zero. */ -+ atomic_t users; -+ struct mutex mutex; -+ - /* owner of this fifo */ - struct drm_file *file_priv; - /* mapping of the fifo itself */ -@@ -192,33 +213,33 @@ - } fence; - - /* DMA push buffer */ -- struct nouveau_gpuobj_ref *pushbuf; -- struct nouveau_bo *pushbuf_bo; -- uint32_t pushbuf_base; -+ struct nouveau_gpuobj *pushbuf; -+ struct nouveau_bo *pushbuf_bo; -+ uint32_t pushbuf_base; - - /* Notifier memory */ - struct nouveau_bo *notifier_bo; - struct drm_mm notifier_heap; - - /* PFIFO context */ -- struct nouveau_gpuobj_ref *ramfc; -- struct nouveau_gpuobj_ref *cache; -+ struct nouveau_gpuobj *ramfc; -+ struct nouveau_gpuobj *cache; - - /* PGRAPH context */ - /* XXX may be merge 2 pointers as private data ??? */ -- struct nouveau_gpuobj_ref *ramin_grctx; -+ struct nouveau_gpuobj *ramin_grctx; -+ struct nouveau_gpuobj *crypt_ctx; - void *pgraph_ctx; - - /* NV50 VM */ -- struct nouveau_gpuobj *vm_pd; -- struct nouveau_gpuobj_ref *vm_gart_pt; -- struct nouveau_gpuobj_ref *vm_vram_pt[NV50_VM_VRAM_NR]; -+ struct nouveau_gpuobj *vm_pd; -+ struct nouveau_gpuobj *vm_gart_pt; -+ struct nouveau_gpuobj *vm_vram_pt[NV50_VM_VRAM_NR]; - - /* Objects */ -- struct nouveau_gpuobj_ref *ramin; /* Private instmem */ -- struct drm_mm ramin_heap; /* Private PRAMIN heap */ -- struct nouveau_gpuobj_ref *ramht; /* Hash table */ -- struct list_head ramht_refs; /* Objects referenced by RAMHT */ -+ struct nouveau_gpuobj *ramin; /* Private instmem */ -+ struct drm_mm ramin_heap; /* Private PRAMIN heap */ -+ struct nouveau_ramht *ramht; /* Hash table */ - - /* GPU object info for stuff used in-kernel (mm_enabled) */ - uint32_t m2mf_ntfy; -@@ -244,9 +265,11 @@ - - struct { - struct nouveau_gpuobj *vblsem; -+ uint32_t vblsem_head; - uint32_t vblsem_offset; - uint32_t vblsem_rval; - struct list_head vbl_wait; -+ struct list_head flip; - } nvsw; - - struct { -@@ -265,7 +288,7 @@ - void (*resume)(struct drm_device *dev); - - int (*populate)(struct drm_device *, struct nouveau_gpuobj *, -- uint32_t *size); -+ u32 *size, u32 align); - void (*clear)(struct drm_device *, struct nouveau_gpuobj *); - int (*bind)(struct drm_device *, struct nouveau_gpuobj *); - int (*unbind)(struct drm_device *, struct nouveau_gpuobj *); -@@ -285,18 +308,22 @@ - - struct nouveau_fb_engine { - int num_tiles; -+ struct drm_mm tag_heap; - - int (*init)(struct drm_device *dev); - void (*takedown)(struct drm_device *dev); - -- void (*set_region_tiling)(struct drm_device *dev, int i, uint32_t addr, -- uint32_t size, uint32_t pitch); -+ void (*init_tile_region)(struct drm_device *dev, int i, -+ uint32_t addr, uint32_t size, -+ uint32_t pitch, uint32_t flags); -+ void (*set_tile_region)(struct drm_device *dev, int i); -+ void (*free_tile_region)(struct drm_device *dev, int i); - }; - - struct nouveau_fifo_engine { - int channels; - -- struct nouveau_gpuobj_ref *playlist[2]; -+ struct nouveau_gpuobj *playlist[2]; - int cur_playlist; - - int (*init)(struct drm_device *); -@@ -305,7 +332,6 @@ - void (*disable)(struct drm_device *); - void (*enable)(struct drm_device *); - bool (*reassign)(struct drm_device *, bool enable); -- bool (*cache_flush)(struct drm_device *dev); - bool (*cache_pull)(struct drm_device *dev, bool enable); - - int (*channel_id)(struct drm_device *); -@@ -314,27 +340,16 @@ - void (*destroy_context)(struct nouveau_channel *); - int (*load_context)(struct nouveau_channel *); - int (*unload_context)(struct drm_device *); --}; -- --struct nouveau_pgraph_object_method { -- int id; -- int (*exec)(struct nouveau_channel *chan, int grclass, int mthd, -- uint32_t data); --}; -- --struct nouveau_pgraph_object_class { -- int id; -- bool software; -- struct nouveau_pgraph_object_method *methods; -+ void (*tlb_flush)(struct drm_device *dev); - }; - - struct nouveau_pgraph_engine { -- struct nouveau_pgraph_object_class *grclass; - bool accel_blocked; -+ bool registered; - int grctx_size; - - /* NV2x/NV3x context table (0x400780) */ -- struct nouveau_gpuobj_ref *ctx_table; -+ struct nouveau_gpuobj *ctx_table; - - int (*init)(struct drm_device *); - void (*takedown)(struct drm_device *); -@@ -346,9 +361,9 @@ - void (*destroy_context)(struct nouveau_channel *); - int (*load_context)(struct nouveau_channel *); - int (*unload_context)(struct drm_device *); -+ void (*tlb_flush)(struct drm_device *dev); - -- void (*set_region_tiling)(struct drm_device *dev, int i, uint32_t addr, -- uint32_t size, uint32_t pitch); -+ void (*set_tile_region)(struct drm_device *dev, int i); - }; - - struct nouveau_display_engine { -@@ -369,6 +384,102 @@ - void (*irq_enable)(struct drm_device *, enum dcb_gpio_tag, bool on); - }; - -+struct nouveau_pm_voltage_level { -+ u8 voltage; -+ u8 vid; -+}; -+ -+struct nouveau_pm_voltage { -+ bool supported; -+ u8 vid_mask; -+ -+ struct nouveau_pm_voltage_level *level; -+ int nr_level; -+}; -+ -+#define NOUVEAU_PM_MAX_LEVEL 8 -+struct nouveau_pm_level { -+ struct device_attribute dev_attr; -+ char name[32]; -+ int id; -+ -+ u32 core; -+ u32 memory; -+ u32 shader; -+ u32 unk05; -+ -+ u8 voltage; -+ u8 fanspeed; -+ -+ u16 memscript; -+}; -+ -+struct nouveau_pm_temp_sensor_constants { -+ u16 offset_constant; -+ s16 offset_mult; -+ u16 offset_div; -+ u16 slope_mult; -+ u16 slope_div; -+}; -+ -+struct nouveau_pm_threshold_temp { -+ s16 critical; -+ s16 down_clock; -+ s16 fan_boost; -+}; -+ -+struct nouveau_pm_memtiming { -+ u32 reg_100220; -+ u32 reg_100224; -+ u32 reg_100228; -+ u32 reg_10022c; -+ u32 reg_100230; -+ u32 reg_100234; -+ u32 reg_100238; -+ u32 reg_10023c; -+}; -+ -+struct nouveau_pm_memtimings { -+ bool supported; -+ struct nouveau_pm_memtiming *timing; -+ int nr_timing; -+}; -+ -+struct nouveau_pm_engine { -+ struct nouveau_pm_voltage voltage; -+ struct nouveau_pm_level perflvl[NOUVEAU_PM_MAX_LEVEL]; -+ int nr_perflvl; -+ struct nouveau_pm_memtimings memtimings; -+ struct nouveau_pm_temp_sensor_constants sensor_constants; -+ struct nouveau_pm_threshold_temp threshold_temp; -+ -+ struct nouveau_pm_level boot; -+ struct nouveau_pm_level *cur; -+ -+ struct device *hwmon; -+ struct notifier_block acpi_nb; -+ -+ int (*clock_get)(struct drm_device *, u32 id); -+ void *(*clock_pre)(struct drm_device *, struct nouveau_pm_level *, -+ u32 id, int khz); -+ void (*clock_set)(struct drm_device *, void *); -+ int (*voltage_get)(struct drm_device *); -+ int (*voltage_set)(struct drm_device *, int voltage); -+ int (*fanspeed_get)(struct drm_device *); -+ int (*fanspeed_set)(struct drm_device *, int fanspeed); -+ int (*temp_get)(struct drm_device *); -+}; -+ -+struct nouveau_crypt_engine { -+ bool registered; -+ -+ int (*init)(struct drm_device *); -+ void (*takedown)(struct drm_device *); -+ int (*create_context)(struct nouveau_channel *); -+ void (*destroy_context)(struct nouveau_channel *); -+ void (*tlb_flush)(struct drm_device *dev); -+}; -+ - struct nouveau_engine { - struct nouveau_instmem_engine instmem; - struct nouveau_mc_engine mc; -@@ -378,6 +489,8 @@ - struct nouveau_fifo_engine fifo; - struct nouveau_display_engine display; - struct nouveau_gpio_engine gpio; -+ struct nouveau_pm_engine pm; -+ struct nouveau_crypt_engine crypt; - }; - - struct nouveau_pll_vals { -@@ -409,13 +522,13 @@ - }; - - struct nv04_crtc_reg { -- unsigned char MiscOutReg; /* */ -+ unsigned char MiscOutReg; - uint8_t CRTC[0xa0]; - uint8_t CR58[0x10]; - uint8_t Sequencer[5]; - uint8_t Graphics[9]; - uint8_t Attribute[21]; -- unsigned char DAC[768]; /* Internal Colorlookuptable */ -+ unsigned char DAC[768]; - - /* PCRTC regs */ - uint32_t fb_start; -@@ -463,43 +576,9 @@ - }; - - struct nv04_mode_state { -- uint32_t bpp; -- uint32_t width; -- uint32_t height; -- uint32_t interlace; -- uint32_t repaint0; -- uint32_t repaint1; -- uint32_t screen; -- uint32_t scale; -- uint32_t dither; -- uint32_t extra; -- uint32_t fifo; -- uint32_t pixel; -- uint32_t horiz; -- int arbitration0; -- int arbitration1; -- uint32_t pll; -- uint32_t pllB; -- uint32_t vpll; -- uint32_t vpll2; -- uint32_t vpllB; -- uint32_t vpll2B; -+ struct nv04_crtc_reg crtc_reg[2]; - uint32_t pllsel; - uint32_t sel_clk; -- uint32_t general; -- uint32_t crtcOwner; -- uint32_t head; -- uint32_t head2; -- uint32_t cursorConfig; -- uint32_t cursor0; -- uint32_t cursor1; -- uint32_t cursor2; -- uint32_t timingH; -- uint32_t timingV; -- uint32_t displayV; -- uint32_t crtcSync; -- -- struct nv04_crtc_reg crtc_reg[2]; - }; - - enum nouveau_card_type { -@@ -522,11 +601,20 @@ - int flags; - - void __iomem *mmio; -+ -+ spinlock_t ramin_lock; - void __iomem *ramin; -- uint32_t ramin_size; -+ u32 ramin_size; -+ u32 ramin_base; -+ bool ramin_available; -+ struct drm_mm ramin_heap; -+ struct list_head gpuobj_list; -+ struct list_head classes; - - struct nouveau_bo *vga_ram; - -+ /* interrupt handling */ -+ bool msi_enabled; - struct workqueue_struct *wq; - struct work_struct irq_work; - struct work_struct hpd_work; -@@ -540,8 +628,16 @@ - atomic_t validate_sequence; - } ttm; - -- int fifo_alloc_count; -- struct nouveau_channel *fifos[NOUVEAU_MAX_CHANNEL_NR]; -+ struct { -+ spinlock_t lock; -+ struct drm_mm heap; -+ struct nouveau_bo *bo; -+ } fence; -+ -+ struct { -+ spinlock_t lock; -+ struct nouveau_channel *ptr[NOUVEAU_MAX_CHANNEL_NR]; -+ } channels; - - struct nouveau_engine engine; - struct nouveau_channel *channel; -@@ -550,15 +646,11 @@ - spinlock_t context_switch_lock; - - /* RAMIN configuration, RAMFC, RAMHT and RAMRO offsets */ -- struct nouveau_gpuobj *ramht; -+ struct nouveau_ramht *ramht; -+ struct nouveau_gpuobj *ramfc; -+ struct nouveau_gpuobj *ramro; -+ - uint32_t ramin_rsvd_vram; -- uint32_t ramht_offset; -- uint32_t ramht_size; -- uint32_t ramht_bits; -- uint32_t ramfc_offset; -- uint32_t ramfc_size; -- uint32_t ramro_offset; -- uint32_t ramro_size; - - struct { - enum { -@@ -584,6 +676,7 @@ - /* VRAM/fb configuration */ - uint64_t vram_size; - uint64_t vram_sys_base; -+ u32 vram_rblock_size; - - uint64_t fb_phys; - uint64_t fb_available_size; -@@ -600,10 +693,6 @@ - struct nouveau_gpuobj *vm_vram_pt[NV50_VM_VRAM_NR]; - int vm_vram_pt_nr; - -- struct drm_mm ramin_heap; -- -- struct list_head gpuobj_list; -- - struct nvbios vbios; - - struct nv04_mode_state mode_reg; -@@ -619,6 +708,7 @@ - struct backlight_device *backlight; - - struct nouveau_channel *evo; -+ u32 evo_alloc; - struct { - struct dcb_entry *dcb; - u16 script; -@@ -634,6 +724,12 @@ - }; - - static inline struct drm_nouveau_private * -+nouveau_private(struct drm_device *dev) -+{ -+ return dev->dev_private; -+} -+ -+static inline struct drm_nouveau_private * - nouveau_bdev(struct ttm_bo_device *bd) - { - return container_of(bd, struct drm_nouveau_private, ttm.bdev); -@@ -658,18 +754,8 @@ - return 0; - } - --#define NOUVEAU_GET_USER_CHANNEL_WITH_RETURN(id, cl, ch) do { \ -- struct drm_nouveau_private *nv = dev->dev_private; \ -- if (!nouveau_channel_owner(dev, (cl), (id))) { \ -- NV_ERROR(dev, "pid %d doesn't own channel %d\n", \ -- DRM_CURRENTPID, (id)); \ -- return -EPERM; \ -- } \ -- (ch) = nv->fifos[(id)]; \ --} while (0) -- - /* nouveau_drv.c */ --extern int nouveau_noagp; -+extern int nouveau_agpmode; - extern int nouveau_duallink; - extern int nouveau_uscript_lvds; - extern int nouveau_uscript_tmds; -@@ -683,7 +769,11 @@ - extern int nouveau_ignorelid; - extern int nouveau_nofbaccel; - extern int nouveau_noaccel; -+extern int nouveau_force_post; - extern int nouveau_override_conntype; -+extern char *nouveau_perflvl; -+extern int nouveau_perflvl_wr; -+extern int nouveau_msi; - - extern int nouveau_pci_suspend(struct pci_dev *pdev, pm_message_t pm_state); - extern int nouveau_pci_resume(struct pci_dev *pdev); -@@ -704,18 +794,19 @@ - extern int nouveau_card_init(struct drm_device *); - - /* nouveau_mem.c */ --extern int nouveau_mem_detect(struct drm_device *dev); --extern int nouveau_mem_init(struct drm_device *); -+extern int nouveau_mem_vram_init(struct drm_device *); -+extern void nouveau_mem_vram_fini(struct drm_device *); -+extern int nouveau_mem_gart_init(struct drm_device *); -+extern void nouveau_mem_gart_fini(struct drm_device *); - extern int nouveau_mem_init_agp(struct drm_device *); - extern int nouveau_mem_reset_agp(struct drm_device *); - extern void nouveau_mem_close(struct drm_device *); --extern struct nouveau_tile_reg *nv10_mem_set_tiling(struct drm_device *dev, -- uint32_t addr, -- uint32_t size, -- uint32_t pitch); --extern void nv10_mem_expire_tiling(struct drm_device *dev, -- struct nouveau_tile_reg *tile, -- struct nouveau_fence *fence); -+extern struct nouveau_tile_reg *nv10_mem_set_tiling( -+ struct drm_device *dev, uint32_t addr, uint32_t size, -+ uint32_t pitch, uint32_t flags); -+extern void nv10_mem_put_tile_region(struct drm_device *dev, -+ struct nouveau_tile_reg *tile, -+ struct nouveau_fence *fence); - extern int nv50_mem_vm_bind_linear(struct drm_device *, uint64_t virt, - uint32_t size, uint32_t flags, - uint64_t phys); -@@ -737,46 +828,54 @@ - extern struct drm_ioctl_desc nouveau_ioctls[]; - extern int nouveau_max_ioctl; - extern void nouveau_channel_cleanup(struct drm_device *, struct drm_file *); --extern int nouveau_channel_owner(struct drm_device *, struct drm_file *, -- int channel); - extern int nouveau_channel_alloc(struct drm_device *dev, - struct nouveau_channel **chan, - struct drm_file *file_priv, - uint32_t fb_ctxdma, uint32_t tt_ctxdma); --extern void nouveau_channel_free(struct nouveau_channel *); -+extern struct nouveau_channel * -+nouveau_channel_get_unlocked(struct nouveau_channel *); -+extern struct nouveau_channel * -+nouveau_channel_get(struct drm_device *, struct drm_file *, int id); -+extern void nouveau_channel_put_unlocked(struct nouveau_channel **); -+extern void nouveau_channel_put(struct nouveau_channel **); -+extern void nouveau_channel_ref(struct nouveau_channel *chan, -+ struct nouveau_channel **pchan); - - /* nouveau_object.c */ -+#define NVOBJ_CLASS(d,c,e) do { \ -+ int ret = nouveau_gpuobj_class_new((d), (c), NVOBJ_ENGINE_##e); \ -+ if (ret) \ -+ return ret; \ -+} while(0) -+ -+#define NVOBJ_MTHD(d,c,m,e) do { \ -+ int ret = nouveau_gpuobj_mthd_new((d), (c), (m), (e)); \ -+ if (ret) \ -+ return ret; \ -+} while(0) -+ - extern int nouveau_gpuobj_early_init(struct drm_device *); - extern int nouveau_gpuobj_init(struct drm_device *); - extern void nouveau_gpuobj_takedown(struct drm_device *); --extern void nouveau_gpuobj_late_takedown(struct drm_device *); - extern int nouveau_gpuobj_suspend(struct drm_device *dev); - extern void nouveau_gpuobj_suspend_cleanup(struct drm_device *dev); - extern void nouveau_gpuobj_resume(struct drm_device *dev); -+extern int nouveau_gpuobj_class_new(struct drm_device *, u32 class, u32 eng); -+extern int nouveau_gpuobj_mthd_new(struct drm_device *, u32 class, u32 mthd, -+ int (*exec)(struct nouveau_channel *, -+ u32 class, u32 mthd, u32 data)); -+extern int nouveau_gpuobj_mthd_call(struct nouveau_channel *, u32, u32, u32); - extern int nouveau_gpuobj_channel_init(struct nouveau_channel *, - uint32_t vram_h, uint32_t tt_h); - extern void nouveau_gpuobj_channel_takedown(struct nouveau_channel *); - extern int nouveau_gpuobj_new(struct drm_device *, struct nouveau_channel *, - uint32_t size, int align, uint32_t flags, - struct nouveau_gpuobj **); --extern int nouveau_gpuobj_del(struct drm_device *, struct nouveau_gpuobj **); --extern int nouveau_gpuobj_ref_add(struct drm_device *, struct nouveau_channel *, -- uint32_t handle, struct nouveau_gpuobj *, -- struct nouveau_gpuobj_ref **); --extern int nouveau_gpuobj_ref_del(struct drm_device *, -- struct nouveau_gpuobj_ref **); --extern int nouveau_gpuobj_ref_find(struct nouveau_channel *, uint32_t handle, -- struct nouveau_gpuobj_ref **ref_ret); --extern int nouveau_gpuobj_new_ref(struct drm_device *, -- struct nouveau_channel *alloc_chan, -- struct nouveau_channel *ref_chan, -- uint32_t handle, uint32_t size, int align, -- uint32_t flags, struct nouveau_gpuobj_ref **); --extern int nouveau_gpuobj_new_fake(struct drm_device *, -- uint32_t p_offset, uint32_t b_offset, -- uint32_t size, uint32_t flags, -- struct nouveau_gpuobj **, -- struct nouveau_gpuobj_ref**); -+extern void nouveau_gpuobj_ref(struct nouveau_gpuobj *, -+ struct nouveau_gpuobj **); -+extern int nouveau_gpuobj_new_fake(struct drm_device *, u32 pinst, u64 vinst, -+ u32 size, u32 flags, -+ struct nouveau_gpuobj **); - extern int nouveau_gpuobj_dma_new(struct nouveau_channel *, int class, - uint64_t offset, uint64_t size, int access, - int target, struct nouveau_gpuobj **); -@@ -786,14 +885,14 @@ - uint32_t *o_ret); - extern int nouveau_gpuobj_gr_new(struct nouveau_channel *, int class, - struct nouveau_gpuobj **); --extern int nouveau_gpuobj_sw_new(struct nouveau_channel *, int class, -- struct nouveau_gpuobj **); - extern int nouveau_ioctl_grobj_alloc(struct drm_device *, void *data, - struct drm_file *); - extern int nouveau_ioctl_gpuobj_free(struct drm_device *, void *data, - struct drm_file *); - - /* nouveau_irq.c */ -+extern int nouveau_irq_init(struct drm_device *); -+extern void nouveau_irq_fini(struct drm_device *); - extern irqreturn_t nouveau_irq_handler(DRM_IRQ_ARGS); - extern void nouveau_irq_preinstall(struct drm_device *); - extern int nouveau_irq_postinstall(struct drm_device *); -@@ -879,6 +978,7 @@ - enum dcb_gpio_tag); - extern struct dcb_connector_table_entry * - nouveau_bios_connector_entry(struct drm_device *, int index); -+extern u32 get_pll_register(struct drm_device *, enum pll_types); - extern int get_pll_limits(struct drm_device *, uint32_t limit_match, - struct pll_lims *); - extern int nouveau_bios_run_display_table(struct drm_device *, -@@ -913,18 +1013,29 @@ - /* nv10_fb.c */ - extern int nv10_fb_init(struct drm_device *); - extern void nv10_fb_takedown(struct drm_device *); --extern void nv10_fb_set_region_tiling(struct drm_device *, int, uint32_t, -- uint32_t, uint32_t); -+extern void nv10_fb_init_tile_region(struct drm_device *dev, int i, -+ uint32_t addr, uint32_t size, -+ uint32_t pitch, uint32_t flags); -+extern void nv10_fb_set_tile_region(struct drm_device *dev, int i); -+extern void nv10_fb_free_tile_region(struct drm_device *dev, int i); - - /* nv30_fb.c */ - extern int nv30_fb_init(struct drm_device *); - extern void nv30_fb_takedown(struct drm_device *); -+extern void nv30_fb_init_tile_region(struct drm_device *dev, int i, -+ uint32_t addr, uint32_t size, -+ uint32_t pitch, uint32_t flags); -+extern void nv30_fb_free_tile_region(struct drm_device *dev, int i); - - /* nv40_fb.c */ - extern int nv40_fb_init(struct drm_device *); - extern void nv40_fb_takedown(struct drm_device *); --extern void nv40_fb_set_region_tiling(struct drm_device *, int, uint32_t, -- uint32_t, uint32_t); -+extern void nv40_fb_set_tile_region(struct drm_device *dev, int i); -+ -+/* nv50_fb.c */ -+extern int nv50_fb_init(struct drm_device *); -+extern void nv50_fb_takedown(struct drm_device *); -+extern void nv50_fb_vm_trap(struct drm_device *, int display, const char *); - - /* nv50_fb.c */ - extern int nv50_fb_init(struct drm_device *); -@@ -939,7 +1050,6 @@ - extern void nv04_fifo_disable(struct drm_device *); - extern void nv04_fifo_enable(struct drm_device *); - extern bool nv04_fifo_reassign(struct drm_device *, bool); --extern bool nv04_fifo_cache_flush(struct drm_device *); - extern bool nv04_fifo_cache_pull(struct drm_device *, bool); - extern int nv04_fifo_channel_id(struct drm_device *); - extern int nv04_fifo_create_context(struct nouveau_channel *); -@@ -951,14 +1061,12 @@ - extern int nv10_fifo_init(struct drm_device *); - extern int nv10_fifo_channel_id(struct drm_device *); - extern int nv10_fifo_create_context(struct nouveau_channel *); --extern void nv10_fifo_destroy_context(struct nouveau_channel *); - extern int nv10_fifo_load_context(struct nouveau_channel *); - extern int nv10_fifo_unload_context(struct drm_device *); - - /* nv40_fifo.c */ - extern int nv40_fifo_init(struct drm_device *); - extern int nv40_fifo_create_context(struct nouveau_channel *); --extern void nv40_fifo_destroy_context(struct nouveau_channel *); - extern int nv40_fifo_load_context(struct nouveau_channel *); - extern int nv40_fifo_unload_context(struct drm_device *); - -@@ -970,6 +1078,7 @@ - extern void nv50_fifo_destroy_context(struct nouveau_channel *); - extern int nv50_fifo_load_context(struct nouveau_channel *); - extern int nv50_fifo_unload_context(struct drm_device *); -+extern void nv50_fifo_tlb_flush(struct drm_device *dev); - - /* nvc0_fifo.c */ - extern int nvc0_fifo_init(struct drm_device *); -@@ -977,7 +1086,6 @@ - extern void nvc0_fifo_disable(struct drm_device *); - extern void nvc0_fifo_enable(struct drm_device *); - extern bool nvc0_fifo_reassign(struct drm_device *, bool); --extern bool nvc0_fifo_cache_flush(struct drm_device *); - extern bool nvc0_fifo_cache_pull(struct drm_device *, bool); - extern int nvc0_fifo_channel_id(struct drm_device *); - extern int nvc0_fifo_create_context(struct nouveau_channel *); -@@ -986,7 +1094,6 @@ - extern int nvc0_fifo_unload_context(struct drm_device *); - - /* nv04_graph.c */ --extern struct nouveau_pgraph_object_class nv04_graph_grclass[]; - extern int nv04_graph_init(struct drm_device *); - extern void nv04_graph_takedown(struct drm_device *); - extern void nv04_graph_fifo_access(struct drm_device *, bool); -@@ -996,9 +1103,10 @@ - extern int nv04_graph_load_context(struct nouveau_channel *); - extern int nv04_graph_unload_context(struct drm_device *); - extern void nv04_graph_context_switch(struct drm_device *); -+extern int nv04_graph_mthd_page_flip(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data); - - /* nv10_graph.c */ --extern struct nouveau_pgraph_object_class nv10_graph_grclass[]; - extern int nv10_graph_init(struct drm_device *); - extern void nv10_graph_takedown(struct drm_device *); - extern struct nouveau_channel *nv10_graph_channel(struct drm_device *); -@@ -1007,12 +1115,9 @@ - extern int nv10_graph_load_context(struct nouveau_channel *); - extern int nv10_graph_unload_context(struct drm_device *); - extern void nv10_graph_context_switch(struct drm_device *); --extern void nv10_graph_set_region_tiling(struct drm_device *, int, uint32_t, -- uint32_t, uint32_t); -+extern void nv10_graph_set_tile_region(struct drm_device *dev, int i); - - /* nv20_graph.c */ --extern struct nouveau_pgraph_object_class nv20_graph_grclass[]; --extern struct nouveau_pgraph_object_class nv30_graph_grclass[]; - extern int nv20_graph_create_context(struct nouveau_channel *); - extern void nv20_graph_destroy_context(struct nouveau_channel *); - extern int nv20_graph_load_context(struct nouveau_channel *); -@@ -1020,11 +1125,9 @@ - extern int nv20_graph_init(struct drm_device *); - extern void nv20_graph_takedown(struct drm_device *); - extern int nv30_graph_init(struct drm_device *); --extern void nv20_graph_set_region_tiling(struct drm_device *, int, uint32_t, -- uint32_t, uint32_t); -+extern void nv20_graph_set_tile_region(struct drm_device *dev, int i); - - /* nv40_graph.c */ --extern struct nouveau_pgraph_object_class nv40_graph_grclass[]; - extern int nv40_graph_init(struct drm_device *); - extern void nv40_graph_takedown(struct drm_device *); - extern struct nouveau_channel *nv40_graph_channel(struct drm_device *); -@@ -1033,11 +1136,9 @@ - extern int nv40_graph_load_context(struct nouveau_channel *); - extern int nv40_graph_unload_context(struct drm_device *); - extern void nv40_grctx_init(struct nouveau_grctx *); --extern void nv40_graph_set_region_tiling(struct drm_device *, int, uint32_t, -- uint32_t, uint32_t); -+extern void nv40_graph_set_tile_region(struct drm_device *dev, int i); - - /* nv50_graph.c */ --extern struct nouveau_pgraph_object_class nv50_graph_grclass[]; - extern int nv50_graph_init(struct drm_device *); - extern void nv50_graph_takedown(struct drm_device *); - extern void nv50_graph_fifo_access(struct drm_device *, bool); -@@ -1048,6 +1149,8 @@ - extern int nv50_graph_unload_context(struct drm_device *); - extern void nv50_graph_context_switch(struct drm_device *); - extern int nv50_grctx_init(struct nouveau_grctx *); -+extern void nv50_graph_tlb_flush(struct drm_device *dev); -+extern void nv86_graph_tlb_flush(struct drm_device *dev); - - /* nvc0_graph.c */ - extern int nvc0_graph_init(struct drm_device *); -@@ -1059,13 +1162,20 @@ - extern int nvc0_graph_load_context(struct nouveau_channel *); - extern int nvc0_graph_unload_context(struct drm_device *); - -+/* nv84_crypt.c */ -+extern int nv84_crypt_init(struct drm_device *dev); -+extern void nv84_crypt_fini(struct drm_device *dev); -+extern int nv84_crypt_create_context(struct nouveau_channel *); -+extern void nv84_crypt_destroy_context(struct nouveau_channel *); -+extern void nv84_crypt_tlb_flush(struct drm_device *dev); -+ - /* nv04_instmem.c */ - extern int nv04_instmem_init(struct drm_device *); - extern void nv04_instmem_takedown(struct drm_device *); - extern int nv04_instmem_suspend(struct drm_device *); - extern void nv04_instmem_resume(struct drm_device *); - extern int nv04_instmem_populate(struct drm_device *, struct nouveau_gpuobj *, -- uint32_t *size); -+ u32 *size, u32 align); - extern void nv04_instmem_clear(struct drm_device *, struct nouveau_gpuobj *); - extern int nv04_instmem_bind(struct drm_device *, struct nouveau_gpuobj *); - extern int nv04_instmem_unbind(struct drm_device *, struct nouveau_gpuobj *); -@@ -1077,7 +1187,7 @@ - extern int nv50_instmem_suspend(struct drm_device *); - extern void nv50_instmem_resume(struct drm_device *); - extern int nv50_instmem_populate(struct drm_device *, struct nouveau_gpuobj *, -- uint32_t *size); -+ u32 *size, u32 align); - extern void nv50_instmem_clear(struct drm_device *, struct nouveau_gpuobj *); - extern int nv50_instmem_bind(struct drm_device *, struct nouveau_gpuobj *); - extern int nv50_instmem_unbind(struct drm_device *, struct nouveau_gpuobj *); -@@ -1091,7 +1201,7 @@ - extern int nvc0_instmem_suspend(struct drm_device *); - extern void nvc0_instmem_resume(struct drm_device *); - extern int nvc0_instmem_populate(struct drm_device *, struct nouveau_gpuobj *, -- uint32_t *size); -+ u32 *size, u32 align); - extern void nvc0_instmem_clear(struct drm_device *, struct nouveau_gpuobj *); - extern int nvc0_instmem_bind(struct drm_device *, struct nouveau_gpuobj *); - extern int nvc0_instmem_unbind(struct drm_device *, struct nouveau_gpuobj *); -@@ -1165,22 +1275,51 @@ - extern void nouveau_bo_wr16(struct nouveau_bo *nvbo, unsigned index, u16 val); - extern u32 nouveau_bo_rd32(struct nouveau_bo *nvbo, unsigned index); - extern void nouveau_bo_wr32(struct nouveau_bo *nvbo, unsigned index, u32 val); --extern int nouveau_bo_sync_gpu(struct nouveau_bo *, struct nouveau_channel *); -+extern void nouveau_bo_fence(struct nouveau_bo *, struct nouveau_fence *); - - /* nouveau_fence.c */ - struct nouveau_fence; --extern int nouveau_fence_init(struct nouveau_channel *); --extern void nouveau_fence_fini(struct nouveau_channel *); -+extern int nouveau_fence_init(struct drm_device *); -+extern void nouveau_fence_fini(struct drm_device *); -+extern int nouveau_fence_channel_init(struct nouveau_channel *); -+extern void nouveau_fence_channel_fini(struct nouveau_channel *); - extern void nouveau_fence_update(struct nouveau_channel *); - extern int nouveau_fence_new(struct nouveau_channel *, struct nouveau_fence **, - bool emit); - extern int nouveau_fence_emit(struct nouveau_fence *); -+extern void nouveau_fence_work(struct nouveau_fence *fence, -+ void (*work)(void *priv, bool signalled), -+ void *priv); - struct nouveau_channel *nouveau_fence_channel(struct nouveau_fence *); --extern bool nouveau_fence_signalled(void *obj, void *arg); --extern int nouveau_fence_wait(void *obj, void *arg, bool lazy, bool intr); --extern int nouveau_fence_flush(void *obj, void *arg); --extern void nouveau_fence_unref(void **obj); --extern void *nouveau_fence_ref(void *obj); -+ -+extern bool __nouveau_fence_signalled(void *obj, void *arg); -+extern int __nouveau_fence_wait(void *obj, void *arg, bool lazy, bool intr); -+extern int __nouveau_fence_flush(void *obj, void *arg); -+extern void __nouveau_fence_unref(void **obj); -+extern void *__nouveau_fence_ref(void *obj); -+ -+static inline bool nouveau_fence_signalled(struct nouveau_fence *obj) -+{ -+ return __nouveau_fence_signalled(obj, NULL); -+} -+static inline int -+nouveau_fence_wait(struct nouveau_fence *obj, bool lazy, bool intr) -+{ -+ return __nouveau_fence_wait(obj, NULL, lazy, intr); -+} -+extern int nouveau_fence_sync(struct nouveau_fence *, struct nouveau_channel *); -+static inline int nouveau_fence_flush(struct nouveau_fence *obj) -+{ -+ return __nouveau_fence_flush(obj, NULL); -+} -+static inline void nouveau_fence_unref(struct nouveau_fence **obj) -+{ -+ __nouveau_fence_unref((void **)obj); -+} -+static inline struct nouveau_fence *nouveau_fence_ref(struct nouveau_fence *obj) -+{ -+ return __nouveau_fence_ref(obj); -+} - - /* nouveau_gem.c */ - extern int nouveau_gem_new(struct drm_device *, struct nouveau_channel *, -@@ -1200,6 +1339,14 @@ - extern int nouveau_gem_ioctl_info(struct drm_device *, void *, - struct drm_file *); - -+/* nouveau_display.c */ -+int nouveau_vblank_enable(struct drm_device *dev, int crtc); -+void nouveau_vblank_disable(struct drm_device *dev, int crtc); -+int nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb, -+ struct drm_pending_vblank_event *event); -+int nouveau_finish_page_flip(struct nouveau_channel *, -+ struct nouveau_page_flip_state *); -+ - /* nv10_gpio.c */ - int nv10_gpio_get(struct drm_device *dev, enum dcb_gpio_tag tag); - int nv10_gpio_set(struct drm_device *dev, enum dcb_gpio_tag tag, int state); -@@ -1255,12 +1402,11 @@ - iowrite32_native(val, dev_priv->mmio + reg); - } - --static inline void nv_mask(struct drm_device *dev, u32 reg, u32 mask, u32 val) -+static inline u32 nv_mask(struct drm_device *dev, u32 reg, u32 mask, u32 val) - { - u32 tmp = nv_rd32(dev, reg); -- tmp &= ~mask; -- tmp |= val; -- nv_wr32(dev, reg, tmp); -+ nv_wr32(dev, reg, (tmp & ~mask) | val); -+ return tmp; - } - - static inline u8 nv_rd08(struct drm_device *dev, unsigned reg) -@@ -1275,7 +1421,7 @@ - iowrite8(val, dev_priv->mmio + reg); - } - --#define nv_wait(reg, mask, val) \ -+#define nv_wait(dev, reg, mask, val) \ - nouveau_wait_until(dev, 2000000000ULL, (reg), (mask), (val)) - - /* PRAMIN access */ -@@ -1292,17 +1438,8 @@ - } - - /* object access */ --static inline u32 nv_ro32(struct drm_device *dev, struct nouveau_gpuobj *obj, -- unsigned index) --{ -- return nv_ri32(dev, obj->im_pramin->start + index * 4); --} -- --static inline void nv_wo32(struct drm_device *dev, struct nouveau_gpuobj *obj, -- unsigned index, u32 val) --{ -- nv_wi32(dev, obj->im_pramin->start + index * 4, val); --} -+extern u32 nv_ro32(struct nouveau_gpuobj *, u32 offset); -+extern void nv_wo32(struct nouveau_gpuobj *, u32 offset, u32 val); - - /* - * Logging -@@ -1403,9 +1540,11 @@ - #define NV_SW_SEMAPHORE_OFFSET 0x00000064 - #define NV_SW_SEMAPHORE_ACQUIRE 0x00000068 - #define NV_SW_SEMAPHORE_RELEASE 0x0000006c -+#define NV_SW_YIELD 0x00000080 - #define NV_SW_DMA_VBLSEM 0x0000018c - #define NV_SW_VBLSEM_OFFSET 0x00000400 - #define NV_SW_VBLSEM_RELEASE_VALUE 0x00000404 - #define NV_SW_VBLSEM_RELEASE 0x00000408 -+#define NV_SW_PAGE_FLIP 0x00000500 - - #endif /* __NOUVEAU_DRV_H__ */ -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_encoder.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_encoder.h ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_encoder.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_encoder.h 2010-11-05 00:40:00.000000000 +0100 -@@ -55,6 +55,7 @@ - int dpcd_version; - int link_nr; - int link_bw; -+ bool enhanced_frame; - } dp; - }; - }; -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_fbcon.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_fbcon.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.c 2010-11-05 00:40:00.000000000 +0100 -@@ -49,6 +49,96 @@ - #include "nouveau_fbcon.h" - #include "nouveau_dma.h" - -+static void -+nouveau_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect) -+{ -+ struct nouveau_fbdev *nfbdev = info->par; -+ struct drm_device *dev = nfbdev->dev; -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ int ret; -+ -+ if (info->state != FBINFO_STATE_RUNNING) -+ return; -+ -+ ret = -ENODEV; -+ if (!in_interrupt() && !(info->flags & FBINFO_HWACCEL_DISABLED) && -+ mutex_trylock(&dev_priv->channel->mutex)) { -+ if (dev_priv->chipset < NV_50) -+ ret = nv04_fbcon_fillrect(info, rect); -+ else -+ if (dev_priv->chipset < NV_C0) -+ ret = nv50_fbcon_fillrect(info, rect); -+ mutex_unlock(&dev_priv->channel->mutex); -+ } -+ -+ if (ret == 0) -+ return; -+ -+ if (ret != -ENODEV) -+ nouveau_fbcon_gpu_lockup(info); -+ cfb_fillrect(info, rect); -+} -+ -+static void -+nouveau_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *image) -+{ -+ struct nouveau_fbdev *nfbdev = info->par; -+ struct drm_device *dev = nfbdev->dev; -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ int ret; -+ -+ if (info->state != FBINFO_STATE_RUNNING) -+ return; -+ -+ ret = -ENODEV; -+ if (!in_interrupt() && !(info->flags & FBINFO_HWACCEL_DISABLED) && -+ mutex_trylock(&dev_priv->channel->mutex)) { -+ if (dev_priv->chipset < NV_50) -+ ret = nv04_fbcon_copyarea(info, image); -+ else -+ if (dev_priv->chipset < NV_C0) -+ ret = nv50_fbcon_copyarea(info, image); -+ mutex_unlock(&dev_priv->channel->mutex); -+ } -+ -+ if (ret == 0) -+ return; -+ -+ if (ret != -ENODEV) -+ nouveau_fbcon_gpu_lockup(info); -+ cfb_copyarea(info, image); -+} -+ -+static void -+nouveau_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) -+{ -+ struct nouveau_fbdev *nfbdev = info->par; -+ struct drm_device *dev = nfbdev->dev; -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ int ret; -+ -+ if (info->state != FBINFO_STATE_RUNNING) -+ return; -+ -+ ret = -ENODEV; -+ if (!in_interrupt() && !(info->flags & FBINFO_HWACCEL_DISABLED) && -+ mutex_trylock(&dev_priv->channel->mutex)) { -+ if (dev_priv->chipset < NV_50) -+ ret = nv04_fbcon_imageblit(info, image); -+ else -+ if (dev_priv->chipset < NV_C0) -+ ret = nv50_fbcon_imageblit(info, image); -+ mutex_unlock(&dev_priv->channel->mutex); -+ } -+ -+ if (ret == 0) -+ return; -+ -+ if (ret != -ENODEV) -+ nouveau_fbcon_gpu_lockup(info); -+ cfb_imageblit(info, image); -+} -+ - static int - nouveau_fbcon_sync(struct fb_info *info) - { -@@ -58,12 +148,17 @@ - struct nouveau_channel *chan = dev_priv->channel; - int ret, i; - -- if (!chan || !chan->accel_done || -+ if (!chan || !chan->accel_done || in_interrupt() || - info->state != FBINFO_STATE_RUNNING || - info->flags & FBINFO_HWACCEL_DISABLED) - return 0; - -- if (RING_SPACE(chan, 4)) { -+ if (!mutex_trylock(&chan->mutex)) -+ return 0; -+ -+ ret = RING_SPACE(chan, 4); -+ if (ret) { -+ mutex_unlock(&chan->mutex); - nouveau_fbcon_gpu_lockup(info); - return 0; - } -@@ -74,6 +169,7 @@ - OUT_RING(chan, 0); - nouveau_bo_wr32(chan->notifier_bo, chan->m2mf_ntfy + 3, 0xffffffff); - FIRE_RING(chan); -+ mutex_unlock(&chan->mutex); - - ret = -EBUSY; - for (i = 0; i < 100000; i++) { -@@ -97,36 +193,22 @@ - .owner = THIS_MODULE, - .fb_check_var = drm_fb_helper_check_var, - .fb_set_par = drm_fb_helper_set_par, -- .fb_fillrect = cfb_fillrect, -- .fb_copyarea = cfb_copyarea, -- .fb_imageblit = cfb_imageblit, -+ .fb_fillrect = nouveau_fbcon_fillrect, -+ .fb_copyarea = nouveau_fbcon_copyarea, -+ .fb_imageblit = nouveau_fbcon_imageblit, - .fb_sync = nouveau_fbcon_sync, - .fb_pan_display = drm_fb_helper_pan_display, - .fb_blank = drm_fb_helper_blank, - .fb_setcmap = drm_fb_helper_setcmap, - }; - --static struct fb_ops nv04_fbcon_ops = { -+static struct fb_ops nouveau_fbcon_sw_ops = { - .owner = THIS_MODULE, - .fb_check_var = drm_fb_helper_check_var, - .fb_set_par = drm_fb_helper_set_par, -- .fb_fillrect = nv04_fbcon_fillrect, -- .fb_copyarea = nv04_fbcon_copyarea, -- .fb_imageblit = nv04_fbcon_imageblit, -- .fb_sync = nouveau_fbcon_sync, -- .fb_pan_display = drm_fb_helper_pan_display, -- .fb_blank = drm_fb_helper_blank, -- .fb_setcmap = drm_fb_helper_setcmap, --}; -- --static struct fb_ops nv50_fbcon_ops = { -- .owner = THIS_MODULE, -- .fb_check_var = drm_fb_helper_check_var, -- .fb_set_par = drm_fb_helper_set_par, -- .fb_fillrect = nv50_fbcon_fillrect, -- .fb_copyarea = nv50_fbcon_copyarea, -- .fb_imageblit = nv50_fbcon_imageblit, -- .fb_sync = nouveau_fbcon_sync, -+ .fb_fillrect = cfb_fillrect, -+ .fb_copyarea = cfb_copyarea, -+ .fb_imageblit = cfb_imageblit, - .fb_pan_display = drm_fb_helper_pan_display, - .fb_blank = drm_fb_helper_blank, - .fb_setcmap = drm_fb_helper_setcmap, -@@ -251,7 +333,7 @@ - FBINFO_HWACCEL_FILLRECT | - FBINFO_HWACCEL_IMAGEBLIT; - info->flags |= FBINFO_CAN_FORCE_OUTPUT; -- info->fbops = &nouveau_fbcon_ops; -+ info->fbops = &nouveau_fbcon_sw_ops; - info->fix.smem_start = dev->mode_config.fb_base + nvbo->bo.offset - - dev_priv->vm_vram_base; - info->fix.smem_len = size; -@@ -279,19 +361,18 @@ - info->pixmap.flags = FB_PIXMAP_SYSTEM; - info->pixmap.scan_align = 1; - -+ mutex_unlock(&dev->struct_mutex); -+ - if (dev_priv->channel && !nouveau_nofbaccel) { -- switch (dev_priv->card_type) { -- case NV_C0: -- break; -- case NV_50: -- nv50_fbcon_accel_init(info); -- info->fbops = &nv50_fbcon_ops; -- break; -- default: -- nv04_fbcon_accel_init(info); -- info->fbops = &nv04_fbcon_ops; -- break; -- }; -+ ret = -ENODEV; -+ if (dev_priv->card_type < NV_50) -+ ret = nv04_fbcon_accel_init(info); -+ else -+ if (dev_priv->card_type < NV_C0) -+ ret = nv50_fbcon_accel_init(info); -+ -+ if (ret == 0) -+ info->fbops = &nouveau_fbcon_ops; - } - - nouveau_fbcon_zfill(dev, nfbdev); -@@ -302,7 +383,6 @@ - nouveau_fb->base.height, - nvbo->bo.offset, nvbo); - -- mutex_unlock(&dev->struct_mutex); - vga_switcheroo_client_fb_set(dev->pdev, info); - return 0; - -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_fbcon.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.h ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_fbcon.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.h 2010-11-05 00:40:00.000000000 +0100 -@@ -40,13 +40,13 @@ - - void nouveau_fbcon_restore(void); - --void nv04_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region); --void nv04_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect); --void nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image); -+int nv04_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region); -+int nv04_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect); -+int nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image); - int nv04_fbcon_accel_init(struct fb_info *info); --void nv50_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect); --void nv50_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region); --void nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image); -+int nv50_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect); -+int nv50_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region); -+int nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image); - int nv50_fbcon_accel_init(struct fb_info *info); - - void nouveau_fbcon_gpu_lockup(struct fb_info *info); -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_fence.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_fence.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_fence.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_fence.c 2010-11-05 00:40:00.000000000 +0100 -@@ -28,9 +28,11 @@ - #include "drm.h" - - #include "nouveau_drv.h" -+#include "nouveau_ramht.h" - #include "nouveau_dma.h" - --#define USE_REFCNT (dev_priv->card_type >= NV_10) -+#define USE_REFCNT(dev) (nouveau_private(dev)->chipset >= 0x10) -+#define USE_SEMA(dev) (nouveau_private(dev)->chipset >= 0x17) - - struct nouveau_fence { - struct nouveau_channel *channel; -@@ -39,6 +41,15 @@ - - uint32_t sequence; - bool signalled; -+ -+ void (*work)(void *priv, bool signalled); -+ void *priv; -+}; -+ -+struct nouveau_semaphore { -+ struct kref ref; -+ struct drm_device *dev; -+ struct drm_mm_node *mem; - }; - - static inline struct nouveau_fence * -@@ -53,20 +64,20 @@ - struct nouveau_fence *fence = - container_of(ref, struct nouveau_fence, refcount); - -+ nouveau_channel_ref(NULL, &fence->channel); - kfree(fence); - } - - void - nouveau_fence_update(struct nouveau_channel *chan) - { -- struct drm_nouveau_private *dev_priv = chan->dev->dev_private; -- struct list_head *entry, *tmp; -- struct nouveau_fence *fence; -+ struct drm_device *dev = chan->dev; -+ struct nouveau_fence *tmp, *fence; - uint32_t sequence; - - spin_lock(&chan->fence.lock); - -- if (USE_REFCNT) -+ if (USE_REFCNT(dev)) - sequence = nvchan_rd32(chan, 0x48); - else - sequence = atomic_read(&chan->fence.last_sequence_irq); -@@ -75,12 +86,14 @@ - goto out; - chan->fence.sequence_ack = sequence; - -- list_for_each_safe(entry, tmp, &chan->fence.pending) { -- fence = list_entry(entry, struct nouveau_fence, entry); -- -+ list_for_each_entry_safe(fence, tmp, &chan->fence.pending, entry) { - sequence = fence->sequence; - fence->signalled = true; - list_del(&fence->entry); -+ -+ if (unlikely(fence->work)) -+ fence->work(fence->priv, true); -+ - kref_put(&fence->refcount, nouveau_fence_del); - - if (sequence == chan->fence.sequence_ack) -@@ -101,13 +114,13 @@ - if (!fence) - return -ENOMEM; - kref_init(&fence->refcount); -- fence->channel = chan; -+ nouveau_channel_ref(chan, &fence->channel); - - if (emit) - ret = nouveau_fence_emit(fence); - - if (ret) -- nouveau_fence_unref((void *)&fence); -+ nouveau_fence_unref(&fence); - *pfence = fence; - return ret; - } -@@ -115,14 +128,14 @@ - struct nouveau_channel * - nouveau_fence_channel(struct nouveau_fence *fence) - { -- return fence ? fence->channel : NULL; -+ return fence ? nouveau_channel_get_unlocked(fence->channel) : NULL; - } - - int - nouveau_fence_emit(struct nouveau_fence *fence) - { -- struct drm_nouveau_private *dev_priv = fence->channel->dev->dev_private; - struct nouveau_channel *chan = fence->channel; -+ struct drm_device *dev = chan->dev; - int ret; - - ret = RING_SPACE(chan, 2); -@@ -143,7 +156,7 @@ - list_add_tail(&fence->entry, &chan->fence.pending); - spin_unlock(&chan->fence.lock); - -- BEGIN_RING(chan, NvSubSw, USE_REFCNT ? 0x0050 : 0x0150, 1); -+ BEGIN_RING(chan, NvSubSw, USE_REFCNT(dev) ? 0x0050 : 0x0150, 1); - OUT_RING(chan, fence->sequence); - FIRE_RING(chan); - -@@ -151,7 +164,26 @@ - } - - void --nouveau_fence_unref(void **sync_obj) -+nouveau_fence_work(struct nouveau_fence *fence, -+ void (*work)(void *priv, bool signalled), -+ void *priv) -+{ -+ BUG_ON(fence->work); -+ -+ spin_lock(&fence->channel->fence.lock); -+ -+ if (fence->signalled) { -+ work(priv, true); -+ } else { -+ fence->work = work; -+ fence->priv = priv; -+ } -+ -+ spin_unlock(&fence->channel->fence.lock); -+} -+ -+void -+__nouveau_fence_unref(void **sync_obj) - { - struct nouveau_fence *fence = nouveau_fence(*sync_obj); - -@@ -161,7 +193,7 @@ - } - - void * --nouveau_fence_ref(void *sync_obj) -+__nouveau_fence_ref(void *sync_obj) - { - struct nouveau_fence *fence = nouveau_fence(sync_obj); - -@@ -170,7 +202,7 @@ - } - - bool --nouveau_fence_signalled(void *sync_obj, void *sync_arg) -+__nouveau_fence_signalled(void *sync_obj, void *sync_arg) - { - struct nouveau_fence *fence = nouveau_fence(sync_obj); - struct nouveau_channel *chan = fence->channel; -@@ -183,13 +215,13 @@ - } - - int --nouveau_fence_wait(void *sync_obj, void *sync_arg, bool lazy, bool intr) -+__nouveau_fence_wait(void *sync_obj, void *sync_arg, bool lazy, bool intr) - { - unsigned long timeout = jiffies + (3 * DRM_HZ); - int ret = 0; - - while (1) { -- if (nouveau_fence_signalled(sync_obj, sync_arg)) -+ if (__nouveau_fence_signalled(sync_obj, sync_arg)) - break; - - if (time_after_eq(jiffies, timeout)) { -@@ -213,33 +245,311 @@ - return ret; - } - -+static struct nouveau_semaphore * -+alloc_semaphore(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_semaphore *sema; -+ int ret; -+ -+ if (!USE_SEMA(dev)) -+ return NULL; -+ -+ sema = kmalloc(sizeof(*sema), GFP_KERNEL); -+ if (!sema) -+ goto fail; -+ -+ ret = drm_mm_pre_get(&dev_priv->fence.heap); -+ if (ret) -+ goto fail; -+ -+ spin_lock(&dev_priv->fence.lock); -+ sema->mem = drm_mm_search_free(&dev_priv->fence.heap, 4, 0, 0); -+ if (sema->mem) -+ sema->mem = drm_mm_get_block_atomic(sema->mem, 4, 0); -+ spin_unlock(&dev_priv->fence.lock); -+ -+ if (!sema->mem) -+ goto fail; -+ -+ kref_init(&sema->ref); -+ sema->dev = dev; -+ nouveau_bo_wr32(dev_priv->fence.bo, sema->mem->start / 4, 0); -+ -+ return sema; -+fail: -+ kfree(sema); -+ return NULL; -+} -+ -+static void -+free_semaphore(struct kref *ref) -+{ -+ struct nouveau_semaphore *sema = -+ container_of(ref, struct nouveau_semaphore, ref); -+ struct drm_nouveau_private *dev_priv = sema->dev->dev_private; -+ -+ spin_lock(&dev_priv->fence.lock); -+ drm_mm_put_block(sema->mem); -+ spin_unlock(&dev_priv->fence.lock); -+ -+ kfree(sema); -+} -+ -+static void -+semaphore_work(void *priv, bool signalled) -+{ -+ struct nouveau_semaphore *sema = priv; -+ struct drm_nouveau_private *dev_priv = sema->dev->dev_private; -+ -+ if (unlikely(!signalled)) -+ nouveau_bo_wr32(dev_priv->fence.bo, sema->mem->start / 4, 1); -+ -+ kref_put(&sema->ref, free_semaphore); -+} -+ -+static int -+emit_semaphore(struct nouveau_channel *chan, int method, -+ struct nouveau_semaphore *sema) -+{ -+ struct drm_nouveau_private *dev_priv = sema->dev->dev_private; -+ struct nouveau_fence *fence; -+ bool smart = (dev_priv->card_type >= NV_50); -+ int ret; -+ -+ ret = RING_SPACE(chan, smart ? 8 : 4); -+ if (ret) -+ return ret; -+ -+ if (smart) { -+ BEGIN_RING(chan, NvSubSw, NV_SW_DMA_SEMAPHORE, 1); -+ OUT_RING(chan, NvSema); -+ } -+ BEGIN_RING(chan, NvSubSw, NV_SW_SEMAPHORE_OFFSET, 1); -+ OUT_RING(chan, sema->mem->start); -+ -+ if (smart && method == NV_SW_SEMAPHORE_ACQUIRE) { -+ /* -+ * NV50 tries to be too smart and context-switch -+ * between semaphores instead of doing a "first come, -+ * first served" strategy like previous cards -+ * do. -+ * -+ * That's bad because the ACQUIRE latency can get as -+ * large as the PFIFO context time slice in the -+ * typical DRI2 case where you have several -+ * outstanding semaphores at the same moment. -+ * -+ * If we're going to ACQUIRE, force the card to -+ * context switch before, just in case the matching -+ * RELEASE is already scheduled to be executed in -+ * another channel. -+ */ -+ BEGIN_RING(chan, NvSubSw, NV_SW_YIELD, 1); -+ OUT_RING(chan, 0); -+ } -+ -+ BEGIN_RING(chan, NvSubSw, method, 1); -+ OUT_RING(chan, 1); -+ -+ if (smart && method == NV_SW_SEMAPHORE_RELEASE) { -+ /* -+ * Force the card to context switch, there may be -+ * another channel waiting for the semaphore we just -+ * released. -+ */ -+ BEGIN_RING(chan, NvSubSw, NV_SW_YIELD, 1); -+ OUT_RING(chan, 0); -+ } -+ -+ /* Delay semaphore destruction until its work is done */ -+ ret = nouveau_fence_new(chan, &fence, true); -+ if (ret) -+ return ret; -+ -+ kref_get(&sema->ref); -+ nouveau_fence_work(fence, semaphore_work, sema); -+ nouveau_fence_unref(&fence); -+ -+ return 0; -+} -+ - int --nouveau_fence_flush(void *sync_obj, void *sync_arg) -+nouveau_fence_sync(struct nouveau_fence *fence, -+ struct nouveau_channel *wchan) -+{ -+ struct nouveau_channel *chan = nouveau_fence_channel(fence); -+ struct drm_device *dev = wchan->dev; -+ struct nouveau_semaphore *sema; -+ int ret = 0; -+ -+ if (likely(!chan || chan == wchan || -+ nouveau_fence_signalled(fence))) -+ goto out; -+ -+ sema = alloc_semaphore(dev); -+ if (!sema) { -+ /* Early card or broken userspace, fall back to -+ * software sync. */ -+ ret = nouveau_fence_wait(fence, true, false); -+ goto out; -+ } -+ -+ /* try to take chan's mutex, if we can't take it right away -+ * we have to fallback to software sync to prevent locking -+ * order issues -+ */ -+ if (!mutex_trylock(&chan->mutex)) { -+ ret = nouveau_fence_wait(fence, true, false); -+ goto out_unref; -+ } -+ -+ /* Make wchan wait until it gets signalled */ -+ ret = emit_semaphore(wchan, NV_SW_SEMAPHORE_ACQUIRE, sema); -+ if (ret) -+ goto out_unlock; -+ -+ /* Signal the semaphore from chan */ -+ ret = emit_semaphore(chan, NV_SW_SEMAPHORE_RELEASE, sema); -+ -+out_unlock: -+ mutex_unlock(&chan->mutex); -+out_unref: -+ kref_put(&sema->ref, free_semaphore); -+out: -+ if (chan) -+ nouveau_channel_put_unlocked(&chan); -+ return ret; -+} -+ -+int -+__nouveau_fence_flush(void *sync_obj, void *sync_arg) - { - return 0; - } - - int --nouveau_fence_init(struct nouveau_channel *chan) -+nouveau_fence_channel_init(struct nouveau_channel *chan) - { -+ struct drm_device *dev = chan->dev; -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_gpuobj *obj = NULL; -+ int ret; -+ -+ /* Create an NV_SW object for various sync purposes */ -+ ret = nouveau_gpuobj_gr_new(chan, NV_SW, &obj); -+ if (ret) -+ return ret; -+ -+ ret = nouveau_ramht_insert(chan, NvSw, obj); -+ nouveau_gpuobj_ref(NULL, &obj); -+ if (ret) -+ return ret; -+ -+ ret = RING_SPACE(chan, 2); -+ if (ret) -+ return ret; -+ BEGIN_RING(chan, NvSubSw, 0, 1); -+ OUT_RING(chan, NvSw); -+ -+ /* Create a DMA object for the shared cross-channel sync area. */ -+ if (USE_SEMA(dev)) { -+ struct drm_mm_node *mem = dev_priv->fence.bo->bo.mem.mm_node; -+ -+ ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, -+ mem->start << PAGE_SHIFT, -+ mem->size << PAGE_SHIFT, -+ NV_DMA_ACCESS_RW, -+ NV_DMA_TARGET_VIDMEM, &obj); -+ if (ret) -+ return ret; -+ -+ ret = nouveau_ramht_insert(chan, NvSema, obj); -+ nouveau_gpuobj_ref(NULL, &obj); -+ if (ret) -+ return ret; -+ -+ ret = RING_SPACE(chan, 2); -+ if (ret) -+ return ret; -+ BEGIN_RING(chan, NvSubSw, NV_SW_DMA_SEMAPHORE, 1); -+ OUT_RING(chan, NvSema); -+ } -+ -+ FIRE_RING(chan); -+ - INIT_LIST_HEAD(&chan->fence.pending); - spin_lock_init(&chan->fence.lock); - atomic_set(&chan->fence.last_sequence_irq, 0); -+ - return 0; - } - - void --nouveau_fence_fini(struct nouveau_channel *chan) -+nouveau_fence_channel_fini(struct nouveau_channel *chan) - { -- struct list_head *entry, *tmp; -- struct nouveau_fence *fence; -+ struct nouveau_fence *tmp, *fence; - -- list_for_each_safe(entry, tmp, &chan->fence.pending) { -- fence = list_entry(entry, struct nouveau_fence, entry); -+ spin_lock(&chan->fence.lock); - -+ list_for_each_entry_safe(fence, tmp, &chan->fence.pending, entry) { - fence->signalled = true; - list_del(&fence->entry); -+ -+ if (unlikely(fence->work)) -+ fence->work(fence->priv, false); -+ - kref_put(&fence->refcount, nouveau_fence_del); - } -+ -+ spin_unlock(&chan->fence.lock); - } - -+int -+nouveau_fence_init(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ int ret; -+ -+ /* Create a shared VRAM heap for cross-channel sync. */ -+ if (USE_SEMA(dev)) { -+ ret = nouveau_bo_new(dev, NULL, 4096, 0, TTM_PL_FLAG_VRAM, -+ 0, 0, false, true, &dev_priv->fence.bo); -+ if (ret) -+ return ret; -+ -+ ret = nouveau_bo_pin(dev_priv->fence.bo, TTM_PL_FLAG_VRAM); -+ if (ret) -+ goto fail; -+ -+ ret = nouveau_bo_map(dev_priv->fence.bo); -+ if (ret) -+ goto fail; -+ -+ ret = drm_mm_init(&dev_priv->fence.heap, 0, -+ dev_priv->fence.bo->bo.mem.size); -+ if (ret) -+ goto fail; -+ -+ spin_lock_init(&dev_priv->fence.lock); -+ } -+ -+ return 0; -+fail: -+ nouveau_bo_unmap(dev_priv->fence.bo); -+ nouveau_bo_ref(NULL, &dev_priv->fence.bo); -+ return ret; -+} -+ -+void -+nouveau_fence_fini(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ -+ if (USE_SEMA(dev)) { -+ drm_mm_takedown(&dev_priv->fence.heap); -+ nouveau_bo_unmap(dev_priv->fence.bo); -+ nouveau_bo_unpin(dev_priv->fence.bo); -+ nouveau_bo_ref(NULL, &dev_priv->fence.bo); -+ } -+} -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_gem.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_gem.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_gem.c 2010-11-05 00:40:00.000000000 +0100 -@@ -48,9 +48,6 @@ - return; - nvbo->gem = NULL; - -- if (unlikely(nvbo->cpu_filp)) -- ttm_bo_synccpu_write_release(bo); -- - if (unlikely(nvbo->pin_refcnt)) { - nvbo->pin_refcnt = 1; - nouveau_bo_unpin(nvbo); -@@ -107,23 +104,29 @@ - } - - static bool --nouveau_gem_tile_flags_valid(struct drm_device *dev, uint32_t tile_flags) { -- switch (tile_flags) { -- case 0x0000: -- case 0x1800: -- case 0x2800: -- case 0x4800: -- case 0x7000: -- case 0x7400: -- case 0x7a00: -- case 0xe000: -- break; -- default: -- NV_ERROR(dev, "bad page flags: 0x%08x\n", tile_flags); -- return false; -+nouveau_gem_tile_flags_valid(struct drm_device *dev, uint32_t tile_flags) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ -+ if (dev_priv->card_type >= NV_50) { -+ switch (tile_flags & NOUVEAU_GEM_TILE_LAYOUT_MASK) { -+ case 0x0000: -+ case 0x1800: -+ case 0x2800: -+ case 0x4800: -+ case 0x7000: -+ case 0x7400: -+ case 0x7a00: -+ case 0xe000: -+ return true; -+ } -+ } else { -+ if (!(tile_flags & NOUVEAU_GEM_TILE_LAYOUT_MASK)) -+ return true; - } - -- return true; -+ NV_ERROR(dev, "bad page flags: 0x%08x\n", tile_flags); -+ return false; - } - - int -@@ -140,11 +143,6 @@ - if (unlikely(dev_priv->ttm.bdev.dev_mapping == NULL)) - dev_priv->ttm.bdev.dev_mapping = dev_priv->dev->dev_mapping; - -- if (req->channel_hint) { -- NOUVEAU_GET_USER_CHANNEL_WITH_RETURN(req->channel_hint, -- file_priv, chan); -- } -- - if (req->info.domain & NOUVEAU_GEM_DOMAIN_VRAM) - flags |= TTM_PL_FLAG_VRAM; - if (req->info.domain & NOUVEAU_GEM_DOMAIN_GART) -@@ -155,10 +153,18 @@ - if (!nouveau_gem_tile_flags_valid(dev, req->info.tile_flags)) - return -EINVAL; - -+ if (req->channel_hint) { -+ chan = nouveau_channel_get(dev, file_priv, req->channel_hint); -+ if (IS_ERR(chan)) -+ return PTR_ERR(chan); -+ } -+ - ret = nouveau_gem_new(dev, chan, req->info.size, req->align, flags, - req->info.tile_mode, req->info.tile_flags, false, - (req->info.domain & NOUVEAU_GEM_DOMAIN_MAPPABLE), - &nvbo); -+ if (chan) -+ nouveau_channel_put(&chan); - if (ret) - return ret; - -@@ -225,15 +231,8 @@ - - list_for_each_safe(entry, tmp, list) { - nvbo = list_entry(entry, struct nouveau_bo, entry); -- if (likely(fence)) { -- struct nouveau_fence *prev_fence; - -- spin_lock(&nvbo->bo.lock); -- prev_fence = nvbo->bo.sync_obj; -- nvbo->bo.sync_obj = nouveau_fence_ref(fence); -- spin_unlock(&nvbo->bo.lock); -- nouveau_fence_unref((void *)&prev_fence); -- } -+ nouveau_bo_fence(nvbo, fence); - - if (unlikely(nvbo->validate_mapped)) { - ttm_bo_kunmap(&nvbo->kmap); -@@ -293,14 +292,15 @@ - return -EINVAL; - } - -- ret = ttm_bo_reserve(&nvbo->bo, false, false, true, sequence); -+ ret = ttm_bo_reserve(&nvbo->bo, true, false, true, sequence); - if (ret) { - validate_fini(op, NULL); -- if (ret == -EAGAIN) -- ret = ttm_bo_wait_unreserved(&nvbo->bo, false); -+ if (unlikely(ret == -EAGAIN)) -+ ret = ttm_bo_wait_unreserved(&nvbo->bo, true); - drm_gem_object_unreference_unlocked(gem); -- if (ret) { -- NV_ERROR(dev, "fail reserve\n"); -+ if (unlikely(ret)) { -+ if (ret != -ERESTARTSYS) -+ NV_ERROR(dev, "fail reserve\n"); - return ret; - } - goto retry; -@@ -325,25 +325,6 @@ - validate_fini(op, NULL); - return -EINVAL; - } -- -- if (unlikely(atomic_read(&nvbo->bo.cpu_writers) > 0)) { -- validate_fini(op, NULL); -- -- if (nvbo->cpu_filp == file_priv) { -- NV_ERROR(dev, "bo %p mapped by process trying " -- "to validate it!\n", nvbo); -- return -EINVAL; -- } -- -- mutex_unlock(&drm_global_mutex); -- ret = ttm_bo_wait_cpu(&nvbo->bo, false); -- mutex_lock(&drm_global_mutex); -- if (ret) { -- NV_ERROR(dev, "fail wait_cpu\n"); -- return ret; -- } -- goto retry; -- } - } - - return 0; -@@ -362,7 +343,7 @@ - list_for_each_entry(nvbo, list, entry) { - struct drm_nouveau_gem_pushbuf_bo *b = &pbbo[nvbo->pbbo_index]; - -- ret = nouveau_bo_sync_gpu(nvbo, chan); -+ ret = nouveau_fence_sync(nvbo->bo.sync_obj, chan); - if (unlikely(ret)) { - NV_ERROR(dev, "fail pre-validate sync\n"); - return ret; -@@ -378,14 +359,15 @@ - - nvbo->channel = (b->read_domains & (1 << 31)) ? NULL : chan; - ret = ttm_bo_validate(&nvbo->bo, &nvbo->placement, -- false, false, false); -+ true, false, false); - nvbo->channel = NULL; - if (unlikely(ret)) { -- NV_ERROR(dev, "fail ttm_validate\n"); -+ if (ret != -ERESTARTSYS) -+ NV_ERROR(dev, "fail ttm_validate\n"); - return ret; - } - -- ret = nouveau_bo_sync_gpu(nvbo, chan); -+ ret = nouveau_fence_sync(nvbo->bo.sync_obj, chan); - if (unlikely(ret)) { - NV_ERROR(dev, "fail post-validate sync\n"); - return ret; -@@ -433,13 +415,15 @@ - - ret = validate_init(chan, file_priv, pbbo, nr_buffers, op); - if (unlikely(ret)) { -- NV_ERROR(dev, "validate_init\n"); -+ if (ret != -ERESTARTSYS) -+ NV_ERROR(dev, "validate_init\n"); - return ret; - } - - ret = validate_list(chan, &op->vram_list, pbbo, user_buffers); - if (unlikely(ret < 0)) { -- NV_ERROR(dev, "validate vram_list\n"); -+ if (ret != -ERESTARTSYS) -+ NV_ERROR(dev, "validate vram_list\n"); - validate_fini(op, NULL); - return ret; - } -@@ -447,7 +431,8 @@ - - ret = validate_list(chan, &op->gart_list, pbbo, user_buffers); - if (unlikely(ret < 0)) { -- NV_ERROR(dev, "validate gart_list\n"); -+ if (ret != -ERESTARTSYS) -+ NV_ERROR(dev, "validate gart_list\n"); - validate_fini(op, NULL); - return ret; - } -@@ -455,7 +440,8 @@ - - ret = validate_list(chan, &op->both_list, pbbo, user_buffers); - if (unlikely(ret < 0)) { -- NV_ERROR(dev, "validate both_list\n"); -+ if (ret != -ERESTARTSYS) -+ NV_ERROR(dev, "validate both_list\n"); - validate_fini(op, NULL); - return ret; - } -@@ -579,7 +565,9 @@ - struct nouveau_fence *fence = NULL; - int i, j, ret = 0, do_reloc = 0; - -- NOUVEAU_GET_USER_CHANNEL_WITH_RETURN(req->channel, file_priv, chan); -+ chan = nouveau_channel_get(dev, file_priv, req->channel); -+ if (IS_ERR(chan)) -+ return PTR_ERR(chan); - - req->vram_available = dev_priv->fb_aper_free; - req->gart_available = dev_priv->gart_info.aper_free; -@@ -589,28 +577,34 @@ - if (unlikely(req->nr_push > NOUVEAU_GEM_MAX_PUSH)) { - NV_ERROR(dev, "pushbuf push count exceeds limit: %d max %d\n", - req->nr_push, NOUVEAU_GEM_MAX_PUSH); -+ nouveau_channel_put(&chan); - return -EINVAL; - } - - if (unlikely(req->nr_buffers > NOUVEAU_GEM_MAX_BUFFERS)) { - NV_ERROR(dev, "pushbuf bo count exceeds limit: %d max %d\n", - req->nr_buffers, NOUVEAU_GEM_MAX_BUFFERS); -+ nouveau_channel_put(&chan); - return -EINVAL; - } - - if (unlikely(req->nr_relocs > NOUVEAU_GEM_MAX_RELOCS)) { - NV_ERROR(dev, "pushbuf reloc count exceeds limit: %d max %d\n", - req->nr_relocs, NOUVEAU_GEM_MAX_RELOCS); -+ nouveau_channel_put(&chan); - return -EINVAL; - } - - push = u_memcpya(req->push, req->nr_push, sizeof(*push)); -- if (IS_ERR(push)) -+ if (IS_ERR(push)) { -+ nouveau_channel_put(&chan); - return PTR_ERR(push); -+ } - - bo = u_memcpya(req->buffers, req->nr_buffers, sizeof(*bo)); - if (IS_ERR(bo)) { - kfree(push); -+ nouveau_channel_put(&chan); - return PTR_ERR(bo); - } - -@@ -633,7 +627,8 @@ - ret = nouveau_gem_pushbuf_validate(chan, file_priv, bo, req->buffers, - req->nr_buffers, &op, &do_reloc); - if (ret) { -- NV_ERROR(dev, "validate: %d\n", ret); -+ if (ret != -ERESTARTSYS) -+ NV_ERROR(dev, "validate: %d\n", ret); - goto out; - } - -@@ -726,7 +721,7 @@ - - out: - validate_fini(&op, fence); -- nouveau_fence_unref((void**)&fence); -+ nouveau_fence_unref(&fence); - kfree(bo); - kfree(push); - -@@ -744,6 +739,7 @@ - req->suffix1 = 0x00000000; - } - -+ nouveau_channel_put(&chan); - return ret; - } - -@@ -775,26 +771,9 @@ - return -ENOENT; - nvbo = nouveau_gem_object(gem); - -- if (nvbo->cpu_filp) { -- if (nvbo->cpu_filp == file_priv) -- goto out; -- -- ret = ttm_bo_wait_cpu(&nvbo->bo, no_wait); -- if (ret) -- goto out; -- } -- -- if (req->flags & NOUVEAU_GEM_CPU_PREP_NOBLOCK) { -- spin_lock(&nvbo->bo.lock); -- ret = ttm_bo_wait(&nvbo->bo, false, false, no_wait); -- spin_unlock(&nvbo->bo.lock); -- } else { -- ret = ttm_bo_synccpu_write_grab(&nvbo->bo, no_wait); -- if (ret == 0) -- nvbo->cpu_filp = file_priv; -- } -- --out: -+ spin_lock(&nvbo->bo.lock); -+ ret = ttm_bo_wait(&nvbo->bo, true, true, no_wait); -+ spin_unlock(&nvbo->bo.lock); - drm_gem_object_unreference_unlocked(gem); - return ret; - } -@@ -803,26 +782,7 @@ - nouveau_gem_ioctl_cpu_fini(struct drm_device *dev, void *data, - struct drm_file *file_priv) - { -- struct drm_nouveau_gem_cpu_prep *req = data; -- struct drm_gem_object *gem; -- struct nouveau_bo *nvbo; -- int ret = -EINVAL; -- -- gem = drm_gem_object_lookup(dev, file_priv, req->handle); -- if (!gem) -- return -ENOENT; -- nvbo = nouveau_gem_object(gem); -- -- if (nvbo->cpu_filp != file_priv) -- goto out; -- nvbo->cpu_filp = NULL; -- -- ttm_bo_synccpu_write_release(&nvbo->bo); -- ret = 0; -- --out: -- drm_gem_object_unreference_unlocked(gem); -- return ret; -+ return 0; - } - - int -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_grctx.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_grctx.h ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_grctx.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_grctx.h 2010-11-05 00:40:00.000000000 +0100 -@@ -126,7 +126,7 @@ - reg = (reg - 0x00400000) / 4; - reg = (reg - ctx->ctxprog_reg) + ctx->ctxvals_base; - -- nv_wo32(ctx->dev, ctx->data, reg, val); -+ nv_wo32(ctx->data, reg * 4, val); - } - #endif - -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_hw.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_hw.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.c 2010-11-05 00:40:00.000000000 +0100 -@@ -305,7 +305,7 @@ - bool mpll = Preg == 0x4020; - uint32_t oldPval = nvReadMC(dev, Preg); - uint32_t NMNM = pv->NM2 << 16 | pv->NM1; -- uint32_t Pval = (oldPval & (mpll ? ~(0x11 << 16) : ~(1 << 16))) | -+ uint32_t Pval = (oldPval & (mpll ? ~(0x77 << 16) : ~(7 << 16))) | - 0xc << 28 | pv->log2P << 16; - uint32_t saved4600 = 0; - /* some cards have different maskc040s */ -@@ -427,22 +427,12 @@ - struct nouveau_pll_vals *pllvals) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; -- const uint32_t nv04_regs[MAX_PLL_TYPES] = { NV_PRAMDAC_NVPLL_COEFF, -- NV_PRAMDAC_MPLL_COEFF, -- NV_PRAMDAC_VPLL_COEFF, -- NV_RAMDAC_VPLL2 }; -- const uint32_t nv40_regs[MAX_PLL_TYPES] = { 0x4000, -- 0x4020, -- NV_PRAMDAC_VPLL_COEFF, -- NV_RAMDAC_VPLL2 }; -- uint32_t reg1, pll1, pll2 = 0; -+ uint32_t reg1 = get_pll_register(dev, plltype), pll1, pll2 = 0; - struct pll_lims pll_lim; - int ret; - -- if (dev_priv->card_type < NV_40) -- reg1 = nv04_regs[plltype]; -- else -- reg1 = nv40_regs[plltype]; -+ if (reg1 == 0) -+ return -ENOENT; - - pll1 = nvReadMC(dev, reg1); - -@@ -491,8 +481,10 @@ - nouveau_hw_get_clock(struct drm_device *dev, enum pll_types plltype) - { - struct nouveau_pll_vals pllvals; -+ int ret; - -- if (plltype == MPLL && (dev->pci_device & 0x0ff0) == CHIPSET_NFORCE) { -+ if (plltype == PLL_MEMORY && -+ (dev->pci_device & 0x0ff0) == CHIPSET_NFORCE) { - uint32_t mpllP; - - pci_read_config_dword(pci_get_bus_and_slot(0, 3), 0x6c, &mpllP); -@@ -501,14 +493,17 @@ - - return 400000 / mpllP; - } else -- if (plltype == MPLL && (dev->pci_device & 0xff0) == CHIPSET_NFORCE2) { -+ if (plltype == PLL_MEMORY && -+ (dev->pci_device & 0xff0) == CHIPSET_NFORCE2) { - uint32_t clock; - - pci_read_config_dword(pci_get_bus_and_slot(0, 5), 0x4c, &clock); - return clock; - } - -- nouveau_hw_get_pllvals(dev, plltype, &pllvals); -+ ret = nouveau_hw_get_pllvals(dev, plltype, &pllvals); -+ if (ret) -+ return ret; - - return nouveau_hw_pllvals_to_clk(&pllvals); - } -@@ -524,11 +519,11 @@ - - struct pll_lims pll_lim; - struct nouveau_pll_vals pv; -- uint32_t pllreg = head ? NV_RAMDAC_VPLL2 : NV_PRAMDAC_VPLL_COEFF; -+ enum pll_types pll = head ? PLL_VPLL1 : PLL_VPLL0; - -- if (get_pll_limits(dev, head ? VPLL2 : VPLL1, &pll_lim)) -+ if (get_pll_limits(dev, pll, &pll_lim)) - return; -- nouveau_hw_get_pllvals(dev, head ? VPLL2 : VPLL1, &pv); -+ nouveau_hw_get_pllvals(dev, pll, &pv); - - if (pv.M1 >= pll_lim.vco1.min_m && pv.M1 <= pll_lim.vco1.max_m && - pv.N1 >= pll_lim.vco1.min_n && pv.N1 <= pll_lim.vco1.max_n && -@@ -541,7 +536,7 @@ - pv.M1 = pll_lim.vco1.max_m; - pv.N1 = pll_lim.vco1.min_n; - pv.log2P = pll_lim.max_usable_log2p; -- nouveau_hw_setpll(dev, pllreg, &pv); -+ nouveau_hw_setpll(dev, pll_lim.reg, &pv); - } - - /* -@@ -661,7 +656,7 @@ - if (dev_priv->card_type >= NV_10) - regp->nv10_cursync = NVReadRAMDAC(dev, head, NV_RAMDAC_NV10_CURSYNC); - -- nouveau_hw_get_pllvals(dev, head ? VPLL2 : VPLL1, ®p->pllvals); -+ nouveau_hw_get_pllvals(dev, head ? PLL_VPLL1 : PLL_VPLL0, ®p->pllvals); - state->pllsel = NVReadRAMDAC(dev, 0, NV_PRAMDAC_PLL_COEFF_SELECT); - if (nv_two_heads(dev)) - state->sel_clk = NVReadRAMDAC(dev, 0, NV_PRAMDAC_SEL_CLK); -@@ -866,10 +861,11 @@ - rd_cio_state(dev, head, regp, NV_CIO_CRE_FFLWM__INDEX); - rd_cio_state(dev, head, regp, NV_CIO_CRE_21); - -- if (dev_priv->card_type >= NV_30) { -+ if (dev_priv->card_type >= NV_20) - rd_cio_state(dev, head, regp, NV_CIO_CRE_47); -+ -+ if (dev_priv->card_type >= NV_30) - rd_cio_state(dev, head, regp, 0x9f); -- } - - rd_cio_state(dev, head, regp, NV_CIO_CRE_49); - rd_cio_state(dev, head, regp, NV_CIO_CRE_HCUR_ADDR0_INDEX); -@@ -957,7 +953,7 @@ - NVWriteCRTC(dev, head, NV_PCRTC_850, regp->crtc_850); - - reg900 = NVReadRAMDAC(dev, head, NV_PRAMDAC_900); -- if (regp->crtc_cfg == NV_PCRTC_CONFIG_START_ADDRESS_HSYNC) -+ if (regp->crtc_cfg == NV10_PCRTC_CONFIG_START_ADDRESS_HSYNC) - NVWriteRAMDAC(dev, head, NV_PRAMDAC_900, reg900 | 0x10000); - else - NVWriteRAMDAC(dev, head, NV_PRAMDAC_900, reg900 & ~0x10000); -@@ -976,10 +972,11 @@ - wr_cio_state(dev, head, regp, NV_CIO_CRE_FF_INDEX); - wr_cio_state(dev, head, regp, NV_CIO_CRE_FFLWM__INDEX); - -- if (dev_priv->card_type >= NV_30) { -+ if (dev_priv->card_type >= NV_20) - wr_cio_state(dev, head, regp, NV_CIO_CRE_47); -+ -+ if (dev_priv->card_type >= NV_30) - wr_cio_state(dev, head, regp, 0x9f); -- } - - wr_cio_state(dev, head, regp, NV_CIO_CRE_49); - wr_cio_state(dev, head, regp, NV_CIO_CRE_HCUR_ADDR0_INDEX); -@@ -1020,8 +1017,9 @@ - - NVWriteCRTC(dev, head, NV_PCRTC_START, regp->fb_start); - -- /* Setting 1 on this value gives you interrupts for every vblank period. */ -- NVWriteCRTC(dev, head, NV_PCRTC_INTR_EN_0, 0); -+ /* Enable vblank interrupts. */ -+ NVWriteCRTC(dev, head, NV_PCRTC_INTR_EN_0, -+ (dev->vblank_enabled[head] ? 1 : 0)); - NVWriteCRTC(dev, head, NV_PCRTC_INTR_0, NV_PCRTC_INTR_0_VBLANK); - } - -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_hw.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.h ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_hw.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.h 2010-11-05 00:40:00.000000000 +0100 -@@ -416,6 +416,25 @@ - } - - static inline void -+nv_set_crtc_base(struct drm_device *dev, int head, uint32_t offset) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ -+ NVWriteCRTC(dev, head, NV_PCRTC_START, offset); -+ -+ if (dev_priv->card_type == NV_04) { -+ /* -+ * Hilarious, the 24th bit doesn't want to stick to -+ * PCRTC_START... -+ */ -+ int cre_heb = NVReadVgaCrtc(dev, head, NV_CIO_CRE_HEB__INDEX); -+ -+ NVWriteVgaCrtc(dev, head, NV_CIO_CRE_HEB__INDEX, -+ (cre_heb & ~0x40) | ((offset >> 18) & 0x40)); -+ } -+} -+ -+static inline void - nv_show_cursor(struct drm_device *dev, int head, bool show) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_i2c.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_i2c.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_i2c.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_i2c.c 2010-11-05 00:40:00.000000000 +0100 -@@ -299,7 +299,10 @@ - - int - nouveau_i2c_identify(struct drm_device *dev, const char *what, -- struct i2c_board_info *info, int index) -+ struct i2c_board_info *info, -+ bool (*match)(struct nouveau_i2c_chan *, -+ struct i2c_board_info *), -+ int index) - { - struct nouveau_i2c_chan *i2c = nouveau_i2c_find(dev, index); - int i; -@@ -307,7 +310,8 @@ - NV_DEBUG(dev, "Probing %ss on I2C bus: %d\n", what, index); - - for (i = 0; info[i].addr; i++) { -- if (nouveau_probe_i2c_addr(i2c, info[i].addr)) { -+ if (nouveau_probe_i2c_addr(i2c, info[i].addr) && -+ (!match || match(i2c, &info[i]))) { - NV_INFO(dev, "Detected %s: %s\n", what, info[i].type); - return i; - } -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_i2c.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_i2c.h ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_i2c.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_i2c.h 2010-11-05 00:40:00.000000000 +0100 -@@ -44,7 +44,10 @@ - struct nouveau_i2c_chan *nouveau_i2c_find(struct drm_device *, int index); - bool nouveau_probe_i2c_addr(struct nouveau_i2c_chan *i2c, int addr); - int nouveau_i2c_identify(struct drm_device *dev, const char *what, -- struct i2c_board_info *info, int index); -+ struct i2c_board_info *info, -+ bool (*match)(struct nouveau_i2c_chan *, -+ struct i2c_board_info *), -+ int index); - - extern const struct i2c_algorithm nouveau_dp_i2c_algo; - -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_irq.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_irq.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_irq.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_irq.c 2010-11-05 00:40:00.000000000 +0100 -@@ -35,12 +35,20 @@ - #include "nouveau_drm.h" - #include "nouveau_drv.h" - #include "nouveau_reg.h" -+#include "nouveau_ramht.h" - #include - - /* needed for hotplug irq */ - #include "nouveau_connector.h" - #include "nv50_display.h" - -+static DEFINE_RATELIMIT_STATE(nouveau_ratelimit_state, 3 * HZ, 20); -+ -+static int nouveau_ratelimit(void) -+{ -+ return __ratelimit(&nouveau_ratelimit_state); -+} -+ - void - nouveau_irq_preinstall(struct drm_device *dev) - { -@@ -59,8 +67,13 @@ - int - nouveau_irq_postinstall(struct drm_device *dev) - { -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ - /* Master enable */ - nv_wr32(dev, NV03_PMC_INTR_EN_0, NV_PMC_INTR_EN_0_MASTER_ENABLE); -+ if (dev_priv->msi_enabled) -+ nv_wr08(dev, 0x00088068, 0xff); -+ - return 0; - } - -@@ -71,63 +84,50 @@ - nv_wr32(dev, NV03_PMC_INTR_EN_0, 0); - } - --static int --nouveau_call_method(struct nouveau_channel *chan, int class, int mthd, int data) --{ -- struct drm_nouveau_private *dev_priv = chan->dev->dev_private; -- struct nouveau_pgraph_object_method *grm; -- struct nouveau_pgraph_object_class *grc; -- -- grc = dev_priv->engine.graph.grclass; -- while (grc->id) { -- if (grc->id == class) -- break; -- grc++; -- } -- -- if (grc->id != class || !grc->methods) -- return -ENOENT; -- -- grm = grc->methods; -- while (grm->id) { -- if (grm->id == mthd) -- return grm->exec(chan, class, mthd, data); -- grm++; -- } -- -- return -ENOENT; --} -- - static bool --nouveau_fifo_swmthd(struct nouveau_channel *chan, uint32_t addr, uint32_t data) -+nouveau_fifo_swmthd(struct drm_device *dev, u32 chid, u32 addr, u32 data) - { -- struct drm_device *dev = chan->dev; -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_channel *chan = NULL; -+ struct nouveau_gpuobj *obj; -+ unsigned long flags; - const int subc = (addr >> 13) & 0x7; - const int mthd = addr & 0x1ffc; -+ bool handled = false; -+ u32 engine; - -- if (mthd == 0x0000) { -- struct nouveau_gpuobj_ref *ref = NULL; -+ spin_lock_irqsave(&dev_priv->channels.lock, flags); -+ if (likely(chid >= 0 && chid < dev_priv->engine.fifo.channels)) -+ chan = dev_priv->channels.ptr[chid]; -+ if (unlikely(!chan)) -+ goto out; -+ -+ switch (mthd) { -+ case 0x0000: /* bind object to subchannel */ -+ obj = nouveau_ramht_find(chan, data); -+ if (unlikely(!obj || obj->engine != NVOBJ_ENGINE_SW)) -+ break; - -- if (nouveau_gpuobj_ref_find(chan, data, &ref)) -- return false; -+ chan->sw_subchannel[subc] = obj->class; -+ engine = 0x0000000f << (subc * 4); - -- if (ref->gpuobj->engine != NVOBJ_ENGINE_SW) -- return false; -+ nv_mask(dev, NV04_PFIFO_CACHE1_ENGINE, engine, 0x00000000); -+ handled = true; -+ break; -+ default: -+ engine = nv_rd32(dev, NV04_PFIFO_CACHE1_ENGINE); -+ if (unlikely(((engine >> (subc * 4)) & 0xf) != 0)) -+ break; - -- chan->sw_subchannel[subc] = ref->gpuobj->class; -- nv_wr32(dev, NV04_PFIFO_CACHE1_ENGINE, nv_rd32(dev, -- NV04_PFIFO_CACHE1_ENGINE) & ~(0xf << subc * 4)); -- return true; -+ if (!nouveau_gpuobj_mthd_call(chan, chan->sw_subchannel[subc], -+ mthd, data)) -+ handled = true; -+ break; - } - -- /* hw object */ -- if (nv_rd32(dev, NV04_PFIFO_CACHE1_ENGINE) & (1 << (subc*4))) -- return false; -- -- if (nouveau_call_method(chan, chan->sw_subchannel[subc], mthd, data)) -- return false; -- -- return true; -+out: -+ spin_unlock_irqrestore(&dev_priv->channels.lock, flags); -+ return handled; - } - - static void -@@ -140,14 +140,11 @@ - - reassign = nv_rd32(dev, NV03_PFIFO_CACHES) & 1; - while ((status = nv_rd32(dev, NV03_PFIFO_INTR_0)) && (cnt++ < 100)) { -- struct nouveau_channel *chan = NULL; - uint32_t chid, get; - - nv_wr32(dev, NV03_PFIFO_CACHES, 0); - - chid = engine->fifo.channel_id(dev); -- if (chid >= 0 && chid < engine->fifo.channels) -- chan = dev_priv->fifos[chid]; - get = nv_rd32(dev, NV03_PFIFO_CACHE1_GET); - - if (status & NV_PFIFO_INTR_CACHE_ERROR) { -@@ -174,7 +171,7 @@ - NV40_PFIFO_CACHE1_DATA(ptr)); - } - -- if (!chan || !nouveau_fifo_swmthd(chan, mthd, data)) { -+ if (!nouveau_fifo_swmthd(dev, chid, mthd, data)) { - NV_INFO(dev, "PFIFO_CACHE_ERROR - Ch %d/%d " - "Mthd 0x%04x Data 0x%08x\n", - chid, (mthd >> 13) & 7, mthd & 0x1ffc, -@@ -200,16 +197,47 @@ - } - - if (status & NV_PFIFO_INTR_DMA_PUSHER) { -- NV_INFO(dev, "PFIFO_DMA_PUSHER - Ch %d\n", chid); -+ u32 dma_get = nv_rd32(dev, 0x003244); -+ u32 dma_put = nv_rd32(dev, 0x003240); -+ u32 push = nv_rd32(dev, 0x003220); -+ u32 state = nv_rd32(dev, 0x003228); -+ -+ if (dev_priv->card_type == NV_50) { -+ u32 ho_get = nv_rd32(dev, 0x003328); -+ u32 ho_put = nv_rd32(dev, 0x003320); -+ u32 ib_get = nv_rd32(dev, 0x003334); -+ u32 ib_put = nv_rd32(dev, 0x003330); -+ -+ if (nouveau_ratelimit()) -+ NV_INFO(dev, "PFIFO_DMA_PUSHER - Ch %d Get 0x%02x%08x " -+ "Put 0x%02x%08x IbGet 0x%08x IbPut 0x%08x " -+ "State 0x%08x Push 0x%08x\n", -+ chid, ho_get, dma_get, ho_put, -+ dma_put, ib_get, ib_put, state, -+ push); -+ -+ /* METHOD_COUNT, in DMA_STATE on earlier chipsets */ -+ nv_wr32(dev, 0x003364, 0x00000000); -+ if (dma_get != dma_put || ho_get != ho_put) { -+ nv_wr32(dev, 0x003244, dma_put); -+ nv_wr32(dev, 0x003328, ho_put); -+ } else -+ if (ib_get != ib_put) { -+ nv_wr32(dev, 0x003334, ib_put); -+ } -+ } else { -+ NV_INFO(dev, "PFIFO_DMA_PUSHER - Ch %d Get 0x%08x " -+ "Put 0x%08x State 0x%08x Push 0x%08x\n", -+ chid, dma_get, dma_put, state, push); - -- status &= ~NV_PFIFO_INTR_DMA_PUSHER; -- nv_wr32(dev, NV03_PFIFO_INTR_0, -- NV_PFIFO_INTR_DMA_PUSHER); -+ if (dma_get != dma_put) -+ nv_wr32(dev, 0x003244, dma_put); -+ } - -- nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_STATE, 0x00000000); -- if (nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_PUT) != get) -- nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_GET, -- get + 4); -+ nv_wr32(dev, 0x003228, 0x00000000); -+ nv_wr32(dev, 0x003220, 0x00000001); -+ nv_wr32(dev, 0x002100, NV_PFIFO_INTR_DMA_PUSHER); -+ status &= ~NV_PFIFO_INTR_DMA_PUSHER; - } - - if (status & NV_PFIFO_INTR_SEMAPHORE) { -@@ -226,9 +254,18 @@ - nv_wr32(dev, NV04_PFIFO_CACHE1_PULL0, 1); - } - -+ if (dev_priv->card_type == NV_50) { -+ if (status & 0x00000010) { -+ nv50_fb_vm_trap(dev, 1, "PFIFO_BAR_FAULT"); -+ status &= ~0x00000010; -+ nv_wr32(dev, 0x002100, 0x00000010); -+ } -+ } -+ - if (status) { -- NV_INFO(dev, "PFIFO_INTR 0x%08x - Ch %d\n", -- status, chid); -+ if (nouveau_ratelimit()) -+ NV_INFO(dev, "PFIFO_INTR 0x%08x - Ch %d\n", -+ status, chid); - nv_wr32(dev, NV03_PFIFO_INTR_0, status); - status = 0; - } -@@ -342,6 +379,8 @@ - nouveau_graph_chid_from_grctx(struct drm_device *dev) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_channel *chan; -+ unsigned long flags; - uint32_t inst; - int i; - -@@ -351,27 +390,29 @@ - if (dev_priv->card_type < NV_50) { - inst = (nv_rd32(dev, 0x40032c) & 0xfffff) << 4; - -+ spin_lock_irqsave(&dev_priv->channels.lock, flags); - for (i = 0; i < dev_priv->engine.fifo.channels; i++) { -- struct nouveau_channel *chan = dev_priv->fifos[i]; -- -+ chan = dev_priv->channels.ptr[i]; - if (!chan || !chan->ramin_grctx) - continue; - -- if (inst == chan->ramin_grctx->instance) -+ if (inst == chan->ramin_grctx->pinst) - break; - } -+ spin_unlock_irqrestore(&dev_priv->channels.lock, flags); - } else { - inst = (nv_rd32(dev, 0x40032c) & 0xfffff) << 12; - -+ spin_lock_irqsave(&dev_priv->channels.lock, flags); - for (i = 0; i < dev_priv->engine.fifo.channels; i++) { -- struct nouveau_channel *chan = dev_priv->fifos[i]; -- -+ chan = dev_priv->channels.ptr[i]; - if (!chan || !chan->ramin) - continue; - -- if (inst == chan->ramin->instance) -+ if (inst == chan->ramin->vinst) - break; - } -+ spin_unlock_irqrestore(&dev_priv->channels.lock, flags); - } - - -@@ -393,7 +434,8 @@ - else - channel = nouveau_graph_chid_from_grctx(dev); - -- if (channel >= engine->fifo.channels || !dev_priv->fifos[channel]) { -+ if (channel >= engine->fifo.channels || -+ !dev_priv->channels.ptr[channel]) { - NV_ERROR(dev, "AIII, invalid/inactive channel id %d\n", channel); - return -EINVAL; - } -@@ -476,14 +518,20 @@ - struct nouveau_pgraph_trap *trap) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_channel *chan; -+ unsigned long flags; -+ int ret = -EINVAL; - -- if (trap->channel < 0 || -- trap->channel >= dev_priv->engine.fifo.channels || -- !dev_priv->fifos[trap->channel]) -- return -ENODEV; -+ spin_lock_irqsave(&dev_priv->channels.lock, flags); -+ if (trap->channel > 0 && -+ trap->channel < dev_priv->engine.fifo.channels && -+ dev_priv->channels.ptr[trap->channel]) { -+ chan = dev_priv->channels.ptr[trap->channel]; -+ ret = nouveau_gpuobj_mthd_call(chan, trap->class, trap->mthd, trap->data); -+ } -+ spin_unlock_irqrestore(&dev_priv->channels.lock, flags); - -- return nouveau_call_method(dev_priv->fifos[trap->channel], -- trap->class, trap->mthd, trap->data); -+ return ret; - } - - static inline void -@@ -505,13 +553,6 @@ - nouveau_graph_dump_trap_info(dev, "PGRAPH_NOTIFY", &trap); - } - --static DEFINE_RATELIMIT_STATE(nouveau_ratelimit_state, 3 * HZ, 20); -- --static int nouveau_ratelimit(void) --{ -- return __ratelimit(&nouveau_ratelimit_state); --} -- - - static inline void - nouveau_pgraph_intr_error(struct drm_device *dev, uint32_t nsource) -@@ -605,40 +646,6 @@ - nv_wr32(dev, NV03_PMC_INTR_0, NV_PMC_INTR_0_PGRAPH_PENDING); - } - --static void --nv50_pfb_vm_trap(struct drm_device *dev, int display, const char *name) --{ -- struct drm_nouveau_private *dev_priv = dev->dev_private; -- uint32_t trap[6]; -- int i, ch; -- uint32_t idx = nv_rd32(dev, 0x100c90); -- if (idx & 0x80000000) { -- idx &= 0xffffff; -- if (display) { -- for (i = 0; i < 6; i++) { -- nv_wr32(dev, 0x100c90, idx | i << 24); -- trap[i] = nv_rd32(dev, 0x100c94); -- } -- for (ch = 0; ch < dev_priv->engine.fifo.channels; ch++) { -- struct nouveau_channel *chan = dev_priv->fifos[ch]; -- -- if (!chan || !chan->ramin) -- continue; -- -- if (trap[1] == chan->ramin->instance >> 12) -- break; -- } -- NV_INFO(dev, "%s - VM: Trapped %s at %02x%04x%04x status %08x %08x channel %d\n", -- name, (trap[5]&0x100?"read":"write"), -- trap[5]&0xff, trap[4]&0xffff, -- trap[3]&0xffff, trap[0], trap[2], ch); -- } -- nv_wr32(dev, 0x100c90, idx | 0x80000000); -- } else if (display) { -- NV_INFO(dev, "%s - no VM fault?\n", name); -- } --} -- - static struct nouveau_enum_names nv50_mp_exec_error_names[] = - { - { 3, "STACK_UNDERFLOW" }, -@@ -711,7 +718,7 @@ - tps++; - switch (type) { - case 6: /* texture error... unknown for now */ -- nv50_pfb_vm_trap(dev, display, name); -+ nv50_fb_vm_trap(dev, display, name); - if (display) { - NV_ERROR(dev, "magic set %d:\n", i); - for (r = ustatus_addr + 4; r <= ustatus_addr + 0x10; r += 4) -@@ -734,7 +741,7 @@ - uint32_t e1c = nv_rd32(dev, ustatus_addr + 0x14); - uint32_t e20 = nv_rd32(dev, ustatus_addr + 0x18); - uint32_t e24 = nv_rd32(dev, ustatus_addr + 0x1c); -- nv50_pfb_vm_trap(dev, display, name); -+ nv50_fb_vm_trap(dev, display, name); - /* 2d engine destination */ - if (ustatus & 0x00000010) { - if (display) { -@@ -817,7 +824,7 @@ - - /* Known to be triggered by screwed up NOTIFY and COND... */ - if (ustatus & 0x00000001) { -- nv50_pfb_vm_trap(dev, display, "PGRAPH_TRAP_DISPATCH_FAULT"); -+ nv50_fb_vm_trap(dev, display, "PGRAPH_TRAP_DISPATCH_FAULT"); - nv_wr32(dev, 0x400500, 0); - if (nv_rd32(dev, 0x400808) & 0x80000000) { - if (display) { -@@ -842,7 +849,7 @@ - ustatus &= ~0x00000001; - } - if (ustatus & 0x00000002) { -- nv50_pfb_vm_trap(dev, display, "PGRAPH_TRAP_DISPATCH_QUERY"); -+ nv50_fb_vm_trap(dev, display, "PGRAPH_TRAP_DISPATCH_QUERY"); - nv_wr32(dev, 0x400500, 0); - if (nv_rd32(dev, 0x40084c) & 0x80000000) { - if (display) { -@@ -884,15 +891,15 @@ - NV_INFO(dev, "PGRAPH_TRAP_M2MF - no ustatus?\n"); - } - if (ustatus & 0x00000001) { -- nv50_pfb_vm_trap(dev, display, "PGRAPH_TRAP_M2MF_NOTIFY"); -+ nv50_fb_vm_trap(dev, display, "PGRAPH_TRAP_M2MF_NOTIFY"); - ustatus &= ~0x00000001; - } - if (ustatus & 0x00000002) { -- nv50_pfb_vm_trap(dev, display, "PGRAPH_TRAP_M2MF_IN"); -+ nv50_fb_vm_trap(dev, display, "PGRAPH_TRAP_M2MF_IN"); - ustatus &= ~0x00000002; - } - if (ustatus & 0x00000004) { -- nv50_pfb_vm_trap(dev, display, "PGRAPH_TRAP_M2MF_OUT"); -+ nv50_fb_vm_trap(dev, display, "PGRAPH_TRAP_M2MF_OUT"); - ustatus &= ~0x00000004; - } - NV_INFO (dev, "PGRAPH_TRAP_M2MF - %08x %08x %08x %08x\n", -@@ -917,7 +924,7 @@ - NV_INFO(dev, "PGRAPH_TRAP_VFETCH - no ustatus?\n"); - } - if (ustatus & 0x00000001) { -- nv50_pfb_vm_trap(dev, display, "PGRAPH_TRAP_VFETCH_FAULT"); -+ nv50_fb_vm_trap(dev, display, "PGRAPH_TRAP_VFETCH_FAULT"); - NV_INFO (dev, "PGRAPH_TRAP_VFETCH_FAULT - %08x %08x %08x %08x\n", - nv_rd32(dev, 0x400c00), - nv_rd32(dev, 0x400c08), -@@ -939,7 +946,7 @@ - NV_INFO(dev, "PGRAPH_TRAP_STRMOUT - no ustatus?\n"); - } - if (ustatus & 0x00000001) { -- nv50_pfb_vm_trap(dev, display, "PGRAPH_TRAP_STRMOUT_FAULT"); -+ nv50_fb_vm_trap(dev, display, "PGRAPH_TRAP_STRMOUT_FAULT"); - NV_INFO (dev, "PGRAPH_TRAP_STRMOUT_FAULT - %08x %08x %08x %08x\n", - nv_rd32(dev, 0x401804), - nv_rd32(dev, 0x401808), -@@ -964,7 +971,7 @@ - NV_INFO(dev, "PGRAPH_TRAP_CCACHE - no ustatus?\n"); - } - if (ustatus & 0x00000001) { -- nv50_pfb_vm_trap(dev, display, "PGRAPH_TRAP_CCACHE_FAULT"); -+ nv50_fb_vm_trap(dev, display, "PGRAPH_TRAP_CCACHE_FAULT"); - NV_INFO (dev, "PGRAPH_TRAP_CCACHE_FAULT - %08x %08x %08x %08x %08x %08x %08x\n", - nv_rd32(dev, 0x405800), - nv_rd32(dev, 0x405804), -@@ -986,7 +993,7 @@ - * remaining, so try to handle it anyway. Perhaps related to that - * unknown DMA slot on tesla? */ - if (status & 0x20) { -- nv50_pfb_vm_trap(dev, display, "PGRAPH_TRAP_UNKC04"); -+ nv50_fb_vm_trap(dev, display, "PGRAPH_TRAP_UNKC04"); - ustatus = nv_rd32(dev, 0x402000) & 0x7fffffff; - if (display) - NV_INFO(dev, "PGRAPH_TRAP_UNKC04 - Unhandled ustatus 0x%08x\n", ustatus); -@@ -1192,11 +1199,15 @@ - static void - nouveau_crtc_irq_handler(struct drm_device *dev, int crtc) - { -- if (crtc & 1) -+ if (crtc & 1) { - nv_wr32(dev, NV_CRTC0_INTSTAT, NV_CRTC_INTR_VBLANK); -+ drm_handle_vblank(dev, 0); -+ } - -- if (crtc & 2) -+ if (crtc & 2) { - nv_wr32(dev, NV_CRTC1_INTSTAT, NV_CRTC_INTR_VBLANK); -+ drm_handle_vblank(dev, 1); -+ } - } - - irqreturn_t -@@ -1227,6 +1238,22 @@ - status &= ~NV_PMC_INTR_0_PGRAPH_PENDING; - } - -+ if (status & 0x00004000) { -+ u32 stat = nv_rd32(dev, 0x102130); -+ u32 mthd = nv_rd32(dev, 0x102190); -+ u32 data = nv_rd32(dev, 0x102194); -+ u32 inst = nv_rd32(dev, 0x102188) & 0x7fffffff; -+ -+ NV_INFO(dev, "PCRYPT_INTR: 0x%08x 0x%08x 0x%08x 0x%08x\n", -+ stat, mthd, data, inst); -+ nv_wr32(dev, 0x102130, stat); -+ nv_wr32(dev, 0x10200c, 0x10); -+ -+ nv50_fb_vm_trap(dev, nouveau_ratelimit(), "PCRYPT"); -+ status &= ~0x00004000; -+ -+ } -+ - if (status & NV_PMC_INTR_0_CRTCn_PENDING) { - nouveau_crtc_irq_handler(dev, (status>>24)&3); - status &= ~NV_PMC_INTR_0_CRTCn_PENDING; -@@ -1244,5 +1271,35 @@ - - spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); - -+ if (dev_priv->msi_enabled) -+ nv_wr08(dev, 0x00088068, 0xff); -+ - return IRQ_HANDLED; - } -+ -+int -+nouveau_irq_init(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ int ret; -+ -+ if (nouveau_msi != 0 && dev_priv->card_type >= NV_50) { -+ ret = pci_enable_msi(dev->pdev); -+ if (ret == 0) { -+ NV_INFO(dev, "enabled MSI\n"); -+ dev_priv->msi_enabled = true; -+ } -+ } -+ -+ return drm_irq_install(dev); -+} -+ -+void -+nouveau_irq_fini(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ -+ drm_irq_uninstall(dev); -+ if (dev_priv->msi_enabled) -+ pci_disable_msi(dev->pdev); -+} -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_mem.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_mem.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_mem.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_mem.c 2010-11-05 00:40:00.000000000 +0100 -@@ -33,92 +33,113 @@ - #include "drmP.h" - #include "drm.h" - #include "drm_sarea.h" -+ - #include "nouveau_drv.h" -+#include "nouveau_pm.h" - - /* - * NV10-NV40 tiling helpers - */ - - static void --nv10_mem_set_region_tiling(struct drm_device *dev, int i, uint32_t addr, -- uint32_t size, uint32_t pitch) -+nv10_mem_update_tile_region(struct drm_device *dev, -+ struct nouveau_tile_reg *tile, uint32_t addr, -+ uint32_t size, uint32_t pitch, uint32_t flags) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; - struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; - struct nouveau_fb_engine *pfb = &dev_priv->engine.fb; - struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; -- struct nouveau_tile_reg *tile = &dev_priv->tile.reg[i]; -+ int i = tile - dev_priv->tile.reg; -+ unsigned long save; - -- tile->addr = addr; -- tile->size = size; -- tile->used = !!pitch; -- nouveau_fence_unref((void **)&tile->fence); -+ nouveau_fence_unref(&tile->fence); - -- if (!pfifo->cache_flush(dev)) -- return; -+ if (tile->pitch) -+ pfb->free_tile_region(dev, i); - -+ if (pitch) -+ pfb->init_tile_region(dev, i, addr, size, pitch, flags); -+ -+ spin_lock_irqsave(&dev_priv->context_switch_lock, save); - pfifo->reassign(dev, false); -- pfifo->cache_flush(dev); - pfifo->cache_pull(dev, false); - - nouveau_wait_for_idle(dev); - -- pgraph->set_region_tiling(dev, i, addr, size, pitch); -- pfb->set_region_tiling(dev, i, addr, size, pitch); -+ pfb->set_tile_region(dev, i); -+ pgraph->set_tile_region(dev, i); - - pfifo->cache_pull(dev, true); - pfifo->reassign(dev, true); -+ spin_unlock_irqrestore(&dev_priv->context_switch_lock, save); - } - --struct nouveau_tile_reg * --nv10_mem_set_tiling(struct drm_device *dev, uint32_t addr, uint32_t size, -- uint32_t pitch) -+static struct nouveau_tile_reg * -+nv10_mem_get_tile_region(struct drm_device *dev, int i) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; -- struct nouveau_fb_engine *pfb = &dev_priv->engine.fb; -- struct nouveau_tile_reg *tile = dev_priv->tile.reg, *found = NULL; -- int i; -+ struct nouveau_tile_reg *tile = &dev_priv->tile.reg[i]; - - spin_lock(&dev_priv->tile.lock); - -- for (i = 0; i < pfb->num_tiles; i++) { -- if (tile[i].used) -- /* Tile region in use. */ -- continue; -+ if (!tile->used && -+ (!tile->fence || nouveau_fence_signalled(tile->fence))) -+ tile->used = true; -+ else -+ tile = NULL; - -- if (tile[i].fence && -- !nouveau_fence_signalled(tile[i].fence, NULL)) -- /* Pending tile region. */ -- continue; -+ spin_unlock(&dev_priv->tile.lock); -+ return tile; -+} - -- if (max(tile[i].addr, addr) < -- min(tile[i].addr + tile[i].size, addr + size)) -- /* Kill an intersecting tile region. */ -- nv10_mem_set_region_tiling(dev, i, 0, 0, 0); -+void -+nv10_mem_put_tile_region(struct drm_device *dev, struct nouveau_tile_reg *tile, -+ struct nouveau_fence *fence) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; - -- if (pitch && !found) { -- /* Free tile region. */ -- nv10_mem_set_region_tiling(dev, i, addr, size, pitch); -- found = &tile[i]; -+ if (tile) { -+ spin_lock(&dev_priv->tile.lock); -+ if (fence) { -+ /* Mark it as pending. */ -+ tile->fence = fence; -+ nouveau_fence_ref(fence); - } -- } - -- spin_unlock(&dev_priv->tile.lock); -- -- return found; -+ tile->used = false; -+ spin_unlock(&dev_priv->tile.lock); -+ } - } - --void --nv10_mem_expire_tiling(struct drm_device *dev, struct nouveau_tile_reg *tile, -- struct nouveau_fence *fence) -+struct nouveau_tile_reg * -+nv10_mem_set_tiling(struct drm_device *dev, uint32_t addr, uint32_t size, -+ uint32_t pitch, uint32_t flags) - { -- if (fence) { -- /* Mark it as pending. */ -- tile->fence = fence; -- nouveau_fence_ref(fence); -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_fb_engine *pfb = &dev_priv->engine.fb; -+ struct nouveau_tile_reg *tile, *found = NULL; -+ int i; -+ -+ for (i = 0; i < pfb->num_tiles; i++) { -+ tile = nv10_mem_get_tile_region(dev, i); -+ -+ if (pitch && !found) { -+ found = tile; -+ continue; -+ -+ } else if (tile && tile->pitch) { -+ /* Kill an unused tile region. */ -+ nv10_mem_update_tile_region(dev, tile, 0, 0, 0, 0); -+ } -+ -+ nv10_mem_put_tile_region(dev, tile, NULL); - } - -- tile->used = false; -+ if (found) -+ nv10_mem_update_tile_region(dev, found, addr, size, -+ pitch, flags); -+ return found; - } - - /* -@@ -169,16 +190,17 @@ - virt += (end - pte); - - while (pte < end) { -- nv_wo32(dev, pgt, pte++, offset_l); -- nv_wo32(dev, pgt, pte++, offset_h); -+ nv_wo32(pgt, (pte * 4) + 0, offset_l); -+ nv_wo32(pgt, (pte * 4) + 4, offset_h); -+ pte += 2; - } - } - } - dev_priv->engine.instmem.flush(dev); - -- nv50_vm_flush(dev, 5); -- nv50_vm_flush(dev, 0); -- nv50_vm_flush(dev, 4); -+ dev_priv->engine.instmem.flush(dev); -+ dev_priv->engine.fifo.tlb_flush(dev); -+ dev_priv->engine.graph.tlb_flush(dev); - nv50_vm_flush(dev, 6); - return 0; - } -@@ -203,14 +225,15 @@ - pages -= (end - pte); - virt += (end - pte) << 15; - -- while (pte < end) -- nv_wo32(dev, pgt, pte++, 0); -+ while (pte < end) { -+ nv_wo32(pgt, (pte * 4), 0); -+ pte++; -+ } - } -- dev_priv->engine.instmem.flush(dev); - -- nv50_vm_flush(dev, 5); -- nv50_vm_flush(dev, 0); -- nv50_vm_flush(dev, 4); -+ dev_priv->engine.instmem.flush(dev); -+ dev_priv->engine.fifo.tlb_flush(dev); -+ dev_priv->engine.graph.tlb_flush(dev); - nv50_vm_flush(dev, 6); - } - -@@ -218,7 +241,7 @@ - * Cleanup everything - */ - void --nouveau_mem_close(struct drm_device *dev) -+nouveau_mem_vram_fini(struct drm_device *dev) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; - -@@ -229,6 +252,19 @@ - - nouveau_ttm_global_release(dev_priv); - -+ if (dev_priv->fb_mtrr >= 0) { -+ drm_mtrr_del(dev_priv->fb_mtrr, -+ pci_resource_start(dev->pdev, 1), -+ pci_resource_len(dev->pdev, 1), DRM_MTRR_WC); -+ dev_priv->fb_mtrr = -1; -+ } -+} -+ -+void -+nouveau_mem_gart_fini(struct drm_device *dev) -+{ -+ nouveau_sgdma_takedown(dev); -+ - if (drm_core_has_AGP(dev) && dev->agp) { - struct drm_agp_mem *entry, *tempe; - -@@ -248,13 +284,6 @@ - dev->agp->acquired = 0; - dev->agp->enabled = 0; - } -- -- if (dev_priv->fb_mtrr) { -- drm_mtrr_del(dev_priv->fb_mtrr, -- pci_resource_start(dev->pdev, 1), -- pci_resource_len(dev->pdev, 1), DRM_MTRR_WC); -- dev_priv->fb_mtrr = -1; -- } - } - - static uint32_t -@@ -305,8 +334,62 @@ - return 0; - } - --/* returns the amount of FB ram in bytes */ --int -+static void -+nv50_vram_preinit(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ int i, parts, colbits, rowbitsa, rowbitsb, banks; -+ u64 rowsize, predicted; -+ u32 r0, r4, rt, ru; -+ -+ r0 = nv_rd32(dev, 0x100200); -+ r4 = nv_rd32(dev, 0x100204); -+ rt = nv_rd32(dev, 0x100250); -+ ru = nv_rd32(dev, 0x001540); -+ NV_DEBUG(dev, "memcfg 0x%08x 0x%08x 0x%08x 0x%08x\n", r0, r4, rt, ru); -+ -+ for (i = 0, parts = 0; i < 8; i++) { -+ if (ru & (0x00010000 << i)) -+ parts++; -+ } -+ -+ colbits = (r4 & 0x0000f000) >> 12; -+ rowbitsa = ((r4 & 0x000f0000) >> 16) + 8; -+ rowbitsb = ((r4 & 0x00f00000) >> 20) + 8; -+ banks = ((r4 & 0x01000000) ? 8 : 4); -+ -+ rowsize = parts * banks * (1 << colbits) * 8; -+ predicted = rowsize << rowbitsa; -+ if (r0 & 0x00000004) -+ predicted += rowsize << rowbitsb; -+ -+ if (predicted != dev_priv->vram_size) { -+ NV_WARN(dev, "memory controller reports %dMiB VRAM\n", -+ (u32)(dev_priv->vram_size >> 20)); -+ NV_WARN(dev, "we calculated %dMiB VRAM\n", -+ (u32)(predicted >> 20)); -+ } -+ -+ dev_priv->vram_rblock_size = rowsize >> 12; -+ if (rt & 1) -+ dev_priv->vram_rblock_size *= 3; -+ -+ NV_DEBUG(dev, "rblock %lld bytes\n", -+ (u64)dev_priv->vram_rblock_size << 12); -+} -+ -+static void -+nvaa_vram_preinit(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ -+ /* To our knowledge, there's no large scale reordering of pages -+ * that occurs on IGP chipsets. -+ */ -+ dev_priv->vram_rblock_size = 1; -+} -+ -+static int - nouveau_mem_detect(struct drm_device *dev) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; -@@ -325,9 +408,18 @@ - dev_priv->vram_size = nv_rd32(dev, NV04_PFB_FIFO_DATA); - dev_priv->vram_size |= (dev_priv->vram_size & 0xff) << 32; - dev_priv->vram_size &= 0xffffffff00ll; -- if (dev_priv->chipset == 0xaa || dev_priv->chipset == 0xac) { -+ -+ switch (dev_priv->chipset) { -+ case 0xaa: -+ case 0xac: -+ case 0xaf: - dev_priv->vram_sys_base = nv_rd32(dev, 0x100e10); - dev_priv->vram_sys_base <<= 12; -+ nvaa_vram_preinit(dev); -+ break; -+ default: -+ nv50_vram_preinit(dev); -+ break; - } - } else { - dev_priv->vram_size = nv_rd32(dev, 0x10f20c) << 20; -@@ -345,6 +437,33 @@ - return -ENOMEM; - } - -+#if __OS_HAS_AGP -+static unsigned long -+get_agp_mode(struct drm_device *dev, unsigned long mode) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ -+ /* -+ * FW seems to be broken on nv18, it makes the card lock up -+ * randomly. -+ */ -+ if (dev_priv->chipset == 0x18) -+ mode &= ~PCI_AGP_COMMAND_FW; -+ -+ /* -+ * AGP mode set in the command line. -+ */ -+ if (nouveau_agpmode > 0) { -+ bool agpv3 = mode & 0x8; -+ int rate = agpv3 ? nouveau_agpmode / 4 : nouveau_agpmode; -+ -+ mode = (mode & ~0x7) | (rate & 0x7); -+ } -+ -+ return mode; -+} -+#endif -+ - int - nouveau_mem_reset_agp(struct drm_device *dev) - { -@@ -355,7 +474,8 @@ - /* First of all, disable fast writes, otherwise if it's - * already enabled in the AGP bridge and we disable the card's - * AGP controller we might be locking ourselves out of it. */ -- if (nv_rd32(dev, NV04_PBUS_PCI_NV_19) & PCI_AGP_COMMAND_FW) { -+ if ((nv_rd32(dev, NV04_PBUS_PCI_NV_19) | -+ dev->agp->mode) & PCI_AGP_COMMAND_FW) { - struct drm_agp_info info; - struct drm_agp_mode mode; - -@@ -363,7 +483,7 @@ - if (ret) - return ret; - -- mode.mode = info.mode & ~PCI_AGP_COMMAND_FW; -+ mode.mode = get_agp_mode(dev, info.mode) & ~PCI_AGP_COMMAND_FW; - ret = drm_agp_enable(dev, mode); - if (ret) - return ret; -@@ -418,7 +538,7 @@ - } - - /* see agp.h for the AGPSTAT_* modes available */ -- mode.mode = info.mode; -+ mode.mode = get_agp_mode(dev, info.mode); - ret = drm_agp_enable(dev, mode); - if (ret) { - NV_ERROR(dev, "Unable to enable AGP: %d\n", ret); -@@ -433,24 +553,27 @@ - } - - int --nouveau_mem_init(struct drm_device *dev) -+nouveau_mem_vram_init(struct drm_device *dev) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; - struct ttm_bo_device *bdev = &dev_priv->ttm.bdev; -- int ret, dma_bits = 32; -- -- dev_priv->fb_phys = pci_resource_start(dev->pdev, 1); -- dev_priv->gart_info.type = NOUVEAU_GART_NONE; -+ int ret, dma_bits; - - if (dev_priv->card_type >= NV_50 && - pci_dma_supported(dev->pdev, DMA_BIT_MASK(40))) - dma_bits = 40; -+ else -+ dma_bits = 32; - - ret = pci_set_dma_mask(dev->pdev, DMA_BIT_MASK(dma_bits)); -- if (ret) { -- NV_ERROR(dev, "Error setting DMA mask: %d\n", ret); -+ if (ret) - return ret; -- } -+ -+ ret = nouveau_mem_detect(dev); -+ if (ret) -+ return ret; -+ -+ dev_priv->fb_phys = pci_resource_start(dev->pdev, 1); - - ret = nouveau_ttm_global_init(dev_priv); - if (ret) -@@ -465,8 +588,6 @@ - return ret; - } - -- spin_lock_init(&dev_priv->tile.lock); -- - dev_priv->fb_available_size = dev_priv->vram_size; - dev_priv->fb_mappable_pages = dev_priv->fb_available_size; - if (dev_priv->fb_mappable_pages > pci_resource_len(dev->pdev, 1)) -@@ -474,7 +595,16 @@ - pci_resource_len(dev->pdev, 1); - dev_priv->fb_mappable_pages >>= PAGE_SHIFT; - -- /* remove reserved space at end of vram from available amount */ -+ /* reserve space at end of VRAM for PRAMIN */ -+ if (dev_priv->chipset == 0x40 || dev_priv->chipset == 0x47 || -+ dev_priv->chipset == 0x49 || dev_priv->chipset == 0x4b) -+ dev_priv->ramin_rsvd_vram = (2 * 1024 * 1024); -+ else -+ if (dev_priv->card_type >= NV_40) -+ dev_priv->ramin_rsvd_vram = (1 * 1024 * 1024); -+ else -+ dev_priv->ramin_rsvd_vram = (512 * 1024); -+ - dev_priv->fb_available_size -= dev_priv->ramin_rsvd_vram; - dev_priv->fb_aper_free = dev_priv->fb_available_size; - -@@ -495,9 +625,23 @@ - nouveau_bo_ref(NULL, &dev_priv->vga_ram); - } - -- /* GART */ -+ dev_priv->fb_mtrr = drm_mtrr_add(pci_resource_start(dev->pdev, 1), -+ pci_resource_len(dev->pdev, 1), -+ DRM_MTRR_WC); -+ return 0; -+} -+ -+int -+nouveau_mem_gart_init(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct ttm_bo_device *bdev = &dev_priv->ttm.bdev; -+ int ret; -+ -+ dev_priv->gart_info.type = NOUVEAU_GART_NONE; -+ - #if !defined(__powerpc__) && !defined(__ia64__) -- if (drm_device_is_agp(dev) && dev->agp && !nouveau_noagp) { -+ if (drm_device_is_agp(dev) && dev->agp && nouveau_agpmode) { - ret = nouveau_mem_init_agp(dev); - if (ret) - NV_ERROR(dev, "Error initialising AGP: %d\n", ret); -@@ -523,11 +667,157 @@ - return ret; - } - -- dev_priv->fb_mtrr = drm_mtrr_add(pci_resource_start(dev->pdev, 1), -- pci_resource_len(dev->pdev, 1), -- DRM_MTRR_WC); -- - return 0; - } - -+void -+nouveau_mem_timing_init(struct drm_device *dev) -+{ -+ /* cards < NVC0 only */ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_engine *pm = &dev_priv->engine.pm; -+ struct nouveau_pm_memtimings *memtimings = &pm->memtimings; -+ struct nvbios *bios = &dev_priv->vbios; -+ struct bit_entry P; -+ u8 tUNK_0, tUNK_1, tUNK_2; -+ u8 tRP; /* Byte 3 */ -+ u8 tRAS; /* Byte 5 */ -+ u8 tRFC; /* Byte 7 */ -+ u8 tRC; /* Byte 9 */ -+ u8 tUNK_10, tUNK_11, tUNK_12, tUNK_13, tUNK_14; -+ u8 tUNK_18, tUNK_19, tUNK_20, tUNK_21; -+ u8 *mem = NULL, *entry; -+ int i, recordlen, entries; -+ -+ if (bios->type == NVBIOS_BIT) { -+ if (bit_table(dev, 'P', &P)) -+ return; -+ -+ if (P.version == 1) -+ mem = ROMPTR(bios, P.data[4]); -+ else -+ if (P.version == 2) -+ mem = ROMPTR(bios, P.data[8]); -+ else { -+ NV_WARN(dev, "unknown mem for BIT P %d\n", P.version); -+ } -+ } else { -+ NV_DEBUG(dev, "BMP version too old for memory\n"); -+ return; -+ } -+ -+ if (!mem) { -+ NV_DEBUG(dev, "memory timing table pointer invalid\n"); -+ return; -+ } -+ -+ if (mem[0] != 0x10) { -+ NV_WARN(dev, "memory timing table 0x%02x unknown\n", mem[0]); -+ return; -+ } -+ -+ /* validate record length */ -+ entries = mem[2]; -+ recordlen = mem[3]; -+ if (recordlen < 15) { -+ NV_ERROR(dev, "mem timing table length unknown: %d\n", mem[3]); -+ return; -+ } -+ -+ /* parse vbios entries into common format */ -+ memtimings->timing = -+ kcalloc(entries, sizeof(*memtimings->timing), GFP_KERNEL); -+ if (!memtimings->timing) -+ return; -+ -+ entry = mem + mem[1]; -+ for (i = 0; i < entries; i++, entry += recordlen) { -+ struct nouveau_pm_memtiming *timing = &pm->memtimings.timing[i]; -+ if (entry[0] == 0) -+ continue; -+ -+ tUNK_18 = 1; -+ tUNK_19 = 1; -+ tUNK_20 = 0; -+ tUNK_21 = 0; -+ switch (min(recordlen, 22)) { -+ case 22: -+ tUNK_21 = entry[21]; -+ case 21: -+ tUNK_20 = entry[20]; -+ case 20: -+ tUNK_19 = entry[19]; -+ case 19: -+ tUNK_18 = entry[18]; -+ default: -+ tUNK_0 = entry[0]; -+ tUNK_1 = entry[1]; -+ tUNK_2 = entry[2]; -+ tRP = entry[3]; -+ tRAS = entry[5]; -+ tRFC = entry[7]; -+ tRC = entry[9]; -+ tUNK_10 = entry[10]; -+ tUNK_11 = entry[11]; -+ tUNK_12 = entry[12]; -+ tUNK_13 = entry[13]; -+ tUNK_14 = entry[14]; -+ break; -+ } -+ -+ timing->reg_100220 = (tRC << 24 | tRFC << 16 | tRAS << 8 | tRP); -+ -+ /* XXX: I don't trust the -1's and +1's... they must come -+ * from somewhere! */ -+ timing->reg_100224 = ((tUNK_0 + tUNK_19 + 1) << 24 | -+ tUNK_18 << 16 | -+ (tUNK_1 + tUNK_19 + 1) << 8 | -+ (tUNK_2 - 1)); -+ -+ timing->reg_100228 = (tUNK_12 << 16 | tUNK_11 << 8 | tUNK_10); -+ if(recordlen > 19) { -+ timing->reg_100228 += (tUNK_19 - 1) << 24; -+ }/* I cannot back-up this else-statement right now -+ else { -+ timing->reg_100228 += tUNK_12 << 24; -+ }*/ -+ -+ /* XXX: reg_10022c */ -+ timing->reg_10022c = tUNK_2 - 1; -+ -+ timing->reg_100230 = (tUNK_20 << 24 | tUNK_21 << 16 | -+ tUNK_13 << 8 | tUNK_13); -+ -+ /* XXX: +6? */ -+ timing->reg_100234 = (tRAS << 24 | (tUNK_19 + 6) << 8 | tRC); -+ timing->reg_100234 += max(tUNK_10,tUNK_11) << 16; -+ -+ /* XXX; reg_100238, reg_10023c -+ * reg: 0x00?????? -+ * reg_10023c: -+ * 0 for pre-NV50 cards -+ * 0x????0202 for NV50+ cards (empirical evidence) */ -+ if(dev_priv->card_type >= NV_50) { -+ timing->reg_10023c = 0x202; -+ } -+ -+ NV_DEBUG(dev, "Entry %d: 220: %08x %08x %08x %08x\n", i, -+ timing->reg_100220, timing->reg_100224, -+ timing->reg_100228, timing->reg_10022c); -+ NV_DEBUG(dev, " 230: %08x %08x %08x %08x\n", -+ timing->reg_100230, timing->reg_100234, -+ timing->reg_100238, timing->reg_10023c); -+ } -+ -+ memtimings->nr_timing = entries; -+ memtimings->supported = true; -+} -+ -+void -+nouveau_mem_timing_fini(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_memtimings *mem = &dev_priv->engine.pm.memtimings; - -+ kfree(mem->timing); -+} -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_notifier.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_notifier.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_notifier.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_notifier.c 2010-11-05 00:40:00.000000000 +0100 -@@ -28,6 +28,7 @@ - #include "drmP.h" - #include "drm.h" - #include "nouveau_drv.h" -+#include "nouveau_ramht.h" - - int - nouveau_notifier_init_channel(struct nouveau_channel *chan) -@@ -112,7 +113,7 @@ - return -ENOMEM; - } - -- offset = chan->notifier_bo->bo.mem.mm_node->start << PAGE_SHIFT; -+ offset = chan->notifier_bo->bo.mem.start << PAGE_SHIFT; - if (chan->notifier_bo->bo.mem.mem_type == TTM_PL_VRAM) { - target = NV_DMA_TARGET_VIDMEM; - } else -@@ -146,11 +147,11 @@ - nobj->dtor = nouveau_notifier_gpuobj_dtor; - nobj->priv = mem; - -- ret = nouveau_gpuobj_ref_add(dev, chan, handle, nobj, NULL); -+ ret = nouveau_ramht_insert(chan, handle, nobj); -+ nouveau_gpuobj_ref(NULL, &nobj); - if (ret) { -- nouveau_gpuobj_del(dev, &nobj); - drm_mm_put_block(mem); -- NV_ERROR(dev, "Error referencing notifier ctxdma: %d\n", ret); -+ NV_ERROR(dev, "Error adding notifier to ramht: %d\n", ret); - return ret; - } - -@@ -184,11 +185,11 @@ - struct nouveau_channel *chan; - int ret; - -- NOUVEAU_GET_USER_CHANNEL_WITH_RETURN(na->channel, file_priv, chan); -+ chan = nouveau_channel_get(dev, file_priv, na->channel); -+ if (IS_ERR(chan)) -+ return PTR_ERR(chan); - - ret = nouveau_notifier_alloc(chan, na->handle, na->size, &na->offset); -- if (ret) -- return ret; -- -- return 0; -+ nouveau_channel_put(&chan); -+ return ret; - } -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_object.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_object.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_object.c 2010-11-05 00:40:00.000000000 +0100 -@@ -34,6 +34,84 @@ - #include "drm.h" - #include "nouveau_drv.h" - #include "nouveau_drm.h" -+#include "nouveau_ramht.h" -+ -+struct nouveau_gpuobj_method { -+ struct list_head head; -+ u32 mthd; -+ int (*exec)(struct nouveau_channel *, u32 class, u32 mthd, u32 data); -+}; -+ -+struct nouveau_gpuobj_class { -+ struct list_head head; -+ struct list_head methods; -+ u32 id; -+ u32 engine; -+}; -+ -+int -+nouveau_gpuobj_class_new(struct drm_device *dev, u32 class, u32 engine) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_gpuobj_class *oc; -+ -+ oc = kzalloc(sizeof(*oc), GFP_KERNEL); -+ if (!oc) -+ return -ENOMEM; -+ -+ INIT_LIST_HEAD(&oc->methods); -+ oc->id = class; -+ oc->engine = engine; -+ list_add(&oc->head, &dev_priv->classes); -+ return 0; -+} -+ -+int -+nouveau_gpuobj_mthd_new(struct drm_device *dev, u32 class, u32 mthd, -+ int (*exec)(struct nouveau_channel *, u32, u32, u32)) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_gpuobj_method *om; -+ struct nouveau_gpuobj_class *oc; -+ -+ list_for_each_entry(oc, &dev_priv->classes, head) { -+ if (oc->id == class) -+ goto found; -+ } -+ -+ return -EINVAL; -+ -+found: -+ om = kzalloc(sizeof(*om), GFP_KERNEL); -+ if (!om) -+ return -ENOMEM; -+ -+ om->mthd = mthd; -+ om->exec = exec; -+ list_add(&om->head, &oc->methods); -+ return 0; -+} -+ -+int -+nouveau_gpuobj_mthd_call(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data) -+{ -+ struct drm_nouveau_private *dev_priv = chan->dev->dev_private; -+ struct nouveau_gpuobj_method *om; -+ struct nouveau_gpuobj_class *oc; -+ -+ list_for_each_entry(oc, &dev_priv->classes, head) { -+ if (oc->id != class) -+ continue; -+ -+ list_for_each_entry(om, &oc->methods, head) { -+ if (om->mthd == mthd) -+ return om->exec(chan, class, mthd, data); -+ } -+ } -+ -+ return -ENOENT; -+} - - /* NVidia uses context objects to drive drawing operations. - -@@ -65,137 +143,6 @@ - The key into the hash table depends on the object handle and channel id and - is given as: - */ --static uint32_t --nouveau_ramht_hash_handle(struct drm_device *dev, int channel, uint32_t handle) --{ -- struct drm_nouveau_private *dev_priv = dev->dev_private; -- uint32_t hash = 0; -- int i; -- -- NV_DEBUG(dev, "ch%d handle=0x%08x\n", channel, handle); -- -- for (i = 32; i > 0; i -= dev_priv->ramht_bits) { -- hash ^= (handle & ((1 << dev_priv->ramht_bits) - 1)); -- handle >>= dev_priv->ramht_bits; -- } -- -- if (dev_priv->card_type < NV_50) -- hash ^= channel << (dev_priv->ramht_bits - 4); -- hash <<= 3; -- -- NV_DEBUG(dev, "hash=0x%08x\n", hash); -- return hash; --} -- --static int --nouveau_ramht_entry_valid(struct drm_device *dev, struct nouveau_gpuobj *ramht, -- uint32_t offset) --{ -- struct drm_nouveau_private *dev_priv = dev->dev_private; -- uint32_t ctx = nv_ro32(dev, ramht, (offset + 4)/4); -- -- if (dev_priv->card_type < NV_40) -- return ((ctx & NV_RAMHT_CONTEXT_VALID) != 0); -- return (ctx != 0); --} -- --static int --nouveau_ramht_insert(struct drm_device *dev, struct nouveau_gpuobj_ref *ref) --{ -- struct drm_nouveau_private *dev_priv = dev->dev_private; -- struct nouveau_instmem_engine *instmem = &dev_priv->engine.instmem; -- struct nouveau_channel *chan = ref->channel; -- struct nouveau_gpuobj *ramht = chan->ramht ? chan->ramht->gpuobj : NULL; -- uint32_t ctx, co, ho; -- -- if (!ramht) { -- NV_ERROR(dev, "No hash table!\n"); -- return -EINVAL; -- } -- -- if (dev_priv->card_type < NV_40) { -- ctx = NV_RAMHT_CONTEXT_VALID | (ref->instance >> 4) | -- (chan->id << NV_RAMHT_CONTEXT_CHANNEL_SHIFT) | -- (ref->gpuobj->engine << NV_RAMHT_CONTEXT_ENGINE_SHIFT); -- } else -- if (dev_priv->card_type < NV_50) { -- ctx = (ref->instance >> 4) | -- (chan->id << NV40_RAMHT_CONTEXT_CHANNEL_SHIFT) | -- (ref->gpuobj->engine << NV40_RAMHT_CONTEXT_ENGINE_SHIFT); -- } else { -- if (ref->gpuobj->engine == NVOBJ_ENGINE_DISPLAY) { -- ctx = (ref->instance << 10) | 2; -- } else { -- ctx = (ref->instance >> 4) | -- ((ref->gpuobj->engine << -- NV40_RAMHT_CONTEXT_ENGINE_SHIFT)); -- } -- } -- -- co = ho = nouveau_ramht_hash_handle(dev, chan->id, ref->handle); -- do { -- if (!nouveau_ramht_entry_valid(dev, ramht, co)) { -- NV_DEBUG(dev, -- "insert ch%d 0x%08x: h=0x%08x, c=0x%08x\n", -- chan->id, co, ref->handle, ctx); -- nv_wo32(dev, ramht, (co + 0)/4, ref->handle); -- nv_wo32(dev, ramht, (co + 4)/4, ctx); -- -- list_add_tail(&ref->list, &chan->ramht_refs); -- instmem->flush(dev); -- return 0; -- } -- NV_DEBUG(dev, "collision ch%d 0x%08x: h=0x%08x\n", -- chan->id, co, nv_ro32(dev, ramht, co/4)); -- -- co += 8; -- if (co >= dev_priv->ramht_size) -- co = 0; -- } while (co != ho); -- -- NV_ERROR(dev, "RAMHT space exhausted. ch=%d\n", chan->id); -- return -ENOMEM; --} -- --static void --nouveau_ramht_remove(struct drm_device *dev, struct nouveau_gpuobj_ref *ref) --{ -- struct drm_nouveau_private *dev_priv = dev->dev_private; -- struct nouveau_instmem_engine *instmem = &dev_priv->engine.instmem; -- struct nouveau_channel *chan = ref->channel; -- struct nouveau_gpuobj *ramht = chan->ramht ? chan->ramht->gpuobj : NULL; -- uint32_t co, ho; -- -- if (!ramht) { -- NV_ERROR(dev, "No hash table!\n"); -- return; -- } -- -- co = ho = nouveau_ramht_hash_handle(dev, chan->id, ref->handle); -- do { -- if (nouveau_ramht_entry_valid(dev, ramht, co) && -- (ref->handle == nv_ro32(dev, ramht, (co/4)))) { -- NV_DEBUG(dev, -- "remove ch%d 0x%08x: h=0x%08x, c=0x%08x\n", -- chan->id, co, ref->handle, -- nv_ro32(dev, ramht, (co + 4))); -- nv_wo32(dev, ramht, (co + 0)/4, 0x00000000); -- nv_wo32(dev, ramht, (co + 4)/4, 0x00000000); -- -- list_del(&ref->list); -- instmem->flush(dev); -- return; -- } -- -- co += 8; -- if (co >= dev_priv->ramht_size) -- co = 0; -- } while (co != ho); -- list_del(&ref->list); -- -- NV_ERROR(dev, "RAMHT entry not found. ch=%d, handle=0x%08x\n", -- chan->id, ref->handle); --} - - int - nouveau_gpuobj_new(struct drm_device *dev, struct nouveau_channel *chan, -@@ -205,7 +152,7 @@ - struct drm_nouveau_private *dev_priv = dev->dev_private; - struct nouveau_engine *engine = &dev_priv->engine; - struct nouveau_gpuobj *gpuobj; -- struct drm_mm *pramin = NULL; -+ struct drm_mm_node *ramin = NULL; - int ret; - - NV_DEBUG(dev, "ch%d size=%u align=%d flags=0x%08x\n", -@@ -218,69 +165,102 @@ - if (!gpuobj) - return -ENOMEM; - NV_DEBUG(dev, "gpuobj %p\n", gpuobj); -+ gpuobj->dev = dev; - gpuobj->flags = flags; -- gpuobj->im_channel = chan; -+ kref_init(&gpuobj->refcount); -+ gpuobj->size = size; - -+ spin_lock(&dev_priv->ramin_lock); - list_add_tail(&gpuobj->list, &dev_priv->gpuobj_list); -+ spin_unlock(&dev_priv->ramin_lock); - -- /* Choose between global instmem heap, and per-channel private -- * instmem heap. On ramin_heap; -+ -+ ramin = drm_mm_search_free(&chan->ramin_heap, size, align, 0); -+ if (ramin) -+ ramin = drm_mm_get_block(ramin, size, align); -+ -+ if (!ramin) { -+ nouveau_gpuobj_ref(NULL, &gpuobj); -+ return -ENOMEM; -+ } - } else { - NV_DEBUG(dev, "global heap\n"); -- pramin = &dev_priv->ramin_heap; - -- ret = engine->instmem.populate(dev, gpuobj, &size); -+ /* allocate backing pages, sets vinst */ -+ ret = engine->instmem.populate(dev, gpuobj, &size, align); - if (ret) { -- nouveau_gpuobj_del(dev, &gpuobj); -+ nouveau_gpuobj_ref(NULL, &gpuobj); - return ret; - } -- } - -- /* Allocate a chunk of the PRAMIN aperture */ -- gpuobj->im_pramin = drm_mm_search_free(pramin, size, align, 0); -- if (gpuobj->im_pramin) -- gpuobj->im_pramin = drm_mm_get_block(gpuobj->im_pramin, size, align); -+ /* try and get aperture space */ -+ do { -+ if (drm_mm_pre_get(&dev_priv->ramin_heap)) -+ return -ENOMEM; -+ -+ spin_lock(&dev_priv->ramin_lock); -+ ramin = drm_mm_search_free(&dev_priv->ramin_heap, size, -+ align, 0); -+ if (ramin == NULL) { -+ spin_unlock(&dev_priv->ramin_lock); -+ nouveau_gpuobj_ref(NULL, &gpuobj); -+ return -ENOMEM; -+ } - -- if (!gpuobj->im_pramin) { -- nouveau_gpuobj_del(dev, &gpuobj); -- return -ENOMEM; -+ ramin = drm_mm_get_block_atomic(ramin, size, align); -+ spin_unlock(&dev_priv->ramin_lock); -+ } while (ramin == NULL); -+ -+ /* on nv50 it's ok to fail, we have a fallback path */ -+ if (!ramin && dev_priv->card_type < NV_50) { -+ nouveau_gpuobj_ref(NULL, &gpuobj); -+ return -ENOMEM; -+ } - } - -- if (!chan) { -+ /* if we got a chunk of the aperture, map pages into it */ -+ gpuobj->im_pramin = ramin; -+ if (!chan && gpuobj->im_pramin && dev_priv->ramin_available) { - ret = engine->instmem.bind(dev, gpuobj); - if (ret) { -- nouveau_gpuobj_del(dev, &gpuobj); -+ nouveau_gpuobj_ref(NULL, &gpuobj); - return ret; - } - } - -+ /* calculate the various different addresses for the object */ -+ if (chan) { -+ gpuobj->pinst = chan->ramin->pinst; -+ if (gpuobj->pinst != ~0) -+ gpuobj->pinst += gpuobj->im_pramin->start; -+ -+ if (dev_priv->card_type < NV_50) { -+ gpuobj->cinst = gpuobj->pinst; -+ } else { -+ gpuobj->cinst = gpuobj->im_pramin->start; -+ gpuobj->vinst = gpuobj->im_pramin->start + -+ chan->ramin->vinst; -+ } -+ } else { -+ if (gpuobj->im_pramin) -+ gpuobj->pinst = gpuobj->im_pramin->start; -+ else -+ gpuobj->pinst = ~0; -+ gpuobj->cinst = 0xdeadbeef; -+ } -+ - if (gpuobj->flags & NVOBJ_FLAG_ZERO_ALLOC) { - int i; - -- for (i = 0; i < gpuobj->im_pramin->size; i += 4) -- nv_wo32(dev, gpuobj, i/4, 0); -+ for (i = 0; i < gpuobj->size; i += 4) -+ nv_wo32(gpuobj, i, 0); - engine->instmem.flush(dev); - } - -- *gpuobj_ret = gpuobj; -- return 0; --} -- --int --nouveau_gpuobj_early_init(struct drm_device *dev) --{ -- struct drm_nouveau_private *dev_priv = dev->dev_private; -- -- NV_DEBUG(dev, "\n"); -- -- INIT_LIST_HEAD(&dev_priv->gpuobj_list); - -+ *gpuobj_ret = gpuobj; - return 0; - } - -@@ -288,18 +268,13 @@ - nouveau_gpuobj_init(struct drm_device *dev) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; -- int ret; - - NV_DEBUG(dev, "\n"); - -- if (dev_priv->card_type < NV_50) { -- ret = nouveau_gpuobj_new_fake(dev, -- dev_priv->ramht_offset, ~0, dev_priv->ramht_size, -- NVOBJ_FLAG_ZERO_ALLOC | NVOBJ_FLAG_ALLOW_NO_REFS, -- &dev_priv->ramht, NULL); -- if (ret) -- return ret; -- } -+ INIT_LIST_HEAD(&dev_priv->gpuobj_list); -+ INIT_LIST_HEAD(&dev_priv->classes); -+ spin_lock_init(&dev_priv->ramin_lock); -+ dev_priv->ramin_base = ~0; - - return 0; - } -@@ -308,300 +283,103 @@ - nouveau_gpuobj_takedown(struct drm_device *dev) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_gpuobj_method *om, *tm; -+ struct nouveau_gpuobj_class *oc, *tc; - - NV_DEBUG(dev, "\n"); - -- nouveau_gpuobj_del(dev, &dev_priv->ramht); --} -- --void --nouveau_gpuobj_late_takedown(struct drm_device *dev) --{ -- struct drm_nouveau_private *dev_priv = dev->dev_private; -- struct nouveau_gpuobj *gpuobj = NULL; -- struct list_head *entry, *tmp; -- -- NV_DEBUG(dev, "\n"); -- -- list_for_each_safe(entry, tmp, &dev_priv->gpuobj_list) { -- gpuobj = list_entry(entry, struct nouveau_gpuobj, list); -- -- NV_ERROR(dev, "gpuobj %p still exists at takedown, refs=%d\n", -- gpuobj, gpuobj->refcount); -- gpuobj->refcount = 0; -- nouveau_gpuobj_del(dev, &gpuobj); -+ list_for_each_entry_safe(oc, tc, &dev_priv->classes, head) { -+ list_for_each_entry_safe(om, tm, &oc->methods, head) { -+ list_del(&om->head); -+ kfree(om); -+ } -+ list_del(&oc->head); -+ kfree(oc); - } -+ -+ BUG_ON(!list_empty(&dev_priv->gpuobj_list)); - } - --int --nouveau_gpuobj_del(struct drm_device *dev, struct nouveau_gpuobj **pgpuobj) -+ -+static void -+nouveau_gpuobj_del(struct kref *ref) - { -+ struct nouveau_gpuobj *gpuobj = -+ container_of(ref, struct nouveau_gpuobj, refcount); -+ struct drm_device *dev = gpuobj->dev; - struct drm_nouveau_private *dev_priv = dev->dev_private; - struct nouveau_engine *engine = &dev_priv->engine; -- struct nouveau_gpuobj *gpuobj; - int i; - -- NV_DEBUG(dev, "gpuobj %p\n", pgpuobj ? *pgpuobj : NULL); -- -- if (!dev_priv || !pgpuobj || !(*pgpuobj)) -- return -EINVAL; -- gpuobj = *pgpuobj; -- -- if (gpuobj->refcount != 0) { -- NV_ERROR(dev, "gpuobj refcount is %d\n", gpuobj->refcount); -- return -EINVAL; -- } -+ NV_DEBUG(dev, "gpuobj %p\n", gpuobj); - - if (gpuobj->im_pramin && (gpuobj->flags & NVOBJ_FLAG_ZERO_FREE)) { -- for (i = 0; i < gpuobj->im_pramin->size; i += 4) -- nv_wo32(dev, gpuobj, i/4, 0); -+ for (i = 0; i < gpuobj->size; i += 4) -+ nv_wo32(gpuobj, i, 0); - engine->instmem.flush(dev); - } - - if (gpuobj->dtor) - gpuobj->dtor(dev, gpuobj); - -- if (gpuobj->im_backing && !(gpuobj->flags & NVOBJ_FLAG_FAKE)) -+ if (gpuobj->im_backing) - engine->instmem.clear(dev, gpuobj); - -- if (gpuobj->im_pramin) { -- if (gpuobj->flags & NVOBJ_FLAG_FAKE) -- kfree(gpuobj->im_pramin); -- else -- drm_mm_put_block(gpuobj->im_pramin); -- } -- -+ spin_lock(&dev_priv->ramin_lock); -+ if (gpuobj->im_pramin) -+ drm_mm_put_block(gpuobj->im_pramin); - list_del(&gpuobj->list); -+ spin_unlock(&dev_priv->ramin_lock); - -- *pgpuobj = NULL; - kfree(gpuobj); -- return 0; --} -- --static int --nouveau_gpuobj_instance_get(struct drm_device *dev, -- struct nouveau_channel *chan, -- struct nouveau_gpuobj *gpuobj, uint32_t *inst) --{ -- struct drm_nouveau_private *dev_priv = dev->dev_private; -- struct nouveau_gpuobj *cpramin; -- -- /* card_type < NV_50) { -- *inst = gpuobj->im_pramin->start; -- return 0; -- } -- -- if (chan && gpuobj->im_channel != chan) { -- NV_ERROR(dev, "Channel mismatch: obj %d, ref %d\n", -- gpuobj->im_channel->id, chan->id); -- return -EINVAL; -- } -- -- /* NV50 channel-local instance */ -- if (chan) { -- cpramin = chan->ramin->gpuobj; -- *inst = gpuobj->im_pramin->start - cpramin->im_pramin->start; -- return 0; -- } -- -- /* NV50 global (VRAM) instance */ -- if (!gpuobj->im_channel) { -- /* ...from global heap */ -- if (!gpuobj->im_backing) { -- NV_ERROR(dev, "AII, no VRAM backing gpuobj\n"); -- return -EINVAL; -- } -- *inst = gpuobj->im_backing_start; -- return 0; -- } else { -- /* ...from local heap */ -- cpramin = gpuobj->im_channel->ramin->gpuobj; -- *inst = cpramin->im_backing_start + -- (gpuobj->im_pramin->start - cpramin->im_pramin->start); -- return 0; -- } -- -- return -EINVAL; --} -- --int --nouveau_gpuobj_ref_add(struct drm_device *dev, struct nouveau_channel *chan, -- uint32_t handle, struct nouveau_gpuobj *gpuobj, -- struct nouveau_gpuobj_ref **ref_ret) --{ -- struct drm_nouveau_private *dev_priv = dev->dev_private; -- struct nouveau_gpuobj_ref *ref; -- uint32_t instance; -- int ret; -- -- NV_DEBUG(dev, "ch%d h=0x%08x gpuobj=%p\n", -- chan ? chan->id : -1, handle, gpuobj); -- -- if (!dev_priv || !gpuobj || (ref_ret && *ref_ret != NULL)) -- return -EINVAL; -- -- if (!chan && !ref_ret) -- return -EINVAL; -- -- if (gpuobj->engine == NVOBJ_ENGINE_SW && !gpuobj->im_pramin) { -- /* sw object */ -- instance = 0x40; -- } else { -- ret = nouveau_gpuobj_instance_get(dev, chan, gpuobj, &instance); -- if (ret) -- return ret; -- } -- -- ref = kzalloc(sizeof(*ref), GFP_KERNEL); -- if (!ref) -- return -ENOMEM; -- INIT_LIST_HEAD(&ref->list); -- ref->gpuobj = gpuobj; -- ref->channel = chan; -- ref->instance = instance; -- -- if (!ref_ret) { -- ref->handle = handle; -- -- ret = nouveau_ramht_insert(dev, ref); -- if (ret) { -- kfree(ref); -- return ret; -- } -- } else { -- ref->handle = ~0; -- *ref_ret = ref; -- } -- -- ref->gpuobj->refcount++; -- return 0; --} -- --int nouveau_gpuobj_ref_del(struct drm_device *dev, struct nouveau_gpuobj_ref **pref) --{ -- struct nouveau_gpuobj_ref *ref; -- -- NV_DEBUG(dev, "ref %p\n", pref ? *pref : NULL); -- -- if (!dev || !pref || *pref == NULL) -- return -EINVAL; -- ref = *pref; -- -- if (ref->handle != ~0) -- nouveau_ramht_remove(dev, ref); -- -- if (ref->gpuobj) { -- ref->gpuobj->refcount--; -- -- if (ref->gpuobj->refcount == 0) { -- if (!(ref->gpuobj->flags & NVOBJ_FLAG_ALLOW_NO_REFS)) -- nouveau_gpuobj_del(dev, &ref->gpuobj); -- } -- } -- -- *pref = NULL; -- kfree(ref); -- return 0; --} -- --int --nouveau_gpuobj_new_ref(struct drm_device *dev, -- struct nouveau_channel *oc, struct nouveau_channel *rc, -- uint32_t handle, uint32_t size, int align, -- uint32_t flags, struct nouveau_gpuobj_ref **ref) --{ -- struct nouveau_gpuobj *gpuobj = NULL; -- int ret; -- -- ret = nouveau_gpuobj_new(dev, oc, size, align, flags, &gpuobj); -- if (ret) -- return ret; -- -- ret = nouveau_gpuobj_ref_add(dev, rc, handle, gpuobj, ref); -- if (ret) { -- nouveau_gpuobj_del(dev, &gpuobj); -- return ret; -- } -- -- return 0; - } - --int --nouveau_gpuobj_ref_find(struct nouveau_channel *chan, uint32_t handle, -- struct nouveau_gpuobj_ref **ref_ret) -+void -+nouveau_gpuobj_ref(struct nouveau_gpuobj *ref, struct nouveau_gpuobj **ptr) - { -- struct nouveau_gpuobj_ref *ref; -- struct list_head *entry, *tmp; -- -- list_for_each_safe(entry, tmp, &chan->ramht_refs) { -- ref = list_entry(entry, struct nouveau_gpuobj_ref, list); -+ if (ref) -+ kref_get(&ref->refcount); - -- if (ref->handle == handle) { -- if (ref_ret) -- *ref_ret = ref; -- return 0; -- } -- } -+ if (*ptr) -+ kref_put(&(*ptr)->refcount, nouveau_gpuobj_del); - -- return -EINVAL; -+ *ptr = ref; - } - - int --nouveau_gpuobj_new_fake(struct drm_device *dev, uint32_t p_offset, -- uint32_t b_offset, uint32_t size, -- uint32_t flags, struct nouveau_gpuobj **pgpuobj, -- struct nouveau_gpuobj_ref **pref) -+nouveau_gpuobj_new_fake(struct drm_device *dev, u32 pinst, u64 vinst, -+ u32 size, u32 flags, struct nouveau_gpuobj **pgpuobj) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; - struct nouveau_gpuobj *gpuobj = NULL; - int i; - - NV_DEBUG(dev, -- "p_offset=0x%08x b_offset=0x%08x size=0x%08x flags=0x%08x\n", -- p_offset, b_offset, size, flags); -+ "pinst=0x%08x vinst=0x%010llx size=0x%08x flags=0x%08x\n", -+ pinst, vinst, size, flags); - - gpuobj = kzalloc(sizeof(*gpuobj), GFP_KERNEL); - if (!gpuobj) - return -ENOMEM; - NV_DEBUG(dev, "gpuobj %p\n", gpuobj); -- gpuobj->im_channel = NULL; -- gpuobj->flags = flags | NVOBJ_FLAG_FAKE; -- -- list_add_tail(&gpuobj->list, &dev_priv->gpuobj_list); -- -- if (p_offset != ~0) { -- gpuobj->im_pramin = kzalloc(sizeof(struct drm_mm_node), -- GFP_KERNEL); -- if (!gpuobj->im_pramin) { -- nouveau_gpuobj_del(dev, &gpuobj); -- return -ENOMEM; -- } -- gpuobj->im_pramin->start = p_offset; -- gpuobj->im_pramin->size = size; -- } -- -- if (b_offset != ~0) { -- gpuobj->im_backing = (struct nouveau_bo *)-1; -- gpuobj->im_backing_start = b_offset; -- } -+ gpuobj->dev = dev; -+ gpuobj->flags = flags; -+ kref_init(&gpuobj->refcount); -+ gpuobj->size = size; -+ gpuobj->pinst = pinst; -+ gpuobj->cinst = 0xdeadbeef; -+ gpuobj->vinst = vinst; - - if (gpuobj->flags & NVOBJ_FLAG_ZERO_ALLOC) { -- for (i = 0; i < gpuobj->im_pramin->size; i += 4) -- nv_wo32(dev, gpuobj, i/4, 0); -+ for (i = 0; i < gpuobj->size; i += 4) -+ nv_wo32(gpuobj, i, 0); - dev_priv->engine.instmem.flush(dev); - } - -- if (pref) { -- i = nouveau_gpuobj_ref_add(dev, NULL, 0, gpuobj, pref); -- if (i) { -- nouveau_gpuobj_del(dev, &gpuobj); -- return i; -- } -- } -- -- if (pgpuobj) -- *pgpuobj = gpuobj; -+ spin_lock(&dev_priv->ramin_lock); -+ list_add_tail(&gpuobj->list, &dev_priv->gpuobj_list); -+ spin_unlock(&dev_priv->ramin_lock); -+ *pgpuobj = gpuobj; - return 0; - } - -@@ -685,14 +463,12 @@ - adjust = offset & 0x00000fff; - frame = offset & ~0x00000fff; - -- nv_wo32(dev, *gpuobj, 0, ((1<<12) | (1<<13) | -- (adjust << 20) | -- (access << 14) | -- (target << 16) | -- class)); -- nv_wo32(dev, *gpuobj, 1, size - 1); -- nv_wo32(dev, *gpuobj, 2, frame | pte_flags); -- nv_wo32(dev, *gpuobj, 3, frame | pte_flags); -+ nv_wo32(*gpuobj, 0, ((1<<12) | (1<<13) | (adjust << 20) | -+ (access << 14) | (target << 16) | -+ class)); -+ nv_wo32(*gpuobj, 4, size - 1); -+ nv_wo32(*gpuobj, 8, frame | pte_flags); -+ nv_wo32(*gpuobj, 12, frame | pte_flags); - } else { - uint64_t limit = offset + size - 1; - uint32_t flags0, flags5; -@@ -705,12 +481,12 @@ - flags5 = 0x00080000; - } - -- nv_wo32(dev, *gpuobj, 0, flags0 | class); -- nv_wo32(dev, *gpuobj, 1, lower_32_bits(limit)); -- nv_wo32(dev, *gpuobj, 2, lower_32_bits(offset)); -- nv_wo32(dev, *gpuobj, 3, ((upper_32_bits(limit) & 0xff) << 24) | -- (upper_32_bits(offset) & 0xff)); -- nv_wo32(dev, *gpuobj, 5, flags5); -+ nv_wo32(*gpuobj, 0, flags0 | class); -+ nv_wo32(*gpuobj, 4, lower_32_bits(limit)); -+ nv_wo32(*gpuobj, 8, lower_32_bits(offset)); -+ nv_wo32(*gpuobj, 12, ((upper_32_bits(limit) & 0xff) << 24) | -+ (upper_32_bits(offset) & 0xff)); -+ nv_wo32(*gpuobj, 20, flags5); - } - - instmem->flush(dev); -@@ -741,7 +517,7 @@ - *o_ret = 0; - } else - if (dev_priv->gart_info.type == NOUVEAU_GART_SGDMA) { -- *gpuobj = dev_priv->gart_info.sg_ctxdma; -+ nouveau_gpuobj_ref(dev_priv->gart_info.sg_ctxdma, gpuobj); - if (offset & ~0xffffffffULL) { - NV_ERROR(dev, "obj offset exceeds 32-bits\n"); - return -EINVAL; -@@ -808,76 +584,117 @@ - entry[5]: - set to 0? - */ -+static int -+nouveau_gpuobj_sw_new(struct nouveau_channel *chan, int class, -+ struct nouveau_gpuobj **gpuobj_ret) -+{ -+ struct drm_nouveau_private *dev_priv; -+ struct nouveau_gpuobj *gpuobj; -+ -+ if (!chan || !gpuobj_ret || *gpuobj_ret != NULL) -+ return -EINVAL; -+ dev_priv = chan->dev->dev_private; -+ -+ gpuobj = kzalloc(sizeof(*gpuobj), GFP_KERNEL); -+ if (!gpuobj) -+ return -ENOMEM; -+ gpuobj->dev = chan->dev; -+ gpuobj->engine = NVOBJ_ENGINE_SW; -+ gpuobj->class = class; -+ kref_init(&gpuobj->refcount); -+ gpuobj->cinst = 0x40; -+ -+ spin_lock(&dev_priv->ramin_lock); -+ list_add_tail(&gpuobj->list, &dev_priv->gpuobj_list); -+ spin_unlock(&dev_priv->ramin_lock); -+ *gpuobj_ret = gpuobj; -+ return 0; -+} -+ - int - nouveau_gpuobj_gr_new(struct nouveau_channel *chan, int class, - struct nouveau_gpuobj **gpuobj) - { -+ struct drm_nouveau_private *dev_priv = chan->dev->dev_private; - struct drm_device *dev = chan->dev; -- struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_gpuobj_class *oc; - int ret; - - NV_DEBUG(dev, "ch%d class=0x%04x\n", chan->id, class); - -+ list_for_each_entry(oc, &dev_priv->classes, head) { -+ if (oc->id == class) -+ goto found; -+ } -+ -+ NV_ERROR(dev, "illegal object class: 0x%x\n", class); -+ return -EINVAL; -+ -+found: -+ if (oc->engine == NVOBJ_ENGINE_SW) -+ return nouveau_gpuobj_sw_new(chan, class, gpuobj); -+ -+ switch (oc->engine) { -+ case NVOBJ_ENGINE_GR: -+ if (dev_priv->chipset >= NV_50 && !chan->ramin_grctx) { -+ struct nouveau_pgraph_engine *pgraph = -+ &dev_priv->engine.graph; -+ -+ ret = pgraph->create_context(chan); -+ if (ret) -+ return ret; -+ } -+ break; -+ case NVOBJ_ENGINE_CRYPT: -+ if (!chan->crypt_ctx) { -+ struct nouveau_crypt_engine *pcrypt = -+ &dev_priv->engine.crypt; -+ -+ ret = pcrypt->create_context(chan); -+ if (ret) -+ return ret; -+ } -+ break; -+ } -+ - ret = nouveau_gpuobj_new(dev, chan, - nouveau_gpuobj_class_instmem_size(dev, class), - 16, - NVOBJ_FLAG_ZERO_ALLOC | NVOBJ_FLAG_ZERO_FREE, - gpuobj); - if (ret) { -- NV_ERROR(dev, "Error creating gpuobj: %d\n", ret); -+ NV_ERROR(dev, "error creating gpuobj: %d\n", ret); - return ret; - } - - if (dev_priv->card_type >= NV_50) { -- nv_wo32(dev, *gpuobj, 0, class); -- nv_wo32(dev, *gpuobj, 5, 0x00010000); -+ nv_wo32(*gpuobj, 0, class); -+ nv_wo32(*gpuobj, 20, 0x00010000); - } else { - switch (class) { - case NV_CLASS_NULL: -- nv_wo32(dev, *gpuobj, 0, 0x00001030); -- nv_wo32(dev, *gpuobj, 1, 0xFFFFFFFF); -+ nv_wo32(*gpuobj, 0, 0x00001030); -+ nv_wo32(*gpuobj, 4, 0xFFFFFFFF); - break; - default: - if (dev_priv->card_type >= NV_40) { -- nv_wo32(dev, *gpuobj, 0, class); -+ nv_wo32(*gpuobj, 0, class); - #ifdef __BIG_ENDIAN -- nv_wo32(dev, *gpuobj, 2, 0x01000000); -+ nv_wo32(*gpuobj, 8, 0x01000000); - #endif - } else { - #ifdef __BIG_ENDIAN -- nv_wo32(dev, *gpuobj, 0, class | 0x00080000); -+ nv_wo32(*gpuobj, 0, class | 0x00080000); - #else -- nv_wo32(dev, *gpuobj, 0, class); -+ nv_wo32(*gpuobj, 0, class); - #endif - } - } - } - dev_priv->engine.instmem.flush(dev); - -- (*gpuobj)->engine = NVOBJ_ENGINE_GR; -- (*gpuobj)->class = class; -- return 0; --} -- --int --nouveau_gpuobj_sw_new(struct nouveau_channel *chan, int class, -- struct nouveau_gpuobj **gpuobj_ret) --{ -- struct drm_nouveau_private *dev_priv; -- struct nouveau_gpuobj *gpuobj; -- -- if (!chan || !gpuobj_ret || *gpuobj_ret != NULL) -- return -EINVAL; -- dev_priv = chan->dev->dev_private; -- -- gpuobj = kzalloc(sizeof(*gpuobj), GFP_KERNEL); -- if (!gpuobj) -- return -ENOMEM; -- gpuobj->engine = NVOBJ_ENGINE_SW; -- gpuobj->class = class; -- -- list_add_tail(&gpuobj->list, &dev_priv->gpuobj_list); -- *gpuobj_ret = gpuobj; -+ (*gpuobj)->engine = oc->engine; -+ (*gpuobj)->class = oc->id; - return 0; - } - -@@ -886,7 +703,6 @@ - { - struct drm_device *dev = chan->dev; - struct drm_nouveau_private *dev_priv = dev->dev_private; -- struct nouveau_gpuobj *pramin = NULL; - uint32_t size; - uint32_t base; - int ret; -@@ -894,7 +710,7 @@ - NV_DEBUG(dev, "ch%d\n", chan->id); - - /* Base amount for object storage (4KiB enough?) */ -- size = 0x1000; -+ size = 0x2000; - base = 0; - - /* PGRAPH context */ -@@ -911,18 +727,16 @@ - size += 0x1000; - } - -- ret = nouveau_gpuobj_new_ref(dev, NULL, NULL, 0, size, 0x1000, 0, -- &chan->ramin); -+ ret = nouveau_gpuobj_new(dev, NULL, size, 0x1000, 0, &chan->ramin); - if (ret) { - NV_ERROR(dev, "Error allocating channel PRAMIN: %d\n", ret); - return ret; - } -- pramin = chan->ramin->gpuobj; - -- ret = drm_mm_init(&chan->ramin_heap, pramin->im_pramin->start + base, size); -+ ret = drm_mm_init(&chan->ramin_heap, base, size); - if (ret) { - NV_ERROR(dev, "Error creating PRAMIN heap: %d\n", ret); -- nouveau_gpuobj_ref_del(dev, &chan->ramin); -+ nouveau_gpuobj_ref(NULL, &chan->ramin); - return ret; - } - -@@ -939,8 +753,6 @@ - struct nouveau_gpuobj *vram = NULL, *tt = NULL; - int ret, i; - -- INIT_LIST_HEAD(&chan->ramht_refs); -- - NV_DEBUG(dev, "ch%d vram=0x%08x tt=0x%08x\n", chan->id, vram_h, tt_h); - - /* Allocate a chunk of memory for per-channel object storage */ -@@ -956,41 +768,38 @@ - * locations determined during init. - */ - if (dev_priv->card_type >= NV_50) { -- uint32_t vm_offset, pde; -+ u32 pgd_offs = (dev_priv->chipset == 0x50) ? 0x1400 : 0x0200; -+ u64 vm_vinst = chan->ramin->vinst + pgd_offs; -+ u32 vm_pinst = chan->ramin->pinst; -+ u32 pde; - -- vm_offset = (dev_priv->chipset & 0xf0) == 0x50 ? 0x1400 : 0x200; -- vm_offset += chan->ramin->gpuobj->im_pramin->start; -+ if (vm_pinst != ~0) -+ vm_pinst += pgd_offs; - -- ret = nouveau_gpuobj_new_fake(dev, vm_offset, ~0, 0x4000, -- 0, &chan->vm_pd, NULL); -+ ret = nouveau_gpuobj_new_fake(dev, vm_pinst, vm_vinst, 0x4000, -+ 0, &chan->vm_pd); - if (ret) - return ret; - for (i = 0; i < 0x4000; i += 8) { -- nv_wo32(dev, chan->vm_pd, (i+0)/4, 0x00000000); -- nv_wo32(dev, chan->vm_pd, (i+4)/4, 0xdeadcafe); -+ nv_wo32(chan->vm_pd, i + 0, 0x00000000); -+ nv_wo32(chan->vm_pd, i + 4, 0xdeadcafe); - } - -- pde = (dev_priv->vm_gart_base / (512*1024*1024)) * 2; -- ret = nouveau_gpuobj_ref_add(dev, NULL, 0, -- dev_priv->gart_info.sg_ctxdma, -- &chan->vm_gart_pt); -- if (ret) -- return ret; -- nv_wo32(dev, chan->vm_pd, pde++, -- chan->vm_gart_pt->instance | 0x03); -- nv_wo32(dev, chan->vm_pd, pde++, 0x00000000); -+ nouveau_gpuobj_ref(dev_priv->gart_info.sg_ctxdma, -+ &chan->vm_gart_pt); -+ pde = (dev_priv->vm_gart_base / (512*1024*1024)) * 8; -+ nv_wo32(chan->vm_pd, pde + 0, chan->vm_gart_pt->vinst | 3); -+ nv_wo32(chan->vm_pd, pde + 4, 0x00000000); - -- pde = (dev_priv->vm_vram_base / (512*1024*1024)) * 2; -+ pde = (dev_priv->vm_vram_base / (512*1024*1024)) * 8; - for (i = 0; i < dev_priv->vm_vram_pt_nr; i++) { -- ret = nouveau_gpuobj_ref_add(dev, NULL, 0, -- dev_priv->vm_vram_pt[i], -- &chan->vm_vram_pt[i]); -- if (ret) -- return ret; -+ nouveau_gpuobj_ref(dev_priv->vm_vram_pt[i], -+ &chan->vm_vram_pt[i]); - -- nv_wo32(dev, chan->vm_pd, pde++, -- chan->vm_vram_pt[i]->instance | 0x61); -- nv_wo32(dev, chan->vm_pd, pde++, 0x00000000); -+ nv_wo32(chan->vm_pd, pde + 0, -+ chan->vm_vram_pt[i]->vinst | 0x61); -+ nv_wo32(chan->vm_pd, pde + 4, 0x00000000); -+ pde += 8; - } - - instmem->flush(dev); -@@ -998,15 +807,17 @@ - - /* RAMHT */ - if (dev_priv->card_type < NV_50) { -- ret = nouveau_gpuobj_ref_add(dev, NULL, 0, dev_priv->ramht, -- &chan->ramht); -+ nouveau_ramht_ref(dev_priv->ramht, &chan->ramht, NULL); -+ } else { -+ struct nouveau_gpuobj *ramht = NULL; -+ -+ ret = nouveau_gpuobj_new(dev, chan, 0x8000, 16, -+ NVOBJ_FLAG_ZERO_ALLOC, &ramht); - if (ret) - return ret; -- } else { -- ret = nouveau_gpuobj_new_ref(dev, chan, chan, 0, -- 0x8000, 16, -- NVOBJ_FLAG_ZERO_ALLOC, -- &chan->ramht); -+ -+ ret = nouveau_ramht_new(dev, ramht, &chan->ramht); -+ nouveau_gpuobj_ref(NULL, &ramht); - if (ret) - return ret; - } -@@ -1023,24 +834,32 @@ - } - } else { - ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, -- 0, dev_priv->fb_available_size, -- NV_DMA_ACCESS_RW, -- NV_DMA_TARGET_VIDMEM, &vram); -+ 0, dev_priv->fb_available_size, -+ NV_DMA_ACCESS_RW, -+ NV_DMA_TARGET_VIDMEM, &vram); - if (ret) { - NV_ERROR(dev, "Error creating VRAM ctxdma: %d\n", ret); - return ret; - } - } - -- ret = nouveau_gpuobj_ref_add(dev, chan, vram_h, vram, NULL); -+ ret = nouveau_ramht_insert(chan, vram_h, vram); -+ nouveau_gpuobj_ref(NULL, &vram); - if (ret) { -- NV_ERROR(dev, "Error referencing VRAM ctxdma: %d\n", ret); -+ NV_ERROR(dev, "Error adding VRAM ctxdma to RAMHT: %d\n", ret); - return ret; - } - - /* TT memory ctxdma */ - if (dev_priv->card_type >= NV_50) { -- tt = vram; -+ ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, -+ 0, dev_priv->vm_end, -+ NV_DMA_ACCESS_RW, -+ NV_DMA_TARGET_AGP, &tt); -+ if (ret) { -+ NV_ERROR(dev, "Error creating VRAM ctxdma: %d\n", ret); -+ return ret; -+ } - } else - if (dev_priv->gart_info.type != NOUVEAU_GART_NONE) { - ret = nouveau_gpuobj_gart_dma_new(chan, 0, -@@ -1056,9 +875,10 @@ - return ret; - } - -- ret = nouveau_gpuobj_ref_add(dev, chan, tt_h, tt, NULL); -+ ret = nouveau_ramht_insert(chan, tt_h, tt); -+ nouveau_gpuobj_ref(NULL, &tt); - if (ret) { -- NV_ERROR(dev, "Error referencing TT ctxdma: %d\n", ret); -+ NV_ERROR(dev, "Error adding TT ctxdma to RAMHT: %d\n", ret); - return ret; - } - -@@ -1070,33 +890,23 @@ - { - struct drm_nouveau_private *dev_priv = chan->dev->dev_private; - struct drm_device *dev = chan->dev; -- struct list_head *entry, *tmp; -- struct nouveau_gpuobj_ref *ref; - int i; - - NV_DEBUG(dev, "ch%d\n", chan->id); - -- if (!chan->ramht_refs.next) -+ if (!chan->ramht) - return; - -- list_for_each_safe(entry, tmp, &chan->ramht_refs) { -- ref = list_entry(entry, struct nouveau_gpuobj_ref, list); -- -- nouveau_gpuobj_ref_del(dev, &ref); -- } -- -- nouveau_gpuobj_ref_del(dev, &chan->ramht); -+ nouveau_ramht_ref(NULL, &chan->ramht, chan); - -- nouveau_gpuobj_del(dev, &chan->vm_pd); -- nouveau_gpuobj_ref_del(dev, &chan->vm_gart_pt); -+ nouveau_gpuobj_ref(NULL, &chan->vm_pd); -+ nouveau_gpuobj_ref(NULL, &chan->vm_gart_pt); - for (i = 0; i < dev_priv->vm_vram_pt_nr; i++) -- nouveau_gpuobj_ref_del(dev, &chan->vm_vram_pt[i]); -+ nouveau_gpuobj_ref(NULL, &chan->vm_vram_pt[i]); - - if (chan->ramin_heap.free_stack.next) - drm_mm_takedown(&chan->ramin_heap); -- if (chan->ramin) -- nouveau_gpuobj_ref_del(dev, &chan->ramin); -- -+ nouveau_gpuobj_ref(NULL, &chan->ramin); - } - - int -@@ -1117,17 +927,17 @@ - } - - list_for_each_entry(gpuobj, &dev_priv->gpuobj_list, list) { -- if (!gpuobj->im_backing || (gpuobj->flags & NVOBJ_FLAG_FAKE)) -+ if (!gpuobj->im_backing) - continue; - -- gpuobj->im_backing_suspend = vmalloc(gpuobj->im_pramin->size); -+ gpuobj->im_backing_suspend = vmalloc(gpuobj->size); - if (!gpuobj->im_backing_suspend) { - nouveau_gpuobj_resume(dev); - return -ENOMEM; - } - -- for (i = 0; i < gpuobj->im_pramin->size / 4; i++) -- gpuobj->im_backing_suspend[i] = nv_ro32(dev, gpuobj, i); -+ for (i = 0; i < gpuobj->size; i += 4) -+ gpuobj->im_backing_suspend[i/4] = nv_ro32(gpuobj, i); - } - - return 0; -@@ -1172,8 +982,8 @@ - if (!gpuobj->im_backing_suspend) - continue; - -- for (i = 0; i < gpuobj->im_pramin->size / 4; i++) -- nv_wo32(dev, gpuobj, i, gpuobj->im_backing_suspend[i]); -+ for (i = 0; i < gpuobj->size; i += 4) -+ nv_wo32(gpuobj, i, gpuobj->im_backing_suspend[i/4]); - dev_priv->engine.instmem.flush(dev); - } - -@@ -1183,70 +993,101 @@ - int nouveau_ioctl_grobj_alloc(struct drm_device *dev, void *data, - struct drm_file *file_priv) - { -- struct drm_nouveau_private *dev_priv = dev->dev_private; - struct drm_nouveau_grobj_alloc *init = data; -- struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; -- struct nouveau_pgraph_object_class *grc; - struct nouveau_gpuobj *gr = NULL; - struct nouveau_channel *chan; - int ret; - -- NOUVEAU_GET_USER_CHANNEL_WITH_RETURN(init->channel, file_priv, chan); -- - if (init->handle == ~0) - return -EINVAL; - -- grc = pgraph->grclass; -- while (grc->id) { -- if (grc->id == init->class) -- break; -- grc++; -- } -+ chan = nouveau_channel_get(dev, file_priv, init->channel); -+ if (IS_ERR(chan)) -+ return PTR_ERR(chan); - -- if (!grc->id) { -- NV_ERROR(dev, "Illegal object class: 0x%x\n", init->class); -- return -EPERM; -+ if (nouveau_ramht_find(chan, init->handle)) { -+ ret = -EEXIST; -+ goto out; - } - -- if (nouveau_gpuobj_ref_find(chan, init->handle, NULL) == 0) -- return -EEXIST; -- -- if (!grc->software) -- ret = nouveau_gpuobj_gr_new(chan, grc->id, &gr); -- else -- ret = nouveau_gpuobj_sw_new(chan, grc->id, &gr); -- -+ ret = nouveau_gpuobj_gr_new(chan, init->class, &gr); - if (ret) { - NV_ERROR(dev, "Error creating object: %d (%d/0x%08x)\n", - ret, init->channel, init->handle); -- return ret; -+ goto out; - } - -- ret = nouveau_gpuobj_ref_add(dev, chan, init->handle, gr, NULL); -+ ret = nouveau_ramht_insert(chan, init->handle, gr); -+ nouveau_gpuobj_ref(NULL, &gr); - if (ret) { - NV_ERROR(dev, "Error referencing object: %d (%d/0x%08x)\n", - ret, init->channel, init->handle); -- nouveau_gpuobj_del(dev, &gr); -- return ret; - } - -- return 0; -+out: -+ nouveau_channel_put(&chan); -+ return ret; - } - - int nouveau_ioctl_gpuobj_free(struct drm_device *dev, void *data, - struct drm_file *file_priv) - { - struct drm_nouveau_gpuobj_free *objfree = data; -- struct nouveau_gpuobj_ref *ref; - struct nouveau_channel *chan; - int ret; - -- NOUVEAU_GET_USER_CHANNEL_WITH_RETURN(objfree->channel, file_priv, chan); -+ chan = nouveau_channel_get(dev, file_priv, objfree->channel); -+ if (IS_ERR(chan)) -+ return PTR_ERR(chan); - -- ret = nouveau_gpuobj_ref_find(chan, objfree->handle, &ref); -- if (ret) -- return ret; -- nouveau_gpuobj_ref_del(dev, &ref); -+ ret = nouveau_ramht_remove(chan, objfree->handle); -+ nouveau_channel_put(&chan); -+ return ret; -+} - -- return 0; -+u32 -+nv_ro32(struct nouveau_gpuobj *gpuobj, u32 offset) -+{ -+ struct drm_nouveau_private *dev_priv = gpuobj->dev->dev_private; -+ struct drm_device *dev = gpuobj->dev; -+ -+ if (gpuobj->pinst == ~0 || !dev_priv->ramin_available) { -+ u64 ptr = gpuobj->vinst + offset; -+ u32 base = ptr >> 16; -+ u32 val; -+ -+ spin_lock(&dev_priv->ramin_lock); -+ if (dev_priv->ramin_base != base) { -+ dev_priv->ramin_base = base; -+ nv_wr32(dev, 0x001700, dev_priv->ramin_base); -+ } -+ val = nv_rd32(dev, 0x700000 + (ptr & 0xffff)); -+ spin_unlock(&dev_priv->ramin_lock); -+ return val; -+ } -+ -+ return nv_ri32(dev, gpuobj->pinst + offset); -+} -+ -+void -+nv_wo32(struct nouveau_gpuobj *gpuobj, u32 offset, u32 val) -+{ -+ struct drm_nouveau_private *dev_priv = gpuobj->dev->dev_private; -+ struct drm_device *dev = gpuobj->dev; -+ -+ if (gpuobj->pinst == ~0 || !dev_priv->ramin_available) { -+ u64 ptr = gpuobj->vinst + offset; -+ u32 base = ptr >> 16; -+ -+ spin_lock(&dev_priv->ramin_lock); -+ if (dev_priv->ramin_base != base) { -+ dev_priv->ramin_base = base; -+ nv_wr32(dev, 0x001700, dev_priv->ramin_base); -+ } -+ nv_wr32(dev, 0x700000 + (ptr & 0xffff), val); -+ spin_unlock(&dev_priv->ramin_lock); -+ return; -+ } -+ -+ nv_wi32(dev, gpuobj->pinst + offset, val); - } -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_perf.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_perf.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_perf.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_perf.c 2010-11-05 00:40:00.000000000 +0100 -@@ -0,0 +1,205 @@ -+/* -+ * Copyright 2010 Red Hat Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining a -+ * copy of this software and associated documentation files (the "Software"), -+ * to deal in the Software without restriction, including without limitation -+ * the rights to use, copy, modify, merge, publish, distribute, sublicense, -+ * and/or sell copies of the Software, and to permit persons to whom the -+ * Software is furnished to do so, subject to the following conditions: -+ * -+ * The above copyright notice and this permission notice shall be included in -+ * all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR -+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -+ * OTHER DEALINGS IN THE SOFTWARE. -+ * -+ * Authors: Ben Skeggs -+ */ -+ -+#include "drmP.h" -+ -+#include "nouveau_drv.h" -+#include "nouveau_pm.h" -+ -+static void -+legacy_perf_init(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nvbios *bios = &dev_priv->vbios; -+ struct nouveau_pm_engine *pm = &dev_priv->engine.pm; -+ char *perf, *entry, *bmp = &bios->data[bios->offset]; -+ int headerlen, use_straps; -+ -+ if (bmp[5] < 0x5 || bmp[6] < 0x14) { -+ NV_DEBUG(dev, "BMP version too old for perf\n"); -+ return; -+ } -+ -+ perf = ROMPTR(bios, bmp[0x73]); -+ if (!perf) { -+ NV_DEBUG(dev, "No memclock table pointer found.\n"); -+ return; -+ } -+ -+ switch (perf[0]) { -+ case 0x12: -+ case 0x14: -+ case 0x18: -+ use_straps = 0; -+ headerlen = 1; -+ break; -+ case 0x01: -+ use_straps = perf[1] & 1; -+ headerlen = (use_straps ? 8 : 2); -+ break; -+ default: -+ NV_WARN(dev, "Unknown memclock table version %x.\n", perf[0]); -+ return; -+ } -+ -+ entry = perf + headerlen; -+ if (use_straps) -+ entry += (nv_rd32(dev, NV_PEXTDEV_BOOT_0) & 0x3c) >> 1; -+ -+ sprintf(pm->perflvl[0].name, "performance_level_0"); -+ pm->perflvl[0].memory = ROM16(entry[0]) * 20; -+ pm->nr_perflvl = 1; -+} -+ -+void -+nouveau_perf_init(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_engine *pm = &dev_priv->engine.pm; -+ struct nvbios *bios = &dev_priv->vbios; -+ struct bit_entry P; -+ u8 version, headerlen, recordlen, entries; -+ u8 *perf, *entry; -+ int vid, i; -+ -+ if (bios->type == NVBIOS_BIT) { -+ if (bit_table(dev, 'P', &P)) -+ return; -+ -+ if (P.version != 1 && P.version != 2) { -+ NV_WARN(dev, "unknown perf for BIT P %d\n", P.version); -+ return; -+ } -+ -+ perf = ROMPTR(bios, P.data[0]); -+ version = perf[0]; -+ headerlen = perf[1]; -+ if (version < 0x40) { -+ recordlen = perf[3] + (perf[4] * perf[5]); -+ entries = perf[2]; -+ } else { -+ recordlen = perf[2] + (perf[3] * perf[4]); -+ entries = perf[5]; -+ } -+ } else { -+ if (bios->data[bios->offset + 6] < 0x25) { -+ legacy_perf_init(dev); -+ return; -+ } -+ -+ perf = ROMPTR(bios, bios->data[bios->offset + 0x94]); -+ if (!perf) { -+ NV_DEBUG(dev, "perf table pointer invalid\n"); -+ return; -+ } -+ -+ version = perf[1]; -+ headerlen = perf[0]; -+ recordlen = perf[3]; -+ entries = perf[2]; -+ } -+ -+ entry = perf + headerlen; -+ for (i = 0; i < entries; i++) { -+ struct nouveau_pm_level *perflvl = &pm->perflvl[pm->nr_perflvl]; -+ -+ if (entry[0] == 0xff) { -+ entry += recordlen; -+ continue; -+ } -+ -+ switch (version) { -+ case 0x12: -+ case 0x13: -+ case 0x15: -+ perflvl->fanspeed = entry[55]; -+ perflvl->voltage = entry[56]; -+ perflvl->core = ROM32(entry[1]) * 10; -+ perflvl->memory = ROM32(entry[5]) * 20; -+ break; -+ case 0x21: -+ case 0x23: -+ case 0x24: -+ perflvl->fanspeed = entry[4]; -+ perflvl->voltage = entry[5]; -+ perflvl->core = ROM16(entry[6]) * 1000; -+ -+ if (dev_priv->chipset == 0x49 || -+ dev_priv->chipset == 0x4b) -+ perflvl->memory = ROM16(entry[11]) * 1000; -+ else -+ perflvl->memory = ROM16(entry[11]) * 2000; -+ -+ break; -+ case 0x25: -+ perflvl->fanspeed = entry[4]; -+ perflvl->voltage = entry[5]; -+ perflvl->core = ROM16(entry[6]) * 1000; -+ perflvl->shader = ROM16(entry[10]) * 1000; -+ perflvl->memory = ROM16(entry[12]) * 1000; -+ break; -+ case 0x30: -+ perflvl->memscript = ROM16(entry[2]); -+ case 0x35: -+ perflvl->fanspeed = entry[6]; -+ perflvl->voltage = entry[7]; -+ perflvl->core = ROM16(entry[8]) * 1000; -+ perflvl->shader = ROM16(entry[10]) * 1000; -+ perflvl->memory = ROM16(entry[12]) * 1000; -+ /*XXX: confirm on 0x35 */ -+ perflvl->unk05 = ROM16(entry[16]) * 1000; -+ break; -+ case 0x40: -+#define subent(n) entry[perf[2] + ((n) * perf[3])] -+ perflvl->fanspeed = 0; /*XXX*/ -+ perflvl->voltage = entry[2]; -+ perflvl->core = (ROM16(subent(0)) & 0xfff) * 1000; -+ perflvl->shader = (ROM16(subent(1)) & 0xfff) * 1000; -+ perflvl->memory = (ROM16(subent(2)) & 0xfff) * 1000; -+ break; -+ } -+ -+ /* make sure vid is valid */ -+ if (pm->voltage.supported && perflvl->voltage) { -+ vid = nouveau_volt_vid_lookup(dev, perflvl->voltage); -+ if (vid < 0) { -+ NV_DEBUG(dev, "drop perflvl %d, bad vid\n", i); -+ entry += recordlen; -+ continue; -+ } -+ } -+ -+ snprintf(perflvl->name, sizeof(perflvl->name), -+ "performance_level_%d", i); -+ perflvl->id = i; -+ pm->nr_perflvl++; -+ -+ entry += recordlen; -+ } -+} -+ -+void -+nouveau_perf_fini(struct drm_device *dev) -+{ -+} -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_pm.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_pm.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_pm.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_pm.c 2010-11-05 00:40:00.000000000 +0100 -@@ -0,0 +1,553 @@ -+/* -+ * Copyright 2010 Red Hat Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining a -+ * copy of this software and associated documentation files (the "Software"), -+ * to deal in the Software without restriction, including without limitation -+ * the rights to use, copy, modify, merge, publish, distribute, sublicense, -+ * and/or sell copies of the Software, and to permit persons to whom the -+ * Software is furnished to do so, subject to the following conditions: -+ * -+ * The above copyright notice and this permission notice shall be included in -+ * all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR -+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -+ * OTHER DEALINGS IN THE SOFTWARE. -+ * -+ * Authors: Ben Skeggs -+ */ -+ -+#include "drmP.h" -+ -+#include "nouveau_drv.h" -+#include "nouveau_pm.h" -+ -+#ifdef CONFIG_ACPI -+#include -+#endif -+#include -+#include -+#include -+ -+static int -+nouveau_pm_clock_set(struct drm_device *dev, struct nouveau_pm_level *perflvl, -+ u8 id, u32 khz) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_engine *pm = &dev_priv->engine.pm; -+ void *pre_state; -+ -+ if (khz == 0) -+ return 0; -+ -+ pre_state = pm->clock_pre(dev, perflvl, id, khz); -+ if (IS_ERR(pre_state)) -+ return PTR_ERR(pre_state); -+ -+ if (pre_state) -+ pm->clock_set(dev, pre_state); -+ return 0; -+} -+ -+static int -+nouveau_pm_perflvl_set(struct drm_device *dev, struct nouveau_pm_level *perflvl) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_engine *pm = &dev_priv->engine.pm; -+ int ret; -+ -+ if (perflvl == pm->cur) -+ return 0; -+ -+ if (pm->voltage.supported && pm->voltage_set && perflvl->voltage) { -+ ret = pm->voltage_set(dev, perflvl->voltage); -+ if (ret) { -+ NV_ERROR(dev, "voltage_set %d failed: %d\n", -+ perflvl->voltage, ret); -+ } -+ } -+ -+ nouveau_pm_clock_set(dev, perflvl, PLL_CORE, perflvl->core); -+ nouveau_pm_clock_set(dev, perflvl, PLL_SHADER, perflvl->shader); -+ nouveau_pm_clock_set(dev, perflvl, PLL_MEMORY, perflvl->memory); -+ nouveau_pm_clock_set(dev, perflvl, PLL_UNK05, perflvl->unk05); -+ -+ pm->cur = perflvl; -+ return 0; -+} -+ -+static int -+nouveau_pm_profile_set(struct drm_device *dev, const char *profile) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_engine *pm = &dev_priv->engine.pm; -+ struct nouveau_pm_level *perflvl = NULL; -+ -+ /* safety precaution, for now */ -+ if (nouveau_perflvl_wr != 7777) -+ return -EPERM; -+ -+ if (!pm->clock_set) -+ return -EINVAL; -+ -+ if (!strncmp(profile, "boot", 4)) -+ perflvl = &pm->boot; -+ else { -+ int pl = simple_strtol(profile, NULL, 10); -+ int i; -+ -+ for (i = 0; i < pm->nr_perflvl; i++) { -+ if (pm->perflvl[i].id == pl) { -+ perflvl = &pm->perflvl[i]; -+ break; -+ } -+ } -+ -+ if (!perflvl) -+ return -EINVAL; -+ } -+ -+ NV_INFO(dev, "setting performance level: %s\n", profile); -+ return nouveau_pm_perflvl_set(dev, perflvl); -+} -+ -+static int -+nouveau_pm_perflvl_get(struct drm_device *dev, struct nouveau_pm_level *perflvl) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_engine *pm = &dev_priv->engine.pm; -+ int ret; -+ -+ if (!pm->clock_get) -+ return -EINVAL; -+ -+ memset(perflvl, 0, sizeof(*perflvl)); -+ -+ ret = pm->clock_get(dev, PLL_CORE); -+ if (ret > 0) -+ perflvl->core = ret; -+ -+ ret = pm->clock_get(dev, PLL_MEMORY); -+ if (ret > 0) -+ perflvl->memory = ret; -+ -+ ret = pm->clock_get(dev, PLL_SHADER); -+ if (ret > 0) -+ perflvl->shader = ret; -+ -+ ret = pm->clock_get(dev, PLL_UNK05); -+ if (ret > 0) -+ perflvl->unk05 = ret; -+ -+ if (pm->voltage.supported && pm->voltage_get) { -+ ret = pm->voltage_get(dev); -+ if (ret > 0) -+ perflvl->voltage = ret; -+ } -+ -+ return 0; -+} -+ -+static void -+nouveau_pm_perflvl_info(struct nouveau_pm_level *perflvl, char *ptr, int len) -+{ -+ char c[16], s[16], v[16], f[16]; -+ -+ c[0] = '\0'; -+ if (perflvl->core) -+ snprintf(c, sizeof(c), " core %dMHz", perflvl->core / 1000); -+ -+ s[0] = '\0'; -+ if (perflvl->shader) -+ snprintf(s, sizeof(s), " shader %dMHz", perflvl->shader / 1000); -+ -+ v[0] = '\0'; -+ if (perflvl->voltage) -+ snprintf(v, sizeof(v), " voltage %dmV", perflvl->voltage * 10); -+ -+ f[0] = '\0'; -+ if (perflvl->fanspeed) -+ snprintf(f, sizeof(f), " fanspeed %d%%", perflvl->fanspeed); -+ -+ snprintf(ptr, len, "memory %dMHz%s%s%s%s\n", perflvl->memory / 1000, -+ c, s, v, f); -+} -+ -+static ssize_t -+nouveau_pm_get_perflvl_info(struct device *d, -+ struct device_attribute *a, char *buf) -+{ -+ struct nouveau_pm_level *perflvl = (struct nouveau_pm_level *)a; -+ char *ptr = buf; -+ int len = PAGE_SIZE; -+ -+ snprintf(ptr, len, "%d: ", perflvl->id); -+ ptr += strlen(buf); -+ len -= strlen(buf); -+ -+ nouveau_pm_perflvl_info(perflvl, ptr, len); -+ return strlen(buf); -+} -+ -+static ssize_t -+nouveau_pm_get_perflvl(struct device *d, struct device_attribute *a, char *buf) -+{ -+ struct drm_device *dev = pci_get_drvdata(to_pci_dev(d)); -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_engine *pm = &dev_priv->engine.pm; -+ struct nouveau_pm_level cur; -+ int len = PAGE_SIZE, ret; -+ char *ptr = buf; -+ -+ if (!pm->cur) -+ snprintf(ptr, len, "setting: boot\n"); -+ else if (pm->cur == &pm->boot) -+ snprintf(ptr, len, "setting: boot\nc: "); -+ else -+ snprintf(ptr, len, "setting: static %d\nc: ", pm->cur->id); -+ ptr += strlen(buf); -+ len -= strlen(buf); -+ -+ ret = nouveau_pm_perflvl_get(dev, &cur); -+ if (ret == 0) -+ nouveau_pm_perflvl_info(&cur, ptr, len); -+ return strlen(buf); -+} -+ -+static ssize_t -+nouveau_pm_set_perflvl(struct device *d, struct device_attribute *a, -+ const char *buf, size_t count) -+{ -+ struct drm_device *dev = pci_get_drvdata(to_pci_dev(d)); -+ int ret; -+ -+ ret = nouveau_pm_profile_set(dev, buf); -+ if (ret) -+ return ret; -+ return strlen(buf); -+} -+ -+static DEVICE_ATTR(performance_level, S_IRUGO | S_IWUSR, -+ nouveau_pm_get_perflvl, nouveau_pm_set_perflvl); -+ -+static int -+nouveau_sysfs_init(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_engine *pm = &dev_priv->engine.pm; -+ struct device *d = &dev->pdev->dev; -+ int ret, i; -+ -+ ret = device_create_file(d, &dev_attr_performance_level); -+ if (ret) -+ return ret; -+ -+ for (i = 0; i < pm->nr_perflvl; i++) { -+ struct nouveau_pm_level *perflvl = &pm->perflvl[i]; -+ -+ perflvl->dev_attr.attr.name = perflvl->name; -+ perflvl->dev_attr.attr.mode = S_IRUGO; -+ perflvl->dev_attr.show = nouveau_pm_get_perflvl_info; -+ perflvl->dev_attr.store = NULL; -+ sysfs_attr_init(&perflvl->dev_attr.attr); -+ -+ ret = device_create_file(d, &perflvl->dev_attr); -+ if (ret) { -+ NV_ERROR(dev, "failed pervlvl %d sysfs: %d\n", -+ perflvl->id, i); -+ perflvl->dev_attr.attr.name = NULL; -+ nouveau_pm_fini(dev); -+ return ret; -+ } -+ } -+ -+ return 0; -+} -+ -+static void -+nouveau_sysfs_fini(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_engine *pm = &dev_priv->engine.pm; -+ struct device *d = &dev->pdev->dev; -+ int i; -+ -+ device_remove_file(d, &dev_attr_performance_level); -+ for (i = 0; i < pm->nr_perflvl; i++) { -+ struct nouveau_pm_level *pl = &pm->perflvl[i]; -+ -+ if (!pl->dev_attr.attr.name) -+ break; -+ -+ device_remove_file(d, &pl->dev_attr); -+ } -+} -+ -+#ifdef CONFIG_HWMON -+static ssize_t -+nouveau_hwmon_show_temp(struct device *d, struct device_attribute *a, char *buf) -+{ -+ struct drm_device *dev = dev_get_drvdata(d); -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_engine *pm = &dev_priv->engine.pm; -+ -+ return snprintf(buf, PAGE_SIZE, "%d\n", pm->temp_get(dev)*1000); -+} -+static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, nouveau_hwmon_show_temp, -+ NULL, 0); -+ -+static ssize_t -+nouveau_hwmon_max_temp(struct device *d, struct device_attribute *a, char *buf) -+{ -+ struct drm_device *dev = dev_get_drvdata(d); -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_engine *pm = &dev_priv->engine.pm; -+ struct nouveau_pm_threshold_temp *temp = &pm->threshold_temp; -+ -+ return snprintf(buf, PAGE_SIZE, "%d\n", temp->down_clock*1000); -+} -+static ssize_t -+nouveau_hwmon_set_max_temp(struct device *d, struct device_attribute *a, -+ const char *buf, size_t count) -+{ -+ struct drm_device *dev = dev_get_drvdata(d); -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_engine *pm = &dev_priv->engine.pm; -+ struct nouveau_pm_threshold_temp *temp = &pm->threshold_temp; -+ long value; -+ -+ if (strict_strtol(buf, 10, &value) == -EINVAL) -+ return count; -+ -+ temp->down_clock = value/1000; -+ -+ nouveau_temp_safety_checks(dev); -+ -+ return count; -+} -+static SENSOR_DEVICE_ATTR(temp1_max, S_IRUGO | S_IWUSR, nouveau_hwmon_max_temp, -+ nouveau_hwmon_set_max_temp, -+ 0); -+ -+static ssize_t -+nouveau_hwmon_critical_temp(struct device *d, struct device_attribute *a, -+ char *buf) -+{ -+ struct drm_device *dev = dev_get_drvdata(d); -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_engine *pm = &dev_priv->engine.pm; -+ struct nouveau_pm_threshold_temp *temp = &pm->threshold_temp; -+ -+ return snprintf(buf, PAGE_SIZE, "%d\n", temp->critical*1000); -+} -+static ssize_t -+nouveau_hwmon_set_critical_temp(struct device *d, struct device_attribute *a, -+ const char *buf, -+ size_t count) -+{ -+ struct drm_device *dev = dev_get_drvdata(d); -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_engine *pm = &dev_priv->engine.pm; -+ struct nouveau_pm_threshold_temp *temp = &pm->threshold_temp; -+ long value; -+ -+ if (strict_strtol(buf, 10, &value) == -EINVAL) -+ return count; -+ -+ temp->critical = value/1000; -+ -+ nouveau_temp_safety_checks(dev); -+ -+ return count; -+} -+static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO | S_IWUSR, -+ nouveau_hwmon_critical_temp, -+ nouveau_hwmon_set_critical_temp, -+ 0); -+ -+static ssize_t nouveau_hwmon_show_name(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ return sprintf(buf, "nouveau\n"); -+} -+static SENSOR_DEVICE_ATTR(name, S_IRUGO, nouveau_hwmon_show_name, NULL, 0); -+ -+static ssize_t nouveau_hwmon_show_update_rate(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ return sprintf(buf, "1000\n"); -+} -+static SENSOR_DEVICE_ATTR(update_rate, S_IRUGO, -+ nouveau_hwmon_show_update_rate, -+ NULL, 0); -+ -+static struct attribute *hwmon_attributes[] = { -+ &sensor_dev_attr_temp1_input.dev_attr.attr, -+ &sensor_dev_attr_temp1_max.dev_attr.attr, -+ &sensor_dev_attr_temp1_crit.dev_attr.attr, -+ &sensor_dev_attr_name.dev_attr.attr, -+ &sensor_dev_attr_update_rate.dev_attr.attr, -+ NULL -+}; -+ -+static const struct attribute_group hwmon_attrgroup = { -+ .attrs = hwmon_attributes, -+}; -+#endif -+ -+static int -+nouveau_hwmon_init(struct drm_device *dev) -+{ -+#ifdef CONFIG_HWMON -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_engine *pm = &dev_priv->engine.pm; -+ struct device *hwmon_dev; -+ int ret; -+ -+ if (!pm->temp_get) -+ return -ENODEV; -+ -+ hwmon_dev = hwmon_device_register(&dev->pdev->dev); -+ if (IS_ERR(hwmon_dev)) { -+ ret = PTR_ERR(hwmon_dev); -+ NV_ERROR(dev, -+ "Unable to register hwmon device: %d\n", ret); -+ return ret; -+ } -+ dev_set_drvdata(hwmon_dev, dev); -+ ret = sysfs_create_group(&hwmon_dev->kobj, -+ &hwmon_attrgroup); -+ if (ret) { -+ NV_ERROR(dev, -+ "Unable to create hwmon sysfs file: %d\n", ret); -+ hwmon_device_unregister(hwmon_dev); -+ return ret; -+ } -+ -+ pm->hwmon = hwmon_dev; -+#endif -+ return 0; -+} -+ -+static void -+nouveau_hwmon_fini(struct drm_device *dev) -+{ -+#ifdef CONFIG_HWMON -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_engine *pm = &dev_priv->engine.pm; -+ -+ if (pm->hwmon) { -+ sysfs_remove_group(&pm->hwmon->kobj, &hwmon_attrgroup); -+ hwmon_device_unregister(pm->hwmon); -+ } -+#endif -+} -+ -+#ifdef CONFIG_ACPI -+static int -+nouveau_pm_acpi_event(struct notifier_block *nb, unsigned long val, void *data) -+{ -+ struct drm_nouveau_private *dev_priv = -+ container_of(nb, struct drm_nouveau_private, engine.pm.acpi_nb); -+ struct drm_device *dev = dev_priv->dev; -+ struct acpi_bus_event *entry = (struct acpi_bus_event *)data; -+ -+ if (strcmp(entry->device_class, "ac_adapter") == 0) { -+ bool ac = power_supply_is_system_supplied(); -+ -+ NV_DEBUG(dev, "power supply changed: %s\n", ac ? "AC" : "DC"); -+ } -+ -+ return NOTIFY_OK; -+} -+#endif -+ -+int -+nouveau_pm_init(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_engine *pm = &dev_priv->engine.pm; -+ char info[256]; -+ int ret, i; -+ -+ nouveau_volt_init(dev); -+ nouveau_perf_init(dev); -+ nouveau_temp_init(dev); -+ nouveau_mem_timing_init(dev); -+ -+ NV_INFO(dev, "%d available performance level(s)\n", pm->nr_perflvl); -+ for (i = 0; i < pm->nr_perflvl; i++) { -+ nouveau_pm_perflvl_info(&pm->perflvl[i], info, sizeof(info)); -+ NV_INFO(dev, "%d: %s", pm->perflvl[i].id, info); -+ } -+ -+ /* determine current ("boot") performance level */ -+ ret = nouveau_pm_perflvl_get(dev, &pm->boot); -+ if (ret == 0) { -+ pm->cur = &pm->boot; -+ -+ nouveau_pm_perflvl_info(&pm->boot, info, sizeof(info)); -+ NV_INFO(dev, "c: %s", info); -+ } -+ -+ /* switch performance levels now if requested */ -+ if (nouveau_perflvl != NULL) { -+ ret = nouveau_pm_profile_set(dev, nouveau_perflvl); -+ if (ret) { -+ NV_ERROR(dev, "error setting perflvl \"%s\": %d\n", -+ nouveau_perflvl, ret); -+ } -+ } -+ -+ nouveau_sysfs_init(dev); -+ nouveau_hwmon_init(dev); -+#ifdef CONFIG_ACPI -+ pm->acpi_nb.notifier_call = nouveau_pm_acpi_event; -+ register_acpi_notifier(&pm->acpi_nb); -+#endif -+ -+ return 0; -+} -+ -+void -+nouveau_pm_fini(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_engine *pm = &dev_priv->engine.pm; -+ -+ if (pm->cur != &pm->boot) -+ nouveau_pm_perflvl_set(dev, &pm->boot); -+ -+ nouveau_mem_timing_fini(dev); -+ nouveau_temp_fini(dev); -+ nouveau_perf_fini(dev); -+ nouveau_volt_fini(dev); -+ -+#ifdef CONFIG_ACPI -+ unregister_acpi_notifier(&pm->acpi_nb); -+#endif -+ nouveau_hwmon_fini(dev); -+ nouveau_sysfs_fini(dev); -+} -+ -+void -+nouveau_pm_resume(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_engine *pm = &dev_priv->engine.pm; -+ struct nouveau_pm_level *perflvl; -+ -+ if (pm->cur == &pm->boot) -+ return; -+ -+ perflvl = pm->cur; -+ pm->cur = &pm->boot; -+ nouveau_pm_perflvl_set(dev, perflvl); -+} -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_pm.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_pm.h ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_pm.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_pm.h 2010-11-05 00:40:00.000000000 +0100 -@@ -0,0 +1,74 @@ -+/* -+ * Copyright 2010 Red Hat Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining a -+ * copy of this software and associated documentation files (the "Software"), -+ * to deal in the Software without restriction, including without limitation -+ * the rights to use, copy, modify, merge, publish, distribute, sublicense, -+ * and/or sell copies of the Software, and to permit persons to whom the -+ * Software is furnished to do so, subject to the following conditions: -+ * -+ * The above copyright notice and this permission notice shall be included in -+ * all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR -+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -+ * OTHER DEALINGS IN THE SOFTWARE. -+ * -+ * Authors: Ben Skeggs -+ */ -+ -+#ifndef __NOUVEAU_PM_H__ -+#define __NOUVEAU_PM_H__ -+ -+/* nouveau_pm.c */ -+int nouveau_pm_init(struct drm_device *dev); -+void nouveau_pm_fini(struct drm_device *dev); -+void nouveau_pm_resume(struct drm_device *dev); -+ -+/* nouveau_volt.c */ -+void nouveau_volt_init(struct drm_device *); -+void nouveau_volt_fini(struct drm_device *); -+int nouveau_volt_vid_lookup(struct drm_device *, int voltage); -+int nouveau_volt_lvl_lookup(struct drm_device *, int vid); -+int nouveau_voltage_gpio_get(struct drm_device *); -+int nouveau_voltage_gpio_set(struct drm_device *, int voltage); -+ -+/* nouveau_perf.c */ -+void nouveau_perf_init(struct drm_device *); -+void nouveau_perf_fini(struct drm_device *); -+ -+/* nouveau_mem.c */ -+void nouveau_mem_timing_init(struct drm_device *); -+void nouveau_mem_timing_fini(struct drm_device *); -+ -+/* nv04_pm.c */ -+int nv04_pm_clock_get(struct drm_device *, u32 id); -+void *nv04_pm_clock_pre(struct drm_device *, struct nouveau_pm_level *, -+ u32 id, int khz); -+void nv04_pm_clock_set(struct drm_device *, void *); -+ -+/* nv50_pm.c */ -+int nv50_pm_clock_get(struct drm_device *, u32 id); -+void *nv50_pm_clock_pre(struct drm_device *, struct nouveau_pm_level *, -+ u32 id, int khz); -+void nv50_pm_clock_set(struct drm_device *, void *); -+ -+/* nva3_pm.c */ -+int nva3_pm_clock_get(struct drm_device *, u32 id); -+void *nva3_pm_clock_pre(struct drm_device *, struct nouveau_pm_level *, -+ u32 id, int khz); -+void nva3_pm_clock_set(struct drm_device *, void *); -+ -+/* nouveau_temp.c */ -+void nouveau_temp_init(struct drm_device *dev); -+void nouveau_temp_fini(struct drm_device *dev); -+void nouveau_temp_safety_checks(struct drm_device *dev); -+int nv40_temp_get(struct drm_device *dev); -+int nv84_temp_get(struct drm_device *dev); -+ -+#endif -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_ramht.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_ramht.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.c 2010-11-05 00:40:00.000000000 +0100 -@@ -0,0 +1,307 @@ -+/* -+ * Copyright 2010 Red Hat Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining a -+ * copy of this software and associated documentation files (the "Software"), -+ * to deal in the Software without restriction, including without limitation -+ * the rights to use, copy, modify, merge, publish, distribute, sublicense, -+ * and/or sell copies of the Software, and to permit persons to whom the -+ * Software is furnished to do so, subject to the following conditions: -+ * -+ * The above copyright notice and this permission notice shall be included in -+ * all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR -+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -+ * OTHER DEALINGS IN THE SOFTWARE. -+ * -+ * Authors: Ben Skeggs -+ */ -+ -+#include "drmP.h" -+ -+#include "nouveau_drv.h" -+#include "nouveau_ramht.h" -+ -+static u32 -+nouveau_ramht_hash_handle(struct nouveau_channel *chan, u32 handle) -+{ -+ struct drm_device *dev = chan->dev; -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_ramht *ramht = chan->ramht; -+ u32 hash = 0; -+ int i; -+ -+ NV_DEBUG(dev, "ch%d handle=0x%08x\n", chan->id, handle); -+ -+ for (i = 32; i > 0; i -= ramht->bits) { -+ hash ^= (handle & ((1 << ramht->bits) - 1)); -+ handle >>= ramht->bits; -+ } -+ -+ if (dev_priv->card_type < NV_50) -+ hash ^= chan->id << (ramht->bits - 4); -+ hash <<= 3; -+ -+ NV_DEBUG(dev, "hash=0x%08x\n", hash); -+ return hash; -+} -+ -+static int -+nouveau_ramht_entry_valid(struct drm_device *dev, struct nouveau_gpuobj *ramht, -+ u32 offset) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ u32 ctx = nv_ro32(ramht, offset + 4); -+ -+ if (dev_priv->card_type < NV_40) -+ return ((ctx & NV_RAMHT_CONTEXT_VALID) != 0); -+ return (ctx != 0); -+} -+ -+static int -+nouveau_ramht_entry_same_channel(struct nouveau_channel *chan, -+ struct nouveau_gpuobj *ramht, u32 offset) -+{ -+ struct drm_nouveau_private *dev_priv = chan->dev->dev_private; -+ u32 ctx = nv_ro32(ramht, offset + 4); -+ -+ if (dev_priv->card_type >= NV_50) -+ return true; -+ else if (dev_priv->card_type >= NV_40) -+ return chan->id == -+ ((ctx >> NV40_RAMHT_CONTEXT_CHANNEL_SHIFT) & 0x1f); -+ else -+ return chan->id == -+ ((ctx >> NV_RAMHT_CONTEXT_CHANNEL_SHIFT) & 0x1f); -+} -+ -+int -+nouveau_ramht_insert(struct nouveau_channel *chan, u32 handle, -+ struct nouveau_gpuobj *gpuobj) -+{ -+ struct drm_device *dev = chan->dev; -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_instmem_engine *instmem = &dev_priv->engine.instmem; -+ struct nouveau_ramht_entry *entry; -+ struct nouveau_gpuobj *ramht = chan->ramht->gpuobj; -+ unsigned long flags; -+ u32 ctx, co, ho; -+ -+ if (nouveau_ramht_find(chan, handle)) -+ return -EEXIST; -+ -+ entry = kmalloc(sizeof(*entry), GFP_KERNEL); -+ if (!entry) -+ return -ENOMEM; -+ entry->channel = chan; -+ entry->gpuobj = NULL; -+ entry->handle = handle; -+ nouveau_gpuobj_ref(gpuobj, &entry->gpuobj); -+ -+ if (dev_priv->card_type < NV_40) { -+ ctx = NV_RAMHT_CONTEXT_VALID | (gpuobj->cinst >> 4) | -+ (chan->id << NV_RAMHT_CONTEXT_CHANNEL_SHIFT) | -+ (gpuobj->engine << NV_RAMHT_CONTEXT_ENGINE_SHIFT); -+ } else -+ if (dev_priv->card_type < NV_50) { -+ ctx = (gpuobj->cinst >> 4) | -+ (chan->id << NV40_RAMHT_CONTEXT_CHANNEL_SHIFT) | -+ (gpuobj->engine << NV40_RAMHT_CONTEXT_ENGINE_SHIFT); -+ } else { -+ if (gpuobj->engine == NVOBJ_ENGINE_DISPLAY) { -+ ctx = (gpuobj->cinst << 10) | chan->id; -+ } else { -+ ctx = (gpuobj->cinst >> 4) | -+ ((gpuobj->engine << -+ NV40_RAMHT_CONTEXT_ENGINE_SHIFT)); -+ } -+ } -+ -+ spin_lock_irqsave(&chan->ramht->lock, flags); -+ list_add(&entry->head, &chan->ramht->entries); -+ -+ co = ho = nouveau_ramht_hash_handle(chan, handle); -+ do { -+ if (!nouveau_ramht_entry_valid(dev, ramht, co)) { -+ NV_DEBUG(dev, -+ "insert ch%d 0x%08x: h=0x%08x, c=0x%08x\n", -+ chan->id, co, handle, ctx); -+ nv_wo32(ramht, co + 0, handle); -+ nv_wo32(ramht, co + 4, ctx); -+ -+ spin_unlock_irqrestore(&chan->ramht->lock, flags); -+ instmem->flush(dev); -+ return 0; -+ } -+ NV_DEBUG(dev, "collision ch%d 0x%08x: h=0x%08x\n", -+ chan->id, co, nv_ro32(ramht, co)); -+ -+ co += 8; -+ if (co >= ramht->size) -+ co = 0; -+ } while (co != ho); -+ -+ NV_ERROR(dev, "RAMHT space exhausted. ch=%d\n", chan->id); -+ list_del(&entry->head); -+ spin_unlock_irqrestore(&chan->ramht->lock, flags); -+ kfree(entry); -+ return -ENOMEM; -+} -+ -+static struct nouveau_ramht_entry * -+nouveau_ramht_remove_entry(struct nouveau_channel *chan, u32 handle) -+{ -+ struct nouveau_ramht *ramht = chan ? chan->ramht : NULL; -+ struct nouveau_ramht_entry *entry; -+ unsigned long flags; -+ -+ if (!ramht) -+ return NULL; -+ -+ spin_lock_irqsave(&ramht->lock, flags); -+ list_for_each_entry(entry, &ramht->entries, head) { -+ if (entry->channel == chan && -+ (!handle || entry->handle == handle)) { -+ list_del(&entry->head); -+ spin_unlock_irqrestore(&ramht->lock, flags); -+ -+ return entry; -+ } -+ } -+ spin_unlock_irqrestore(&ramht->lock, flags); -+ -+ return NULL; -+} -+ -+static void -+nouveau_ramht_remove_hash(struct nouveau_channel *chan, u32 handle) -+{ -+ struct drm_device *dev = chan->dev; -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_instmem_engine *instmem = &dev_priv->engine.instmem; -+ struct nouveau_gpuobj *ramht = chan->ramht->gpuobj; -+ unsigned long flags; -+ u32 co, ho; -+ -+ spin_lock_irqsave(&chan->ramht->lock, flags); -+ co = ho = nouveau_ramht_hash_handle(chan, handle); -+ do { -+ if (nouveau_ramht_entry_valid(dev, ramht, co) && -+ nouveau_ramht_entry_same_channel(chan, ramht, co) && -+ (handle == nv_ro32(ramht, co))) { -+ NV_DEBUG(dev, -+ "remove ch%d 0x%08x: h=0x%08x, c=0x%08x\n", -+ chan->id, co, handle, nv_ro32(ramht, co + 4)); -+ nv_wo32(ramht, co + 0, 0x00000000); -+ nv_wo32(ramht, co + 4, 0x00000000); -+ instmem->flush(dev); -+ goto out; -+ } -+ -+ co += 8; -+ if (co >= ramht->size) -+ co = 0; -+ } while (co != ho); -+ -+ NV_ERROR(dev, "RAMHT entry not found. ch=%d, handle=0x%08x\n", -+ chan->id, handle); -+out: -+ spin_unlock_irqrestore(&chan->ramht->lock, flags); -+} -+ -+int -+nouveau_ramht_remove(struct nouveau_channel *chan, u32 handle) -+{ -+ struct nouveau_ramht_entry *entry; -+ -+ entry = nouveau_ramht_remove_entry(chan, handle); -+ if (!entry) -+ return -ENOENT; -+ -+ nouveau_ramht_remove_hash(chan, entry->handle); -+ nouveau_gpuobj_ref(NULL, &entry->gpuobj); -+ kfree(entry); -+ return 0; -+} -+ -+struct nouveau_gpuobj * -+nouveau_ramht_find(struct nouveau_channel *chan, u32 handle) -+{ -+ struct nouveau_ramht *ramht = chan->ramht; -+ struct nouveau_ramht_entry *entry; -+ struct nouveau_gpuobj *gpuobj = NULL; -+ unsigned long flags; -+ -+ if (unlikely(!chan->ramht)) -+ return NULL; -+ -+ spin_lock_irqsave(&ramht->lock, flags); -+ list_for_each_entry(entry, &chan->ramht->entries, head) { -+ if (entry->channel == chan && entry->handle == handle) { -+ gpuobj = entry->gpuobj; -+ break; -+ } -+ } -+ spin_unlock_irqrestore(&ramht->lock, flags); -+ -+ return gpuobj; -+} -+ -+int -+nouveau_ramht_new(struct drm_device *dev, struct nouveau_gpuobj *gpuobj, -+ struct nouveau_ramht **pramht) -+{ -+ struct nouveau_ramht *ramht; -+ -+ ramht = kzalloc(sizeof(*ramht), GFP_KERNEL); -+ if (!ramht) -+ return -ENOMEM; -+ -+ ramht->dev = dev; -+ kref_init(&ramht->refcount); -+ ramht->bits = drm_order(gpuobj->size / 8); -+ INIT_LIST_HEAD(&ramht->entries); -+ spin_lock_init(&ramht->lock); -+ nouveau_gpuobj_ref(gpuobj, &ramht->gpuobj); -+ -+ *pramht = ramht; -+ return 0; -+} -+ -+static void -+nouveau_ramht_del(struct kref *ref) -+{ -+ struct nouveau_ramht *ramht = -+ container_of(ref, struct nouveau_ramht, refcount); -+ -+ nouveau_gpuobj_ref(NULL, &ramht->gpuobj); -+ kfree(ramht); -+} -+ -+void -+nouveau_ramht_ref(struct nouveau_ramht *ref, struct nouveau_ramht **ptr, -+ struct nouveau_channel *chan) -+{ -+ struct nouveau_ramht_entry *entry; -+ struct nouveau_ramht *ramht; -+ -+ if (ref) -+ kref_get(&ref->refcount); -+ -+ ramht = *ptr; -+ if (ramht) { -+ while ((entry = nouveau_ramht_remove_entry(chan, 0))) { -+ nouveau_ramht_remove_hash(chan, entry->handle); -+ nouveau_gpuobj_ref(NULL, &entry->gpuobj); -+ kfree(entry); -+ } -+ -+ kref_put(&ramht->refcount, nouveau_ramht_del); -+ } -+ *ptr = ref; -+} -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_ramht.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.h ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_ramht.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.h 2010-11-05 00:40:00.000000000 +0100 -@@ -0,0 +1,55 @@ -+/* -+ * Copyright 2010 Red Hat Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining a -+ * copy of this software and associated documentation files (the "Software"), -+ * to deal in the Software without restriction, including without limitation -+ * the rights to use, copy, modify, merge, publish, distribute, sublicense, -+ * and/or sell copies of the Software, and to permit persons to whom the -+ * Software is furnished to do so, subject to the following conditions: -+ * -+ * The above copyright notice and this permission notice shall be included in -+ * all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR -+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -+ * OTHER DEALINGS IN THE SOFTWARE. -+ * -+ * Authors: Ben Skeggs -+ */ -+ -+#ifndef __NOUVEAU_RAMHT_H__ -+#define __NOUVEAU_RAMHT_H__ -+ -+struct nouveau_ramht_entry { -+ struct list_head head; -+ struct nouveau_channel *channel; -+ struct nouveau_gpuobj *gpuobj; -+ u32 handle; -+}; -+ -+struct nouveau_ramht { -+ struct drm_device *dev; -+ struct kref refcount; -+ spinlock_t lock; -+ struct nouveau_gpuobj *gpuobj; -+ struct list_head entries; -+ int bits; -+}; -+ -+extern int nouveau_ramht_new(struct drm_device *, struct nouveau_gpuobj *, -+ struct nouveau_ramht **); -+extern void nouveau_ramht_ref(struct nouveau_ramht *, struct nouveau_ramht **, -+ struct nouveau_channel *unref_channel); -+ -+extern int nouveau_ramht_insert(struct nouveau_channel *, u32 handle, -+ struct nouveau_gpuobj *); -+extern int nouveau_ramht_remove(struct nouveau_channel *, u32 handle); -+extern struct nouveau_gpuobj * -+nouveau_ramht_find(struct nouveau_channel *chan, u32 handle); -+ -+#endif -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_reg.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_reg.h ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_reg.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_reg.h 2010-11-05 00:40:00.000000000 +0100 -@@ -45,6 +45,11 @@ - # define NV04_PFB_REF_CMD_REFRESH (1 << 0) - #define NV04_PFB_PRE 0x001002d4 - # define NV04_PFB_PRE_CMD_PRECHARGE (1 << 0) -+#define NV20_PFB_ZCOMP(i) (0x00100300 + 4*(i)) -+# define NV20_PFB_ZCOMP_MODE_32 (4 << 24) -+# define NV20_PFB_ZCOMP_EN (1 << 31) -+# define NV25_PFB_ZCOMP_MODE_16 (1 << 20) -+# define NV25_PFB_ZCOMP_MODE_32 (2 << 20) - #define NV10_PFB_CLOSE_PAGE2 0x0010033c - #define NV04_PFB_SCRAMBLE(i) (0x00100400 + 4 * (i)) - #define NV40_PFB_TILE(i) (0x00100600 + (i*16)) -@@ -332,6 +337,7 @@ - #define NV04_PGRAPH_BSWIZZLE5 0x004006A0 - #define NV03_PGRAPH_STATUS 0x004006B0 - #define NV04_PGRAPH_STATUS 0x00400700 -+# define NV40_PGRAPH_STATUS_SYNC_STALL 0x00004000 - #define NV04_PGRAPH_TRAPPED_ADDR 0x00400704 - #define NV04_PGRAPH_TRAPPED_DATA 0x00400708 - #define NV04_PGRAPH_SURFACE 0x0040070C -@@ -378,6 +384,7 @@ - #define NV20_PGRAPH_TLIMIT(i) (0x00400904 + (i*16)) - #define NV20_PGRAPH_TSIZE(i) (0x00400908 + (i*16)) - #define NV20_PGRAPH_TSTATUS(i) (0x0040090C + (i*16)) -+#define NV20_PGRAPH_ZCOMP(i) (0x00400980 + 4*(i)) - #define NV10_PGRAPH_TILE(i) (0x00400B00 + (i*16)) - #define NV10_PGRAPH_TLIMIT(i) (0x00400B04 + (i*16)) - #define NV10_PGRAPH_TSIZE(i) (0x00400B08 + (i*16)) -@@ -551,6 +558,8 @@ - #define NV10_PFIFO_CACHE1_DMA_SUBROUTINE 0x0000324C - #define NV03_PFIFO_CACHE1_PULL0 0x00003240 - #define NV04_PFIFO_CACHE1_PULL0 0x00003250 -+# define NV04_PFIFO_CACHE1_PULL0_HASH_FAILED 0x00000010 -+# define NV04_PFIFO_CACHE1_PULL0_HASH_BUSY 0x00001000 - #define NV03_PFIFO_CACHE1_PULL1 0x00003250 - #define NV04_PFIFO_CACHE1_PULL1 0x00003254 - #define NV04_PFIFO_CACHE1_HASH 0x00003258 -@@ -712,31 +721,32 @@ - #define NV50_PDISPLAY_INTR_1_CLK_UNK10 0x00000010 - #define NV50_PDISPLAY_INTR_1_CLK_UNK20 0x00000020 - #define NV50_PDISPLAY_INTR_1_CLK_UNK40 0x00000040 --#define NV50_PDISPLAY_INTR_EN 0x0061002c --#define NV50_PDISPLAY_INTR_EN_VBLANK_CRTC 0x0000000c --#define NV50_PDISPLAY_INTR_EN_VBLANK_CRTC_(n) (1 << ((n) + 2)) --#define NV50_PDISPLAY_INTR_EN_VBLANK_CRTC_0 0x00000004 --#define NV50_PDISPLAY_INTR_EN_VBLANK_CRTC_1 0x00000008 --#define NV50_PDISPLAY_INTR_EN_CLK_UNK10 0x00000010 --#define NV50_PDISPLAY_INTR_EN_CLK_UNK20 0x00000020 --#define NV50_PDISPLAY_INTR_EN_CLK_UNK40 0x00000040 -+#define NV50_PDISPLAY_INTR_EN_0 0x00610028 -+#define NV50_PDISPLAY_INTR_EN_1 0x0061002c -+#define NV50_PDISPLAY_INTR_EN_1_VBLANK_CRTC 0x0000000c -+#define NV50_PDISPLAY_INTR_EN_1_VBLANK_CRTC_(n) (1 << ((n) + 2)) -+#define NV50_PDISPLAY_INTR_EN_1_VBLANK_CRTC_0 0x00000004 -+#define NV50_PDISPLAY_INTR_EN_1_VBLANK_CRTC_1 0x00000008 -+#define NV50_PDISPLAY_INTR_EN_1_CLK_UNK10 0x00000010 -+#define NV50_PDISPLAY_INTR_EN_1_CLK_UNK20 0x00000020 -+#define NV50_PDISPLAY_INTR_EN_1_CLK_UNK40 0x00000040 - #define NV50_PDISPLAY_UNK30_CTRL 0x00610030 - #define NV50_PDISPLAY_UNK30_CTRL_UPDATE_VCLK0 0x00000200 - #define NV50_PDISPLAY_UNK30_CTRL_UPDATE_VCLK1 0x00000400 - #define NV50_PDISPLAY_UNK30_CTRL_PENDING 0x80000000 --#define NV50_PDISPLAY_TRAPPED_ADDR 0x00610080 --#define NV50_PDISPLAY_TRAPPED_DATA 0x00610084 --#define NV50_PDISPLAY_CHANNEL_STAT(i) ((i) * 0x10 + 0x00610200) --#define NV50_PDISPLAY_CHANNEL_STAT_DMA 0x00000010 --#define NV50_PDISPLAY_CHANNEL_STAT_DMA_DISABLED 0x00000000 --#define NV50_PDISPLAY_CHANNEL_STAT_DMA_ENABLED 0x00000010 --#define NV50_PDISPLAY_CHANNEL_DMA_CB(i) ((i) * 0x10 + 0x00610204) --#define NV50_PDISPLAY_CHANNEL_DMA_CB_LOCATION 0x00000002 --#define NV50_PDISPLAY_CHANNEL_DMA_CB_LOCATION_VRAM 0x00000000 --#define NV50_PDISPLAY_CHANNEL_DMA_CB_LOCATION_SYSTEM 0x00000002 --#define NV50_PDISPLAY_CHANNEL_DMA_CB_VALID 0x00000001 --#define NV50_PDISPLAY_CHANNEL_UNK2(i) ((i) * 0x10 + 0x00610208) --#define NV50_PDISPLAY_CHANNEL_UNK3(i) ((i) * 0x10 + 0x0061020c) -+#define NV50_PDISPLAY_TRAPPED_ADDR(i) ((i) * 0x08 + 0x00610080) -+#define NV50_PDISPLAY_TRAPPED_DATA(i) ((i) * 0x08 + 0x00610084) -+#define NV50_PDISPLAY_EVO_CTRL(i) ((i) * 0x10 + 0x00610200) -+#define NV50_PDISPLAY_EVO_CTRL_DMA 0x00000010 -+#define NV50_PDISPLAY_EVO_CTRL_DMA_DISABLED 0x00000000 -+#define NV50_PDISPLAY_EVO_CTRL_DMA_ENABLED 0x00000010 -+#define NV50_PDISPLAY_EVO_DMA_CB(i) ((i) * 0x10 + 0x00610204) -+#define NV50_PDISPLAY_EVO_DMA_CB_LOCATION 0x00000002 -+#define NV50_PDISPLAY_EVO_DMA_CB_LOCATION_VRAM 0x00000000 -+#define NV50_PDISPLAY_EVO_DMA_CB_LOCATION_SYSTEM 0x00000002 -+#define NV50_PDISPLAY_EVO_DMA_CB_VALID 0x00000001 -+#define NV50_PDISPLAY_EVO_UNK2(i) ((i) * 0x10 + 0x00610208) -+#define NV50_PDISPLAY_EVO_HASH_TAG(i) ((i) * 0x10 + 0x0061020c) - - #define NV50_PDISPLAY_CURSOR 0x00610270 - #define NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(i) ((i) * 0x10 + 0x00610270) -@@ -744,15 +754,11 @@ - #define NV50_PDISPLAY_CURSOR_CURSOR_CTRL2_STATUS 0x00030000 - #define NV50_PDISPLAY_CURSOR_CURSOR_CTRL2_STATUS_ACTIVE 0x00010000 - --#define NV50_PDISPLAY_CTRL_STATE 0x00610300 --#define NV50_PDISPLAY_CTRL_STATE_PENDING 0x80000000 --#define NV50_PDISPLAY_CTRL_STATE_METHOD 0x00001ffc --#define NV50_PDISPLAY_CTRL_STATE_ENABLE 0x00000001 --#define NV50_PDISPLAY_CTRL_VAL 0x00610304 --#define NV50_PDISPLAY_UNK_380 0x00610380 --#define NV50_PDISPLAY_RAM_AMOUNT 0x00610384 --#define NV50_PDISPLAY_UNK_388 0x00610388 --#define NV50_PDISPLAY_UNK_38C 0x0061038c -+#define NV50_PDISPLAY_PIO_CTRL 0x00610300 -+#define NV50_PDISPLAY_PIO_CTRL_PENDING 0x80000000 -+#define NV50_PDISPLAY_PIO_CTRL_MTHD 0x00001ffc -+#define NV50_PDISPLAY_PIO_CTRL_ENABLED 0x00000001 -+#define NV50_PDISPLAY_PIO_DATA 0x00610304 - - #define NV50_PDISPLAY_CRTC_P(i, r) ((i) * 0x540 + NV50_PDISPLAY_CRTC_##r) - #define NV50_PDISPLAY_CRTC_C(i, r) (4 + (i) * 0x540 + NV50_PDISPLAY_CRTC_##r) -@@ -785,15 +791,12 @@ - #define NV50_PDISPLAY_DAC_MODE_CTRL_C(i) (0x00610b5c + (i) * 0x8) - #define NV50_PDISPLAY_SOR_MODE_CTRL_P(i) (0x00610b70 + (i) * 0x8) - #define NV50_PDISPLAY_SOR_MODE_CTRL_C(i) (0x00610b74 + (i) * 0x8) -+#define NV50_PDISPLAY_EXT_MODE_CTRL_P(i) (0x00610b80 + (i) * 0x8) -+#define NV50_PDISPLAY_EXT_MODE_CTRL_C(i) (0x00610b84 + (i) * 0x8) - #define NV50_PDISPLAY_DAC_MODE_CTRL2_P(i) (0x00610bdc + (i) * 0x8) - #define NV50_PDISPLAY_DAC_MODE_CTRL2_C(i) (0x00610be0 + (i) * 0x8) -- - #define NV90_PDISPLAY_SOR_MODE_CTRL_P(i) (0x00610794 + (i) * 0x8) - #define NV90_PDISPLAY_SOR_MODE_CTRL_C(i) (0x00610798 + (i) * 0x8) --#define NV90_PDISPLAY_DAC_MODE_CTRL_P(i) (0x00610b58 + (i) * 0x8) --#define NV90_PDISPLAY_DAC_MODE_CTRL_C(i) (0x00610b5c + (i) * 0x8) --#define NV90_PDISPLAY_DAC_MODE_CTRL2_P(i) (0x00610b80 + (i) * 0x8) --#define NV90_PDISPLAY_DAC_MODE_CTRL2_C(i) (0x00610b84 + (i) * 0x8) - - #define NV50_PDISPLAY_CRTC_CLK 0x00614000 - #define NV50_PDISPLAY_CRTC_CLK_CTRL1(i) ((i) * 0x800 + 0x614100) -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_sgdma.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_sgdma.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_sgdma.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_sgdma.c 2010-11-05 00:40:00.000000000 +0100 -@@ -95,9 +95,9 @@ - struct nouveau_gpuobj *gpuobj = dev_priv->gart_info.sg_ctxdma; - unsigned i, j, pte; - -- NV_DEBUG(dev, "pg=0x%lx\n", mem->mm_node->start); -+ NV_DEBUG(dev, "pg=0x%lx\n", mem->start); - -- pte = nouveau_sgdma_pte(nvbe->dev, mem->mm_node->start << PAGE_SHIFT); -+ pte = nouveau_sgdma_pte(nvbe->dev, mem->start << PAGE_SHIFT); - nvbe->pte_start = pte; - for (i = 0; i < nvbe->nr_pages; i++) { - dma_addr_t dma_offset = nvbe->pages[i]; -@@ -105,11 +105,13 @@ - uint32_t offset_h = upper_32_bits(dma_offset); - - for (j = 0; j < PAGE_SIZE / NV_CTXDMA_PAGE_SIZE; j++) { -- if (dev_priv->card_type < NV_50) -- nv_wo32(dev, gpuobj, pte++, offset_l | 3); -- else { -- nv_wo32(dev, gpuobj, pte++, offset_l | 0x21); -- nv_wo32(dev, gpuobj, pte++, offset_h & 0xff); -+ if (dev_priv->card_type < NV_50) { -+ nv_wo32(gpuobj, (pte * 4) + 0, offset_l | 3); -+ pte += 1; -+ } else { -+ nv_wo32(gpuobj, (pte * 4) + 0, offset_l | 0x21); -+ nv_wo32(gpuobj, (pte * 4) + 4, offset_h & 0xff); -+ pte += 2; - } - - dma_offset += NV_CTXDMA_PAGE_SIZE; -@@ -118,8 +120,8 @@ - dev_priv->engine.instmem.flush(nvbe->dev); - - if (dev_priv->card_type == NV_50) { -- nv50_vm_flush(dev, 5); /* PGRAPH */ -- nv50_vm_flush(dev, 0); /* PFIFO */ -+ dev_priv->engine.fifo.tlb_flush(dev); -+ dev_priv->engine.graph.tlb_flush(dev); - } - - nvbe->bound = true; -@@ -145,11 +147,13 @@ - dma_addr_t dma_offset = dev_priv->gart_info.sg_dummy_bus; - - for (j = 0; j < PAGE_SIZE / NV_CTXDMA_PAGE_SIZE; j++) { -- if (dev_priv->card_type < NV_50) -- nv_wo32(dev, gpuobj, pte++, dma_offset | 3); -- else { -- nv_wo32(dev, gpuobj, pte++, dma_offset | 0x21); -- nv_wo32(dev, gpuobj, pte++, 0x00000000); -+ if (dev_priv->card_type < NV_50) { -+ nv_wo32(gpuobj, (pte * 4) + 0, dma_offset | 3); -+ pte += 1; -+ } else { -+ nv_wo32(gpuobj, (pte * 4) + 0, 0x00000000); -+ nv_wo32(gpuobj, (pte * 4) + 4, 0x00000000); -+ pte += 2; - } - - dma_offset += NV_CTXDMA_PAGE_SIZE; -@@ -158,8 +162,8 @@ - dev_priv->engine.instmem.flush(nvbe->dev); - - if (dev_priv->card_type == NV_50) { -- nv50_vm_flush(dev, 5); -- nv50_vm_flush(dev, 0); -+ dev_priv->engine.fifo.tlb_flush(dev); -+ dev_priv->engine.graph.tlb_flush(dev); - } - - nvbe->bound = false; -@@ -220,7 +224,11 @@ - int i, ret; - - if (dev_priv->card_type < NV_50) { -- aper_size = (64 * 1024 * 1024); -+ if(dev_priv->ramin_rsvd_vram < 2 * 1024 * 1024) -+ aper_size = 64 * 1024 * 1024; -+ else -+ aper_size = 512 * 1024 * 1024; -+ - obj_size = (aper_size >> NV_CTXDMA_PAGE_SHIFT) * 4; - obj_size += 8; /* ctxdma header */ - } else { -@@ -230,7 +238,6 @@ - } - - ret = nouveau_gpuobj_new(dev, NULL, obj_size, 16, -- NVOBJ_FLAG_ALLOW_NO_REFS | - NVOBJ_FLAG_ZERO_ALLOC | - NVOBJ_FLAG_ZERO_FREE, &gpuobj); - if (ret) { -@@ -239,9 +246,9 @@ - } - - dev_priv->gart_info.sg_dummy_page = -- alloc_page(GFP_KERNEL|__GFP_DMA32); -+ alloc_page(GFP_KERNEL|__GFP_DMA32|__GFP_ZERO); - if (!dev_priv->gart_info.sg_dummy_page) { -- nouveau_gpuobj_del(dev, &gpuobj); -+ nouveau_gpuobj_ref(NULL, &gpuobj); - return -ENOMEM; - } - -@@ -250,29 +257,34 @@ - pci_map_page(pdev, dev_priv->gart_info.sg_dummy_page, 0, - PAGE_SIZE, PCI_DMA_BIDIRECTIONAL); - if (pci_dma_mapping_error(pdev, dev_priv->gart_info.sg_dummy_bus)) { -- nouveau_gpuobj_del(dev, &gpuobj); -+ nouveau_gpuobj_ref(NULL, &gpuobj); - return -EFAULT; - } - - if (dev_priv->card_type < NV_50) { -+ /* special case, allocated from global instmem heap so -+ * cinst is invalid, we use it on all channels though so -+ * cinst needs to be valid, set it the same as pinst -+ */ -+ gpuobj->cinst = gpuobj->pinst; -+ - /* Maybe use NV_DMA_TARGET_AGP for PCIE? NVIDIA do this, and - * confirmed to work on c51. Perhaps means NV_DMA_TARGET_PCIE - * on those cards? */ -- nv_wo32(dev, gpuobj, 0, NV_CLASS_DMA_IN_MEMORY | -- (1 << 12) /* PT present */ | -- (0 << 13) /* PT *not* linear */ | -- (NV_DMA_ACCESS_RW << 14) | -- (NV_DMA_TARGET_PCI << 16)); -- nv_wo32(dev, gpuobj, 1, aper_size - 1); -+ nv_wo32(gpuobj, 0, NV_CLASS_DMA_IN_MEMORY | -+ (1 << 12) /* PT present */ | -+ (0 << 13) /* PT *not* linear */ | -+ (NV_DMA_ACCESS_RW << 14) | -+ (NV_DMA_TARGET_PCI << 16)); -+ nv_wo32(gpuobj, 4, aper_size - 1); - for (i = 2; i < 2 + (aper_size >> 12); i++) { -- nv_wo32(dev, gpuobj, i, -- dev_priv->gart_info.sg_dummy_bus | 3); -+ nv_wo32(gpuobj, i * 4, -+ dev_priv->gart_info.sg_dummy_bus | 3); - } - } else { - for (i = 0; i < obj_size; i += 8) { -- nv_wo32(dev, gpuobj, (i+0)/4, -- dev_priv->gart_info.sg_dummy_bus | 0x21); -- nv_wo32(dev, gpuobj, (i+4)/4, 0); -+ nv_wo32(gpuobj, i + 0, 0x00000000); -+ nv_wo32(gpuobj, i + 4, 0x00000000); - } - } - dev_priv->engine.instmem.flush(dev); -@@ -298,7 +310,7 @@ - dev_priv->gart_info.sg_dummy_bus = 0; - } - -- nouveau_gpuobj_del(dev, &dev_priv->gart_info.sg_ctxdma); -+ nouveau_gpuobj_ref(NULL, &dev_priv->gart_info.sg_ctxdma); - } - - int -@@ -308,9 +320,9 @@ - struct nouveau_gpuobj *gpuobj = dev_priv->gart_info.sg_ctxdma; - int pte; - -- pte = (offset >> NV_CTXDMA_PAGE_SHIFT); -+ pte = (offset >> NV_CTXDMA_PAGE_SHIFT) << 2; - if (dev_priv->card_type < NV_50) { -- *page = nv_ro32(dev, gpuobj, (pte + 2)) & ~NV_CTXDMA_PAGE_MASK; -+ *page = nv_ro32(gpuobj, (pte + 8)) & ~NV_CTXDMA_PAGE_MASK; - return 0; - } - -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_state.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_state.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_state.c 2010-11-05 00:40:00.000000000 +0100 -@@ -35,6 +35,8 @@ - #include "nouveau_drv.h" - #include "nouveau_drm.h" - #include "nouveau_fbcon.h" -+#include "nouveau_ramht.h" -+#include "nouveau_pm.h" - #include "nv50_display.h" - - static void nouveau_stub_takedown(struct drm_device *dev) {} -@@ -63,7 +65,6 @@ - engine->timer.takedown = nv04_timer_takedown; - engine->fb.init = nv04_fb_init; - engine->fb.takedown = nv04_fb_takedown; -- engine->graph.grclass = nv04_graph_grclass; - engine->graph.init = nv04_graph_init; - engine->graph.takedown = nv04_graph_takedown; - engine->graph.fifo_access = nv04_graph_fifo_access; -@@ -78,7 +79,6 @@ - engine->fifo.disable = nv04_fifo_disable; - engine->fifo.enable = nv04_fifo_enable; - engine->fifo.reassign = nv04_fifo_reassign; -- engine->fifo.cache_flush = nv04_fifo_cache_flush; - engine->fifo.cache_pull = nv04_fifo_cache_pull; - engine->fifo.channel_id = nv04_fifo_channel_id; - engine->fifo.create_context = nv04_fifo_create_context; -@@ -95,6 +95,11 @@ - engine->gpio.get = NULL; - engine->gpio.set = NULL; - engine->gpio.irq_enable = NULL; -+ engine->pm.clock_get = nv04_pm_clock_get; -+ engine->pm.clock_pre = nv04_pm_clock_pre; -+ engine->pm.clock_set = nv04_pm_clock_set; -+ engine->crypt.init = nouveau_stub_init; -+ engine->crypt.takedown = nouveau_stub_takedown; - break; - case 0x10: - engine->instmem.init = nv04_instmem_init; -@@ -113,8 +118,9 @@ - engine->timer.takedown = nv04_timer_takedown; - engine->fb.init = nv10_fb_init; - engine->fb.takedown = nv10_fb_takedown; -- engine->fb.set_region_tiling = nv10_fb_set_region_tiling; -- engine->graph.grclass = nv10_graph_grclass; -+ engine->fb.init_tile_region = nv10_fb_init_tile_region; -+ engine->fb.set_tile_region = nv10_fb_set_tile_region; -+ engine->fb.free_tile_region = nv10_fb_free_tile_region; - engine->graph.init = nv10_graph_init; - engine->graph.takedown = nv10_graph_takedown; - engine->graph.channel = nv10_graph_channel; -@@ -123,18 +129,17 @@ - engine->graph.fifo_access = nv04_graph_fifo_access; - engine->graph.load_context = nv10_graph_load_context; - engine->graph.unload_context = nv10_graph_unload_context; -- engine->graph.set_region_tiling = nv10_graph_set_region_tiling; -+ engine->graph.set_tile_region = nv10_graph_set_tile_region; - engine->fifo.channels = 32; - engine->fifo.init = nv10_fifo_init; - engine->fifo.takedown = nouveau_stub_takedown; - engine->fifo.disable = nv04_fifo_disable; - engine->fifo.enable = nv04_fifo_enable; - engine->fifo.reassign = nv04_fifo_reassign; -- engine->fifo.cache_flush = nv04_fifo_cache_flush; - engine->fifo.cache_pull = nv04_fifo_cache_pull; - engine->fifo.channel_id = nv10_fifo_channel_id; - engine->fifo.create_context = nv10_fifo_create_context; -- engine->fifo.destroy_context = nv10_fifo_destroy_context; -+ engine->fifo.destroy_context = nv04_fifo_destroy_context; - engine->fifo.load_context = nv10_fifo_load_context; - engine->fifo.unload_context = nv10_fifo_unload_context; - engine->display.early_init = nv04_display_early_init; -@@ -147,6 +152,11 @@ - engine->gpio.get = nv10_gpio_get; - engine->gpio.set = nv10_gpio_set; - engine->gpio.irq_enable = NULL; -+ engine->pm.clock_get = nv04_pm_clock_get; -+ engine->pm.clock_pre = nv04_pm_clock_pre; -+ engine->pm.clock_set = nv04_pm_clock_set; -+ engine->crypt.init = nouveau_stub_init; -+ engine->crypt.takedown = nouveau_stub_takedown; - break; - case 0x20: - engine->instmem.init = nv04_instmem_init; -@@ -165,8 +175,9 @@ - engine->timer.takedown = nv04_timer_takedown; - engine->fb.init = nv10_fb_init; - engine->fb.takedown = nv10_fb_takedown; -- engine->fb.set_region_tiling = nv10_fb_set_region_tiling; -- engine->graph.grclass = nv20_graph_grclass; -+ engine->fb.init_tile_region = nv10_fb_init_tile_region; -+ engine->fb.set_tile_region = nv10_fb_set_tile_region; -+ engine->fb.free_tile_region = nv10_fb_free_tile_region; - engine->graph.init = nv20_graph_init; - engine->graph.takedown = nv20_graph_takedown; - engine->graph.channel = nv10_graph_channel; -@@ -175,18 +186,17 @@ - engine->graph.fifo_access = nv04_graph_fifo_access; - engine->graph.load_context = nv20_graph_load_context; - engine->graph.unload_context = nv20_graph_unload_context; -- engine->graph.set_region_tiling = nv20_graph_set_region_tiling; -+ engine->graph.set_tile_region = nv20_graph_set_tile_region; - engine->fifo.channels = 32; - engine->fifo.init = nv10_fifo_init; - engine->fifo.takedown = nouveau_stub_takedown; - engine->fifo.disable = nv04_fifo_disable; - engine->fifo.enable = nv04_fifo_enable; - engine->fifo.reassign = nv04_fifo_reassign; -- engine->fifo.cache_flush = nv04_fifo_cache_flush; - engine->fifo.cache_pull = nv04_fifo_cache_pull; - engine->fifo.channel_id = nv10_fifo_channel_id; - engine->fifo.create_context = nv10_fifo_create_context; -- engine->fifo.destroy_context = nv10_fifo_destroy_context; -+ engine->fifo.destroy_context = nv04_fifo_destroy_context; - engine->fifo.load_context = nv10_fifo_load_context; - engine->fifo.unload_context = nv10_fifo_unload_context; - engine->display.early_init = nv04_display_early_init; -@@ -199,6 +209,11 @@ - engine->gpio.get = nv10_gpio_get; - engine->gpio.set = nv10_gpio_set; - engine->gpio.irq_enable = NULL; -+ engine->pm.clock_get = nv04_pm_clock_get; -+ engine->pm.clock_pre = nv04_pm_clock_pre; -+ engine->pm.clock_set = nv04_pm_clock_set; -+ engine->crypt.init = nouveau_stub_init; -+ engine->crypt.takedown = nouveau_stub_takedown; - break; - case 0x30: - engine->instmem.init = nv04_instmem_init; -@@ -217,8 +232,9 @@ - engine->timer.takedown = nv04_timer_takedown; - engine->fb.init = nv30_fb_init; - engine->fb.takedown = nv30_fb_takedown; -- engine->fb.set_region_tiling = nv10_fb_set_region_tiling; -- engine->graph.grclass = nv30_graph_grclass; -+ engine->fb.init_tile_region = nv30_fb_init_tile_region; -+ engine->fb.set_tile_region = nv10_fb_set_tile_region; -+ engine->fb.free_tile_region = nv30_fb_free_tile_region; - engine->graph.init = nv30_graph_init; - engine->graph.takedown = nv20_graph_takedown; - engine->graph.fifo_access = nv04_graph_fifo_access; -@@ -227,18 +243,17 @@ - engine->graph.destroy_context = nv20_graph_destroy_context; - engine->graph.load_context = nv20_graph_load_context; - engine->graph.unload_context = nv20_graph_unload_context; -- engine->graph.set_region_tiling = nv20_graph_set_region_tiling; -+ engine->graph.set_tile_region = nv20_graph_set_tile_region; - engine->fifo.channels = 32; - engine->fifo.init = nv10_fifo_init; - engine->fifo.takedown = nouveau_stub_takedown; - engine->fifo.disable = nv04_fifo_disable; - engine->fifo.enable = nv04_fifo_enable; - engine->fifo.reassign = nv04_fifo_reassign; -- engine->fifo.cache_flush = nv04_fifo_cache_flush; - engine->fifo.cache_pull = nv04_fifo_cache_pull; - engine->fifo.channel_id = nv10_fifo_channel_id; - engine->fifo.create_context = nv10_fifo_create_context; -- engine->fifo.destroy_context = nv10_fifo_destroy_context; -+ engine->fifo.destroy_context = nv04_fifo_destroy_context; - engine->fifo.load_context = nv10_fifo_load_context; - engine->fifo.unload_context = nv10_fifo_unload_context; - engine->display.early_init = nv04_display_early_init; -@@ -251,6 +266,13 @@ - engine->gpio.get = nv10_gpio_get; - engine->gpio.set = nv10_gpio_set; - engine->gpio.irq_enable = NULL; -+ engine->pm.clock_get = nv04_pm_clock_get; -+ engine->pm.clock_pre = nv04_pm_clock_pre; -+ engine->pm.clock_set = nv04_pm_clock_set; -+ engine->pm.voltage_get = nouveau_voltage_gpio_get; -+ engine->pm.voltage_set = nouveau_voltage_gpio_set; -+ engine->crypt.init = nouveau_stub_init; -+ engine->crypt.takedown = nouveau_stub_takedown; - break; - case 0x40: - case 0x60: -@@ -270,8 +292,9 @@ - engine->timer.takedown = nv04_timer_takedown; - engine->fb.init = nv40_fb_init; - engine->fb.takedown = nv40_fb_takedown; -- engine->fb.set_region_tiling = nv40_fb_set_region_tiling; -- engine->graph.grclass = nv40_graph_grclass; -+ engine->fb.init_tile_region = nv30_fb_init_tile_region; -+ engine->fb.set_tile_region = nv40_fb_set_tile_region; -+ engine->fb.free_tile_region = nv30_fb_free_tile_region; - engine->graph.init = nv40_graph_init; - engine->graph.takedown = nv40_graph_takedown; - engine->graph.fifo_access = nv04_graph_fifo_access; -@@ -280,18 +303,17 @@ - engine->graph.destroy_context = nv40_graph_destroy_context; - engine->graph.load_context = nv40_graph_load_context; - engine->graph.unload_context = nv40_graph_unload_context; -- engine->graph.set_region_tiling = nv40_graph_set_region_tiling; -+ engine->graph.set_tile_region = nv40_graph_set_tile_region; - engine->fifo.channels = 32; - engine->fifo.init = nv40_fifo_init; - engine->fifo.takedown = nouveau_stub_takedown; - engine->fifo.disable = nv04_fifo_disable; - engine->fifo.enable = nv04_fifo_enable; - engine->fifo.reassign = nv04_fifo_reassign; -- engine->fifo.cache_flush = nv04_fifo_cache_flush; - engine->fifo.cache_pull = nv04_fifo_cache_pull; - engine->fifo.channel_id = nv10_fifo_channel_id; - engine->fifo.create_context = nv40_fifo_create_context; -- engine->fifo.destroy_context = nv40_fifo_destroy_context; -+ engine->fifo.destroy_context = nv04_fifo_destroy_context; - engine->fifo.load_context = nv40_fifo_load_context; - engine->fifo.unload_context = nv40_fifo_unload_context; - engine->display.early_init = nv04_display_early_init; -@@ -304,6 +326,14 @@ - engine->gpio.get = nv10_gpio_get; - engine->gpio.set = nv10_gpio_set; - engine->gpio.irq_enable = NULL; -+ engine->pm.clock_get = nv04_pm_clock_get; -+ engine->pm.clock_pre = nv04_pm_clock_pre; -+ engine->pm.clock_set = nv04_pm_clock_set; -+ engine->pm.voltage_get = nouveau_voltage_gpio_get; -+ engine->pm.voltage_set = nouveau_voltage_gpio_set; -+ engine->pm.temp_get = nv40_temp_get; -+ engine->crypt.init = nouveau_stub_init; -+ engine->crypt.takedown = nouveau_stub_takedown; - break; - case 0x50: - case 0x80: /* gotta love NVIDIA's consistency.. */ -@@ -328,7 +358,6 @@ - engine->timer.takedown = nv04_timer_takedown; - engine->fb.init = nv50_fb_init; - engine->fb.takedown = nv50_fb_takedown; -- engine->graph.grclass = nv50_graph_grclass; - engine->graph.init = nv50_graph_init; - engine->graph.takedown = nv50_graph_takedown; - engine->graph.fifo_access = nv50_graph_fifo_access; -@@ -337,6 +366,15 @@ - engine->graph.destroy_context = nv50_graph_destroy_context; - engine->graph.load_context = nv50_graph_load_context; - engine->graph.unload_context = nv50_graph_unload_context; -+ if (dev_priv->chipset != 0x86) -+ engine->graph.tlb_flush = nv50_graph_tlb_flush; -+ else { -+ /* from what i can see nvidia do this on every -+ * pre-NVA3 board except NVAC, but, we've only -+ * ever seen problems on NV86 -+ */ -+ engine->graph.tlb_flush = nv86_graph_tlb_flush; -+ } - engine->fifo.channels = 128; - engine->fifo.init = nv50_fifo_init; - engine->fifo.takedown = nv50_fifo_takedown; -@@ -348,6 +386,7 @@ - engine->fifo.destroy_context = nv50_fifo_destroy_context; - engine->fifo.load_context = nv50_fifo_load_context; - engine->fifo.unload_context = nv50_fifo_unload_context; -+ engine->fifo.tlb_flush = nv50_fifo_tlb_flush; - engine->display.early_init = nv50_display_early_init; - engine->display.late_takedown = nv50_display_late_takedown; - engine->display.create = nv50_display_create; -@@ -358,6 +397,50 @@ - engine->gpio.get = nv50_gpio_get; - engine->gpio.set = nv50_gpio_set; - engine->gpio.irq_enable = nv50_gpio_irq_enable; -+ switch (dev_priv->chipset) { -+ case 0x84: -+ case 0x86: -+ case 0x92: -+ case 0x94: -+ case 0x96: -+ case 0x98: -+ case 0xa0: -+ case 0xaa: -+ case 0xac: -+ case 0x50: -+ engine->pm.clock_get = nv50_pm_clock_get; -+ engine->pm.clock_pre = nv50_pm_clock_pre; -+ engine->pm.clock_set = nv50_pm_clock_set; -+ break; -+ default: -+ engine->pm.clock_get = nva3_pm_clock_get; -+ engine->pm.clock_pre = nva3_pm_clock_pre; -+ engine->pm.clock_set = nva3_pm_clock_set; -+ break; -+ } -+ engine->pm.voltage_get = nouveau_voltage_gpio_get; -+ engine->pm.voltage_set = nouveau_voltage_gpio_set; -+ if (dev_priv->chipset >= 0x84) -+ engine->pm.temp_get = nv84_temp_get; -+ else -+ engine->pm.temp_get = nv40_temp_get; -+ switch (dev_priv->chipset) { -+ case 0x84: -+ case 0x86: -+ case 0x92: -+ case 0x94: -+ case 0x96: -+ case 0xa0: -+ engine->crypt.init = nv84_crypt_init; -+ engine->crypt.takedown = nv84_crypt_fini; -+ engine->crypt.create_context = nv84_crypt_create_context; -+ engine->crypt.destroy_context = nv84_crypt_destroy_context; -+ break; -+ default: -+ engine->crypt.init = nouveau_stub_init; -+ engine->crypt.takedown = nouveau_stub_takedown; -+ break; -+ } - break; - case 0xC0: - engine->instmem.init = nvc0_instmem_init; -@@ -376,7 +459,6 @@ - engine->timer.takedown = nv04_timer_takedown; - engine->fb.init = nvc0_fb_init; - engine->fb.takedown = nvc0_fb_takedown; -- engine->graph.grclass = NULL; //nvc0_graph_grclass; - engine->graph.init = nvc0_graph_init; - engine->graph.takedown = nvc0_graph_takedown; - engine->graph.fifo_access = nvc0_graph_fifo_access; -@@ -406,6 +488,8 @@ - engine->gpio.get = nv50_gpio_get; - engine->gpio.set = nv50_gpio_set; - engine->gpio.irq_enable = nv50_gpio_irq_enable; -+ engine->crypt.init = nouveau_stub_init; -+ engine->crypt.takedown = nouveau_stub_takedown; - break; - default: - NV_ERROR(dev, "NV%02x unsupported\n", dev_priv->chipset); -@@ -437,16 +521,14 @@ - nouveau_card_init_channel(struct drm_device *dev) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; -- struct nouveau_gpuobj *gpuobj; -+ struct nouveau_gpuobj *gpuobj = NULL; - int ret; - - ret = nouveau_channel_alloc(dev, &dev_priv->channel, -- (struct drm_file *)-2, -- NvDmaFB, NvDmaTT); -+ (struct drm_file *)-2, NvDmaFB, NvDmaTT); - if (ret) - return ret; - -- gpuobj = NULL; - ret = nouveau_gpuobj_dma_new(dev_priv->channel, NV_CLASS_DMA_IN_MEMORY, - 0, dev_priv->vram_size, - NV_DMA_ACCESS_RW, NV_DMA_TARGET_VIDMEM, -@@ -454,28 +536,27 @@ - if (ret) - goto out_err; - -- ret = nouveau_gpuobj_ref_add(dev, dev_priv->channel, NvDmaVRAM, -- gpuobj, NULL); -+ ret = nouveau_ramht_insert(dev_priv->channel, NvDmaVRAM, gpuobj); -+ nouveau_gpuobj_ref(NULL, &gpuobj); - if (ret) - goto out_err; - -- gpuobj = NULL; - ret = nouveau_gpuobj_gart_dma_new(dev_priv->channel, 0, - dev_priv->gart_info.aper_size, - NV_DMA_ACCESS_RW, &gpuobj, NULL); - if (ret) - goto out_err; - -- ret = nouveau_gpuobj_ref_add(dev, dev_priv->channel, NvDmaGART, -- gpuobj, NULL); -+ ret = nouveau_ramht_insert(dev_priv->channel, NvDmaGART, gpuobj); -+ nouveau_gpuobj_ref(NULL, &gpuobj); - if (ret) - goto out_err; - -+ mutex_unlock(&dev_priv->channel->mutex); - return 0; -+ - out_err: -- nouveau_gpuobj_del(dev, &gpuobj); -- nouveau_channel_free(dev_priv->channel); -- dev_priv->channel = NULL; -+ nouveau_channel_put(&dev_priv->channel); - return ret; - } - -@@ -522,6 +603,8 @@ - if (ret) - goto out; - engine = &dev_priv->engine; -+ spin_lock_init(&dev_priv->channels.lock); -+ spin_lock_init(&dev_priv->tile.lock); - spin_lock_init(&dev_priv->context_switch_lock); - - /* Make the CRTCs and I2C buses accessible */ -@@ -534,35 +617,28 @@ - if (ret) - goto out_display_early; - -- ret = nouveau_mem_detect(dev); -+ nouveau_pm_init(dev); -+ -+ ret = nouveau_mem_vram_init(dev); - if (ret) - goto out_bios; - -- ret = nouveau_gpuobj_early_init(dev); -+ ret = nouveau_gpuobj_init(dev); - if (ret) -- goto out_bios; -+ goto out_vram; - -- /* Initialise instance memory, must happen before mem_init so we -- * know exactly how much VRAM we're able to use for "normal" -- * purposes. -- */ - ret = engine->instmem.init(dev); - if (ret) -- goto out_gpuobj_early; -+ goto out_gpuobj; - -- /* Setup the memory manager */ -- ret = nouveau_mem_init(dev); -+ ret = nouveau_mem_gart_init(dev); - if (ret) - goto out_instmem; - -- ret = nouveau_gpuobj_init(dev); -- if (ret) -- goto out_mem; -- - /* PMC */ - ret = engine->mc.init(dev); - if (ret) -- goto out_gpuobj; -+ goto out_gart; - - /* PGPIO */ - ret = engine->gpio.init(dev); -@@ -587,33 +663,39 @@ - if (ret) - goto out_fb; - -+ /* PCRYPT */ -+ ret = engine->crypt.init(dev); -+ if (ret) -+ goto out_graph; -+ - /* PFIFO */ - ret = engine->fifo.init(dev); - if (ret) -- goto out_graph; -+ goto out_crypt; - } - - ret = engine->display.create(dev); - if (ret) - goto out_fifo; - -- /* this call irq_preinstall, register irq handler and -- * call irq_postinstall -- */ -- ret = drm_irq_install(dev); -+ ret = drm_vblank_init(dev, nv_two_heads(dev) ? 2 : 1); - if (ret) -- goto out_display; -+ goto out_vblank; - -- ret = drm_vblank_init(dev, 0); -+ ret = nouveau_irq_init(dev); - if (ret) -- goto out_irq; -+ goto out_vblank; - - /* what about PVIDEO/PCRTC/PRAMDAC etc? */ - - if (!engine->graph.accel_blocked) { -- ret = nouveau_card_init_channel(dev); -+ ret = nouveau_fence_init(dev); - if (ret) - goto out_irq; -+ -+ ret = nouveau_card_init_channel(dev); -+ if (ret) -+ goto out_fence; - } - - ret = nouveau_backlight_init(dev); -@@ -624,13 +706,19 @@ - drm_kms_helper_poll_init(dev); - return 0; - -+out_fence: -+ nouveau_fence_fini(dev); - out_irq: -- drm_irq_uninstall(dev); --out_display: -+ nouveau_irq_fini(dev); -+out_vblank: -+ drm_vblank_cleanup(dev); - engine->display.destroy(dev); - out_fifo: - if (!nouveau_noaccel) - engine->fifo.takedown(dev); -+out_crypt: -+ if (!nouveau_noaccel) -+ engine->crypt.takedown(dev); - out_graph: - if (!nouveau_noaccel) - engine->graph.takedown(dev); -@@ -642,16 +730,16 @@ - engine->gpio.takedown(dev); - out_mc: - engine->mc.takedown(dev); --out_gpuobj: -- nouveau_gpuobj_takedown(dev); --out_mem: -- nouveau_sgdma_takedown(dev); -- nouveau_mem_close(dev); -+out_gart: -+ nouveau_mem_gart_fini(dev); - out_instmem: - engine->instmem.takedown(dev); --out_gpuobj_early: -- nouveau_gpuobj_late_takedown(dev); -+out_gpuobj: -+ nouveau_gpuobj_takedown(dev); -+out_vram: -+ nouveau_mem_vram_fini(dev); - out_bios: -+ nouveau_pm_fini(dev); - nouveau_bios_takedown(dev); - out_display_early: - engine->display.late_takedown(dev); -@@ -667,13 +755,14 @@ - - nouveau_backlight_exit(dev); - -- if (dev_priv->channel) { -- nouveau_channel_free(dev_priv->channel); -- dev_priv->channel = NULL; -+ if (!engine->graph.accel_blocked) { -+ nouveau_fence_fini(dev); -+ nouveau_channel_put_unlocked(&dev_priv->channel); - } - - if (!nouveau_noaccel) { - engine->fifo.takedown(dev); -+ engine->crypt.takedown(dev); - engine->graph.takedown(dev); - } - engine->fb.takedown(dev); -@@ -686,15 +775,16 @@ - ttm_bo_clean_mm(&dev_priv->ttm.bdev, TTM_PL_VRAM); - ttm_bo_clean_mm(&dev_priv->ttm.bdev, TTM_PL_TT); - mutex_unlock(&dev->struct_mutex); -- nouveau_sgdma_takedown(dev); -+ nouveau_mem_gart_fini(dev); - -- nouveau_gpuobj_takedown(dev); -- nouveau_mem_close(dev); - engine->instmem.takedown(dev); -+ nouveau_gpuobj_takedown(dev); -+ nouveau_mem_vram_fini(dev); - -- drm_irq_uninstall(dev); -+ nouveau_irq_fini(dev); -+ drm_vblank_cleanup(dev); - -- nouveau_gpuobj_late_takedown(dev); -+ nouveau_pm_fini(dev); - nouveau_bios_takedown(dev); - - vga_client_register(dev->pdev, NULL, NULL, NULL); -@@ -1006,6 +1096,12 @@ - case NOUVEAU_GETPARAM_PTIMER_TIME: - getparam->value = dev_priv->engine.timer.read(dev); - break; -+ case NOUVEAU_GETPARAM_HAS_BO_USAGE: -+ getparam->value = 1; -+ break; -+ case NOUVEAU_GETPARAM_HAS_PAGEFLIP: -+ getparam->value = (dev_priv->card_type < NV_50); -+ break; - case NOUVEAU_GETPARAM_GRAPH_UNITS: - /* NV40 and NV50 versions are quite different, but register - * address is the same. User is supposed to know the card -@@ -1016,7 +1112,7 @@ - } - /* FALLTHRU */ - default: -- NV_ERROR(dev, "unknown parameter %lld\n", getparam->param); -+ NV_DEBUG(dev, "unknown parameter %lld\n", getparam->param); - return -EINVAL; - } - -@@ -1031,7 +1127,7 @@ - - switch (setparam->param) { - default: -- NV_ERROR(dev, "unknown parameter %lld\n", setparam->param); -+ NV_DEBUG(dev, "unknown parameter %lld\n", setparam->param); - return -EINVAL; - } - -@@ -1057,7 +1153,13 @@ - /* Waits for PGRAPH to go completely idle */ - bool nouveau_wait_for_idle(struct drm_device *dev) - { -- if (!nv_wait(NV04_PGRAPH_STATUS, 0xffffffff, 0x00000000)) { -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ uint32_t mask = ~0; -+ -+ if (dev_priv->card_type == NV_40) -+ mask &= ~NV40_PGRAPH_STATUS_SYNC_STALL; -+ -+ if (!nv_wait(dev, NV04_PGRAPH_STATUS, mask, 0)) { - NV_ERROR(dev, "PGRAPH idle timed out with status 0x%08x\n", - nv_rd32(dev, NV04_PGRAPH_STATUS)); - return false; -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_temp.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_temp.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_temp.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_temp.c 2010-11-05 00:40:00.000000000 +0100 -@@ -0,0 +1,309 @@ -+/* -+ * Copyright 2010 PathScale inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining a -+ * copy of this software and associated documentation files (the "Software"), -+ * to deal in the Software without restriction, including without limitation -+ * the rights to use, copy, modify, merge, publish, distribute, sublicense, -+ * and/or sell copies of the Software, and to permit persons to whom the -+ * Software is furnished to do so, subject to the following conditions: -+ * -+ * The above copyright notice and this permission notice shall be included in -+ * all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR -+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -+ * OTHER DEALINGS IN THE SOFTWARE. -+ * -+ * Authors: Martin Peres -+ */ -+ -+#include "drmP.h" -+ -+#include "nouveau_drv.h" -+#include "nouveau_pm.h" -+ -+static void -+nouveau_temp_vbios_parse(struct drm_device *dev, u8 *temp) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_engine *pm = &dev_priv->engine.pm; -+ struct nouveau_pm_temp_sensor_constants *sensor = &pm->sensor_constants; -+ struct nouveau_pm_threshold_temp *temps = &pm->threshold_temp; -+ int i, headerlen, recordlen, entries; -+ -+ if (!temp) { -+ NV_DEBUG(dev, "temperature table pointer invalid\n"); -+ return; -+ } -+ -+ /* Set the default sensor's contants */ -+ sensor->offset_constant = 0; -+ sensor->offset_mult = 1; -+ sensor->offset_div = 1; -+ sensor->slope_mult = 1; -+ sensor->slope_div = 1; -+ -+ /* Set the default temperature thresholds */ -+ temps->critical = 110; -+ temps->down_clock = 100; -+ temps->fan_boost = 90; -+ -+ /* Set the known default values to setup the temperature sensor */ -+ if (dev_priv->card_type >= NV_40) { -+ switch (dev_priv->chipset) { -+ case 0x43: -+ sensor->offset_mult = 32060; -+ sensor->offset_div = 1000; -+ sensor->slope_mult = 792; -+ sensor->slope_div = 1000; -+ break; -+ -+ case 0x44: -+ case 0x47: -+ case 0x4a: -+ sensor->offset_mult = 27839; -+ sensor->offset_div = 1000; -+ sensor->slope_mult = 780; -+ sensor->slope_div = 1000; -+ break; -+ -+ case 0x46: -+ sensor->offset_mult = -24775; -+ sensor->offset_div = 100; -+ sensor->slope_mult = 467; -+ sensor->slope_div = 10000; -+ break; -+ -+ case 0x49: -+ sensor->offset_mult = -25051; -+ sensor->offset_div = 100; -+ sensor->slope_mult = 458; -+ sensor->slope_div = 10000; -+ break; -+ -+ case 0x4b: -+ sensor->offset_mult = -24088; -+ sensor->offset_div = 100; -+ sensor->slope_mult = 442; -+ sensor->slope_div = 10000; -+ break; -+ -+ case 0x50: -+ sensor->offset_mult = -22749; -+ sensor->offset_div = 100; -+ sensor->slope_mult = 431; -+ sensor->slope_div = 10000; -+ break; -+ } -+ } -+ -+ headerlen = temp[1]; -+ recordlen = temp[2]; -+ entries = temp[3]; -+ temp = temp + headerlen; -+ -+ /* Read the entries from the table */ -+ for (i = 0; i < entries; i++) { -+ u16 value = ROM16(temp[1]); -+ -+ switch (temp[0]) { -+ case 0x01: -+ if ((value & 0x8f) == 0) -+ sensor->offset_constant = (value >> 9) & 0x7f; -+ break; -+ -+ case 0x04: -+ if ((value & 0xf00f) == 0xa000) /* core */ -+ temps->critical = (value&0x0ff0) >> 4; -+ break; -+ -+ case 0x07: -+ if ((value & 0xf00f) == 0xa000) /* core */ -+ temps->down_clock = (value&0x0ff0) >> 4; -+ break; -+ -+ case 0x08: -+ if ((value & 0xf00f) == 0xa000) /* core */ -+ temps->fan_boost = (value&0x0ff0) >> 4; -+ break; -+ -+ case 0x10: -+ sensor->offset_mult = value; -+ break; -+ -+ case 0x11: -+ sensor->offset_div = value; -+ break; -+ -+ case 0x12: -+ sensor->slope_mult = value; -+ break; -+ -+ case 0x13: -+ sensor->slope_div = value; -+ break; -+ } -+ temp += recordlen; -+ } -+ -+ nouveau_temp_safety_checks(dev); -+} -+ -+static int -+nv40_sensor_setup(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_engine *pm = &dev_priv->engine.pm; -+ struct nouveau_pm_temp_sensor_constants *sensor = &pm->sensor_constants; -+ u32 offset = sensor->offset_mult / sensor->offset_div; -+ u32 sensor_calibration; -+ -+ /* set up the sensors */ -+ sensor_calibration = 120 - offset - sensor->offset_constant; -+ sensor_calibration = sensor_calibration * sensor->slope_div / -+ sensor->slope_mult; -+ -+ if (dev_priv->chipset >= 0x46) -+ sensor_calibration |= 0x80000000; -+ else -+ sensor_calibration |= 0x10000000; -+ -+ nv_wr32(dev, 0x0015b0, sensor_calibration); -+ -+ /* Wait for the sensor to update */ -+ msleep(5); -+ -+ /* read */ -+ return nv_rd32(dev, 0x0015b4) & 0x1fff; -+} -+ -+int -+nv40_temp_get(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_engine *pm = &dev_priv->engine.pm; -+ struct nouveau_pm_temp_sensor_constants *sensor = &pm->sensor_constants; -+ int offset = sensor->offset_mult / sensor->offset_div; -+ int core_temp; -+ -+ if (dev_priv->chipset >= 0x50) { -+ core_temp = nv_rd32(dev, 0x20008); -+ } else { -+ core_temp = nv_rd32(dev, 0x0015b4) & 0x1fff; -+ /* Setup the sensor if the temperature is 0 */ -+ if (core_temp == 0) -+ core_temp = nv40_sensor_setup(dev); -+ } -+ -+ core_temp = core_temp * sensor->slope_mult / sensor->slope_div; -+ core_temp = core_temp + offset + sensor->offset_constant; -+ -+ return core_temp; -+} -+ -+int -+nv84_temp_get(struct drm_device *dev) -+{ -+ return nv_rd32(dev, 0x20400); -+} -+ -+void -+nouveau_temp_safety_checks(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_engine *pm = &dev_priv->engine.pm; -+ struct nouveau_pm_threshold_temp *temps = &pm->threshold_temp; -+ -+ if (temps->critical > 120) -+ temps->critical = 120; -+ else if (temps->critical < 80) -+ temps->critical = 80; -+ -+ if (temps->down_clock > 110) -+ temps->down_clock = 110; -+ else if (temps->down_clock < 60) -+ temps->down_clock = 60; -+ -+ if (temps->fan_boost > 100) -+ temps->fan_boost = 100; -+ else if (temps->fan_boost < 40) -+ temps->fan_boost = 40; -+} -+ -+static bool -+probe_monitoring_device(struct nouveau_i2c_chan *i2c, -+ struct i2c_board_info *info) -+{ -+ char modalias[16] = "i2c:"; -+ struct i2c_client *client; -+ -+ strlcat(modalias, info->type, sizeof(modalias)); -+ request_module(modalias); -+ -+ client = i2c_new_device(&i2c->adapter, info); -+ if (!client) -+ return false; -+ -+ if (!client->driver || client->driver->detect(client, info)) { -+ i2c_unregister_device(client); -+ return false; -+ } -+ -+ return true; -+} -+ -+static void -+nouveau_temp_probe_i2c(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct dcb_table *dcb = &dev_priv->vbios.dcb; -+ struct i2c_board_info info[] = { -+ { I2C_BOARD_INFO("w83l785ts", 0x2d) }, -+ { I2C_BOARD_INFO("w83781d", 0x2d) }, -+ { I2C_BOARD_INFO("f75375", 0x2e) }, -+ { I2C_BOARD_INFO("adt7473", 0x2e) }, -+ { I2C_BOARD_INFO("lm99", 0x4c) }, -+ { } -+ }; -+ int idx = (dcb->version >= 0x40 ? -+ dcb->i2c_default_indices & 0xf : 2); -+ -+ nouveau_i2c_identify(dev, "monitoring device", info, -+ probe_monitoring_device, idx); -+} -+ -+void -+nouveau_temp_init(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nvbios *bios = &dev_priv->vbios; -+ struct bit_entry P; -+ u8 *temp = NULL; -+ -+ if (bios->type == NVBIOS_BIT) { -+ if (bit_table(dev, 'P', &P)) -+ return; -+ -+ if (P.version == 1) -+ temp = ROMPTR(bios, P.data[12]); -+ else if (P.version == 2) -+ temp = ROMPTR(bios, P.data[16]); -+ else -+ NV_WARN(dev, "unknown temp for BIT P %d\n", P.version); -+ -+ nouveau_temp_vbios_parse(dev, temp); -+ } -+ -+ nouveau_temp_probe_i2c(dev); -+} -+ -+void -+nouveau_temp_fini(struct drm_device *dev) -+{ -+ -+} -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_volt.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_volt.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nouveau_volt.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nouveau_volt.c 2010-11-05 00:40:00.000000000 +0100 -@@ -0,0 +1,212 @@ -+/* -+ * Copyright 2010 Red Hat Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining a -+ * copy of this software and associated documentation files (the "Software"), -+ * to deal in the Software without restriction, including without limitation -+ * the rights to use, copy, modify, merge, publish, distribute, sublicense, -+ * and/or sell copies of the Software, and to permit persons to whom the -+ * Software is furnished to do so, subject to the following conditions: -+ * -+ * The above copyright notice and this permission notice shall be included in -+ * all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR -+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -+ * OTHER DEALINGS IN THE SOFTWARE. -+ * -+ * Authors: Ben Skeggs -+ */ -+ -+#include "drmP.h" -+ -+#include "nouveau_drv.h" -+#include "nouveau_pm.h" -+ -+static const enum dcb_gpio_tag vidtag[] = { 0x04, 0x05, 0x06, 0x1a }; -+static int nr_vidtag = sizeof(vidtag) / sizeof(vidtag[0]); -+ -+int -+nouveau_voltage_gpio_get(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_gpio_engine *gpio = &dev_priv->engine.gpio; -+ struct nouveau_pm_voltage *volt = &dev_priv->engine.pm.voltage; -+ u8 vid = 0; -+ int i; -+ -+ for (i = 0; i < nr_vidtag; i++) { -+ if (!(volt->vid_mask & (1 << i))) -+ continue; -+ -+ vid |= gpio->get(dev, vidtag[i]) << i; -+ } -+ -+ return nouveau_volt_lvl_lookup(dev, vid); -+} -+ -+int -+nouveau_voltage_gpio_set(struct drm_device *dev, int voltage) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_gpio_engine *gpio = &dev_priv->engine.gpio; -+ struct nouveau_pm_voltage *volt = &dev_priv->engine.pm.voltage; -+ int vid, i; -+ -+ vid = nouveau_volt_vid_lookup(dev, voltage); -+ if (vid < 0) -+ return vid; -+ -+ for (i = 0; i < nr_vidtag; i++) { -+ if (!(volt->vid_mask & (1 << i))) -+ continue; -+ -+ gpio->set(dev, vidtag[i], !!(vid & (1 << i))); -+ } -+ -+ return 0; -+} -+ -+int -+nouveau_volt_vid_lookup(struct drm_device *dev, int voltage) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_voltage *volt = &dev_priv->engine.pm.voltage; -+ int i; -+ -+ for (i = 0; i < volt->nr_level; i++) { -+ if (volt->level[i].voltage == voltage) -+ return volt->level[i].vid; -+ } -+ -+ return -ENOENT; -+} -+ -+int -+nouveau_volt_lvl_lookup(struct drm_device *dev, int vid) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_voltage *volt = &dev_priv->engine.pm.voltage; -+ int i; -+ -+ for (i = 0; i < volt->nr_level; i++) { -+ if (volt->level[i].vid == vid) -+ return volt->level[i].voltage; -+ } -+ -+ return -ENOENT; -+} -+ -+void -+nouveau_volt_init(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_engine *pm = &dev_priv->engine.pm; -+ struct nouveau_pm_voltage *voltage = &pm->voltage; -+ struct nvbios *bios = &dev_priv->vbios; -+ struct bit_entry P; -+ u8 *volt = NULL, *entry; -+ int i, headerlen, recordlen, entries, vidmask, vidshift; -+ -+ if (bios->type == NVBIOS_BIT) { -+ if (bit_table(dev, 'P', &P)) -+ return; -+ -+ if (P.version == 1) -+ volt = ROMPTR(bios, P.data[16]); -+ else -+ if (P.version == 2) -+ volt = ROMPTR(bios, P.data[12]); -+ else { -+ NV_WARN(dev, "unknown volt for BIT P %d\n", P.version); -+ } -+ } else { -+ if (bios->data[bios->offset + 6] < 0x27) { -+ NV_DEBUG(dev, "BMP version too old for voltage\n"); -+ return; -+ } -+ -+ volt = ROMPTR(bios, bios->data[bios->offset + 0x98]); -+ } -+ -+ if (!volt) { -+ NV_DEBUG(dev, "voltage table pointer invalid\n"); -+ return; -+ } -+ -+ switch (volt[0]) { -+ case 0x10: -+ case 0x11: -+ case 0x12: -+ headerlen = 5; -+ recordlen = volt[1]; -+ entries = volt[2]; -+ vidshift = 0; -+ vidmask = volt[4]; -+ break; -+ case 0x20: -+ headerlen = volt[1]; -+ recordlen = volt[3]; -+ entries = volt[2]; -+ vidshift = 0; /* could be vidshift like 0x30? */ -+ vidmask = volt[5]; -+ break; -+ case 0x30: -+ headerlen = volt[1]; -+ recordlen = volt[2]; -+ entries = volt[3]; -+ vidshift = hweight8(volt[5]); -+ vidmask = volt[4]; -+ break; -+ default: -+ NV_WARN(dev, "voltage table 0x%02x unknown\n", volt[0]); -+ return; -+ } -+ -+ /* validate vid mask */ -+ voltage->vid_mask = vidmask; -+ if (!voltage->vid_mask) -+ return; -+ -+ i = 0; -+ while (vidmask) { -+ if (i > nr_vidtag) { -+ NV_DEBUG(dev, "vid bit %d unknown\n", i); -+ return; -+ } -+ -+ if (!nouveau_bios_gpio_entry(dev, vidtag[i])) { -+ NV_DEBUG(dev, "vid bit %d has no gpio tag\n", i); -+ return; -+ } -+ -+ vidmask >>= 1; -+ i++; -+ } -+ -+ /* parse vbios entries into common format */ -+ voltage->level = kcalloc(entries, sizeof(*voltage->level), GFP_KERNEL); -+ if (!voltage->level) -+ return; -+ -+ entry = volt + headerlen; -+ for (i = 0; i < entries; i++, entry += recordlen) { -+ voltage->level[i].voltage = entry[0]; -+ voltage->level[i].vid = entry[1] >> vidshift; -+ } -+ voltage->nr_level = entries; -+ voltage->supported = true; -+} -+ -+void -+nouveau_volt_fini(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pm_voltage *volt = &dev_priv->engine.pm.voltage; -+ -+ kfree(volt->level); -+} -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_crtc.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_crtc.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv04_crtc.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_crtc.c 2010-11-05 00:40:00.000000000 +0100 -@@ -109,7 +109,7 @@ - struct nouveau_pll_vals *pv = ®p->pllvals; - struct pll_lims pll_lim; - -- if (get_pll_limits(dev, nv_crtc->index ? VPLL2 : VPLL1, &pll_lim)) -+ if (get_pll_limits(dev, nv_crtc->index ? PLL_VPLL1 : PLL_VPLL0, &pll_lim)) - return; - - /* NM2 == 0 is used to determine single stage mode on two stage plls */ -@@ -157,7 +157,6 @@ - { - struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); - struct drm_device *dev = crtc->dev; -- struct drm_connector *connector; - unsigned char seq1 = 0, crtc17 = 0; - unsigned char crtc1A; - -@@ -212,10 +211,6 @@ - NVVgaSeqReset(dev, nv_crtc->index, false); - - NVWriteVgaCrtc(dev, nv_crtc->index, NV_CIO_CRE_RPC1_INDEX, crtc1A); -- -- /* Update connector polling modes */ -- list_for_each_entry(connector, &dev->mode_config.connector_list, head) -- nouveau_connector_set_polling(connector); - } - - static bool -@@ -555,7 +550,10 @@ - if (dev_priv->card_type >= NV_30) - regp->gpio_ext = NVReadCRTC(dev, 0, NV_PCRTC_GPIO_EXT); - -- regp->crtc_cfg = NV_PCRTC_CONFIG_START_ADDRESS_HSYNC; -+ if (dev_priv->card_type >= NV_10) -+ regp->crtc_cfg = NV10_PCRTC_CONFIG_START_ADDRESS_HSYNC; -+ else -+ regp->crtc_cfg = NV04_PCRTC_CONFIG_START_ADDRESS_HSYNC; - - /* Some misc regs */ - if (dev_priv->card_type == NV_40) { -@@ -673,6 +671,7 @@ - if (nv_two_heads(dev)) - NVSetOwner(dev, nv_crtc->index); - -+ drm_vblank_pre_modeset(dev, nv_crtc->index); - funcs->dpms(crtc, DRM_MODE_DPMS_OFF); - - NVBlankScreen(dev, nv_crtc->index, true); -@@ -705,6 +704,7 @@ - #endif - - funcs->dpms(crtc, DRM_MODE_DPMS_ON); -+ drm_vblank_post_modeset(dev, nv_crtc->index); - } - - static void nv_crtc_destroy(struct drm_crtc *crtc) -@@ -718,6 +718,7 @@ - - drm_crtc_cleanup(crtc); - -+ nouveau_bo_unmap(nv_crtc->cursor.nvbo); - nouveau_bo_ref(NULL, &nv_crtc->cursor.nvbo); - kfree(nv_crtc); - } -@@ -815,7 +816,7 @@ - /* Update the framebuffer location. */ - regp->fb_start = nv_crtc->fb.offset & ~3; - regp->fb_start += (y * drm_fb->pitch) + (x * drm_fb->bits_per_pixel / 8); -- NVWriteCRTC(dev, nv_crtc->index, NV_PCRTC_START, regp->fb_start); -+ nv_set_crtc_base(dev, nv_crtc->index, regp->fb_start); - - /* Update the arbitration parameters. */ - nouveau_calc_arb(dev, crtc->mode.clock, drm_fb->bits_per_pixel, -@@ -826,7 +827,7 @@ - crtc_wr_cio_state(crtc, regp, NV_CIO_CRE_FF_INDEX); - crtc_wr_cio_state(crtc, regp, NV_CIO_CRE_FFLWM__INDEX); - -- if (dev_priv->card_type >= NV_30) { -+ if (dev_priv->card_type >= NV_20) { - regp->CRTC[NV_CIO_CRE_47] = arb_lwm >> 8; - crtc_wr_cio_state(crtc, regp, NV_CIO_CRE_47); - } -@@ -952,6 +953,7 @@ - .cursor_move = nv04_crtc_cursor_move, - .gamma_set = nv_crtc_gamma_set, - .set_config = drm_crtc_helper_set_config, -+ .page_flip = nouveau_crtc_page_flip, - .destroy = nv_crtc_destroy, - }; - -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_dac.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_dac.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv04_dac.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_dac.c 2010-11-05 00:40:00.000000000 +0100 -@@ -291,6 +291,8 @@ - msleep(5); - - sample = NVReadRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL + regoffset); -+ /* do it again just in case it's a residual current */ -+ sample &= NVReadRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL + regoffset); - - temp = NVReadRAMDAC(dev, head, NV_PRAMDAC_TEST_CONTROL); - NVWriteRAMDAC(dev, head, NV_PRAMDAC_TEST_CONTROL, -@@ -343,22 +345,13 @@ - { - struct drm_encoder_helper_funcs *helper = encoder->helper_private; - struct drm_device *dev = encoder->dev; -- struct drm_nouveau_private *dev_priv = dev->dev_private; - int head = nouveau_crtc(encoder->crtc)->index; -- struct nv04_crtc_reg *crtcstate = dev_priv->mode_reg.crtc_reg; - - helper->dpms(encoder, DRM_MODE_DPMS_OFF); - - nv04_dfp_disable(dev, head); -- -- /* Some NV4x have unknown values (0x3f, 0x50, 0x54, 0x6b, 0x79, 0x7f) -- * at LCD__INDEX which we don't alter -- */ -- if (!(crtcstate[head].CRTC[NV_CIO_CRE_LCD__INDEX] & 0x44)) -- crtcstate[head].CRTC[NV_CIO_CRE_LCD__INDEX] = 0; - } - -- - static void nv04_dac_mode_set(struct drm_encoder *encoder, - struct drm_display_mode *mode, - struct drm_display_mode *adjusted_mode) -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_dfp.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_dfp.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv04_dfp.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_dfp.c 2010-11-05 00:40:00.000000000 +0100 -@@ -104,6 +104,8 @@ - } - /* don't inadvertently turn it on when state written later */ - crtcstate[head].fp_control = FP_TG_CONTROL_OFF; -+ crtcstate[head].CRTC[NV_CIO_CRE_LCD__INDEX] &= -+ ~NV_CIO_CRE_LCD_ROUTE_MASK; - } - - void nv04_dfp_update_fp_control(struct drm_encoder *encoder, int mode) -@@ -183,14 +185,15 @@ - struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); - struct nouveau_connector *nv_connector = nouveau_encoder_connector_get(nv_encoder); - -- /* For internal panels and gpu scaling on DVI we need the native mode */ -- if (nv_connector->scaling_mode != DRM_MODE_SCALE_NONE) { -- if (!nv_connector->native_mode) -- return false; -+ if (!nv_connector->native_mode || -+ nv_connector->scaling_mode == DRM_MODE_SCALE_NONE || -+ mode->hdisplay > nv_connector->native_mode->hdisplay || -+ mode->vdisplay > nv_connector->native_mode->vdisplay) { -+ nv_encoder->mode = *adjusted_mode; -+ -+ } else { - nv_encoder->mode = *nv_connector->native_mode; - adjusted_mode->clock = nv_connector->native_mode->clock; -- } else { -- nv_encoder->mode = *adjusted_mode; - } - - return true; -@@ -253,26 +256,21 @@ - - nv04_dfp_prepare_sel_clk(dev, nv_encoder, head); - -- /* Some NV4x have unknown values (0x3f, 0x50, 0x54, 0x6b, 0x79, 0x7f) -- * at LCD__INDEX which we don't alter -- */ -- if (!(*cr_lcd & 0x44)) { -- *cr_lcd = 0x3; -+ *cr_lcd = (*cr_lcd & ~NV_CIO_CRE_LCD_ROUTE_MASK) | 0x3; - -- if (nv_two_heads(dev)) { -- if (nv_encoder->dcb->location == DCB_LOC_ON_CHIP) -- *cr_lcd |= head ? 0x0 : 0x8; -- else { -- *cr_lcd |= (nv_encoder->dcb->or << 4) & 0x30; -- if (nv_encoder->dcb->type == OUTPUT_LVDS) -- *cr_lcd |= 0x30; -- if ((*cr_lcd & 0x30) == (*cr_lcd_oth & 0x30)) { -- /* avoid being connected to both crtcs */ -- *cr_lcd_oth &= ~0x30; -- NVWriteVgaCrtc(dev, head ^ 1, -- NV_CIO_CRE_LCD__INDEX, -- *cr_lcd_oth); -- } -+ if (nv_two_heads(dev)) { -+ if (nv_encoder->dcb->location == DCB_LOC_ON_CHIP) -+ *cr_lcd |= head ? 0x0 : 0x8; -+ else { -+ *cr_lcd |= (nv_encoder->dcb->or << 4) & 0x30; -+ if (nv_encoder->dcb->type == OUTPUT_LVDS) -+ *cr_lcd |= 0x30; -+ if ((*cr_lcd & 0x30) == (*cr_lcd_oth & 0x30)) { -+ /* avoid being connected to both crtcs */ -+ *cr_lcd_oth &= ~0x30; -+ NVWriteVgaCrtc(dev, head ^ 1, -+ NV_CIO_CRE_LCD__INDEX, -+ *cr_lcd_oth); - } - } - } -@@ -640,7 +638,7 @@ - get_tmds_slave(encoder)) - return; - -- type = nouveau_i2c_identify(dev, "TMDS transmitter", info, 2); -+ type = nouveau_i2c_identify(dev, "TMDS transmitter", info, NULL, 2); - if (type < 0) - return; - -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_fbcon.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_fbcon.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv04_fbcon.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_fbcon.c 2010-11-05 00:40:00.000000000 +0100 -@@ -25,54 +25,42 @@ - #include "drmP.h" - #include "nouveau_drv.h" - #include "nouveau_dma.h" -+#include "nouveau_ramht.h" - #include "nouveau_fbcon.h" - --void -+int - nv04_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region) - { - struct nouveau_fbdev *nfbdev = info->par; - struct drm_device *dev = nfbdev->dev; - struct drm_nouveau_private *dev_priv = dev->dev_private; - struct nouveau_channel *chan = dev_priv->channel; -+ int ret; - -- if (info->state != FBINFO_STATE_RUNNING) -- return; -- -- if (!(info->flags & FBINFO_HWACCEL_DISABLED) && RING_SPACE(chan, 4)) { -- nouveau_fbcon_gpu_lockup(info); -- } -- -- if (info->flags & FBINFO_HWACCEL_DISABLED) { -- cfb_copyarea(info, region); -- return; -- } -+ ret = RING_SPACE(chan, 4); -+ if (ret) -+ return ret; - - BEGIN_RING(chan, NvSubImageBlit, 0x0300, 3); - OUT_RING(chan, (region->sy << 16) | region->sx); - OUT_RING(chan, (region->dy << 16) | region->dx); - OUT_RING(chan, (region->height << 16) | region->width); - FIRE_RING(chan); -+ return 0; - } - --void -+int - nv04_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect) - { - struct nouveau_fbdev *nfbdev = info->par; - struct drm_device *dev = nfbdev->dev; - struct drm_nouveau_private *dev_priv = dev->dev_private; - struct nouveau_channel *chan = dev_priv->channel; -+ int ret; - -- if (info->state != FBINFO_STATE_RUNNING) -- return; -- -- if (!(info->flags & FBINFO_HWACCEL_DISABLED) && RING_SPACE(chan, 7)) { -- nouveau_fbcon_gpu_lockup(info); -- } -- -- if (info->flags & FBINFO_HWACCEL_DISABLED) { -- cfb_fillrect(info, rect); -- return; -- } -+ ret = RING_SPACE(chan, 7); -+ if (ret) -+ return ret; - - BEGIN_RING(chan, NvSubGdiRect, 0x02fc, 1); - OUT_RING(chan, (rect->rop != ROP_COPY) ? 1 : 3); -@@ -86,9 +74,10 @@ - OUT_RING(chan, (rect->dx << 16) | rect->dy); - OUT_RING(chan, (rect->width << 16) | rect->height); - FIRE_RING(chan); -+ return 0; - } - --void -+int - nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) - { - struct nouveau_fbdev *nfbdev = info->par; -@@ -100,23 +89,14 @@ - uint32_t dsize; - uint32_t width; - uint32_t *data = (uint32_t *)image->data; -+ int ret; - -- if (info->state != FBINFO_STATE_RUNNING) -- return; -- -- if (image->depth != 1) { -- cfb_imageblit(info, image); -- return; -- } -- -- if (!(info->flags & FBINFO_HWACCEL_DISABLED) && RING_SPACE(chan, 8)) { -- nouveau_fbcon_gpu_lockup(info); -- } -+ if (image->depth != 1) -+ return -ENODEV; - -- if (info->flags & FBINFO_HWACCEL_DISABLED) { -- cfb_imageblit(info, image); -- return; -- } -+ ret = RING_SPACE(chan, 8); -+ if (ret) -+ return ret; - - width = ALIGN(image->width, 8); - dsize = ALIGN(width * image->height, 32) >> 5; -@@ -143,11 +123,9 @@ - while (dsize) { - int iter_len = dsize > 128 ? 128 : dsize; - -- if (RING_SPACE(chan, iter_len + 1)) { -- nouveau_fbcon_gpu_lockup(info); -- cfb_imageblit(info, image); -- return; -- } -+ ret = RING_SPACE(chan, iter_len + 1); -+ if (ret) -+ return ret; - - BEGIN_RING(chan, NvSubGdiRect, 0x0c00, iter_len); - OUT_RINGp(chan, data, iter_len); -@@ -156,6 +134,7 @@ - } - - FIRE_RING(chan); -+ return 0; - } - - static int -@@ -169,11 +148,9 @@ - if (ret) - return ret; - -- ret = nouveau_gpuobj_ref_add(dev, dev_priv->channel, handle, obj, NULL); -- if (ret) -- return ret; -- -- return 0; -+ ret = nouveau_ramht_insert(dev_priv->channel, handle, obj); -+ nouveau_gpuobj_ref(NULL, &obj); -+ return ret; - } - - int -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_fifo.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_fifo.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv04_fifo.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_fifo.c 2010-11-05 00:40:00.000000000 +0100 -@@ -27,8 +27,9 @@ - #include "drmP.h" - #include "drm.h" - #include "nouveau_drv.h" -+#include "nouveau_ramht.h" - --#define NV04_RAMFC(c) (dev_priv->ramfc_offset + ((c) * NV04_RAMFC__SIZE)) -+#define NV04_RAMFC(c) (dev_priv->ramfc->pinst + ((c) * NV04_RAMFC__SIZE)) - #define NV04_RAMFC__SIZE 32 - #define NV04_RAMFC_DMA_PUT 0x00 - #define NV04_RAMFC_DMA_GET 0x04 -@@ -38,10 +39,8 @@ - #define NV04_RAMFC_ENGINE 0x14 - #define NV04_RAMFC_PULL1_ENGINE 0x18 - --#define RAMFC_WR(offset, val) nv_wo32(dev, chan->ramfc->gpuobj, \ -- NV04_RAMFC_##offset/4, (val)) --#define RAMFC_RD(offset) nv_ro32(dev, chan->ramfc->gpuobj, \ -- NV04_RAMFC_##offset/4) -+#define RAMFC_WR(offset, val) nv_wo32(chan->ramfc, NV04_RAMFC_##offset, (val)) -+#define RAMFC_RD(offset) nv_ro32(chan->ramfc, NV04_RAMFC_##offset) - - void - nv04_fifo_disable(struct drm_device *dev) -@@ -72,37 +71,32 @@ - } - - bool --nv04_fifo_cache_flush(struct drm_device *dev) --{ -- struct drm_nouveau_private *dev_priv = dev->dev_private; -- struct nouveau_timer_engine *ptimer = &dev_priv->engine.timer; -- uint64_t start = ptimer->read(dev); -- -- do { -- if (nv_rd32(dev, NV03_PFIFO_CACHE1_GET) == -- nv_rd32(dev, NV03_PFIFO_CACHE1_PUT)) -- return true; -- -- } while (ptimer->read(dev) - start < 100000000); -- -- NV_ERROR(dev, "Timeout flushing the PFIFO cache.\n"); -- -- return false; --} -- --bool - nv04_fifo_cache_pull(struct drm_device *dev, bool enable) - { -- uint32_t pull = nv_rd32(dev, NV04_PFIFO_CACHE1_PULL0); -+ int pull = nv_mask(dev, NV04_PFIFO_CACHE1_PULL0, 1, enable); -+ -+ if (!enable) { -+ /* In some cases the PFIFO puller may be left in an -+ * inconsistent state if you try to stop it when it's -+ * busy translating handles. Sometimes you get a -+ * PFIFO_CACHE_ERROR, sometimes it just fails silently -+ * sending incorrect instance offsets to PGRAPH after -+ * it's started up again. To avoid the latter we -+ * invalidate the most recently calculated instance. -+ */ -+ if (!nv_wait(dev, NV04_PFIFO_CACHE1_PULL0, -+ NV04_PFIFO_CACHE1_PULL0_HASH_BUSY, 0)) -+ NV_ERROR(dev, "Timeout idling the PFIFO puller.\n"); -+ -+ if (nv_rd32(dev, NV04_PFIFO_CACHE1_PULL0) & -+ NV04_PFIFO_CACHE1_PULL0_HASH_FAILED) -+ nv_wr32(dev, NV03_PFIFO_INTR_0, -+ NV_PFIFO_INTR_CACHE_ERROR); - -- if (enable) { -- nv_wr32(dev, NV04_PFIFO_CACHE1_PULL0, pull | 1); -- } else { -- nv_wr32(dev, NV04_PFIFO_CACHE1_PULL0, pull & ~1); - nv_wr32(dev, NV04_PFIFO_CACHE1_HASH, 0); - } - -- return !!(pull & 1); -+ return pull & 1; - } - - int -@@ -130,7 +124,7 @@ - NV04_RAMFC__SIZE, - NVOBJ_FLAG_ZERO_ALLOC | - NVOBJ_FLAG_ZERO_FREE, -- NULL, &chan->ramfc); -+ &chan->ramfc); - if (ret) - return ret; - -@@ -139,7 +133,7 @@ - /* Setup initial state */ - RAMFC_WR(DMA_PUT, chan->pushbuf_base); - RAMFC_WR(DMA_GET, chan->pushbuf_base); -- RAMFC_WR(DMA_INSTANCE, chan->pushbuf->instance >> 4); -+ RAMFC_WR(DMA_INSTANCE, chan->pushbuf->pinst >> 4); - RAMFC_WR(DMA_FETCH, (NV_PFIFO_CACHE1_DMA_FETCH_TRIG_128_BYTES | - NV_PFIFO_CACHE1_DMA_FETCH_SIZE_128_BYTES | - NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_8 | -@@ -157,11 +151,28 @@ - nv04_fifo_destroy_context(struct nouveau_channel *chan) - { - struct drm_device *dev = chan->dev; -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; -+ unsigned long flags; - -- nv_wr32(dev, NV04_PFIFO_MODE, -- nv_rd32(dev, NV04_PFIFO_MODE) & ~(1 << chan->id)); -+ spin_lock_irqsave(&dev_priv->context_switch_lock, flags); -+ pfifo->reassign(dev, false); -+ -+ /* Unload the context if it's the currently active one */ -+ if (pfifo->channel_id(dev) == chan->id) { -+ pfifo->disable(dev); -+ pfifo->unload_context(dev); -+ pfifo->enable(dev); -+ } -+ -+ /* Keep it from being rescheduled */ -+ nv_mask(dev, NV04_PFIFO_MODE, 1 << chan->id, 0); -+ -+ pfifo->reassign(dev, true); -+ spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); - -- nouveau_gpuobj_ref_del(dev, &chan->ramfc); -+ /* Free the channel resources */ -+ nouveau_gpuobj_ref(NULL, &chan->ramfc); - } - - static void -@@ -214,7 +225,7 @@ - if (chid < 0 || chid >= dev_priv->engine.fifo.channels) - return 0; - -- chan = dev_priv->fifos[chid]; -+ chan = dev_priv->channels.ptr[chid]; - if (!chan) { - NV_ERROR(dev, "Inactive channel on PFIFO: %d\n", chid); - return -EINVAL; -@@ -264,10 +275,10 @@ - struct drm_nouveau_private *dev_priv = dev->dev_private; - - nv_wr32(dev, NV03_PFIFO_RAMHT, (0x03 << 24) /* search 128 */ | -- ((dev_priv->ramht_bits - 9) << 16) | -- (dev_priv->ramht_offset >> 8)); -- nv_wr32(dev, NV03_PFIFO_RAMRO, dev_priv->ramro_offset>>8); -- nv_wr32(dev, NV03_PFIFO_RAMFC, dev_priv->ramfc_offset >> 8); -+ ((dev_priv->ramht->bits - 9) << 16) | -+ (dev_priv->ramht->gpuobj->pinst >> 8)); -+ nv_wr32(dev, NV03_PFIFO_RAMRO, dev_priv->ramro->pinst >> 8); -+ nv_wr32(dev, NV03_PFIFO_RAMFC, dev_priv->ramfc->pinst >> 8); - } - - static void -@@ -295,7 +306,7 @@ - pfifo->reassign(dev, true); - - for (i = 0; i < dev_priv->engine.fifo.channels; i++) { -- if (dev_priv->fifos[i]) { -+ if (dev_priv->channels.ptr[i]) { - uint32_t mode = nv_rd32(dev, NV04_PFIFO_MODE); - nv_wr32(dev, NV04_PFIFO_MODE, mode | (1 << i)); - } -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_graph.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv04_graph.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_graph.c 2010-11-05 00:40:00.000000000 +0100 -@@ -26,6 +26,9 @@ - #include "drm.h" - #include "nouveau_drm.h" - #include "nouveau_drv.h" -+#include "nouveau_hw.h" -+ -+static int nv04_graph_register(struct drm_device *dev); - - static uint32_t nv04_graph_ctx_regs[] = { - 0x0040053c, -@@ -357,7 +360,7 @@ - if (chid >= dev_priv->engine.fifo.channels) - return NULL; - -- return dev_priv->fifos[chid]; -+ return dev_priv->channels.ptr[chid]; - } - - void -@@ -376,7 +379,7 @@ - - /* Load context for next channel */ - chid = dev_priv->engine.fifo.channel_id(dev); -- chan = dev_priv->fifos[chid]; -+ chan = dev_priv->channels.ptr[chid]; - if (chan) - nv04_graph_load_context(chan); - -@@ -412,10 +415,25 @@ - - void nv04_graph_destroy_context(struct nouveau_channel *chan) - { -+ struct drm_device *dev = chan->dev; -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; - struct graph_state *pgraph_ctx = chan->pgraph_ctx; -+ unsigned long flags; -+ -+ spin_lock_irqsave(&dev_priv->context_switch_lock, flags); -+ pgraph->fifo_access(dev, false); -+ -+ /* Unload the context if it's the currently active one */ -+ if (pgraph->channel(dev) == chan) -+ pgraph->unload_context(dev); - -+ /* Free the context resources */ - kfree(pgraph_ctx); - chan->pgraph_ctx = NULL; -+ -+ pgraph->fifo_access(dev, true); -+ spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); - } - - int nv04_graph_load_context(struct nouveau_channel *chan) -@@ -468,12 +486,17 @@ - { - struct drm_nouveau_private *dev_priv = dev->dev_private; - uint32_t tmp; -+ int ret; - - nv_wr32(dev, NV03_PMC_ENABLE, nv_rd32(dev, NV03_PMC_ENABLE) & - ~NV_PMC_ENABLE_PGRAPH); - nv_wr32(dev, NV03_PMC_ENABLE, nv_rd32(dev, NV03_PMC_ENABLE) | - NV_PMC_ENABLE_PGRAPH); - -+ ret = nv04_graph_register(dev); -+ if (ret) -+ return ret; -+ - /* Enable PGRAPH interrupts */ - nv_wr32(dev, NV03_PGRAPH_INTR, 0xFFFFFFFF); - nv_wr32(dev, NV03_PGRAPH_INTR_EN, 0xFFFFFFFF); -@@ -524,13 +547,27 @@ - } - - static int --nv04_graph_mthd_set_ref(struct nouveau_channel *chan, int grclass, -- int mthd, uint32_t data) -+nv04_graph_mthd_set_ref(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data) - { - atomic_set(&chan->fence.last_sequence_irq, data); - return 0; - } - -+int -+nv04_graph_mthd_page_flip(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data) -+{ -+ struct drm_device *dev = chan->dev; -+ struct nouveau_page_flip_state s; -+ -+ if (!nouveau_finish_page_flip(chan, &s)) -+ nv_set_crtc_base(dev, s.crtc, -+ s.offset + s.y * s.pitch + s.x * s.bpp / 8); -+ -+ return 0; -+} -+ - /* - * Software methods, why they are needed, and how they all work: - * -@@ -606,12 +643,12 @@ - */ - - static void --nv04_graph_set_ctx1(struct nouveau_channel *chan, uint32_t mask, uint32_t value) -+nv04_graph_set_ctx1(struct nouveau_channel *chan, u32 mask, u32 value) - { - struct drm_device *dev = chan->dev; -- uint32_t instance = (nv_rd32(dev, NV04_PGRAPH_CTX_SWITCH4) & 0xffff) << 4; -+ u32 instance = (nv_rd32(dev, NV04_PGRAPH_CTX_SWITCH4) & 0xffff) << 4; - int subc = (nv_rd32(dev, NV04_PGRAPH_TRAPPED_ADDR) >> 13) & 0x7; -- uint32_t tmp; -+ u32 tmp; - - tmp = nv_ri32(dev, instance); - tmp &= ~mask; -@@ -623,11 +660,11 @@ - } - - static void --nv04_graph_set_ctx_val(struct nouveau_channel *chan, uint32_t mask, uint32_t value) -+nv04_graph_set_ctx_val(struct nouveau_channel *chan, u32 mask, u32 value) - { - struct drm_device *dev = chan->dev; -- uint32_t instance = (nv_rd32(dev, NV04_PGRAPH_CTX_SWITCH4) & 0xffff) << 4; -- uint32_t tmp, ctx1; -+ u32 instance = (nv_rd32(dev, NV04_PGRAPH_CTX_SWITCH4) & 0xffff) << 4; -+ u32 tmp, ctx1; - int class, op, valid = 1; - - ctx1 = nv_ri32(dev, instance); -@@ -672,13 +709,13 @@ - } - - static int --nv04_graph_mthd_set_operation(struct nouveau_channel *chan, int grclass, -- int mthd, uint32_t data) -+nv04_graph_mthd_set_operation(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data) - { - if (data > 5) - return 1; - /* Old versions of the objects only accept first three operations. */ -- if (data > 2 && grclass < 0x40) -+ if (data > 2 && class < 0x40) - return 1; - nv04_graph_set_ctx1(chan, 0x00038000, data << 15); - /* changing operation changes set of objects needed for validation */ -@@ -687,8 +724,8 @@ - } - - static int --nv04_graph_mthd_surf3d_clip_h(struct nouveau_channel *chan, int grclass, -- int mthd, uint32_t data) -+nv04_graph_mthd_surf3d_clip_h(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data) - { - uint32_t min = data & 0xffff, max; - uint32_t w = data >> 16; -@@ -706,8 +743,8 @@ - } - - static int --nv04_graph_mthd_surf3d_clip_v(struct nouveau_channel *chan, int grclass, -- int mthd, uint32_t data) -+nv04_graph_mthd_surf3d_clip_v(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data) - { - uint32_t min = data & 0xffff, max; - uint32_t w = data >> 16; -@@ -725,8 +762,8 @@ - } - - static int --nv04_graph_mthd_bind_surf2d(struct nouveau_channel *chan, int grclass, -- int mthd, uint32_t data) -+nv04_graph_mthd_bind_surf2d(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data) - { - switch (nv_ri32(chan->dev, data << 4) & 0xff) { - case 0x30: -@@ -742,8 +779,8 @@ - } - - static int --nv04_graph_mthd_bind_surf2d_swzsurf(struct nouveau_channel *chan, int grclass, -- int mthd, uint32_t data) -+nv04_graph_mthd_bind_surf2d_swzsurf(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data) - { - switch (nv_ri32(chan->dev, data << 4) & 0xff) { - case 0x30: -@@ -763,8 +800,8 @@ - } - - static int --nv04_graph_mthd_bind_nv01_patt(struct nouveau_channel *chan, int grclass, -- int mthd, uint32_t data) -+nv04_graph_mthd_bind_nv01_patt(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data) - { - switch (nv_ri32(chan->dev, data << 4) & 0xff) { - case 0x30: -@@ -778,8 +815,8 @@ - } - - static int --nv04_graph_mthd_bind_nv04_patt(struct nouveau_channel *chan, int grclass, -- int mthd, uint32_t data) -+nv04_graph_mthd_bind_nv04_patt(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data) - { - switch (nv_ri32(chan->dev, data << 4) & 0xff) { - case 0x30: -@@ -793,8 +830,8 @@ - } - - static int --nv04_graph_mthd_bind_rop(struct nouveau_channel *chan, int grclass, -- int mthd, uint32_t data) -+nv04_graph_mthd_bind_rop(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data) - { - switch (nv_ri32(chan->dev, data << 4) & 0xff) { - case 0x30: -@@ -808,8 +845,8 @@ - } - - static int --nv04_graph_mthd_bind_beta1(struct nouveau_channel *chan, int grclass, -- int mthd, uint32_t data) -+nv04_graph_mthd_bind_beta1(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data) - { - switch (nv_ri32(chan->dev, data << 4) & 0xff) { - case 0x30: -@@ -823,8 +860,8 @@ - } - - static int --nv04_graph_mthd_bind_beta4(struct nouveau_channel *chan, int grclass, -- int mthd, uint32_t data) -+nv04_graph_mthd_bind_beta4(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data) - { - switch (nv_ri32(chan->dev, data << 4) & 0xff) { - case 0x30: -@@ -838,8 +875,8 @@ - } - - static int --nv04_graph_mthd_bind_surf_dst(struct nouveau_channel *chan, int grclass, -- int mthd, uint32_t data) -+nv04_graph_mthd_bind_surf_dst(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data) - { - switch (nv_ri32(chan->dev, data << 4) & 0xff) { - case 0x30: -@@ -853,8 +890,8 @@ - } - - static int --nv04_graph_mthd_bind_surf_src(struct nouveau_channel *chan, int grclass, -- int mthd, uint32_t data) -+nv04_graph_mthd_bind_surf_src(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data) - { - switch (nv_ri32(chan->dev, data << 4) & 0xff) { - case 0x30: -@@ -868,8 +905,8 @@ - } - - static int --nv04_graph_mthd_bind_surf_color(struct nouveau_channel *chan, int grclass, -- int mthd, uint32_t data) -+nv04_graph_mthd_bind_surf_color(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data) - { - switch (nv_ri32(chan->dev, data << 4) & 0xff) { - case 0x30: -@@ -883,8 +920,8 @@ - } - - static int --nv04_graph_mthd_bind_surf_zeta(struct nouveau_channel *chan, int grclass, -- int mthd, uint32_t data) -+nv04_graph_mthd_bind_surf_zeta(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data) - { - switch (nv_ri32(chan->dev, data << 4) & 0xff) { - case 0x30: -@@ -898,8 +935,8 @@ - } - - static int --nv04_graph_mthd_bind_clip(struct nouveau_channel *chan, int grclass, -- int mthd, uint32_t data) -+nv04_graph_mthd_bind_clip(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data) - { - switch (nv_ri32(chan->dev, data << 4) & 0xff) { - case 0x30: -@@ -913,8 +950,8 @@ - } - - static int --nv04_graph_mthd_bind_chroma(struct nouveau_channel *chan, int grclass, -- int mthd, uint32_t data) -+nv04_graph_mthd_bind_chroma(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data) - { - switch (nv_ri32(chan->dev, data << 4) & 0xff) { - case 0x30: -@@ -930,194 +967,260 @@ - return 1; - } - --static struct nouveau_pgraph_object_method nv04_graph_mthds_sw[] = { -- { 0x0150, nv04_graph_mthd_set_ref }, -- {} --}; -- --static struct nouveau_pgraph_object_method nv04_graph_mthds_nv03_gdirect[] = { -- { 0x0184, nv04_graph_mthd_bind_nv01_patt }, -- { 0x0188, nv04_graph_mthd_bind_rop }, -- { 0x018c, nv04_graph_mthd_bind_beta1 }, -- { 0x0190, nv04_graph_mthd_bind_surf_dst }, -- { 0x02fc, nv04_graph_mthd_set_operation }, -- {}, --}; -- --static struct nouveau_pgraph_object_method nv04_graph_mthds_nv04_gdirect[] = { -- { 0x0188, nv04_graph_mthd_bind_nv04_patt }, -- { 0x018c, nv04_graph_mthd_bind_rop }, -- { 0x0190, nv04_graph_mthd_bind_beta1 }, -- { 0x0194, nv04_graph_mthd_bind_beta4 }, -- { 0x0198, nv04_graph_mthd_bind_surf2d }, -- { 0x02fc, nv04_graph_mthd_set_operation }, -- {}, --}; -- --static struct nouveau_pgraph_object_method nv04_graph_mthds_nv01_imageblit[] = { -- { 0x0184, nv04_graph_mthd_bind_chroma }, -- { 0x0188, nv04_graph_mthd_bind_clip }, -- { 0x018c, nv04_graph_mthd_bind_nv01_patt }, -- { 0x0190, nv04_graph_mthd_bind_rop }, -- { 0x0194, nv04_graph_mthd_bind_beta1 }, -- { 0x0198, nv04_graph_mthd_bind_surf_dst }, -- { 0x019c, nv04_graph_mthd_bind_surf_src }, -- { 0x02fc, nv04_graph_mthd_set_operation }, -- {}, --}; -- --static struct nouveau_pgraph_object_method nv04_graph_mthds_nv04_imageblit_ifc[] = { -- { 0x0184, nv04_graph_mthd_bind_chroma }, -- { 0x0188, nv04_graph_mthd_bind_clip }, -- { 0x018c, nv04_graph_mthd_bind_nv04_patt }, -- { 0x0190, nv04_graph_mthd_bind_rop }, -- { 0x0194, nv04_graph_mthd_bind_beta1 }, -- { 0x0198, nv04_graph_mthd_bind_beta4 }, -- { 0x019c, nv04_graph_mthd_bind_surf2d }, -- { 0x02fc, nv04_graph_mthd_set_operation }, -- {}, --}; -- --static struct nouveau_pgraph_object_method nv04_graph_mthds_nv04_iifc[] = { -- { 0x0188, nv04_graph_mthd_bind_chroma }, -- { 0x018c, nv04_graph_mthd_bind_clip }, -- { 0x0190, nv04_graph_mthd_bind_nv04_patt }, -- { 0x0194, nv04_graph_mthd_bind_rop }, -- { 0x0198, nv04_graph_mthd_bind_beta1 }, -- { 0x019c, nv04_graph_mthd_bind_beta4 }, -- { 0x01a0, nv04_graph_mthd_bind_surf2d_swzsurf }, -- { 0x03e4, nv04_graph_mthd_set_operation }, -- {}, --}; -- --static struct nouveau_pgraph_object_method nv04_graph_mthds_nv01_ifc[] = { -- { 0x0184, nv04_graph_mthd_bind_chroma }, -- { 0x0188, nv04_graph_mthd_bind_clip }, -- { 0x018c, nv04_graph_mthd_bind_nv01_patt }, -- { 0x0190, nv04_graph_mthd_bind_rop }, -- { 0x0194, nv04_graph_mthd_bind_beta1 }, -- { 0x0198, nv04_graph_mthd_bind_surf_dst }, -- { 0x02fc, nv04_graph_mthd_set_operation }, -- {}, --}; -- --static struct nouveau_pgraph_object_method nv04_graph_mthds_nv03_sifc[] = { -- { 0x0184, nv04_graph_mthd_bind_chroma }, -- { 0x0188, nv04_graph_mthd_bind_nv01_patt }, -- { 0x018c, nv04_graph_mthd_bind_rop }, -- { 0x0190, nv04_graph_mthd_bind_beta1 }, -- { 0x0194, nv04_graph_mthd_bind_surf_dst }, -- { 0x02fc, nv04_graph_mthd_set_operation }, -- {}, --}; -- --static struct nouveau_pgraph_object_method nv04_graph_mthds_nv04_sifc[] = { -- { 0x0184, nv04_graph_mthd_bind_chroma }, -- { 0x0188, nv04_graph_mthd_bind_nv04_patt }, -- { 0x018c, nv04_graph_mthd_bind_rop }, -- { 0x0190, nv04_graph_mthd_bind_beta1 }, -- { 0x0194, nv04_graph_mthd_bind_beta4 }, -- { 0x0198, nv04_graph_mthd_bind_surf2d }, -- { 0x02fc, nv04_graph_mthd_set_operation }, -- {}, --}; -- --static struct nouveau_pgraph_object_method nv04_graph_mthds_nv03_sifm[] = { -- { 0x0188, nv04_graph_mthd_bind_nv01_patt }, -- { 0x018c, nv04_graph_mthd_bind_rop }, -- { 0x0190, nv04_graph_mthd_bind_beta1 }, -- { 0x0194, nv04_graph_mthd_bind_surf_dst }, -- { 0x0304, nv04_graph_mthd_set_operation }, -- {}, --}; -- --static struct nouveau_pgraph_object_method nv04_graph_mthds_nv04_sifm[] = { -- { 0x0188, nv04_graph_mthd_bind_nv04_patt }, -- { 0x018c, nv04_graph_mthd_bind_rop }, -- { 0x0190, nv04_graph_mthd_bind_beta1 }, -- { 0x0194, nv04_graph_mthd_bind_beta4 }, -- { 0x0198, nv04_graph_mthd_bind_surf2d_swzsurf }, -- { 0x0304, nv04_graph_mthd_set_operation }, -- {}, --}; -+static int -+nv04_graph_register(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; - --static struct nouveau_pgraph_object_method nv04_graph_mthds_nv01_shape[] = { -- { 0x0184, nv04_graph_mthd_bind_clip }, -- { 0x0188, nv04_graph_mthd_bind_nv01_patt }, -- { 0x018c, nv04_graph_mthd_bind_rop }, -- { 0x0190, nv04_graph_mthd_bind_beta1 }, -- { 0x0194, nv04_graph_mthd_bind_surf_dst }, -- { 0x02fc, nv04_graph_mthd_set_operation }, -- {}, --}; -+ if (dev_priv->engine.graph.registered) -+ return 0; - --static struct nouveau_pgraph_object_method nv04_graph_mthds_nv04_shape[] = { -- { 0x0184, nv04_graph_mthd_bind_clip }, -- { 0x0188, nv04_graph_mthd_bind_nv04_patt }, -- { 0x018c, nv04_graph_mthd_bind_rop }, -- { 0x0190, nv04_graph_mthd_bind_beta1 }, -- { 0x0194, nv04_graph_mthd_bind_beta4 }, -- { 0x0198, nv04_graph_mthd_bind_surf2d }, -- { 0x02fc, nv04_graph_mthd_set_operation }, -- {}, --}; -+ /* dvd subpicture */ -+ NVOBJ_CLASS(dev, 0x0038, GR); - --static struct nouveau_pgraph_object_method nv04_graph_mthds_nv03_tex_tri[] = { -- { 0x0188, nv04_graph_mthd_bind_clip }, -- { 0x018c, nv04_graph_mthd_bind_surf_color }, -- { 0x0190, nv04_graph_mthd_bind_surf_zeta }, -- {}, --}; -+ /* m2mf */ -+ NVOBJ_CLASS(dev, 0x0039, GR); - --static struct nouveau_pgraph_object_method nv04_graph_mthds_surf3d[] = { -- { 0x02f8, nv04_graph_mthd_surf3d_clip_h }, -- { 0x02fc, nv04_graph_mthd_surf3d_clip_v }, -- {}, --}; -+ /* nv03 gdirect */ -+ NVOBJ_CLASS(dev, 0x004b, GR); -+ NVOBJ_MTHD (dev, 0x004b, 0x0184, nv04_graph_mthd_bind_nv01_patt); -+ NVOBJ_MTHD (dev, 0x004b, 0x0188, nv04_graph_mthd_bind_rop); -+ NVOBJ_MTHD (dev, 0x004b, 0x018c, nv04_graph_mthd_bind_beta1); -+ NVOBJ_MTHD (dev, 0x004b, 0x0190, nv04_graph_mthd_bind_surf_dst); -+ NVOBJ_MTHD (dev, 0x004b, 0x02fc, nv04_graph_mthd_set_operation); -+ -+ /* nv04 gdirect */ -+ NVOBJ_CLASS(dev, 0x004a, GR); -+ NVOBJ_MTHD (dev, 0x004a, 0x0188, nv04_graph_mthd_bind_nv04_patt); -+ NVOBJ_MTHD (dev, 0x004a, 0x018c, nv04_graph_mthd_bind_rop); -+ NVOBJ_MTHD (dev, 0x004a, 0x0190, nv04_graph_mthd_bind_beta1); -+ NVOBJ_MTHD (dev, 0x004a, 0x0194, nv04_graph_mthd_bind_beta4); -+ NVOBJ_MTHD (dev, 0x004a, 0x0198, nv04_graph_mthd_bind_surf2d); -+ NVOBJ_MTHD (dev, 0x004a, 0x02fc, nv04_graph_mthd_set_operation); -+ -+ /* nv01 imageblit */ -+ NVOBJ_CLASS(dev, 0x001f, GR); -+ NVOBJ_MTHD (dev, 0x001f, 0x0184, nv04_graph_mthd_bind_chroma); -+ NVOBJ_MTHD (dev, 0x001f, 0x0188, nv04_graph_mthd_bind_clip); -+ NVOBJ_MTHD (dev, 0x001f, 0x018c, nv04_graph_mthd_bind_nv01_patt); -+ NVOBJ_MTHD (dev, 0x001f, 0x0190, nv04_graph_mthd_bind_rop); -+ NVOBJ_MTHD (dev, 0x001f, 0x0194, nv04_graph_mthd_bind_beta1); -+ NVOBJ_MTHD (dev, 0x001f, 0x0198, nv04_graph_mthd_bind_surf_dst); -+ NVOBJ_MTHD (dev, 0x001f, 0x019c, nv04_graph_mthd_bind_surf_src); -+ NVOBJ_MTHD (dev, 0x001f, 0x02fc, nv04_graph_mthd_set_operation); -+ -+ /* nv04 imageblit */ -+ NVOBJ_CLASS(dev, 0x005f, GR); -+ NVOBJ_MTHD (dev, 0x005f, 0x0184, nv04_graph_mthd_bind_chroma); -+ NVOBJ_MTHD (dev, 0x005f, 0x0188, nv04_graph_mthd_bind_clip); -+ NVOBJ_MTHD (dev, 0x005f, 0x018c, nv04_graph_mthd_bind_nv04_patt); -+ NVOBJ_MTHD (dev, 0x005f, 0x0190, nv04_graph_mthd_bind_rop); -+ NVOBJ_MTHD (dev, 0x005f, 0x0194, nv04_graph_mthd_bind_beta1); -+ NVOBJ_MTHD (dev, 0x005f, 0x0198, nv04_graph_mthd_bind_beta4); -+ NVOBJ_MTHD (dev, 0x005f, 0x019c, nv04_graph_mthd_bind_surf2d); -+ NVOBJ_MTHD (dev, 0x005f, 0x02fc, nv04_graph_mthd_set_operation); -+ -+ /* nv04 iifc */ -+ NVOBJ_CLASS(dev, 0x0060, GR); -+ NVOBJ_MTHD (dev, 0x0060, 0x0188, nv04_graph_mthd_bind_chroma); -+ NVOBJ_MTHD (dev, 0x0060, 0x018c, nv04_graph_mthd_bind_clip); -+ NVOBJ_MTHD (dev, 0x0060, 0x0190, nv04_graph_mthd_bind_nv04_patt); -+ NVOBJ_MTHD (dev, 0x0060, 0x0194, nv04_graph_mthd_bind_rop); -+ NVOBJ_MTHD (dev, 0x0060, 0x0198, nv04_graph_mthd_bind_beta1); -+ NVOBJ_MTHD (dev, 0x0060, 0x019c, nv04_graph_mthd_bind_beta4); -+ NVOBJ_MTHD (dev, 0x0060, 0x01a0, nv04_graph_mthd_bind_surf2d_swzsurf); -+ NVOBJ_MTHD (dev, 0x0060, 0x03e4, nv04_graph_mthd_set_operation); -+ -+ /* nv05 iifc */ -+ NVOBJ_CLASS(dev, 0x0064, GR); -+ -+ /* nv01 ifc */ -+ NVOBJ_CLASS(dev, 0x0021, GR); -+ NVOBJ_MTHD (dev, 0x0021, 0x0184, nv04_graph_mthd_bind_chroma); -+ NVOBJ_MTHD (dev, 0x0021, 0x0188, nv04_graph_mthd_bind_clip); -+ NVOBJ_MTHD (dev, 0x0021, 0x018c, nv04_graph_mthd_bind_nv01_patt); -+ NVOBJ_MTHD (dev, 0x0021, 0x0190, nv04_graph_mthd_bind_rop); -+ NVOBJ_MTHD (dev, 0x0021, 0x0194, nv04_graph_mthd_bind_beta1); -+ NVOBJ_MTHD (dev, 0x0021, 0x0198, nv04_graph_mthd_bind_surf_dst); -+ NVOBJ_MTHD (dev, 0x0021, 0x02fc, nv04_graph_mthd_set_operation); -+ -+ /* nv04 ifc */ -+ NVOBJ_CLASS(dev, 0x0061, GR); -+ NVOBJ_MTHD (dev, 0x0061, 0x0184, nv04_graph_mthd_bind_chroma); -+ NVOBJ_MTHD (dev, 0x0061, 0x0188, nv04_graph_mthd_bind_clip); -+ NVOBJ_MTHD (dev, 0x0061, 0x018c, nv04_graph_mthd_bind_nv04_patt); -+ NVOBJ_MTHD (dev, 0x0061, 0x0190, nv04_graph_mthd_bind_rop); -+ NVOBJ_MTHD (dev, 0x0061, 0x0194, nv04_graph_mthd_bind_beta1); -+ NVOBJ_MTHD (dev, 0x0061, 0x0198, nv04_graph_mthd_bind_beta4); -+ NVOBJ_MTHD (dev, 0x0061, 0x019c, nv04_graph_mthd_bind_surf2d); -+ NVOBJ_MTHD (dev, 0x0061, 0x02fc, nv04_graph_mthd_set_operation); -+ -+ /* nv05 ifc */ -+ NVOBJ_CLASS(dev, 0x0065, GR); -+ -+ /* nv03 sifc */ -+ NVOBJ_CLASS(dev, 0x0036, GR); -+ NVOBJ_MTHD (dev, 0x0036, 0x0184, nv04_graph_mthd_bind_chroma); -+ NVOBJ_MTHD (dev, 0x0036, 0x0188, nv04_graph_mthd_bind_nv01_patt); -+ NVOBJ_MTHD (dev, 0x0036, 0x018c, nv04_graph_mthd_bind_rop); -+ NVOBJ_MTHD (dev, 0x0036, 0x0190, nv04_graph_mthd_bind_beta1); -+ NVOBJ_MTHD (dev, 0x0036, 0x0194, nv04_graph_mthd_bind_surf_dst); -+ NVOBJ_MTHD (dev, 0x0036, 0x02fc, nv04_graph_mthd_set_operation); -+ -+ /* nv04 sifc */ -+ NVOBJ_CLASS(dev, 0x0076, GR); -+ NVOBJ_MTHD (dev, 0x0076, 0x0184, nv04_graph_mthd_bind_chroma); -+ NVOBJ_MTHD (dev, 0x0076, 0x0188, nv04_graph_mthd_bind_nv04_patt); -+ NVOBJ_MTHD (dev, 0x0076, 0x018c, nv04_graph_mthd_bind_rop); -+ NVOBJ_MTHD (dev, 0x0076, 0x0190, nv04_graph_mthd_bind_beta1); -+ NVOBJ_MTHD (dev, 0x0076, 0x0194, nv04_graph_mthd_bind_beta4); -+ NVOBJ_MTHD (dev, 0x0076, 0x0198, nv04_graph_mthd_bind_surf2d); -+ NVOBJ_MTHD (dev, 0x0076, 0x02fc, nv04_graph_mthd_set_operation); -+ -+ /* nv05 sifc */ -+ NVOBJ_CLASS(dev, 0x0066, GR); -+ -+ /* nv03 sifm */ -+ NVOBJ_CLASS(dev, 0x0037, GR); -+ NVOBJ_MTHD (dev, 0x0037, 0x0188, nv04_graph_mthd_bind_nv01_patt); -+ NVOBJ_MTHD (dev, 0x0037, 0x018c, nv04_graph_mthd_bind_rop); -+ NVOBJ_MTHD (dev, 0x0037, 0x0190, nv04_graph_mthd_bind_beta1); -+ NVOBJ_MTHD (dev, 0x0037, 0x0194, nv04_graph_mthd_bind_surf_dst); -+ NVOBJ_MTHD (dev, 0x0037, 0x0304, nv04_graph_mthd_set_operation); -+ -+ /* nv04 sifm */ -+ NVOBJ_CLASS(dev, 0x0077, GR); -+ NVOBJ_MTHD (dev, 0x0077, 0x0188, nv04_graph_mthd_bind_nv04_patt); -+ NVOBJ_MTHD (dev, 0x0077, 0x018c, nv04_graph_mthd_bind_rop); -+ NVOBJ_MTHD (dev, 0x0077, 0x0190, nv04_graph_mthd_bind_beta1); -+ NVOBJ_MTHD (dev, 0x0077, 0x0194, nv04_graph_mthd_bind_beta4); -+ NVOBJ_MTHD (dev, 0x0077, 0x0198, nv04_graph_mthd_bind_surf2d_swzsurf); -+ NVOBJ_MTHD (dev, 0x0077, 0x0304, nv04_graph_mthd_set_operation); -+ -+ /* null */ -+ NVOBJ_CLASS(dev, 0x0030, GR); -+ -+ /* surf2d */ -+ NVOBJ_CLASS(dev, 0x0042, GR); -+ -+ /* rop */ -+ NVOBJ_CLASS(dev, 0x0043, GR); -+ -+ /* beta1 */ -+ NVOBJ_CLASS(dev, 0x0012, GR); -+ -+ /* beta4 */ -+ NVOBJ_CLASS(dev, 0x0072, GR); -+ -+ /* cliprect */ -+ NVOBJ_CLASS(dev, 0x0019, GR); -+ -+ /* nv01 pattern */ -+ NVOBJ_CLASS(dev, 0x0018, GR); -+ -+ /* nv04 pattern */ -+ NVOBJ_CLASS(dev, 0x0044, GR); -+ -+ /* swzsurf */ -+ NVOBJ_CLASS(dev, 0x0052, GR); -+ -+ /* surf3d */ -+ NVOBJ_CLASS(dev, 0x0053, GR); -+ NVOBJ_MTHD (dev, 0x0053, 0x02f8, nv04_graph_mthd_surf3d_clip_h); -+ NVOBJ_MTHD (dev, 0x0053, 0x02fc, nv04_graph_mthd_surf3d_clip_v); -+ -+ /* nv03 tex_tri */ -+ NVOBJ_CLASS(dev, 0x0048, GR); -+ NVOBJ_MTHD (dev, 0x0048, 0x0188, nv04_graph_mthd_bind_clip); -+ NVOBJ_MTHD (dev, 0x0048, 0x018c, nv04_graph_mthd_bind_surf_color); -+ NVOBJ_MTHD (dev, 0x0048, 0x0190, nv04_graph_mthd_bind_surf_zeta); -+ -+ /* tex_tri */ -+ NVOBJ_CLASS(dev, 0x0054, GR); -+ -+ /* multitex_tri */ -+ NVOBJ_CLASS(dev, 0x0055, GR); -+ -+ /* nv01 chroma */ -+ NVOBJ_CLASS(dev, 0x0017, GR); -+ -+ /* nv04 chroma */ -+ NVOBJ_CLASS(dev, 0x0057, GR); -+ -+ /* surf_dst */ -+ NVOBJ_CLASS(dev, 0x0058, GR); -+ -+ /* surf_src */ -+ NVOBJ_CLASS(dev, 0x0059, GR); -+ -+ /* surf_color */ -+ NVOBJ_CLASS(dev, 0x005a, GR); -+ -+ /* surf_zeta */ -+ NVOBJ_CLASS(dev, 0x005b, GR); -+ -+ /* nv01 line */ -+ NVOBJ_CLASS(dev, 0x001c, GR); -+ NVOBJ_MTHD (dev, 0x001c, 0x0184, nv04_graph_mthd_bind_clip); -+ NVOBJ_MTHD (dev, 0x001c, 0x0188, nv04_graph_mthd_bind_nv01_patt); -+ NVOBJ_MTHD (dev, 0x001c, 0x018c, nv04_graph_mthd_bind_rop); -+ NVOBJ_MTHD (dev, 0x001c, 0x0190, nv04_graph_mthd_bind_beta1); -+ NVOBJ_MTHD (dev, 0x001c, 0x0194, nv04_graph_mthd_bind_surf_dst); -+ NVOBJ_MTHD (dev, 0x001c, 0x02fc, nv04_graph_mthd_set_operation); -+ -+ /* nv04 line */ -+ NVOBJ_CLASS(dev, 0x005c, GR); -+ NVOBJ_MTHD (dev, 0x005c, 0x0184, nv04_graph_mthd_bind_clip); -+ NVOBJ_MTHD (dev, 0x005c, 0x0188, nv04_graph_mthd_bind_nv04_patt); -+ NVOBJ_MTHD (dev, 0x005c, 0x018c, nv04_graph_mthd_bind_rop); -+ NVOBJ_MTHD (dev, 0x005c, 0x0190, nv04_graph_mthd_bind_beta1); -+ NVOBJ_MTHD (dev, 0x005c, 0x0194, nv04_graph_mthd_bind_beta4); -+ NVOBJ_MTHD (dev, 0x005c, 0x0198, nv04_graph_mthd_bind_surf2d); -+ NVOBJ_MTHD (dev, 0x005c, 0x02fc, nv04_graph_mthd_set_operation); -+ -+ /* nv01 tri */ -+ NVOBJ_CLASS(dev, 0x001d, GR); -+ NVOBJ_MTHD (dev, 0x001d, 0x0184, nv04_graph_mthd_bind_clip); -+ NVOBJ_MTHD (dev, 0x001d, 0x0188, nv04_graph_mthd_bind_nv01_patt); -+ NVOBJ_MTHD (dev, 0x001d, 0x018c, nv04_graph_mthd_bind_rop); -+ NVOBJ_MTHD (dev, 0x001d, 0x0190, nv04_graph_mthd_bind_beta1); -+ NVOBJ_MTHD (dev, 0x001d, 0x0194, nv04_graph_mthd_bind_surf_dst); -+ NVOBJ_MTHD (dev, 0x001d, 0x02fc, nv04_graph_mthd_set_operation); -+ -+ /* nv04 tri */ -+ NVOBJ_CLASS(dev, 0x005d, GR); -+ NVOBJ_MTHD (dev, 0x005d, 0x0184, nv04_graph_mthd_bind_clip); -+ NVOBJ_MTHD (dev, 0x005d, 0x0188, nv04_graph_mthd_bind_nv04_patt); -+ NVOBJ_MTHD (dev, 0x005d, 0x018c, nv04_graph_mthd_bind_rop); -+ NVOBJ_MTHD (dev, 0x005d, 0x0190, nv04_graph_mthd_bind_beta1); -+ NVOBJ_MTHD (dev, 0x005d, 0x0194, nv04_graph_mthd_bind_beta4); -+ NVOBJ_MTHD (dev, 0x005d, 0x0198, nv04_graph_mthd_bind_surf2d); -+ NVOBJ_MTHD (dev, 0x005d, 0x02fc, nv04_graph_mthd_set_operation); -+ -+ /* nv01 rect */ -+ NVOBJ_CLASS(dev, 0x001e, GR); -+ NVOBJ_MTHD (dev, 0x001e, 0x0184, nv04_graph_mthd_bind_clip); -+ NVOBJ_MTHD (dev, 0x001e, 0x0188, nv04_graph_mthd_bind_nv01_patt); -+ NVOBJ_MTHD (dev, 0x001e, 0x018c, nv04_graph_mthd_bind_rop); -+ NVOBJ_MTHD (dev, 0x001e, 0x0190, nv04_graph_mthd_bind_beta1); -+ NVOBJ_MTHD (dev, 0x001e, 0x0194, nv04_graph_mthd_bind_surf_dst); -+ NVOBJ_MTHD (dev, 0x001e, 0x02fc, nv04_graph_mthd_set_operation); -+ -+ /* nv04 rect */ -+ NVOBJ_CLASS(dev, 0x005e, GR); -+ NVOBJ_MTHD (dev, 0x005e, 0x0184, nv04_graph_mthd_bind_clip); -+ NVOBJ_MTHD (dev, 0x005e, 0x0188, nv04_graph_mthd_bind_nv04_patt); -+ NVOBJ_MTHD (dev, 0x005e, 0x018c, nv04_graph_mthd_bind_rop); -+ NVOBJ_MTHD (dev, 0x005e, 0x0190, nv04_graph_mthd_bind_beta1); -+ NVOBJ_MTHD (dev, 0x005e, 0x0194, nv04_graph_mthd_bind_beta4); -+ NVOBJ_MTHD (dev, 0x005e, 0x0198, nv04_graph_mthd_bind_surf2d); -+ NVOBJ_MTHD (dev, 0x005e, 0x02fc, nv04_graph_mthd_set_operation); -+ -+ /* nvsw */ -+ NVOBJ_CLASS(dev, 0x506e, SW); -+ NVOBJ_MTHD (dev, 0x506e, 0x0150, nv04_graph_mthd_set_ref); -+ NVOBJ_MTHD (dev, 0x506e, 0x0500, nv04_graph_mthd_page_flip); - --struct nouveau_pgraph_object_class nv04_graph_grclass[] = { -- { 0x0038, false, NULL }, /* dvd subpicture */ -- { 0x0039, false, NULL }, /* m2mf */ -- { 0x004b, false, nv04_graph_mthds_nv03_gdirect }, /* nv03 gdirect */ -- { 0x004a, false, nv04_graph_mthds_nv04_gdirect }, /* nv04 gdirect */ -- { 0x001f, false, nv04_graph_mthds_nv01_imageblit }, /* nv01 imageblit */ -- { 0x005f, false, nv04_graph_mthds_nv04_imageblit_ifc }, /* nv04 imageblit */ -- { 0x0060, false, nv04_graph_mthds_nv04_iifc }, /* nv04 iifc */ -- { 0x0064, false, NULL }, /* nv05 iifc */ -- { 0x0021, false, nv04_graph_mthds_nv01_ifc }, /* nv01 ifc */ -- { 0x0061, false, nv04_graph_mthds_nv04_imageblit_ifc }, /* nv04 ifc */ -- { 0x0065, false, NULL }, /* nv05 ifc */ -- { 0x0036, false, nv04_graph_mthds_nv03_sifc }, /* nv03 sifc */ -- { 0x0076, false, nv04_graph_mthds_nv04_sifc }, /* nv04 sifc */ -- { 0x0066, false, NULL }, /* nv05 sifc */ -- { 0x0037, false, nv04_graph_mthds_nv03_sifm }, /* nv03 sifm */ -- { 0x0077, false, nv04_graph_mthds_nv04_sifm }, /* nv04 sifm */ -- { 0x0030, false, NULL }, /* null */ -- { 0x0042, false, NULL }, /* surf2d */ -- { 0x0043, false, NULL }, /* rop */ -- { 0x0012, false, NULL }, /* beta1 */ -- { 0x0072, false, NULL }, /* beta4 */ -- { 0x0019, false, NULL }, /* cliprect */ -- { 0x0018, false, NULL }, /* nv01 pattern */ -- { 0x0044, false, NULL }, /* nv04 pattern */ -- { 0x0052, false, NULL }, /* swzsurf */ -- { 0x0053, false, nv04_graph_mthds_surf3d }, /* surf3d */ -- { 0x0048, false, nv04_graph_mthds_nv03_tex_tri }, /* nv03 tex_tri */ -- { 0x0054, false, NULL }, /* tex_tri */ -- { 0x0055, false, NULL }, /* multitex_tri */ -- { 0x0017, false, NULL }, /* nv01 chroma */ -- { 0x0057, false, NULL }, /* nv04 chroma */ -- { 0x0058, false, NULL }, /* surf_dst */ -- { 0x0059, false, NULL }, /* surf_src */ -- { 0x005a, false, NULL }, /* surf_color */ -- { 0x005b, false, NULL }, /* surf_zeta */ -- { 0x001c, false, nv04_graph_mthds_nv01_shape }, /* nv01 line */ -- { 0x005c, false, nv04_graph_mthds_nv04_shape }, /* nv04 line */ -- { 0x001d, false, nv04_graph_mthds_nv01_shape }, /* nv01 tri */ -- { 0x005d, false, nv04_graph_mthds_nv04_shape }, /* nv04 tri */ -- { 0x001e, false, nv04_graph_mthds_nv01_shape }, /* nv01 rect */ -- { 0x005e, false, nv04_graph_mthds_nv04_shape }, /* nv04 rect */ -- { 0x506e, true, nv04_graph_mthds_sw }, -- {} -+ dev_priv->engine.graph.registered = true; -+ return 0; - }; -- -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_instmem.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_instmem.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv04_instmem.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_instmem.c 2010-11-05 00:40:00.000000000 +0100 -@@ -1,6 +1,7 @@ - #include "drmP.h" - #include "drm.h" - #include "nouveau_drv.h" -+#include "nouveau_ramht.h" - - /* returns the size of fifo context */ - static int -@@ -17,102 +18,51 @@ - return 32; - } - --static void --nv04_instmem_determine_amount(struct drm_device *dev) -+int nv04_instmem_init(struct drm_device *dev) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; -- int i; -+ struct nouveau_gpuobj *ramht = NULL; -+ u32 offset, length; -+ int ret; - -- /* Figure out how much instance memory we need */ -- if (dev_priv->card_type >= NV_40) { -- /* We'll want more instance memory than this on some NV4x cards. -- * There's a 16MB aperture to play with that maps onto the end -- * of vram. For now, only reserve a small piece until we know -- * more about what each chipset requires. -- */ -- switch (dev_priv->chipset) { -- case 0x40: -- case 0x47: -- case 0x49: -- case 0x4b: -- dev_priv->ramin_rsvd_vram = (2 * 1024 * 1024); -- break; -- default: -- dev_priv->ramin_rsvd_vram = (1 * 1024 * 1024); -- break; -- } -- } else { -- /*XXX: what *are* the limits on ramin_rsvd_vram = (512 * 1024); -- } -- NV_DEBUG(dev, "RAMIN size: %dKiB\n", dev_priv->ramin_rsvd_vram >> 10); -+ /* RAMIN always available */ -+ dev_priv->ramin_available = true; - -- /* Clear all of it, except the BIOS image that's in the first 64KiB */ -- for (i = 64 * 1024; i < dev_priv->ramin_rsvd_vram; i += 4) -- nv_wi32(dev, i, 0x00000000); --} -+ /* Setup shared RAMHT */ -+ ret = nouveau_gpuobj_new_fake(dev, 0x10000, ~0, 4096, -+ NVOBJ_FLAG_ZERO_ALLOC, &ramht); -+ if (ret) -+ return ret; - --static void --nv04_instmem_configure_fixed_tables(struct drm_device *dev) --{ -- struct drm_nouveau_private *dev_priv = dev->dev_private; -- struct nouveau_engine *engine = &dev_priv->engine; -+ ret = nouveau_ramht_new(dev, ramht, &dev_priv->ramht); -+ nouveau_gpuobj_ref(NULL, &ramht); -+ if (ret) -+ return ret; - -- /* FIFO hash table (RAMHT) -- * use 4k hash table at RAMIN+0x10000 -- * TODO: extend the hash table -- */ -- dev_priv->ramht_offset = 0x10000; -- dev_priv->ramht_bits = 9; -- dev_priv->ramht_size = (1 << dev_priv->ramht_bits); /* nr entries */ -- dev_priv->ramht_size *= 8; /* 2 32-bit values per entry in RAMHT */ -- NV_DEBUG(dev, "RAMHT offset=0x%x, size=%d\n", dev_priv->ramht_offset, -- dev_priv->ramht_size); -- -- /* FIFO runout table (RAMRO) - 512k at 0x11200 */ -- dev_priv->ramro_offset = 0x11200; -- dev_priv->ramro_size = 512; -- NV_DEBUG(dev, "RAMRO offset=0x%x, size=%d\n", dev_priv->ramro_offset, -- dev_priv->ramro_size); -- -- /* FIFO context table (RAMFC) -- * NV40 : Not sure exactly how to position RAMFC on some cards, -- * 0x30002 seems to position it at RAMIN+0x20000 on these -- * cards. RAMFC is 4kb (32 fifos, 128byte entries). -- * Others: Position RAMFC at RAMIN+0x11400 -- */ -- dev_priv->ramfc_size = engine->fifo.channels * -- nouveau_fifo_ctx_size(dev); -+ /* And RAMRO */ -+ ret = nouveau_gpuobj_new_fake(dev, 0x11200, ~0, 512, -+ NVOBJ_FLAG_ZERO_ALLOC, &dev_priv->ramro); -+ if (ret) -+ return ret; -+ -+ /* And RAMFC */ -+ length = dev_priv->engine.fifo.channels * nouveau_fifo_ctx_size(dev); - switch (dev_priv->card_type) { - case NV_40: -- dev_priv->ramfc_offset = 0x20000; -+ offset = 0x20000; - break; -- case NV_30: -- case NV_20: -- case NV_10: -- case NV_04: - default: -- dev_priv->ramfc_offset = 0x11400; -+ offset = 0x11400; - break; - } -- NV_DEBUG(dev, "RAMFC offset=0x%x, size=%d\n", dev_priv->ramfc_offset, -- dev_priv->ramfc_size); --} - --int nv04_instmem_init(struct drm_device *dev) --{ -- struct drm_nouveau_private *dev_priv = dev->dev_private; -- uint32_t offset; -- int ret; -- -- nv04_instmem_determine_amount(dev); -- nv04_instmem_configure_fixed_tables(dev); -+ ret = nouveau_gpuobj_new_fake(dev, offset, ~0, length, -+ NVOBJ_FLAG_ZERO_ALLOC, &dev_priv->ramfc); -+ if (ret) -+ return ret; - -- /* Create a heap to manage RAMIN allocations, we don't allocate -- * the space that was reserved for RAMHT/FC/RO. -- */ -- offset = dev_priv->ramfc_offset + dev_priv->ramfc_size; -+ /* Only allow space after RAMFC to be used for object allocation */ -+ offset += length; - - /* It appears RAMRO (or something?) is controlled by 0x2220/0x2230 - * on certain NV4x chipsets as well as RAMFC. When 0x2230 == 0 -@@ -140,46 +90,34 @@ - void - nv04_instmem_takedown(struct drm_device *dev) - { -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ -+ nouveau_ramht_ref(NULL, &dev_priv->ramht, NULL); -+ nouveau_gpuobj_ref(NULL, &dev_priv->ramro); -+ nouveau_gpuobj_ref(NULL, &dev_priv->ramfc); - } - - int --nv04_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj, uint32_t *sz) -+nv04_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj, -+ u32 *size, u32 align) - { -- if (gpuobj->im_backing) -- return -EINVAL; -- - return 0; - } - - void - nv04_instmem_clear(struct drm_device *dev, struct nouveau_gpuobj *gpuobj) - { -- struct drm_nouveau_private *dev_priv = dev->dev_private; -- -- if (gpuobj && gpuobj->im_backing) { -- if (gpuobj->im_bound) -- dev_priv->engine.instmem.unbind(dev, gpuobj); -- gpuobj->im_backing = NULL; -- } - } - - int - nv04_instmem_bind(struct drm_device *dev, struct nouveau_gpuobj *gpuobj) - { -- if (!gpuobj->im_pramin || gpuobj->im_bound) -- return -EINVAL; -- -- gpuobj->im_bound = 1; - return 0; - } - - int - nv04_instmem_unbind(struct drm_device *dev, struct nouveau_gpuobj *gpuobj) - { -- if (gpuobj->im_bound == 0) -- return -EINVAL; -- -- gpuobj->im_bound = 0; - return 0; - } - -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_pm.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_pm.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv04_pm.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_pm.c 2010-11-05 00:40:00.000000000 +0100 -@@ -0,0 +1,90 @@ -+/* -+ * Copyright 2010 Red Hat Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining a -+ * copy of this software and associated documentation files (the "Software"), -+ * to deal in the Software without restriction, including without limitation -+ * the rights to use, copy, modify, merge, publish, distribute, sublicense, -+ * and/or sell copies of the Software, and to permit persons to whom the -+ * Software is furnished to do so, subject to the following conditions: -+ * -+ * The above copyright notice and this permission notice shall be included in -+ * all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR -+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -+ * OTHER DEALINGS IN THE SOFTWARE. -+ * -+ * Authors: Ben Skeggs -+ */ -+ -+#include "drmP.h" -+#include "nouveau_drv.h" -+#include "nouveau_hw.h" -+#include "nouveau_pm.h" -+ -+struct nv04_pm_state { -+ struct pll_lims pll; -+ struct nouveau_pll_vals calc; -+}; -+ -+int -+nv04_pm_clock_get(struct drm_device *dev, u32 id) -+{ -+ return nouveau_hw_get_clock(dev, id); -+} -+ -+void * -+nv04_pm_clock_pre(struct drm_device *dev, struct nouveau_pm_level *perflvl, -+ u32 id, int khz) -+{ -+ struct nv04_pm_state *state; -+ int ret; -+ -+ state = kzalloc(sizeof(*state), GFP_KERNEL); -+ if (!state) -+ return ERR_PTR(-ENOMEM); -+ -+ ret = get_pll_limits(dev, id, &state->pll); -+ if (ret) { -+ kfree(state); -+ return (ret == -ENOENT) ? NULL : ERR_PTR(ret); -+ } -+ -+ ret = nouveau_calc_pll_mnp(dev, &state->pll, khz, &state->calc); -+ if (!ret) { -+ kfree(state); -+ return ERR_PTR(-EINVAL); -+ } -+ -+ return state; -+} -+ -+void -+nv04_pm_clock_set(struct drm_device *dev, void *pre_state) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nv04_pm_state *state = pre_state; -+ u32 reg = state->pll.reg; -+ -+ /* thank the insane nouveau_hw_setpll() interface for this */ -+ if (dev_priv->card_type >= NV_40) -+ reg += 4; -+ -+ nouveau_hw_setpll(dev, reg, &state->calc); -+ -+ if (dev_priv->card_type < NV_30 && reg == NV_PRAMDAC_MPLL_COEFF) { -+ if (dev_priv->card_type == NV_20) -+ nv_mask(dev, 0x1002c4, 0, 1 << 20); -+ -+ /* Reset the DLLs */ -+ nv_mask(dev, 0x1002c0, 0, 1 << 8); -+ } -+ -+ kfree(state); -+} -+ -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv04_tv.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_tv.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv04_tv.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv04_tv.c 2010-11-05 00:40:00.000000000 +0100 -@@ -49,8 +49,8 @@ - - int nv04_tv_identify(struct drm_device *dev, int i2c_index) - { -- return nouveau_i2c_identify(dev, "TV encoder", -- nv04_tv_encoder_info, i2c_index); -+ return nouveau_i2c_identify(dev, "TV encoder", nv04_tv_encoder_info, -+ NULL, i2c_index); - } - - -@@ -99,12 +99,10 @@ - - state->tv_setup = 0; - -- if (bind) { -- state->CRTC[NV_CIO_CRE_LCD__INDEX] = 0; -+ if (bind) - state->CRTC[NV_CIO_CRE_49] |= 0x10; -- } else { -+ else - state->CRTC[NV_CIO_CRE_49] &= ~0x10; -- } - - NVWriteVgaCrtc(dev, head, NV_CIO_CRE_LCD__INDEX, - state->CRTC[NV_CIO_CRE_LCD__INDEX]); -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv10_fb.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv10_fb.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv10_fb.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv10_fb.c 2010-11-05 00:40:00.000000000 +0100 -@@ -3,23 +3,109 @@ - #include "nouveau_drv.h" - #include "nouveau_drm.h" - -+static struct drm_mm_node * -+nv20_fb_alloc_tag(struct drm_device *dev, uint32_t size) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_fb_engine *pfb = &dev_priv->engine.fb; -+ struct drm_mm_node *mem; -+ int ret; -+ -+ ret = drm_mm_pre_get(&pfb->tag_heap); -+ if (ret) -+ return NULL; -+ -+ spin_lock(&dev_priv->tile.lock); -+ mem = drm_mm_search_free(&pfb->tag_heap, size, 0, 0); -+ if (mem) -+ mem = drm_mm_get_block_atomic(mem, size, 0); -+ spin_unlock(&dev_priv->tile.lock); -+ -+ return mem; -+} -+ -+static void -+nv20_fb_free_tag(struct drm_device *dev, struct drm_mm_node *mem) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ -+ spin_lock(&dev_priv->tile.lock); -+ drm_mm_put_block(mem); -+ spin_unlock(&dev_priv->tile.lock); -+} -+ -+void -+nv10_fb_init_tile_region(struct drm_device *dev, int i, uint32_t addr, -+ uint32_t size, uint32_t pitch, uint32_t flags) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_tile_reg *tile = &dev_priv->tile.reg[i]; -+ int bpp = (flags & NOUVEAU_GEM_TILE_32BPP ? 32 : 16); -+ -+ tile->addr = addr; -+ tile->limit = max(1u, addr + size) - 1; -+ tile->pitch = pitch; -+ -+ if (dev_priv->card_type == NV_20) { -+ if (flags & NOUVEAU_GEM_TILE_ZETA) { -+ /* -+ * Allocate some of the on-die tag memory, -+ * used to store Z compression meta-data (most -+ * likely just a bitmap determining if a given -+ * tile is compressed or not). -+ */ -+ tile->tag_mem = nv20_fb_alloc_tag(dev, size / 256); -+ -+ if (tile->tag_mem) { -+ /* Enable Z compression */ -+ if (dev_priv->chipset >= 0x25) -+ tile->zcomp = tile->tag_mem->start | -+ (bpp == 16 ? -+ NV25_PFB_ZCOMP_MODE_16 : -+ NV25_PFB_ZCOMP_MODE_32); -+ else -+ tile->zcomp = tile->tag_mem->start | -+ NV20_PFB_ZCOMP_EN | -+ (bpp == 16 ? 0 : -+ NV20_PFB_ZCOMP_MODE_32); -+ } -+ -+ tile->addr |= 3; -+ } else { -+ tile->addr |= 1; -+ } -+ -+ } else { -+ tile->addr |= 1 << 31; -+ } -+} -+ - void --nv10_fb_set_region_tiling(struct drm_device *dev, int i, uint32_t addr, -- uint32_t size, uint32_t pitch) -+nv10_fb_free_tile_region(struct drm_device *dev, int i) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; -- uint32_t limit = max(1u, addr + size) - 1; -+ struct nouveau_tile_reg *tile = &dev_priv->tile.reg[i]; - -- if (pitch) { -- if (dev_priv->card_type >= NV_20) -- addr |= 1; -- else -- addr |= 1 << 31; -+ if (tile->tag_mem) { -+ nv20_fb_free_tag(dev, tile->tag_mem); -+ tile->tag_mem = NULL; - } - -- nv_wr32(dev, NV10_PFB_TLIMIT(i), limit); -- nv_wr32(dev, NV10_PFB_TSIZE(i), pitch); -- nv_wr32(dev, NV10_PFB_TILE(i), addr); -+ tile->addr = tile->limit = tile->pitch = tile->zcomp = 0; -+} -+ -+void -+nv10_fb_set_tile_region(struct drm_device *dev, int i) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_tile_reg *tile = &dev_priv->tile.reg[i]; -+ -+ nv_wr32(dev, NV10_PFB_TLIMIT(i), tile->limit); -+ nv_wr32(dev, NV10_PFB_TSIZE(i), tile->pitch); -+ nv_wr32(dev, NV10_PFB_TILE(i), tile->addr); -+ -+ if (dev_priv->card_type == NV_20) -+ nv_wr32(dev, NV20_PFB_ZCOMP(i), tile->zcomp); - } - - int -@@ -31,9 +117,14 @@ - - pfb->num_tiles = NV10_PFB_TILE__SIZE; - -+ if (dev_priv->card_type == NV_20) -+ drm_mm_init(&pfb->tag_heap, 0, -+ (dev_priv->chipset >= 0x25 ? -+ 64 * 1024 : 32 * 1024)); -+ - /* Turn all the tiling regions off. */ - for (i = 0; i < pfb->num_tiles; i++) -- pfb->set_region_tiling(dev, i, 0, 0, 0); -+ pfb->set_tile_region(dev, i); - - return 0; - } -@@ -41,4 +132,13 @@ - void - nv10_fb_takedown(struct drm_device *dev) - { -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_fb_engine *pfb = &dev_priv->engine.fb; -+ int i; -+ -+ for (i = 0; i < pfb->num_tiles; i++) -+ pfb->free_tile_region(dev, i); -+ -+ if (dev_priv->card_type == NV_20) -+ drm_mm_takedown(&pfb->tag_heap); - } -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv10_fifo.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv10_fifo.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv10_fifo.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv10_fifo.c 2010-11-05 00:40:00.000000000 +0100 -@@ -27,8 +27,9 @@ - #include "drmP.h" - #include "drm.h" - #include "nouveau_drv.h" -+#include "nouveau_ramht.h" - --#define NV10_RAMFC(c) (dev_priv->ramfc_offset + ((c) * NV10_RAMFC__SIZE)) -+#define NV10_RAMFC(c) (dev_priv->ramfc->pinst + ((c) * NV10_RAMFC__SIZE)) - #define NV10_RAMFC__SIZE ((dev_priv->chipset) >= 0x17 ? 64 : 32) - - int -@@ -48,7 +49,7 @@ - - ret = nouveau_gpuobj_new_fake(dev, NV10_RAMFC(chan->id), ~0, - NV10_RAMFC__SIZE, NVOBJ_FLAG_ZERO_ALLOC | -- NVOBJ_FLAG_ZERO_FREE, NULL, &chan->ramfc); -+ NVOBJ_FLAG_ZERO_FREE, &chan->ramfc); - if (ret) - return ret; - -@@ -57,7 +58,7 @@ - */ - nv_wi32(dev, fc + 0, chan->pushbuf_base); - nv_wi32(dev, fc + 4, chan->pushbuf_base); -- nv_wi32(dev, fc + 12, chan->pushbuf->instance >> 4); -+ nv_wi32(dev, fc + 12, chan->pushbuf->pinst >> 4); - nv_wi32(dev, fc + 20, NV_PFIFO_CACHE1_DMA_FETCH_TRIG_128_BYTES | - NV_PFIFO_CACHE1_DMA_FETCH_SIZE_128_BYTES | - NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_8 | -@@ -72,17 +73,6 @@ - return 0; - } - --void --nv10_fifo_destroy_context(struct nouveau_channel *chan) --{ -- struct drm_device *dev = chan->dev; -- -- nv_wr32(dev, NV04_PFIFO_MODE, -- nv_rd32(dev, NV04_PFIFO_MODE) & ~(1 << chan->id)); -- -- nouveau_gpuobj_ref_del(dev, &chan->ramfc); --} -- - static void - nv10_fifo_do_load_context(struct drm_device *dev, int chid) - { -@@ -202,14 +192,14 @@ - struct drm_nouveau_private *dev_priv = dev->dev_private; - - nv_wr32(dev, NV03_PFIFO_RAMHT, (0x03 << 24) /* search 128 */ | -- ((dev_priv->ramht_bits - 9) << 16) | -- (dev_priv->ramht_offset >> 8)); -- nv_wr32(dev, NV03_PFIFO_RAMRO, dev_priv->ramro_offset>>8); -+ ((dev_priv->ramht->bits - 9) << 16) | -+ (dev_priv->ramht->gpuobj->pinst >> 8)); -+ nv_wr32(dev, NV03_PFIFO_RAMRO, dev_priv->ramro->pinst >> 8); - - if (dev_priv->chipset < 0x17) { -- nv_wr32(dev, NV03_PFIFO_RAMFC, dev_priv->ramfc_offset >> 8); -+ nv_wr32(dev, NV03_PFIFO_RAMFC, dev_priv->ramfc->pinst >> 8); - } else { -- nv_wr32(dev, NV03_PFIFO_RAMFC, (dev_priv->ramfc_offset >> 8) | -+ nv_wr32(dev, NV03_PFIFO_RAMFC, (dev_priv->ramfc->pinst >> 8) | - (1 << 16) /* 64 Bytes entry*/); - /* XXX nvidia blob set bit 18, 21,23 for nv20 & nv30 */ - } -@@ -240,7 +230,7 @@ - pfifo->reassign(dev, true); - - for (i = 0; i < dev_priv->engine.fifo.channels; i++) { -- if (dev_priv->fifos[i]) { -+ if (dev_priv->channels.ptr[i]) { - uint32_t mode = nv_rd32(dev, NV04_PFIFO_MODE); - nv_wr32(dev, NV04_PFIFO_MODE, mode | (1 << i)); - } -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv10_graph.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv10_graph.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv10_graph.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv10_graph.c 2010-11-05 00:40:00.000000000 +0100 -@@ -27,6 +27,8 @@ - #include "nouveau_drm.h" - #include "nouveau_drv.h" - -+static int nv10_graph_register(struct drm_device *); -+ - #define NV10_FIFO_NUMBER 32 - - struct pipe_state { -@@ -802,8 +804,8 @@ - - /* Load context for next channel */ - chid = (nv_rd32(dev, NV04_PGRAPH_TRAPPED_ADDR) >> 20) & 0x1f; -- chan = dev_priv->fifos[chid]; -- if (chan) -+ chan = dev_priv->channels.ptr[chid]; -+ if (chan && chan->pgraph_ctx) - nv10_graph_load_context(chan); - - pgraph->fifo_access(dev, true); -@@ -833,7 +835,7 @@ - if (chid >= dev_priv->engine.fifo.channels) - return NULL; - -- return dev_priv->fifos[chid]; -+ return dev_priv->channels.ptr[chid]; - } - - int nv10_graph_create_context(struct nouveau_channel *chan) -@@ -875,37 +877,53 @@ - - void nv10_graph_destroy_context(struct nouveau_channel *chan) - { -+ struct drm_device *dev = chan->dev; -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; - struct graph_state *pgraph_ctx = chan->pgraph_ctx; -+ unsigned long flags; -+ -+ spin_lock_irqsave(&dev_priv->context_switch_lock, flags); -+ pgraph->fifo_access(dev, false); -+ -+ /* Unload the context if it's the currently active one */ -+ if (pgraph->channel(dev) == chan) -+ pgraph->unload_context(dev); - -+ /* Free the context resources */ - kfree(pgraph_ctx); - chan->pgraph_ctx = NULL; -+ -+ pgraph->fifo_access(dev, true); -+ spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); - } - - void --nv10_graph_set_region_tiling(struct drm_device *dev, int i, uint32_t addr, -- uint32_t size, uint32_t pitch) -+nv10_graph_set_tile_region(struct drm_device *dev, int i) - { -- uint32_t limit = max(1u, addr + size) - 1; -- -- if (pitch) -- addr |= 1 << 31; -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_tile_reg *tile = &dev_priv->tile.reg[i]; - -- nv_wr32(dev, NV10_PGRAPH_TLIMIT(i), limit); -- nv_wr32(dev, NV10_PGRAPH_TSIZE(i), pitch); -- nv_wr32(dev, NV10_PGRAPH_TILE(i), addr); -+ nv_wr32(dev, NV10_PGRAPH_TLIMIT(i), tile->limit); -+ nv_wr32(dev, NV10_PGRAPH_TSIZE(i), tile->pitch); -+ nv_wr32(dev, NV10_PGRAPH_TILE(i), tile->addr); - } - - int nv10_graph_init(struct drm_device *dev) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; - uint32_t tmp; -- int i; -+ int ret, i; - - nv_wr32(dev, NV03_PMC_ENABLE, nv_rd32(dev, NV03_PMC_ENABLE) & - ~NV_PMC_ENABLE_PGRAPH); - nv_wr32(dev, NV03_PMC_ENABLE, nv_rd32(dev, NV03_PMC_ENABLE) | - NV_PMC_ENABLE_PGRAPH); - -+ ret = nv10_graph_register(dev); -+ if (ret) -+ return ret; -+ - nv_wr32(dev, NV03_PGRAPH_INTR , 0xFFFFFFFF); - nv_wr32(dev, NV03_PGRAPH_INTR_EN, 0xFFFFFFFF); - -@@ -928,7 +946,7 @@ - - /* Turn all the tiling regions off. */ - for (i = 0; i < NV10_PFB_TILE__SIZE; i++) -- nv10_graph_set_region_tiling(dev, i, 0, 0, 0); -+ nv10_graph_set_tile_region(dev, i); - - nv_wr32(dev, NV10_PGRAPH_CTX_SWITCH(0), 0x00000000); - nv_wr32(dev, NV10_PGRAPH_CTX_SWITCH(1), 0x00000000); -@@ -951,8 +969,8 @@ - } - - static int --nv17_graph_mthd_lma_window(struct nouveau_channel *chan, int grclass, -- int mthd, uint32_t data) -+nv17_graph_mthd_lma_window(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data) - { - struct drm_device *dev = chan->dev; - struct graph_state *ctx = chan->pgraph_ctx; -@@ -1031,8 +1049,8 @@ - } - - static int --nv17_graph_mthd_lma_enable(struct nouveau_channel *chan, int grclass, -- int mthd, uint32_t data) -+nv17_graph_mthd_lma_enable(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data) - { - struct drm_device *dev = chan->dev; - struct drm_nouveau_private *dev_priv = dev->dev_private; -@@ -1050,35 +1068,52 @@ - return 0; - } - --static struct nouveau_pgraph_object_method nv17_graph_celsius_mthds[] = { -- { 0x1638, nv17_graph_mthd_lma_window }, -- { 0x163c, nv17_graph_mthd_lma_window }, -- { 0x1640, nv17_graph_mthd_lma_window }, -- { 0x1644, nv17_graph_mthd_lma_window }, -- { 0x1658, nv17_graph_mthd_lma_enable }, -- {} --}; -+static int -+nv10_graph_register(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; - --struct nouveau_pgraph_object_class nv10_graph_grclass[] = { -- { 0x0030, false, NULL }, /* null */ -- { 0x0039, false, NULL }, /* m2mf */ -- { 0x004a, false, NULL }, /* gdirect */ -- { 0x005f, false, NULL }, /* imageblit */ -- { 0x009f, false, NULL }, /* imageblit (nv12) */ -- { 0x008a, false, NULL }, /* ifc */ -- { 0x0089, false, NULL }, /* sifm */ -- { 0x0062, false, NULL }, /* surf2d */ -- { 0x0043, false, NULL }, /* rop */ -- { 0x0012, false, NULL }, /* beta1 */ -- { 0x0072, false, NULL }, /* beta4 */ -- { 0x0019, false, NULL }, /* cliprect */ -- { 0x0044, false, NULL }, /* pattern */ -- { 0x0052, false, NULL }, /* swzsurf */ -- { 0x0093, false, NULL }, /* surf3d */ -- { 0x0094, false, NULL }, /* tex_tri */ -- { 0x0095, false, NULL }, /* multitex_tri */ -- { 0x0056, false, NULL }, /* celcius (nv10) */ -- { 0x0096, false, NULL }, /* celcius (nv11) */ -- { 0x0099, false, nv17_graph_celsius_mthds }, /* celcius (nv17) */ -- {} --}; -+ if (dev_priv->engine.graph.registered) -+ return 0; -+ -+ NVOBJ_CLASS(dev, 0x506e, SW); /* nvsw */ -+ NVOBJ_CLASS(dev, 0x0030, GR); /* null */ -+ NVOBJ_CLASS(dev, 0x0039, GR); /* m2mf */ -+ NVOBJ_CLASS(dev, 0x004a, GR); /* gdirect */ -+ NVOBJ_CLASS(dev, 0x005f, GR); /* imageblit */ -+ NVOBJ_CLASS(dev, 0x009f, GR); /* imageblit (nv12) */ -+ NVOBJ_CLASS(dev, 0x008a, GR); /* ifc */ -+ NVOBJ_CLASS(dev, 0x0089, GR); /* sifm */ -+ NVOBJ_CLASS(dev, 0x0062, GR); /* surf2d */ -+ NVOBJ_CLASS(dev, 0x0043, GR); /* rop */ -+ NVOBJ_CLASS(dev, 0x0012, GR); /* beta1 */ -+ NVOBJ_CLASS(dev, 0x0072, GR); /* beta4 */ -+ NVOBJ_CLASS(dev, 0x0019, GR); /* cliprect */ -+ NVOBJ_CLASS(dev, 0x0044, GR); /* pattern */ -+ NVOBJ_CLASS(dev, 0x0052, GR); /* swzsurf */ -+ NVOBJ_CLASS(dev, 0x0093, GR); /* surf3d */ -+ NVOBJ_CLASS(dev, 0x0094, GR); /* tex_tri */ -+ NVOBJ_CLASS(dev, 0x0095, GR); /* multitex_tri */ -+ -+ /* celcius */ -+ if (dev_priv->chipset <= 0x10) { -+ NVOBJ_CLASS(dev, 0x0056, GR); -+ } else -+ if (dev_priv->chipset < 0x17 || dev_priv->chipset == 0x1a) { -+ NVOBJ_CLASS(dev, 0x0096, GR); -+ } else { -+ NVOBJ_CLASS(dev, 0x0099, GR); -+ NVOBJ_MTHD (dev, 0x0099, 0x1638, nv17_graph_mthd_lma_window); -+ NVOBJ_MTHD (dev, 0x0099, 0x163c, nv17_graph_mthd_lma_window); -+ NVOBJ_MTHD (dev, 0x0099, 0x1640, nv17_graph_mthd_lma_window); -+ NVOBJ_MTHD (dev, 0x0099, 0x1644, nv17_graph_mthd_lma_window); -+ NVOBJ_MTHD (dev, 0x0099, 0x1658, nv17_graph_mthd_lma_enable); -+ } -+ -+ /* nvsw */ -+ NVOBJ_CLASS(dev, 0x506e, SW); -+ NVOBJ_MTHD (dev, 0x506e, 0x0500, nv04_graph_mthd_page_flip); -+ -+ dev_priv->engine.graph.registered = true; -+ return 0; -+} -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv17_tv.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv17_tv.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv17_tv.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv17_tv.c 2010-11-05 00:40:00.000000000 +0100 -@@ -193,55 +193,56 @@ - } - } - --static const struct { -- int hdisplay; -- int vdisplay; --} modes[] = { -- { 640, 400 }, -- { 640, 480 }, -- { 720, 480 }, -- { 720, 576 }, -- { 800, 600 }, -- { 1024, 768 }, -- { 1280, 720 }, -- { 1280, 1024 }, -- { 1920, 1080 } --}; -- --static int nv17_tv_get_modes(struct drm_encoder *encoder, -- struct drm_connector *connector) -+static int nv17_tv_get_ld_modes(struct drm_encoder *encoder, -+ struct drm_connector *connector) - { - struct nv17_tv_norm_params *tv_norm = get_tv_norm(encoder); -- struct drm_display_mode *mode; -- struct drm_display_mode *output_mode; -+ struct drm_display_mode *mode, *tv_mode; - int n = 0; -- int i; -- -- if (tv_norm->kind != CTV_ENC_MODE) { -- struct drm_display_mode *tv_mode; - -- for (tv_mode = nv17_tv_modes; tv_mode->hdisplay; tv_mode++) { -- mode = drm_mode_duplicate(encoder->dev, tv_mode); -+ for (tv_mode = nv17_tv_modes; tv_mode->hdisplay; tv_mode++) { -+ mode = drm_mode_duplicate(encoder->dev, tv_mode); - -- mode->clock = tv_norm->tv_enc_mode.vrefresh * -- mode->htotal / 1000 * -- mode->vtotal / 1000; -+ mode->clock = tv_norm->tv_enc_mode.vrefresh * -+ mode->htotal / 1000 * -+ mode->vtotal / 1000; - -- if (mode->flags & DRM_MODE_FLAG_DBLSCAN) -- mode->clock *= 2; -+ if (mode->flags & DRM_MODE_FLAG_DBLSCAN) -+ mode->clock *= 2; - -- if (mode->hdisplay == tv_norm->tv_enc_mode.hdisplay && -- mode->vdisplay == tv_norm->tv_enc_mode.vdisplay) -- mode->type |= DRM_MODE_TYPE_PREFERRED; -+ if (mode->hdisplay == tv_norm->tv_enc_mode.hdisplay && -+ mode->vdisplay == tv_norm->tv_enc_mode.vdisplay) -+ mode->type |= DRM_MODE_TYPE_PREFERRED; - -- drm_mode_probed_add(connector, mode); -- n++; -- } -- return n; -+ drm_mode_probed_add(connector, mode); -+ n++; - } - -- /* tv_norm->kind == CTV_ENC_MODE */ -- output_mode = &tv_norm->ctv_enc_mode.mode; -+ return n; -+} -+ -+static int nv17_tv_get_hd_modes(struct drm_encoder *encoder, -+ struct drm_connector *connector) -+{ -+ struct nv17_tv_norm_params *tv_norm = get_tv_norm(encoder); -+ struct drm_display_mode *output_mode = &tv_norm->ctv_enc_mode.mode; -+ struct drm_display_mode *mode; -+ const struct { -+ int hdisplay; -+ int vdisplay; -+ } modes[] = { -+ { 640, 400 }, -+ { 640, 480 }, -+ { 720, 480 }, -+ { 720, 576 }, -+ { 800, 600 }, -+ { 1024, 768 }, -+ { 1280, 720 }, -+ { 1280, 1024 }, -+ { 1920, 1080 } -+ }; -+ int i, n = 0; -+ - for (i = 0; i < ARRAY_SIZE(modes); i++) { - if (modes[i].hdisplay > output_mode->hdisplay || - modes[i].vdisplay > output_mode->vdisplay) -@@ -251,11 +252,12 @@ - modes[i].vdisplay == output_mode->vdisplay) { - mode = drm_mode_duplicate(encoder->dev, output_mode); - mode->type |= DRM_MODE_TYPE_PREFERRED; -+ - } else { - mode = drm_cvt_mode(encoder->dev, modes[i].hdisplay, -- modes[i].vdisplay, 60, false, -- output_mode->flags & DRM_MODE_FLAG_INTERLACE, -- false); -+ modes[i].vdisplay, 60, false, -+ (output_mode->flags & -+ DRM_MODE_FLAG_INTERLACE), false); - } - - /* CVT modes are sometimes unsuitable... */ -@@ -266,6 +268,7 @@ - - mode->hdisplay) * 9 / 10) & ~7; - mode->hsync_end = mode->hsync_start + 8; - } -+ - if (output_mode->vdisplay >= 1024) { - mode->vtotal = output_mode->vtotal; - mode->vsync_start = output_mode->vsync_start; -@@ -276,9 +279,21 @@ - drm_mode_probed_add(connector, mode); - n++; - } -+ - return n; - } - -+static int nv17_tv_get_modes(struct drm_encoder *encoder, -+ struct drm_connector *connector) -+{ -+ struct nv17_tv_norm_params *tv_norm = get_tv_norm(encoder); -+ -+ if (tv_norm->kind == CTV_ENC_MODE) -+ return nv17_tv_get_hd_modes(encoder, connector); -+ else -+ return nv17_tv_get_ld_modes(encoder, connector); -+} -+ - static int nv17_tv_mode_valid(struct drm_encoder *encoder, - struct drm_display_mode *mode) - { -@@ -408,15 +423,8 @@ - - } - -- /* Some NV4x have unknown values (0x3f, 0x50, 0x54, 0x6b, 0x79, 0x7f) -- * at LCD__INDEX which we don't alter -- */ -- if (!(*cr_lcd & 0x44)) { -- if (tv_norm->kind == CTV_ENC_MODE) -- *cr_lcd = 0x1 | (head ? 0x0 : 0x8); -- else -- *cr_lcd = 0; -- } -+ if (tv_norm->kind == CTV_ENC_MODE) -+ *cr_lcd |= 0x1 | (head ? 0x0 : 0x8); - - /* Set the DACCLK register */ - dacclk = (NVReadRAMDAC(dev, 0, dacclk_off) & ~0x30) | 0x1; -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv17_tv.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv17_tv.h ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv17_tv.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv17_tv.h 2010-11-05 00:40:00.000000000 +0100 -@@ -127,7 +127,8 @@ - - /* TV hardware access functions */ - --static inline void nv_write_ptv(struct drm_device *dev, uint32_t reg, uint32_t val) -+static inline void nv_write_ptv(struct drm_device *dev, uint32_t reg, -+ uint32_t val) - { - nv_wr32(dev, reg, val); - } -@@ -137,7 +138,8 @@ - return nv_rd32(dev, reg); - } - --static inline void nv_write_tv_enc(struct drm_device *dev, uint8_t reg, uint8_t val) -+static inline void nv_write_tv_enc(struct drm_device *dev, uint8_t reg, -+ uint8_t val) - { - nv_write_ptv(dev, NV_PTV_TV_INDEX, reg); - nv_write_ptv(dev, NV_PTV_TV_DATA, val); -@@ -149,8 +151,11 @@ - return nv_read_ptv(dev, NV_PTV_TV_DATA); - } - --#define nv_load_ptv(dev, state, reg) nv_write_ptv(dev, NV_PTV_OFFSET + 0x##reg, state->ptv_##reg) --#define nv_save_ptv(dev, state, reg) state->ptv_##reg = nv_read_ptv(dev, NV_PTV_OFFSET + 0x##reg) --#define nv_load_tv_enc(dev, state, reg) nv_write_tv_enc(dev, 0x##reg, state->tv_enc[0x##reg]) -+#define nv_load_ptv(dev, state, reg) \ -+ nv_write_ptv(dev, NV_PTV_OFFSET + 0x##reg, state->ptv_##reg) -+#define nv_save_ptv(dev, state, reg) \ -+ state->ptv_##reg = nv_read_ptv(dev, NV_PTV_OFFSET + 0x##reg) -+#define nv_load_tv_enc(dev, state, reg) \ -+ nv_write_tv_enc(dev, 0x##reg, state->tv_enc[0x##reg]) - - #endif -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv17_tv_modes.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv17_tv_modes.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv17_tv_modes.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv17_tv_modes.c 2010-11-05 00:40:00.000000000 +0100 -@@ -336,12 +336,17 @@ - struct filter_params *p = &fparams[k][j]; - - for (i = 0; i < 7; i++) { -- int64_t c = (p->k1 + p->ki*i + p->ki2*i*i + p->ki3*i*i*i) -- + (p->kr + p->kir*i + p->ki2r*i*i + p->ki3r*i*i*i)*rs[k] -- + (p->kf + p->kif*i + p->ki2f*i*i + p->ki3f*i*i*i)*flicker -- + (p->krf + p->kirf*i + p->ki2rf*i*i + p->ki3rf*i*i*i)*flicker*rs[k]; -+ int64_t c = (p->k1 + p->ki*i + p->ki2*i*i + -+ p->ki3*i*i*i) -+ + (p->kr + p->kir*i + p->ki2r*i*i + -+ p->ki3r*i*i*i) * rs[k] -+ + (p->kf + p->kif*i + p->ki2f*i*i + -+ p->ki3f*i*i*i) * flicker -+ + (p->krf + p->kirf*i + p->ki2rf*i*i + -+ p->ki3rf*i*i*i) * flicker * rs[k]; - -- (*filters[k])[j][i] = (c + id5/2) >> 39 & (0x1 << 31 | 0x7f << 9); -+ (*filters[k])[j][i] = (c + id5/2) >> 39 -+ & (0x1 << 31 | 0x7f << 9); - } - } - } -@@ -349,7 +354,8 @@ - - /* Hardware state saving/restoring */ - --static void tv_save_filter(struct drm_device *dev, uint32_t base, uint32_t regs[4][7]) -+static void tv_save_filter(struct drm_device *dev, uint32_t base, -+ uint32_t regs[4][7]) - { - int i, j; - uint32_t offsets[] = { base, base + 0x1c, base + 0x40, base + 0x5c }; -@@ -360,7 +366,8 @@ - } - } - --static void tv_load_filter(struct drm_device *dev, uint32_t base, uint32_t regs[4][7]) -+static void tv_load_filter(struct drm_device *dev, uint32_t base, -+ uint32_t regs[4][7]) - { - int i, j; - uint32_t offsets[] = { base, base + 0x1c, base + 0x40, base + 0x5c }; -@@ -504,10 +511,10 @@ - break; - } - -- regs->tv_enc[0x20] = interpolate(0, tv_norm->tv_enc_mode.tv_enc[0x20], 255, -- tv_enc->saturation); -- regs->tv_enc[0x22] = interpolate(0, tv_norm->tv_enc_mode.tv_enc[0x22], 255, -- tv_enc->saturation); -+ regs->tv_enc[0x20] = interpolate(0, tv_norm->tv_enc_mode.tv_enc[0x20], -+ 255, tv_enc->saturation); -+ regs->tv_enc[0x22] = interpolate(0, tv_norm->tv_enc_mode.tv_enc[0x22], -+ 255, tv_enc->saturation); - regs->tv_enc[0x25] = tv_enc->hue * 255 / 100; - - nv_load_ptv(dev, regs, 204); -@@ -541,7 +548,8 @@ - int head = nouveau_crtc(encoder->crtc)->index; - struct nv04_crtc_reg *regs = &dev_priv->mode_reg.crtc_reg[head]; - struct drm_display_mode *crtc_mode = &encoder->crtc->mode; -- struct drm_display_mode *output_mode = &get_tv_norm(encoder)->ctv_enc_mode.mode; -+ struct drm_display_mode *output_mode = -+ &get_tv_norm(encoder)->ctv_enc_mode.mode; - int overscan, hmargin, vmargin, hratio, vratio; - - /* The rescaler doesn't do the right thing for interlaced modes. */ -@@ -553,13 +561,15 @@ - hmargin = (output_mode->hdisplay - crtc_mode->hdisplay) / 2; - vmargin = (output_mode->vdisplay - crtc_mode->vdisplay) / 2; - -- hmargin = interpolate(0, min(hmargin, output_mode->hdisplay/20), hmargin, -- overscan); -- vmargin = interpolate(0, min(vmargin, output_mode->vdisplay/20), vmargin, -- overscan); -- -- hratio = crtc_mode->hdisplay * 0x800 / (output_mode->hdisplay - 2*hmargin); -- vratio = crtc_mode->vdisplay * 0x800 / (output_mode->vdisplay - 2*vmargin) & ~3; -+ hmargin = interpolate(0, min(hmargin, output_mode->hdisplay/20), -+ hmargin, overscan); -+ vmargin = interpolate(0, min(vmargin, output_mode->vdisplay/20), -+ vmargin, overscan); -+ -+ hratio = crtc_mode->hdisplay * 0x800 / -+ (output_mode->hdisplay - 2*hmargin); -+ vratio = crtc_mode->vdisplay * 0x800 / -+ (output_mode->vdisplay - 2*vmargin) & ~3; - - regs->fp_horiz_regs[FP_VALID_START] = hmargin; - regs->fp_horiz_regs[FP_VALID_END] = output_mode->hdisplay - hmargin - 1; -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv20_graph.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv20_graph.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv20_graph.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv20_graph.c 2010-11-05 00:40:00.000000000 +0100 -@@ -32,54 +32,57 @@ - #define NV34_GRCTX_SIZE (18140) - #define NV35_36_GRCTX_SIZE (22396) - -+static int nv20_graph_register(struct drm_device *); -+static int nv30_graph_register(struct drm_device *); -+ - static void - nv20_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx) - { - int i; - -- nv_wo32(dev, ctx, 0x033c/4, 0xffff0000); -- nv_wo32(dev, ctx, 0x03a0/4, 0x0fff0000); -- nv_wo32(dev, ctx, 0x03a4/4, 0x0fff0000); -- nv_wo32(dev, ctx, 0x047c/4, 0x00000101); -- nv_wo32(dev, ctx, 0x0490/4, 0x00000111); -- nv_wo32(dev, ctx, 0x04a8/4, 0x44400000); -+ nv_wo32(ctx, 0x033c, 0xffff0000); -+ nv_wo32(ctx, 0x03a0, 0x0fff0000); -+ nv_wo32(ctx, 0x03a4, 0x0fff0000); -+ nv_wo32(ctx, 0x047c, 0x00000101); -+ nv_wo32(ctx, 0x0490, 0x00000111); -+ nv_wo32(ctx, 0x04a8, 0x44400000); - for (i = 0x04d4; i <= 0x04e0; i += 4) -- nv_wo32(dev, ctx, i/4, 0x00030303); -+ nv_wo32(ctx, i, 0x00030303); - for (i = 0x04f4; i <= 0x0500; i += 4) -- nv_wo32(dev, ctx, i/4, 0x00080000); -+ nv_wo32(ctx, i, 0x00080000); - for (i = 0x050c; i <= 0x0518; i += 4) -- nv_wo32(dev, ctx, i/4, 0x01012000); -+ nv_wo32(ctx, i, 0x01012000); - for (i = 0x051c; i <= 0x0528; i += 4) -- nv_wo32(dev, ctx, i/4, 0x000105b8); -+ nv_wo32(ctx, i, 0x000105b8); - for (i = 0x052c; i <= 0x0538; i += 4) -- nv_wo32(dev, ctx, i/4, 0x00080008); -+ nv_wo32(ctx, i, 0x00080008); - for (i = 0x055c; i <= 0x0598; i += 4) -- nv_wo32(dev, ctx, i/4, 0x07ff0000); -- nv_wo32(dev, ctx, 0x05a4/4, 0x4b7fffff); -- nv_wo32(dev, ctx, 0x05fc/4, 0x00000001); -- nv_wo32(dev, ctx, 0x0604/4, 0x00004000); -- nv_wo32(dev, ctx, 0x0610/4, 0x00000001); -- nv_wo32(dev, ctx, 0x0618/4, 0x00040000); -- nv_wo32(dev, ctx, 0x061c/4, 0x00010000); -+ nv_wo32(ctx, i, 0x07ff0000); -+ nv_wo32(ctx, 0x05a4, 0x4b7fffff); -+ nv_wo32(ctx, 0x05fc, 0x00000001); -+ nv_wo32(ctx, 0x0604, 0x00004000); -+ nv_wo32(ctx, 0x0610, 0x00000001); -+ nv_wo32(ctx, 0x0618, 0x00040000); -+ nv_wo32(ctx, 0x061c, 0x00010000); - for (i = 0x1c1c; i <= 0x248c; i += 16) { -- nv_wo32(dev, ctx, (i + 0)/4, 0x10700ff9); -- nv_wo32(dev, ctx, (i + 4)/4, 0x0436086c); -- nv_wo32(dev, ctx, (i + 8)/4, 0x000c001b); -- } -- nv_wo32(dev, ctx, 0x281c/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x2830/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x285c/4, 0x40000000); -- nv_wo32(dev, ctx, 0x2860/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x2864/4, 0x3f000000); -- nv_wo32(dev, ctx, 0x286c/4, 0x40000000); -- nv_wo32(dev, ctx, 0x2870/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x2878/4, 0xbf800000); -- nv_wo32(dev, ctx, 0x2880/4, 0xbf800000); -- nv_wo32(dev, ctx, 0x34a4/4, 0x000fe000); -- nv_wo32(dev, ctx, 0x3530/4, 0x000003f8); -- nv_wo32(dev, ctx, 0x3540/4, 0x002fe000); -+ nv_wo32(ctx, (i + 0), 0x10700ff9); -+ nv_wo32(ctx, (i + 4), 0x0436086c); -+ nv_wo32(ctx, (i + 8), 0x000c001b); -+ } -+ nv_wo32(ctx, 0x281c, 0x3f800000); -+ nv_wo32(ctx, 0x2830, 0x3f800000); -+ nv_wo32(ctx, 0x285c, 0x40000000); -+ nv_wo32(ctx, 0x2860, 0x3f800000); -+ nv_wo32(ctx, 0x2864, 0x3f000000); -+ nv_wo32(ctx, 0x286c, 0x40000000); -+ nv_wo32(ctx, 0x2870, 0x3f800000); -+ nv_wo32(ctx, 0x2878, 0xbf800000); -+ nv_wo32(ctx, 0x2880, 0xbf800000); -+ nv_wo32(ctx, 0x34a4, 0x000fe000); -+ nv_wo32(ctx, 0x3530, 0x000003f8); -+ nv_wo32(ctx, 0x3540, 0x002fe000); - for (i = 0x355c; i <= 0x3578; i += 4) -- nv_wo32(dev, ctx, i/4, 0x001c527c); -+ nv_wo32(ctx, i, 0x001c527c); - } - - static void -@@ -87,58 +90,58 @@ - { - int i; - -- nv_wo32(dev, ctx, 0x035c/4, 0xffff0000); -- nv_wo32(dev, ctx, 0x03c0/4, 0x0fff0000); -- nv_wo32(dev, ctx, 0x03c4/4, 0x0fff0000); -- nv_wo32(dev, ctx, 0x049c/4, 0x00000101); -- nv_wo32(dev, ctx, 0x04b0/4, 0x00000111); -- nv_wo32(dev, ctx, 0x04c8/4, 0x00000080); -- nv_wo32(dev, ctx, 0x04cc/4, 0xffff0000); -- nv_wo32(dev, ctx, 0x04d0/4, 0x00000001); -- nv_wo32(dev, ctx, 0x04e4/4, 0x44400000); -- nv_wo32(dev, ctx, 0x04fc/4, 0x4b800000); -+ nv_wo32(ctx, 0x035c, 0xffff0000); -+ nv_wo32(ctx, 0x03c0, 0x0fff0000); -+ nv_wo32(ctx, 0x03c4, 0x0fff0000); -+ nv_wo32(ctx, 0x049c, 0x00000101); -+ nv_wo32(ctx, 0x04b0, 0x00000111); -+ nv_wo32(ctx, 0x04c8, 0x00000080); -+ nv_wo32(ctx, 0x04cc, 0xffff0000); -+ nv_wo32(ctx, 0x04d0, 0x00000001); -+ nv_wo32(ctx, 0x04e4, 0x44400000); -+ nv_wo32(ctx, 0x04fc, 0x4b800000); - for (i = 0x0510; i <= 0x051c; i += 4) -- nv_wo32(dev, ctx, i/4, 0x00030303); -+ nv_wo32(ctx, i, 0x00030303); - for (i = 0x0530; i <= 0x053c; i += 4) -- nv_wo32(dev, ctx, i/4, 0x00080000); -+ nv_wo32(ctx, i, 0x00080000); - for (i = 0x0548; i <= 0x0554; i += 4) -- nv_wo32(dev, ctx, i/4, 0x01012000); -+ nv_wo32(ctx, i, 0x01012000); - for (i = 0x0558; i <= 0x0564; i += 4) -- nv_wo32(dev, ctx, i/4, 0x000105b8); -+ nv_wo32(ctx, i, 0x000105b8); - for (i = 0x0568; i <= 0x0574; i += 4) -- nv_wo32(dev, ctx, i/4, 0x00080008); -+ nv_wo32(ctx, i, 0x00080008); - for (i = 0x0598; i <= 0x05d4; i += 4) -- nv_wo32(dev, ctx, i/4, 0x07ff0000); -- nv_wo32(dev, ctx, 0x05e0/4, 0x4b7fffff); -- nv_wo32(dev, ctx, 0x0620/4, 0x00000080); -- nv_wo32(dev, ctx, 0x0624/4, 0x30201000); -- nv_wo32(dev, ctx, 0x0628/4, 0x70605040); -- nv_wo32(dev, ctx, 0x062c/4, 0xb0a09080); -- nv_wo32(dev, ctx, 0x0630/4, 0xf0e0d0c0); -- nv_wo32(dev, ctx, 0x0664/4, 0x00000001); -- nv_wo32(dev, ctx, 0x066c/4, 0x00004000); -- nv_wo32(dev, ctx, 0x0678/4, 0x00000001); -- nv_wo32(dev, ctx, 0x0680/4, 0x00040000); -- nv_wo32(dev, ctx, 0x0684/4, 0x00010000); -+ nv_wo32(ctx, i, 0x07ff0000); -+ nv_wo32(ctx, 0x05e0, 0x4b7fffff); -+ nv_wo32(ctx, 0x0620, 0x00000080); -+ nv_wo32(ctx, 0x0624, 0x30201000); -+ nv_wo32(ctx, 0x0628, 0x70605040); -+ nv_wo32(ctx, 0x062c, 0xb0a09080); -+ nv_wo32(ctx, 0x0630, 0xf0e0d0c0); -+ nv_wo32(ctx, 0x0664, 0x00000001); -+ nv_wo32(ctx, 0x066c, 0x00004000); -+ nv_wo32(ctx, 0x0678, 0x00000001); -+ nv_wo32(ctx, 0x0680, 0x00040000); -+ nv_wo32(ctx, 0x0684, 0x00010000); - for (i = 0x1b04; i <= 0x2374; i += 16) { -- nv_wo32(dev, ctx, (i + 0)/4, 0x10700ff9); -- nv_wo32(dev, ctx, (i + 4)/4, 0x0436086c); -- nv_wo32(dev, ctx, (i + 8)/4, 0x000c001b); -- } -- nv_wo32(dev, ctx, 0x2704/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x2718/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x2744/4, 0x40000000); -- nv_wo32(dev, ctx, 0x2748/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x274c/4, 0x3f000000); -- nv_wo32(dev, ctx, 0x2754/4, 0x40000000); -- nv_wo32(dev, ctx, 0x2758/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x2760/4, 0xbf800000); -- nv_wo32(dev, ctx, 0x2768/4, 0xbf800000); -- nv_wo32(dev, ctx, 0x308c/4, 0x000fe000); -- nv_wo32(dev, ctx, 0x3108/4, 0x000003f8); -- nv_wo32(dev, ctx, 0x3468/4, 0x002fe000); -+ nv_wo32(ctx, (i + 0), 0x10700ff9); -+ nv_wo32(ctx, (i + 4), 0x0436086c); -+ nv_wo32(ctx, (i + 8), 0x000c001b); -+ } -+ nv_wo32(ctx, 0x2704, 0x3f800000); -+ nv_wo32(ctx, 0x2718, 0x3f800000); -+ nv_wo32(ctx, 0x2744, 0x40000000); -+ nv_wo32(ctx, 0x2748, 0x3f800000); -+ nv_wo32(ctx, 0x274c, 0x3f000000); -+ nv_wo32(ctx, 0x2754, 0x40000000); -+ nv_wo32(ctx, 0x2758, 0x3f800000); -+ nv_wo32(ctx, 0x2760, 0xbf800000); -+ nv_wo32(ctx, 0x2768, 0xbf800000); -+ nv_wo32(ctx, 0x308c, 0x000fe000); -+ nv_wo32(ctx, 0x3108, 0x000003f8); -+ nv_wo32(ctx, 0x3468, 0x002fe000); - for (i = 0x3484; i <= 0x34a0; i += 4) -- nv_wo32(dev, ctx, i/4, 0x001c527c); -+ nv_wo32(ctx, i, 0x001c527c); - } - - static void -@@ -146,49 +149,49 @@ - { - int i; - -- nv_wo32(dev, ctx, 0x033c/4, 0xffff0000); -- nv_wo32(dev, ctx, 0x03a0/4, 0x0fff0000); -- nv_wo32(dev, ctx, 0x03a4/4, 0x0fff0000); -- nv_wo32(dev, ctx, 0x047c/4, 0x00000101); -- nv_wo32(dev, ctx, 0x0490/4, 0x00000111); -- nv_wo32(dev, ctx, 0x04a8/4, 0x44400000); -+ nv_wo32(ctx, 0x033c, 0xffff0000); -+ nv_wo32(ctx, 0x03a0, 0x0fff0000); -+ nv_wo32(ctx, 0x03a4, 0x0fff0000); -+ nv_wo32(ctx, 0x047c, 0x00000101); -+ nv_wo32(ctx, 0x0490, 0x00000111); -+ nv_wo32(ctx, 0x04a8, 0x44400000); - for (i = 0x04d4; i <= 0x04e0; i += 4) -- nv_wo32(dev, ctx, i/4, 0x00030303); -+ nv_wo32(ctx, i, 0x00030303); - for (i = 0x04f4; i <= 0x0500; i += 4) -- nv_wo32(dev, ctx, i/4, 0x00080000); -+ nv_wo32(ctx, i, 0x00080000); - for (i = 0x050c; i <= 0x0518; i += 4) -- nv_wo32(dev, ctx, i/4, 0x01012000); -+ nv_wo32(ctx, i, 0x01012000); - for (i = 0x051c; i <= 0x0528; i += 4) -- nv_wo32(dev, ctx, i/4, 0x000105b8); -+ nv_wo32(ctx, i, 0x000105b8); - for (i = 0x052c; i <= 0x0538; i += 4) -- nv_wo32(dev, ctx, i/4, 0x00080008); -+ nv_wo32(ctx, i, 0x00080008); - for (i = 0x055c; i <= 0x0598; i += 4) -- nv_wo32(dev, ctx, i/4, 0x07ff0000); -- nv_wo32(dev, ctx, 0x05a4/4, 0x4b7fffff); -- nv_wo32(dev, ctx, 0x05fc/4, 0x00000001); -- nv_wo32(dev, ctx, 0x0604/4, 0x00004000); -- nv_wo32(dev, ctx, 0x0610/4, 0x00000001); -- nv_wo32(dev, ctx, 0x0618/4, 0x00040000); -- nv_wo32(dev, ctx, 0x061c/4, 0x00010000); -+ nv_wo32(ctx, i, 0x07ff0000); -+ nv_wo32(ctx, 0x05a4, 0x4b7fffff); -+ nv_wo32(ctx, 0x05fc, 0x00000001); -+ nv_wo32(ctx, 0x0604, 0x00004000); -+ nv_wo32(ctx, 0x0610, 0x00000001); -+ nv_wo32(ctx, 0x0618, 0x00040000); -+ nv_wo32(ctx, 0x061c, 0x00010000); - for (i = 0x1a9c; i <= 0x22fc; i += 16) { /*XXX: check!! */ -- nv_wo32(dev, ctx, (i + 0)/4, 0x10700ff9); -- nv_wo32(dev, ctx, (i + 4)/4, 0x0436086c); -- nv_wo32(dev, ctx, (i + 8)/4, 0x000c001b); -- } -- nv_wo32(dev, ctx, 0x269c/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x26b0/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x26dc/4, 0x40000000); -- nv_wo32(dev, ctx, 0x26e0/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x26e4/4, 0x3f000000); -- nv_wo32(dev, ctx, 0x26ec/4, 0x40000000); -- nv_wo32(dev, ctx, 0x26f0/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x26f8/4, 0xbf800000); -- nv_wo32(dev, ctx, 0x2700/4, 0xbf800000); -- nv_wo32(dev, ctx, 0x3024/4, 0x000fe000); -- nv_wo32(dev, ctx, 0x30a0/4, 0x000003f8); -- nv_wo32(dev, ctx, 0x33fc/4, 0x002fe000); -+ nv_wo32(ctx, (i + 0), 0x10700ff9); -+ nv_wo32(ctx, (i + 4), 0x0436086c); -+ nv_wo32(ctx, (i + 8), 0x000c001b); -+ } -+ nv_wo32(ctx, 0x269c, 0x3f800000); -+ nv_wo32(ctx, 0x26b0, 0x3f800000); -+ nv_wo32(ctx, 0x26dc, 0x40000000); -+ nv_wo32(ctx, 0x26e0, 0x3f800000); -+ nv_wo32(ctx, 0x26e4, 0x3f000000); -+ nv_wo32(ctx, 0x26ec, 0x40000000); -+ nv_wo32(ctx, 0x26f0, 0x3f800000); -+ nv_wo32(ctx, 0x26f8, 0xbf800000); -+ nv_wo32(ctx, 0x2700, 0xbf800000); -+ nv_wo32(ctx, 0x3024, 0x000fe000); -+ nv_wo32(ctx, 0x30a0, 0x000003f8); -+ nv_wo32(ctx, 0x33fc, 0x002fe000); - for (i = 0x341c; i <= 0x3438; i += 4) -- nv_wo32(dev, ctx, i/4, 0x001c527c); -+ nv_wo32(ctx, i, 0x001c527c); - } - - static void -@@ -196,57 +199,57 @@ - { - int i; - -- nv_wo32(dev, ctx, 0x0410/4, 0x00000101); -- nv_wo32(dev, ctx, 0x0424/4, 0x00000111); -- nv_wo32(dev, ctx, 0x0428/4, 0x00000060); -- nv_wo32(dev, ctx, 0x0444/4, 0x00000080); -- nv_wo32(dev, ctx, 0x0448/4, 0xffff0000); -- nv_wo32(dev, ctx, 0x044c/4, 0x00000001); -- nv_wo32(dev, ctx, 0x0460/4, 0x44400000); -- nv_wo32(dev, ctx, 0x048c/4, 0xffff0000); -+ nv_wo32(ctx, 0x0410, 0x00000101); -+ nv_wo32(ctx, 0x0424, 0x00000111); -+ nv_wo32(ctx, 0x0428, 0x00000060); -+ nv_wo32(ctx, 0x0444, 0x00000080); -+ nv_wo32(ctx, 0x0448, 0xffff0000); -+ nv_wo32(ctx, 0x044c, 0x00000001); -+ nv_wo32(ctx, 0x0460, 0x44400000); -+ nv_wo32(ctx, 0x048c, 0xffff0000); - for (i = 0x04e0; i < 0x04e8; i += 4) -- nv_wo32(dev, ctx, i/4, 0x0fff0000); -- nv_wo32(dev, ctx, 0x04ec/4, 0x00011100); -+ nv_wo32(ctx, i, 0x0fff0000); -+ nv_wo32(ctx, 0x04ec, 0x00011100); - for (i = 0x0508; i < 0x0548; i += 4) -- nv_wo32(dev, ctx, i/4, 0x07ff0000); -- nv_wo32(dev, ctx, 0x0550/4, 0x4b7fffff); -- nv_wo32(dev, ctx, 0x058c/4, 0x00000080); -- nv_wo32(dev, ctx, 0x0590/4, 0x30201000); -- nv_wo32(dev, ctx, 0x0594/4, 0x70605040); -- nv_wo32(dev, ctx, 0x0598/4, 0xb8a89888); -- nv_wo32(dev, ctx, 0x059c/4, 0xf8e8d8c8); -- nv_wo32(dev, ctx, 0x05b0/4, 0xb0000000); -+ nv_wo32(ctx, i, 0x07ff0000); -+ nv_wo32(ctx, 0x0550, 0x4b7fffff); -+ nv_wo32(ctx, 0x058c, 0x00000080); -+ nv_wo32(ctx, 0x0590, 0x30201000); -+ nv_wo32(ctx, 0x0594, 0x70605040); -+ nv_wo32(ctx, 0x0598, 0xb8a89888); -+ nv_wo32(ctx, 0x059c, 0xf8e8d8c8); -+ nv_wo32(ctx, 0x05b0, 0xb0000000); - for (i = 0x0600; i < 0x0640; i += 4) -- nv_wo32(dev, ctx, i/4, 0x00010588); -+ nv_wo32(ctx, i, 0x00010588); - for (i = 0x0640; i < 0x0680; i += 4) -- nv_wo32(dev, ctx, i/4, 0x00030303); -+ nv_wo32(ctx, i, 0x00030303); - for (i = 0x06c0; i < 0x0700; i += 4) -- nv_wo32(dev, ctx, i/4, 0x0008aae4); -+ nv_wo32(ctx, i, 0x0008aae4); - for (i = 0x0700; i < 0x0740; i += 4) -- nv_wo32(dev, ctx, i/4, 0x01012000); -+ nv_wo32(ctx, i, 0x01012000); - for (i = 0x0740; i < 0x0780; i += 4) -- nv_wo32(dev, ctx, i/4, 0x00080008); -- nv_wo32(dev, ctx, 0x085c/4, 0x00040000); -- nv_wo32(dev, ctx, 0x0860/4, 0x00010000); -+ nv_wo32(ctx, i, 0x00080008); -+ nv_wo32(ctx, 0x085c, 0x00040000); -+ nv_wo32(ctx, 0x0860, 0x00010000); - for (i = 0x0864; i < 0x0874; i += 4) -- nv_wo32(dev, ctx, i/4, 0x00040004); -+ nv_wo32(ctx, i, 0x00040004); - for (i = 0x1f18; i <= 0x3088 ; i += 16) { -- nv_wo32(dev, ctx, i/4 + 0, 0x10700ff9); -- nv_wo32(dev, ctx, i/4 + 1, 0x0436086c); -- nv_wo32(dev, ctx, i/4 + 2, 0x000c001b); -+ nv_wo32(ctx, i + 0, 0x10700ff9); -+ nv_wo32(ctx, i + 1, 0x0436086c); -+ nv_wo32(ctx, i + 2, 0x000c001b); - } - for (i = 0x30b8; i < 0x30c8; i += 4) -- nv_wo32(dev, ctx, i/4, 0x0000ffff); -- nv_wo32(dev, ctx, 0x344c/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x3808/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x381c/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x3848/4, 0x40000000); -- nv_wo32(dev, ctx, 0x384c/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x3850/4, 0x3f000000); -- nv_wo32(dev, ctx, 0x3858/4, 0x40000000); -- nv_wo32(dev, ctx, 0x385c/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x3864/4, 0xbf800000); -- nv_wo32(dev, ctx, 0x386c/4, 0xbf800000); -+ nv_wo32(ctx, i, 0x0000ffff); -+ nv_wo32(ctx, 0x344c, 0x3f800000); -+ nv_wo32(ctx, 0x3808, 0x3f800000); -+ nv_wo32(ctx, 0x381c, 0x3f800000); -+ nv_wo32(ctx, 0x3848, 0x40000000); -+ nv_wo32(ctx, 0x384c, 0x3f800000); -+ nv_wo32(ctx, 0x3850, 0x3f000000); -+ nv_wo32(ctx, 0x3858, 0x40000000); -+ nv_wo32(ctx, 0x385c, 0x3f800000); -+ nv_wo32(ctx, 0x3864, 0xbf800000); -+ nv_wo32(ctx, 0x386c, 0xbf800000); - } - - static void -@@ -254,57 +257,57 @@ - { - int i; - -- nv_wo32(dev, ctx, 0x040c/4, 0x01000101); -- nv_wo32(dev, ctx, 0x0420/4, 0x00000111); -- nv_wo32(dev, ctx, 0x0424/4, 0x00000060); -- nv_wo32(dev, ctx, 0x0440/4, 0x00000080); -- nv_wo32(dev, ctx, 0x0444/4, 0xffff0000); -- nv_wo32(dev, ctx, 0x0448/4, 0x00000001); -- nv_wo32(dev, ctx, 0x045c/4, 0x44400000); -- nv_wo32(dev, ctx, 0x0480/4, 0xffff0000); -+ nv_wo32(ctx, 0x040c, 0x01000101); -+ nv_wo32(ctx, 0x0420, 0x00000111); -+ nv_wo32(ctx, 0x0424, 0x00000060); -+ nv_wo32(ctx, 0x0440, 0x00000080); -+ nv_wo32(ctx, 0x0444, 0xffff0000); -+ nv_wo32(ctx, 0x0448, 0x00000001); -+ nv_wo32(ctx, 0x045c, 0x44400000); -+ nv_wo32(ctx, 0x0480, 0xffff0000); - for (i = 0x04d4; i < 0x04dc; i += 4) -- nv_wo32(dev, ctx, i/4, 0x0fff0000); -- nv_wo32(dev, ctx, 0x04e0/4, 0x00011100); -+ nv_wo32(ctx, i, 0x0fff0000); -+ nv_wo32(ctx, 0x04e0, 0x00011100); - for (i = 0x04fc; i < 0x053c; i += 4) -- nv_wo32(dev, ctx, i/4, 0x07ff0000); -- nv_wo32(dev, ctx, 0x0544/4, 0x4b7fffff); -- nv_wo32(dev, ctx, 0x057c/4, 0x00000080); -- nv_wo32(dev, ctx, 0x0580/4, 0x30201000); -- nv_wo32(dev, ctx, 0x0584/4, 0x70605040); -- nv_wo32(dev, ctx, 0x0588/4, 0xb8a89888); -- nv_wo32(dev, ctx, 0x058c/4, 0xf8e8d8c8); -- nv_wo32(dev, ctx, 0x05a0/4, 0xb0000000); -+ nv_wo32(ctx, i, 0x07ff0000); -+ nv_wo32(ctx, 0x0544, 0x4b7fffff); -+ nv_wo32(ctx, 0x057c, 0x00000080); -+ nv_wo32(ctx, 0x0580, 0x30201000); -+ nv_wo32(ctx, 0x0584, 0x70605040); -+ nv_wo32(ctx, 0x0588, 0xb8a89888); -+ nv_wo32(ctx, 0x058c, 0xf8e8d8c8); -+ nv_wo32(ctx, 0x05a0, 0xb0000000); - for (i = 0x05f0; i < 0x0630; i += 4) -- nv_wo32(dev, ctx, i/4, 0x00010588); -+ nv_wo32(ctx, i, 0x00010588); - for (i = 0x0630; i < 0x0670; i += 4) -- nv_wo32(dev, ctx, i/4, 0x00030303); -+ nv_wo32(ctx, i, 0x00030303); - for (i = 0x06b0; i < 0x06f0; i += 4) -- nv_wo32(dev, ctx, i/4, 0x0008aae4); -+ nv_wo32(ctx, i, 0x0008aae4); - for (i = 0x06f0; i < 0x0730; i += 4) -- nv_wo32(dev, ctx, i/4, 0x01012000); -+ nv_wo32(ctx, i, 0x01012000); - for (i = 0x0730; i < 0x0770; i += 4) -- nv_wo32(dev, ctx, i/4, 0x00080008); -- nv_wo32(dev, ctx, 0x0850/4, 0x00040000); -- nv_wo32(dev, ctx, 0x0854/4, 0x00010000); -+ nv_wo32(ctx, i, 0x00080008); -+ nv_wo32(ctx, 0x0850, 0x00040000); -+ nv_wo32(ctx, 0x0854, 0x00010000); - for (i = 0x0858; i < 0x0868; i += 4) -- nv_wo32(dev, ctx, i/4, 0x00040004); -+ nv_wo32(ctx, i, 0x00040004); - for (i = 0x15ac; i <= 0x271c ; i += 16) { -- nv_wo32(dev, ctx, i/4 + 0, 0x10700ff9); -- nv_wo32(dev, ctx, i/4 + 1, 0x0436086c); -- nv_wo32(dev, ctx, i/4 + 2, 0x000c001b); -+ nv_wo32(ctx, i + 0, 0x10700ff9); -+ nv_wo32(ctx, i + 1, 0x0436086c); -+ nv_wo32(ctx, i + 2, 0x000c001b); - } - for (i = 0x274c; i < 0x275c; i += 4) -- nv_wo32(dev, ctx, i/4, 0x0000ffff); -- nv_wo32(dev, ctx, 0x2ae0/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x2e9c/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x2eb0/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x2edc/4, 0x40000000); -- nv_wo32(dev, ctx, 0x2ee0/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x2ee4/4, 0x3f000000); -- nv_wo32(dev, ctx, 0x2eec/4, 0x40000000); -- nv_wo32(dev, ctx, 0x2ef0/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x2ef8/4, 0xbf800000); -- nv_wo32(dev, ctx, 0x2f00/4, 0xbf800000); -+ nv_wo32(ctx, i, 0x0000ffff); -+ nv_wo32(ctx, 0x2ae0, 0x3f800000); -+ nv_wo32(ctx, 0x2e9c, 0x3f800000); -+ nv_wo32(ctx, 0x2eb0, 0x3f800000); -+ nv_wo32(ctx, 0x2edc, 0x40000000); -+ nv_wo32(ctx, 0x2ee0, 0x3f800000); -+ nv_wo32(ctx, 0x2ee4, 0x3f000000); -+ nv_wo32(ctx, 0x2eec, 0x40000000); -+ nv_wo32(ctx, 0x2ef0, 0x3f800000); -+ nv_wo32(ctx, 0x2ef8, 0xbf800000); -+ nv_wo32(ctx, 0x2f00, 0xbf800000); - } - - static void -@@ -312,57 +315,57 @@ - { - int i; - -- nv_wo32(dev, ctx, 0x040c/4, 0x00000101); -- nv_wo32(dev, ctx, 0x0420/4, 0x00000111); -- nv_wo32(dev, ctx, 0x0424/4, 0x00000060); -- nv_wo32(dev, ctx, 0x0440/4, 0x00000080); -- nv_wo32(dev, ctx, 0x0444/4, 0xffff0000); -- nv_wo32(dev, ctx, 0x0448/4, 0x00000001); -- nv_wo32(dev, ctx, 0x045c/4, 0x44400000); -- nv_wo32(dev, ctx, 0x0488/4, 0xffff0000); -+ nv_wo32(ctx, 0x040c, 0x00000101); -+ nv_wo32(ctx, 0x0420, 0x00000111); -+ nv_wo32(ctx, 0x0424, 0x00000060); -+ nv_wo32(ctx, 0x0440, 0x00000080); -+ nv_wo32(ctx, 0x0444, 0xffff0000); -+ nv_wo32(ctx, 0x0448, 0x00000001); -+ nv_wo32(ctx, 0x045c, 0x44400000); -+ nv_wo32(ctx, 0x0488, 0xffff0000); - for (i = 0x04dc; i < 0x04e4; i += 4) -- nv_wo32(dev, ctx, i/4, 0x0fff0000); -- nv_wo32(dev, ctx, 0x04e8/4, 0x00011100); -+ nv_wo32(ctx, i, 0x0fff0000); -+ nv_wo32(ctx, 0x04e8, 0x00011100); - for (i = 0x0504; i < 0x0544; i += 4) -- nv_wo32(dev, ctx, i/4, 0x07ff0000); -- nv_wo32(dev, ctx, 0x054c/4, 0x4b7fffff); -- nv_wo32(dev, ctx, 0x0588/4, 0x00000080); -- nv_wo32(dev, ctx, 0x058c/4, 0x30201000); -- nv_wo32(dev, ctx, 0x0590/4, 0x70605040); -- nv_wo32(dev, ctx, 0x0594/4, 0xb8a89888); -- nv_wo32(dev, ctx, 0x0598/4, 0xf8e8d8c8); -- nv_wo32(dev, ctx, 0x05ac/4, 0xb0000000); -+ nv_wo32(ctx, i, 0x07ff0000); -+ nv_wo32(ctx, 0x054c, 0x4b7fffff); -+ nv_wo32(ctx, 0x0588, 0x00000080); -+ nv_wo32(ctx, 0x058c, 0x30201000); -+ nv_wo32(ctx, 0x0590, 0x70605040); -+ nv_wo32(ctx, 0x0594, 0xb8a89888); -+ nv_wo32(ctx, 0x0598, 0xf8e8d8c8); -+ nv_wo32(ctx, 0x05ac, 0xb0000000); - for (i = 0x0604; i < 0x0644; i += 4) -- nv_wo32(dev, ctx, i/4, 0x00010588); -+ nv_wo32(ctx, i, 0x00010588); - for (i = 0x0644; i < 0x0684; i += 4) -- nv_wo32(dev, ctx, i/4, 0x00030303); -+ nv_wo32(ctx, i, 0x00030303); - for (i = 0x06c4; i < 0x0704; i += 4) -- nv_wo32(dev, ctx, i/4, 0x0008aae4); -+ nv_wo32(ctx, i, 0x0008aae4); - for (i = 0x0704; i < 0x0744; i += 4) -- nv_wo32(dev, ctx, i/4, 0x01012000); -+ nv_wo32(ctx, i, 0x01012000); - for (i = 0x0744; i < 0x0784; i += 4) -- nv_wo32(dev, ctx, i/4, 0x00080008); -- nv_wo32(dev, ctx, 0x0860/4, 0x00040000); -- nv_wo32(dev, ctx, 0x0864/4, 0x00010000); -+ nv_wo32(ctx, i, 0x00080008); -+ nv_wo32(ctx, 0x0860, 0x00040000); -+ nv_wo32(ctx, 0x0864, 0x00010000); - for (i = 0x0868; i < 0x0878; i += 4) -- nv_wo32(dev, ctx, i/4, 0x00040004); -+ nv_wo32(ctx, i, 0x00040004); - for (i = 0x1f1c; i <= 0x308c ; i += 16) { -- nv_wo32(dev, ctx, i/4 + 0, 0x10700ff9); -- nv_wo32(dev, ctx, i/4 + 1, 0x0436086c); -- nv_wo32(dev, ctx, i/4 + 2, 0x000c001b); -+ nv_wo32(ctx, i + 0, 0x10700ff9); -+ nv_wo32(ctx, i + 4, 0x0436086c); -+ nv_wo32(ctx, i + 8, 0x000c001b); - } - for (i = 0x30bc; i < 0x30cc; i += 4) -- nv_wo32(dev, ctx, i/4, 0x0000ffff); -- nv_wo32(dev, ctx, 0x3450/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x380c/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x3820/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x384c/4, 0x40000000); -- nv_wo32(dev, ctx, 0x3850/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x3854/4, 0x3f000000); -- nv_wo32(dev, ctx, 0x385c/4, 0x40000000); -- nv_wo32(dev, ctx, 0x3860/4, 0x3f800000); -- nv_wo32(dev, ctx, 0x3868/4, 0xbf800000); -- nv_wo32(dev, ctx, 0x3870/4, 0xbf800000); -+ nv_wo32(ctx, i, 0x0000ffff); -+ nv_wo32(ctx, 0x3450, 0x3f800000); -+ nv_wo32(ctx, 0x380c, 0x3f800000); -+ nv_wo32(ctx, 0x3820, 0x3f800000); -+ nv_wo32(ctx, 0x384c, 0x40000000); -+ nv_wo32(ctx, 0x3850, 0x3f800000); -+ nv_wo32(ctx, 0x3854, 0x3f000000); -+ nv_wo32(ctx, 0x385c, 0x40000000); -+ nv_wo32(ctx, 0x3860, 0x3f800000); -+ nv_wo32(ctx, 0x3868, 0xbf800000); -+ nv_wo32(ctx, 0x3870, 0xbf800000); - } - - int -@@ -372,7 +375,7 @@ - struct drm_nouveau_private *dev_priv = dev->dev_private; - struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; - void (*ctx_init)(struct drm_device *, struct nouveau_gpuobj *); -- unsigned int idoffs = 0x28/4; -+ unsigned int idoffs = 0x28; - int ret; - - switch (dev_priv->chipset) { -@@ -403,21 +406,19 @@ - BUG_ON(1); - } - -- ret = nouveau_gpuobj_new_ref(dev, chan, NULL, 0, pgraph->grctx_size, -- 16, NVOBJ_FLAG_ZERO_ALLOC, -- &chan->ramin_grctx); -+ ret = nouveau_gpuobj_new(dev, chan, pgraph->grctx_size, 16, -+ NVOBJ_FLAG_ZERO_ALLOC, &chan->ramin_grctx); - if (ret) - return ret; - - /* Initialise default context values */ -- ctx_init(dev, chan->ramin_grctx->gpuobj); -+ ctx_init(dev, chan->ramin_grctx); - - /* nv20: nv_wo32(dev, chan->ramin_grctx->gpuobj, 10, chan->id<<24); */ -- nv_wo32(dev, chan->ramin_grctx->gpuobj, idoffs, -- (chan->id << 24) | 0x1); /* CTX_USER */ -+ nv_wo32(chan->ramin_grctx, idoffs, -+ (chan->id << 24) | 0x1); /* CTX_USER */ - -- nv_wo32(dev, pgraph->ctx_table->gpuobj, chan->id, -- chan->ramin_grctx->instance >> 4); -+ nv_wo32(pgraph->ctx_table, chan->id * 4, chan->ramin_grctx->pinst >> 4); - return 0; - } - -@@ -427,11 +428,21 @@ - struct drm_device *dev = chan->dev; - struct drm_nouveau_private *dev_priv = dev->dev_private; - struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; -+ unsigned long flags; -+ -+ spin_lock_irqsave(&dev_priv->context_switch_lock, flags); -+ pgraph->fifo_access(dev, false); - -- if (chan->ramin_grctx) -- nouveau_gpuobj_ref_del(dev, &chan->ramin_grctx); -+ /* Unload the context if it's the currently active one */ -+ if (pgraph->channel(dev) == chan) -+ pgraph->unload_context(dev); - -- nv_wo32(dev, pgraph->ctx_table->gpuobj, chan->id, 0); -+ pgraph->fifo_access(dev, true); -+ spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); -+ -+ /* Free the context resources */ -+ nv_wo32(pgraph->ctx_table, chan->id * 4, 0); -+ nouveau_gpuobj_ref(NULL, &chan->ramin_grctx); - } - - int -@@ -442,7 +453,7 @@ - - if (!chan->ramin_grctx) - return -EINVAL; -- inst = chan->ramin_grctx->instance >> 4; -+ inst = chan->ramin_grctx->pinst >> 4; - - nv_wr32(dev, NV20_PGRAPH_CHANNEL_CTX_POINTER, inst); - nv_wr32(dev, NV20_PGRAPH_CHANNEL_CTX_XFER, -@@ -465,7 +476,7 @@ - chan = pgraph->channel(dev); - if (!chan) - return 0; -- inst = chan->ramin_grctx->instance >> 4; -+ inst = chan->ramin_grctx->pinst >> 4; - - nv_wr32(dev, NV20_PGRAPH_CHANNEL_CTX_POINTER, inst); - nv_wr32(dev, NV20_PGRAPH_CHANNEL_CTX_XFER, -@@ -500,24 +511,27 @@ - } - - void --nv20_graph_set_region_tiling(struct drm_device *dev, int i, uint32_t addr, -- uint32_t size, uint32_t pitch) -+nv20_graph_set_tile_region(struct drm_device *dev, int i) - { -- uint32_t limit = max(1u, addr + size) - 1; -- -- if (pitch) -- addr |= 1; -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_tile_reg *tile = &dev_priv->tile.reg[i]; - -- nv_wr32(dev, NV20_PGRAPH_TLIMIT(i), limit); -- nv_wr32(dev, NV20_PGRAPH_TSIZE(i), pitch); -- nv_wr32(dev, NV20_PGRAPH_TILE(i), addr); -+ nv_wr32(dev, NV20_PGRAPH_TLIMIT(i), tile->limit); -+ nv_wr32(dev, NV20_PGRAPH_TSIZE(i), tile->pitch); -+ nv_wr32(dev, NV20_PGRAPH_TILE(i), tile->addr); - - nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00EA0030 + 4 * i); -- nv_wr32(dev, NV10_PGRAPH_RDI_DATA, limit); -+ nv_wr32(dev, NV10_PGRAPH_RDI_DATA, tile->limit); - nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00EA0050 + 4 * i); -- nv_wr32(dev, NV10_PGRAPH_RDI_DATA, pitch); -+ nv_wr32(dev, NV10_PGRAPH_RDI_DATA, tile->pitch); - nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00EA0010 + 4 * i); -- nv_wr32(dev, NV10_PGRAPH_RDI_DATA, addr); -+ nv_wr32(dev, NV10_PGRAPH_RDI_DATA, tile->addr); -+ -+ if (dev_priv->card_type == NV_20) { -+ nv_wr32(dev, NV20_PGRAPH_ZCOMP(i), tile->zcomp); -+ nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00ea0090 + 4 * i); -+ nv_wr32(dev, NV10_PGRAPH_RDI_DATA, tile->zcomp); -+ } - } - - int -@@ -552,18 +566,24 @@ - - if (!pgraph->ctx_table) { - /* Create Context Pointer Table */ -- ret = nouveau_gpuobj_new_ref(dev, NULL, NULL, 0, 32 * 4, 16, -- NVOBJ_FLAG_ZERO_ALLOC, -- &pgraph->ctx_table); -+ ret = nouveau_gpuobj_new(dev, NULL, 32 * 4, 16, -+ NVOBJ_FLAG_ZERO_ALLOC, -+ &pgraph->ctx_table); - if (ret) - return ret; - } - - nv_wr32(dev, NV20_PGRAPH_CHANNEL_CTX_TABLE, -- pgraph->ctx_table->instance >> 4); -+ pgraph->ctx_table->pinst >> 4); - - nv20_graph_rdi(dev); - -+ ret = nv20_graph_register(dev); -+ if (ret) { -+ nouveau_gpuobj_ref(NULL, &pgraph->ctx_table); -+ return ret; -+ } -+ - nv_wr32(dev, NV03_PGRAPH_INTR , 0xFFFFFFFF); - nv_wr32(dev, NV03_PGRAPH_INTR_EN, 0xFFFFFFFF); - -@@ -575,16 +595,17 @@ - nv_wr32(dev, 0x40009C , 0x00000040); - - if (dev_priv->chipset >= 0x25) { -- nv_wr32(dev, 0x400890, 0x00080000); -+ nv_wr32(dev, 0x400890, 0x00a8cfff); - nv_wr32(dev, 0x400610, 0x304B1FB6); -- nv_wr32(dev, 0x400B80, 0x18B82880); -+ nv_wr32(dev, 0x400B80, 0x1cbd3883); - nv_wr32(dev, 0x400B84, 0x44000000); - nv_wr32(dev, 0x400098, 0x40000080); - nv_wr32(dev, 0x400B88, 0x000000ff); -+ - } else { -- nv_wr32(dev, 0x400880, 0x00080000); /* 0x0008c7df */ -+ nv_wr32(dev, 0x400880, 0x0008c7df); - nv_wr32(dev, 0x400094, 0x00000005); -- nv_wr32(dev, 0x400B80, 0x45CAA208); /* 0x45eae20e */ -+ nv_wr32(dev, 0x400B80, 0x45eae20e); - nv_wr32(dev, 0x400B84, 0x24000000); - nv_wr32(dev, 0x400098, 0x00000040); - nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00E00038); -@@ -595,14 +616,8 @@ - - /* Turn all the tiling regions off. */ - for (i = 0; i < NV10_PFB_TILE__SIZE; i++) -- nv20_graph_set_region_tiling(dev, i, 0, 0, 0); -+ nv20_graph_set_tile_region(dev, i); - -- for (i = 0; i < 8; i++) { -- nv_wr32(dev, 0x400980 + i * 4, nv_rd32(dev, 0x100300 + i * 4)); -- nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00EA0090 + i * 4); -- nv_wr32(dev, NV10_PGRAPH_RDI_DATA, -- nv_rd32(dev, 0x100300 + i * 4)); -- } - nv_wr32(dev, 0x4009a0, nv_rd32(dev, 0x100324)); - nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00EA000C); - nv_wr32(dev, NV10_PGRAPH_RDI_DATA, nv_rd32(dev, 0x100324)); -@@ -646,7 +661,7 @@ - struct drm_nouveau_private *dev_priv = dev->dev_private; - struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; - -- nouveau_gpuobj_ref_del(dev, &pgraph->ctx_table); -+ nouveau_gpuobj_ref(NULL, &pgraph->ctx_table); - } - - int -@@ -681,15 +696,21 @@ - - if (!pgraph->ctx_table) { - /* Create Context Pointer Table */ -- ret = nouveau_gpuobj_new_ref(dev, NULL, NULL, 0, 32 * 4, 16, -- NVOBJ_FLAG_ZERO_ALLOC, -- &pgraph->ctx_table); -+ ret = nouveau_gpuobj_new(dev, NULL, 32 * 4, 16, -+ NVOBJ_FLAG_ZERO_ALLOC, -+ &pgraph->ctx_table); - if (ret) - return ret; - } - -+ ret = nv30_graph_register(dev); -+ if (ret) { -+ nouveau_gpuobj_ref(NULL, &pgraph->ctx_table); -+ return ret; -+ } -+ - nv_wr32(dev, NV20_PGRAPH_CHANNEL_CTX_TABLE, -- pgraph->ctx_table->instance >> 4); -+ pgraph->ctx_table->pinst >> 4); - - nv_wr32(dev, NV03_PGRAPH_INTR , 0xFFFFFFFF); - nv_wr32(dev, NV03_PGRAPH_INTR_EN, 0xFFFFFFFF); -@@ -728,7 +749,7 @@ - - /* Turn all the tiling regions off. */ - for (i = 0; i < NV10_PFB_TILE__SIZE; i++) -- nv20_graph_set_region_tiling(dev, i, 0, 0, 0); -+ nv20_graph_set_tile_region(dev, i); - - nv_wr32(dev, NV10_PGRAPH_CTX_CONTROL, 0x10000100); - nv_wr32(dev, NV10_PGRAPH_STATE , 0xFFFFFFFF); -@@ -748,46 +769,84 @@ - return 0; - } - --struct nouveau_pgraph_object_class nv20_graph_grclass[] = { -- { 0x0030, false, NULL }, /* null */ -- { 0x0039, false, NULL }, /* m2mf */ -- { 0x004a, false, NULL }, /* gdirect */ -- { 0x009f, false, NULL }, /* imageblit (nv12) */ -- { 0x008a, false, NULL }, /* ifc */ -- { 0x0089, false, NULL }, /* sifm */ -- { 0x0062, false, NULL }, /* surf2d */ -- { 0x0043, false, NULL }, /* rop */ -- { 0x0012, false, NULL }, /* beta1 */ -- { 0x0072, false, NULL }, /* beta4 */ -- { 0x0019, false, NULL }, /* cliprect */ -- { 0x0044, false, NULL }, /* pattern */ -- { 0x009e, false, NULL }, /* swzsurf */ -- { 0x0096, false, NULL }, /* celcius */ -- { 0x0097, false, NULL }, /* kelvin (nv20) */ -- { 0x0597, false, NULL }, /* kelvin (nv25) */ -- {} --}; -- --struct nouveau_pgraph_object_class nv30_graph_grclass[] = { -- { 0x0030, false, NULL }, /* null */ -- { 0x0039, false, NULL }, /* m2mf */ -- { 0x004a, false, NULL }, /* gdirect */ -- { 0x009f, false, NULL }, /* imageblit (nv12) */ -- { 0x008a, false, NULL }, /* ifc */ -- { 0x038a, false, NULL }, /* ifc (nv30) */ -- { 0x0089, false, NULL }, /* sifm */ -- { 0x0389, false, NULL }, /* sifm (nv30) */ -- { 0x0062, false, NULL }, /* surf2d */ -- { 0x0362, false, NULL }, /* surf2d (nv30) */ -- { 0x0043, false, NULL }, /* rop */ -- { 0x0012, false, NULL }, /* beta1 */ -- { 0x0072, false, NULL }, /* beta4 */ -- { 0x0019, false, NULL }, /* cliprect */ -- { 0x0044, false, NULL }, /* pattern */ -- { 0x039e, false, NULL }, /* swzsurf */ -- { 0x0397, false, NULL }, /* rankine (nv30) */ -- { 0x0497, false, NULL }, /* rankine (nv35) */ -- { 0x0697, false, NULL }, /* rankine (nv34) */ -- {} --}; -+static int -+nv20_graph_register(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ -+ if (dev_priv->engine.graph.registered) -+ return 0; -+ -+ NVOBJ_CLASS(dev, 0x506e, SW); /* nvsw */ -+ NVOBJ_CLASS(dev, 0x0030, GR); /* null */ -+ NVOBJ_CLASS(dev, 0x0039, GR); /* m2mf */ -+ NVOBJ_CLASS(dev, 0x004a, GR); /* gdirect */ -+ NVOBJ_CLASS(dev, 0x009f, GR); /* imageblit (nv12) */ -+ NVOBJ_CLASS(dev, 0x008a, GR); /* ifc */ -+ NVOBJ_CLASS(dev, 0x0089, GR); /* sifm */ -+ NVOBJ_CLASS(dev, 0x0062, GR); /* surf2d */ -+ NVOBJ_CLASS(dev, 0x0043, GR); /* rop */ -+ NVOBJ_CLASS(dev, 0x0012, GR); /* beta1 */ -+ NVOBJ_CLASS(dev, 0x0072, GR); /* beta4 */ -+ NVOBJ_CLASS(dev, 0x0019, GR); /* cliprect */ -+ NVOBJ_CLASS(dev, 0x0044, GR); /* pattern */ -+ NVOBJ_CLASS(dev, 0x009e, GR); /* swzsurf */ -+ NVOBJ_CLASS(dev, 0x0096, GR); /* celcius */ -+ -+ /* kelvin */ -+ if (dev_priv->chipset < 0x25) -+ NVOBJ_CLASS(dev, 0x0097, GR); -+ else -+ NVOBJ_CLASS(dev, 0x0597, GR); -+ -+ /* nvsw */ -+ NVOBJ_CLASS(dev, 0x506e, SW); -+ NVOBJ_MTHD (dev, 0x506e, 0x0500, nv04_graph_mthd_page_flip); - -+ dev_priv->engine.graph.registered = true; -+ return 0; -+} -+ -+static int -+nv30_graph_register(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ -+ if (dev_priv->engine.graph.registered) -+ return 0; -+ -+ NVOBJ_CLASS(dev, 0x506e, SW); /* nvsw */ -+ NVOBJ_CLASS(dev, 0x0030, GR); /* null */ -+ NVOBJ_CLASS(dev, 0x0039, GR); /* m2mf */ -+ NVOBJ_CLASS(dev, 0x004a, GR); /* gdirect */ -+ NVOBJ_CLASS(dev, 0x009f, GR); /* imageblit (nv12) */ -+ NVOBJ_CLASS(dev, 0x008a, GR); /* ifc */ -+ NVOBJ_CLASS(dev, 0x038a, GR); /* ifc (nv30) */ -+ NVOBJ_CLASS(dev, 0x0089, GR); /* sifm */ -+ NVOBJ_CLASS(dev, 0x0389, GR); /* sifm (nv30) */ -+ NVOBJ_CLASS(dev, 0x0062, GR); /* surf2d */ -+ NVOBJ_CLASS(dev, 0x0362, GR); /* surf2d (nv30) */ -+ NVOBJ_CLASS(dev, 0x0043, GR); /* rop */ -+ NVOBJ_CLASS(dev, 0x0012, GR); /* beta1 */ -+ NVOBJ_CLASS(dev, 0x0072, GR); /* beta4 */ -+ NVOBJ_CLASS(dev, 0x0019, GR); /* cliprect */ -+ NVOBJ_CLASS(dev, 0x0044, GR); /* pattern */ -+ NVOBJ_CLASS(dev, 0x039e, GR); /* swzsurf */ -+ -+ /* rankine */ -+ if (0x00000003 & (1 << (dev_priv->chipset & 0x0f))) -+ NVOBJ_CLASS(dev, 0x0397, GR); -+ else -+ if (0x00000010 & (1 << (dev_priv->chipset & 0x0f))) -+ NVOBJ_CLASS(dev, 0x0697, GR); -+ else -+ if (0x000001e0 & (1 << (dev_priv->chipset & 0x0f))) -+ NVOBJ_CLASS(dev, 0x0497, GR); -+ -+ /* nvsw */ -+ NVOBJ_CLASS(dev, 0x506e, SW); -+ NVOBJ_MTHD (dev, 0x506e, 0x0500, nv04_graph_mthd_page_flip); -+ -+ dev_priv->engine.graph.registered = true; -+ return 0; -+} -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv30_fb.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv30_fb.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv30_fb.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv30_fb.c 2010-11-05 00:40:00.000000000 +0100 -@@ -29,6 +29,27 @@ - #include "nouveau_drv.h" - #include "nouveau_drm.h" - -+void -+nv30_fb_init_tile_region(struct drm_device *dev, int i, uint32_t addr, -+ uint32_t size, uint32_t pitch, uint32_t flags) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_tile_reg *tile = &dev_priv->tile.reg[i]; -+ -+ tile->addr = addr | 1; -+ tile->limit = max(1u, addr + size) - 1; -+ tile->pitch = pitch; -+} -+ -+void -+nv30_fb_free_tile_region(struct drm_device *dev, int i) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_tile_reg *tile = &dev_priv->tile.reg[i]; -+ -+ tile->addr = tile->limit = tile->pitch = 0; -+} -+ - static int - calc_bias(struct drm_device *dev, int k, int i, int j) - { -@@ -65,7 +86,7 @@ - - /* Turn all the tiling regions off. */ - for (i = 0; i < pfb->num_tiles; i++) -- pfb->set_region_tiling(dev, i, 0, 0, 0); -+ pfb->set_tile_region(dev, i); - - /* Init the memory timing regs at 0x10037c/0x1003ac */ - if (dev_priv->chipset == 0x30 || -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv40_fb.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv40_fb.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv40_fb.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv40_fb.c 2010-11-05 00:40:00.000000000 +0100 -@@ -4,26 +4,22 @@ - #include "nouveau_drm.h" - - void --nv40_fb_set_region_tiling(struct drm_device *dev, int i, uint32_t addr, -- uint32_t size, uint32_t pitch) -+nv40_fb_set_tile_region(struct drm_device *dev, int i) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; -- uint32_t limit = max(1u, addr + size) - 1; -- -- if (pitch) -- addr |= 1; -+ struct nouveau_tile_reg *tile = &dev_priv->tile.reg[i]; - - switch (dev_priv->chipset) { - case 0x40: -- nv_wr32(dev, NV10_PFB_TLIMIT(i), limit); -- nv_wr32(dev, NV10_PFB_TSIZE(i), pitch); -- nv_wr32(dev, NV10_PFB_TILE(i), addr); -+ nv_wr32(dev, NV10_PFB_TLIMIT(i), tile->limit); -+ nv_wr32(dev, NV10_PFB_TSIZE(i), tile->pitch); -+ nv_wr32(dev, NV10_PFB_TILE(i), tile->addr); - break; - - default: -- nv_wr32(dev, NV40_PFB_TLIMIT(i), limit); -- nv_wr32(dev, NV40_PFB_TSIZE(i), pitch); -- nv_wr32(dev, NV40_PFB_TILE(i), addr); -+ nv_wr32(dev, NV40_PFB_TLIMIT(i), tile->limit); -+ nv_wr32(dev, NV40_PFB_TSIZE(i), tile->pitch); -+ nv_wr32(dev, NV40_PFB_TILE(i), tile->addr); - break; - } - } -@@ -64,7 +60,7 @@ - - /* Turn all the tiling regions off. */ - for (i = 0; i < pfb->num_tiles; i++) -- pfb->set_region_tiling(dev, i, 0, 0, 0); -+ pfb->set_tile_region(dev, i); - - return 0; - } -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv40_fifo.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv40_fifo.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv40_fifo.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv40_fifo.c 2010-11-05 00:40:00.000000000 +0100 -@@ -27,8 +27,9 @@ - #include "drmP.h" - #include "nouveau_drv.h" - #include "nouveau_drm.h" -+#include "nouveau_ramht.h" - --#define NV40_RAMFC(c) (dev_priv->ramfc_offset + ((c) * NV40_RAMFC__SIZE)) -+#define NV40_RAMFC(c) (dev_priv->ramfc->pinst + ((c) * NV40_RAMFC__SIZE)) - #define NV40_RAMFC__SIZE 128 - - int -@@ -42,7 +43,7 @@ - - ret = nouveau_gpuobj_new_fake(dev, NV40_RAMFC(chan->id), ~0, - NV40_RAMFC__SIZE, NVOBJ_FLAG_ZERO_ALLOC | -- NVOBJ_FLAG_ZERO_FREE, NULL, &chan->ramfc); -+ NVOBJ_FLAG_ZERO_FREE, &chan->ramfc); - if (ret) - return ret; - -@@ -50,7 +51,7 @@ - - nv_wi32(dev, fc + 0, chan->pushbuf_base); - nv_wi32(dev, fc + 4, chan->pushbuf_base); -- nv_wi32(dev, fc + 12, chan->pushbuf->instance >> 4); -+ nv_wi32(dev, fc + 12, chan->pushbuf->pinst >> 4); - nv_wi32(dev, fc + 24, NV_PFIFO_CACHE1_DMA_FETCH_TRIG_128_BYTES | - NV_PFIFO_CACHE1_DMA_FETCH_SIZE_128_BYTES | - NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_8 | -@@ -58,7 +59,7 @@ - NV_PFIFO_CACHE1_BIG_ENDIAN | - #endif - 0x30000000 /* no idea.. */); -- nv_wi32(dev, fc + 56, chan->ramin_grctx->instance >> 4); -+ nv_wi32(dev, fc + 56, chan->ramin_grctx->pinst >> 4); - nv_wi32(dev, fc + 60, 0x0001FFFF); - - /* enable the fifo dma operation */ -@@ -69,18 +70,6 @@ - return 0; - } - --void --nv40_fifo_destroy_context(struct nouveau_channel *chan) --{ -- struct drm_device *dev = chan->dev; -- -- nv_wr32(dev, NV04_PFIFO_MODE, -- nv_rd32(dev, NV04_PFIFO_MODE) & ~(1 << chan->id)); -- -- if (chan->ramfc) -- nouveau_gpuobj_ref_del(dev, &chan->ramfc); --} -- - static void - nv40_fifo_do_load_context(struct drm_device *dev, int chid) - { -@@ -241,9 +230,9 @@ - struct drm_nouveau_private *dev_priv = dev->dev_private; - - nv_wr32(dev, NV03_PFIFO_RAMHT, (0x03 << 24) /* search 128 */ | -- ((dev_priv->ramht_bits - 9) << 16) | -- (dev_priv->ramht_offset >> 8)); -- nv_wr32(dev, NV03_PFIFO_RAMRO, dev_priv->ramro_offset>>8); -+ ((dev_priv->ramht->bits - 9) << 16) | -+ (dev_priv->ramht->gpuobj->pinst >> 8)); -+ nv_wr32(dev, NV03_PFIFO_RAMRO, dev_priv->ramro->pinst >> 8); - - switch (dev_priv->chipset) { - case 0x47: -@@ -271,7 +260,7 @@ - nv_wr32(dev, 0x2230, 0); - nv_wr32(dev, NV40_PFIFO_RAMFC, - ((dev_priv->vram_size - 512 * 1024 + -- dev_priv->ramfc_offset) >> 16) | (3 << 16)); -+ dev_priv->ramfc->pinst) >> 16) | (3 << 16)); - break; - } - } -@@ -301,7 +290,7 @@ - pfifo->reassign(dev, true); - - for (i = 0; i < dev_priv->engine.fifo.channels; i++) { -- if (dev_priv->fifos[i]) { -+ if (dev_priv->channels.ptr[i]) { - uint32_t mode = nv_rd32(dev, NV04_PFIFO_MODE); - nv_wr32(dev, NV04_PFIFO_MODE, mode | (1 << i)); - } -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv40_graph.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv40_graph.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv40_graph.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv40_graph.c 2010-11-05 00:40:00.000000000 +0100 -@@ -29,6 +29,8 @@ - #include "nouveau_drv.h" - #include "nouveau_grctx.h" - -+static int nv40_graph_register(struct drm_device *); -+ - struct nouveau_channel * - nv40_graph_channel(struct drm_device *dev) - { -@@ -42,10 +44,10 @@ - inst = (inst & NV40_PGRAPH_CTXCTL_CUR_INSTANCE) << 4; - - for (i = 0; i < dev_priv->engine.fifo.channels; i++) { -- struct nouveau_channel *chan = dev_priv->fifos[i]; -+ struct nouveau_channel *chan = dev_priv->channels.ptr[i]; - - if (chan && chan->ramin_grctx && -- chan->ramin_grctx->instance == inst) -+ chan->ramin_grctx->pinst == inst) - return chan; - } - -@@ -61,27 +63,41 @@ - struct nouveau_grctx ctx = {}; - int ret; - -- ret = nouveau_gpuobj_new_ref(dev, chan, NULL, 0, pgraph->grctx_size, -- 16, NVOBJ_FLAG_ZERO_ALLOC, -- &chan->ramin_grctx); -+ ret = nouveau_gpuobj_new(dev, chan, pgraph->grctx_size, 16, -+ NVOBJ_FLAG_ZERO_ALLOC, &chan->ramin_grctx); - if (ret) - return ret; - - /* Initialise default context values */ - ctx.dev = chan->dev; - ctx.mode = NOUVEAU_GRCTX_VALS; -- ctx.data = chan->ramin_grctx->gpuobj; -+ ctx.data = chan->ramin_grctx; - nv40_grctx_init(&ctx); - -- nv_wo32(dev, chan->ramin_grctx->gpuobj, 0, -- chan->ramin_grctx->gpuobj->im_pramin->start); -+ nv_wo32(chan->ramin_grctx, 0, chan->ramin_grctx->pinst); - return 0; - } - - void - nv40_graph_destroy_context(struct nouveau_channel *chan) - { -- nouveau_gpuobj_ref_del(chan->dev, &chan->ramin_grctx); -+ struct drm_device *dev = chan->dev; -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; -+ unsigned long flags; -+ -+ spin_lock_irqsave(&dev_priv->context_switch_lock, flags); -+ pgraph->fifo_access(dev, false); -+ -+ /* Unload the context if it's the currently active one */ -+ if (pgraph->channel(dev) == chan) -+ pgraph->unload_context(dev); -+ -+ pgraph->fifo_access(dev, true); -+ spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); -+ -+ /* Free the context resources */ -+ nouveau_gpuobj_ref(NULL, &chan->ramin_grctx); - } - - static int -@@ -135,7 +151,7 @@ - - if (!chan->ramin_grctx) - return -EINVAL; -- inst = chan->ramin_grctx->instance >> 4; -+ inst = chan->ramin_grctx->pinst >> 4; - - ret = nv40_graph_transfer_context(dev, inst, 0); - if (ret) -@@ -176,43 +192,39 @@ - } - - void --nv40_graph_set_region_tiling(struct drm_device *dev, int i, uint32_t addr, -- uint32_t size, uint32_t pitch) -+nv40_graph_set_tile_region(struct drm_device *dev, int i) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; -- uint32_t limit = max(1u, addr + size) - 1; -- -- if (pitch) -- addr |= 1; -+ struct nouveau_tile_reg *tile = &dev_priv->tile.reg[i]; - - switch (dev_priv->chipset) { - case 0x44: - case 0x4a: - case 0x4e: -- nv_wr32(dev, NV20_PGRAPH_TSIZE(i), pitch); -- nv_wr32(dev, NV20_PGRAPH_TLIMIT(i), limit); -- nv_wr32(dev, NV20_PGRAPH_TILE(i), addr); -+ nv_wr32(dev, NV20_PGRAPH_TSIZE(i), tile->pitch); -+ nv_wr32(dev, NV20_PGRAPH_TLIMIT(i), tile->limit); -+ nv_wr32(dev, NV20_PGRAPH_TILE(i), tile->addr); - break; - - case 0x46: - case 0x47: - case 0x49: - case 0x4b: -- nv_wr32(dev, NV47_PGRAPH_TSIZE(i), pitch); -- nv_wr32(dev, NV47_PGRAPH_TLIMIT(i), limit); -- nv_wr32(dev, NV47_PGRAPH_TILE(i), addr); -- nv_wr32(dev, NV40_PGRAPH_TSIZE1(i), pitch); -- nv_wr32(dev, NV40_PGRAPH_TLIMIT1(i), limit); -- nv_wr32(dev, NV40_PGRAPH_TILE1(i), addr); -+ nv_wr32(dev, NV47_PGRAPH_TSIZE(i), tile->pitch); -+ nv_wr32(dev, NV47_PGRAPH_TLIMIT(i), tile->limit); -+ nv_wr32(dev, NV47_PGRAPH_TILE(i), tile->addr); -+ nv_wr32(dev, NV40_PGRAPH_TSIZE1(i), tile->pitch); -+ nv_wr32(dev, NV40_PGRAPH_TLIMIT1(i), tile->limit); -+ nv_wr32(dev, NV40_PGRAPH_TILE1(i), tile->addr); - break; - - default: -- nv_wr32(dev, NV20_PGRAPH_TSIZE(i), pitch); -- nv_wr32(dev, NV20_PGRAPH_TLIMIT(i), limit); -- nv_wr32(dev, NV20_PGRAPH_TILE(i), addr); -- nv_wr32(dev, NV40_PGRAPH_TSIZE1(i), pitch); -- nv_wr32(dev, NV40_PGRAPH_TLIMIT1(i), limit); -- nv_wr32(dev, NV40_PGRAPH_TILE1(i), addr); -+ nv_wr32(dev, NV20_PGRAPH_TSIZE(i), tile->pitch); -+ nv_wr32(dev, NV20_PGRAPH_TLIMIT(i), tile->limit); -+ nv_wr32(dev, NV20_PGRAPH_TILE(i), tile->addr); -+ nv_wr32(dev, NV40_PGRAPH_TSIZE1(i), tile->pitch); -+ nv_wr32(dev, NV40_PGRAPH_TLIMIT1(i), tile->limit); -+ nv_wr32(dev, NV40_PGRAPH_TILE1(i), tile->addr); - break; - } - } -@@ -234,7 +246,7 @@ - struct nouveau_fb_engine *pfb = &dev_priv->engine.fb; - struct nouveau_grctx ctx = {}; - uint32_t vramsz, *cp; -- int i, j; -+ int ret, i, j; - - nv_wr32(dev, NV03_PMC_ENABLE, nv_rd32(dev, NV03_PMC_ENABLE) & - ~NV_PMC_ENABLE_PGRAPH); -@@ -258,6 +270,10 @@ - - kfree(cp); - -+ ret = nv40_graph_register(dev); -+ if (ret) -+ return ret; -+ - /* No context present currently */ - nv_wr32(dev, NV40_PGRAPH_CTXCTL_CUR, 0x00000000); - -@@ -349,7 +365,7 @@ - - /* Turn all the tiling regions off. */ - for (i = 0; i < pfb->num_tiles; i++) -- nv40_graph_set_region_tiling(dev, i, 0, 0, 0); -+ nv40_graph_set_tile_region(dev, i); - - /* begin RAM config */ - vramsz = pci_resource_len(dev->pdev, 0) - 1; -@@ -394,24 +410,42 @@ - { - } - --struct nouveau_pgraph_object_class nv40_graph_grclass[] = { -- { 0x0030, false, NULL }, /* null */ -- { 0x0039, false, NULL }, /* m2mf */ -- { 0x004a, false, NULL }, /* gdirect */ -- { 0x009f, false, NULL }, /* imageblit (nv12) */ -- { 0x008a, false, NULL }, /* ifc */ -- { 0x0089, false, NULL }, /* sifm */ -- { 0x3089, false, NULL }, /* sifm (nv40) */ -- { 0x0062, false, NULL }, /* surf2d */ -- { 0x3062, false, NULL }, /* surf2d (nv40) */ -- { 0x0043, false, NULL }, /* rop */ -- { 0x0012, false, NULL }, /* beta1 */ -- { 0x0072, false, NULL }, /* beta4 */ -- { 0x0019, false, NULL }, /* cliprect */ -- { 0x0044, false, NULL }, /* pattern */ -- { 0x309e, false, NULL }, /* swzsurf */ -- { 0x4097, false, NULL }, /* curie (nv40) */ -- { 0x4497, false, NULL }, /* curie (nv44) */ -- {} --}; -+static int -+nv40_graph_register(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ -+ if (dev_priv->engine.graph.registered) -+ return 0; -+ -+ NVOBJ_CLASS(dev, 0x506e, SW); /* nvsw */ -+ NVOBJ_CLASS(dev, 0x0030, GR); /* null */ -+ NVOBJ_CLASS(dev, 0x0039, GR); /* m2mf */ -+ NVOBJ_CLASS(dev, 0x004a, GR); /* gdirect */ -+ NVOBJ_CLASS(dev, 0x009f, GR); /* imageblit (nv12) */ -+ NVOBJ_CLASS(dev, 0x008a, GR); /* ifc */ -+ NVOBJ_CLASS(dev, 0x0089, GR); /* sifm */ -+ NVOBJ_CLASS(dev, 0x3089, GR); /* sifm (nv40) */ -+ NVOBJ_CLASS(dev, 0x0062, GR); /* surf2d */ -+ NVOBJ_CLASS(dev, 0x3062, GR); /* surf2d (nv40) */ -+ NVOBJ_CLASS(dev, 0x0043, GR); /* rop */ -+ NVOBJ_CLASS(dev, 0x0012, GR); /* beta1 */ -+ NVOBJ_CLASS(dev, 0x0072, GR); /* beta4 */ -+ NVOBJ_CLASS(dev, 0x0019, GR); /* cliprect */ -+ NVOBJ_CLASS(dev, 0x0044, GR); /* pattern */ -+ NVOBJ_CLASS(dev, 0x309e, GR); /* swzsurf */ -+ -+ /* curie */ -+ if (dev_priv->chipset >= 0x60 || -+ 0x00005450 & (1 << (dev_priv->chipset & 0x0f))) -+ NVOBJ_CLASS(dev, 0x4497, GR); -+ else -+ NVOBJ_CLASS(dev, 0x4097, GR); -+ -+ /* nvsw */ -+ NVOBJ_CLASS(dev, 0x506e, SW); -+ NVOBJ_MTHD (dev, 0x506e, 0x0500, nv04_graph_mthd_page_flip); - -+ dev_priv->engine.graph.registered = true; -+ return 0; -+} -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv40_grctx.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv40_grctx.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv40_grctx.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv40_grctx.c 2010-11-05 00:40:00.000000000 +0100 -@@ -596,13 +596,13 @@ - - offset += 0x0280/4; - for (i = 0; i < 16; i++, offset += 2) -- nv_wo32(dev, obj, offset, 0x3f800000); -+ nv_wo32(obj, offset * 4, 0x3f800000); - - for (vs = 0; vs < vs_nr; vs++, offset += vs_len) { - for (i = 0; i < vs_nr_b0 * 6; i += 6) -- nv_wo32(dev, obj, offset + b0_offset + i, 0x00000001); -+ nv_wo32(obj, (offset + b0_offset + i) * 4, 0x00000001); - for (i = 0; i < vs_nr_b1 * 4; i += 4) -- nv_wo32(dev, obj, offset + b1_offset + i, 0x3f800000); -+ nv_wo32(obj, (offset + b1_offset + i) * 4, 0x3f800000); - } - } - -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_calc.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_calc.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_calc.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_calc.c 2010-11-05 00:40:00.000000000 +0100 -@@ -51,24 +51,28 @@ - int *N, int *fN, int *M, int *P) - { - fixed20_12 fb_div, a, b; -+ u32 refclk = pll->refclk / 10; -+ u32 max_vco_freq = pll->vco1.maxfreq / 10; -+ u32 max_vco_inputfreq = pll->vco1.max_inputfreq / 10; -+ clk /= 10; - -- *P = pll->vco1.maxfreq / clk; -+ *P = max_vco_freq / clk; - if (*P > pll->max_p) - *P = pll->max_p; - if (*P < pll->min_p) - *P = pll->min_p; - -- /* *M = ceil(refclk / pll->vco.max_inputfreq); */ -- a.full = dfixed_const(pll->refclk); -- b.full = dfixed_const(pll->vco1.max_inputfreq); -+ /* *M = floor((refclk + max_vco_inputfreq) / max_vco_inputfreq); */ -+ a.full = dfixed_const(refclk + max_vco_inputfreq); -+ b.full = dfixed_const(max_vco_inputfreq); - a.full = dfixed_div(a, b); -- a.full = dfixed_ceil(a); -+ a.full = dfixed_floor(a); - *M = dfixed_trunc(a); - - /* fb_div = (vco * *M) / refclk; */ - fb_div.full = dfixed_const(clk * *P); - fb_div.full = dfixed_mul(fb_div, a); -- a.full = dfixed_const(pll->refclk); -+ a.full = dfixed_const(refclk); - fb_div.full = dfixed_div(fb_div, a); - - /* *N = floor(fb_div); */ -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_crtc.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_crtc.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_crtc.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_crtc.c 2010-11-05 00:40:00.000000000 +0100 -@@ -104,8 +104,7 @@ - OUT_RING(evo, nv_crtc->lut.depth == 8 ? - NV50_EVO_CRTC_CLUT_MODE_OFF : - NV50_EVO_CRTC_CLUT_MODE_ON); -- OUT_RING(evo, (nv_crtc->lut.nvbo->bo.mem.mm_node->start << -- PAGE_SHIFT) >> 8); -+ OUT_RING(evo, (nv_crtc->lut.nvbo->bo.mem.start << PAGE_SHIFT) >> 8); - if (dev_priv->chipset != 0x50) { - BEGIN_RING(evo, 0, NV84_EVO_CRTC(index, CLUT_DMA), 1); - OUT_RING(evo, NvEvoVRAM); -@@ -266,15 +265,10 @@ - { - struct drm_nouveau_private *dev_priv = dev->dev_private; - struct pll_lims pll; -- uint32_t reg, reg1, reg2; -+ uint32_t reg1, reg2; - int ret, N1, M1, N2, M2, P; - -- if (dev_priv->chipset < NV_C0) -- reg = NV50_PDISPLAY_CRTC_CLK_CTRL1(head); -- else -- reg = 0x614140 + (head * 0x800); -- -- ret = get_pll_limits(dev, reg, &pll); -+ ret = get_pll_limits(dev, PLL_VPLL0 + head, &pll); - if (ret) - return ret; - -@@ -286,11 +280,11 @@ - NV_DEBUG(dev, "pclk %d out %d NM1 %d %d NM2 %d %d P %d\n", - pclk, ret, N1, M1, N2, M2, P); - -- reg1 = nv_rd32(dev, reg + 4) & 0xff00ff00; -- reg2 = nv_rd32(dev, reg + 8) & 0x8000ff00; -- nv_wr32(dev, reg, 0x10000611); -- nv_wr32(dev, reg + 4, reg1 | (M1 << 16) | N1); -- nv_wr32(dev, reg + 8, reg2 | (P << 28) | (M2 << 16) | N2); -+ reg1 = nv_rd32(dev, pll.reg + 4) & 0xff00ff00; -+ reg2 = nv_rd32(dev, pll.reg + 8) & 0x8000ff00; -+ nv_wr32(dev, pll.reg + 0, 0x10000611); -+ nv_wr32(dev, pll.reg + 4, reg1 | (M1 << 16) | N1); -+ nv_wr32(dev, pll.reg + 8, reg2 | (P << 28) | (M2 << 16) | N2); - } else - if (dev_priv->chipset < NV_C0) { - ret = nv50_calc_pll2(dev, &pll, pclk, &N1, &N2, &M1, &P); -@@ -300,10 +294,10 @@ - NV_DEBUG(dev, "pclk %d out %d N %d fN 0x%04x M %d P %d\n", - pclk, ret, N1, N2, M1, P); - -- reg1 = nv_rd32(dev, reg + 4) & 0xffc00000; -- nv_wr32(dev, reg, 0x50000610); -- nv_wr32(dev, reg + 4, reg1 | (P << 16) | (M1 << 8) | N1); -- nv_wr32(dev, reg + 8, N2); -+ reg1 = nv_rd32(dev, pll.reg + 4) & 0xffc00000; -+ nv_wr32(dev, pll.reg + 0, 0x50000610); -+ nv_wr32(dev, pll.reg + 4, reg1 | (P << 16) | (M1 << 8) | N1); -+ nv_wr32(dev, pll.reg + 8, N2); - } else { - ret = nv50_calc_pll2(dev, &pll, pclk, &N1, &N2, &M1, &P); - if (ret <= 0) -@@ -312,9 +306,9 @@ - NV_DEBUG(dev, "pclk %d out %d N %d fN 0x%04x M %d P %d\n", - pclk, ret, N1, N2, M1, P); - -- nv_mask(dev, reg + 0x0c, 0x00000000, 0x00000100); -- nv_wr32(dev, reg + 0x04, (P << 16) | (N1 << 8) | M1); -- nv_wr32(dev, reg + 0x10, N2 << 16); -+ nv_mask(dev, pll.reg + 0x0c, 0x00000000, 0x00000100); -+ nv_wr32(dev, pll.reg + 0x04, (P << 16) | (N1 << 8) | M1); -+ nv_wr32(dev, pll.reg + 0x10, N2 << 16); - } - - return 0; -@@ -338,7 +332,9 @@ - - nv50_cursor_fini(nv_crtc); - -+ nouveau_bo_unmap(nv_crtc->lut.nvbo); - nouveau_bo_ref(NULL, &nv_crtc->lut.nvbo); -+ nouveau_bo_unmap(nv_crtc->cursor.nvbo); - nouveau_bo_ref(NULL, &nv_crtc->cursor.nvbo); - kfree(nv_crtc->mode); - kfree(nv_crtc); -@@ -441,6 +437,7 @@ - .cursor_move = nv50_crtc_cursor_move, - .gamma_set = nv50_crtc_gamma_set, - .set_config = drm_crtc_helper_set_config, -+ .page_flip = nouveau_crtc_page_flip, - .destroy = nv50_crtc_destroy, - }; - -@@ -457,6 +454,7 @@ - - NV_DEBUG_KMS(dev, "index %d\n", nv_crtc->index); - -+ drm_vblank_pre_modeset(dev, nv_crtc->index); - nv50_crtc_blank(nv_crtc, true); - } - -@@ -472,6 +470,7 @@ - NV_DEBUG_KMS(dev, "index %d\n", nv_crtc->index); - - nv50_crtc_blank(nv_crtc, false); -+ drm_vblank_post_modeset(dev, nv_crtc->index); - - ret = RING_SPACE(evo, 2); - if (ret) { -@@ -536,7 +535,7 @@ - } - - nv_crtc->fb.offset = fb->nvbo->bo.offset - dev_priv->vm_vram_base; -- nv_crtc->fb.tile_flags = fb->nvbo->tile_flags; -+ nv_crtc->fb.tile_flags = nouveau_bo_tile_layout(fb->nvbo); - nv_crtc->fb.cpp = drm_fb->bits_per_pixel / 8; - if (!nv_crtc->fb.blanked && dev_priv->chipset != 0x50) { - ret = RING_SPACE(evo, 2); -@@ -568,7 +567,7 @@ - fb->nvbo->tile_mode); - } - if (dev_priv->chipset == 0x50) -- OUT_RING(evo, (fb->nvbo->tile_flags << 8) | format); -+ OUT_RING(evo, (nv_crtc->fb.tile_flags << 8) | format); - else - OUT_RING(evo, format); - -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_cursor.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_cursor.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_cursor.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_cursor.c 2010-11-05 00:40:00.000000000 +0100 -@@ -147,7 +147,7 @@ - NV_DEBUG_KMS(dev, "\n"); - - nv_wr32(dev, NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(idx), 0); -- if (!nv_wait(NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(idx), -+ if (!nv_wait(dev, NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(idx), - NV50_PDISPLAY_CURSOR_CURSOR_CTRL2_STATUS, 0)) { - NV_ERROR(dev, "timeout: CURSOR_CTRL2_STATUS == 0\n"); - NV_ERROR(dev, "CURSOR_CTRL2 = 0x%08x\n", -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_dac.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_dac.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_dac.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_dac.c 2010-11-05 00:40:00.000000000 +0100 -@@ -79,7 +79,7 @@ - - nv_wr32(dev, NV50_PDISPLAY_DAC_DPMS_CTRL(or), - 0x00150000 | NV50_PDISPLAY_DAC_DPMS_CTRL_PENDING); -- if (!nv_wait(NV50_PDISPLAY_DAC_DPMS_CTRL(or), -+ if (!nv_wait(dev, NV50_PDISPLAY_DAC_DPMS_CTRL(or), - NV50_PDISPLAY_DAC_DPMS_CTRL_PENDING, 0)) { - NV_ERROR(dev, "timeout: DAC_DPMS_CTRL_PENDING(%d) == 0\n", or); - NV_ERROR(dev, "DAC_DPMS_CTRL(%d) = 0x%08x\n", or, -@@ -130,7 +130,7 @@ - NV_DEBUG_KMS(dev, "or %d mode %d\n", or, mode); - - /* wait for it to be done */ -- if (!nv_wait(NV50_PDISPLAY_DAC_DPMS_CTRL(or), -+ if (!nv_wait(dev, NV50_PDISPLAY_DAC_DPMS_CTRL(or), - NV50_PDISPLAY_DAC_DPMS_CTRL_PENDING, 0)) { - NV_ERROR(dev, "timeout: DAC_DPMS_CTRL_PENDING(%d) == 0\n", or); - NV_ERROR(dev, "DAC_DPMS_CTRL(%d) = 0x%08x\n", or, -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_display.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_display.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_display.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_display.c 2010-11-05 00:40:00.000000000 +0100 -@@ -30,154 +30,20 @@ - #include "nouveau_connector.h" - #include "nouveau_fb.h" - #include "nouveau_fbcon.h" -+#include "nouveau_ramht.h" - #include "drm_crtc_helper.h" - --static void --nv50_evo_channel_del(struct nouveau_channel **pchan) --{ -- struct nouveau_channel *chan = *pchan; -- -- if (!chan) -- return; -- *pchan = NULL; -- -- nouveau_gpuobj_channel_takedown(chan); -- nouveau_bo_ref(NULL, &chan->pushbuf_bo); -- -- if (chan->user) -- iounmap(chan->user); -- -- kfree(chan); --} -- --static int --nv50_evo_dmaobj_new(struct nouveau_channel *evo, uint32_t class, uint32_t name, -- uint32_t tile_flags, uint32_t magic_flags, -- uint32_t offset, uint32_t limit) --{ -- struct drm_nouveau_private *dev_priv = evo->dev->dev_private; -- struct drm_device *dev = evo->dev; -- struct nouveau_gpuobj *obj = NULL; -- int ret; -- -- ret = nouveau_gpuobj_new(dev, evo, 6*4, 32, 0, &obj); -- if (ret) -- return ret; -- obj->engine = NVOBJ_ENGINE_DISPLAY; -- -- ret = nouveau_gpuobj_ref_add(dev, evo, name, obj, NULL); -- if (ret) { -- nouveau_gpuobj_del(dev, &obj); -- return ret; -- } -- -- nv_wo32(dev, obj, 0, (tile_flags << 22) | (magic_flags << 16) | class); -- nv_wo32(dev, obj, 1, limit); -- nv_wo32(dev, obj, 2, offset); -- nv_wo32(dev, obj, 3, 0x00000000); -- nv_wo32(dev, obj, 4, 0x00000000); -- if (dev_priv->card_type < NV_C0) -- nv_wo32(dev, obj, 5, 0x00010000); -- else -- nv_wo32(dev, obj, 5, 0x00020000); -- dev_priv->engine.instmem.flush(dev); -- -- return 0; --} -- --static int --nv50_evo_channel_new(struct drm_device *dev, struct nouveau_channel **pchan) -+static inline int -+nv50_sor_nr(struct drm_device *dev) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; -- struct nouveau_channel *chan; -- int ret; -- -- chan = kzalloc(sizeof(struct nouveau_channel), GFP_KERNEL); -- if (!chan) -- return -ENOMEM; -- *pchan = chan; -- -- chan->id = -1; -- chan->dev = dev; -- chan->user_get = 4; -- chan->user_put = 0; -- -- INIT_LIST_HEAD(&chan->ramht_refs); -- -- ret = nouveau_gpuobj_new_ref(dev, NULL, NULL, 0, 32768, 0x1000, -- NVOBJ_FLAG_ZERO_ALLOC, &chan->ramin); -- if (ret) { -- NV_ERROR(dev, "Error allocating EVO channel memory: %d\n", ret); -- nv50_evo_channel_del(pchan); -- return ret; -- } -- -- ret = drm_mm_init(&chan->ramin_heap, -- chan->ramin->gpuobj->im_pramin->start, 32768); -- if (ret) { -- NV_ERROR(dev, "Error initialising EVO PRAMIN heap: %d\n", ret); -- nv50_evo_channel_del(pchan); -- return ret; -- } -- -- ret = nouveau_gpuobj_new_ref(dev, chan, chan, 0, 4096, 16, -- 0, &chan->ramht); -- if (ret) { -- NV_ERROR(dev, "Unable to allocate EVO RAMHT: %d\n", ret); -- nv50_evo_channel_del(pchan); -- return ret; -- } -- -- if (dev_priv->chipset != 0x50) { -- ret = nv50_evo_dmaobj_new(chan, 0x3d, NvEvoFB16, 0x70, 0x19, -- 0, 0xffffffff); -- if (ret) { -- nv50_evo_channel_del(pchan); -- return ret; -- } -- -- -- ret = nv50_evo_dmaobj_new(chan, 0x3d, NvEvoFB32, 0x7a, 0x19, -- 0, 0xffffffff); -- if (ret) { -- nv50_evo_channel_del(pchan); -- return ret; -- } -- } -- -- ret = nv50_evo_dmaobj_new(chan, 0x3d, NvEvoVRAM, 0, 0x19, -- 0, dev_priv->vram_size); -- if (ret) { -- nv50_evo_channel_del(pchan); -- return ret; -- } -- -- ret = nouveau_bo_new(dev, NULL, 4096, 0, TTM_PL_FLAG_VRAM, 0, 0, -- false, true, &chan->pushbuf_bo); -- if (ret == 0) -- ret = nouveau_bo_pin(chan->pushbuf_bo, TTM_PL_FLAG_VRAM); -- if (ret) { -- NV_ERROR(dev, "Error creating EVO DMA push buffer: %d\n", ret); -- nv50_evo_channel_del(pchan); -- return ret; -- } - -- ret = nouveau_bo_map(chan->pushbuf_bo); -- if (ret) { -- NV_ERROR(dev, "Error mapping EVO DMA push buffer: %d\n", ret); -- nv50_evo_channel_del(pchan); -- return ret; -- } -+ if (dev_priv->chipset < 0x90 || -+ dev_priv->chipset == 0x92 || -+ dev_priv->chipset == 0xa0) -+ return 2; - -- chan->user = ioremap(pci_resource_start(dev->pdev, 0) + -- NV50_PDISPLAY_USER(0), PAGE_SIZE); -- if (!chan->user) { -- NV_ERROR(dev, "Error mapping EVO control regs.\n"); -- nv50_evo_channel_del(pchan); -- return -ENOMEM; -- } -- -- return 0; -+ return 4; - } - - int -@@ -195,17 +61,16 @@ - nv50_display_init(struct drm_device *dev) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; -- struct nouveau_timer_engine *ptimer = &dev_priv->engine.timer; - struct nouveau_gpio_engine *pgpio = &dev_priv->engine.gpio; -- struct nouveau_channel *evo = dev_priv->evo; - struct drm_connector *connector; -- uint32_t val, ram_amount; -- uint64_t start; -+ struct nouveau_channel *evo; - int ret, i; -+ u32 val; - - NV_DEBUG_KMS(dev, "\n"); - - nv_wr32(dev, 0x00610184, nv_rd32(dev, 0x00614004)); -+ - /* - * I think the 0x006101XX range is some kind of main control area - * that enables things. -@@ -221,17 +86,20 @@ - val = nv_rd32(dev, 0x0061610c + (i * 0x800)); - nv_wr32(dev, 0x0061019c + (i * 0x10), val); - } -+ - /* DAC */ - for (i = 0; i < 3; i++) { - val = nv_rd32(dev, 0x0061a000 + (i * 0x800)); - nv_wr32(dev, 0x006101d0 + (i * 0x04), val); - } -+ - /* SOR */ -- for (i = 0; i < 4; i++) { -+ for (i = 0; i < nv50_sor_nr(dev); i++) { - val = nv_rd32(dev, 0x0061c000 + (i * 0x800)); - nv_wr32(dev, 0x006101e0 + (i * 0x04), val); - } -- /* Something not yet in use, tv-out maybe. */ -+ -+ /* EXT */ - for (i = 0; i < 3; i++) { - val = nv_rd32(dev, 0x0061e000 + (i * 0x800)); - nv_wr32(dev, 0x006101f0 + (i * 0x04), val); -@@ -243,24 +111,13 @@ - nv_wr32(dev, NV50_PDISPLAY_DAC_CLK_CTRL1(i), 0x00000001); - } - -- /* This used to be in crtc unblank, but seems out of place there. */ -- nv_wr32(dev, NV50_PDISPLAY_UNK_380, 0); -- /* RAM is clamped to 256 MiB. */ -- ram_amount = dev_priv->vram_size; -- NV_DEBUG_KMS(dev, "ram_amount %d\n", ram_amount); -- if (ram_amount > 256*1024*1024) -- ram_amount = 256*1024*1024; -- nv_wr32(dev, NV50_PDISPLAY_RAM_AMOUNT, ram_amount - 1); -- nv_wr32(dev, NV50_PDISPLAY_UNK_388, 0x150000); -- nv_wr32(dev, NV50_PDISPLAY_UNK_38C, 0); -- - /* The precise purpose is unknown, i suspect it has something to do - * with text mode. - */ - if (nv_rd32(dev, NV50_PDISPLAY_INTR_1) & 0x100) { - nv_wr32(dev, NV50_PDISPLAY_INTR_1, 0x100); - nv_wr32(dev, 0x006194e8, nv_rd32(dev, 0x006194e8) & ~1); -- if (!nv_wait(0x006194e8, 2, 0)) { -+ if (!nv_wait(dev, 0x006194e8, 2, 0)) { - NV_ERROR(dev, "timeout: (0x6194e8 & 2) != 0\n"); - NV_ERROR(dev, "0x6194e8 = 0x%08x\n", - nv_rd32(dev, 0x6194e8)); -@@ -268,39 +125,9 @@ - } - } - -- /* taken from nv bug #12637, attempts to un-wedge the hw if it's -- * stuck in some unspecified state -- */ -- start = ptimer->read(dev); -- nv_wr32(dev, NV50_PDISPLAY_CHANNEL_STAT(0), 0x2b00); -- while ((val = nv_rd32(dev, NV50_PDISPLAY_CHANNEL_STAT(0))) & 0x1e0000) { -- if ((val & 0x9f0000) == 0x20000) -- nv_wr32(dev, NV50_PDISPLAY_CHANNEL_STAT(0), -- val | 0x800000); -- -- if ((val & 0x3f0000) == 0x30000) -- nv_wr32(dev, NV50_PDISPLAY_CHANNEL_STAT(0), -- val | 0x200000); -- -- if (ptimer->read(dev) - start > 1000000000ULL) { -- NV_ERROR(dev, "timeout: (0x610200 & 0x1e0000) != 0\n"); -- NV_ERROR(dev, "0x610200 = 0x%08x\n", val); -- return -EBUSY; -- } -- } -- -- nv_wr32(dev, NV50_PDISPLAY_CTRL_STATE, NV50_PDISPLAY_CTRL_STATE_ENABLE); -- nv_wr32(dev, NV50_PDISPLAY_CHANNEL_STAT(0), 0x1000b03); -- if (!nv_wait(NV50_PDISPLAY_CHANNEL_STAT(0), 0x40000000, 0x40000000)) { -- NV_ERROR(dev, "timeout: (0x610200 & 0x40000000) == 0x40000000\n"); -- NV_ERROR(dev, "0x610200 = 0x%08x\n", -- nv_rd32(dev, NV50_PDISPLAY_CHANNEL_STAT(0))); -- return -EBUSY; -- } -- - for (i = 0; i < 2; i++) { - nv_wr32(dev, NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(i), 0x2000); -- if (!nv_wait(NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(i), -+ if (!nv_wait(dev, NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(i), - NV50_PDISPLAY_CURSOR_CURSOR_CTRL2_STATUS, 0)) { - NV_ERROR(dev, "timeout: CURSOR_CTRL2_STATUS == 0\n"); - NV_ERROR(dev, "CURSOR_CTRL2 = 0x%08x\n", -@@ -310,7 +137,7 @@ - - nv_wr32(dev, NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(i), - NV50_PDISPLAY_CURSOR_CURSOR_CTRL2_ON); -- if (!nv_wait(NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(i), -+ if (!nv_wait(dev, NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(i), - NV50_PDISPLAY_CURSOR_CURSOR_CTRL2_STATUS, - NV50_PDISPLAY_CURSOR_CURSOR_CTRL2_STATUS_ACTIVE)) { - NV_ERROR(dev, "timeout: " -@@ -321,39 +148,31 @@ - } - } - -- nv_wr32(dev, NV50_PDISPLAY_OBJECTS, (evo->ramin->instance >> 8) | 9); -+ nv_wr32(dev, NV50_PDISPLAY_PIO_CTRL, 0x00000000); -+ nv_mask(dev, NV50_PDISPLAY_INTR_0, 0x00000000, 0x00000000); -+ nv_wr32(dev, NV50_PDISPLAY_INTR_EN_0, 0x00000000); -+ nv_mask(dev, NV50_PDISPLAY_INTR_1, 0x00000000, 0x00000000); -+ nv_wr32(dev, NV50_PDISPLAY_INTR_EN_1, -+ NV50_PDISPLAY_INTR_EN_1_CLK_UNK10 | -+ NV50_PDISPLAY_INTR_EN_1_CLK_UNK20 | -+ NV50_PDISPLAY_INTR_EN_1_CLK_UNK40); -+ -+ /* enable hotplug interrupts */ -+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) { -+ struct nouveau_connector *conn = nouveau_connector(connector); -+ -+ if (conn->dcb->gpio_tag == 0xff) -+ continue; - -- /* initialise fifo */ -- nv_wr32(dev, NV50_PDISPLAY_CHANNEL_DMA_CB(0), -- ((evo->pushbuf_bo->bo.mem.mm_node->start << PAGE_SHIFT) >> 8) | -- NV50_PDISPLAY_CHANNEL_DMA_CB_LOCATION_VRAM | -- NV50_PDISPLAY_CHANNEL_DMA_CB_VALID); -- nv_wr32(dev, NV50_PDISPLAY_CHANNEL_UNK2(0), 0x00010000); -- nv_wr32(dev, NV50_PDISPLAY_CHANNEL_UNK3(0), 0x00000002); -- if (!nv_wait(0x610200, 0x80000000, 0x00000000)) { -- NV_ERROR(dev, "timeout: (0x610200 & 0x80000000) == 0\n"); -- NV_ERROR(dev, "0x610200 = 0x%08x\n", nv_rd32(dev, 0x610200)); -- return -EBUSY; -- } -- nv_wr32(dev, NV50_PDISPLAY_CHANNEL_STAT(0), -- (nv_rd32(dev, NV50_PDISPLAY_CHANNEL_STAT(0)) & ~0x00000003) | -- NV50_PDISPLAY_CHANNEL_STAT_DMA_ENABLED); -- nv_wr32(dev, NV50_PDISPLAY_USER_PUT(0), 0); -- nv_wr32(dev, NV50_PDISPLAY_CHANNEL_STAT(0), 0x01000003 | -- NV50_PDISPLAY_CHANNEL_STAT_DMA_ENABLED); -- nv_wr32(dev, 0x610300, nv_rd32(dev, 0x610300) & ~1); -- -- evo->dma.max = (4096/4) - 2; -- evo->dma.put = 0; -- evo->dma.cur = evo->dma.put; -- evo->dma.free = evo->dma.max - evo->dma.cur; -+ pgpio->irq_enable(dev, conn->dcb->gpio_tag, true); -+ } - -- ret = RING_SPACE(evo, NOUVEAU_DMA_SKIPS); -+ ret = nv50_evo_init(dev); - if (ret) - return ret; -+ evo = dev_priv->evo; - -- for (i = 0; i < NOUVEAU_DMA_SKIPS; i++) -- OUT_RING(evo, 0); -+ nv_wr32(dev, NV50_PDISPLAY_OBJECTS, (evo->ramin->vinst >> 8) | 9); - - ret = RING_SPACE(evo, 11); - if (ret) -@@ -370,24 +189,9 @@ - BEGIN_RING(evo, 0, NV50_EVO_CRTC(0, UNK082C), 1); - OUT_RING(evo, 0); - FIRE_RING(evo); -- if (!nv_wait(0x640004, 0xffffffff, evo->dma.put << 2)) -+ if (!nv_wait(dev, 0x640004, 0xffffffff, evo->dma.put << 2)) - NV_ERROR(dev, "evo pushbuf stalled\n"); - -- /* enable clock change interrupts. */ -- nv_wr32(dev, 0x610028, 0x00010001); -- nv_wr32(dev, NV50_PDISPLAY_INTR_EN, (NV50_PDISPLAY_INTR_EN_CLK_UNK10 | -- NV50_PDISPLAY_INTR_EN_CLK_UNK20 | -- NV50_PDISPLAY_INTR_EN_CLK_UNK40)); -- -- /* enable hotplug interrupts */ -- list_for_each_entry(connector, &dev->mode_config.connector_list, head) { -- struct nouveau_connector *conn = nouveau_connector(connector); -- -- if (conn->dcb->gpio_tag == 0xff) -- continue; -- -- pgpio->irq_enable(dev, conn->dcb->gpio_tag, true); -- } - - return 0; - } -@@ -424,7 +228,7 @@ - continue; - - nv_wr32(dev, NV50_PDISPLAY_INTR_1, mask); -- if (!nv_wait(NV50_PDISPLAY_INTR_1, mask, mask)) { -+ if (!nv_wait(dev, NV50_PDISPLAY_INTR_1, mask, mask)) { - NV_ERROR(dev, "timeout: (0x610024 & 0x%08x) == " - "0x%08x\n", mask, mask); - NV_ERROR(dev, "0x610024 = 0x%08x\n", -@@ -432,16 +236,10 @@ - } - } - -- nv_wr32(dev, NV50_PDISPLAY_CHANNEL_STAT(0), 0); -- nv_wr32(dev, NV50_PDISPLAY_CTRL_STATE, 0); -- if (!nv_wait(NV50_PDISPLAY_CHANNEL_STAT(0), 0x1e0000, 0)) { -- NV_ERROR(dev, "timeout: (0x610200 & 0x1e0000) == 0\n"); -- NV_ERROR(dev, "0x610200 = 0x%08x\n", -- nv_rd32(dev, NV50_PDISPLAY_CHANNEL_STAT(0))); -- } -+ nv50_evo_fini(dev); - - for (i = 0; i < 3; i++) { -- if (!nv_wait(NV50_PDISPLAY_SOR_DPMS_STATE(i), -+ if (!nv_wait(dev, NV50_PDISPLAY_SOR_DPMS_STATE(i), - NV50_PDISPLAY_SOR_DPMS_STATE_WAIT, 0)) { - NV_ERROR(dev, "timeout: SOR_DPMS_STATE_WAIT(%d) == 0\n", i); - NV_ERROR(dev, "SOR_DPMS_STATE(%d) = 0x%08x\n", i, -@@ -450,7 +248,7 @@ - } - - /* disable interrupts. */ -- nv_wr32(dev, NV50_PDISPLAY_INTR_EN, 0x00000000); -+ nv_wr32(dev, NV50_PDISPLAY_INTR_EN_1, 0x00000000); - - /* disable hotplug interrupts */ - nv_wr32(dev, 0xe054, 0xffffffff); -@@ -488,13 +286,6 @@ - - dev->mode_config.fb_base = dev_priv->fb_phys; - -- /* Create EVO channel */ -- ret = nv50_evo_channel_new(dev, &dev_priv->evo); -- if (ret) { -- NV_ERROR(dev, "Error creating EVO channel: %d\n", ret); -- return ret; -- } -- - /* Create CRTC objects */ - for (i = 0; i < 2; i++) - nv50_crtc_create(dev, i); -@@ -549,14 +340,11 @@ - void - nv50_display_destroy(struct drm_device *dev) - { -- struct drm_nouveau_private *dev_priv = dev->dev_private; -- - NV_DEBUG_KMS(dev, "\n"); - - drm_mode_config_cleanup(dev); - - nv50_display_disable(dev); -- nv50_evo_channel_del(&dev_priv->evo); - } - - static u16 -@@ -640,32 +428,32 @@ - nv50_display_vblank_crtc_handler(struct drm_device *dev, int crtc) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; -- struct nouveau_channel *chan; -- struct list_head *entry, *tmp; -+ struct nouveau_channel *chan, *tmp; - -- list_for_each_safe(entry, tmp, &dev_priv->vbl_waiting) { -- chan = list_entry(entry, struct nouveau_channel, nvsw.vbl_wait); -+ list_for_each_entry_safe(chan, tmp, &dev_priv->vbl_waiting, -+ nvsw.vbl_wait) { -+ if (chan->nvsw.vblsem_head != crtc) -+ continue; - - nouveau_bo_wr32(chan->notifier_bo, chan->nvsw.vblsem_offset, - chan->nvsw.vblsem_rval); - list_del(&chan->nvsw.vbl_wait); -+ drm_vblank_put(dev, crtc); - } -+ -+ drm_handle_vblank(dev, crtc); - } - - static void - nv50_display_vblank_handler(struct drm_device *dev, uint32_t intr) - { -- intr &= NV50_PDISPLAY_INTR_1_VBLANK_CRTC; -- - if (intr & NV50_PDISPLAY_INTR_1_VBLANK_CRTC_0) - nv50_display_vblank_crtc_handler(dev, 0); - - if (intr & NV50_PDISPLAY_INTR_1_VBLANK_CRTC_1) - nv50_display_vblank_crtc_handler(dev, 1); - -- nv_wr32(dev, NV50_PDISPLAY_INTR_EN, nv_rd32(dev, -- NV50_PDISPLAY_INTR_EN) & ~intr); -- nv_wr32(dev, NV50_PDISPLAY_INTR_1, intr); -+ nv_wr32(dev, NV50_PDISPLAY_INTR_1, NV50_PDISPLAY_INTR_1_VBLANK_CRTC); - } - - static void -@@ -710,7 +498,7 @@ - or = i; - } - -- for (i = 0; type == OUTPUT_ANY && i < 4; i++) { -+ for (i = 0; type == OUTPUT_ANY && i < nv50_sor_nr(dev); i++) { - if (dev_priv->chipset < 0x90 || - dev_priv->chipset == 0x92 || - dev_priv->chipset == 0xa0) -@@ -841,7 +629,7 @@ - or = i; - } - -- for (i = 0; type == OUTPUT_ANY && i < 4; i++) { -+ for (i = 0; type == OUTPUT_ANY && i < nv50_sor_nr(dev); i++) { - if (dev_priv->chipset < 0x90 || - dev_priv->chipset == 0x92 || - dev_priv->chipset == 0xa0) -@@ -991,16 +779,23 @@ - static void - nv50_display_error_handler(struct drm_device *dev) - { -- uint32_t addr, data; -+ u32 channels = (nv_rd32(dev, NV50_PDISPLAY_INTR_0) & 0x001f0000) >> 16; -+ u32 addr, data; -+ int chid; -+ -+ for (chid = 0; chid < 5; chid++) { -+ if (!(channels & (1 << chid))) -+ continue; -+ -+ nv_wr32(dev, NV50_PDISPLAY_INTR_0, 0x00010000 << chid); -+ addr = nv_rd32(dev, NV50_PDISPLAY_TRAPPED_ADDR(chid)); -+ data = nv_rd32(dev, NV50_PDISPLAY_TRAPPED_DATA(chid)); -+ NV_ERROR(dev, "EvoCh %d Mthd 0x%04x Data 0x%08x " -+ "(0x%04x 0x%02x)\n", chid, -+ addr & 0xffc, data, addr >> 16, (addr >> 12) & 0xf); - -- nv_wr32(dev, NV50_PDISPLAY_INTR_0, 0x00010000); -- addr = nv_rd32(dev, NV50_PDISPLAY_TRAPPED_ADDR); -- data = nv_rd32(dev, NV50_PDISPLAY_TRAPPED_DATA); -- -- NV_ERROR(dev, "EvoCh %d Mthd 0x%04x Data 0x%08x (0x%04x 0x%02x)\n", -- 0, addr & 0xffc, data, addr >> 16, (addr >> 12) & 0xf); -- -- nv_wr32(dev, NV50_PDISPLAY_TRAPPED_ADDR, 0x90000000); -+ nv_wr32(dev, NV50_PDISPLAY_TRAPPED_ADDR(chid), 0x90000000); -+ } - } - - void -@@ -1086,9 +881,9 @@ - if (!intr0 && !(intr1 & ~delayed)) - break; - -- if (intr0 & 0x00010000) { -+ if (intr0 & 0x001f0000) { - nv50_display_error_handler(dev); -- intr0 &= ~0x00010000; -+ intr0 &= ~0x001f0000; - } - - if (intr1 & NV50_PDISPLAY_INTR_1_VBLANK_CRTC) { -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_evo.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_evo.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_evo.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_evo.c 2010-11-05 00:40:00.000000000 +0100 -@@ -0,0 +1,318 @@ -+/* -+ * Copyright 2010 Red Hat Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining a -+ * copy of this software and associated documentation files (the "Software"), -+ * to deal in the Software without restriction, including without limitation -+ * the rights to use, copy, modify, merge, publish, distribute, sublicense, -+ * and/or sell copies of the Software, and to permit persons to whom the -+ * Software is furnished to do so, subject to the following conditions: -+ * -+ * The above copyright notice and this permission notice shall be included in -+ * all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR -+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -+ * OTHER DEALINGS IN THE SOFTWARE. -+ * -+ * Authors: Ben Skeggs -+ */ -+ -+#include "drmP.h" -+ -+#include "nouveau_drv.h" -+#include "nouveau_dma.h" -+#include "nouveau_ramht.h" -+ -+static void -+nv50_evo_channel_del(struct nouveau_channel **pevo) -+{ -+ struct drm_nouveau_private *dev_priv; -+ struct nouveau_channel *evo = *pevo; -+ -+ if (!evo) -+ return; -+ *pevo = NULL; -+ -+ dev_priv = evo->dev->dev_private; -+ dev_priv->evo_alloc &= ~(1 << evo->id); -+ -+ nouveau_gpuobj_channel_takedown(evo); -+ nouveau_bo_unmap(evo->pushbuf_bo); -+ nouveau_bo_ref(NULL, &evo->pushbuf_bo); -+ -+ if (evo->user) -+ iounmap(evo->user); -+ -+ kfree(evo); -+} -+ -+int -+nv50_evo_dmaobj_new(struct nouveau_channel *evo, u32 class, u32 name, -+ u32 tile_flags, u32 magic_flags, u32 offset, u32 limit) -+{ -+ struct drm_nouveau_private *dev_priv = evo->dev->dev_private; -+ struct drm_device *dev = evo->dev; -+ struct nouveau_gpuobj *obj = NULL; -+ int ret; -+ -+ ret = nouveau_gpuobj_new(dev, dev_priv->evo, 6*4, 32, 0, &obj); -+ if (ret) -+ return ret; -+ obj->engine = NVOBJ_ENGINE_DISPLAY; -+ -+ nv_wo32(obj, 0, (tile_flags << 22) | (magic_flags << 16) | class); -+ nv_wo32(obj, 4, limit); -+ nv_wo32(obj, 8, offset); -+ nv_wo32(obj, 12, 0x00000000); -+ nv_wo32(obj, 16, 0x00000000); -+ if (dev_priv->card_type < NV_C0) -+ nv_wo32(obj, 20, 0x00010000); -+ else -+ nv_wo32(obj, 20, 0x00020000); -+ dev_priv->engine.instmem.flush(dev); -+ -+ ret = nouveau_ramht_insert(evo, name, obj); -+ nouveau_gpuobj_ref(NULL, &obj); -+ if (ret) { -+ return ret; -+ } -+ -+ return 0; -+} -+ -+static int -+nv50_evo_channel_new(struct drm_device *dev, struct nouveau_channel **pevo) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_channel *evo; -+ int ret; -+ -+ evo = kzalloc(sizeof(struct nouveau_channel), GFP_KERNEL); -+ if (!evo) -+ return -ENOMEM; -+ *pevo = evo; -+ -+ for (evo->id = 0; evo->id < 5; evo->id++) { -+ if (dev_priv->evo_alloc & (1 << evo->id)) -+ continue; -+ -+ dev_priv->evo_alloc |= (1 << evo->id); -+ break; -+ } -+ -+ if (evo->id == 5) { -+ kfree(evo); -+ return -ENODEV; -+ } -+ -+ evo->dev = dev; -+ evo->user_get = 4; -+ evo->user_put = 0; -+ -+ ret = nouveau_bo_new(dev, NULL, 4096, 0, TTM_PL_FLAG_VRAM, 0, 0, -+ false, true, &evo->pushbuf_bo); -+ if (ret == 0) -+ ret = nouveau_bo_pin(evo->pushbuf_bo, TTM_PL_FLAG_VRAM); -+ if (ret) { -+ NV_ERROR(dev, "Error creating EVO DMA push buffer: %d\n", ret); -+ nv50_evo_channel_del(pevo); -+ return ret; -+ } -+ -+ ret = nouveau_bo_map(evo->pushbuf_bo); -+ if (ret) { -+ NV_ERROR(dev, "Error mapping EVO DMA push buffer: %d\n", ret); -+ nv50_evo_channel_del(pevo); -+ return ret; -+ } -+ -+ evo->user = ioremap(pci_resource_start(dev->pdev, 0) + -+ NV50_PDISPLAY_USER(evo->id), PAGE_SIZE); -+ if (!evo->user) { -+ NV_ERROR(dev, "Error mapping EVO control regs.\n"); -+ nv50_evo_channel_del(pevo); -+ return -ENOMEM; -+ } -+ -+ /* bind primary evo channel's ramht to the channel */ -+ if (dev_priv->evo && evo != dev_priv->evo) -+ nouveau_ramht_ref(dev_priv->evo->ramht, &evo->ramht, NULL); -+ -+ return 0; -+} -+ -+static int -+nv50_evo_channel_init(struct nouveau_channel *evo) -+{ -+ struct drm_device *dev = evo->dev; -+ int id = evo->id, ret, i; -+ u64 pushbuf = evo->pushbuf_bo->bo.mem.start << PAGE_SHIFT; -+ u32 tmp; -+ -+ tmp = nv_rd32(dev, NV50_PDISPLAY_EVO_CTRL(id)); -+ if ((tmp & 0x009f0000) == 0x00020000) -+ nv_wr32(dev, NV50_PDISPLAY_EVO_CTRL(id), tmp | 0x00800000); -+ -+ tmp = nv_rd32(dev, NV50_PDISPLAY_EVO_CTRL(id)); -+ if ((tmp & 0x003f0000) == 0x00030000) -+ nv_wr32(dev, NV50_PDISPLAY_EVO_CTRL(id), tmp | 0x00600000); -+ -+ /* initialise fifo */ -+ nv_wr32(dev, NV50_PDISPLAY_EVO_DMA_CB(id), pushbuf >> 8 | -+ NV50_PDISPLAY_EVO_DMA_CB_LOCATION_VRAM | -+ NV50_PDISPLAY_EVO_DMA_CB_VALID); -+ nv_wr32(dev, NV50_PDISPLAY_EVO_UNK2(id), 0x00010000); -+ nv_wr32(dev, NV50_PDISPLAY_EVO_HASH_TAG(id), id); -+ nv_mask(dev, NV50_PDISPLAY_EVO_CTRL(id), NV50_PDISPLAY_EVO_CTRL_DMA, -+ NV50_PDISPLAY_EVO_CTRL_DMA_ENABLED); -+ -+ nv_wr32(dev, NV50_PDISPLAY_USER_PUT(id), 0x00000000); -+ nv_wr32(dev, NV50_PDISPLAY_EVO_CTRL(id), 0x01000003 | -+ NV50_PDISPLAY_EVO_CTRL_DMA_ENABLED); -+ if (!nv_wait(dev, NV50_PDISPLAY_EVO_CTRL(id), 0x80000000, 0x00000000)) { -+ NV_ERROR(dev, "EvoCh %d init timeout: 0x%08x\n", id, -+ nv_rd32(dev, NV50_PDISPLAY_EVO_CTRL(id))); -+ return -EBUSY; -+ } -+ -+ /* enable error reporting on the channel */ -+ nv_mask(dev, 0x610028, 0x00000000, 0x00010001 << id); -+ -+ evo->dma.max = (4096/4) - 2; -+ evo->dma.put = 0; -+ evo->dma.cur = evo->dma.put; -+ evo->dma.free = evo->dma.max - evo->dma.cur; -+ -+ ret = RING_SPACE(evo, NOUVEAU_DMA_SKIPS); -+ if (ret) -+ return ret; -+ -+ for (i = 0; i < NOUVEAU_DMA_SKIPS; i++) -+ OUT_RING(evo, 0); -+ -+ return 0; -+} -+ -+static void -+nv50_evo_channel_fini(struct nouveau_channel *evo) -+{ -+ struct drm_device *dev = evo->dev; -+ int id = evo->id; -+ -+ nv_mask(dev, 0x610028, 0x00010001 << id, 0x00000000); -+ nv_mask(dev, NV50_PDISPLAY_EVO_CTRL(id), 0x00001010, 0x00001000); -+ nv_wr32(dev, NV50_PDISPLAY_INTR_0, (1 << id)); -+ nv_mask(dev, NV50_PDISPLAY_EVO_CTRL(id), 0x00000003, 0x00000000); -+ if (!nv_wait(dev, NV50_PDISPLAY_EVO_CTRL(id), 0x001e0000, 0x00000000)) { -+ NV_ERROR(dev, "EvoCh %d takedown timeout: 0x%08x\n", id, -+ nv_rd32(dev, NV50_PDISPLAY_EVO_CTRL(id))); -+ } -+} -+ -+static int -+nv50_evo_create(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_gpuobj *ramht = NULL; -+ struct nouveau_channel *evo; -+ int ret; -+ -+ /* create primary evo channel, the one we use for modesetting -+ * purporses -+ */ -+ ret = nv50_evo_channel_new(dev, &dev_priv->evo); -+ if (ret) -+ return ret; -+ evo = dev_priv->evo; -+ -+ /* setup object management on it, any other evo channel will -+ * use this also as there's no per-channel support on the -+ * hardware -+ */ -+ ret = nouveau_gpuobj_new(dev, NULL, 32768, 65536, -+ NVOBJ_FLAG_ZERO_ALLOC, &evo->ramin); -+ if (ret) { -+ NV_ERROR(dev, "Error allocating EVO channel memory: %d\n", ret); -+ nv50_evo_channel_del(&dev_priv->evo); -+ return ret; -+ } -+ -+ ret = drm_mm_init(&evo->ramin_heap, 0, 32768); -+ if (ret) { -+ NV_ERROR(dev, "Error initialising EVO PRAMIN heap: %d\n", ret); -+ nv50_evo_channel_del(&dev_priv->evo); -+ return ret; -+ } -+ -+ ret = nouveau_gpuobj_new(dev, evo, 4096, 16, 0, &ramht); -+ if (ret) { -+ NV_ERROR(dev, "Unable to allocate EVO RAMHT: %d\n", ret); -+ nv50_evo_channel_del(&dev_priv->evo); -+ return ret; -+ } -+ -+ ret = nouveau_ramht_new(dev, ramht, &evo->ramht); -+ nouveau_gpuobj_ref(NULL, &ramht); -+ if (ret) { -+ nv50_evo_channel_del(&dev_priv->evo); -+ return ret; -+ } -+ -+ /* create some default objects for the scanout memtypes we support */ -+ if (dev_priv->chipset != 0x50) { -+ ret = nv50_evo_dmaobj_new(evo, 0x3d, NvEvoFB16, 0x70, 0x19, -+ 0, 0xffffffff); -+ if (ret) { -+ nv50_evo_channel_del(&dev_priv->evo); -+ return ret; -+ } -+ -+ -+ ret = nv50_evo_dmaobj_new(evo, 0x3d, NvEvoFB32, 0x7a, 0x19, -+ 0, 0xffffffff); -+ if (ret) { -+ nv50_evo_channel_del(&dev_priv->evo); -+ return ret; -+ } -+ } -+ -+ ret = nv50_evo_dmaobj_new(evo, 0x3d, NvEvoVRAM, 0, 0x19, -+ 0, dev_priv->vram_size); -+ if (ret) { -+ nv50_evo_channel_del(&dev_priv->evo); -+ return ret; -+ } -+ -+ return 0; -+} -+ -+int -+nv50_evo_init(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ int ret; -+ -+ if (!dev_priv->evo) { -+ ret = nv50_evo_create(dev); -+ if (ret) -+ return ret; -+ } -+ -+ return nv50_evo_channel_init(dev_priv->evo); -+} -+ -+void -+nv50_evo_fini(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ -+ if (dev_priv->evo) { -+ nv50_evo_channel_fini(dev_priv->evo); -+ nv50_evo_channel_del(&dev_priv->evo); -+ } -+} -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_evo.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_evo.h ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_evo.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_evo.h 2010-11-05 00:40:00.000000000 +0100 -@@ -24,6 +24,15 @@ - * - */ - -+#ifndef __NV50_EVO_H__ -+#define __NV50_EVO_H__ -+ -+int nv50_evo_init(struct drm_device *dev); -+void nv50_evo_fini(struct drm_device *dev); -+int nv50_evo_dmaobj_new(struct nouveau_channel *, u32 class, u32 name, -+ u32 tile_flags, u32 magic_flags, -+ u32 offset, u32 limit); -+ - #define NV50_EVO_UPDATE 0x00000080 - #define NV50_EVO_UNK84 0x00000084 - #define NV50_EVO_UNK84_NOTIFY 0x40000000 -@@ -111,3 +120,4 @@ - #define NV50_EVO_CRTC_SCALE_RES1 0x000008d8 - #define NV50_EVO_CRTC_SCALE_RES2 0x000008dc - -+#endif -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_fb.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_fb.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_fb.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_fb.c 2010-11-05 00:40:00.000000000 +0100 -@@ -20,6 +20,7 @@ - case 0x50: - nv_wr32(dev, 0x100c90, 0x0707ff); - break; -+ case 0xa3: - case 0xa5: - case 0xa8: - nv_wr32(dev, 0x100c90, 0x0d0fff); -@@ -36,3 +37,46 @@ - nv50_fb_takedown(struct drm_device *dev) - { - } -+ -+void -+nv50_fb_vm_trap(struct drm_device *dev, int display, const char *name) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ unsigned long flags; -+ u32 trap[6], idx, chinst; -+ int i, ch; -+ -+ idx = nv_rd32(dev, 0x100c90); -+ if (!(idx & 0x80000000)) -+ return; -+ idx &= 0x00ffffff; -+ -+ for (i = 0; i < 6; i++) { -+ nv_wr32(dev, 0x100c90, idx | i << 24); -+ trap[i] = nv_rd32(dev, 0x100c94); -+ } -+ nv_wr32(dev, 0x100c90, idx | 0x80000000); -+ -+ if (!display) -+ return; -+ -+ chinst = (trap[2] << 16) | trap[1]; -+ -+ spin_lock_irqsave(&dev_priv->channels.lock, flags); -+ for (ch = 0; ch < dev_priv->engine.fifo.channels; ch++) { -+ struct nouveau_channel *chan = dev_priv->channels.ptr[ch]; -+ -+ if (!chan || !chan->ramin) -+ continue; -+ -+ if (chinst == chan->ramin->vinst >> 12) -+ break; -+ } -+ spin_unlock_irqrestore(&dev_priv->channels.lock, flags); -+ -+ NV_INFO(dev, "%s - VM: Trapped %s at %02x%04x%04x status %08x " -+ "channel %d (0x%08x)\n", -+ name, (trap[5] & 0x100 ? "read" : "write"), -+ trap[5] & 0xff, trap[4] & 0xffff, trap[3] & 0xffff, -+ trap[0], ch, chinst); -+} -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_fbcon.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_fbcon.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_fbcon.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_fbcon.c 2010-11-05 00:40:00.000000000 +0100 -@@ -1,28 +1,21 @@ - #include "drmP.h" - #include "nouveau_drv.h" - #include "nouveau_dma.h" -+#include "nouveau_ramht.h" - #include "nouveau_fbcon.h" - --void -+int - nv50_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect) - { - struct nouveau_fbdev *nfbdev = info->par; - struct drm_device *dev = nfbdev->dev; - struct drm_nouveau_private *dev_priv = dev->dev_private; - struct nouveau_channel *chan = dev_priv->channel; -+ int ret; - -- if (info->state != FBINFO_STATE_RUNNING) -- return; -- -- if (!(info->flags & FBINFO_HWACCEL_DISABLED) && -- RING_SPACE(chan, rect->rop == ROP_COPY ? 7 : 11)) { -- nouveau_fbcon_gpu_lockup(info); -- } -- -- if (info->flags & FBINFO_HWACCEL_DISABLED) { -- cfb_fillrect(info, rect); -- return; -- } -+ ret = RING_SPACE(chan, rect->rop == ROP_COPY ? 7 : 11); -+ if (ret) -+ return ret; - - if (rect->rop != ROP_COPY) { - BEGIN_RING(chan, NvSub2D, 0x02ac, 1); -@@ -44,27 +37,21 @@ - OUT_RING(chan, 3); - } - FIRE_RING(chan); -+ return 0; - } - --void -+int - nv50_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region) - { - struct nouveau_fbdev *nfbdev = info->par; - struct drm_device *dev = nfbdev->dev; - struct drm_nouveau_private *dev_priv = dev->dev_private; - struct nouveau_channel *chan = dev_priv->channel; -+ int ret; - -- if (info->state != FBINFO_STATE_RUNNING) -- return; -- -- if (!(info->flags & FBINFO_HWACCEL_DISABLED) && RING_SPACE(chan, 12)) { -- nouveau_fbcon_gpu_lockup(info); -- } -- -- if (info->flags & FBINFO_HWACCEL_DISABLED) { -- cfb_copyarea(info, region); -- return; -- } -+ ret = RING_SPACE(chan, 12); -+ if (ret) -+ return ret; - - BEGIN_RING(chan, NvSub2D, 0x0110, 1); - OUT_RING(chan, 0); -@@ -79,9 +66,10 @@ - OUT_RING(chan, 0); - OUT_RING(chan, region->sy); - FIRE_RING(chan); -+ return 0; - } - --void -+int - nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) - { - struct nouveau_fbdev *nfbdev = info->par; -@@ -91,23 +79,14 @@ - uint32_t width, dwords, *data = (uint32_t *)image->data; - uint32_t mask = ~(~0 >> (32 - info->var.bits_per_pixel)); - uint32_t *palette = info->pseudo_palette; -+ int ret; - -- if (info->state != FBINFO_STATE_RUNNING) -- return; -- -- if (image->depth != 1) { -- cfb_imageblit(info, image); -- return; -- } -- -- if (!(info->flags & FBINFO_HWACCEL_DISABLED) && RING_SPACE(chan, 11)) { -- nouveau_fbcon_gpu_lockup(info); -- } -+ if (image->depth != 1) -+ return -ENODEV; - -- if (info->flags & FBINFO_HWACCEL_DISABLED) { -- cfb_imageblit(info, image); -- return; -- } -+ ret = RING_SPACE(chan, 11); -+ if (ret) -+ return ret; - - width = ALIGN(image->width, 32); - dwords = (width * image->height) >> 5; -@@ -133,11 +112,9 @@ - while (dwords) { - int push = dwords > 2047 ? 2047 : dwords; - -- if (RING_SPACE(chan, push + 1)) { -- nouveau_fbcon_gpu_lockup(info); -- cfb_imageblit(info, image); -- return; -- } -+ ret = RING_SPACE(chan, push + 1); -+ if (ret) -+ return ret; - - dwords -= push; - -@@ -147,6 +124,7 @@ - } - - FIRE_RING(chan); -+ return 0; - } - - int -@@ -193,7 +171,8 @@ - if (ret) - return ret; - -- ret = nouveau_gpuobj_ref_add(dev, dev_priv->channel, Nv2D, eng2d, NULL); -+ ret = nouveau_ramht_insert(dev_priv->channel, Nv2D, eng2d); -+ nouveau_gpuobj_ref(NULL, &eng2d); - if (ret) - return ret; - -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_fifo.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_fifo.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_fifo.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_fifo.c 2010-11-05 00:40:00.000000000 +0100 -@@ -27,13 +27,14 @@ - #include "drmP.h" - #include "drm.h" - #include "nouveau_drv.h" -+#include "nouveau_ramht.h" - - static void - nv50_fifo_playlist_update(struct drm_device *dev) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; - struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; -- struct nouveau_gpuobj_ref *cur; -+ struct nouveau_gpuobj *cur; - int i, nr; - - NV_DEBUG(dev, "\n"); -@@ -43,12 +44,15 @@ - - /* We never schedule channel 0 or 127 */ - for (i = 1, nr = 0; i < 127; i++) { -- if (dev_priv->fifos[i] && dev_priv->fifos[i]->ramfc) -- nv_wo32(dev, cur->gpuobj, nr++, i); -+ if (dev_priv->channels.ptr[i] && -+ dev_priv->channels.ptr[i]->ramfc) { -+ nv_wo32(cur, (nr * 4), i); -+ nr++; -+ } - } - dev_priv->engine.instmem.flush(dev); - -- nv_wr32(dev, 0x32f4, cur->instance >> 12); -+ nv_wr32(dev, 0x32f4, cur->vinst >> 12); - nv_wr32(dev, 0x32ec, nr); - nv_wr32(dev, 0x2500, 0x101); - } -@@ -57,15 +61,15 @@ - nv50_fifo_channel_enable(struct drm_device *dev, int channel) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; -- struct nouveau_channel *chan = dev_priv->fifos[channel]; -+ struct nouveau_channel *chan = dev_priv->channels.ptr[channel]; - uint32_t inst; - - NV_DEBUG(dev, "ch%d\n", channel); - - if (dev_priv->chipset == 0x50) -- inst = chan->ramfc->instance >> 12; -+ inst = chan->ramfc->vinst >> 12; - else -- inst = chan->ramfc->instance >> 8; -+ inst = chan->ramfc->vinst >> 8; - - nv_wr32(dev, NV50_PFIFO_CTX_TABLE(channel), inst | - NV50_PFIFO_CTX_TABLE_CHANNEL_ENABLED); -@@ -115,7 +119,7 @@ - NV_DEBUG(dev, "\n"); - - for (i = 0; i < NV50_PFIFO_CTX_TABLE__SIZE; i++) { -- if (dev_priv->fifos[i]) -+ if (dev_priv->channels.ptr[i]) - nv50_fifo_channel_enable(dev, i); - else - nv50_fifo_channel_disable(dev, i); -@@ -163,19 +167,19 @@ - goto just_reset; - } - -- ret = nouveau_gpuobj_new_ref(dev, NULL, NULL, 0, 128*4, 0x1000, -- NVOBJ_FLAG_ZERO_ALLOC, -- &pfifo->playlist[0]); -+ ret = nouveau_gpuobj_new(dev, NULL, 128*4, 0x1000, -+ NVOBJ_FLAG_ZERO_ALLOC, -+ &pfifo->playlist[0]); - if (ret) { - NV_ERROR(dev, "error creating playlist 0: %d\n", ret); - return ret; - } - -- ret = nouveau_gpuobj_new_ref(dev, NULL, NULL, 0, 128*4, 0x1000, -- NVOBJ_FLAG_ZERO_ALLOC, -- &pfifo->playlist[1]); -+ ret = nouveau_gpuobj_new(dev, NULL, 128*4, 0x1000, -+ NVOBJ_FLAG_ZERO_ALLOC, -+ &pfifo->playlist[1]); - if (ret) { -- nouveau_gpuobj_ref_del(dev, &pfifo->playlist[0]); -+ nouveau_gpuobj_ref(NULL, &pfifo->playlist[0]); - NV_ERROR(dev, "error creating playlist 1: %d\n", ret); - return ret; - } -@@ -203,8 +207,8 @@ - if (!pfifo->playlist[0]) - return; - -- nouveau_gpuobj_ref_del(dev, &pfifo->playlist[0]); -- nouveau_gpuobj_ref_del(dev, &pfifo->playlist[1]); -+ nouveau_gpuobj_ref(NULL, &pfifo->playlist[0]); -+ nouveau_gpuobj_ref(NULL, &pfifo->playlist[1]); - } - - int -@@ -226,59 +230,54 @@ - NV_DEBUG(dev, "ch%d\n", chan->id); - - if (dev_priv->chipset == 0x50) { -- uint32_t ramin_poffset = chan->ramin->gpuobj->im_pramin->start; -- uint32_t ramin_voffset = chan->ramin->gpuobj->im_backing_start; -- -- ret = nouveau_gpuobj_new_fake(dev, ramin_poffset, ramin_voffset, -- 0x100, NVOBJ_FLAG_ZERO_ALLOC | -- NVOBJ_FLAG_ZERO_FREE, &ramfc, -+ ret = nouveau_gpuobj_new_fake(dev, chan->ramin->pinst, -+ chan->ramin->vinst, 0x100, -+ NVOBJ_FLAG_ZERO_ALLOC | -+ NVOBJ_FLAG_ZERO_FREE, - &chan->ramfc); - if (ret) - return ret; - -- ret = nouveau_gpuobj_new_fake(dev, ramin_poffset + 0x0400, -- ramin_voffset + 0x0400, 4096, -- 0, NULL, &chan->cache); -+ ret = nouveau_gpuobj_new_fake(dev, chan->ramin->pinst + 0x0400, -+ chan->ramin->vinst + 0x0400, -+ 4096, 0, &chan->cache); - if (ret) - return ret; - } else { -- ret = nouveau_gpuobj_new_ref(dev, chan, NULL, 0, 0x100, 256, -- NVOBJ_FLAG_ZERO_ALLOC | -- NVOBJ_FLAG_ZERO_FREE, -- &chan->ramfc); -+ ret = nouveau_gpuobj_new(dev, chan, 0x100, 256, -+ NVOBJ_FLAG_ZERO_ALLOC | -+ NVOBJ_FLAG_ZERO_FREE, &chan->ramfc); - if (ret) - return ret; -- ramfc = chan->ramfc->gpuobj; - -- ret = nouveau_gpuobj_new_ref(dev, chan, NULL, 0, 4096, 1024, -- 0, &chan->cache); -+ ret = nouveau_gpuobj_new(dev, chan, 4096, 1024, -+ 0, &chan->cache); - if (ret) - return ret; - } -+ ramfc = chan->ramfc; - - spin_lock_irqsave(&dev_priv->context_switch_lock, flags); - -- nv_wo32(dev, ramfc, 0x48/4, chan->pushbuf->instance >> 4); -- nv_wo32(dev, ramfc, 0x80/4, (0 << 27) /* 4KiB */ | -- (4 << 24) /* SEARCH_FULL */ | -- (chan->ramht->instance >> 4)); -- nv_wo32(dev, ramfc, 0x44/4, 0x2101ffff); -- nv_wo32(dev, ramfc, 0x60/4, 0x7fffffff); -- nv_wo32(dev, ramfc, 0x40/4, 0x00000000); -- nv_wo32(dev, ramfc, 0x7c/4, 0x30000001); -- nv_wo32(dev, ramfc, 0x78/4, 0x00000000); -- nv_wo32(dev, ramfc, 0x3c/4, 0x403f6078); -- nv_wo32(dev, ramfc, 0x50/4, chan->pushbuf_base + -- chan->dma.ib_base * 4); -- nv_wo32(dev, ramfc, 0x54/4, drm_order(chan->dma.ib_max + 1) << 16); -+ nv_wo32(ramfc, 0x48, chan->pushbuf->cinst >> 4); -+ nv_wo32(ramfc, 0x80, ((chan->ramht->bits - 9) << 27) | -+ (4 << 24) /* SEARCH_FULL */ | -+ (chan->ramht->gpuobj->cinst >> 4)); -+ nv_wo32(ramfc, 0x44, 0x2101ffff); -+ nv_wo32(ramfc, 0x60, 0x7fffffff); -+ nv_wo32(ramfc, 0x40, 0x00000000); -+ nv_wo32(ramfc, 0x7c, 0x30000001); -+ nv_wo32(ramfc, 0x78, 0x00000000); -+ nv_wo32(ramfc, 0x3c, 0x403f6078); -+ nv_wo32(ramfc, 0x50, chan->pushbuf_base + chan->dma.ib_base * 4); -+ nv_wo32(ramfc, 0x54, drm_order(chan->dma.ib_max + 1) << 16); - - if (dev_priv->chipset != 0x50) { -- nv_wo32(dev, chan->ramin->gpuobj, 0, chan->id); -- nv_wo32(dev, chan->ramin->gpuobj, 1, -- chan->ramfc->instance >> 8); -+ nv_wo32(chan->ramin, 0, chan->id); -+ nv_wo32(chan->ramin, 4, chan->ramfc->vinst >> 8); - -- nv_wo32(dev, ramfc, 0x88/4, chan->cache->instance >> 10); -- nv_wo32(dev, ramfc, 0x98/4, chan->ramin->instance >> 12); -+ nv_wo32(ramfc, 0x88, chan->cache->vinst >> 10); -+ nv_wo32(ramfc, 0x98, chan->ramin->vinst >> 12); - } - - dev_priv->engine.instmem.flush(dev); -@@ -293,12 +292,26 @@ - nv50_fifo_destroy_context(struct nouveau_channel *chan) - { - struct drm_device *dev = chan->dev; -- struct nouveau_gpuobj_ref *ramfc = chan->ramfc; -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; -+ struct nouveau_gpuobj *ramfc = NULL; -+ unsigned long flags; - - NV_DEBUG(dev, "ch%d\n", chan->id); - -+ spin_lock_irqsave(&dev_priv->context_switch_lock, flags); -+ pfifo->reassign(dev, false); -+ -+ /* Unload the context if it's the currently active one */ -+ if (pfifo->channel_id(dev) == chan->id) { -+ pfifo->disable(dev); -+ pfifo->unload_context(dev); -+ pfifo->enable(dev); -+ } -+ - /* This will ensure the channel is seen as disabled. */ -- chan->ramfc = NULL; -+ nouveau_gpuobj_ref(chan->ramfc, &ramfc); -+ nouveau_gpuobj_ref(NULL, &chan->ramfc); - nv50_fifo_channel_disable(dev, chan->id); - - /* Dummy channel, also used on ch 127 */ -@@ -306,8 +319,12 @@ - nv50_fifo_channel_disable(dev, 127); - nv50_fifo_playlist_update(dev); - -- nouveau_gpuobj_ref_del(dev, &ramfc); -- nouveau_gpuobj_ref_del(dev, &chan->cache); -+ pfifo->reassign(dev, true); -+ spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); -+ -+ /* Free the channel resources */ -+ nouveau_gpuobj_ref(NULL, &ramfc); -+ nouveau_gpuobj_ref(NULL, &chan->cache); - } - - int -@@ -315,63 +332,63 @@ - { - struct drm_device *dev = chan->dev; - struct drm_nouveau_private *dev_priv = dev->dev_private; -- struct nouveau_gpuobj *ramfc = chan->ramfc->gpuobj; -- struct nouveau_gpuobj *cache = chan->cache->gpuobj; -+ struct nouveau_gpuobj *ramfc = chan->ramfc; -+ struct nouveau_gpuobj *cache = chan->cache; - int ptr, cnt; - - NV_DEBUG(dev, "ch%d\n", chan->id); - -- nv_wr32(dev, 0x3330, nv_ro32(dev, ramfc, 0x00/4)); -- nv_wr32(dev, 0x3334, nv_ro32(dev, ramfc, 0x04/4)); -- nv_wr32(dev, 0x3240, nv_ro32(dev, ramfc, 0x08/4)); -- nv_wr32(dev, 0x3320, nv_ro32(dev, ramfc, 0x0c/4)); -- nv_wr32(dev, 0x3244, nv_ro32(dev, ramfc, 0x10/4)); -- nv_wr32(dev, 0x3328, nv_ro32(dev, ramfc, 0x14/4)); -- nv_wr32(dev, 0x3368, nv_ro32(dev, ramfc, 0x18/4)); -- nv_wr32(dev, 0x336c, nv_ro32(dev, ramfc, 0x1c/4)); -- nv_wr32(dev, 0x3370, nv_ro32(dev, ramfc, 0x20/4)); -- nv_wr32(dev, 0x3374, nv_ro32(dev, ramfc, 0x24/4)); -- nv_wr32(dev, 0x3378, nv_ro32(dev, ramfc, 0x28/4)); -- nv_wr32(dev, 0x337c, nv_ro32(dev, ramfc, 0x2c/4)); -- nv_wr32(dev, 0x3228, nv_ro32(dev, ramfc, 0x30/4)); -- nv_wr32(dev, 0x3364, nv_ro32(dev, ramfc, 0x34/4)); -- nv_wr32(dev, 0x32a0, nv_ro32(dev, ramfc, 0x38/4)); -- nv_wr32(dev, 0x3224, nv_ro32(dev, ramfc, 0x3c/4)); -- nv_wr32(dev, 0x324c, nv_ro32(dev, ramfc, 0x40/4)); -- nv_wr32(dev, 0x2044, nv_ro32(dev, ramfc, 0x44/4)); -- nv_wr32(dev, 0x322c, nv_ro32(dev, ramfc, 0x48/4)); -- nv_wr32(dev, 0x3234, nv_ro32(dev, ramfc, 0x4c/4)); -- nv_wr32(dev, 0x3340, nv_ro32(dev, ramfc, 0x50/4)); -- nv_wr32(dev, 0x3344, nv_ro32(dev, ramfc, 0x54/4)); -- nv_wr32(dev, 0x3280, nv_ro32(dev, ramfc, 0x58/4)); -- nv_wr32(dev, 0x3254, nv_ro32(dev, ramfc, 0x5c/4)); -- nv_wr32(dev, 0x3260, nv_ro32(dev, ramfc, 0x60/4)); -- nv_wr32(dev, 0x3264, nv_ro32(dev, ramfc, 0x64/4)); -- nv_wr32(dev, 0x3268, nv_ro32(dev, ramfc, 0x68/4)); -- nv_wr32(dev, 0x326c, nv_ro32(dev, ramfc, 0x6c/4)); -- nv_wr32(dev, 0x32e4, nv_ro32(dev, ramfc, 0x70/4)); -- nv_wr32(dev, 0x3248, nv_ro32(dev, ramfc, 0x74/4)); -- nv_wr32(dev, 0x2088, nv_ro32(dev, ramfc, 0x78/4)); -- nv_wr32(dev, 0x2058, nv_ro32(dev, ramfc, 0x7c/4)); -- nv_wr32(dev, 0x2210, nv_ro32(dev, ramfc, 0x80/4)); -+ nv_wr32(dev, 0x3330, nv_ro32(ramfc, 0x00)); -+ nv_wr32(dev, 0x3334, nv_ro32(ramfc, 0x04)); -+ nv_wr32(dev, 0x3240, nv_ro32(ramfc, 0x08)); -+ nv_wr32(dev, 0x3320, nv_ro32(ramfc, 0x0c)); -+ nv_wr32(dev, 0x3244, nv_ro32(ramfc, 0x10)); -+ nv_wr32(dev, 0x3328, nv_ro32(ramfc, 0x14)); -+ nv_wr32(dev, 0x3368, nv_ro32(ramfc, 0x18)); -+ nv_wr32(dev, 0x336c, nv_ro32(ramfc, 0x1c)); -+ nv_wr32(dev, 0x3370, nv_ro32(ramfc, 0x20)); -+ nv_wr32(dev, 0x3374, nv_ro32(ramfc, 0x24)); -+ nv_wr32(dev, 0x3378, nv_ro32(ramfc, 0x28)); -+ nv_wr32(dev, 0x337c, nv_ro32(ramfc, 0x2c)); -+ nv_wr32(dev, 0x3228, nv_ro32(ramfc, 0x30)); -+ nv_wr32(dev, 0x3364, nv_ro32(ramfc, 0x34)); -+ nv_wr32(dev, 0x32a0, nv_ro32(ramfc, 0x38)); -+ nv_wr32(dev, 0x3224, nv_ro32(ramfc, 0x3c)); -+ nv_wr32(dev, 0x324c, nv_ro32(ramfc, 0x40)); -+ nv_wr32(dev, 0x2044, nv_ro32(ramfc, 0x44)); -+ nv_wr32(dev, 0x322c, nv_ro32(ramfc, 0x48)); -+ nv_wr32(dev, 0x3234, nv_ro32(ramfc, 0x4c)); -+ nv_wr32(dev, 0x3340, nv_ro32(ramfc, 0x50)); -+ nv_wr32(dev, 0x3344, nv_ro32(ramfc, 0x54)); -+ nv_wr32(dev, 0x3280, nv_ro32(ramfc, 0x58)); -+ nv_wr32(dev, 0x3254, nv_ro32(ramfc, 0x5c)); -+ nv_wr32(dev, 0x3260, nv_ro32(ramfc, 0x60)); -+ nv_wr32(dev, 0x3264, nv_ro32(ramfc, 0x64)); -+ nv_wr32(dev, 0x3268, nv_ro32(ramfc, 0x68)); -+ nv_wr32(dev, 0x326c, nv_ro32(ramfc, 0x6c)); -+ nv_wr32(dev, 0x32e4, nv_ro32(ramfc, 0x70)); -+ nv_wr32(dev, 0x3248, nv_ro32(ramfc, 0x74)); -+ nv_wr32(dev, 0x2088, nv_ro32(ramfc, 0x78)); -+ nv_wr32(dev, 0x2058, nv_ro32(ramfc, 0x7c)); -+ nv_wr32(dev, 0x2210, nv_ro32(ramfc, 0x80)); - -- cnt = nv_ro32(dev, ramfc, 0x84/4); -+ cnt = nv_ro32(ramfc, 0x84); - for (ptr = 0; ptr < cnt; ptr++) { - nv_wr32(dev, NV40_PFIFO_CACHE1_METHOD(ptr), -- nv_ro32(dev, cache, (ptr * 2) + 0)); -+ nv_ro32(cache, (ptr * 8) + 0)); - nv_wr32(dev, NV40_PFIFO_CACHE1_DATA(ptr), -- nv_ro32(dev, cache, (ptr * 2) + 1)); -+ nv_ro32(cache, (ptr * 8) + 4)); - } - nv_wr32(dev, NV03_PFIFO_CACHE1_PUT, cnt << 2); - nv_wr32(dev, NV03_PFIFO_CACHE1_GET, 0); - - /* guessing that all the 0x34xx regs aren't on NV50 */ - if (dev_priv->chipset != 0x50) { -- nv_wr32(dev, 0x340c, nv_ro32(dev, ramfc, 0x88/4)); -- nv_wr32(dev, 0x3400, nv_ro32(dev, ramfc, 0x8c/4)); -- nv_wr32(dev, 0x3404, nv_ro32(dev, ramfc, 0x90/4)); -- nv_wr32(dev, 0x3408, nv_ro32(dev, ramfc, 0x94/4)); -- nv_wr32(dev, 0x3410, nv_ro32(dev, ramfc, 0x98/4)); -+ nv_wr32(dev, 0x340c, nv_ro32(ramfc, 0x88)); -+ nv_wr32(dev, 0x3400, nv_ro32(ramfc, 0x8c)); -+ nv_wr32(dev, 0x3404, nv_ro32(ramfc, 0x90)); -+ nv_wr32(dev, 0x3408, nv_ro32(ramfc, 0x94)); -+ nv_wr32(dev, 0x3410, nv_ro32(ramfc, 0x98)); - } - - nv_wr32(dev, NV03_PFIFO_CACHE1_PUSH1, chan->id | (1<<16)); -@@ -393,68 +410,69 @@ - if (chid < 1 || chid >= dev_priv->engine.fifo.channels - 1) - return 0; - -- chan = dev_priv->fifos[chid]; -+ chan = dev_priv->channels.ptr[chid]; - if (!chan) { - NV_ERROR(dev, "Inactive channel on PFIFO: %d\n", chid); - return -EINVAL; - } - NV_DEBUG(dev, "ch%d\n", chan->id); -- ramfc = chan->ramfc->gpuobj; -- cache = chan->cache->gpuobj; -+ ramfc = chan->ramfc; -+ cache = chan->cache; - -- nv_wo32(dev, ramfc, 0x00/4, nv_rd32(dev, 0x3330)); -- nv_wo32(dev, ramfc, 0x04/4, nv_rd32(dev, 0x3334)); -- nv_wo32(dev, ramfc, 0x08/4, nv_rd32(dev, 0x3240)); -- nv_wo32(dev, ramfc, 0x0c/4, nv_rd32(dev, 0x3320)); -- nv_wo32(dev, ramfc, 0x10/4, nv_rd32(dev, 0x3244)); -- nv_wo32(dev, ramfc, 0x14/4, nv_rd32(dev, 0x3328)); -- nv_wo32(dev, ramfc, 0x18/4, nv_rd32(dev, 0x3368)); -- nv_wo32(dev, ramfc, 0x1c/4, nv_rd32(dev, 0x336c)); -- nv_wo32(dev, ramfc, 0x20/4, nv_rd32(dev, 0x3370)); -- nv_wo32(dev, ramfc, 0x24/4, nv_rd32(dev, 0x3374)); -- nv_wo32(dev, ramfc, 0x28/4, nv_rd32(dev, 0x3378)); -- nv_wo32(dev, ramfc, 0x2c/4, nv_rd32(dev, 0x337c)); -- nv_wo32(dev, ramfc, 0x30/4, nv_rd32(dev, 0x3228)); -- nv_wo32(dev, ramfc, 0x34/4, nv_rd32(dev, 0x3364)); -- nv_wo32(dev, ramfc, 0x38/4, nv_rd32(dev, 0x32a0)); -- nv_wo32(dev, ramfc, 0x3c/4, nv_rd32(dev, 0x3224)); -- nv_wo32(dev, ramfc, 0x40/4, nv_rd32(dev, 0x324c)); -- nv_wo32(dev, ramfc, 0x44/4, nv_rd32(dev, 0x2044)); -- nv_wo32(dev, ramfc, 0x48/4, nv_rd32(dev, 0x322c)); -- nv_wo32(dev, ramfc, 0x4c/4, nv_rd32(dev, 0x3234)); -- nv_wo32(dev, ramfc, 0x50/4, nv_rd32(dev, 0x3340)); -- nv_wo32(dev, ramfc, 0x54/4, nv_rd32(dev, 0x3344)); -- nv_wo32(dev, ramfc, 0x58/4, nv_rd32(dev, 0x3280)); -- nv_wo32(dev, ramfc, 0x5c/4, nv_rd32(dev, 0x3254)); -- nv_wo32(dev, ramfc, 0x60/4, nv_rd32(dev, 0x3260)); -- nv_wo32(dev, ramfc, 0x64/4, nv_rd32(dev, 0x3264)); -- nv_wo32(dev, ramfc, 0x68/4, nv_rd32(dev, 0x3268)); -- nv_wo32(dev, ramfc, 0x6c/4, nv_rd32(dev, 0x326c)); -- nv_wo32(dev, ramfc, 0x70/4, nv_rd32(dev, 0x32e4)); -- nv_wo32(dev, ramfc, 0x74/4, nv_rd32(dev, 0x3248)); -- nv_wo32(dev, ramfc, 0x78/4, nv_rd32(dev, 0x2088)); -- nv_wo32(dev, ramfc, 0x7c/4, nv_rd32(dev, 0x2058)); -- nv_wo32(dev, ramfc, 0x80/4, nv_rd32(dev, 0x2210)); -+ nv_wo32(ramfc, 0x00, nv_rd32(dev, 0x3330)); -+ nv_wo32(ramfc, 0x04, nv_rd32(dev, 0x3334)); -+ nv_wo32(ramfc, 0x08, nv_rd32(dev, 0x3240)); -+ nv_wo32(ramfc, 0x0c, nv_rd32(dev, 0x3320)); -+ nv_wo32(ramfc, 0x10, nv_rd32(dev, 0x3244)); -+ nv_wo32(ramfc, 0x14, nv_rd32(dev, 0x3328)); -+ nv_wo32(ramfc, 0x18, nv_rd32(dev, 0x3368)); -+ nv_wo32(ramfc, 0x1c, nv_rd32(dev, 0x336c)); -+ nv_wo32(ramfc, 0x20, nv_rd32(dev, 0x3370)); -+ nv_wo32(ramfc, 0x24, nv_rd32(dev, 0x3374)); -+ nv_wo32(ramfc, 0x28, nv_rd32(dev, 0x3378)); -+ nv_wo32(ramfc, 0x2c, nv_rd32(dev, 0x337c)); -+ nv_wo32(ramfc, 0x30, nv_rd32(dev, 0x3228)); -+ nv_wo32(ramfc, 0x34, nv_rd32(dev, 0x3364)); -+ nv_wo32(ramfc, 0x38, nv_rd32(dev, 0x32a0)); -+ nv_wo32(ramfc, 0x3c, nv_rd32(dev, 0x3224)); -+ nv_wo32(ramfc, 0x40, nv_rd32(dev, 0x324c)); -+ nv_wo32(ramfc, 0x44, nv_rd32(dev, 0x2044)); -+ nv_wo32(ramfc, 0x48, nv_rd32(dev, 0x322c)); -+ nv_wo32(ramfc, 0x4c, nv_rd32(dev, 0x3234)); -+ nv_wo32(ramfc, 0x50, nv_rd32(dev, 0x3340)); -+ nv_wo32(ramfc, 0x54, nv_rd32(dev, 0x3344)); -+ nv_wo32(ramfc, 0x58, nv_rd32(dev, 0x3280)); -+ nv_wo32(ramfc, 0x5c, nv_rd32(dev, 0x3254)); -+ nv_wo32(ramfc, 0x60, nv_rd32(dev, 0x3260)); -+ nv_wo32(ramfc, 0x64, nv_rd32(dev, 0x3264)); -+ nv_wo32(ramfc, 0x68, nv_rd32(dev, 0x3268)); -+ nv_wo32(ramfc, 0x6c, nv_rd32(dev, 0x326c)); -+ nv_wo32(ramfc, 0x70, nv_rd32(dev, 0x32e4)); -+ nv_wo32(ramfc, 0x74, nv_rd32(dev, 0x3248)); -+ nv_wo32(ramfc, 0x78, nv_rd32(dev, 0x2088)); -+ nv_wo32(ramfc, 0x7c, nv_rd32(dev, 0x2058)); -+ nv_wo32(ramfc, 0x80, nv_rd32(dev, 0x2210)); - - put = (nv_rd32(dev, NV03_PFIFO_CACHE1_PUT) & 0x7ff) >> 2; - get = (nv_rd32(dev, NV03_PFIFO_CACHE1_GET) & 0x7ff) >> 2; - ptr = 0; - while (put != get) { -- nv_wo32(dev, cache, ptr++, -- nv_rd32(dev, NV40_PFIFO_CACHE1_METHOD(get))); -- nv_wo32(dev, cache, ptr++, -- nv_rd32(dev, NV40_PFIFO_CACHE1_DATA(get))); -+ nv_wo32(cache, ptr + 0, -+ nv_rd32(dev, NV40_PFIFO_CACHE1_METHOD(get))); -+ nv_wo32(cache, ptr + 4, -+ nv_rd32(dev, NV40_PFIFO_CACHE1_DATA(get))); - get = (get + 1) & 0x1ff; -+ ptr += 8; - } - - /* guessing that all the 0x34xx regs aren't on NV50 */ - if (dev_priv->chipset != 0x50) { -- nv_wo32(dev, ramfc, 0x84/4, ptr >> 1); -- nv_wo32(dev, ramfc, 0x88/4, nv_rd32(dev, 0x340c)); -- nv_wo32(dev, ramfc, 0x8c/4, nv_rd32(dev, 0x3400)); -- nv_wo32(dev, ramfc, 0x90/4, nv_rd32(dev, 0x3404)); -- nv_wo32(dev, ramfc, 0x94/4, nv_rd32(dev, 0x3408)); -- nv_wo32(dev, ramfc, 0x98/4, nv_rd32(dev, 0x3410)); -+ nv_wo32(ramfc, 0x84, ptr >> 3); -+ nv_wo32(ramfc, 0x88, nv_rd32(dev, 0x340c)); -+ nv_wo32(ramfc, 0x8c, nv_rd32(dev, 0x3400)); -+ nv_wo32(ramfc, 0x90, nv_rd32(dev, 0x3404)); -+ nv_wo32(ramfc, 0x94, nv_rd32(dev, 0x3408)); -+ nv_wo32(ramfc, 0x98, nv_rd32(dev, 0x3410)); - } - - dev_priv->engine.instmem.flush(dev); -@@ -464,3 +482,8 @@ - return 0; - } - -+void -+nv50_fifo_tlb_flush(struct drm_device *dev) -+{ -+ nv50_vm_flush(dev, 5); -+} -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_graph.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_graph.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_graph.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_graph.c 2010-11-05 00:40:00.000000000 +0100 -@@ -27,8 +27,12 @@ - #include "drmP.h" - #include "drm.h" - #include "nouveau_drv.h" -- -+#include "nouveau_ramht.h" - #include "nouveau_grctx.h" -+#include "nouveau_dma.h" -+#include "nv50_evo.h" -+ -+static int nv50_graph_register(struct drm_device *); - - static void - nv50_graph_init_reset(struct drm_device *dev) -@@ -145,12 +149,15 @@ - nv50_graph_init_reset(dev); - nv50_graph_init_regs__nv(dev); - nv50_graph_init_regs(dev); -- nv50_graph_init_intr(dev); - - ret = nv50_graph_init_ctxctl(dev); - if (ret) - return ret; - -+ ret = nv50_graph_register(dev); -+ if (ret) -+ return ret; -+ nv50_graph_init_intr(dev); - return 0; - } - -@@ -181,7 +188,7 @@ - /* Be sure we're not in the middle of a context switch or bad things - * will happen, such as unloading the wrong pgraph context. - */ -- if (!nv_wait(0x400300, 0x00000001, 0x00000000)) -+ if (!nv_wait(dev, 0x400300, 0x00000001, 0x00000000)) - NV_ERROR(dev, "Ctxprog is still running\n"); - - inst = nv_rd32(dev, NV50_PGRAPH_CTXCTL_CUR); -@@ -190,9 +197,9 @@ - inst = (inst & NV50_PGRAPH_CTXCTL_CUR_INSTANCE) << 12; - - for (i = 0; i < dev_priv->engine.fifo.channels; i++) { -- struct nouveau_channel *chan = dev_priv->fifos[i]; -+ struct nouveau_channel *chan = dev_priv->channels.ptr[i]; - -- if (chan && chan->ramin && chan->ramin->instance == inst) -+ if (chan && chan->ramin && chan->ramin->vinst == inst) - return chan; - } - -@@ -204,36 +211,34 @@ - { - struct drm_device *dev = chan->dev; - struct drm_nouveau_private *dev_priv = dev->dev_private; -- struct nouveau_gpuobj *ramin = chan->ramin->gpuobj; -- struct nouveau_gpuobj *obj; -+ struct nouveau_gpuobj *ramin = chan->ramin; - struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; - struct nouveau_grctx ctx = {}; - int hdr, ret; - - NV_DEBUG(dev, "ch%d\n", chan->id); - -- ret = nouveau_gpuobj_new_ref(dev, chan, NULL, 0, pgraph->grctx_size, -- 0x1000, NVOBJ_FLAG_ZERO_ALLOC | -- NVOBJ_FLAG_ZERO_FREE, &chan->ramin_grctx); -+ ret = nouveau_gpuobj_new(dev, chan, pgraph->grctx_size, 0, -+ NVOBJ_FLAG_ZERO_ALLOC | -+ NVOBJ_FLAG_ZERO_FREE, &chan->ramin_grctx); - if (ret) - return ret; -- obj = chan->ramin_grctx->gpuobj; - - hdr = (dev_priv->chipset == 0x50) ? 0x200 : 0x20; -- nv_wo32(dev, ramin, (hdr + 0x00)/4, 0x00190002); -- nv_wo32(dev, ramin, (hdr + 0x04)/4, chan->ramin_grctx->instance + -- pgraph->grctx_size - 1); -- nv_wo32(dev, ramin, (hdr + 0x08)/4, chan->ramin_grctx->instance); -- nv_wo32(dev, ramin, (hdr + 0x0c)/4, 0); -- nv_wo32(dev, ramin, (hdr + 0x10)/4, 0); -- nv_wo32(dev, ramin, (hdr + 0x14)/4, 0x00010000); -+ nv_wo32(ramin, hdr + 0x00, 0x00190002); -+ nv_wo32(ramin, hdr + 0x04, chan->ramin_grctx->vinst + -+ pgraph->grctx_size - 1); -+ nv_wo32(ramin, hdr + 0x08, chan->ramin_grctx->vinst); -+ nv_wo32(ramin, hdr + 0x0c, 0); -+ nv_wo32(ramin, hdr + 0x10, 0); -+ nv_wo32(ramin, hdr + 0x14, 0x00010000); - - ctx.dev = chan->dev; - ctx.mode = NOUVEAU_GRCTX_VALS; -- ctx.data = obj; -+ ctx.data = chan->ramin_grctx; - nv50_grctx_init(&ctx); - -- nv_wo32(dev, obj, 0x00000/4, chan->ramin->instance >> 12); -+ nv_wo32(chan->ramin_grctx, 0x00000, chan->ramin->vinst >> 12); - - dev_priv->engine.instmem.flush(dev); - return 0; -@@ -244,18 +249,29 @@ - { - struct drm_device *dev = chan->dev; - struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; - int i, hdr = (dev_priv->chipset == 0x50) ? 0x200 : 0x20; -+ unsigned long flags; - - NV_DEBUG(dev, "ch%d\n", chan->id); - -- if (!chan->ramin || !chan->ramin->gpuobj) -+ if (!chan->ramin) - return; - -+ spin_lock_irqsave(&dev_priv->context_switch_lock, flags); -+ pgraph->fifo_access(dev, false); -+ -+ if (pgraph->channel(dev) == chan) -+ pgraph->unload_context(dev); -+ - for (i = hdr; i < hdr + 24; i += 4) -- nv_wo32(dev, chan->ramin->gpuobj, i/4, 0); -+ nv_wo32(chan->ramin, i, 0); - dev_priv->engine.instmem.flush(dev); - -- nouveau_gpuobj_ref_del(dev, &chan->ramin_grctx); -+ pgraph->fifo_access(dev, true); -+ spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); -+ -+ nouveau_gpuobj_ref(NULL, &chan->ramin_grctx); - } - - static int -@@ -282,7 +298,7 @@ - int - nv50_graph_load_context(struct nouveau_channel *chan) - { -- uint32_t inst = chan->ramin->instance >> 12; -+ uint32_t inst = chan->ramin->vinst >> 12; - - NV_DEBUG(chan->dev, "ch%d\n", chan->id); - return nv50_graph_do_load_context(chan->dev, inst); -@@ -324,25 +340,26 @@ - } - - static int --nv50_graph_nvsw_dma_vblsem(struct nouveau_channel *chan, int grclass, -- int mthd, uint32_t data) -+nv50_graph_nvsw_dma_vblsem(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data) - { -- struct nouveau_gpuobj_ref *ref = NULL; -+ struct nouveau_gpuobj *gpuobj; - -- if (nouveau_gpuobj_ref_find(chan, data, &ref)) -+ gpuobj = nouveau_ramht_find(chan, data); -+ if (!gpuobj) - return -ENOENT; - -- if (nouveau_notifier_offset(ref->gpuobj, NULL)) -+ if (nouveau_notifier_offset(gpuobj, NULL)) - return -EINVAL; - -- chan->nvsw.vblsem = ref->gpuobj; -+ chan->nvsw.vblsem = gpuobj; - chan->nvsw.vblsem_offset = ~0; - return 0; - } - - static int --nv50_graph_nvsw_vblsem_offset(struct nouveau_channel *chan, int grclass, -- int mthd, uint32_t data) -+nv50_graph_nvsw_vblsem_offset(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data) - { - if (nouveau_notifier_offset(chan->nvsw.vblsem, &data)) - return -ERANGE; -@@ -352,16 +369,16 @@ - } - - static int --nv50_graph_nvsw_vblsem_release_val(struct nouveau_channel *chan, int grclass, -- int mthd, uint32_t data) -+nv50_graph_nvsw_vblsem_release_val(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data) - { - chan->nvsw.vblsem_rval = data; - return 0; - } - - static int --nv50_graph_nvsw_vblsem_release(struct nouveau_channel *chan, int grclass, -- int mthd, uint32_t data) -+nv50_graph_nvsw_vblsem_release(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data) - { - struct drm_device *dev = chan->dev; - struct drm_nouveau_private *dev_priv = dev->dev_private; -@@ -369,37 +386,129 @@ - if (!chan->nvsw.vblsem || chan->nvsw.vblsem_offset == ~0 || data > 1) - return -EINVAL; - -- if (!(nv_rd32(dev, NV50_PDISPLAY_INTR_EN) & -- NV50_PDISPLAY_INTR_EN_VBLANK_CRTC_(data))) { -- nv_wr32(dev, NV50_PDISPLAY_INTR_1, -- NV50_PDISPLAY_INTR_1_VBLANK_CRTC_(data)); -- nv_wr32(dev, NV50_PDISPLAY_INTR_EN, nv_rd32(dev, -- NV50_PDISPLAY_INTR_EN) | -- NV50_PDISPLAY_INTR_EN_VBLANK_CRTC_(data)); -- } -+ drm_vblank_get(dev, data); - -+ chan->nvsw.vblsem_head = data; - list_add(&chan->nvsw.vbl_wait, &dev_priv->vbl_waiting); -+ -+ return 0; -+} -+ -+static int -+nv50_graph_nvsw_mthd_page_flip(struct nouveau_channel *chan, -+ u32 class, u32 mthd, u32 data) -+{ -+ struct nouveau_page_flip_state s; -+ -+ if (!nouveau_finish_page_flip(chan, &s)) { -+ /* XXX - Do something here */ -+ } -+ - return 0; - } - --static struct nouveau_pgraph_object_method nv50_graph_nvsw_methods[] = { -- { 0x018c, nv50_graph_nvsw_dma_vblsem }, -- { 0x0400, nv50_graph_nvsw_vblsem_offset }, -- { 0x0404, nv50_graph_nvsw_vblsem_release_val }, -- { 0x0408, nv50_graph_nvsw_vblsem_release }, -- {} --}; -- --struct nouveau_pgraph_object_class nv50_graph_grclass[] = { -- { 0x506e, true, nv50_graph_nvsw_methods }, /* nvsw */ -- { 0x0030, false, NULL }, /* null */ -- { 0x5039, false, NULL }, /* m2mf */ -- { 0x502d, false, NULL }, /* 2d */ -- { 0x50c0, false, NULL }, /* compute */ -- { 0x85c0, false, NULL }, /* compute (nva3, nva5, nva8) */ -- { 0x5097, false, NULL }, /* tesla (nv50) */ -- { 0x8297, false, NULL }, /* tesla (nv8x/nv9x) */ -- { 0x8397, false, NULL }, /* tesla (nva0, nvaa, nvac) */ -- { 0x8597, false, NULL }, /* tesla (nva3, nva5, nva8) */ -- {} --}; -+static int -+nv50_graph_register(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ -+ if (dev_priv->engine.graph.registered) -+ return 0; -+ -+ NVOBJ_CLASS(dev, 0x506e, SW); /* nvsw */ -+ NVOBJ_MTHD (dev, 0x506e, 0x018c, nv50_graph_nvsw_dma_vblsem); -+ NVOBJ_MTHD (dev, 0x506e, 0x0400, nv50_graph_nvsw_vblsem_offset); -+ NVOBJ_MTHD (dev, 0x506e, 0x0404, nv50_graph_nvsw_vblsem_release_val); -+ NVOBJ_MTHD (dev, 0x506e, 0x0408, nv50_graph_nvsw_vblsem_release); -+ NVOBJ_MTHD (dev, 0x506e, 0x0500, nv50_graph_nvsw_mthd_page_flip); -+ -+ NVOBJ_CLASS(dev, 0x0030, GR); /* null */ -+ NVOBJ_CLASS(dev, 0x5039, GR); /* m2mf */ -+ NVOBJ_CLASS(dev, 0x502d, GR); /* 2d */ -+ -+ /* tesla */ -+ if (dev_priv->chipset == 0x50) -+ NVOBJ_CLASS(dev, 0x5097, GR); /* tesla (nv50) */ -+ else -+ if (dev_priv->chipset < 0xa0) -+ NVOBJ_CLASS(dev, 0x8297, GR); /* tesla (nv8x/nv9x) */ -+ else { -+ switch (dev_priv->chipset) { -+ case 0xa0: -+ case 0xaa: -+ case 0xac: -+ NVOBJ_CLASS(dev, 0x8397, GR); -+ break; -+ case 0xa3: -+ case 0xa5: -+ case 0xa8: -+ NVOBJ_CLASS(dev, 0x8597, GR); -+ break; -+ case 0xaf: -+ NVOBJ_CLASS(dev, 0x8697, GR); -+ break; -+ } -+ } -+ -+ /* compute */ -+ NVOBJ_CLASS(dev, 0x50c0, GR); -+ if (dev_priv->chipset > 0xa0 && -+ dev_priv->chipset != 0xaa && -+ dev_priv->chipset != 0xac) -+ NVOBJ_CLASS(dev, 0x85c0, GR); -+ -+ dev_priv->engine.graph.registered = true; -+ return 0; -+} -+ -+void -+nv50_graph_tlb_flush(struct drm_device *dev) -+{ -+ nv50_vm_flush(dev, 0); -+} -+ -+void -+nv86_graph_tlb_flush(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_timer_engine *ptimer = &dev_priv->engine.timer; -+ bool idle, timeout = false; -+ unsigned long flags; -+ u64 start; -+ u32 tmp; -+ -+ spin_lock_irqsave(&dev_priv->context_switch_lock, flags); -+ nv_mask(dev, 0x400500, 0x00000001, 0x00000000); -+ -+ start = ptimer->read(dev); -+ do { -+ idle = true; -+ -+ for (tmp = nv_rd32(dev, 0x400380); tmp && idle; tmp >>= 3) { -+ if ((tmp & 7) == 1) -+ idle = false; -+ } -+ -+ for (tmp = nv_rd32(dev, 0x400384); tmp && idle; tmp >>= 3) { -+ if ((tmp & 7) == 1) -+ idle = false; -+ } -+ -+ for (tmp = nv_rd32(dev, 0x400388); tmp && idle; tmp >>= 3) { -+ if ((tmp & 7) == 1) -+ idle = false; -+ } -+ } while (!idle && !(timeout = ptimer->read(dev) - start > 2000000000)); -+ -+ if (timeout) { -+ NV_ERROR(dev, "PGRAPH TLB flush idle timeout fail: " -+ "0x%08x 0x%08x 0x%08x 0x%08x\n", -+ nv_rd32(dev, 0x400700), nv_rd32(dev, 0x400380), -+ nv_rd32(dev, 0x400384), nv_rd32(dev, 0x400388)); -+ } -+ -+ nv50_vm_flush(dev, 0); -+ -+ nv_mask(dev, 0x400500, 0x00000001, 0x00000001); -+ spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); -+} -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_grctx.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_grctx.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_grctx.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_grctx.c 2010-11-05 00:40:00.000000000 +0100 -@@ -103,6 +103,9 @@ - #include "nouveau_drv.h" - #include "nouveau_grctx.h" - -+#define IS_NVA3F(x) (((x) > 0xa0 && (x) < 0xaa) || (x) == 0xaf) -+#define IS_NVAAF(x) ((x) >= 0xaa && (x) <= 0xac) -+ - /* - * This code deals with PGRAPH contexts on NV50 family cards. Like NV40, it's - * the GPU itself that does context-switching, but it needs a special -@@ -182,6 +185,7 @@ - case 0xa8: - case 0xaa: - case 0xac: -+ case 0xaf: - break; - default: - NV_ERROR(ctx->dev, "I don't know how to make a ctxprog for " -@@ -268,6 +272,9 @@ - */ - - static void -+nv50_graph_construct_mmio_ddata(struct nouveau_grctx *ctx); -+ -+static void - nv50_graph_construct_mmio(struct nouveau_grctx *ctx) - { - struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; -@@ -286,7 +293,7 @@ - gr_def(ctx, 0x400840, 0xffe806a8); - } - gr_def(ctx, 0x400844, 0x00000002); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -+ if (IS_NVA3F(dev_priv->chipset)) - gr_def(ctx, 0x400894, 0x00001000); - gr_def(ctx, 0x4008e8, 0x00000003); - gr_def(ctx, 0x4008ec, 0x00001000); -@@ -299,13 +306,15 @@ - - if (dev_priv->chipset >= 0xa0) - cp_ctx(ctx, 0x400b00, 0x1); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) { -+ if (IS_NVA3F(dev_priv->chipset)) { - cp_ctx(ctx, 0x400b10, 0x1); - gr_def(ctx, 0x400b10, 0x0001629d); - cp_ctx(ctx, 0x400b20, 0x1); - gr_def(ctx, 0x400b20, 0x0001629d); - } - -+ nv50_graph_construct_mmio_ddata(ctx); -+ - /* 0C00: VFETCH */ - cp_ctx(ctx, 0x400c08, 0x2); - gr_def(ctx, 0x400c08, 0x0000fe0c); -@@ -314,7 +323,7 @@ - if (dev_priv->chipset < 0xa0) { - cp_ctx(ctx, 0x401008, 0x4); - gr_def(ctx, 0x401014, 0x00001000); -- } else if (dev_priv->chipset == 0xa0 || dev_priv->chipset >= 0xaa) { -+ } else if (!IS_NVA3F(dev_priv->chipset)) { - cp_ctx(ctx, 0x401008, 0x5); - gr_def(ctx, 0x401018, 0x00001000); - } else { -@@ -368,10 +377,13 @@ - case 0xa3: - case 0xa5: - case 0xa8: -+ case 0xaf: - gr_def(ctx, 0x401c00, 0x142500df); - break; - } - -+ /* 2000 */ -+ - /* 2400 */ - cp_ctx(ctx, 0x402400, 0x1); - if (dev_priv->chipset == 0x50) -@@ -380,12 +392,12 @@ - cp_ctx(ctx, 0x402408, 0x2); - gr_def(ctx, 0x402408, 0x00000600); - -- /* 2800 */ -+ /* 2800: CSCHED */ - cp_ctx(ctx, 0x402800, 0x1); - if (dev_priv->chipset == 0x50) - gr_def(ctx, 0x402800, 0x00000006); - -- /* 2C00 */ -+ /* 2C00: ZCULL */ - cp_ctx(ctx, 0x402c08, 0x6); - if (dev_priv->chipset != 0x50) - gr_def(ctx, 0x402c14, 0x01000000); -@@ -396,23 +408,23 @@ - cp_ctx(ctx, 0x402ca0, 0x2); - if (dev_priv->chipset < 0xa0) - gr_def(ctx, 0x402ca0, 0x00000400); -- else if (dev_priv->chipset == 0xa0 || dev_priv->chipset >= 0xaa) -+ else if (!IS_NVA3F(dev_priv->chipset)) - gr_def(ctx, 0x402ca0, 0x00000800); - else - gr_def(ctx, 0x402ca0, 0x00000400); - cp_ctx(ctx, 0x402cac, 0x4); - -- /* 3000 */ -+ /* 3000: ENG2D */ - cp_ctx(ctx, 0x403004, 0x1); - gr_def(ctx, 0x403004, 0x00000001); - -- /* 3404 */ -+ /* 3400 */ - if (dev_priv->chipset >= 0xa0) { - cp_ctx(ctx, 0x403404, 0x1); - gr_def(ctx, 0x403404, 0x00000001); - } - -- /* 5000 */ -+ /* 5000: CCACHE */ - cp_ctx(ctx, 0x405000, 0x1); - switch (dev_priv->chipset) { - case 0x50: -@@ -425,6 +437,7 @@ - case 0xa8: - case 0xaa: - case 0xac: -+ case 0xaf: - gr_def(ctx, 0x405000, 0x000e0080); - break; - case 0x86: -@@ -441,210 +454,6 @@ - cp_ctx(ctx, 0x405024, 0x1); - cp_ctx(ctx, 0x40502c, 0x1); - -- /* 5400 or maybe 4800 */ -- if (dev_priv->chipset == 0x50) { -- offset = 0x405400; -- cp_ctx(ctx, 0x405400, 0xea); -- } else if (dev_priv->chipset < 0x94) { -- offset = 0x405400; -- cp_ctx(ctx, 0x405400, 0xcb); -- } else if (dev_priv->chipset < 0xa0) { -- offset = 0x405400; -- cp_ctx(ctx, 0x405400, 0xcc); -- } else if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) { -- offset = 0x404800; -- cp_ctx(ctx, 0x404800, 0xda); -- } else { -- offset = 0x405400; -- cp_ctx(ctx, 0x405400, 0xd4); -- } -- gr_def(ctx, offset + 0x0c, 0x00000002); -- gr_def(ctx, offset + 0x10, 0x00000001); -- if (dev_priv->chipset >= 0x94) -- offset += 4; -- gr_def(ctx, offset + 0x1c, 0x00000001); -- gr_def(ctx, offset + 0x20, 0x00000100); -- gr_def(ctx, offset + 0x38, 0x00000002); -- gr_def(ctx, offset + 0x3c, 0x00000001); -- gr_def(ctx, offset + 0x40, 0x00000001); -- gr_def(ctx, offset + 0x50, 0x00000001); -- gr_def(ctx, offset + 0x54, 0x003fffff); -- gr_def(ctx, offset + 0x58, 0x00001fff); -- gr_def(ctx, offset + 0x60, 0x00000001); -- gr_def(ctx, offset + 0x64, 0x00000001); -- gr_def(ctx, offset + 0x6c, 0x00000001); -- gr_def(ctx, offset + 0x70, 0x00000001); -- gr_def(ctx, offset + 0x74, 0x00000001); -- gr_def(ctx, offset + 0x78, 0x00000004); -- gr_def(ctx, offset + 0x7c, 0x00000001); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- offset += 4; -- gr_def(ctx, offset + 0x80, 0x00000001); -- gr_def(ctx, offset + 0x84, 0x00000001); -- gr_def(ctx, offset + 0x88, 0x00000007); -- gr_def(ctx, offset + 0x8c, 0x00000001); -- gr_def(ctx, offset + 0x90, 0x00000007); -- gr_def(ctx, offset + 0x94, 0x00000001); -- gr_def(ctx, offset + 0x98, 0x00000001); -- gr_def(ctx, offset + 0x9c, 0x00000001); -- if (dev_priv->chipset == 0x50) { -- gr_def(ctx, offset + 0xb0, 0x00000001); -- gr_def(ctx, offset + 0xb4, 0x00000001); -- gr_def(ctx, offset + 0xbc, 0x00000001); -- gr_def(ctx, offset + 0xc0, 0x0000000a); -- gr_def(ctx, offset + 0xd0, 0x00000040); -- gr_def(ctx, offset + 0xd8, 0x00000002); -- gr_def(ctx, offset + 0xdc, 0x00000100); -- gr_def(ctx, offset + 0xe0, 0x00000001); -- gr_def(ctx, offset + 0xe4, 0x00000100); -- gr_def(ctx, offset + 0x100, 0x00000001); -- gr_def(ctx, offset + 0x124, 0x00000004); -- gr_def(ctx, offset + 0x13c, 0x00000001); -- gr_def(ctx, offset + 0x140, 0x00000100); -- gr_def(ctx, offset + 0x148, 0x00000001); -- gr_def(ctx, offset + 0x154, 0x00000100); -- gr_def(ctx, offset + 0x158, 0x00000001); -- gr_def(ctx, offset + 0x15c, 0x00000100); -- gr_def(ctx, offset + 0x164, 0x00000001); -- gr_def(ctx, offset + 0x170, 0x00000100); -- gr_def(ctx, offset + 0x174, 0x00000001); -- gr_def(ctx, offset + 0x17c, 0x00000001); -- gr_def(ctx, offset + 0x188, 0x00000002); -- gr_def(ctx, offset + 0x190, 0x00000001); -- gr_def(ctx, offset + 0x198, 0x00000001); -- gr_def(ctx, offset + 0x1ac, 0x00000003); -- offset += 0xd0; -- } else { -- gr_def(ctx, offset + 0xb0, 0x00000001); -- gr_def(ctx, offset + 0xb4, 0x00000100); -- gr_def(ctx, offset + 0xbc, 0x00000001); -- gr_def(ctx, offset + 0xc8, 0x00000100); -- gr_def(ctx, offset + 0xcc, 0x00000001); -- gr_def(ctx, offset + 0xd0, 0x00000100); -- gr_def(ctx, offset + 0xd8, 0x00000001); -- gr_def(ctx, offset + 0xe4, 0x00000100); -- } -- gr_def(ctx, offset + 0xf8, 0x00000004); -- gr_def(ctx, offset + 0xfc, 0x00000070); -- gr_def(ctx, offset + 0x100, 0x00000080); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- offset += 4; -- gr_def(ctx, offset + 0x114, 0x0000000c); -- if (dev_priv->chipset == 0x50) -- offset -= 4; -- gr_def(ctx, offset + 0x11c, 0x00000008); -- gr_def(ctx, offset + 0x120, 0x00000014); -- if (dev_priv->chipset == 0x50) { -- gr_def(ctx, offset + 0x124, 0x00000026); -- offset -= 0x18; -- } else { -- gr_def(ctx, offset + 0x128, 0x00000029); -- gr_def(ctx, offset + 0x12c, 0x00000027); -- gr_def(ctx, offset + 0x130, 0x00000026); -- gr_def(ctx, offset + 0x134, 0x00000008); -- gr_def(ctx, offset + 0x138, 0x00000004); -- gr_def(ctx, offset + 0x13c, 0x00000027); -- } -- gr_def(ctx, offset + 0x148, 0x00000001); -- gr_def(ctx, offset + 0x14c, 0x00000002); -- gr_def(ctx, offset + 0x150, 0x00000003); -- gr_def(ctx, offset + 0x154, 0x00000004); -- gr_def(ctx, offset + 0x158, 0x00000005); -- gr_def(ctx, offset + 0x15c, 0x00000006); -- gr_def(ctx, offset + 0x160, 0x00000007); -- gr_def(ctx, offset + 0x164, 0x00000001); -- gr_def(ctx, offset + 0x1a8, 0x000000cf); -- if (dev_priv->chipset == 0x50) -- offset -= 4; -- gr_def(ctx, offset + 0x1d8, 0x00000080); -- gr_def(ctx, offset + 0x1dc, 0x00000004); -- gr_def(ctx, offset + 0x1e0, 0x00000004); -- if (dev_priv->chipset == 0x50) -- offset -= 4; -- else -- gr_def(ctx, offset + 0x1e4, 0x00000003); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) { -- gr_def(ctx, offset + 0x1ec, 0x00000003); -- offset += 8; -- } -- gr_def(ctx, offset + 0x1e8, 0x00000001); -- if (dev_priv->chipset == 0x50) -- offset -= 4; -- gr_def(ctx, offset + 0x1f4, 0x00000012); -- gr_def(ctx, offset + 0x1f8, 0x00000010); -- gr_def(ctx, offset + 0x1fc, 0x0000000c); -- gr_def(ctx, offset + 0x200, 0x00000001); -- gr_def(ctx, offset + 0x210, 0x00000004); -- gr_def(ctx, offset + 0x214, 0x00000002); -- gr_def(ctx, offset + 0x218, 0x00000004); -- if (dev_priv->chipset >= 0xa0) -- offset += 4; -- gr_def(ctx, offset + 0x224, 0x003fffff); -- gr_def(ctx, offset + 0x228, 0x00001fff); -- if (dev_priv->chipset == 0x50) -- offset -= 0x20; -- else if (dev_priv->chipset >= 0xa0) { -- gr_def(ctx, offset + 0x250, 0x00000001); -- gr_def(ctx, offset + 0x254, 0x00000001); -- gr_def(ctx, offset + 0x258, 0x00000002); -- offset += 0x10; -- } -- gr_def(ctx, offset + 0x250, 0x00000004); -- gr_def(ctx, offset + 0x254, 0x00000014); -- gr_def(ctx, offset + 0x258, 0x00000001); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- offset += 4; -- gr_def(ctx, offset + 0x264, 0x00000002); -- if (dev_priv->chipset >= 0xa0) -- offset += 8; -- gr_def(ctx, offset + 0x270, 0x00000001); -- gr_def(ctx, offset + 0x278, 0x00000002); -- gr_def(ctx, offset + 0x27c, 0x00001000); -- if (dev_priv->chipset == 0x50) -- offset -= 0xc; -- else { -- gr_def(ctx, offset + 0x280, 0x00000e00); -- gr_def(ctx, offset + 0x284, 0x00001000); -- gr_def(ctx, offset + 0x288, 0x00001e00); -- } -- gr_def(ctx, offset + 0x290, 0x00000001); -- gr_def(ctx, offset + 0x294, 0x00000001); -- gr_def(ctx, offset + 0x298, 0x00000001); -- gr_def(ctx, offset + 0x29c, 0x00000001); -- gr_def(ctx, offset + 0x2a0, 0x00000001); -- gr_def(ctx, offset + 0x2b0, 0x00000200); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) { -- gr_def(ctx, offset + 0x2b4, 0x00000200); -- offset += 4; -- } -- if (dev_priv->chipset < 0xa0) { -- gr_def(ctx, offset + 0x2b8, 0x00000001); -- gr_def(ctx, offset + 0x2bc, 0x00000070); -- gr_def(ctx, offset + 0x2c0, 0x00000080); -- gr_def(ctx, offset + 0x2cc, 0x00000001); -- gr_def(ctx, offset + 0x2d0, 0x00000070); -- gr_def(ctx, offset + 0x2d4, 0x00000080); -- } else { -- gr_def(ctx, offset + 0x2b8, 0x00000001); -- gr_def(ctx, offset + 0x2bc, 0x000000f0); -- gr_def(ctx, offset + 0x2c0, 0x000000ff); -- gr_def(ctx, offset + 0x2cc, 0x00000001); -- gr_def(ctx, offset + 0x2d0, 0x000000f0); -- gr_def(ctx, offset + 0x2d4, 0x000000ff); -- gr_def(ctx, offset + 0x2dc, 0x00000009); -- offset += 4; -- } -- gr_def(ctx, offset + 0x2e4, 0x00000001); -- gr_def(ctx, offset + 0x2e8, 0x000000cf); -- gr_def(ctx, offset + 0x2f0, 0x00000001); -- gr_def(ctx, offset + 0x300, 0x000000cf); -- gr_def(ctx, offset + 0x308, 0x00000002); -- gr_def(ctx, offset + 0x310, 0x00000001); -- gr_def(ctx, offset + 0x318, 0x00000001); -- gr_def(ctx, offset + 0x320, 0x000000cf); -- gr_def(ctx, offset + 0x324, 0x000000cf); -- gr_def(ctx, offset + 0x328, 0x00000001); -- - /* 6000? */ - if (dev_priv->chipset == 0x50) - cp_ctx(ctx, 0x4063e0, 0x1); -@@ -661,7 +470,7 @@ - gr_def(ctx, 0x406818, 0x00000f80); - else - gr_def(ctx, 0x406818, 0x00001f80); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -+ if (IS_NVA3F(dev_priv->chipset)) - gr_def(ctx, 0x40681c, 0x00000030); - cp_ctx(ctx, 0x406830, 0x3); - } -@@ -706,7 +515,7 @@ - - if (dev_priv->chipset < 0xa0) - cp_ctx(ctx, 0x407094 + (i<<8), 1); -- else if (dev_priv->chipset <= 0xa0 || dev_priv->chipset >= 0xaa) -+ else if (!IS_NVA3F(dev_priv->chipset)) - cp_ctx(ctx, 0x407094 + (i<<8), 3); - else { - cp_ctx(ctx, 0x407094 + (i<<8), 4); -@@ -799,6 +608,7 @@ - case 0xa8: - case 0xaa: - case 0xac: -+ case 0xaf: - gr_def(ctx, offset + 0x1c, 0x300c0000); - break; - } -@@ -825,7 +635,7 @@ - gr_def(ctx, base + 0x304, 0x00007070); - else if (dev_priv->chipset < 0xa0) - gr_def(ctx, base + 0x304, 0x00027070); -- else if (dev_priv->chipset <= 0xa0 || dev_priv->chipset >= 0xaa) -+ else if (!IS_NVA3F(dev_priv->chipset)) - gr_def(ctx, base + 0x304, 0x01127070); - else - gr_def(ctx, base + 0x304, 0x05127070); -@@ -849,7 +659,7 @@ - if (dev_priv->chipset < 0xa0) { - cp_ctx(ctx, base + 0x340, 9); - offset = base + 0x340; -- } else if (dev_priv->chipset <= 0xa0 || dev_priv->chipset >= 0xaa) { -+ } else if (!IS_NVA3F(dev_priv->chipset)) { - cp_ctx(ctx, base + 0x33c, 0xb); - offset = base + 0x344; - } else { -@@ -880,7 +690,7 @@ - gr_def(ctx, offset + 0x0, 0x000001f0); - gr_def(ctx, offset + 0x4, 0x00000001); - gr_def(ctx, offset + 0x8, 0x00000003); -- if (dev_priv->chipset == 0x50 || dev_priv->chipset >= 0xaa) -+ if (dev_priv->chipset == 0x50 || IS_NVAAF(dev_priv->chipset)) - gr_def(ctx, offset + 0xc, 0x00008000); - gr_def(ctx, offset + 0x14, 0x00039e00); - cp_ctx(ctx, offset + 0x1c, 2); -@@ -892,7 +702,7 @@ - - if (dev_priv->chipset >= 0xa0) { - cp_ctx(ctx, base + 0x54c, 2); -- if (dev_priv->chipset <= 0xa0 || dev_priv->chipset >= 0xaa) -+ if (!IS_NVA3F(dev_priv->chipset)) - gr_def(ctx, base + 0x54c, 0x003fe006); - else - gr_def(ctx, base + 0x54c, 0x003fe007); -@@ -948,6 +758,336 @@ - } - } - -+static void -+dd_emit(struct nouveau_grctx *ctx, int num, uint32_t val) { -+ int i; -+ if (val && ctx->mode == NOUVEAU_GRCTX_VALS) -+ for (i = 0; i < num; i++) -+ nv_wo32(ctx->data, 4 * (ctx->ctxvals_pos + i), val); -+ ctx->ctxvals_pos += num; -+} -+ -+static void -+nv50_graph_construct_mmio_ddata(struct nouveau_grctx *ctx) -+{ -+ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; -+ int base, num; -+ base = ctx->ctxvals_pos; -+ -+ /* tesla state */ -+ dd_emit(ctx, 1, 0); /* 00000001 UNK0F90 */ -+ dd_emit(ctx, 1, 0); /* 00000001 UNK135C */ -+ -+ /* SRC_TIC state */ -+ dd_emit(ctx, 1, 0); /* 00000007 SRC_TILE_MODE_Z */ -+ dd_emit(ctx, 1, 2); /* 00000007 SRC_TILE_MODE_Y */ -+ dd_emit(ctx, 1, 1); /* 00000001 SRC_LINEAR #1 */ -+ dd_emit(ctx, 1, 0); /* 000000ff SRC_ADDRESS_HIGH */ -+ dd_emit(ctx, 1, 0); /* 00000001 SRC_SRGB */ -+ if (dev_priv->chipset >= 0x94) -+ dd_emit(ctx, 1, 0); /* 00000003 eng2d UNK0258 */ -+ dd_emit(ctx, 1, 1); /* 00000fff SRC_DEPTH */ -+ dd_emit(ctx, 1, 0x100); /* 0000ffff SRC_HEIGHT */ -+ -+ /* turing state */ -+ dd_emit(ctx, 1, 0); /* 0000000f TEXTURES_LOG2 */ -+ dd_emit(ctx, 1, 0); /* 0000000f SAMPLERS_LOG2 */ -+ dd_emit(ctx, 1, 0); /* 000000ff CB_DEF_ADDRESS_HIGH */ -+ dd_emit(ctx, 1, 0); /* ffffffff CB_DEF_ADDRESS_LOW */ -+ dd_emit(ctx, 1, 0); /* ffffffff SHARED_SIZE */ -+ dd_emit(ctx, 1, 2); /* ffffffff REG_MODE */ -+ dd_emit(ctx, 1, 1); /* 0000ffff BLOCK_ALLOC_THREADS */ -+ dd_emit(ctx, 1, 1); /* 00000001 LANES32 */ -+ dd_emit(ctx, 1, 0); /* 000000ff UNK370 */ -+ dd_emit(ctx, 1, 0); /* 000000ff USER_PARAM_UNK */ -+ dd_emit(ctx, 1, 0); /* 000000ff USER_PARAM_COUNT */ -+ dd_emit(ctx, 1, 1); /* 000000ff UNK384 bits 8-15 */ -+ dd_emit(ctx, 1, 0x3fffff); /* 003fffff TIC_LIMIT */ -+ dd_emit(ctx, 1, 0x1fff); /* 000fffff TSC_LIMIT */ -+ dd_emit(ctx, 1, 0); /* 0000ffff CB_ADDR_INDEX */ -+ dd_emit(ctx, 1, 1); /* 000007ff BLOCKDIM_X */ -+ dd_emit(ctx, 1, 1); /* 000007ff BLOCKDIM_XMY */ -+ dd_emit(ctx, 1, 0); /* 00000001 BLOCKDIM_XMY_OVERFLOW */ -+ dd_emit(ctx, 1, 1); /* 0003ffff BLOCKDIM_XMYMZ */ -+ dd_emit(ctx, 1, 1); /* 000007ff BLOCKDIM_Y */ -+ dd_emit(ctx, 1, 1); /* 0000007f BLOCKDIM_Z */ -+ dd_emit(ctx, 1, 4); /* 000000ff CP_REG_ALLOC_TEMP */ -+ dd_emit(ctx, 1, 1); /* 00000001 BLOCKDIM_DIRTY */ -+ if (IS_NVA3F(dev_priv->chipset)) -+ dd_emit(ctx, 1, 0); /* 00000003 UNK03E8 */ -+ dd_emit(ctx, 1, 1); /* 0000007f BLOCK_ALLOC_HALFWARPS */ -+ dd_emit(ctx, 1, 1); /* 00000007 LOCAL_WARPS_NO_CLAMP */ -+ dd_emit(ctx, 1, 7); /* 00000007 LOCAL_WARPS_LOG_ALLOC */ -+ dd_emit(ctx, 1, 1); /* 00000007 STACK_WARPS_NO_CLAMP */ -+ dd_emit(ctx, 1, 7); /* 00000007 STACK_WARPS_LOG_ALLOC */ -+ dd_emit(ctx, 1, 1); /* 00001fff BLOCK_ALLOC_REGSLOTS_PACKED */ -+ dd_emit(ctx, 1, 1); /* 00001fff BLOCK_ALLOC_REGSLOTS_STRIDED */ -+ dd_emit(ctx, 1, 1); /* 000007ff BLOCK_ALLOC_THREADS */ -+ -+ /* compat 2d state */ -+ if (dev_priv->chipset == 0x50) { -+ dd_emit(ctx, 4, 0); /* 0000ffff clip X, Y, W, H */ -+ -+ dd_emit(ctx, 1, 1); /* ffffffff chroma COLOR_FORMAT */ -+ -+ dd_emit(ctx, 1, 1); /* ffffffff pattern COLOR_FORMAT */ -+ dd_emit(ctx, 1, 0); /* ffffffff pattern SHAPE */ -+ dd_emit(ctx, 1, 1); /* ffffffff pattern PATTERN_SELECT */ -+ -+ dd_emit(ctx, 1, 0xa); /* ffffffff surf2d SRC_FORMAT */ -+ dd_emit(ctx, 1, 0); /* ffffffff surf2d DMA_SRC */ -+ dd_emit(ctx, 1, 0); /* 000000ff surf2d SRC_ADDRESS_HIGH */ -+ dd_emit(ctx, 1, 0); /* ffffffff surf2d SRC_ADDRESS_LOW */ -+ dd_emit(ctx, 1, 0x40); /* 0000ffff surf2d SRC_PITCH */ -+ dd_emit(ctx, 1, 0); /* 0000000f surf2d SRC_TILE_MODE_Z */ -+ dd_emit(ctx, 1, 2); /* 0000000f surf2d SRC_TILE_MODE_Y */ -+ dd_emit(ctx, 1, 0x100); /* ffffffff surf2d SRC_HEIGHT */ -+ dd_emit(ctx, 1, 1); /* 00000001 surf2d SRC_LINEAR */ -+ dd_emit(ctx, 1, 0x100); /* ffffffff surf2d SRC_WIDTH */ -+ -+ dd_emit(ctx, 1, 0); /* 0000ffff gdirect CLIP_B_X */ -+ dd_emit(ctx, 1, 0); /* 0000ffff gdirect CLIP_B_Y */ -+ dd_emit(ctx, 1, 0); /* 0000ffff gdirect CLIP_C_X */ -+ dd_emit(ctx, 1, 0); /* 0000ffff gdirect CLIP_C_Y */ -+ dd_emit(ctx, 1, 0); /* 0000ffff gdirect CLIP_D_X */ -+ dd_emit(ctx, 1, 0); /* 0000ffff gdirect CLIP_D_Y */ -+ dd_emit(ctx, 1, 1); /* ffffffff gdirect COLOR_FORMAT */ -+ dd_emit(ctx, 1, 0); /* ffffffff gdirect OPERATION */ -+ dd_emit(ctx, 1, 0); /* 0000ffff gdirect POINT_X */ -+ dd_emit(ctx, 1, 0); /* 0000ffff gdirect POINT_Y */ -+ -+ dd_emit(ctx, 1, 0); /* 0000ffff blit SRC_Y */ -+ dd_emit(ctx, 1, 0); /* ffffffff blit OPERATION */ -+ -+ dd_emit(ctx, 1, 0); /* ffffffff ifc OPERATION */ -+ -+ dd_emit(ctx, 1, 0); /* ffffffff iifc INDEX_FORMAT */ -+ dd_emit(ctx, 1, 0); /* ffffffff iifc LUT_OFFSET */ -+ dd_emit(ctx, 1, 4); /* ffffffff iifc COLOR_FORMAT */ -+ dd_emit(ctx, 1, 0); /* ffffffff iifc OPERATION */ -+ } -+ -+ /* m2mf state */ -+ dd_emit(ctx, 1, 0); /* ffffffff m2mf LINE_COUNT */ -+ dd_emit(ctx, 1, 0); /* ffffffff m2mf LINE_LENGTH_IN */ -+ dd_emit(ctx, 2, 0); /* ffffffff m2mf OFFSET_IN, OFFSET_OUT */ -+ dd_emit(ctx, 1, 1); /* ffffffff m2mf TILING_DEPTH_OUT */ -+ dd_emit(ctx, 1, 0x100); /* ffffffff m2mf TILING_HEIGHT_OUT */ -+ dd_emit(ctx, 1, 0); /* ffffffff m2mf TILING_POSITION_OUT_Z */ -+ dd_emit(ctx, 1, 1); /* 00000001 m2mf LINEAR_OUT */ -+ dd_emit(ctx, 2, 0); /* 0000ffff m2mf TILING_POSITION_OUT_X, Y */ -+ dd_emit(ctx, 1, 0x100); /* ffffffff m2mf TILING_PITCH_OUT */ -+ dd_emit(ctx, 1, 1); /* ffffffff m2mf TILING_DEPTH_IN */ -+ dd_emit(ctx, 1, 0x100); /* ffffffff m2mf TILING_HEIGHT_IN */ -+ dd_emit(ctx, 1, 0); /* ffffffff m2mf TILING_POSITION_IN_Z */ -+ dd_emit(ctx, 1, 1); /* 00000001 m2mf LINEAR_IN */ -+ dd_emit(ctx, 2, 0); /* 0000ffff m2mf TILING_POSITION_IN_X, Y */ -+ dd_emit(ctx, 1, 0x100); /* ffffffff m2mf TILING_PITCH_IN */ -+ -+ /* more compat 2d state */ -+ if (dev_priv->chipset == 0x50) { -+ dd_emit(ctx, 1, 1); /* ffffffff line COLOR_FORMAT */ -+ dd_emit(ctx, 1, 0); /* ffffffff line OPERATION */ -+ -+ dd_emit(ctx, 1, 1); /* ffffffff triangle COLOR_FORMAT */ -+ dd_emit(ctx, 1, 0); /* ffffffff triangle OPERATION */ -+ -+ dd_emit(ctx, 1, 0); /* 0000000f sifm TILE_MODE_Z */ -+ dd_emit(ctx, 1, 2); /* 0000000f sifm TILE_MODE_Y */ -+ dd_emit(ctx, 1, 0); /* 000000ff sifm FORMAT_FILTER */ -+ dd_emit(ctx, 1, 1); /* 000000ff sifm FORMAT_ORIGIN */ -+ dd_emit(ctx, 1, 0); /* 0000ffff sifm SRC_PITCH */ -+ dd_emit(ctx, 1, 1); /* 00000001 sifm SRC_LINEAR */ -+ dd_emit(ctx, 1, 0); /* 000000ff sifm SRC_OFFSET_HIGH */ -+ dd_emit(ctx, 1, 0); /* ffffffff sifm SRC_OFFSET */ -+ dd_emit(ctx, 1, 0); /* 0000ffff sifm SRC_HEIGHT */ -+ dd_emit(ctx, 1, 0); /* 0000ffff sifm SRC_WIDTH */ -+ dd_emit(ctx, 1, 3); /* ffffffff sifm COLOR_FORMAT */ -+ dd_emit(ctx, 1, 0); /* ffffffff sifm OPERATION */ -+ -+ dd_emit(ctx, 1, 0); /* ffffffff sifc OPERATION */ -+ } -+ -+ /* tesla state */ -+ dd_emit(ctx, 1, 0); /* 0000000f GP_TEXTURES_LOG2 */ -+ dd_emit(ctx, 1, 0); /* 0000000f GP_SAMPLERS_LOG2 */ -+ dd_emit(ctx, 1, 0); /* 000000ff */ -+ dd_emit(ctx, 1, 0); /* ffffffff */ -+ dd_emit(ctx, 1, 4); /* 000000ff UNK12B0_0 */ -+ dd_emit(ctx, 1, 0x70); /* 000000ff UNK12B0_1 */ -+ dd_emit(ctx, 1, 0x80); /* 000000ff UNK12B0_3 */ -+ dd_emit(ctx, 1, 0); /* 000000ff UNK12B0_2 */ -+ dd_emit(ctx, 1, 0); /* 0000000f FP_TEXTURES_LOG2 */ -+ dd_emit(ctx, 1, 0); /* 0000000f FP_SAMPLERS_LOG2 */ -+ if (IS_NVA3F(dev_priv->chipset)) { -+ dd_emit(ctx, 1, 0); /* ffffffff */ -+ dd_emit(ctx, 1, 0); /* 0000007f MULTISAMPLE_SAMPLES_LOG2 */ -+ } else { -+ dd_emit(ctx, 1, 0); /* 0000000f MULTISAMPLE_SAMPLES_LOG2 */ -+ } -+ dd_emit(ctx, 1, 0xc); /* 000000ff SEMANTIC_COLOR.BFC0_ID */ -+ if (dev_priv->chipset != 0x50) -+ dd_emit(ctx, 1, 0); /* 00000001 SEMANTIC_COLOR.CLMP_EN */ -+ dd_emit(ctx, 1, 8); /* 000000ff SEMANTIC_COLOR.COLR_NR */ -+ dd_emit(ctx, 1, 0x14); /* 000000ff SEMANTIC_COLOR.FFC0_ID */ -+ if (dev_priv->chipset == 0x50) { -+ dd_emit(ctx, 1, 0); /* 000000ff SEMANTIC_LAYER */ -+ dd_emit(ctx, 1, 0); /* 00000001 */ -+ } else { -+ dd_emit(ctx, 1, 0); /* 00000001 SEMANTIC_PTSZ.ENABLE */ -+ dd_emit(ctx, 1, 0x29); /* 000000ff SEMANTIC_PTSZ.PTSZ_ID */ -+ dd_emit(ctx, 1, 0x27); /* 000000ff SEMANTIC_PRIM */ -+ dd_emit(ctx, 1, 0x26); /* 000000ff SEMANTIC_LAYER */ -+ dd_emit(ctx, 1, 8); /* 0000000f SMENATIC_CLIP.CLIP_HIGH */ -+ dd_emit(ctx, 1, 4); /* 000000ff SEMANTIC_CLIP.CLIP_LO */ -+ dd_emit(ctx, 1, 0x27); /* 000000ff UNK0FD4 */ -+ dd_emit(ctx, 1, 0); /* 00000001 UNK1900 */ -+ } -+ dd_emit(ctx, 1, 0); /* 00000007 RT_CONTROL_MAP0 */ -+ dd_emit(ctx, 1, 1); /* 00000007 RT_CONTROL_MAP1 */ -+ dd_emit(ctx, 1, 2); /* 00000007 RT_CONTROL_MAP2 */ -+ dd_emit(ctx, 1, 3); /* 00000007 RT_CONTROL_MAP3 */ -+ dd_emit(ctx, 1, 4); /* 00000007 RT_CONTROL_MAP4 */ -+ dd_emit(ctx, 1, 5); /* 00000007 RT_CONTROL_MAP5 */ -+ dd_emit(ctx, 1, 6); /* 00000007 RT_CONTROL_MAP6 */ -+ dd_emit(ctx, 1, 7); /* 00000007 RT_CONTROL_MAP7 */ -+ dd_emit(ctx, 1, 1); /* 0000000f RT_CONTROL_COUNT */ -+ dd_emit(ctx, 8, 0); /* 00000001 RT_HORIZ_UNK */ -+ dd_emit(ctx, 8, 0); /* ffffffff RT_ADDRESS_LOW */ -+ dd_emit(ctx, 1, 0xcf); /* 000000ff RT_FORMAT */ -+ dd_emit(ctx, 7, 0); /* 000000ff RT_FORMAT */ -+ if (dev_priv->chipset != 0x50) -+ dd_emit(ctx, 3, 0); /* 1, 1, 1 */ -+ else -+ dd_emit(ctx, 2, 0); /* 1, 1 */ -+ dd_emit(ctx, 1, 0); /* ffffffff GP_ENABLE */ -+ dd_emit(ctx, 1, 0x80); /* 0000ffff GP_VERTEX_OUTPUT_COUNT*/ -+ dd_emit(ctx, 1, 4); /* 000000ff GP_REG_ALLOC_RESULT */ -+ dd_emit(ctx, 1, 4); /* 000000ff GP_RESULT_MAP_SIZE */ -+ if (IS_NVA3F(dev_priv->chipset)) { -+ dd_emit(ctx, 1, 3); /* 00000003 */ -+ dd_emit(ctx, 1, 0); /* 00000001 UNK1418. Alone. */ -+ } -+ if (dev_priv->chipset != 0x50) -+ dd_emit(ctx, 1, 3); /* 00000003 UNK15AC */ -+ dd_emit(ctx, 1, 1); /* ffffffff RASTERIZE_ENABLE */ -+ dd_emit(ctx, 1, 0); /* 00000001 FP_CONTROL.EXPORTS_Z */ -+ if (dev_priv->chipset != 0x50) -+ dd_emit(ctx, 1, 0); /* 00000001 FP_CONTROL.MULTIPLE_RESULTS */ -+ dd_emit(ctx, 1, 0x12); /* 000000ff FP_INTERPOLANT_CTRL.COUNT */ -+ dd_emit(ctx, 1, 0x10); /* 000000ff FP_INTERPOLANT_CTRL.COUNT_NONFLAT */ -+ dd_emit(ctx, 1, 0xc); /* 000000ff FP_INTERPOLANT_CTRL.OFFSET */ -+ dd_emit(ctx, 1, 1); /* 00000001 FP_INTERPOLANT_CTRL.UMASK.W */ -+ dd_emit(ctx, 1, 0); /* 00000001 FP_INTERPOLANT_CTRL.UMASK.X */ -+ dd_emit(ctx, 1, 0); /* 00000001 FP_INTERPOLANT_CTRL.UMASK.Y */ -+ dd_emit(ctx, 1, 0); /* 00000001 FP_INTERPOLANT_CTRL.UMASK.Z */ -+ dd_emit(ctx, 1, 4); /* 000000ff FP_RESULT_COUNT */ -+ dd_emit(ctx, 1, 2); /* ffffffff REG_MODE */ -+ dd_emit(ctx, 1, 4); /* 000000ff FP_REG_ALLOC_TEMP */ -+ if (dev_priv->chipset >= 0xa0) -+ dd_emit(ctx, 1, 0); /* ffffffff */ -+ dd_emit(ctx, 1, 0); /* 00000001 GP_BUILTIN_RESULT_EN.LAYER_IDX */ -+ dd_emit(ctx, 1, 0); /* ffffffff STRMOUT_ENABLE */ -+ dd_emit(ctx, 1, 0x3fffff); /* 003fffff TIC_LIMIT */ -+ dd_emit(ctx, 1, 0x1fff); /* 000fffff TSC_LIMIT */ -+ dd_emit(ctx, 1, 0); /* 00000001 VERTEX_TWO_SIDE_ENABLE*/ -+ if (dev_priv->chipset != 0x50) -+ dd_emit(ctx, 8, 0); /* 00000001 */ -+ if (dev_priv->chipset >= 0xa0) { -+ dd_emit(ctx, 1, 1); /* 00000007 VTX_ATTR_DEFINE.COMP */ -+ dd_emit(ctx, 1, 1); /* 00000007 VTX_ATTR_DEFINE.SIZE */ -+ dd_emit(ctx, 1, 2); /* 00000007 VTX_ATTR_DEFINE.TYPE */ -+ dd_emit(ctx, 1, 0); /* 000000ff VTX_ATTR_DEFINE.ATTR */ -+ } -+ dd_emit(ctx, 1, 4); /* 0000007f VP_RESULT_MAP_SIZE */ -+ dd_emit(ctx, 1, 0x14); /* 0000001f ZETA_FORMAT */ -+ dd_emit(ctx, 1, 1); /* 00000001 ZETA_ENABLE */ -+ dd_emit(ctx, 1, 0); /* 0000000f VP_TEXTURES_LOG2 */ -+ dd_emit(ctx, 1, 0); /* 0000000f VP_SAMPLERS_LOG2 */ -+ if (IS_NVA3F(dev_priv->chipset)) -+ dd_emit(ctx, 1, 0); /* 00000001 */ -+ dd_emit(ctx, 1, 2); /* 00000003 POLYGON_MODE_BACK */ -+ if (dev_priv->chipset >= 0xa0) -+ dd_emit(ctx, 1, 0); /* 00000003 VTX_ATTR_DEFINE.SIZE - 1 */ -+ dd_emit(ctx, 1, 0); /* 0000ffff CB_ADDR_INDEX */ -+ if (dev_priv->chipset >= 0xa0) -+ dd_emit(ctx, 1, 0); /* 00000003 */ -+ dd_emit(ctx, 1, 0); /* 00000001 CULL_FACE_ENABLE */ -+ dd_emit(ctx, 1, 1); /* 00000003 CULL_FACE */ -+ dd_emit(ctx, 1, 0); /* 00000001 FRONT_FACE */ -+ dd_emit(ctx, 1, 2); /* 00000003 POLYGON_MODE_FRONT */ -+ dd_emit(ctx, 1, 0x1000); /* 00007fff UNK141C */ -+ if (dev_priv->chipset != 0x50) { -+ dd_emit(ctx, 1, 0xe00); /* 7fff */ -+ dd_emit(ctx, 1, 0x1000); /* 7fff */ -+ dd_emit(ctx, 1, 0x1e00); /* 7fff */ -+ } -+ dd_emit(ctx, 1, 0); /* 00000001 BEGIN_END_ACTIVE */ -+ dd_emit(ctx, 1, 1); /* 00000001 POLYGON_MODE_??? */ -+ dd_emit(ctx, 1, 1); /* 000000ff GP_REG_ALLOC_TEMP / 4 rounded up */ -+ dd_emit(ctx, 1, 1); /* 000000ff FP_REG_ALLOC_TEMP... without /4? */ -+ dd_emit(ctx, 1, 1); /* 000000ff VP_REG_ALLOC_TEMP / 4 rounded up */ -+ dd_emit(ctx, 1, 1); /* 00000001 */ -+ dd_emit(ctx, 1, 0); /* 00000001 */ -+ dd_emit(ctx, 1, 0); /* 00000001 VTX_ATTR_MASK_UNK0 nonempty */ -+ dd_emit(ctx, 1, 0); /* 00000001 VTX_ATTR_MASK_UNK1 nonempty */ -+ dd_emit(ctx, 1, 0x200); /* 0003ffff GP_VERTEX_OUTPUT_COUNT*GP_REG_ALLOC_RESULT */ -+ if (IS_NVA3F(dev_priv->chipset)) -+ dd_emit(ctx, 1, 0x200); -+ dd_emit(ctx, 1, 0); /* 00000001 */ -+ if (dev_priv->chipset < 0xa0) { -+ dd_emit(ctx, 1, 1); /* 00000001 */ -+ dd_emit(ctx, 1, 0x70); /* 000000ff */ -+ dd_emit(ctx, 1, 0x80); /* 000000ff */ -+ dd_emit(ctx, 1, 0); /* 000000ff */ -+ dd_emit(ctx, 1, 0); /* 00000001 */ -+ dd_emit(ctx, 1, 1); /* 00000001 */ -+ dd_emit(ctx, 1, 0x70); /* 000000ff */ -+ dd_emit(ctx, 1, 0x80); /* 000000ff */ -+ dd_emit(ctx, 1, 0); /* 000000ff */ -+ } else { -+ dd_emit(ctx, 1, 1); /* 00000001 */ -+ dd_emit(ctx, 1, 0xf0); /* 000000ff */ -+ dd_emit(ctx, 1, 0xff); /* 000000ff */ -+ dd_emit(ctx, 1, 0); /* 000000ff */ -+ dd_emit(ctx, 1, 0); /* 00000001 */ -+ dd_emit(ctx, 1, 1); /* 00000001 */ -+ dd_emit(ctx, 1, 0xf0); /* 000000ff */ -+ dd_emit(ctx, 1, 0xff); /* 000000ff */ -+ dd_emit(ctx, 1, 0); /* 000000ff */ -+ dd_emit(ctx, 1, 9); /* 0000003f UNK114C.COMP,SIZE */ -+ } -+ -+ /* eng2d state */ -+ dd_emit(ctx, 1, 0); /* 00000001 eng2d COLOR_KEY_ENABLE */ -+ dd_emit(ctx, 1, 0); /* 00000007 eng2d COLOR_KEY_FORMAT */ -+ dd_emit(ctx, 1, 1); /* ffffffff eng2d DST_DEPTH */ -+ dd_emit(ctx, 1, 0xcf); /* 000000ff eng2d DST_FORMAT */ -+ dd_emit(ctx, 1, 0); /* ffffffff eng2d DST_LAYER */ -+ dd_emit(ctx, 1, 1); /* 00000001 eng2d DST_LINEAR */ -+ dd_emit(ctx, 1, 0); /* 00000007 eng2d PATTERN_COLOR_FORMAT */ -+ dd_emit(ctx, 1, 0); /* 00000007 eng2d OPERATION */ -+ dd_emit(ctx, 1, 0); /* 00000003 eng2d PATTERN_SELECT */ -+ dd_emit(ctx, 1, 0xcf); /* 000000ff eng2d SIFC_FORMAT */ -+ dd_emit(ctx, 1, 0); /* 00000001 eng2d SIFC_BITMAP_ENABLE */ -+ dd_emit(ctx, 1, 2); /* 00000003 eng2d SIFC_BITMAP_UNK808 */ -+ dd_emit(ctx, 1, 0); /* ffffffff eng2d BLIT_DU_DX_FRACT */ -+ dd_emit(ctx, 1, 1); /* ffffffff eng2d BLIT_DU_DX_INT */ -+ dd_emit(ctx, 1, 0); /* ffffffff eng2d BLIT_DV_DY_FRACT */ -+ dd_emit(ctx, 1, 1); /* ffffffff eng2d BLIT_DV_DY_INT */ -+ dd_emit(ctx, 1, 0); /* 00000001 eng2d BLIT_CONTROL_FILTER */ -+ dd_emit(ctx, 1, 0xcf); /* 000000ff eng2d DRAW_COLOR_FORMAT */ -+ dd_emit(ctx, 1, 0xcf); /* 000000ff eng2d SRC_FORMAT */ -+ dd_emit(ctx, 1, 1); /* 00000001 eng2d SRC_LINEAR #2 */ -+ -+ num = ctx->ctxvals_pos - base; -+ ctx->ctxvals_pos = base; -+ if (IS_NVA3F(dev_priv->chipset)) -+ cp_ctx(ctx, 0x404800, num); -+ else -+ cp_ctx(ctx, 0x405400, num); -+} -+ - /* - * xfer areas. These are a pain. - * -@@ -990,28 +1130,33 @@ - * without the help of ctxprog. - */ - --static inline void -+static void - xf_emit(struct nouveau_grctx *ctx, int num, uint32_t val) { - int i; - if (val && ctx->mode == NOUVEAU_GRCTX_VALS) - for (i = 0; i < num; i++) -- nv_wo32(ctx->dev, ctx->data, ctx->ctxvals_pos + (i << 3), val); -+ nv_wo32(ctx->data, 4 * (ctx->ctxvals_pos + (i << 3)), val); - ctx->ctxvals_pos += num << 3; - } - - /* Gene declarations... */ - -+static void nv50_graph_construct_gene_dispatch(struct nouveau_grctx *ctx); - static void nv50_graph_construct_gene_m2mf(struct nouveau_grctx *ctx); --static void nv50_graph_construct_gene_unk1(struct nouveau_grctx *ctx); --static void nv50_graph_construct_gene_unk2(struct nouveau_grctx *ctx); --static void nv50_graph_construct_gene_unk3(struct nouveau_grctx *ctx); --static void nv50_graph_construct_gene_unk4(struct nouveau_grctx *ctx); --static void nv50_graph_construct_gene_unk5(struct nouveau_grctx *ctx); --static void nv50_graph_construct_gene_unk6(struct nouveau_grctx *ctx); --static void nv50_graph_construct_gene_unk7(struct nouveau_grctx *ctx); --static void nv50_graph_construct_gene_unk8(struct nouveau_grctx *ctx); --static void nv50_graph_construct_gene_unk9(struct nouveau_grctx *ctx); --static void nv50_graph_construct_gene_unk10(struct nouveau_grctx *ctx); -+static void nv50_graph_construct_gene_ccache(struct nouveau_grctx *ctx); -+static void nv50_graph_construct_gene_unk10xx(struct nouveau_grctx *ctx); -+static void nv50_graph_construct_gene_unk14xx(struct nouveau_grctx *ctx); -+static void nv50_graph_construct_gene_zcull(struct nouveau_grctx *ctx); -+static void nv50_graph_construct_gene_clipid(struct nouveau_grctx *ctx); -+static void nv50_graph_construct_gene_unk24xx(struct nouveau_grctx *ctx); -+static void nv50_graph_construct_gene_vfetch(struct nouveau_grctx *ctx); -+static void nv50_graph_construct_gene_eng2d(struct nouveau_grctx *ctx); -+static void nv50_graph_construct_gene_csched(struct nouveau_grctx *ctx); -+static void nv50_graph_construct_gene_unk1cxx(struct nouveau_grctx *ctx); -+static void nv50_graph_construct_gene_strmout(struct nouveau_grctx *ctx); -+static void nv50_graph_construct_gene_unk34xx(struct nouveau_grctx *ctx); -+static void nv50_graph_construct_gene_ropm1(struct nouveau_grctx *ctx); -+static void nv50_graph_construct_gene_ropm2(struct nouveau_grctx *ctx); - static void nv50_graph_construct_gene_ropc(struct nouveau_grctx *ctx); - static void nv50_graph_construct_xfer_tp(struct nouveau_grctx *ctx); - -@@ -1030,102 +1175,32 @@ - if (dev_priv->chipset < 0xa0) { - /* Strand 0 */ - ctx->ctxvals_pos = offset; -- switch (dev_priv->chipset) { -- case 0x50: -- xf_emit(ctx, 0x99, 0); -- break; -- case 0x84: -- case 0x86: -- xf_emit(ctx, 0x384, 0); -- break; -- case 0x92: -- case 0x94: -- case 0x96: -- case 0x98: -- xf_emit(ctx, 0x380, 0); -- break; -- } -- nv50_graph_construct_gene_m2mf (ctx); -- switch (dev_priv->chipset) { -- case 0x50: -- case 0x84: -- case 0x86: -- case 0x98: -- xf_emit(ctx, 0x4c4, 0); -- break; -- case 0x92: -- case 0x94: -- case 0x96: -- xf_emit(ctx, 0x984, 0); -- break; -- } -- nv50_graph_construct_gene_unk5(ctx); -- if (dev_priv->chipset == 0x50) -- xf_emit(ctx, 0xa, 0); -- else -- xf_emit(ctx, 0xb, 0); -- nv50_graph_construct_gene_unk4(ctx); -- nv50_graph_construct_gene_unk3(ctx); -+ nv50_graph_construct_gene_dispatch(ctx); -+ nv50_graph_construct_gene_m2mf(ctx); -+ nv50_graph_construct_gene_unk24xx(ctx); -+ nv50_graph_construct_gene_clipid(ctx); -+ nv50_graph_construct_gene_zcull(ctx); - if ((ctx->ctxvals_pos-offset)/8 > size) - size = (ctx->ctxvals_pos-offset)/8; - - /* Strand 1 */ - ctx->ctxvals_pos = offset + 0x1; -- nv50_graph_construct_gene_unk6(ctx); -- nv50_graph_construct_gene_unk7(ctx); -- nv50_graph_construct_gene_unk8(ctx); -- switch (dev_priv->chipset) { -- case 0x50: -- case 0x92: -- xf_emit(ctx, 0xfb, 0); -- break; -- case 0x84: -- xf_emit(ctx, 0xd3, 0); -- break; -- case 0x94: -- case 0x96: -- xf_emit(ctx, 0xab, 0); -- break; -- case 0x86: -- case 0x98: -- xf_emit(ctx, 0x6b, 0); -- break; -- } -- xf_emit(ctx, 2, 0x4e3bfdf); -- xf_emit(ctx, 4, 0); -- xf_emit(ctx, 1, 0x0fac6881); -- xf_emit(ctx, 0xb, 0); -- xf_emit(ctx, 2, 0x4e3bfdf); -+ nv50_graph_construct_gene_vfetch(ctx); -+ nv50_graph_construct_gene_eng2d(ctx); -+ nv50_graph_construct_gene_csched(ctx); -+ nv50_graph_construct_gene_ropm1(ctx); -+ nv50_graph_construct_gene_ropm2(ctx); - if ((ctx->ctxvals_pos-offset)/8 > size) - size = (ctx->ctxvals_pos-offset)/8; - - /* Strand 2 */ - ctx->ctxvals_pos = offset + 0x2; -- switch (dev_priv->chipset) { -- case 0x50: -- case 0x92: -- xf_emit(ctx, 0xa80, 0); -- break; -- case 0x84: -- xf_emit(ctx, 0xa7e, 0); -- break; -- case 0x94: -- case 0x96: -- xf_emit(ctx, 0xa7c, 0); -- break; -- case 0x86: -- case 0x98: -- xf_emit(ctx, 0xa7a, 0); -- break; -- } -- xf_emit(ctx, 1, 0x3fffff); -- xf_emit(ctx, 2, 0); -- xf_emit(ctx, 1, 0x1fff); -- xf_emit(ctx, 0xe, 0); -- nv50_graph_construct_gene_unk9(ctx); -- nv50_graph_construct_gene_unk2(ctx); -- nv50_graph_construct_gene_unk1(ctx); -- nv50_graph_construct_gene_unk10(ctx); -+ nv50_graph_construct_gene_ccache(ctx); -+ nv50_graph_construct_gene_unk1cxx(ctx); -+ nv50_graph_construct_gene_strmout(ctx); -+ nv50_graph_construct_gene_unk14xx(ctx); -+ nv50_graph_construct_gene_unk10xx(ctx); -+ nv50_graph_construct_gene_unk34xx(ctx); - if ((ctx->ctxvals_pos-offset)/8 > size) - size = (ctx->ctxvals_pos-offset)/8; - -@@ -1150,86 +1225,46 @@ - } else { - /* Strand 0 */ - ctx->ctxvals_pos = offset; -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 0x385, 0); -- else -- xf_emit(ctx, 0x384, 0); -+ nv50_graph_construct_gene_dispatch(ctx); - nv50_graph_construct_gene_m2mf(ctx); -- xf_emit(ctx, 0x950, 0); -- nv50_graph_construct_gene_unk10(ctx); -- xf_emit(ctx, 1, 0x0fac6881); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) { -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 3, 0); -- } -- nv50_graph_construct_gene_unk8(ctx); -- if (dev_priv->chipset == 0xa0) -- xf_emit(ctx, 0x189, 0); -- else if (dev_priv->chipset == 0xa3) -- xf_emit(ctx, 0xd5, 0); -- else if (dev_priv->chipset == 0xa5) -- xf_emit(ctx, 0x99, 0); -- else if (dev_priv->chipset == 0xaa) -- xf_emit(ctx, 0x65, 0); -- else -- xf_emit(ctx, 0x6d, 0); -- nv50_graph_construct_gene_unk9(ctx); -+ nv50_graph_construct_gene_unk34xx(ctx); -+ nv50_graph_construct_gene_csched(ctx); -+ nv50_graph_construct_gene_unk1cxx(ctx); -+ nv50_graph_construct_gene_strmout(ctx); - if ((ctx->ctxvals_pos-offset)/8 > size) - size = (ctx->ctxvals_pos-offset)/8; - - /* Strand 1 */ - ctx->ctxvals_pos = offset + 1; -- nv50_graph_construct_gene_unk1(ctx); -+ nv50_graph_construct_gene_unk10xx(ctx); - if ((ctx->ctxvals_pos-offset)/8 > size) - size = (ctx->ctxvals_pos-offset)/8; - - /* Strand 2 */ - ctx->ctxvals_pos = offset + 2; -- if (dev_priv->chipset == 0xa0) { -- nv50_graph_construct_gene_unk2(ctx); -- } -- xf_emit(ctx, 0x36, 0); -- nv50_graph_construct_gene_unk5(ctx); -+ if (dev_priv->chipset == 0xa0) -+ nv50_graph_construct_gene_unk14xx(ctx); -+ nv50_graph_construct_gene_unk24xx(ctx); - if ((ctx->ctxvals_pos-offset)/8 > size) - size = (ctx->ctxvals_pos-offset)/8; - - /* Strand 3 */ - ctx->ctxvals_pos = offset + 3; -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 1); -- nv50_graph_construct_gene_unk6(ctx); -+ nv50_graph_construct_gene_vfetch(ctx); - if ((ctx->ctxvals_pos-offset)/8 > size) - size = (ctx->ctxvals_pos-offset)/8; - - /* Strand 4 */ - ctx->ctxvals_pos = offset + 4; -- if (dev_priv->chipset == 0xa0) -- xf_emit(ctx, 0xa80, 0); -- else if (dev_priv->chipset == 0xa3) -- xf_emit(ctx, 0xa7c, 0); -- else -- xf_emit(ctx, 0xa7a, 0); -- xf_emit(ctx, 1, 0x3fffff); -- xf_emit(ctx, 2, 0); -- xf_emit(ctx, 1, 0x1fff); -+ nv50_graph_construct_gene_ccache(ctx); - if ((ctx->ctxvals_pos-offset)/8 > size) - size = (ctx->ctxvals_pos-offset)/8; - - /* Strand 5 */ - ctx->ctxvals_pos = offset + 5; -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 0x0fac6881); -- xf_emit(ctx, 0xb, 0); -- xf_emit(ctx, 2, 0x4e3bfdf); -- xf_emit(ctx, 3, 0); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 1, 0x11); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 2, 0x4e3bfdf); -- xf_emit(ctx, 2, 0); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 1, 0x11); -- xf_emit(ctx, 1, 0); -+ nv50_graph_construct_gene_ropm2(ctx); -+ nv50_graph_construct_gene_ropm1(ctx); -+ /* per-ROP context */ - for (i = 0; i < 8; i++) - if (units & (1<<(i+16))) - nv50_graph_construct_gene_ropc(ctx); -@@ -1238,10 +1273,9 @@ - - /* Strand 6 */ - ctx->ctxvals_pos = offset + 6; -- nv50_graph_construct_gene_unk3(ctx); -- xf_emit(ctx, 0xb, 0); -- nv50_graph_construct_gene_unk4(ctx); -- nv50_graph_construct_gene_unk7(ctx); -+ nv50_graph_construct_gene_zcull(ctx); -+ nv50_graph_construct_gene_clipid(ctx); -+ nv50_graph_construct_gene_eng2d(ctx); - if (units & (1 << 0)) - nv50_graph_construct_xfer_tp(ctx); - if (units & (1 << 1)) -@@ -1269,7 +1303,7 @@ - if (units & (1 << 9)) - nv50_graph_construct_xfer_tp(ctx); - } else { -- nv50_graph_construct_gene_unk2(ctx); -+ nv50_graph_construct_gene_unk14xx(ctx); - } - if ((ctx->ctxvals_pos-offset)/8 > size) - size = (ctx->ctxvals_pos-offset)/8; -@@ -1290,9 +1324,70 @@ - */ - - static void -+nv50_graph_construct_gene_dispatch(struct nouveau_grctx *ctx) -+{ -+ /* start of strand 0 */ -+ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; -+ /* SEEK */ -+ if (dev_priv->chipset == 0x50) -+ xf_emit(ctx, 5, 0); -+ else if (!IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 6, 0); -+ else -+ xf_emit(ctx, 4, 0); -+ /* SEEK */ -+ /* the PGRAPH's internal FIFO */ -+ if (dev_priv->chipset == 0x50) -+ xf_emit(ctx, 8*3, 0); -+ else -+ xf_emit(ctx, 0x100*3, 0); -+ /* and another bonus slot?!? */ -+ xf_emit(ctx, 3, 0); -+ /* and YET ANOTHER bonus slot? */ -+ if (IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 3, 0); -+ /* SEEK */ -+ /* CTX_SWITCH: caches of gr objects bound to subchannels. 8 values, last used index */ -+ xf_emit(ctx, 9, 0); -+ /* SEEK */ -+ xf_emit(ctx, 9, 0); -+ /* SEEK */ -+ xf_emit(ctx, 9, 0); -+ /* SEEK */ -+ xf_emit(ctx, 9, 0); -+ /* SEEK */ -+ if (dev_priv->chipset < 0x90) -+ xf_emit(ctx, 4, 0); -+ /* SEEK */ -+ xf_emit(ctx, 2, 0); -+ /* SEEK */ -+ xf_emit(ctx, 6*2, 0); -+ xf_emit(ctx, 2, 0); -+ /* SEEK */ -+ xf_emit(ctx, 2, 0); -+ /* SEEK */ -+ xf_emit(ctx, 6*2, 0); -+ xf_emit(ctx, 2, 0); -+ /* SEEK */ -+ if (dev_priv->chipset == 0x50) -+ xf_emit(ctx, 0x1c, 0); -+ else if (dev_priv->chipset < 0xa0) -+ xf_emit(ctx, 0x1e, 0); -+ else -+ xf_emit(ctx, 0x22, 0); -+ /* SEEK */ -+ xf_emit(ctx, 0x15, 0); -+} -+ -+static void - nv50_graph_construct_gene_m2mf(struct nouveau_grctx *ctx) - { -- /* m2mf state */ -+ /* Strand 0, right after dispatch */ -+ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; -+ int smallm2mf = 0; -+ if (dev_priv->chipset < 0x92 || dev_priv->chipset == 0x98) -+ smallm2mf = 1; -+ /* SEEK */ - xf_emit (ctx, 1, 0); /* DMA_NOTIFY instance >> 4 */ - xf_emit (ctx, 1, 0); /* DMA_BUFFER_IN instance >> 4 */ - xf_emit (ctx, 1, 0); /* DMA_BUFFER_OUT instance >> 4 */ -@@ -1319,427 +1414,975 @@ - xf_emit (ctx, 1, 0); /* TILING_POSITION_OUT */ - xf_emit (ctx, 1, 0); /* OFFSET_IN_HIGH */ - xf_emit (ctx, 1, 0); /* OFFSET_OUT_HIGH */ -+ /* SEEK */ -+ if (smallm2mf) -+ xf_emit(ctx, 0x40, 0); /* 20 * ffffffff, 3ffff */ -+ else -+ xf_emit(ctx, 0x100, 0); /* 80 * ffffffff, 3ffff */ -+ xf_emit(ctx, 4, 0); /* 1f/7f, 0, 1f/7f, 0 [1f for smallm2mf, 7f otherwise] */ -+ /* SEEK */ -+ if (smallm2mf) -+ xf_emit(ctx, 0x400, 0); /* ffffffff */ -+ else -+ xf_emit(ctx, 0x800, 0); /* ffffffff */ -+ xf_emit(ctx, 4, 0); /* ff/1ff, 0, 0, 0 [ff for smallm2mf, 1ff otherwise] */ -+ /* SEEK */ -+ xf_emit(ctx, 0x40, 0); /* 20 * bits ffffffff, 3ffff */ -+ xf_emit(ctx, 0x6, 0); /* 1f, 0, 1f, 0, 1f, 0 */ - } - - static void --nv50_graph_construct_gene_unk1(struct nouveau_grctx *ctx) -+nv50_graph_construct_gene_ccache(struct nouveau_grctx *ctx) - { - struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; -- /* end of area 2 on pre-NVA0, area 1 on NVAx */ -- xf_emit(ctx, 2, 4); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 0x80); -- xf_emit(ctx, 1, 4); -- xf_emit(ctx, 1, 0x80c14); -- xf_emit(ctx, 1, 0); -- if (dev_priv->chipset == 0x50) -- xf_emit(ctx, 1, 0x3ff); -- else -- xf_emit(ctx, 1, 0x7ff); -+ xf_emit(ctx, 2, 0); /* RO */ -+ xf_emit(ctx, 0x800, 0); /* ffffffff */ - switch (dev_priv->chipset) { - case 0x50: -- case 0x86: -- case 0x98: -- case 0xaa: -- case 0xac: -- xf_emit(ctx, 0x542, 0); -+ case 0x92: -+ case 0xa0: -+ xf_emit(ctx, 0x2b, 0); - break; - case 0x84: -- case 0x92: -+ xf_emit(ctx, 0x29, 0); -+ break; - case 0x94: - case 0x96: -- xf_emit(ctx, 0x942, 0); -- break; -- case 0xa0: - case 0xa3: -- xf_emit(ctx, 0x2042, 0); -+ xf_emit(ctx, 0x27, 0); - break; -+ case 0x86: -+ case 0x98: - case 0xa5: - case 0xa8: -- xf_emit(ctx, 0x842, 0); -+ case 0xaa: -+ case 0xac: -+ case 0xaf: -+ xf_emit(ctx, 0x25, 0); - break; - } -- xf_emit(ctx, 2, 4); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 0x80); -- xf_emit(ctx, 1, 4); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 0x27); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 0x26); -- xf_emit(ctx, 3, 0); -+ /* CB bindings, 0x80 of them. first word is address >> 8, second is -+ * size >> 4 | valid << 24 */ -+ xf_emit(ctx, 0x100, 0); /* ffffffff CB_DEF */ -+ xf_emit(ctx, 1, 0); /* 0000007f CB_ADDR_BUFFER */ -+ xf_emit(ctx, 1, 0); /* 0 */ -+ xf_emit(ctx, 0x30, 0); /* ff SET_PROGRAM_CB */ -+ xf_emit(ctx, 1, 0); /* 3f last SET_PROGRAM_CB */ -+ xf_emit(ctx, 4, 0); /* RO */ -+ xf_emit(ctx, 0x100, 0); /* ffffffff */ -+ xf_emit(ctx, 8, 0); /* 1f, 0, 0, ... */ -+ xf_emit(ctx, 8, 0); /* ffffffff */ -+ xf_emit(ctx, 4, 0); /* ffffffff */ -+ xf_emit(ctx, 1, 0); /* 3 */ -+ xf_emit(ctx, 1, 0); /* ffffffff */ -+ xf_emit(ctx, 1, 0); /* 0000ffff DMA_CODE_CB */ -+ xf_emit(ctx, 1, 0); /* 0000ffff DMA_TIC */ -+ xf_emit(ctx, 1, 0); /* 0000ffff DMA_TSC */ -+ xf_emit(ctx, 1, 0); /* 00000001 LINKED_TSC */ -+ xf_emit(ctx, 1, 0); /* 000000ff TIC_ADDRESS_HIGH */ -+ xf_emit(ctx, 1, 0); /* ffffffff TIC_ADDRESS_LOW */ -+ xf_emit(ctx, 1, 0x3fffff); /* 003fffff TIC_LIMIT */ -+ xf_emit(ctx, 1, 0); /* 000000ff TSC_ADDRESS_HIGH */ -+ xf_emit(ctx, 1, 0); /* ffffffff TSC_ADDRESS_LOW */ -+ xf_emit(ctx, 1, 0x1fff); /* 000fffff TSC_LIMIT */ -+ xf_emit(ctx, 1, 0); /* 000000ff VP_ADDRESS_HIGH */ -+ xf_emit(ctx, 1, 0); /* ffffffff VP_ADDRESS_LOW */ -+ xf_emit(ctx, 1, 0); /* 00ffffff VP_START_ID */ -+ xf_emit(ctx, 1, 0); /* 000000ff CB_DEF_ADDRESS_HIGH */ -+ xf_emit(ctx, 1, 0); /* ffffffff CB_DEF_ADDRESS_LOW */ -+ xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 000000ff GP_ADDRESS_HIGH */ -+ xf_emit(ctx, 1, 0); /* ffffffff GP_ADDRESS_LOW */ -+ xf_emit(ctx, 1, 0); /* 00ffffff GP_START_ID */ -+ xf_emit(ctx, 1, 0); /* 000000ff FP_ADDRESS_HIGH */ -+ xf_emit(ctx, 1, 0); /* ffffffff FP_ADDRESS_LOW */ -+ xf_emit(ctx, 1, 0); /* 00ffffff FP_START_ID */ - } - - static void --nv50_graph_construct_gene_unk10(struct nouveau_grctx *ctx) -+nv50_graph_construct_gene_unk10xx(struct nouveau_grctx *ctx) - { -+ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; -+ int i; - /* end of area 2 on pre-NVA0, area 1 on NVAx */ -- xf_emit(ctx, 0x10, 0x04000000); -- xf_emit(ctx, 0x24, 0); -- xf_emit(ctx, 2, 0x04e3bfdf); -- xf_emit(ctx, 2, 0); -- xf_emit(ctx, 1, 0x1fe21); -+ xf_emit(ctx, 1, 4); /* 000000ff GP_RESULT_MAP_SIZE */ -+ xf_emit(ctx, 1, 4); /* 0000007f VP_RESULT_MAP_SIZE */ -+ xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ -+ xf_emit(ctx, 1, 0x80); /* 0000ffff GP_VERTEX_OUTPUT_COUNT */ -+ xf_emit(ctx, 1, 4); /* 000000ff GP_REG_ALLOC_RESULT */ -+ xf_emit(ctx, 1, 0x80c14); /* 01ffffff SEMANTIC_COLOR */ -+ xf_emit(ctx, 1, 0); /* 00000001 VERTEX_TWO_SIDE_ENABLE */ -+ if (dev_priv->chipset == 0x50) -+ xf_emit(ctx, 1, 0x3ff); -+ else -+ xf_emit(ctx, 1, 0x7ff); /* 000007ff */ -+ xf_emit(ctx, 1, 0); /* 111/113 */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ -+ for (i = 0; i < 8; i++) { -+ switch (dev_priv->chipset) { -+ case 0x50: -+ case 0x86: -+ case 0x98: -+ case 0xaa: -+ case 0xac: -+ xf_emit(ctx, 0xa0, 0); /* ffffffff */ -+ break; -+ case 0x84: -+ case 0x92: -+ case 0x94: -+ case 0x96: -+ xf_emit(ctx, 0x120, 0); -+ break; -+ case 0xa5: -+ case 0xa8: -+ xf_emit(ctx, 0x100, 0); /* ffffffff */ -+ break; -+ case 0xa0: -+ case 0xa3: -+ case 0xaf: -+ xf_emit(ctx, 0x400, 0); /* ffffffff */ -+ break; -+ } -+ xf_emit(ctx, 4, 0); /* 3f, 0, 0, 0 */ -+ xf_emit(ctx, 4, 0); /* ffffffff */ -+ } -+ xf_emit(ctx, 1, 4); /* 000000ff GP_RESULT_MAP_SIZE */ -+ xf_emit(ctx, 1, 4); /* 0000007f VP_RESULT_MAP_SIZE */ -+ xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ -+ xf_emit(ctx, 1, 0x80); /* 0000ffff GP_VERTEX_OUTPUT_COUNT */ -+ xf_emit(ctx, 1, 4); /* 000000ff GP_REG_ALLOC_TEMP */ -+ xf_emit(ctx, 1, 1); /* 00000001 RASTERIZE_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1900 */ -+ xf_emit(ctx, 1, 0x27); /* 000000ff UNK0FD4 */ -+ xf_emit(ctx, 1, 0); /* 0001ffff GP_BUILTIN_RESULT_EN */ -+ xf_emit(ctx, 1, 0x26); /* 000000ff SEMANTIC_LAYER */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ -+} -+ -+static void -+nv50_graph_construct_gene_unk34xx(struct nouveau_grctx *ctx) -+{ -+ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; -+ /* end of area 2 on pre-NVA0, area 1 on NVAx */ -+ xf_emit(ctx, 1, 0); /* 00000001 VIEWPORT_CLIP_RECTS_EN */ -+ xf_emit(ctx, 1, 0); /* 00000003 VIEWPORT_CLIP_MODE */ -+ xf_emit(ctx, 0x10, 0x04000000); /* 07ffffff VIEWPORT_CLIP_HORIZ*8, VIEWPORT_CLIP_VERT*8 */ -+ xf_emit(ctx, 1, 0); /* 00000001 POLYGON_STIPPLE_ENABLE */ -+ xf_emit(ctx, 0x20, 0); /* ffffffff POLYGON_STIPPLE */ -+ xf_emit(ctx, 2, 0); /* 00007fff WINDOW_OFFSET_XY */ -+ xf_emit(ctx, 1, 0); /* ffff0ff3 */ -+ xf_emit(ctx, 1, 0x04e3bfdf); /* ffffffff UNK0D64 */ -+ xf_emit(ctx, 1, 0x04e3bfdf); /* ffffffff UNK0DF4 */ -+ xf_emit(ctx, 1, 0); /* 00000003 WINDOW_ORIGIN */ -+ xf_emit(ctx, 1, 0); /* 00000007 */ -+ xf_emit(ctx, 1, 0x1fe21); /* 0001ffff tesla UNK0FAC */ -+ if (dev_priv->chipset >= 0xa0) -+ xf_emit(ctx, 1, 0x0fac6881); -+ if (IS_NVA3F(dev_priv->chipset)) { -+ xf_emit(ctx, 1, 1); -+ xf_emit(ctx, 3, 0); -+ } - } - - static void --nv50_graph_construct_gene_unk2(struct nouveau_grctx *ctx) -+nv50_graph_construct_gene_unk14xx(struct nouveau_grctx *ctx) - { - struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; - /* middle of area 2 on pre-NVA0, beginning of area 2 on NVA0, area 7 on >NVA0 */ - if (dev_priv->chipset != 0x50) { -- xf_emit(ctx, 5, 0); -- xf_emit(ctx, 1, 0x80c14); -- xf_emit(ctx, 2, 0); -- xf_emit(ctx, 1, 0x804); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 2, 4); -- xf_emit(ctx, 1, 0x8100c12); -- } -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 2, 4); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 0x10); -- if (dev_priv->chipset == 0x50) -- xf_emit(ctx, 3, 0); -- else -- xf_emit(ctx, 4, 0); -- xf_emit(ctx, 1, 0x804); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0x1a); -+ xf_emit(ctx, 5, 0); /* ffffffff */ -+ xf_emit(ctx, 1, 0x80c14); /* 01ffffff SEMANTIC_COLOR */ -+ xf_emit(ctx, 1, 0); /* 00000001 */ -+ xf_emit(ctx, 1, 0); /* 000003ff */ -+ xf_emit(ctx, 1, 0x804); /* 00000fff SEMANTIC_CLIP */ -+ xf_emit(ctx, 1, 0); /* 00000001 */ -+ xf_emit(ctx, 2, 4); /* 7f, ff */ -+ xf_emit(ctx, 1, 0x8100c12); /* 1fffffff FP_INTERPOLANT_CTRL */ -+ } -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ -+ xf_emit(ctx, 1, 4); /* 0000007f VP_RESULT_MAP_SIZE */ -+ xf_emit(ctx, 1, 4); /* 000000ff GP_RESULT_MAP_SIZE */ -+ xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ -+ xf_emit(ctx, 1, 0x10); /* 7f/ff VIEW_VOLUME_CLIP_CTRL */ -+ xf_emit(ctx, 1, 0); /* 000000ff VP_CLIP_DISTANCE_ENABLE */ - if (dev_priv->chipset != 0x50) -- xf_emit(ctx, 1, 0x7f); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0x80c14); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 0x8100c12); -- xf_emit(ctx, 2, 4); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 0x10); -- xf_emit(ctx, 3, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0x8100c12); -- xf_emit(ctx, 6, 0); -- if (dev_priv->chipset == 0x50) -- xf_emit(ctx, 1, 0x3ff); -- else -- xf_emit(ctx, 1, 0x7ff); -- xf_emit(ctx, 1, 0x80c14); -- xf_emit(ctx, 0x38, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 2, 0); -- xf_emit(ctx, 1, 0x10); -- xf_emit(ctx, 0x38, 0); -- xf_emit(ctx, 2, 0x88); -- xf_emit(ctx, 2, 0); -- xf_emit(ctx, 1, 4); -- xf_emit(ctx, 0x16, 0); -- xf_emit(ctx, 1, 0x26); -- xf_emit(ctx, 2, 0); -- xf_emit(ctx, 1, 0x3f800000); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 4, 0); -- else -- xf_emit(ctx, 3, 0); -- xf_emit(ctx, 1, 0x1a); -- xf_emit(ctx, 1, 0x10); -+ xf_emit(ctx, 1, 0); /* 3ff */ -+ xf_emit(ctx, 1, 0); /* 000000ff tesla UNK1940 */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK0D7C */ -+ xf_emit(ctx, 1, 0x804); /* 00000fff SEMANTIC_CLIP */ -+ xf_emit(ctx, 1, 1); /* 00000001 VIEWPORT_TRANSFORM_EN */ -+ xf_emit(ctx, 1, 0x1a); /* 0000001f POLYGON_MODE */ - if (dev_priv->chipset != 0x50) -- xf_emit(ctx, 0x28, 0); -- else -- xf_emit(ctx, 0x25, 0); -- xf_emit(ctx, 1, 0x52); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 0x26); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 2, 4); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 0x1a); -- xf_emit(ctx, 2, 0); -- xf_emit(ctx, 1, 0x00ffff00); -- xf_emit(ctx, 1, 0); -+ xf_emit(ctx, 1, 0x7f); /* 000000ff tesla UNK0FFC */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ -+ xf_emit(ctx, 1, 1); /* 00000001 SHADE_MODEL */ -+ xf_emit(ctx, 1, 0x80c14); /* 01ffffff SEMANTIC_COLOR */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1900 */ -+ xf_emit(ctx, 1, 0x8100c12); /* 1fffffff FP_INTERPOLANT_CTRL */ -+ xf_emit(ctx, 1, 4); /* 0000007f VP_RESULT_MAP_SIZE */ -+ xf_emit(ctx, 1, 4); /* 000000ff GP_RESULT_MAP_SIZE */ -+ xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ -+ xf_emit(ctx, 1, 0x10); /* 7f/ff VIEW_VOLUME_CLIP_CTRL */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK0D7C */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK0F8C */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ -+ xf_emit(ctx, 1, 1); /* 00000001 VIEWPORT_TRANSFORM_EN */ -+ xf_emit(ctx, 1, 0x8100c12); /* 1fffffff FP_INTERPOLANT_CTRL */ -+ xf_emit(ctx, 4, 0); /* ffffffff NOPERSPECTIVE_BITMAP */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1900 */ -+ xf_emit(ctx, 1, 0); /* 0000000f */ -+ if (dev_priv->chipset == 0x50) -+ xf_emit(ctx, 1, 0x3ff); /* 000003ff tesla UNK0D68 */ -+ else -+ xf_emit(ctx, 1, 0x7ff); /* 000007ff tesla UNK0D68 */ -+ xf_emit(ctx, 1, 0x80c14); /* 01ffffff SEMANTIC_COLOR */ -+ xf_emit(ctx, 1, 0); /* 00000001 VERTEX_TWO_SIDE_ENABLE */ -+ xf_emit(ctx, 0x30, 0); /* ffffffff VIEWPORT_SCALE: X0, Y0, Z0, X1, Y1, ... */ -+ xf_emit(ctx, 3, 0); /* f, 0, 0 */ -+ xf_emit(ctx, 3, 0); /* ffffffff last VIEWPORT_SCALE? */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ -+ xf_emit(ctx, 1, 1); /* 00000001 VIEWPORT_TRANSFORM_EN */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1900 */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1924 */ -+ xf_emit(ctx, 1, 0x10); /* 000000ff VIEW_VOLUME_CLIP_CTRL */ -+ xf_emit(ctx, 1, 0); /* 00000001 */ -+ xf_emit(ctx, 0x30, 0); /* ffffffff VIEWPORT_TRANSLATE */ -+ xf_emit(ctx, 3, 0); /* f, 0, 0 */ -+ xf_emit(ctx, 3, 0); /* ffffffff */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ -+ xf_emit(ctx, 2, 0x88); /* 000001ff tesla UNK19D8 */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1924 */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ -+ xf_emit(ctx, 1, 4); /* 0000000f CULL_MODE */ -+ xf_emit(ctx, 2, 0); /* 07ffffff SCREEN_SCISSOR */ -+ xf_emit(ctx, 2, 0); /* 00007fff WINDOW_OFFSET_XY */ -+ xf_emit(ctx, 1, 0); /* 00000003 WINDOW_ORIGIN */ -+ xf_emit(ctx, 0x10, 0); /* 00000001 SCISSOR_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 0001ffff GP_BUILTIN_RESULT_EN */ -+ xf_emit(ctx, 1, 0x26); /* 000000ff SEMANTIC_LAYER */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1900 */ -+ xf_emit(ctx, 1, 0); /* 0000000f */ -+ xf_emit(ctx, 1, 0x3f800000); /* ffffffff LINE_WIDTH */ -+ xf_emit(ctx, 1, 0); /* 00000001 LINE_STIPPLE_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 LINE_SMOOTH_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000007 MULTISAMPLE_SAMPLES_LOG2 */ -+ if (IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 1, 0); /* 00000001 */ -+ xf_emit(ctx, 1, 0x1a); /* 0000001f POLYGON_MODE */ -+ xf_emit(ctx, 1, 0x10); /* 000000ff VIEW_VOLUME_CLIP_CTRL */ -+ if (dev_priv->chipset != 0x50) { -+ xf_emit(ctx, 1, 0); /* ffffffff */ -+ xf_emit(ctx, 1, 0); /* 00000001 */ -+ xf_emit(ctx, 1, 0); /* 000003ff */ -+ } -+ xf_emit(ctx, 0x20, 0); /* 10xbits ffffffff, 3fffff. SCISSOR_* */ -+ xf_emit(ctx, 1, 0); /* f */ -+ xf_emit(ctx, 1, 0); /* 0? */ -+ xf_emit(ctx, 1, 0); /* ffffffff */ -+ xf_emit(ctx, 1, 0); /* 003fffff */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ -+ xf_emit(ctx, 1, 0x52); /* 000001ff SEMANTIC_PTSZ */ -+ xf_emit(ctx, 1, 0); /* 0001ffff GP_BUILTIN_RESULT_EN */ -+ xf_emit(ctx, 1, 0x26); /* 000000ff SEMANTIC_LAYER */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1900 */ -+ xf_emit(ctx, 1, 4); /* 0000007f VP_RESULT_MAP_SIZE */ -+ xf_emit(ctx, 1, 4); /* 000000ff GP_RESULT_MAP_SIZE */ -+ xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ -+ xf_emit(ctx, 1, 0x1a); /* 0000001f POLYGON_MODE */ -+ xf_emit(ctx, 1, 0); /* 00000001 LINE_SMOOTH_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 LINE_STIPPLE_ENABLE */ -+ xf_emit(ctx, 1, 0x00ffff00); /* 00ffffff LINE_STIPPLE_PATTERN */ -+ xf_emit(ctx, 1, 0); /* 0000000f */ - } - - static void --nv50_graph_construct_gene_unk3(struct nouveau_grctx *ctx) -+nv50_graph_construct_gene_zcull(struct nouveau_grctx *ctx) - { - struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; -- /* end of area 0 on pre-NVA0, beginning of area 6 on NVAx */ -- xf_emit(ctx, 1, 0x3f); -- xf_emit(ctx, 0xa, 0); -- xf_emit(ctx, 1, 2); -- xf_emit(ctx, 2, 0x04000000); -- xf_emit(ctx, 8, 0); -- xf_emit(ctx, 1, 4); -- xf_emit(ctx, 3, 0); -- xf_emit(ctx, 1, 4); -- if (dev_priv->chipset == 0x50) -- xf_emit(ctx, 0x10, 0); -- else -- xf_emit(ctx, 0x11, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0x1001); -- xf_emit(ctx, 4, 0xffff); -- xf_emit(ctx, 0x20, 0); -- xf_emit(ctx, 0x10, 0x3f800000); -- xf_emit(ctx, 1, 0x10); -- if (dev_priv->chipset == 0x50) -- xf_emit(ctx, 1, 0); -- else -- xf_emit(ctx, 2, 0); -- xf_emit(ctx, 1, 3); -- xf_emit(ctx, 2, 0); -+ /* end of strand 0 on pre-NVA0, beginning of strand 6 on NVAx */ -+ /* SEEK */ -+ xf_emit(ctx, 1, 0x3f); /* 0000003f UNK1590 */ -+ xf_emit(ctx, 1, 0); /* 00000001 ALPHA_TEST_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000007 MULTISAMPLE_SAMPLES_LOG2 */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1534 */ -+ xf_emit(ctx, 1, 0); /* 00000007 STENCIL_BACK_FUNC_FUNC */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_BACK_FUNC_MASK */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_BACK_FUNC_REF */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_BACK_MASK */ -+ xf_emit(ctx, 3, 0); /* 00000007 STENCIL_BACK_OP_FAIL, ZFAIL, ZPASS */ -+ xf_emit(ctx, 1, 2); /* 00000003 tesla UNK143C */ -+ xf_emit(ctx, 2, 0x04000000); /* 07ffffff tesla UNK0D6C */ -+ xf_emit(ctx, 1, 0); /* ffff0ff3 */ -+ xf_emit(ctx, 1, 0); /* 00000001 CLIPID_ENABLE */ -+ xf_emit(ctx, 2, 0); /* ffffffff DEPTH_BOUNDS */ -+ xf_emit(ctx, 1, 0); /* 00000001 */ -+ xf_emit(ctx, 1, 0); /* 00000007 DEPTH_TEST_FUNC */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_TEST_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_WRITE_ENABLE */ -+ xf_emit(ctx, 1, 4); /* 0000000f CULL_MODE */ -+ xf_emit(ctx, 1, 0); /* 0000ffff */ -+ xf_emit(ctx, 1, 0); /* 00000001 UNK0FB0 */ -+ xf_emit(ctx, 1, 0); /* 00000001 POLYGON_STIPPLE_ENABLE */ -+ xf_emit(ctx, 1, 4); /* 00000007 FP_CONTROL */ -+ xf_emit(ctx, 1, 0); /* ffffffff */ -+ xf_emit(ctx, 1, 0); /* 0001ffff GP_BUILTIN_RESULT_EN */ -+ xf_emit(ctx, 1, 0); /* 000000ff CLEAR_STENCIL */ -+ xf_emit(ctx, 1, 0); /* 00000007 STENCIL_FRONT_FUNC_FUNC */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_FUNC_MASK */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_FUNC_REF */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_MASK */ -+ xf_emit(ctx, 3, 0); /* 00000007 STENCIL_FRONT_OP_FAIL, ZFAIL, ZPASS */ -+ xf_emit(ctx, 1, 0); /* 00000001 STENCIL_FRONT_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 STENCIL_BACK_ENABLE */ -+ xf_emit(ctx, 1, 0); /* ffffffff CLEAR_DEPTH */ -+ xf_emit(ctx, 1, 0); /* 00000007 */ -+ if (dev_priv->chipset != 0x50) -+ xf_emit(ctx, 1, 0); /* 00000003 tesla UNK1108 */ -+ xf_emit(ctx, 1, 0); /* 00000001 SAMPLECNT_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 0000000f ZETA_FORMAT */ -+ xf_emit(ctx, 1, 1); /* 00000001 ZETA_ENABLE */ -+ xf_emit(ctx, 1, 0x1001); /* 00001fff ZETA_ARRAY_MODE */ -+ /* SEEK */ -+ xf_emit(ctx, 4, 0xffff); /* 0000ffff MSAA_MASK */ -+ xf_emit(ctx, 0x10, 0); /* 00000001 SCISSOR_ENABLE */ -+ xf_emit(ctx, 0x10, 0); /* ffffffff DEPTH_RANGE_NEAR */ -+ xf_emit(ctx, 0x10, 0x3f800000); /* ffffffff DEPTH_RANGE_FAR */ -+ xf_emit(ctx, 1, 0x10); /* 7f/ff/3ff VIEW_VOLUME_CLIP_CTRL */ -+ xf_emit(ctx, 1, 0); /* 00000001 VIEWPORT_CLIP_RECTS_EN */ -+ xf_emit(ctx, 1, 3); /* 00000003 FP_CTRL_UNK196C */ -+ xf_emit(ctx, 1, 0); /* 00000003 tesla UNK1968 */ -+ if (dev_priv->chipset != 0x50) -+ xf_emit(ctx, 1, 0); /* 0fffffff tesla UNK1104 */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK151C */ - } - - static void --nv50_graph_construct_gene_unk4(struct nouveau_grctx *ctx) -+nv50_graph_construct_gene_clipid(struct nouveau_grctx *ctx) - { -- /* middle of area 0 on pre-NVA0, middle of area 6 on NVAx */ -- xf_emit(ctx, 2, 0x04000000); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 0x80); -- xf_emit(ctx, 3, 0); -- xf_emit(ctx, 1, 0x80); -- xf_emit(ctx, 1, 0); -+ /* middle of strand 0 on pre-NVA0 [after 24xx], middle of area 6 on NVAx */ -+ /* SEEK */ -+ xf_emit(ctx, 1, 0); /* 00000007 UNK0FB4 */ -+ /* SEEK */ -+ xf_emit(ctx, 4, 0); /* 07ffffff CLIPID_REGION_HORIZ */ -+ xf_emit(ctx, 4, 0); /* 07ffffff CLIPID_REGION_VERT */ -+ xf_emit(ctx, 2, 0); /* 07ffffff SCREEN_SCISSOR */ -+ xf_emit(ctx, 2, 0x04000000); /* 07ffffff UNK1508 */ -+ xf_emit(ctx, 1, 0); /* 00000001 CLIPID_ENABLE */ -+ xf_emit(ctx, 1, 0x80); /* 00003fff CLIPID_WIDTH */ -+ xf_emit(ctx, 1, 0); /* 000000ff CLIPID_ID */ -+ xf_emit(ctx, 1, 0); /* 000000ff CLIPID_ADDRESS_HIGH */ -+ xf_emit(ctx, 1, 0); /* ffffffff CLIPID_ADDRESS_LOW */ -+ xf_emit(ctx, 1, 0x80); /* 00003fff CLIPID_HEIGHT */ -+ xf_emit(ctx, 1, 0); /* 0000ffff DMA_CLIPID */ - } - - static void --nv50_graph_construct_gene_unk5(struct nouveau_grctx *ctx) -+nv50_graph_construct_gene_unk24xx(struct nouveau_grctx *ctx) - { - struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; -- /* middle of area 0 on pre-NVA0 [after m2mf], end of area 2 on NVAx */ -- xf_emit(ctx, 2, 4); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 0x1c4d, 0); -- else -- xf_emit(ctx, 0x1c4b, 0); -- xf_emit(ctx, 2, 4); -- xf_emit(ctx, 1, 0x8100c12); -+ int i; -+ /* middle of strand 0 on pre-NVA0 [after m2mf], end of strand 2 on NVAx */ -+ /* SEEK */ -+ xf_emit(ctx, 0x33, 0); -+ /* SEEK */ -+ xf_emit(ctx, 2, 0); -+ /* SEEK */ -+ xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ -+ xf_emit(ctx, 1, 4); /* 0000007f VP_RESULT_MAP_SIZE */ -+ xf_emit(ctx, 1, 4); /* 000000ff GP_RESULT_MAP_SIZE */ -+ /* SEEK */ -+ if (IS_NVA3F(dev_priv->chipset)) { -+ xf_emit(ctx, 4, 0); /* RO */ -+ xf_emit(ctx, 0xe10, 0); /* 190 * 9: 8*ffffffff, 7ff */ -+ xf_emit(ctx, 1, 0); /* 1ff */ -+ xf_emit(ctx, 8, 0); /* 0? */ -+ xf_emit(ctx, 9, 0); /* ffffffff, 7ff */ -+ -+ xf_emit(ctx, 4, 0); /* RO */ -+ xf_emit(ctx, 0xe10, 0); /* 190 * 9: 8*ffffffff, 7ff */ -+ xf_emit(ctx, 1, 0); /* 1ff */ -+ xf_emit(ctx, 8, 0); /* 0? */ -+ xf_emit(ctx, 9, 0); /* ffffffff, 7ff */ -+ } -+ else -+ { -+ xf_emit(ctx, 0xc, 0); /* RO */ -+ /* SEEK */ -+ xf_emit(ctx, 0xe10, 0); /* 190 * 9: 8*ffffffff, 7ff */ -+ xf_emit(ctx, 1, 0); /* 1ff */ -+ xf_emit(ctx, 8, 0); /* 0? */ -+ -+ /* SEEK */ -+ xf_emit(ctx, 0xc, 0); /* RO */ -+ /* SEEK */ -+ xf_emit(ctx, 0xe10, 0); /* 190 * 9: 8*ffffffff, 7ff */ -+ xf_emit(ctx, 1, 0); /* 1ff */ -+ xf_emit(ctx, 8, 0); /* 0? */ -+ } -+ /* SEEK */ -+ xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ -+ xf_emit(ctx, 1, 4); /* 000000ff GP_RESULT_MAP_SIZE */ -+ xf_emit(ctx, 1, 4); /* 0000007f VP_RESULT_MAP_SIZE */ -+ xf_emit(ctx, 1, 0x8100c12); /* 1fffffff FP_INTERPOLANT_CTRL */ - if (dev_priv->chipset != 0x50) -- xf_emit(ctx, 1, 3); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 0x8100c12); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 0x80c14); -- xf_emit(ctx, 1, 1); -+ xf_emit(ctx, 1, 3); /* 00000003 tesla UNK1100 */ -+ /* SEEK */ -+ xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ -+ xf_emit(ctx, 1, 0x8100c12); /* 1fffffff FP_INTERPOLANT_CTRL */ -+ xf_emit(ctx, 1, 0); /* 0000000f VP_GP_BUILTIN_ATTR_EN */ -+ xf_emit(ctx, 1, 0x80c14); /* 01ffffff SEMANTIC_COLOR */ -+ xf_emit(ctx, 1, 1); /* 00000001 */ -+ /* SEEK */ - if (dev_priv->chipset >= 0xa0) -- xf_emit(ctx, 2, 4); -- xf_emit(ctx, 1, 0x80c14); -- xf_emit(ctx, 2, 0); -- xf_emit(ctx, 1, 0x8100c12); -- xf_emit(ctx, 1, 0x27); -- xf_emit(ctx, 2, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 0x3c1, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 0x16, 0); -- xf_emit(ctx, 1, 0x8100c12); -- xf_emit(ctx, 1, 0); -+ xf_emit(ctx, 2, 4); /* 000000ff */ -+ xf_emit(ctx, 1, 0x80c14); /* 01ffffff SEMANTIC_COLOR */ -+ xf_emit(ctx, 1, 0); /* 00000001 VERTEX_TWO_SIDE_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 POINT_SPRITE_ENABLE */ -+ xf_emit(ctx, 1, 0x8100c12); /* 1fffffff FP_INTERPOLANT_CTRL */ -+ xf_emit(ctx, 1, 0x27); /* 000000ff SEMANTIC_PRIM_ID */ -+ xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 0000000f */ -+ xf_emit(ctx, 1, 1); /* 00000001 */ -+ for (i = 0; i < 10; i++) { -+ /* SEEK */ -+ xf_emit(ctx, 0x40, 0); /* ffffffff */ -+ xf_emit(ctx, 0x10, 0); /* 3, 0, 0.... */ -+ xf_emit(ctx, 0x10, 0); /* ffffffff */ -+ } -+ /* SEEK */ -+ xf_emit(ctx, 1, 0); /* 00000001 POINT_SPRITE_CTRL */ -+ xf_emit(ctx, 1, 1); /* 00000001 */ -+ xf_emit(ctx, 1, 0); /* ffffffff */ -+ xf_emit(ctx, 4, 0); /* ffffffff NOPERSPECTIVE_BITMAP */ -+ xf_emit(ctx, 0x10, 0); /* 00ffffff POINT_COORD_REPLACE_MAP */ -+ xf_emit(ctx, 1, 0); /* 00000003 WINDOW_ORIGIN */ -+ xf_emit(ctx, 1, 0x8100c12); /* 1fffffff FP_INTERPOLANT_CTRL */ -+ if (dev_priv->chipset != 0x50) -+ xf_emit(ctx, 1, 0); /* 000003ff */ - } - - static void --nv50_graph_construct_gene_unk6(struct nouveau_grctx *ctx) -+nv50_graph_construct_gene_vfetch(struct nouveau_grctx *ctx) - { - struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; -- /* beginning of area 1 on pre-NVA0 [after m2mf], area 3 on NVAx */ -- xf_emit(ctx, 4, 0); -- xf_emit(ctx, 1, 0xf); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 8, 0); -- else -- xf_emit(ctx, 4, 0); -- xf_emit(ctx, 1, 0x20); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 0x11, 0); -+ int acnt = 0x10, rep, i; -+ /* beginning of strand 1 on pre-NVA0, strand 3 on NVAx */ -+ if (IS_NVA3F(dev_priv->chipset)) -+ acnt = 0x20; -+ /* SEEK */ -+ if (dev_priv->chipset >= 0xa0) { -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK13A4 */ -+ xf_emit(ctx, 1, 1); /* 00000fff tesla UNK1318 */ -+ } -+ xf_emit(ctx, 1, 0); /* ffffffff VERTEX_BUFFER_FIRST */ -+ xf_emit(ctx, 1, 0); /* 00000001 PRIMITIVE_RESTART_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 UNK0DE8 */ -+ xf_emit(ctx, 1, 0); /* ffffffff PRIMITIVE_RESTART_INDEX */ -+ xf_emit(ctx, 1, 0xf); /* ffffffff VP_ATTR_EN */ -+ xf_emit(ctx, (acnt/8)-1, 0); /* ffffffff VP_ATTR_EN */ -+ xf_emit(ctx, acnt/8, 0); /* ffffffff VTX_ATR_MASK_UNK0DD0 */ -+ xf_emit(ctx, 1, 0); /* 0000000f VP_GP_BUILTIN_ATTR_EN */ -+ xf_emit(ctx, 1, 0x20); /* 0000ffff tesla UNK129C */ -+ xf_emit(ctx, 1, 0); /* 000000ff turing UNK370??? */ -+ xf_emit(ctx, 1, 0); /* 0000ffff turing USER_PARAM_COUNT */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ -+ /* SEEK */ -+ if (IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 0xb, 0); /* RO */ - else if (dev_priv->chipset >= 0xa0) -- xf_emit(ctx, 0xf, 0); -+ xf_emit(ctx, 0x9, 0); /* RO */ - else -- xf_emit(ctx, 0xe, 0); -- xf_emit(ctx, 1, 0x1a); -- xf_emit(ctx, 0xd, 0); -- xf_emit(ctx, 2, 4); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 4); -- xf_emit(ctx, 1, 8); -- xf_emit(ctx, 1, 0); -+ xf_emit(ctx, 0x8, 0); /* RO */ -+ /* SEEK */ -+ xf_emit(ctx, 1, 0); /* 00000001 EDGE_FLAG */ -+ xf_emit(ctx, 1, 0); /* 00000001 PROVOKING_VERTEX_LAST */ -+ xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ -+ xf_emit(ctx, 1, 0x1a); /* 0000001f POLYGON_MODE */ -+ /* SEEK */ -+ xf_emit(ctx, 0xc, 0); /* RO */ -+ /* SEEK */ -+ xf_emit(ctx, 1, 0); /* 7f/ff */ -+ xf_emit(ctx, 1, 4); /* 7f/ff VP_REG_ALLOC_RESULT */ -+ xf_emit(ctx, 1, 4); /* 7f/ff VP_RESULT_MAP_SIZE */ -+ xf_emit(ctx, 1, 0); /* 0000000f VP_GP_BUILTIN_ATTR_EN */ -+ xf_emit(ctx, 1, 4); /* 000001ff UNK1A28 */ -+ xf_emit(ctx, 1, 8); /* 000001ff UNK0DF0 */ -+ xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ - if (dev_priv->chipset == 0x50) -- xf_emit(ctx, 1, 0x3ff); -+ xf_emit(ctx, 1, 0x3ff); /* 3ff tesla UNK0D68 */ - else -- xf_emit(ctx, 1, 0x7ff); -+ xf_emit(ctx, 1, 0x7ff); /* 7ff tesla UNK0D68 */ - if (dev_priv->chipset == 0xa8) -- xf_emit(ctx, 1, 0x1e00); -- xf_emit(ctx, 0xc, 0); -- xf_emit(ctx, 1, 0xf); -- if (dev_priv->chipset == 0x50) -- xf_emit(ctx, 0x125, 0); -- else if (dev_priv->chipset < 0xa0) -- xf_emit(ctx, 0x126, 0); -- else if (dev_priv->chipset == 0xa0 || dev_priv->chipset >= 0xaa) -- xf_emit(ctx, 0x124, 0); -- else -- xf_emit(ctx, 0x1f7, 0); -- xf_emit(ctx, 1, 0xf); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 3, 0); -- else -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 1); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 0xa1, 0); -- else -- xf_emit(ctx, 0x5a, 0); -- xf_emit(ctx, 1, 0xf); -+ xf_emit(ctx, 1, 0x1e00); /* 7fff */ -+ /* SEEK */ -+ xf_emit(ctx, 0xc, 0); /* RO or close */ -+ /* SEEK */ -+ xf_emit(ctx, 1, 0xf); /* ffffffff VP_ATTR_EN */ -+ xf_emit(ctx, (acnt/8)-1, 0); /* ffffffff VP_ATTR_EN */ -+ xf_emit(ctx, 1, 0); /* 0000000f VP_GP_BUILTIN_ATTR_EN */ -+ if (dev_priv->chipset > 0x50 && dev_priv->chipset < 0xa0) -+ xf_emit(ctx, 2, 0); /* ffffffff */ -+ else -+ xf_emit(ctx, 1, 0); /* ffffffff */ -+ xf_emit(ctx, 1, 0); /* 00000003 tesla UNK0FD8 */ -+ /* SEEK */ -+ if (IS_NVA3F(dev_priv->chipset)) { -+ xf_emit(ctx, 0x10, 0); /* 0? */ -+ xf_emit(ctx, 2, 0); /* weird... */ -+ xf_emit(ctx, 2, 0); /* RO */ -+ } else { -+ xf_emit(ctx, 8, 0); /* 0? */ -+ xf_emit(ctx, 1, 0); /* weird... */ -+ xf_emit(ctx, 2, 0); /* RO */ -+ } -+ /* SEEK */ -+ xf_emit(ctx, 1, 0); /* ffffffff VB_ELEMENT_BASE */ -+ xf_emit(ctx, 1, 0); /* ffffffff UNK1438 */ -+ xf_emit(ctx, acnt, 0); /* 1 tesla UNK1000 */ -+ if (dev_priv->chipset >= 0xa0) -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1118? */ -+ /* SEEK */ -+ xf_emit(ctx, acnt, 0); /* ffffffff VERTEX_ARRAY_UNK90C */ -+ xf_emit(ctx, 1, 0); /* f/1f */ -+ /* SEEK */ -+ xf_emit(ctx, acnt, 0); /* ffffffff VERTEX_ARRAY_UNK90C */ -+ xf_emit(ctx, 1, 0); /* f/1f */ -+ /* SEEK */ -+ xf_emit(ctx, acnt, 0); /* RO */ -+ xf_emit(ctx, 2, 0); /* RO */ -+ /* SEEK */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK111C? */ -+ xf_emit(ctx, 1, 0); /* RO */ -+ /* SEEK */ -+ xf_emit(ctx, 1, 0); /* 000000ff UNK15F4_ADDRESS_HIGH */ -+ xf_emit(ctx, 1, 0); /* ffffffff UNK15F4_ADDRESS_LOW */ -+ xf_emit(ctx, 1, 0); /* 000000ff UNK0F84_ADDRESS_HIGH */ -+ xf_emit(ctx, 1, 0); /* ffffffff UNK0F84_ADDRESS_LOW */ -+ /* SEEK */ -+ xf_emit(ctx, acnt, 0); /* 00003fff VERTEX_ARRAY_ATTRIB_OFFSET */ -+ xf_emit(ctx, 3, 0); /* f/1f */ -+ /* SEEK */ -+ xf_emit(ctx, acnt, 0); /* 00000fff VERTEX_ARRAY_STRIDE */ -+ xf_emit(ctx, 3, 0); /* f/1f */ -+ /* SEEK */ -+ xf_emit(ctx, acnt, 0); /* ffffffff VERTEX_ARRAY_LOW */ -+ xf_emit(ctx, 3, 0); /* f/1f */ -+ /* SEEK */ -+ xf_emit(ctx, acnt, 0); /* 000000ff VERTEX_ARRAY_HIGH */ -+ xf_emit(ctx, 3, 0); /* f/1f */ -+ /* SEEK */ -+ xf_emit(ctx, acnt, 0); /* ffffffff VERTEX_LIMIT_LOW */ -+ xf_emit(ctx, 3, 0); /* f/1f */ -+ /* SEEK */ -+ xf_emit(ctx, acnt, 0); /* 000000ff VERTEX_LIMIT_HIGH */ -+ xf_emit(ctx, 3, 0); /* f/1f */ -+ /* SEEK */ -+ if (IS_NVA3F(dev_priv->chipset)) { -+ xf_emit(ctx, acnt, 0); /* f */ -+ xf_emit(ctx, 3, 0); /* f/1f */ -+ } -+ /* SEEK */ -+ if (IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 2, 0); /* RO */ -+ else -+ xf_emit(ctx, 5, 0); /* RO */ -+ /* SEEK */ -+ xf_emit(ctx, 1, 0); /* ffff DMA_VTXBUF */ -+ /* SEEK */ -+ if (dev_priv->chipset < 0xa0) { -+ xf_emit(ctx, 0x41, 0); /* RO */ -+ /* SEEK */ -+ xf_emit(ctx, 0x11, 0); /* RO */ -+ } else if (!IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 0x50, 0); /* RO */ -+ else -+ xf_emit(ctx, 0x58, 0); /* RO */ -+ /* SEEK */ -+ xf_emit(ctx, 1, 0xf); /* ffffffff VP_ATTR_EN */ -+ xf_emit(ctx, (acnt/8)-1, 0); /* ffffffff VP_ATTR_EN */ -+ xf_emit(ctx, 1, 1); /* 1 UNK0DEC */ -+ /* SEEK */ -+ xf_emit(ctx, acnt*4, 0); /* ffffffff VTX_ATTR */ -+ xf_emit(ctx, 4, 0); /* f/1f, 0, 0, 0 */ -+ /* SEEK */ -+ if (IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 0x1d, 0); /* RO */ -+ else -+ xf_emit(ctx, 0x16, 0); /* RO */ -+ /* SEEK */ -+ xf_emit(ctx, 1, 0xf); /* ffffffff VP_ATTR_EN */ -+ xf_emit(ctx, (acnt/8)-1, 0); /* ffffffff VP_ATTR_EN */ -+ /* SEEK */ - if (dev_priv->chipset < 0xa0) -- xf_emit(ctx, 0x834, 0); -- else if (dev_priv->chipset == 0xa0) -- xf_emit(ctx, 0x1873, 0); -- else if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 0x8ba, 0); -+ xf_emit(ctx, 8, 0); /* RO */ -+ else if (IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 0xc, 0); /* RO */ -+ else -+ xf_emit(ctx, 7, 0); /* RO */ -+ /* SEEK */ -+ xf_emit(ctx, 0xa, 0); /* RO */ -+ if (dev_priv->chipset == 0xa0) -+ rep = 0xc; -+ else -+ rep = 4; -+ for (i = 0; i < rep; i++) { -+ /* SEEK */ -+ if (IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 0x20, 0); /* ffffffff */ -+ xf_emit(ctx, 0x200, 0); /* ffffffff */ -+ xf_emit(ctx, 4, 0); /* 7f/ff, 0, 0, 0 */ -+ xf_emit(ctx, 4, 0); /* ffffffff */ -+ } -+ /* SEEK */ -+ xf_emit(ctx, 1, 0); /* 113/111 */ -+ xf_emit(ctx, 1, 0xf); /* ffffffff VP_ATTR_EN */ -+ xf_emit(ctx, (acnt/8)-1, 0); /* ffffffff VP_ATTR_EN */ -+ xf_emit(ctx, acnt/8, 0); /* ffffffff VTX_ATTR_MASK_UNK0DD0 */ -+ xf_emit(ctx, 1, 0); /* 0000000f VP_GP_BUILTIN_ATTR_EN */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ -+ /* SEEK */ -+ if (IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 7, 0); /* weird... */ - else -- xf_emit(ctx, 0x833, 0); -- xf_emit(ctx, 1, 0xf); -- xf_emit(ctx, 0xf, 0); -+ xf_emit(ctx, 5, 0); /* weird... */ - } - - static void --nv50_graph_construct_gene_unk7(struct nouveau_grctx *ctx) -+nv50_graph_construct_gene_eng2d(struct nouveau_grctx *ctx) - { - struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; -- /* middle of area 1 on pre-NVA0 [after m2mf], middle of area 6 on NVAx */ -- xf_emit(ctx, 2, 0); -- if (dev_priv->chipset == 0x50) -- xf_emit(ctx, 2, 1); -- else -- xf_emit(ctx, 2, 0); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 2, 0x100); -- xf_emit(ctx, 1, 0x11); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 8); -- xf_emit(ctx, 5, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 3, 1); -- xf_emit(ctx, 1, 0xcf); -- xf_emit(ctx, 1, 2); -- xf_emit(ctx, 6, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 3, 1); -- xf_emit(ctx, 4, 0); -- xf_emit(ctx, 1, 4); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0x15); -- xf_emit(ctx, 3, 0); -- xf_emit(ctx, 1, 0x4444480); -- xf_emit(ctx, 0x37, 0); -+ /* middle of strand 1 on pre-NVA0 [after vfetch], middle of strand 6 on NVAx */ -+ /* SEEK */ -+ xf_emit(ctx, 2, 0); /* 0001ffff CLIP_X, CLIP_Y */ -+ xf_emit(ctx, 2, 0); /* 0000ffff CLIP_W, CLIP_H */ -+ xf_emit(ctx, 1, 0); /* 00000001 CLIP_ENABLE */ -+ if (dev_priv->chipset < 0xa0) { -+ /* this is useless on everything but the original NV50, -+ * guess they forgot to nuke it. Or just didn't bother. */ -+ xf_emit(ctx, 2, 0); /* 0000ffff IFC_CLIP_X, Y */ -+ xf_emit(ctx, 2, 1); /* 0000ffff IFC_CLIP_W, H */ -+ xf_emit(ctx, 1, 0); /* 00000001 IFC_CLIP_ENABLE */ -+ } -+ xf_emit(ctx, 1, 1); /* 00000001 DST_LINEAR */ -+ xf_emit(ctx, 1, 0x100); /* 0001ffff DST_WIDTH */ -+ xf_emit(ctx, 1, 0x100); /* 0001ffff DST_HEIGHT */ -+ xf_emit(ctx, 1, 0x11); /* 3f[NV50]/7f[NV84+] DST_FORMAT */ -+ xf_emit(ctx, 1, 0); /* 0001ffff DRAW_POINT_X */ -+ xf_emit(ctx, 1, 8); /* 0000000f DRAW_UNK58C */ -+ xf_emit(ctx, 1, 0); /* 000fffff SIFC_DST_X_FRACT */ -+ xf_emit(ctx, 1, 0); /* 0001ffff SIFC_DST_X_INT */ -+ xf_emit(ctx, 1, 0); /* 000fffff SIFC_DST_Y_FRACT */ -+ xf_emit(ctx, 1, 0); /* 0001ffff SIFC_DST_Y_INT */ -+ xf_emit(ctx, 1, 0); /* 000fffff SIFC_DX_DU_FRACT */ -+ xf_emit(ctx, 1, 1); /* 0001ffff SIFC_DX_DU_INT */ -+ xf_emit(ctx, 1, 0); /* 000fffff SIFC_DY_DV_FRACT */ -+ xf_emit(ctx, 1, 1); /* 0001ffff SIFC_DY_DV_INT */ -+ xf_emit(ctx, 1, 1); /* 0000ffff SIFC_WIDTH */ -+ xf_emit(ctx, 1, 1); /* 0000ffff SIFC_HEIGHT */ -+ xf_emit(ctx, 1, 0xcf); /* 000000ff SIFC_FORMAT */ -+ xf_emit(ctx, 1, 2); /* 00000003 SIFC_BITMAP_UNK808 */ -+ xf_emit(ctx, 1, 0); /* 00000003 SIFC_BITMAP_LINE_PACK_MODE */ -+ xf_emit(ctx, 1, 0); /* 00000001 SIFC_BITMAP_LSB_FIRST */ -+ xf_emit(ctx, 1, 0); /* 00000001 SIFC_BITMAP_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 0000ffff BLIT_DST_X */ -+ xf_emit(ctx, 1, 0); /* 0000ffff BLIT_DST_Y */ -+ xf_emit(ctx, 1, 0); /* 000fffff BLIT_DU_DX_FRACT */ -+ xf_emit(ctx, 1, 1); /* 0001ffff BLIT_DU_DX_INT */ -+ xf_emit(ctx, 1, 0); /* 000fffff BLIT_DV_DY_FRACT */ -+ xf_emit(ctx, 1, 1); /* 0001ffff BLIT_DV_DY_INT */ -+ xf_emit(ctx, 1, 1); /* 0000ffff BLIT_DST_W */ -+ xf_emit(ctx, 1, 1); /* 0000ffff BLIT_DST_H */ -+ xf_emit(ctx, 1, 0); /* 000fffff BLIT_SRC_X_FRACT */ -+ xf_emit(ctx, 1, 0); /* 0001ffff BLIT_SRC_X_INT */ -+ xf_emit(ctx, 1, 0); /* 000fffff BLIT_SRC_Y_FRACT */ -+ xf_emit(ctx, 1, 0); /* 00000001 UNK888 */ -+ xf_emit(ctx, 1, 4); /* 0000003f UNK884 */ -+ xf_emit(ctx, 1, 0); /* 00000007 UNK880 */ -+ xf_emit(ctx, 1, 1); /* 0000001f tesla UNK0FB8 */ -+ xf_emit(ctx, 1, 0x15); /* 000000ff tesla UNK128C */ -+ xf_emit(ctx, 2, 0); /* 00000007, ffff0ff3 */ -+ xf_emit(ctx, 1, 0); /* 00000001 UNK260 */ -+ xf_emit(ctx, 1, 0x4444480); /* 1fffffff UNK870 */ -+ /* SEEK */ -+ xf_emit(ctx, 0x10, 0); -+ /* SEEK */ -+ xf_emit(ctx, 0x27, 0); - } - - static void --nv50_graph_construct_gene_unk8(struct nouveau_grctx *ctx) -+nv50_graph_construct_gene_csched(struct nouveau_grctx *ctx) - { -- /* middle of area 1 on pre-NVA0 [after m2mf], middle of area 0 on NVAx */ -- xf_emit(ctx, 4, 0); -- xf_emit(ctx, 1, 0x8100c12); -- xf_emit(ctx, 4, 0); -- xf_emit(ctx, 1, 0x100); -- xf_emit(ctx, 2, 0); -- xf_emit(ctx, 1, 0x10001); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 0x10001); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0x10001); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 4); -- xf_emit(ctx, 1, 2); -+ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; -+ /* middle of strand 1 on pre-NVA0 [after eng2d], middle of strand 0 on NVAx */ -+ /* SEEK */ -+ xf_emit(ctx, 2, 0); /* 00007fff WINDOW_OFFSET_XY... what is it doing here??? */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1924 */ -+ xf_emit(ctx, 1, 0); /* 00000003 WINDOW_ORIGIN */ -+ xf_emit(ctx, 1, 0x8100c12); /* 1fffffff FP_INTERPOLANT_CTRL */ -+ xf_emit(ctx, 1, 0); /* 000003ff */ -+ /* SEEK */ -+ xf_emit(ctx, 1, 0); /* ffffffff turing UNK364 */ -+ xf_emit(ctx, 1, 0); /* 0000000f turing UNK36C */ -+ xf_emit(ctx, 1, 0); /* 0000ffff USER_PARAM_COUNT */ -+ xf_emit(ctx, 1, 0x100); /* 00ffffff turing UNK384 */ -+ xf_emit(ctx, 1, 0); /* 0000000f turing UNK2A0 */ -+ xf_emit(ctx, 1, 0); /* 0000ffff GRIDID */ -+ xf_emit(ctx, 1, 0x10001); /* ffffffff GRIDDIM_XY */ -+ xf_emit(ctx, 1, 0); /* ffffffff */ -+ xf_emit(ctx, 1, 0x10001); /* ffffffff BLOCKDIM_XY */ -+ xf_emit(ctx, 1, 1); /* 0000ffff BLOCKDIM_Z */ -+ xf_emit(ctx, 1, 0x10001); /* 00ffffff BLOCK_ALLOC */ -+ xf_emit(ctx, 1, 1); /* 00000001 LANES32 */ -+ xf_emit(ctx, 1, 4); /* 000000ff FP_REG_ALLOC_TEMP */ -+ xf_emit(ctx, 1, 2); /* 00000003 REG_MODE */ -+ /* SEEK */ -+ xf_emit(ctx, 0x40, 0); /* ffffffff USER_PARAM */ -+ switch (dev_priv->chipset) { -+ case 0x50: -+ case 0x92: -+ xf_emit(ctx, 8, 0); /* 7, 0, 0, 0, ... */ -+ xf_emit(ctx, 0x80, 0); /* fff */ -+ xf_emit(ctx, 2, 0); /* ff, fff */ -+ xf_emit(ctx, 0x10*2, 0); /* ffffffff, 1f */ -+ break; -+ case 0x84: -+ xf_emit(ctx, 8, 0); /* 7, 0, 0, 0, ... */ -+ xf_emit(ctx, 0x60, 0); /* fff */ -+ xf_emit(ctx, 2, 0); /* ff, fff */ -+ xf_emit(ctx, 0xc*2, 0); /* ffffffff, 1f */ -+ break; -+ case 0x94: -+ case 0x96: -+ xf_emit(ctx, 8, 0); /* 7, 0, 0, 0, ... */ -+ xf_emit(ctx, 0x40, 0); /* fff */ -+ xf_emit(ctx, 2, 0); /* ff, fff */ -+ xf_emit(ctx, 8*2, 0); /* ffffffff, 1f */ -+ break; -+ case 0x86: -+ case 0x98: -+ xf_emit(ctx, 4, 0); /* f, 0, 0, 0 */ -+ xf_emit(ctx, 0x10, 0); /* fff */ -+ xf_emit(ctx, 2, 0); /* ff, fff */ -+ xf_emit(ctx, 2*2, 0); /* ffffffff, 1f */ -+ break; -+ case 0xa0: -+ xf_emit(ctx, 8, 0); /* 7, 0, 0, 0, ... */ -+ xf_emit(ctx, 0xf0, 0); /* fff */ -+ xf_emit(ctx, 2, 0); /* ff, fff */ -+ xf_emit(ctx, 0x1e*2, 0); /* ffffffff, 1f */ -+ break; -+ case 0xa3: -+ xf_emit(ctx, 8, 0); /* 7, 0, 0, 0, ... */ -+ xf_emit(ctx, 0x60, 0); /* fff */ -+ xf_emit(ctx, 2, 0); /* ff, fff */ -+ xf_emit(ctx, 0xc*2, 0); /* ffffffff, 1f */ -+ break; -+ case 0xa5: -+ case 0xaf: -+ xf_emit(ctx, 8, 0); /* 7, 0, 0, 0, ... */ -+ xf_emit(ctx, 0x30, 0); /* fff */ -+ xf_emit(ctx, 2, 0); /* ff, fff */ -+ xf_emit(ctx, 6*2, 0); /* ffffffff, 1f */ -+ break; -+ case 0xaa: -+ xf_emit(ctx, 0x12, 0); -+ break; -+ case 0xa8: -+ case 0xac: -+ xf_emit(ctx, 4, 0); /* f, 0, 0, 0 */ -+ xf_emit(ctx, 0x10, 0); /* fff */ -+ xf_emit(ctx, 2, 0); /* ff, fff */ -+ xf_emit(ctx, 2*2, 0); /* ffffffff, 1f */ -+ break; -+ } -+ xf_emit(ctx, 1, 0); /* 0000000f */ -+ xf_emit(ctx, 1, 0); /* 00000000 */ -+ xf_emit(ctx, 1, 0); /* ffffffff */ -+ xf_emit(ctx, 1, 0); /* 0000001f */ -+ xf_emit(ctx, 4, 0); /* ffffffff */ -+ xf_emit(ctx, 1, 0); /* 00000003 turing UNK35C */ -+ xf_emit(ctx, 1, 0); /* ffffffff */ -+ xf_emit(ctx, 4, 0); /* ffffffff */ -+ xf_emit(ctx, 1, 0); /* 00000003 turing UNK35C */ -+ xf_emit(ctx, 1, 0); /* ffffffff */ -+ xf_emit(ctx, 1, 0); /* 000000ff */ - } - - static void --nv50_graph_construct_gene_unk9(struct nouveau_grctx *ctx) -+nv50_graph_construct_gene_unk1cxx(struct nouveau_grctx *ctx) - { - struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; -- /* middle of area 2 on pre-NVA0 [after m2mf], end of area 0 on NVAx */ -- xf_emit(ctx, 1, 0x3f800000); -- xf_emit(ctx, 6, 0); -- xf_emit(ctx, 1, 4); -- xf_emit(ctx, 1, 0x1a); -- xf_emit(ctx, 2, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 0x12, 0); -- xf_emit(ctx, 1, 0x00ffff00); -- xf_emit(ctx, 6, 0); -- xf_emit(ctx, 1, 0xf); -- xf_emit(ctx, 7, 0); -- xf_emit(ctx, 1, 0x0fac6881); -- xf_emit(ctx, 1, 0x11); -- xf_emit(ctx, 0xf, 0); -- xf_emit(ctx, 1, 4); -- xf_emit(ctx, 2, 0); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 1, 3); -+ xf_emit(ctx, 2, 0); /* 00007fff WINDOW_OFFSET_XY */ -+ xf_emit(ctx, 1, 0x3f800000); /* ffffffff LINE_WIDTH */ -+ xf_emit(ctx, 1, 0); /* 00000001 LINE_SMOOTH_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1658 */ -+ xf_emit(ctx, 1, 0); /* 00000001 POLYGON_SMOOTH_ENABLE */ -+ xf_emit(ctx, 3, 0); /* 00000001 POLYGON_OFFSET_*_ENABLE */ -+ xf_emit(ctx, 1, 4); /* 0000000f CULL_MODE */ -+ xf_emit(ctx, 1, 0x1a); /* 0000001f POLYGON_MODE */ -+ xf_emit(ctx, 1, 0); /* 0000000f ZETA_FORMAT */ -+ xf_emit(ctx, 1, 0); /* 00000001 POINT_SPRITE_ENABLE */ -+ xf_emit(ctx, 1, 1); /* 00000001 tesla UNK165C */ -+ xf_emit(ctx, 0x10, 0); /* 00000001 SCISSOR_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1534 */ -+ xf_emit(ctx, 1, 0); /* 00000001 LINE_STIPPLE_ENABLE */ -+ xf_emit(ctx, 1, 0x00ffff00); /* 00ffffff LINE_STIPPLE_PATTERN */ -+ xf_emit(ctx, 1, 0); /* ffffffff POLYGON_OFFSET_UNITS */ -+ xf_emit(ctx, 1, 0); /* ffffffff POLYGON_OFFSET_FACTOR */ -+ xf_emit(ctx, 1, 0); /* 00000003 tesla UNK1668 */ -+ xf_emit(ctx, 2, 0); /* 07ffffff SCREEN_SCISSOR */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1900 */ -+ xf_emit(ctx, 1, 0xf); /* 0000000f COLOR_MASK */ -+ xf_emit(ctx, 7, 0); /* 0000000f COLOR_MASK */ -+ xf_emit(ctx, 1, 0x0fac6881); /* 0fffffff RT_CONTROL */ -+ xf_emit(ctx, 1, 0x11); /* 0000007f RT_FORMAT */ -+ xf_emit(ctx, 7, 0); /* 0000007f RT_FORMAT */ -+ xf_emit(ctx, 8, 0); /* 00000001 RT_HORIZ_LINEAR */ -+ xf_emit(ctx, 1, 4); /* 00000007 FP_CONTROL */ -+ xf_emit(ctx, 1, 0); /* 00000001 ALPHA_TEST_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000007 ALPHA_TEST_FUNC */ -+ if (IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 1, 3); /* 00000003 UNK16B4 */ - else if (dev_priv->chipset >= 0xa0) -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 2, 0); -- xf_emit(ctx, 1, 2); -- xf_emit(ctx, 2, 0x04000000); -- xf_emit(ctx, 3, 0); -- xf_emit(ctx, 1, 5); -- xf_emit(ctx, 1, 0x52); -- if (dev_priv->chipset == 0x50) { -- xf_emit(ctx, 0x13, 0); -- } else { -- xf_emit(ctx, 4, 0); -- xf_emit(ctx, 1, 1); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 0x11, 0); -- else -- xf_emit(ctx, 0x10, 0); -+ xf_emit(ctx, 1, 1); /* 00000001 UNK16B4 */ -+ xf_emit(ctx, 1, 0); /* 00000003 MULTISAMPLE_CTRL */ -+ xf_emit(ctx, 1, 0); /* 00000003 tesla UNK0F90 */ -+ xf_emit(ctx, 1, 2); /* 00000003 tesla UNK143C */ -+ xf_emit(ctx, 2, 0x04000000); /* 07ffffff tesla UNK0D6C */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_MASK */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_WRITE_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 SAMPLECNT_ENABLE */ -+ xf_emit(ctx, 1, 5); /* 0000000f UNK1408 */ -+ xf_emit(ctx, 1, 0x52); /* 000001ff SEMANTIC_PTSZ */ -+ xf_emit(ctx, 1, 0); /* ffffffff POINT_SIZE */ -+ xf_emit(ctx, 1, 0); /* 00000001 */ -+ xf_emit(ctx, 1, 0); /* 00000007 tesla UNK0FB4 */ -+ if (dev_priv->chipset != 0x50) { -+ xf_emit(ctx, 1, 0); /* 3ff */ -+ xf_emit(ctx, 1, 1); /* 00000001 tesla UNK1110 */ - } -- xf_emit(ctx, 0x10, 0x3f800000); -- xf_emit(ctx, 1, 0x10); -- xf_emit(ctx, 0x26, 0); -- xf_emit(ctx, 1, 0x8100c12); -- xf_emit(ctx, 1, 5); -- xf_emit(ctx, 2, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 4, 0xffff); -+ if (IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 1, 0); /* 00000003 tesla UNK1928 */ -+ xf_emit(ctx, 0x10, 0); /* ffffffff DEPTH_RANGE_NEAR */ -+ xf_emit(ctx, 0x10, 0x3f800000); /* ffffffff DEPTH_RANGE_FAR */ -+ xf_emit(ctx, 1, 0x10); /* 000000ff VIEW_VOLUME_CLIP_CTRL */ -+ xf_emit(ctx, 0x20, 0); /* 07ffffff VIEWPORT_HORIZ, then VIEWPORT_VERT. (W&0x3fff)<<13 | (X&0x1fff). */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK187C */ -+ xf_emit(ctx, 1, 0); /* 00000003 WINDOW_ORIGIN */ -+ xf_emit(ctx, 1, 0); /* 00000001 STENCIL_FRONT_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_TEST_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 STENCIL_BACK_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_BACK_MASK */ -+ xf_emit(ctx, 1, 0x8100c12); /* 1fffffff FP_INTERPOLANT_CTRL */ -+ xf_emit(ctx, 1, 5); /* 0000000f tesla UNK1220 */ -+ xf_emit(ctx, 1, 0); /* 00000007 MULTISAMPLE_SAMPLES_LOG2 */ -+ xf_emit(ctx, 1, 0); /* 000000ff tesla UNK1A20 */ -+ xf_emit(ctx, 1, 1); /* 00000001 ZETA_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 VERTEX_TWO_SIDE_ENABLE */ -+ xf_emit(ctx, 4, 0xffff); /* 0000ffff MSAA_MASK */ - if (dev_priv->chipset != 0x50) -- xf_emit(ctx, 1, 3); -+ xf_emit(ctx, 1, 3); /* 00000003 tesla UNK1100 */ - if (dev_priv->chipset < 0xa0) -- xf_emit(ctx, 0x1f, 0); -- else if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 0xc, 0); -- else -- xf_emit(ctx, 3, 0); -- xf_emit(ctx, 1, 0x00ffff00); -- xf_emit(ctx, 1, 0x1a); -+ xf_emit(ctx, 0x1c, 0); /* RO */ -+ else if (IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 0x9, 0); -+ xf_emit(ctx, 1, 0); /* 00000001 UNK1534 */ -+ xf_emit(ctx, 1, 0); /* 00000001 LINE_SMOOTH_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 LINE_STIPPLE_ENABLE */ -+ xf_emit(ctx, 1, 0x00ffff00); /* 00ffffff LINE_STIPPLE_PATTERN */ -+ xf_emit(ctx, 1, 0x1a); /* 0000001f POLYGON_MODE */ -+ xf_emit(ctx, 1, 0); /* 00000003 WINDOW_ORIGIN */ - if (dev_priv->chipset != 0x50) { -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 3); -+ xf_emit(ctx, 1, 3); /* 00000003 tesla UNK1100 */ -+ xf_emit(ctx, 1, 0); /* 3ff */ - } -+ /* XXX: the following block could belong either to unk1cxx, or -+ * to STRMOUT. Rather hard to tell. */ - if (dev_priv->chipset < 0xa0) -- xf_emit(ctx, 0x26, 0); -- else -- xf_emit(ctx, 0x3c, 0); -- xf_emit(ctx, 1, 0x102); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 4, 4); -- if (dev_priv->chipset >= 0xa0) -- xf_emit(ctx, 8, 0); -- xf_emit(ctx, 2, 4); -- xf_emit(ctx, 1, 0); -- if (dev_priv->chipset == 0x50) -- xf_emit(ctx, 1, 0x3ff); -+ xf_emit(ctx, 0x25, 0); - else -- xf_emit(ctx, 1, 0x7ff); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 0x102); -- xf_emit(ctx, 9, 0); -- xf_emit(ctx, 4, 4); -- xf_emit(ctx, 0x2c, 0); -+ xf_emit(ctx, 0x3b, 0); -+} -+ -+static void -+nv50_graph_construct_gene_strmout(struct nouveau_grctx *ctx) -+{ -+ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; -+ xf_emit(ctx, 1, 0x102); /* 0000ffff STRMOUT_BUFFER_CTRL */ -+ xf_emit(ctx, 1, 0); /* ffffffff STRMOUT_PRIMITIVE_COUNT */ -+ xf_emit(ctx, 4, 4); /* 000000ff STRMOUT_NUM_ATTRIBS */ -+ if (dev_priv->chipset >= 0xa0) { -+ xf_emit(ctx, 4, 0); /* ffffffff UNK1A8C */ -+ xf_emit(ctx, 4, 0); /* ffffffff UNK1780 */ -+ } -+ xf_emit(ctx, 1, 4); /* 000000ff GP_RESULT_MAP_SIZE */ -+ xf_emit(ctx, 1, 4); /* 0000007f VP_RESULT_MAP_SIZE */ -+ xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ -+ if (dev_priv->chipset == 0x50) -+ xf_emit(ctx, 1, 0x3ff); /* 000003ff tesla UNK0D68 */ -+ else -+ xf_emit(ctx, 1, 0x7ff); /* 000007ff tesla UNK0D68 */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ -+ /* SEEK */ -+ xf_emit(ctx, 1, 0x102); /* 0000ffff STRMOUT_BUFFER_CTRL */ -+ xf_emit(ctx, 1, 0); /* ffffffff STRMOUT_PRIMITIVE_COUNT */ -+ xf_emit(ctx, 4, 0); /* 000000ff STRMOUT_ADDRESS_HIGH */ -+ xf_emit(ctx, 4, 0); /* ffffffff STRMOUT_ADDRESS_LOW */ -+ xf_emit(ctx, 4, 4); /* 000000ff STRMOUT_NUM_ATTRIBS */ -+ if (dev_priv->chipset >= 0xa0) { -+ xf_emit(ctx, 4, 0); /* ffffffff UNK1A8C */ -+ xf_emit(ctx, 4, 0); /* ffffffff UNK1780 */ -+ } -+ xf_emit(ctx, 1, 0); /* 0000ffff DMA_STRMOUT */ -+ xf_emit(ctx, 1, 0); /* 0000ffff DMA_QUERY */ -+ xf_emit(ctx, 1, 0); /* 000000ff QUERY_ADDRESS_HIGH */ -+ xf_emit(ctx, 2, 0); /* ffffffff QUERY_ADDRESS_LOW QUERY_COUNTER */ -+ xf_emit(ctx, 2, 0); /* ffffffff */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ -+ /* SEEK */ -+ xf_emit(ctx, 0x20, 0); /* ffffffff STRMOUT_MAP */ -+ xf_emit(ctx, 1, 0); /* 0000000f */ -+ xf_emit(ctx, 1, 0); /* 00000000? */ -+ xf_emit(ctx, 2, 0); /* ffffffff */ -+} -+ -+static void -+nv50_graph_construct_gene_ropm1(struct nouveau_grctx *ctx) -+{ -+ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; -+ xf_emit(ctx, 1, 0x4e3bfdf); /* ffffffff UNK0D64 */ -+ xf_emit(ctx, 1, 0x4e3bfdf); /* ffffffff UNK0DF4 */ -+ xf_emit(ctx, 1, 0); /* 00000007 */ -+ xf_emit(ctx, 1, 0); /* 000003ff */ -+ if (IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 1, 0x11); /* 000000ff tesla UNK1968 */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A3C */ -+} -+ -+static void -+nv50_graph_construct_gene_ropm2(struct nouveau_grctx *ctx) -+{ -+ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; -+ /* SEEK */ -+ xf_emit(ctx, 1, 0); /* 0000ffff DMA_QUERY */ -+ xf_emit(ctx, 1, 0x0fac6881); /* 0fffffff RT_CONTROL */ -+ xf_emit(ctx, 2, 0); /* ffffffff */ -+ xf_emit(ctx, 1, 0); /* 000000ff QUERY_ADDRESS_HIGH */ -+ xf_emit(ctx, 2, 0); /* ffffffff QUERY_ADDRESS_LOW, COUNTER */ -+ xf_emit(ctx, 1, 0); /* 00000001 SAMPLECNT_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 7 */ -+ /* SEEK */ -+ xf_emit(ctx, 1, 0); /* 0000ffff DMA_QUERY */ -+ xf_emit(ctx, 1, 0); /* 000000ff QUERY_ADDRESS_HIGH */ -+ xf_emit(ctx, 2, 0); /* ffffffff QUERY_ADDRESS_LOW, COUNTER */ -+ xf_emit(ctx, 1, 0x4e3bfdf); /* ffffffff UNK0D64 */ -+ xf_emit(ctx, 1, 0x4e3bfdf); /* ffffffff UNK0DF4 */ -+ xf_emit(ctx, 1, 0); /* 00000001 eng2d UNK260 */ -+ xf_emit(ctx, 1, 0); /* ff/3ff */ -+ xf_emit(ctx, 1, 0); /* 00000007 */ -+ if (IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 1, 0x11); /* 000000ff tesla UNK1968 */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A3C */ - } - - static void -@@ -1749,443 +2392,709 @@ - int magic2; - if (dev_priv->chipset == 0x50) { - magic2 = 0x00003e60; -- } else if (dev_priv->chipset <= 0xa0 || dev_priv->chipset >= 0xaa) { -+ } else if (!IS_NVA3F(dev_priv->chipset)) { - magic2 = 0x001ffe67; - } else { - magic2 = 0x00087e67; - } -- xf_emit(ctx, 8, 0); -- xf_emit(ctx, 1, 2); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, magic2); -- xf_emit(ctx, 4, 0); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 7, 0); -- if (dev_priv->chipset >= 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 1, 0x15); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0x10); -- xf_emit(ctx, 2, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 4, 0); -+ xf_emit(ctx, 1, 0); /* f/7 MUTISAMPLE_SAMPLES_LOG2 */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1534 */ -+ xf_emit(ctx, 1, 0); /* 00000007 STENCIL_BACK_FUNC_FUNC */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_BACK_FUNC_MASK */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_BACK_MASK */ -+ xf_emit(ctx, 3, 0); /* 00000007 STENCIL_BACK_OP_FAIL, ZFAIL, ZPASS */ -+ xf_emit(ctx, 1, 2); /* 00000003 tesla UNK143C */ -+ xf_emit(ctx, 1, 0); /* ffff0ff3 */ -+ xf_emit(ctx, 1, magic2); /* 001fffff tesla UNK0F78 */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_BOUNDS_EN */ -+ xf_emit(ctx, 1, 0); /* 00000007 DEPTH_TEST_FUNC */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_TEST_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_WRITE_ENABLE */ -+ if (IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 1, 1); /* 0000001f tesla UNK169C */ -+ xf_emit(ctx, 1, 0); /* 00000007 STENCIL_FRONT_FUNC_FUNC */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_FUNC_MASK */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_MASK */ -+ xf_emit(ctx, 3, 0); /* 00000007 STENCIL_FRONT_OP_FAIL, ZFAIL, ZPASS */ -+ xf_emit(ctx, 1, 0); /* 00000001 STENCIL_FRONT_ENABLE */ -+ if (dev_priv->chipset >= 0xa0 && !IS_NVAAF(dev_priv->chipset)) -+ xf_emit(ctx, 1, 0x15); /* 000000ff */ -+ xf_emit(ctx, 1, 0); /* 00000001 STENCIL_BACK_ENABLE */ -+ xf_emit(ctx, 1, 1); /* 00000001 tesla UNK15B4 */ -+ xf_emit(ctx, 1, 0x10); /* 3ff/ff VIEW_VOLUME_CLIP_CTRL */ -+ xf_emit(ctx, 1, 0); /* ffffffff CLEAR_DEPTH */ -+ xf_emit(ctx, 1, 0); /* 0000000f ZETA_FORMAT */ -+ xf_emit(ctx, 1, 1); /* 00000001 ZETA_ENABLE */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A3C */ - if (dev_priv->chipset == 0x86 || dev_priv->chipset == 0x92 || dev_priv->chipset == 0x98 || dev_priv->chipset >= 0xa0) { -- xf_emit(ctx, 1, 4); -- xf_emit(ctx, 1, 0x400); -- xf_emit(ctx, 1, 0x300); -- xf_emit(ctx, 1, 0x1001); -+ xf_emit(ctx, 3, 0); /* ff, ffffffff, ffffffff */ -+ xf_emit(ctx, 1, 4); /* 7 */ -+ xf_emit(ctx, 1, 0x400); /* fffffff */ -+ xf_emit(ctx, 1, 0x300); /* ffff */ -+ xf_emit(ctx, 1, 0x1001); /* 1fff */ - if (dev_priv->chipset != 0xa0) { -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 1, 0); -+ if (IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 1, 0); /* 0000000f UNK15C8 */ - else -- xf_emit(ctx, 1, 0x15); -+ xf_emit(ctx, 1, 0x15); /* ff */ - } -- xf_emit(ctx, 3, 0); - } -- xf_emit(ctx, 2, 0); -- xf_emit(ctx, 1, 2); -- xf_emit(ctx, 8, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0x10); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 0x13, 0); -- xf_emit(ctx, 1, 0x10); -- xf_emit(ctx, 0x10, 0); -- xf_emit(ctx, 0x10, 0x3f800000); -- xf_emit(ctx, 0x19, 0); -- xf_emit(ctx, 1, 0x10); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 0x3f); -- xf_emit(ctx, 6, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 1); -+ xf_emit(ctx, 1, 0); /* 00000007 MULTISAMPLE_SAMPLES_LOG2 */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1534 */ -+ xf_emit(ctx, 1, 0); /* 00000007 STENCIL_BACK_FUNC_FUNC */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_BACK_FUNC_MASK */ -+ xf_emit(ctx, 1, 0); /* ffff0ff3 */ -+ xf_emit(ctx, 1, 2); /* 00000003 tesla UNK143C */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_BOUNDS_EN */ -+ xf_emit(ctx, 1, 0); /* 00000007 DEPTH_TEST_FUNC */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_TEST_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_WRITE_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000007 STENCIL_FRONT_FUNC_FUNC */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_FUNC_MASK */ -+ xf_emit(ctx, 1, 0); /* 00000001 STENCIL_FRONT_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 STENCIL_BACK_ENABLE */ -+ xf_emit(ctx, 1, 1); /* 00000001 tesla UNK15B4 */ -+ xf_emit(ctx, 1, 0x10); /* 7f/ff VIEW_VOLUME_CLIP_CTRL */ -+ xf_emit(ctx, 1, 0); /* 0000000f ZETA_FORMAT */ -+ xf_emit(ctx, 1, 1); /* 00000001 ZETA_ENABLE */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A3C */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1534 */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1900 */ -+ xf_emit(ctx, 1, 0); /* 00000007 STENCIL_BACK_FUNC_FUNC */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_BACK_FUNC_MASK */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_BACK_FUNC_REF */ -+ xf_emit(ctx, 2, 0); /* ffffffff DEPTH_BOUNDS */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_BOUNDS_EN */ -+ xf_emit(ctx, 1, 0); /* 00000007 DEPTH_TEST_FUNC */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_TEST_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_WRITE_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 0000000f */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK0FB0 */ -+ xf_emit(ctx, 1, 0); /* 00000007 STENCIL_FRONT_FUNC_FUNC */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_FUNC_MASK */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_FUNC_REF */ -+ xf_emit(ctx, 1, 0); /* 00000001 STENCIL_FRONT_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 STENCIL_BACK_ENABLE */ -+ xf_emit(ctx, 1, 0x10); /* 7f/ff VIEW_VOLUME_CLIP_CTRL */ -+ xf_emit(ctx, 0x10, 0); /* ffffffff DEPTH_RANGE_NEAR */ -+ xf_emit(ctx, 0x10, 0x3f800000); /* ffffffff DEPTH_RANGE_FAR */ -+ xf_emit(ctx, 1, 0); /* 0000000f ZETA_FORMAT */ -+ xf_emit(ctx, 1, 0); /* 00000007 MULTISAMPLE_SAMPLES_LOG2 */ -+ xf_emit(ctx, 1, 0); /* 00000007 STENCIL_BACK_FUNC_FUNC */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_BACK_FUNC_MASK */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_BACK_FUNC_REF */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_BACK_MASK */ -+ xf_emit(ctx, 3, 0); /* 00000007 STENCIL_BACK_OP_FAIL, ZFAIL, ZPASS */ -+ xf_emit(ctx, 2, 0); /* ffffffff DEPTH_BOUNDS */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_BOUNDS_EN */ -+ xf_emit(ctx, 1, 0); /* 00000007 DEPTH_TEST_FUNC */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_TEST_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_WRITE_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 000000ff CLEAR_STENCIL */ -+ xf_emit(ctx, 1, 0); /* 00000007 STENCIL_FRONT_FUNC_FUNC */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_FUNC_MASK */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_FUNC_REF */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_MASK */ -+ xf_emit(ctx, 3, 0); /* 00000007 STENCIL_FRONT_OP_FAIL, ZFAIL, ZPASS */ -+ xf_emit(ctx, 1, 0); /* 00000001 STENCIL_FRONT_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 STENCIL_BACK_ENABLE */ -+ xf_emit(ctx, 1, 0x10); /* 7f/ff VIEW_VOLUME_CLIP_CTRL */ -+ xf_emit(ctx, 1, 0); /* 0000000f ZETA_FORMAT */ -+ xf_emit(ctx, 1, 0x3f); /* 0000003f UNK1590 */ -+ xf_emit(ctx, 1, 0); /* 00000007 MULTISAMPLE_SAMPLES_LOG2 */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1534 */ -+ xf_emit(ctx, 2, 0); /* ffff0ff3, ffff */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK0FB0 */ -+ xf_emit(ctx, 1, 0); /* 0001ffff GP_BUILTIN_RESULT_EN */ -+ xf_emit(ctx, 1, 1); /* 00000001 tesla UNK15B4 */ -+ xf_emit(ctx, 1, 0); /* 0000000f ZETA_FORMAT */ -+ xf_emit(ctx, 1, 1); /* 00000001 ZETA_ENABLE */ -+ xf_emit(ctx, 1, 0); /* ffffffff CLEAR_DEPTH */ -+ xf_emit(ctx, 1, 1); /* 00000001 tesla UNK19CC */ - if (dev_priv->chipset >= 0xa0) { - xf_emit(ctx, 2, 0); - xf_emit(ctx, 1, 0x1001); - xf_emit(ctx, 0xb, 0); - } else { -- xf_emit(ctx, 0xc, 0); -+ xf_emit(ctx, 1, 0); /* 00000007 */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1534 */ -+ xf_emit(ctx, 1, 0); /* 00000007 MULTISAMPLE_SAMPLES_LOG2 */ -+ xf_emit(ctx, 8, 0); /* 00000001 BLEND_ENABLE */ -+ xf_emit(ctx, 1, 0); /* ffff0ff3 */ -+ } -+ xf_emit(ctx, 1, 0x11); /* 3f/7f RT_FORMAT */ -+ xf_emit(ctx, 7, 0); /* 3f/7f RT_FORMAT */ -+ xf_emit(ctx, 1, 0xf); /* 0000000f COLOR_MASK */ -+ xf_emit(ctx, 7, 0); /* 0000000f COLOR_MASK */ -+ xf_emit(ctx, 1, 0x11); /* 3f/7f */ -+ xf_emit(ctx, 1, 0); /* 00000001 LOGIC_OP_ENABLE */ -+ if (dev_priv->chipset != 0x50) { -+ xf_emit(ctx, 1, 0); /* 0000000f LOGIC_OP */ -+ xf_emit(ctx, 1, 0); /* 000000ff */ - } -- xf_emit(ctx, 1, 0x11); -- xf_emit(ctx, 7, 0); -- xf_emit(ctx, 1, 0xf); -- xf_emit(ctx, 7, 0); -- xf_emit(ctx, 1, 0x11); -- if (dev_priv->chipset == 0x50) -- xf_emit(ctx, 4, 0); -- else -- xf_emit(ctx, 6, 0); -- xf_emit(ctx, 3, 1); -- xf_emit(ctx, 1, 2); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 2); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, magic2); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 0x0fac6881); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) { -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 0x18, 1); -- xf_emit(ctx, 8, 2); -- xf_emit(ctx, 8, 1); -- xf_emit(ctx, 8, 2); -- xf_emit(ctx, 8, 1); -- xf_emit(ctx, 3, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 5, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 0x16, 0); -+ xf_emit(ctx, 1, 0); /* 00000007 OPERATION */ -+ xf_emit(ctx, 1, 0); /* ff/3ff */ -+ xf_emit(ctx, 1, 0); /* 00000003 UNK0F90 */ -+ xf_emit(ctx, 2, 1); /* 00000007 BLEND_EQUATION_RGB, ALPHA */ -+ xf_emit(ctx, 1, 1); /* 00000001 UNK133C */ -+ xf_emit(ctx, 1, 2); /* 0000001f BLEND_FUNC_SRC_RGB */ -+ xf_emit(ctx, 1, 1); /* 0000001f BLEND_FUNC_DST_RGB */ -+ xf_emit(ctx, 1, 2); /* 0000001f BLEND_FUNC_SRC_ALPHA */ -+ xf_emit(ctx, 1, 1); /* 0000001f BLEND_FUNC_DST_ALPHA */ -+ xf_emit(ctx, 1, 0); /* 00000001 */ -+ xf_emit(ctx, 1, magic2); /* 001fffff tesla UNK0F78 */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A3C */ -+ xf_emit(ctx, 1, 0x0fac6881); /* 0fffffff RT_CONTROL */ -+ if (IS_NVA3F(dev_priv->chipset)) { -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK12E4 */ -+ xf_emit(ctx, 8, 1); /* 00000007 IBLEND_EQUATION_RGB */ -+ xf_emit(ctx, 8, 1); /* 00000007 IBLEND_EQUATION_ALPHA */ -+ xf_emit(ctx, 8, 1); /* 00000001 IBLEND_UNK00 */ -+ xf_emit(ctx, 8, 2); /* 0000001f IBLEND_FUNC_SRC_RGB */ -+ xf_emit(ctx, 8, 1); /* 0000001f IBLEND_FUNC_DST_RGB */ -+ xf_emit(ctx, 8, 2); /* 0000001f IBLEND_FUNC_SRC_ALPHA */ -+ xf_emit(ctx, 8, 1); /* 0000001f IBLEND_FUNC_DST_ALPHA */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1140 */ -+ xf_emit(ctx, 2, 0); /* 00000001 */ -+ xf_emit(ctx, 1, 1); /* 0000001f tesla UNK169C */ -+ xf_emit(ctx, 1, 0); /* 0000000f */ -+ xf_emit(ctx, 1, 0); /* 00000003 */ -+ xf_emit(ctx, 1, 0); /* ffffffff */ -+ xf_emit(ctx, 2, 0); /* 00000001 */ -+ xf_emit(ctx, 1, 1); /* 0000001f tesla UNK169C */ -+ xf_emit(ctx, 1, 0); /* 00000001 */ -+ xf_emit(ctx, 1, 0); /* 000003ff */ -+ } else if (dev_priv->chipset >= 0xa0) { -+ xf_emit(ctx, 2, 0); /* 00000001 */ -+ xf_emit(ctx, 1, 0); /* 00000007 */ -+ xf_emit(ctx, 1, 0); /* 00000003 */ -+ xf_emit(ctx, 1, 0); /* ffffffff */ -+ xf_emit(ctx, 2, 0); /* 00000001 */ - } else { -- if (dev_priv->chipset >= 0xa0) -- xf_emit(ctx, 0x1b, 0); -- else -- xf_emit(ctx, 0x15, 0); -- } -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 2); -- xf_emit(ctx, 2, 1); -- xf_emit(ctx, 1, 2); -- xf_emit(ctx, 2, 1); -+ xf_emit(ctx, 1, 0); /* 00000007 MULTISAMPLE_SAMPLES_LOG2 */ -+ xf_emit(ctx, 1, 0); /* 00000003 tesla UNK1430 */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A3C */ -+ } -+ xf_emit(ctx, 4, 0); /* ffffffff CLEAR_COLOR */ -+ xf_emit(ctx, 4, 0); /* ffffffff BLEND_COLOR A R G B */ -+ xf_emit(ctx, 1, 0); /* 00000fff eng2d UNK2B0 */ - if (dev_priv->chipset >= 0xa0) -- xf_emit(ctx, 4, 0); -- else -- xf_emit(ctx, 3, 0); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) { -- xf_emit(ctx, 0x10, 1); -- xf_emit(ctx, 8, 2); -- xf_emit(ctx, 0x10, 1); -- xf_emit(ctx, 8, 2); -- xf_emit(ctx, 8, 1); -- xf_emit(ctx, 3, 0); -- } -- xf_emit(ctx, 1, 0x11); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 0x5b, 0); -+ xf_emit(ctx, 2, 0); /* 00000001 */ -+ xf_emit(ctx, 1, 0); /* 000003ff */ -+ xf_emit(ctx, 8, 0); /* 00000001 BLEND_ENABLE */ -+ xf_emit(ctx, 1, 1); /* 00000001 UNK133C */ -+ xf_emit(ctx, 1, 2); /* 0000001f BLEND_FUNC_SRC_RGB */ -+ xf_emit(ctx, 1, 1); /* 0000001f BLEND_FUNC_DST_RGB */ -+ xf_emit(ctx, 1, 1); /* 00000007 BLEND_EQUATION_RGB */ -+ xf_emit(ctx, 1, 2); /* 0000001f BLEND_FUNC_SRC_ALPHA */ -+ xf_emit(ctx, 1, 1); /* 0000001f BLEND_FUNC_DST_ALPHA */ -+ xf_emit(ctx, 1, 1); /* 00000007 BLEND_EQUATION_ALPHA */ -+ xf_emit(ctx, 1, 0); /* 00000001 UNK19C0 */ -+ xf_emit(ctx, 1, 0); /* 00000001 LOGIC_OP_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 0000000f LOGIC_OP */ -+ if (dev_priv->chipset >= 0xa0) -+ xf_emit(ctx, 1, 0); /* 00000001 UNK12E4? NVA3+ only? */ -+ if (IS_NVA3F(dev_priv->chipset)) { -+ xf_emit(ctx, 8, 1); /* 00000001 IBLEND_UNK00 */ -+ xf_emit(ctx, 8, 1); /* 00000007 IBLEND_EQUATION_RGB */ -+ xf_emit(ctx, 8, 2); /* 0000001f IBLEND_FUNC_SRC_RGB */ -+ xf_emit(ctx, 8, 1); /* 0000001f IBLEND_FUNC_DST_RGB */ -+ xf_emit(ctx, 8, 1); /* 00000007 IBLEND_EQUATION_ALPHA */ -+ xf_emit(ctx, 8, 2); /* 0000001f IBLEND_FUNC_SRC_ALPHA */ -+ xf_emit(ctx, 8, 1); /* 0000001f IBLEND_FUNC_DST_ALPHA */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK15C4 */ -+ xf_emit(ctx, 1, 0); /* 00000001 */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1140 */ -+ } -+ xf_emit(ctx, 1, 0x11); /* 3f/7f DST_FORMAT */ -+ xf_emit(ctx, 1, 1); /* 00000001 DST_LINEAR */ -+ xf_emit(ctx, 1, 0); /* 00000007 PATTERN_COLOR_FORMAT */ -+ xf_emit(ctx, 2, 0); /* ffffffff PATTERN_MONO_COLOR */ -+ xf_emit(ctx, 1, 0); /* 00000001 PATTERN_MONO_FORMAT */ -+ xf_emit(ctx, 2, 0); /* ffffffff PATTERN_MONO_BITMAP */ -+ xf_emit(ctx, 1, 0); /* 00000003 PATTERN_SELECT */ -+ xf_emit(ctx, 1, 0); /* 000000ff ROP */ -+ xf_emit(ctx, 1, 0); /* ffffffff BETA1 */ -+ xf_emit(ctx, 1, 0); /* ffffffff BETA4 */ -+ xf_emit(ctx, 1, 0); /* 00000007 OPERATION */ -+ xf_emit(ctx, 0x50, 0); /* 10x ffffff, ffffff, ffffff, ffffff, 3 PATTERN */ - } - - static void --nv50_graph_construct_xfer_tp_x1(struct nouveau_grctx *ctx) -+nv50_graph_construct_xfer_unk84xx(struct nouveau_grctx *ctx) - { - struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; - int magic3; -- if (dev_priv->chipset == 0x50) -+ switch (dev_priv->chipset) { -+ case 0x50: - magic3 = 0x1000; -- else if (dev_priv->chipset == 0x86 || dev_priv->chipset == 0x98 || dev_priv->chipset >= 0xa8) -+ break; -+ case 0x86: -+ case 0x98: -+ case 0xa8: -+ case 0xaa: -+ case 0xac: -+ case 0xaf: - magic3 = 0x1e00; -- else -+ break; -+ default: - magic3 = 0; -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 4); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 0x24, 0); -+ } -+ xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ -+ xf_emit(ctx, 1, 4); /* 7f/ff[NVA0+] VP_REG_ALLOC_RESULT */ -+ xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ -+ xf_emit(ctx, 1, 0); /* 111/113[NVA0+] */ -+ if (IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 0x1f, 0); /* ffffffff */ - else if (dev_priv->chipset >= 0xa0) -- xf_emit(ctx, 0x14, 0); -+ xf_emit(ctx, 0x0f, 0); /* ffffffff */ - else -- xf_emit(ctx, 0x15, 0); -- xf_emit(ctx, 2, 4); -+ xf_emit(ctx, 0x10, 0); /* fffffff VP_RESULT_MAP_1 up */ -+ xf_emit(ctx, 2, 0); /* f/1f[NVA3], fffffff/ffffffff[NVA0+] */ -+ xf_emit(ctx, 1, 4); /* 7f/ff VP_REG_ALLOC_RESULT */ -+ xf_emit(ctx, 1, 4); /* 7f/ff VP_RESULT_MAP_SIZE */ - if (dev_priv->chipset >= 0xa0) -- xf_emit(ctx, 1, 0x03020100); -+ xf_emit(ctx, 1, 0x03020100); /* ffffffff */ - else -- xf_emit(ctx, 1, 0x00608080); -- xf_emit(ctx, 4, 0); -- xf_emit(ctx, 1, 4); -- xf_emit(ctx, 2, 0); -- xf_emit(ctx, 2, 4); -- xf_emit(ctx, 1, 0x80); -+ xf_emit(ctx, 1, 0x00608080); /* fffffff VP_RESULT_MAP_0 */ -+ xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ -+ xf_emit(ctx, 2, 0); /* 111/113, 7f/ff */ -+ xf_emit(ctx, 1, 4); /* 7f/ff VP_RESULT_MAP_SIZE */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ -+ xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ -+ xf_emit(ctx, 1, 4); /* 000000ff GP_REG_ALLOC_RESULT */ -+ xf_emit(ctx, 1, 4); /* 000000ff GP_RESULT_MAP_SIZE */ -+ xf_emit(ctx, 1, 0x80); /* 0000ffff GP_VERTEX_OUTPUT_COUNT */ - if (magic3) -- xf_emit(ctx, 1, magic3); -- xf_emit(ctx, 1, 4); -- xf_emit(ctx, 0x24, 0); -- xf_emit(ctx, 1, 4); -- xf_emit(ctx, 1, 0x80); -- xf_emit(ctx, 1, 4); -- xf_emit(ctx, 1, 0x03020100); -- xf_emit(ctx, 1, 3); -+ xf_emit(ctx, 1, magic3); /* 00007fff tesla UNK141C */ -+ xf_emit(ctx, 1, 4); /* 7f/ff VP_RESULT_MAP_SIZE */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ -+ xf_emit(ctx, 1, 0); /* 111/113 */ -+ xf_emit(ctx, 0x1f, 0); /* ffffffff GP_RESULT_MAP_1 up */ -+ xf_emit(ctx, 1, 0); /* 0000001f */ -+ xf_emit(ctx, 1, 0); /* ffffffff */ -+ xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ -+ xf_emit(ctx, 1, 4); /* 000000ff GP_REG_ALLOC_RESULT */ -+ xf_emit(ctx, 1, 0x80); /* 0000ffff GP_VERTEX_OUTPUT_COUNT */ -+ xf_emit(ctx, 1, 4); /* 000000ff GP_RESULT_MAP_SIZE */ -+ xf_emit(ctx, 1, 0x03020100); /* ffffffff GP_RESULT_MAP_0 */ -+ xf_emit(ctx, 1, 3); /* 00000003 GP_OUTPUT_PRIMITIVE_TYPE */ - if (magic3) -- xf_emit(ctx, 1, magic3); -- xf_emit(ctx, 1, 4); -- xf_emit(ctx, 4, 0); -- xf_emit(ctx, 1, 4); -- xf_emit(ctx, 1, 3); -- xf_emit(ctx, 3, 0); -- xf_emit(ctx, 1, 4); -+ xf_emit(ctx, 1, magic3); /* 7fff tesla UNK141C */ -+ xf_emit(ctx, 1, 4); /* 7f/ff VP_RESULT_MAP_SIZE */ -+ xf_emit(ctx, 1, 0); /* 00000001 PROVOKING_VERTEX_LAST */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ -+ xf_emit(ctx, 1, 0); /* 111/113 */ -+ xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ -+ xf_emit(ctx, 1, 4); /* 000000ff GP_RESULT_MAP_SIZE */ -+ xf_emit(ctx, 1, 3); /* 00000003 GP_OUTPUT_PRIMITIVE_TYPE */ -+ xf_emit(ctx, 1, 0); /* 00000001 PROVOKING_VERTEX_LAST */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ -+ xf_emit(ctx, 1, 0); /* 00000003 tesla UNK13A0 */ -+ xf_emit(ctx, 1, 4); /* 7f/ff VP_REG_ALLOC_RESULT */ -+ xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ -+ xf_emit(ctx, 1, 0); /* 111/113 */ - if (dev_priv->chipset == 0x94 || dev_priv->chipset == 0x96) -- xf_emit(ctx, 0x1024, 0); -+ xf_emit(ctx, 0x1020, 0); /* 4 x (0x400 x 0xffffffff, ff, 0, 0, 0, 4 x ffffffff) */ - else if (dev_priv->chipset < 0xa0) -- xf_emit(ctx, 0xa24, 0); -- else if (dev_priv->chipset == 0xa0 || dev_priv->chipset >= 0xaa) -- xf_emit(ctx, 0x214, 0); -- else -- xf_emit(ctx, 0x414, 0); -- xf_emit(ctx, 1, 4); -- xf_emit(ctx, 1, 3); -- xf_emit(ctx, 2, 0); -+ xf_emit(ctx, 0xa20, 0); /* 4 x (0x280 x 0xffffffff, ff, 0, 0, 0, 4 x ffffffff) */ -+ else if (!IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 0x210, 0); /* ffffffff */ -+ else -+ xf_emit(ctx, 0x410, 0); /* ffffffff */ -+ xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ -+ xf_emit(ctx, 1, 4); /* 000000ff GP_RESULT_MAP_SIZE */ -+ xf_emit(ctx, 1, 3); /* 00000003 GP_OUTPUT_PRIMITIVE_TYPE */ -+ xf_emit(ctx, 1, 0); /* 00000001 PROVOKING_VERTEX_LAST */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ - } - - static void --nv50_graph_construct_xfer_tp_x2(struct nouveau_grctx *ctx) -+nv50_graph_construct_xfer_tprop(struct nouveau_grctx *ctx) - { - struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; - int magic1, magic2; - if (dev_priv->chipset == 0x50) { - magic1 = 0x3ff; - magic2 = 0x00003e60; -- } else if (dev_priv->chipset <= 0xa0 || dev_priv->chipset >= 0xaa) { -+ } else if (!IS_NVA3F(dev_priv->chipset)) { - magic1 = 0x7ff; - magic2 = 0x001ffe67; - } else { - magic1 = 0x7ff; - magic2 = 0x00087e67; - } -- xf_emit(ctx, 3, 0); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 0xc, 0); -- xf_emit(ctx, 1, 0xf); -- xf_emit(ctx, 0xb, 0); -- xf_emit(ctx, 1, 4); -- xf_emit(ctx, 4, 0xffff); -- xf_emit(ctx, 8, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 3, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 5, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 2, 0); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) { -- xf_emit(ctx, 1, 3); -- xf_emit(ctx, 1, 0); -- } else if (dev_priv->chipset >= 0xa0) -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 0xa, 0); -- xf_emit(ctx, 2, 1); -- xf_emit(ctx, 1, 2); -- xf_emit(ctx, 2, 1); -- xf_emit(ctx, 1, 2); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) { -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 0x18, 1); -- xf_emit(ctx, 8, 2); -- xf_emit(ctx, 8, 1); -- xf_emit(ctx, 8, 2); -- xf_emit(ctx, 8, 1); -- xf_emit(ctx, 1, 0); -- } -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 0x11); -- xf_emit(ctx, 7, 0); -- xf_emit(ctx, 1, 0x0fac6881); -- xf_emit(ctx, 2, 0); -- xf_emit(ctx, 1, 4); -- xf_emit(ctx, 3, 0); -- xf_emit(ctx, 1, 0x11); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 3, 0xcf); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 0xa, 0); -- xf_emit(ctx, 2, 1); -- xf_emit(ctx, 1, 2); -- xf_emit(ctx, 2, 1); -- xf_emit(ctx, 1, 2); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 8, 1); -- xf_emit(ctx, 1, 0x11); -- xf_emit(ctx, 7, 0); -- xf_emit(ctx, 1, 0x0fac6881); -- xf_emit(ctx, 1, 0xf); -- xf_emit(ctx, 7, 0); -- xf_emit(ctx, 1, magic2); -- xf_emit(ctx, 2, 0); -- xf_emit(ctx, 1, 0x11); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 2, 1); -- else -- xf_emit(ctx, 1, 1); -+ xf_emit(ctx, 1, 0); /* 00000007 ALPHA_TEST_FUNC */ -+ xf_emit(ctx, 1, 0); /* ffffffff ALPHA_TEST_REF */ -+ xf_emit(ctx, 1, 0); /* 00000001 ALPHA_TEST_ENABLE */ -+ if (IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 1, 1); /* 0000000f UNK16A0 */ -+ xf_emit(ctx, 1, 0); /* 7/f MULTISAMPLE_SAMPLES_LOG2 */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1534 */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_BACK_MASK */ -+ xf_emit(ctx, 3, 0); /* 00000007 STENCIL_BACK_OP_FAIL, ZFAIL, ZPASS */ -+ xf_emit(ctx, 4, 0); /* ffffffff BLEND_COLOR */ -+ xf_emit(ctx, 1, 0); /* 00000001 UNK19C0 */ -+ xf_emit(ctx, 1, 0); /* 00000001 UNK0FDC */ -+ xf_emit(ctx, 1, 0xf); /* 0000000f COLOR_MASK */ -+ xf_emit(ctx, 7, 0); /* 0000000f COLOR_MASK */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_TEST_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_WRITE_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 LOGIC_OP_ENABLE */ -+ xf_emit(ctx, 1, 0); /* ff[NV50]/3ff[NV84+] */ -+ xf_emit(ctx, 1, 4); /* 00000007 FP_CONTROL */ -+ xf_emit(ctx, 4, 0xffff); /* 0000ffff MSAA_MASK */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_MASK */ -+ xf_emit(ctx, 3, 0); /* 00000007 STENCIL_FRONT_OP_FAIL, ZFAIL, ZPASS */ -+ xf_emit(ctx, 1, 0); /* 00000001 STENCIL_FRONT_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 STENCIL_BACK_ENABLE */ -+ xf_emit(ctx, 2, 0); /* 00007fff WINDOW_OFFSET_XY */ -+ xf_emit(ctx, 1, 1); /* 00000001 tesla UNK19CC */ -+ xf_emit(ctx, 1, 0); /* 7 */ -+ xf_emit(ctx, 1, 0); /* 00000001 SAMPLECNT_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 0000000f ZETA_FORMAT */ -+ xf_emit(ctx, 1, 1); /* 00000001 ZETA_ENABLE */ -+ xf_emit(ctx, 1, 0); /* ffffffff COLOR_KEY */ -+ xf_emit(ctx, 1, 0); /* 00000001 COLOR_KEY_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000007 COLOR_KEY_FORMAT */ -+ xf_emit(ctx, 2, 0); /* ffffffff SIFC_BITMAP_COLOR */ -+ xf_emit(ctx, 1, 1); /* 00000001 SIFC_BITMAP_WRITE_BIT0_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000007 ALPHA_TEST_FUNC */ -+ xf_emit(ctx, 1, 0); /* 00000001 ALPHA_TEST_ENABLE */ -+ if (IS_NVA3F(dev_priv->chipset)) { -+ xf_emit(ctx, 1, 3); /* 00000003 tesla UNK16B4 */ -+ xf_emit(ctx, 1, 0); /* 00000003 */ -+ xf_emit(ctx, 1, 0); /* 00000003 tesla UNK1298 */ -+ } else if (dev_priv->chipset >= 0xa0) { -+ xf_emit(ctx, 1, 1); /* 00000001 tesla UNK16B4 */ -+ xf_emit(ctx, 1, 0); /* 00000003 */ -+ } else { -+ xf_emit(ctx, 1, 0); /* 00000003 MULTISAMPLE_CTRL */ -+ } -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1534 */ -+ xf_emit(ctx, 8, 0); /* 00000001 BLEND_ENABLE */ -+ xf_emit(ctx, 1, 1); /* 0000001f BLEND_FUNC_DST_ALPHA */ -+ xf_emit(ctx, 1, 1); /* 00000007 BLEND_EQUATION_ALPHA */ -+ xf_emit(ctx, 1, 2); /* 0000001f BLEND_FUNC_SRC_ALPHA */ -+ xf_emit(ctx, 1, 1); /* 0000001f BLEND_FUNC_DST_RGB */ -+ xf_emit(ctx, 1, 1); /* 00000007 BLEND_EQUATION_RGB */ -+ xf_emit(ctx, 1, 2); /* 0000001f BLEND_FUNC_SRC_RGB */ -+ if (IS_NVA3F(dev_priv->chipset)) { -+ xf_emit(ctx, 1, 0); /* 00000001 UNK12E4 */ -+ xf_emit(ctx, 8, 1); /* 00000007 IBLEND_EQUATION_RGB */ -+ xf_emit(ctx, 8, 1); /* 00000007 IBLEND_EQUATION_ALPHA */ -+ xf_emit(ctx, 8, 1); /* 00000001 IBLEND_UNK00 */ -+ xf_emit(ctx, 8, 2); /* 0000001f IBLEND_SRC_RGB */ -+ xf_emit(ctx, 8, 1); /* 0000001f IBLEND_DST_RGB */ -+ xf_emit(ctx, 8, 2); /* 0000001f IBLEND_SRC_ALPHA */ -+ xf_emit(ctx, 8, 1); /* 0000001f IBLEND_DST_ALPHA */ -+ xf_emit(ctx, 1, 0); /* 00000001 UNK1140 */ -+ } -+ xf_emit(ctx, 1, 1); /* 00000001 UNK133C */ -+ xf_emit(ctx, 1, 0); /* ffff0ff3 */ -+ xf_emit(ctx, 1, 0x11); /* 3f/7f RT_FORMAT */ -+ xf_emit(ctx, 7, 0); /* 3f/7f RT_FORMAT */ -+ xf_emit(ctx, 1, 0x0fac6881); /* 0fffffff RT_CONTROL */ -+ xf_emit(ctx, 1, 0); /* 00000001 LOGIC_OP_ENABLE */ -+ xf_emit(ctx, 1, 0); /* ff/3ff */ -+ xf_emit(ctx, 1, 4); /* 00000007 FP_CONTROL */ -+ xf_emit(ctx, 1, 0); /* 00000003 UNK0F90 */ -+ xf_emit(ctx, 1, 0); /* 00000001 FRAMEBUFFER_SRGB */ -+ xf_emit(ctx, 1, 0); /* 7 */ -+ xf_emit(ctx, 1, 0x11); /* 3f/7f DST_FORMAT */ -+ xf_emit(ctx, 1, 1); /* 00000001 DST_LINEAR */ -+ xf_emit(ctx, 1, 0); /* 00000007 OPERATION */ -+ xf_emit(ctx, 1, 0xcf); /* 000000ff SIFC_FORMAT */ -+ xf_emit(ctx, 1, 0xcf); /* 000000ff DRAW_COLOR_FORMAT */ -+ xf_emit(ctx, 1, 0xcf); /* 000000ff SRC_FORMAT */ -+ if (IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 1, 1); /* 0000001f tesla UNK169C */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A3C */ -+ xf_emit(ctx, 1, 0); /* 7/f[NVA3] MULTISAMPLE_SAMPLES_LOG2 */ -+ xf_emit(ctx, 8, 0); /* 00000001 BLEND_ENABLE */ -+ xf_emit(ctx, 1, 1); /* 0000001f BLEND_FUNC_DST_ALPHA */ -+ xf_emit(ctx, 1, 1); /* 00000007 BLEND_EQUATION_ALPHA */ -+ xf_emit(ctx, 1, 2); /* 0000001f BLEND_FUNC_SRC_ALPHA */ -+ xf_emit(ctx, 1, 1); /* 0000001f BLEND_FUNC_DST_RGB */ -+ xf_emit(ctx, 1, 1); /* 00000007 BLEND_EQUATION_RGB */ -+ xf_emit(ctx, 1, 2); /* 0000001f BLEND_FUNC_SRC_RGB */ -+ xf_emit(ctx, 1, 1); /* 00000001 UNK133C */ -+ xf_emit(ctx, 1, 0); /* ffff0ff3 */ -+ xf_emit(ctx, 8, 1); /* 00000001 UNK19E0 */ -+ xf_emit(ctx, 1, 0x11); /* 3f/7f RT_FORMAT */ -+ xf_emit(ctx, 7, 0); /* 3f/7f RT_FORMAT */ -+ xf_emit(ctx, 1, 0x0fac6881); /* 0fffffff RT_CONTROL */ -+ xf_emit(ctx, 1, 0xf); /* 0000000f COLOR_MASK */ -+ xf_emit(ctx, 7, 0); /* 0000000f COLOR_MASK */ -+ xf_emit(ctx, 1, magic2); /* 001fffff tesla UNK0F78 */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_BOUNDS_EN */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_TEST_ENABLE */ -+ xf_emit(ctx, 1, 0x11); /* 3f/7f DST_FORMAT */ -+ xf_emit(ctx, 1, 1); /* 00000001 DST_LINEAR */ -+ if (IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 1, 1); /* 0000001f tesla UNK169C */ - if(dev_priv->chipset == 0x50) -- xf_emit(ctx, 1, 0); -- else -- xf_emit(ctx, 3, 0); -- xf_emit(ctx, 1, 4); -- xf_emit(ctx, 5, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 4, 0); -- xf_emit(ctx, 1, 0x11); -- xf_emit(ctx, 7, 0); -- xf_emit(ctx, 1, 0x0fac6881); -- xf_emit(ctx, 3, 0); -- xf_emit(ctx, 1, 0x11); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, magic1); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 2, 0); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 0x28, 0); -- xf_emit(ctx, 8, 8); -- xf_emit(ctx, 1, 0x11); -- xf_emit(ctx, 7, 0); -- xf_emit(ctx, 1, 0x0fac6881); -- xf_emit(ctx, 8, 0x400); -- xf_emit(ctx, 8, 0x300); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0xf); -- xf_emit(ctx, 7, 0); -- xf_emit(ctx, 1, 0x20); -- xf_emit(ctx, 1, 0x11); -- xf_emit(ctx, 1, 0x100); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 2, 0); -- xf_emit(ctx, 1, 0x40); -- xf_emit(ctx, 1, 0x100); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 3); -- xf_emit(ctx, 4, 0); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, magic2); -- xf_emit(ctx, 3, 0); -- xf_emit(ctx, 1, 2); -- xf_emit(ctx, 1, 0x0fac6881); -- xf_emit(ctx, 9, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 4, 0); -- xf_emit(ctx, 1, 4); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0x400); -- xf_emit(ctx, 1, 0x300); -- xf_emit(ctx, 1, 0x1001); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 4, 0); -+ xf_emit(ctx, 1, 0); /* ff */ - else -- xf_emit(ctx, 3, 0); -- xf_emit(ctx, 1, 0x11); -- xf_emit(ctx, 7, 0); -- xf_emit(ctx, 1, 0x0fac6881); -- xf_emit(ctx, 1, 0xf); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) { -- xf_emit(ctx, 0x15, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 3, 0); -- } else -- xf_emit(ctx, 0x17, 0); -+ xf_emit(ctx, 3, 0); /* 1, 7, 3ff */ -+ xf_emit(ctx, 1, 4); /* 00000007 FP_CONTROL */ -+ xf_emit(ctx, 1, 0); /* 00000003 UNK0F90 */ -+ xf_emit(ctx, 1, 0); /* 00000001 STENCIL_FRONT_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000007 */ -+ xf_emit(ctx, 1, 0); /* 00000001 SAMPLECNT_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 0000000f ZETA_FORMAT */ -+ xf_emit(ctx, 1, 1); /* 00000001 ZETA_ENABLE */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A3C */ -+ xf_emit(ctx, 1, 0); /* 7/f MULTISAMPLE_SAMPLES_LOG2 */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1534 */ -+ xf_emit(ctx, 1, 0); /* ffff0ff3 */ -+ xf_emit(ctx, 1, 0x11); /* 3f/7f RT_FORMAT */ -+ xf_emit(ctx, 7, 0); /* 3f/7f RT_FORMAT */ -+ xf_emit(ctx, 1, 0x0fac6881); /* 0fffffff RT_CONTROL */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_BOUNDS_EN */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_TEST_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_WRITE_ENABLE */ -+ xf_emit(ctx, 1, 0x11); /* 3f/7f DST_FORMAT */ -+ xf_emit(ctx, 1, 1); /* 00000001 DST_LINEAR */ -+ xf_emit(ctx, 1, 0); /* 000fffff BLIT_DU_DX_FRACT */ -+ xf_emit(ctx, 1, 1); /* 0001ffff BLIT_DU_DX_INT */ -+ xf_emit(ctx, 1, 0); /* 000fffff BLIT_DV_DY_FRACT */ -+ xf_emit(ctx, 1, 1); /* 0001ffff BLIT_DV_DY_INT */ -+ xf_emit(ctx, 1, 0); /* ff/3ff */ -+ xf_emit(ctx, 1, magic1); /* 3ff/7ff tesla UNK0D68 */ -+ xf_emit(ctx, 1, 0); /* 00000001 STENCIL_FRONT_ENABLE */ -+ xf_emit(ctx, 1, 1); /* 00000001 tesla UNK15B4 */ -+ xf_emit(ctx, 1, 0); /* 0000000f ZETA_FORMAT */ -+ xf_emit(ctx, 1, 1); /* 00000001 ZETA_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000007 */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A3C */ -+ if (IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 1, 1); /* 0000001f tesla UNK169C */ -+ xf_emit(ctx, 8, 0); /* 0000ffff DMA_COLOR */ -+ xf_emit(ctx, 1, 0); /* 0000ffff DMA_GLOBAL */ -+ xf_emit(ctx, 1, 0); /* 0000ffff DMA_LOCAL */ -+ xf_emit(ctx, 1, 0); /* 0000ffff DMA_STACK */ -+ xf_emit(ctx, 1, 0); /* ff/3ff */ -+ xf_emit(ctx, 1, 0); /* 0000ffff DMA_DST */ -+ xf_emit(ctx, 1, 0); /* 7 */ -+ xf_emit(ctx, 1, 0); /* 7/f MULTISAMPLE_SAMPLES_LOG2 */ -+ xf_emit(ctx, 1, 0); /* ffff0ff3 */ -+ xf_emit(ctx, 8, 0); /* 000000ff RT_ADDRESS_HIGH */ -+ xf_emit(ctx, 8, 0); /* ffffffff RT_LAYER_STRIDE */ -+ xf_emit(ctx, 8, 0); /* ffffffff RT_ADDRESS_LOW */ -+ xf_emit(ctx, 8, 8); /* 0000007f RT_TILE_MODE */ -+ xf_emit(ctx, 1, 0x11); /* 3f/7f RT_FORMAT */ -+ xf_emit(ctx, 7, 0); /* 3f/7f RT_FORMAT */ -+ xf_emit(ctx, 1, 0x0fac6881); /* 0fffffff RT_CONTROL */ -+ xf_emit(ctx, 8, 0x400); /* 0fffffff RT_HORIZ */ -+ xf_emit(ctx, 8, 0x300); /* 0000ffff RT_VERT */ -+ xf_emit(ctx, 1, 1); /* 00001fff RT_ARRAY_MODE */ -+ xf_emit(ctx, 1, 0xf); /* 0000000f COLOR_MASK */ -+ xf_emit(ctx, 7, 0); /* 0000000f COLOR_MASK */ -+ xf_emit(ctx, 1, 0x20); /* 00000fff DST_TILE_MODE */ -+ xf_emit(ctx, 1, 0x11); /* 3f/7f DST_FORMAT */ -+ xf_emit(ctx, 1, 0x100); /* 0001ffff DST_HEIGHT */ -+ xf_emit(ctx, 1, 0); /* 000007ff DST_LAYER */ -+ xf_emit(ctx, 1, 1); /* 00000001 DST_LINEAR */ -+ xf_emit(ctx, 1, 0); /* ffffffff DST_ADDRESS_LOW */ -+ xf_emit(ctx, 1, 0); /* 000000ff DST_ADDRESS_HIGH */ -+ xf_emit(ctx, 1, 0x40); /* 0007ffff DST_PITCH */ -+ xf_emit(ctx, 1, 0x100); /* 0001ffff DST_WIDTH */ -+ xf_emit(ctx, 1, 0); /* 0000ffff */ -+ xf_emit(ctx, 1, 3); /* 00000003 tesla UNK15AC */ -+ xf_emit(ctx, 1, 0); /* ff/3ff */ -+ xf_emit(ctx, 1, 0); /* 0001ffff GP_BUILTIN_RESULT_EN */ -+ xf_emit(ctx, 1, 0); /* 00000003 UNK0F90 */ -+ xf_emit(ctx, 1, 0); /* 00000007 */ -+ if (IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 1, 1); /* 0000001f tesla UNK169C */ -+ xf_emit(ctx, 1, magic2); /* 001fffff tesla UNK0F78 */ -+ xf_emit(ctx, 1, 0); /* 7/f MULTISAMPLE_SAMPLES_LOG2 */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1534 */ -+ xf_emit(ctx, 1, 0); /* ffff0ff3 */ -+ xf_emit(ctx, 1, 2); /* 00000003 tesla UNK143C */ -+ xf_emit(ctx, 1, 0x0fac6881); /* 0fffffff RT_CONTROL */ -+ xf_emit(ctx, 1, 0); /* 0000ffff DMA_ZETA */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_BOUNDS_EN */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_TEST_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_WRITE_ENABLE */ -+ xf_emit(ctx, 2, 0); /* ffff, ff/3ff */ -+ xf_emit(ctx, 1, 0); /* 0001ffff GP_BUILTIN_RESULT_EN */ -+ xf_emit(ctx, 1, 0); /* 00000001 STENCIL_FRONT_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_MASK */ -+ xf_emit(ctx, 1, 1); /* 00000001 tesla UNK15B4 */ -+ xf_emit(ctx, 1, 0); /* 00000007 */ -+ xf_emit(ctx, 1, 0); /* ffffffff ZETA_LAYER_STRIDE */ -+ xf_emit(ctx, 1, 0); /* 000000ff ZETA_ADDRESS_HIGH */ -+ xf_emit(ctx, 1, 0); /* ffffffff ZETA_ADDRESS_LOW */ -+ xf_emit(ctx, 1, 4); /* 00000007 ZETA_TILE_MODE */ -+ xf_emit(ctx, 1, 0); /* 0000000f ZETA_FORMAT */ -+ xf_emit(ctx, 1, 1); /* 00000001 ZETA_ENABLE */ -+ xf_emit(ctx, 1, 0x400); /* 0fffffff ZETA_HORIZ */ -+ xf_emit(ctx, 1, 0x300); /* 0000ffff ZETA_VERT */ -+ xf_emit(ctx, 1, 0x1001); /* 00001fff ZETA_ARRAY_MODE */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A3C */ -+ xf_emit(ctx, 1, 0); /* 7/f MULTISAMPLE_SAMPLES_LOG2 */ -+ if (IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 1, 0); /* 00000001 */ -+ xf_emit(ctx, 1, 0); /* ffff0ff3 */ -+ xf_emit(ctx, 1, 0x11); /* 3f/7f RT_FORMAT */ -+ xf_emit(ctx, 7, 0); /* 3f/7f RT_FORMAT */ -+ xf_emit(ctx, 1, 0x0fac6881); /* 0fffffff RT_CONTROL */ -+ xf_emit(ctx, 1, 0xf); /* 0000000f COLOR_MASK */ -+ xf_emit(ctx, 7, 0); /* 0000000f COLOR_MASK */ -+ xf_emit(ctx, 1, 0); /* ff/3ff */ -+ xf_emit(ctx, 8, 0); /* 00000001 BLEND_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000003 UNK0F90 */ -+ xf_emit(ctx, 1, 0); /* 00000001 FRAMEBUFFER_SRGB */ -+ xf_emit(ctx, 1, 0); /* 7 */ -+ xf_emit(ctx, 1, 0); /* 00000001 LOGIC_OP_ENABLE */ -+ if (IS_NVA3F(dev_priv->chipset)) { -+ xf_emit(ctx, 1, 0); /* 00000001 UNK1140 */ -+ xf_emit(ctx, 1, 1); /* 0000001f tesla UNK169C */ -+ } -+ xf_emit(ctx, 1, 0); /* 7/f MULTISAMPLE_SAMPLES_LOG2 */ -+ xf_emit(ctx, 1, 0); /* 00000001 UNK1534 */ -+ xf_emit(ctx, 1, 0); /* ffff0ff3 */ - if (dev_priv->chipset >= 0xa0) -- xf_emit(ctx, 1, 0x0fac6881); -- xf_emit(ctx, 1, magic2); -- xf_emit(ctx, 3, 0); -- xf_emit(ctx, 1, 0x11); -- xf_emit(ctx, 2, 0); -- xf_emit(ctx, 1, 4); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 2, 1); -- xf_emit(ctx, 3, 0); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 2, 1); -- else -- xf_emit(ctx, 1, 1); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 2, 0); -- else if (dev_priv->chipset != 0x50) -- xf_emit(ctx, 1, 0); --} -- --static void --nv50_graph_construct_xfer_tp_x3(struct nouveau_grctx *ctx) --{ -- struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; -- xf_emit(ctx, 3, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 1); -- if (dev_priv->chipset == 0x50) -- xf_emit(ctx, 2, 0); -- else -- xf_emit(ctx, 3, 0); -- xf_emit(ctx, 1, 0x2a712488); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 0x4085c000); -- xf_emit(ctx, 1, 0x40); -- xf_emit(ctx, 1, 0x100); -- xf_emit(ctx, 1, 0x10100); -- xf_emit(ctx, 1, 0x02800000); -+ xf_emit(ctx, 1, 0x0fac6881); /* fffffff */ -+ xf_emit(ctx, 1, magic2); /* 001fffff tesla UNK0F78 */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_BOUNDS_EN */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_TEST_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_WRITE_ENABLE */ -+ xf_emit(ctx, 1, 0x11); /* 3f/7f DST_FORMAT */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK0FB0 */ -+ xf_emit(ctx, 1, 0); /* ff/3ff */ -+ xf_emit(ctx, 1, 4); /* 00000007 FP_CONTROL */ -+ xf_emit(ctx, 1, 0); /* 00000001 STENCIL_FRONT_ENABLE */ -+ xf_emit(ctx, 1, 1); /* 00000001 tesla UNK15B4 */ -+ xf_emit(ctx, 1, 1); /* 00000001 tesla UNK19CC */ -+ xf_emit(ctx, 1, 0); /* 00000007 */ -+ xf_emit(ctx, 1, 0); /* 00000001 SAMPLECNT_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 0000000f ZETA_FORMAT */ -+ xf_emit(ctx, 1, 1); /* 00000001 ZETA_ENABLE */ -+ if (IS_NVA3F(dev_priv->chipset)) { -+ xf_emit(ctx, 1, 1); /* 0000001f tesla UNK169C */ -+ xf_emit(ctx, 1, 0); /* 0000000f tesla UNK15C8 */ -+ } -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A3C */ -+ if (dev_priv->chipset >= 0xa0) { -+ xf_emit(ctx, 3, 0); /* 7/f, 1, ffff0ff3 */ -+ xf_emit(ctx, 1, 0xfac6881); /* fffffff */ -+ xf_emit(ctx, 4, 0); /* 1, 1, 1, 3ff */ -+ xf_emit(ctx, 1, 4); /* 7 */ -+ xf_emit(ctx, 1, 0); /* 1 */ -+ xf_emit(ctx, 2, 1); /* 1 */ -+ xf_emit(ctx, 2, 0); /* 7, f */ -+ xf_emit(ctx, 1, 1); /* 1 */ -+ xf_emit(ctx, 1, 0); /* 7/f */ -+ if (IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 0x9, 0); /* 1 */ -+ else -+ xf_emit(ctx, 0x8, 0); /* 1 */ -+ xf_emit(ctx, 1, 0); /* ffff0ff3 */ -+ xf_emit(ctx, 8, 1); /* 1 */ -+ xf_emit(ctx, 1, 0x11); /* 7f */ -+ xf_emit(ctx, 7, 0); /* 7f */ -+ xf_emit(ctx, 1, 0xfac6881); /* fffffff */ -+ xf_emit(ctx, 1, 0xf); /* f */ -+ xf_emit(ctx, 7, 0); /* f */ -+ xf_emit(ctx, 1, 0x11); /* 7f */ -+ xf_emit(ctx, 1, 1); /* 1 */ -+ xf_emit(ctx, 5, 0); /* 1, 7, 3ff, 3, 7 */ -+ if (IS_NVA3F(dev_priv->chipset)) { -+ xf_emit(ctx, 1, 0); /* 00000001 UNK1140 */ -+ xf_emit(ctx, 1, 1); /* 0000001f tesla UNK169C */ -+ } -+ } - } - - static void --nv50_graph_construct_xfer_tp_x4(struct nouveau_grctx *ctx) -+nv50_graph_construct_xfer_tex(struct nouveau_grctx *ctx) - { - struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; -- xf_emit(ctx, 2, 0x04e3bfdf); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 0x00ffff00); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 2, 1); -- else -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 2, 0); -- xf_emit(ctx, 1, 0x00ffff00); -- xf_emit(ctx, 8, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0x30201000); -- xf_emit(ctx, 1, 0x70605040); -- xf_emit(ctx, 1, 0xb8a89888); -- xf_emit(ctx, 1, 0xf8e8d8c8); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 0x1a); -+ xf_emit(ctx, 2, 0); /* 1 LINKED_TSC. yes, 2. */ -+ if (dev_priv->chipset != 0x50) -+ xf_emit(ctx, 1, 0); /* 3 */ -+ xf_emit(ctx, 1, 1); /* 1ffff BLIT_DU_DX_INT */ -+ xf_emit(ctx, 1, 0); /* fffff BLIT_DU_DX_FRACT */ -+ xf_emit(ctx, 1, 1); /* 1ffff BLIT_DV_DY_INT */ -+ xf_emit(ctx, 1, 0); /* fffff BLIT_DV_DY_FRACT */ -+ if (dev_priv->chipset == 0x50) -+ xf_emit(ctx, 1, 0); /* 3 BLIT_CONTROL */ -+ else -+ xf_emit(ctx, 2, 0); /* 3ff, 1 */ -+ xf_emit(ctx, 1, 0x2a712488); /* ffffffff SRC_TIC_0 */ -+ xf_emit(ctx, 1, 0); /* ffffffff SRC_TIC_1 */ -+ xf_emit(ctx, 1, 0x4085c000); /* ffffffff SRC_TIC_2 */ -+ xf_emit(ctx, 1, 0x40); /* ffffffff SRC_TIC_3 */ -+ xf_emit(ctx, 1, 0x100); /* ffffffff SRC_TIC_4 */ -+ xf_emit(ctx, 1, 0x10100); /* ffffffff SRC_TIC_5 */ -+ xf_emit(ctx, 1, 0x02800000); /* ffffffff SRC_TIC_6 */ -+ xf_emit(ctx, 1, 0); /* ffffffff SRC_TIC_7 */ -+ if (dev_priv->chipset == 0x50) { -+ xf_emit(ctx, 1, 0); /* 00000001 turing UNK358 */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A34? */ -+ xf_emit(ctx, 1, 0); /* 00000003 turing UNK37C tesla UNK1690 */ -+ xf_emit(ctx, 1, 0); /* 00000003 BLIT_CONTROL */ -+ xf_emit(ctx, 1, 0); /* 00000001 turing UNK32C tesla UNK0F94 */ -+ } else if (!IS_NVAAF(dev_priv->chipset)) { -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A34? */ -+ xf_emit(ctx, 1, 0); /* 00000003 */ -+ xf_emit(ctx, 1, 0); /* 000003ff */ -+ xf_emit(ctx, 1, 0); /* 00000003 */ -+ xf_emit(ctx, 1, 0); /* 000003ff */ -+ xf_emit(ctx, 1, 0); /* 00000003 tesla UNK1664 / turing UNK03E8 */ -+ xf_emit(ctx, 1, 0); /* 00000003 */ -+ xf_emit(ctx, 1, 0); /* 000003ff */ -+ } else { -+ xf_emit(ctx, 0x6, 0); -+ } -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A34 */ -+ xf_emit(ctx, 1, 0); /* 0000ffff DMA_TEXTURE */ -+ xf_emit(ctx, 1, 0); /* 0000ffff DMA_SRC */ - } - - static void --nv50_graph_construct_xfer_tp_x5(struct nouveau_grctx *ctx) -+nv50_graph_construct_xfer_unk8cxx(struct nouveau_grctx *ctx) - { - struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; -- xf_emit(ctx, 3, 0); -- xf_emit(ctx, 1, 0xfac6881); -- xf_emit(ctx, 4, 0); -- xf_emit(ctx, 1, 4); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 2, 1); -- xf_emit(ctx, 2, 0); -- xf_emit(ctx, 1, 1); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 0xb, 0); -- else -- xf_emit(ctx, 0xa, 0); -- xf_emit(ctx, 8, 1); -- xf_emit(ctx, 1, 0x11); -- xf_emit(ctx, 7, 0); -- xf_emit(ctx, 1, 0xfac6881); -- xf_emit(ctx, 1, 0xf); -- xf_emit(ctx, 7, 0); -- xf_emit(ctx, 1, 0x11); -- xf_emit(ctx, 1, 1); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) { -- xf_emit(ctx, 6, 0); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 6, 0); -- } else { -- xf_emit(ctx, 0xb, 0); -- } -+ xf_emit(ctx, 1, 0); /* 00000001 UNK1534 */ -+ xf_emit(ctx, 1, 0); /* 7/f MULTISAMPLE_SAMPLES_LOG2 */ -+ xf_emit(ctx, 2, 0); /* 7, ffff0ff3 */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_TEST_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_WRITE */ -+ xf_emit(ctx, 1, 0x04e3bfdf); /* ffffffff UNK0D64 */ -+ xf_emit(ctx, 1, 0x04e3bfdf); /* ffffffff UNK0DF4 */ -+ xf_emit(ctx, 1, 1); /* 00000001 UNK15B4 */ -+ xf_emit(ctx, 1, 0); /* 00000001 LINE_STIPPLE_ENABLE */ -+ xf_emit(ctx, 1, 0x00ffff00); /* 00ffffff LINE_STIPPLE_PATTERN */ -+ xf_emit(ctx, 1, 1); /* 00000001 tesla UNK0F98 */ -+ if (IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 1, 1); /* 0000001f tesla UNK169C */ -+ xf_emit(ctx, 1, 0); /* 00000003 tesla UNK1668 */ -+ xf_emit(ctx, 1, 0); /* 00000001 LINE_STIPPLE_ENABLE */ -+ xf_emit(ctx, 1, 0x00ffff00); /* 00ffffff LINE_STIPPLE_PATTERN */ -+ xf_emit(ctx, 1, 0); /* 00000001 POLYGON_SMOOTH_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 UNK1534 */ -+ xf_emit(ctx, 1, 0); /* 7/f MULTISAMPLE_SAMPLES_LOG2 */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1658 */ -+ xf_emit(ctx, 1, 0); /* 00000001 LINE_SMOOTH_ENABLE */ -+ xf_emit(ctx, 1, 0); /* ffff0ff3 */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_TEST_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 DEPTH_WRITE */ -+ xf_emit(ctx, 1, 1); /* 00000001 UNK15B4 */ -+ xf_emit(ctx, 1, 0); /* 00000001 POINT_SPRITE_ENABLE */ -+ xf_emit(ctx, 1, 1); /* 00000001 tesla UNK165C */ -+ xf_emit(ctx, 1, 0x30201000); /* ffffffff tesla UNK1670 */ -+ xf_emit(ctx, 1, 0x70605040); /* ffffffff tesla UNK1670 */ -+ xf_emit(ctx, 1, 0xb8a89888); /* ffffffff tesla UNK1670 */ -+ xf_emit(ctx, 1, 0xf8e8d8c8); /* ffffffff tesla UNK1670 */ -+ xf_emit(ctx, 1, 0); /* 00000001 VERTEX_TWO_SIDE_ENABLE */ -+ xf_emit(ctx, 1, 0x1a); /* 0000001f POLYGON_MODE */ - } - - static void -@@ -2193,108 +3102,136 @@ - { - struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; - if (dev_priv->chipset < 0xa0) { -- nv50_graph_construct_xfer_tp_x1(ctx); -- nv50_graph_construct_xfer_tp_x2(ctx); -- nv50_graph_construct_xfer_tp_x3(ctx); -- if (dev_priv->chipset == 0x50) -- xf_emit(ctx, 0xf, 0); -- else -- xf_emit(ctx, 0x12, 0); -- nv50_graph_construct_xfer_tp_x4(ctx); -+ nv50_graph_construct_xfer_unk84xx(ctx); -+ nv50_graph_construct_xfer_tprop(ctx); -+ nv50_graph_construct_xfer_tex(ctx); -+ nv50_graph_construct_xfer_unk8cxx(ctx); - } else { -- nv50_graph_construct_xfer_tp_x3(ctx); -- if (dev_priv->chipset < 0xaa) -- xf_emit(ctx, 0xc, 0); -- else -- xf_emit(ctx, 0xa, 0); -- nv50_graph_construct_xfer_tp_x2(ctx); -- nv50_graph_construct_xfer_tp_x5(ctx); -- nv50_graph_construct_xfer_tp_x4(ctx); -- nv50_graph_construct_xfer_tp_x1(ctx); -+ nv50_graph_construct_xfer_tex(ctx); -+ nv50_graph_construct_xfer_tprop(ctx); -+ nv50_graph_construct_xfer_unk8cxx(ctx); -+ nv50_graph_construct_xfer_unk84xx(ctx); - } - } - - static void --nv50_graph_construct_xfer_tp2(struct nouveau_grctx *ctx) -+nv50_graph_construct_xfer_mpc(struct nouveau_grctx *ctx) - { - struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; -- int i, mpcnt; -- if (dev_priv->chipset == 0x98 || dev_priv->chipset == 0xaa) -- mpcnt = 1; -- else if (dev_priv->chipset < 0xa0 || dev_priv->chipset >= 0xa8) -- mpcnt = 2; -- else -- mpcnt = 3; -+ int i, mpcnt = 2; -+ switch (dev_priv->chipset) { -+ case 0x98: -+ case 0xaa: -+ mpcnt = 1; -+ break; -+ case 0x50: -+ case 0x84: -+ case 0x86: -+ case 0x92: -+ case 0x94: -+ case 0x96: -+ case 0xa8: -+ case 0xac: -+ mpcnt = 2; -+ break; -+ case 0xa0: -+ case 0xa3: -+ case 0xa5: -+ case 0xaf: -+ mpcnt = 3; -+ break; -+ } - for (i = 0; i < mpcnt; i++) { -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 0x80); -- xf_emit(ctx, 1, 0x80007004); -- xf_emit(ctx, 1, 0x04000400); -+ xf_emit(ctx, 1, 0); /* ff */ -+ xf_emit(ctx, 1, 0x80); /* ffffffff tesla UNK1404 */ -+ xf_emit(ctx, 1, 0x80007004); /* ffffffff tesla UNK12B0 */ -+ xf_emit(ctx, 1, 0x04000400); /* ffffffff */ - if (dev_priv->chipset >= 0xa0) -- xf_emit(ctx, 1, 0xc0); -- xf_emit(ctx, 1, 0x1000); -- xf_emit(ctx, 2, 0); -- if (dev_priv->chipset == 0x86 || dev_priv->chipset == 0x98 || dev_priv->chipset >= 0xa8) { -- xf_emit(ctx, 1, 0xe00); -- xf_emit(ctx, 1, 0x1e00); -+ xf_emit(ctx, 1, 0xc0); /* 00007fff tesla UNK152C */ -+ xf_emit(ctx, 1, 0x1000); /* 0000ffff tesla UNK0D60 */ -+ xf_emit(ctx, 1, 0); /* ff/3ff */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ -+ if (dev_priv->chipset == 0x86 || dev_priv->chipset == 0x98 || dev_priv->chipset == 0xa8 || IS_NVAAF(dev_priv->chipset)) { -+ xf_emit(ctx, 1, 0xe00); /* 7fff */ -+ xf_emit(ctx, 1, 0x1e00); /* 7fff */ - } -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 2, 0); -+ xf_emit(ctx, 1, 1); /* 000000ff VP_REG_ALLOC_TEMP */ -+ xf_emit(ctx, 1, 0); /* 00000001 LINKED_TSC */ -+ xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ - if (dev_priv->chipset == 0x50) -- xf_emit(ctx, 2, 0x1000); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 4); -- xf_emit(ctx, 1, 2); -- if (dev_priv->chipset >= 0xaa) -- xf_emit(ctx, 0xb, 0); -+ xf_emit(ctx, 2, 0x1000); /* 7fff tesla UNK141C */ -+ xf_emit(ctx, 1, 1); /* 000000ff GP_REG_ALLOC_TEMP */ -+ xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ -+ xf_emit(ctx, 1, 4); /* 000000ff FP_REG_ALLOC_TEMP */ -+ xf_emit(ctx, 1, 2); /* 00000003 REG_MODE */ -+ if (IS_NVAAF(dev_priv->chipset)) -+ xf_emit(ctx, 0xb, 0); /* RO */ - else if (dev_priv->chipset >= 0xa0) -- xf_emit(ctx, 0xc, 0); -+ xf_emit(ctx, 0xc, 0); /* RO */ - else -- xf_emit(ctx, 0xa, 0); -+ xf_emit(ctx, 0xa, 0); /* RO */ - } -- xf_emit(ctx, 1, 0x08100c12); -- xf_emit(ctx, 1, 0); -+ xf_emit(ctx, 1, 0x08100c12); /* 1fffffff FP_INTERPOLANT_CTRL */ -+ xf_emit(ctx, 1, 0); /* ff/3ff */ - if (dev_priv->chipset >= 0xa0) { -- xf_emit(ctx, 1, 0x1fe21); -- } -- xf_emit(ctx, 5, 0); -- xf_emit(ctx, 4, 0xffff); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 2, 0x10001); -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 0x1fe21); -- xf_emit(ctx, 1, 0); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 1, 1); -- xf_emit(ctx, 4, 0); -- xf_emit(ctx, 1, 0x08100c12); -- xf_emit(ctx, 1, 4); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 2); -- xf_emit(ctx, 1, 0x11); -- xf_emit(ctx, 8, 0); -- xf_emit(ctx, 1, 0xfac6881); -- xf_emit(ctx, 1, 0); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) -- xf_emit(ctx, 1, 3); -- xf_emit(ctx, 3, 0); -- xf_emit(ctx, 1, 4); -- xf_emit(ctx, 9, 0); -- xf_emit(ctx, 1, 2); -- xf_emit(ctx, 2, 1); -- xf_emit(ctx, 1, 2); -- xf_emit(ctx, 3, 1); -- xf_emit(ctx, 1, 0); -- if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) { -- xf_emit(ctx, 8, 2); -- xf_emit(ctx, 0x10, 1); -- xf_emit(ctx, 8, 2); -- xf_emit(ctx, 0x18, 1); -- xf_emit(ctx, 3, 0); -+ xf_emit(ctx, 1, 0x1fe21); /* 0003ffff tesla UNK0FAC */ - } -- xf_emit(ctx, 1, 4); -+ xf_emit(ctx, 3, 0); /* 7fff, 0, 0 */ -+ xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1534 */ -+ xf_emit(ctx, 1, 0); /* 7/f MULTISAMPLE_SAMPLES_LOG2 */ -+ xf_emit(ctx, 4, 0xffff); /* 0000ffff MSAA_MASK */ -+ xf_emit(ctx, 1, 1); /* 00000001 LANES32 */ -+ xf_emit(ctx, 1, 0x10001); /* 00ffffff BLOCK_ALLOC */ -+ xf_emit(ctx, 1, 0x10001); /* ffffffff BLOCKDIM_XY */ -+ xf_emit(ctx, 1, 1); /* 0000ffff BLOCKDIM_Z */ -+ xf_emit(ctx, 1, 0); /* ffffffff SHARED_SIZE */ -+ xf_emit(ctx, 1, 0x1fe21); /* 1ffff/3ffff[NVA0+] tesla UNk0FAC */ -+ xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A34 */ -+ if (IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 1, 1); /* 0000001f tesla UNK169C */ -+ xf_emit(ctx, 1, 0); /* ff/3ff */ -+ xf_emit(ctx, 1, 0); /* 1 LINKED_TSC */ -+ xf_emit(ctx, 1, 0); /* ff FP_ADDRESS_HIGH */ -+ xf_emit(ctx, 1, 0); /* ffffffff FP_ADDRESS_LOW */ -+ xf_emit(ctx, 1, 0x08100c12); /* 1fffffff FP_INTERPOLANT_CTRL */ -+ xf_emit(ctx, 1, 4); /* 00000007 FP_CONTROL */ -+ xf_emit(ctx, 1, 0); /* 000000ff FRAG_COLOR_CLAMP_EN */ -+ xf_emit(ctx, 1, 2); /* 00000003 REG_MODE */ -+ xf_emit(ctx, 1, 0x11); /* 0000007f RT_FORMAT */ -+ xf_emit(ctx, 7, 0); /* 0000007f RT_FORMAT */ -+ xf_emit(ctx, 1, 0); /* 00000007 */ -+ xf_emit(ctx, 1, 0xfac6881); /* 0fffffff RT_CONTROL */ -+ xf_emit(ctx, 1, 0); /* 00000003 MULTISAMPLE_CTRL */ -+ if (IS_NVA3F(dev_priv->chipset)) -+ xf_emit(ctx, 1, 3); /* 00000003 tesla UNK16B4 */ -+ xf_emit(ctx, 1, 0); /* 00000001 ALPHA_TEST_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000007 ALPHA_TEST_FUNC */ -+ xf_emit(ctx, 1, 0); /* 00000001 FRAMEBUFFER_SRGB */ -+ xf_emit(ctx, 1, 4); /* ffffffff tesla UNK1400 */ -+ xf_emit(ctx, 8, 0); /* 00000001 BLEND_ENABLE */ -+ xf_emit(ctx, 1, 0); /* 00000001 LOGIC_OP_ENABLE */ -+ xf_emit(ctx, 1, 2); /* 0000001f BLEND_FUNC_SRC_RGB */ -+ xf_emit(ctx, 1, 1); /* 0000001f BLEND_FUNC_DST_RGB */ -+ xf_emit(ctx, 1, 1); /* 00000007 BLEND_EQUATION_RGB */ -+ xf_emit(ctx, 1, 2); /* 0000001f BLEND_FUNC_SRC_ALPHA */ -+ xf_emit(ctx, 1, 1); /* 0000001f BLEND_FUNC_DST_ALPHA */ -+ xf_emit(ctx, 1, 1); /* 00000007 BLEND_EQUATION_ALPHA */ -+ xf_emit(ctx, 1, 1); /* 00000001 UNK133C */ -+ if (IS_NVA3F(dev_priv->chipset)) { -+ xf_emit(ctx, 1, 0); /* 00000001 UNK12E4 */ -+ xf_emit(ctx, 8, 2); /* 0000001f IBLEND_FUNC_SRC_RGB */ -+ xf_emit(ctx, 8, 1); /* 0000001f IBLEND_FUNC_DST_RGB */ -+ xf_emit(ctx, 8, 1); /* 00000007 IBLEND_EQUATION_RGB */ -+ xf_emit(ctx, 8, 2); /* 0000001f IBLEND_FUNC_SRC_ALPHA */ -+ xf_emit(ctx, 8, 1); /* 0000001f IBLEND_FUNC_DST_ALPHA */ -+ xf_emit(ctx, 8, 1); /* 00000007 IBLEND_EQUATION_ALPHA */ -+ xf_emit(ctx, 8, 1); /* 00000001 IBLEND_UNK00 */ -+ xf_emit(ctx, 1, 0); /* 00000003 tesla UNK1928 */ -+ xf_emit(ctx, 1, 0); /* 00000001 UNK1140 */ -+ } -+ xf_emit(ctx, 1, 0); /* 00000003 tesla UNK0F90 */ -+ xf_emit(ctx, 1, 4); /* 000000ff FP_RESULT_COUNT */ -+ /* XXX: demagic this part some day */ - if (dev_priv->chipset == 0x50) - xf_emit(ctx, 0x3a0, 0); - else if (dev_priv->chipset < 0x94) -@@ -2303,9 +3240,9 @@ - xf_emit(ctx, 0x39f, 0); - else - xf_emit(ctx, 0x3a3, 0); -- xf_emit(ctx, 1, 0x11); -- xf_emit(ctx, 1, 0); -- xf_emit(ctx, 1, 1); -+ xf_emit(ctx, 1, 0x11); /* 3f/7f DST_FORMAT */ -+ xf_emit(ctx, 1, 0); /* 7 OPERATION */ -+ xf_emit(ctx, 1, 1); /* 1 DST_LINEAR */ - xf_emit(ctx, 0x2d, 0); - } - -@@ -2323,52 +3260,56 @@ - if (dev_priv->chipset < 0xa0) { - for (i = 0; i < 8; i++) { - ctx->ctxvals_pos = offset + i; -+ /* that little bugger belongs to csched. No idea -+ * what it's doing here. */ - if (i == 0) -- xf_emit(ctx, 1, 0x08100c12); -+ xf_emit(ctx, 1, 0x08100c12); /* FP_INTERPOLANT_CTRL */ - if (units & (1 << i)) -- nv50_graph_construct_xfer_tp2(ctx); -+ nv50_graph_construct_xfer_mpc(ctx); - if ((ctx->ctxvals_pos-offset)/8 > size) - size = (ctx->ctxvals_pos-offset)/8; - } - } else { - /* Strand 0: TPs 0, 1 */ - ctx->ctxvals_pos = offset; -- xf_emit(ctx, 1, 0x08100c12); -+ /* that little bugger belongs to csched. No idea -+ * what it's doing here. */ -+ xf_emit(ctx, 1, 0x08100c12); /* FP_INTERPOLANT_CTRL */ - if (units & (1 << 0)) -- nv50_graph_construct_xfer_tp2(ctx); -+ nv50_graph_construct_xfer_mpc(ctx); - if (units & (1 << 1)) -- nv50_graph_construct_xfer_tp2(ctx); -+ nv50_graph_construct_xfer_mpc(ctx); - if ((ctx->ctxvals_pos-offset)/8 > size) - size = (ctx->ctxvals_pos-offset)/8; - -- /* Strand 0: TPs 2, 3 */ -+ /* Strand 1: TPs 2, 3 */ - ctx->ctxvals_pos = offset + 1; - if (units & (1 << 2)) -- nv50_graph_construct_xfer_tp2(ctx); -+ nv50_graph_construct_xfer_mpc(ctx); - if (units & (1 << 3)) -- nv50_graph_construct_xfer_tp2(ctx); -+ nv50_graph_construct_xfer_mpc(ctx); - if ((ctx->ctxvals_pos-offset)/8 > size) - size = (ctx->ctxvals_pos-offset)/8; - -- /* Strand 0: TPs 4, 5, 6 */ -+ /* Strand 2: TPs 4, 5, 6 */ - ctx->ctxvals_pos = offset + 2; - if (units & (1 << 4)) -- nv50_graph_construct_xfer_tp2(ctx); -+ nv50_graph_construct_xfer_mpc(ctx); - if (units & (1 << 5)) -- nv50_graph_construct_xfer_tp2(ctx); -+ nv50_graph_construct_xfer_mpc(ctx); - if (units & (1 << 6)) -- nv50_graph_construct_xfer_tp2(ctx); -+ nv50_graph_construct_xfer_mpc(ctx); - if ((ctx->ctxvals_pos-offset)/8 > size) - size = (ctx->ctxvals_pos-offset)/8; - -- /* Strand 0: TPs 7, 8, 9 */ -+ /* Strand 3: TPs 7, 8, 9 */ - ctx->ctxvals_pos = offset + 3; - if (units & (1 << 7)) -- nv50_graph_construct_xfer_tp2(ctx); -+ nv50_graph_construct_xfer_mpc(ctx); - if (units & (1 << 8)) -- nv50_graph_construct_xfer_tp2(ctx); -+ nv50_graph_construct_xfer_mpc(ctx); - if (units & (1 << 9)) -- nv50_graph_construct_xfer_tp2(ctx); -+ nv50_graph_construct_xfer_mpc(ctx); - if ((ctx->ctxvals_pos-offset)/8 > size) - size = (ctx->ctxvals_pos-offset)/8; - } -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_instmem.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_instmem.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_instmem.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_instmem.c 2010-11-05 00:40:00.000000000 +0100 -@@ -32,39 +32,87 @@ - struct nv50_instmem_priv { - uint32_t save1700[5]; /* 0x1700->0x1710 */ - -- struct nouveau_gpuobj_ref *pramin_pt; -- struct nouveau_gpuobj_ref *pramin_bar; -- struct nouveau_gpuobj_ref *fb_bar; -+ struct nouveau_gpuobj *pramin_pt; -+ struct nouveau_gpuobj *pramin_bar; -+ struct nouveau_gpuobj *fb_bar; - }; - --#define NV50_INSTMEM_PAGE_SHIFT 12 --#define NV50_INSTMEM_PAGE_SIZE (1 << NV50_INSTMEM_PAGE_SHIFT) --#define NV50_INSTMEM_PT_SIZE(a) (((a) >> 12) << 3) -- --/*NOTE: - Assumes 0x1700 already covers the correct MiB of PRAMIN -- */ --#define BAR0_WI32(g, o, v) do { \ -- uint32_t offset; \ -- if ((g)->im_backing) { \ -- offset = (g)->im_backing_start; \ -- } else { \ -- offset = chan->ramin->gpuobj->im_backing_start; \ -- offset += (g)->im_pramin->start; \ -- } \ -- offset += (o); \ -- nv_wr32(dev, NV_RAMIN + (offset & 0xfffff), (v)); \ --} while (0) -+static void -+nv50_channel_del(struct nouveau_channel **pchan) -+{ -+ struct nouveau_channel *chan; -+ -+ chan = *pchan; -+ *pchan = NULL; -+ if (!chan) -+ return; -+ -+ nouveau_gpuobj_ref(NULL, &chan->ramfc); -+ nouveau_gpuobj_ref(NULL, &chan->vm_pd); -+ if (chan->ramin_heap.free_stack.next) -+ drm_mm_takedown(&chan->ramin_heap); -+ nouveau_gpuobj_ref(NULL, &chan->ramin); -+ kfree(chan); -+} -+ -+static int -+nv50_channel_new(struct drm_device *dev, u32 size, -+ struct nouveau_channel **pchan) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ u32 pgd = (dev_priv->chipset == 0x50) ? 0x1400 : 0x0200; -+ u32 fc = (dev_priv->chipset == 0x50) ? 0x0000 : 0x4200; -+ struct nouveau_channel *chan; -+ int ret; -+ -+ chan = kzalloc(sizeof(*chan), GFP_KERNEL); -+ if (!chan) -+ return -ENOMEM; -+ chan->dev = dev; -+ -+ ret = nouveau_gpuobj_new(dev, NULL, size, 0x1000, 0, &chan->ramin); -+ if (ret) { -+ nv50_channel_del(&chan); -+ return ret; -+ } -+ -+ ret = drm_mm_init(&chan->ramin_heap, 0x6000, chan->ramin->size); -+ if (ret) { -+ nv50_channel_del(&chan); -+ return ret; -+ } -+ -+ ret = nouveau_gpuobj_new_fake(dev, chan->ramin->pinst == ~0 ? ~0 : -+ chan->ramin->pinst + pgd, -+ chan->ramin->vinst + pgd, -+ 0x4000, NVOBJ_FLAG_ZERO_ALLOC, -+ &chan->vm_pd); -+ if (ret) { -+ nv50_channel_del(&chan); -+ return ret; -+ } -+ -+ ret = nouveau_gpuobj_new_fake(dev, chan->ramin->pinst == ~0 ? ~0 : -+ chan->ramin->pinst + fc, -+ chan->ramin->vinst + fc, 0x100, -+ NVOBJ_FLAG_ZERO_ALLOC, &chan->ramfc); -+ if (ret) { -+ nv50_channel_del(&chan); -+ return ret; -+ } -+ -+ *pchan = chan; -+ return 0; -+} - - int - nv50_instmem_init(struct drm_device *dev) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; -- struct nouveau_channel *chan; -- uint32_t c_offset, c_size, c_ramfc, c_vmpd, c_base, pt_size; -- uint32_t save_nv001700; -- uint64_t v; - struct nv50_instmem_priv *priv; -+ struct nouveau_channel *chan; - int ret, i; -+ u32 tmp; - - priv = kzalloc(sizeof(*priv), GFP_KERNEL); - if (!priv) -@@ -75,212 +123,115 @@ - for (i = 0x1700; i <= 0x1710; i += 4) - priv->save1700[(i-0x1700)/4] = nv_rd32(dev, i); - -- /* Reserve the last MiB of VRAM, we should probably try to avoid -- * setting up the below tables over the top of the VBIOS image at -- * some point. -- */ -- dev_priv->ramin_rsvd_vram = 1 << 20; -- c_offset = dev_priv->vram_size - dev_priv->ramin_rsvd_vram; -- c_size = 128 << 10; -- c_vmpd = ((dev_priv->chipset & 0xf0) == 0x50) ? 0x1400 : 0x200; -- c_ramfc = ((dev_priv->chipset & 0xf0) == 0x50) ? 0x0 : 0x20; -- c_base = c_vmpd + 0x4000; -- pt_size = NV50_INSTMEM_PT_SIZE(dev_priv->ramin_size); -- -- NV_DEBUG(dev, " Rsvd VRAM base: 0x%08x\n", c_offset); -- NV_DEBUG(dev, " VBIOS image: 0x%08x\n", -- (nv_rd32(dev, 0x619f04) & ~0xff) << 8); -- NV_DEBUG(dev, " Aperture size: %d MiB\n", dev_priv->ramin_size >> 20); -- NV_DEBUG(dev, " PT size: %d KiB\n", pt_size >> 10); -- -- /* Determine VM layout, we need to do this first to make sure -- * we allocate enough memory for all the page tables. -- */ -- dev_priv->vm_gart_base = roundup(NV50_VM_BLOCK, NV50_VM_BLOCK); -- dev_priv->vm_gart_size = NV50_VM_BLOCK; -- -- dev_priv->vm_vram_base = dev_priv->vm_gart_base + dev_priv->vm_gart_size; -- dev_priv->vm_vram_size = dev_priv->vram_size; -- if (dev_priv->vm_vram_size > NV50_VM_MAX_VRAM) -- dev_priv->vm_vram_size = NV50_VM_MAX_VRAM; -- dev_priv->vm_vram_size = roundup(dev_priv->vm_vram_size, NV50_VM_BLOCK); -- dev_priv->vm_vram_pt_nr = dev_priv->vm_vram_size / NV50_VM_BLOCK; -- -- dev_priv->vm_end = dev_priv->vm_vram_base + dev_priv->vm_vram_size; -- -- NV_DEBUG(dev, "NV50VM: GART 0x%016llx-0x%016llx\n", -- dev_priv->vm_gart_base, -- dev_priv->vm_gart_base + dev_priv->vm_gart_size - 1); -- NV_DEBUG(dev, "NV50VM: VRAM 0x%016llx-0x%016llx\n", -- dev_priv->vm_vram_base, -- dev_priv->vm_vram_base + dev_priv->vm_vram_size - 1); -- -- c_size += dev_priv->vm_vram_pt_nr * (NV50_VM_BLOCK / 65536 * 8); -- -- /* Map BAR0 PRAMIN aperture over the memory we want to use */ -- save_nv001700 = nv_rd32(dev, NV50_PUNK_BAR0_PRAMIN); -- nv_wr32(dev, NV50_PUNK_BAR0_PRAMIN, (c_offset >> 16)); -- -- /* Create a fake channel, and use it as our "dummy" channels 0/127. -- * The main reason for creating a channel is so we can use the gpuobj -- * code. However, it's probably worth noting that NVIDIA also setup -- * their channels 0/127 with the same values they configure here. -- * So, there may be some other reason for doing this. -- * -- * Have to create the entire channel manually, as the real channel -- * creation code assumes we have PRAMIN access, and we don't until -- * we're done here. -- */ -- chan = kzalloc(sizeof(*chan), GFP_KERNEL); -- if (!chan) -+ /* Global PRAMIN heap */ -+ ret = drm_mm_init(&dev_priv->ramin_heap, 0, dev_priv->ramin_size); -+ if (ret) { -+ NV_ERROR(dev, "Failed to init RAMIN heap\n"); - return -ENOMEM; -- chan->id = 0; -- chan->dev = dev; -- chan->file_priv = (struct drm_file *)-2; -- dev_priv->fifos[0] = dev_priv->fifos[127] = chan; -- -- INIT_LIST_HEAD(&chan->ramht_refs); -+ } - -- /* Channel's PRAMIN object + heap */ -- ret = nouveau_gpuobj_new_fake(dev, 0, c_offset, c_size, 0, -- NULL, &chan->ramin); -+ /* we need a channel to plug into the hw to control the BARs */ -+ ret = nv50_channel_new(dev, 128*1024, &dev_priv->channels.ptr[0]); - if (ret) - return ret; -+ chan = dev_priv->channels.ptr[127] = dev_priv->channels.ptr[0]; - -- if (drm_mm_init(&chan->ramin_heap, c_base, c_size - c_base)) -- return -ENOMEM; -- -- /* RAMFC + zero channel's PRAMIN up to start of VM pagedir */ -- ret = nouveau_gpuobj_new_fake(dev, c_ramfc, c_offset + c_ramfc, -- 0x4000, 0, NULL, &chan->ramfc); -+ /* allocate page table for PRAMIN BAR */ -+ ret = nouveau_gpuobj_new(dev, chan, (dev_priv->ramin_size >> 12) * 8, -+ 0x1000, NVOBJ_FLAG_ZERO_ALLOC, -+ &priv->pramin_pt); - if (ret) - return ret; - -- for (i = 0; i < c_vmpd; i += 4) -- BAR0_WI32(chan->ramin->gpuobj, i, 0); -+ nv_wo32(chan->vm_pd, 0x0000, priv->pramin_pt->vinst | 0x63); -+ nv_wo32(chan->vm_pd, 0x0004, 0); - -- /* VM page directory */ -- ret = nouveau_gpuobj_new_fake(dev, c_vmpd, c_offset + c_vmpd, -- 0x4000, 0, &chan->vm_pd, NULL); -+ /* DMA object for PRAMIN BAR */ -+ ret = nouveau_gpuobj_new(dev, chan, 6*4, 16, 0, &priv->pramin_bar); - if (ret) - return ret; -- for (i = 0; i < 0x4000; i += 8) { -- BAR0_WI32(chan->vm_pd, i + 0x00, 0x00000000); -- BAR0_WI32(chan->vm_pd, i + 0x04, 0x00000000); -- } -+ nv_wo32(priv->pramin_bar, 0x00, 0x7fc00000); -+ nv_wo32(priv->pramin_bar, 0x04, dev_priv->ramin_size - 1); -+ nv_wo32(priv->pramin_bar, 0x08, 0x00000000); -+ nv_wo32(priv->pramin_bar, 0x0c, 0x00000000); -+ nv_wo32(priv->pramin_bar, 0x10, 0x00000000); -+ nv_wo32(priv->pramin_bar, 0x14, 0x00000000); - -- /* PRAMIN page table, cheat and map into VM at 0x0000000000. -- * We map the entire fake channel into the start of the PRAMIN BAR -- */ -- ret = nouveau_gpuobj_new_ref(dev, chan, NULL, 0, pt_size, 0x1000, -- 0, &priv->pramin_pt); -+ /* map channel into PRAMIN, gpuobj didn't do it for us */ -+ ret = nv50_instmem_bind(dev, chan->ramin); - if (ret) - return ret; - -- v = c_offset | 1; -- if (dev_priv->vram_sys_base) { -- v += dev_priv->vram_sys_base; -- v |= 0x30; -+ /* poke regs... */ -+ nv_wr32(dev, 0x001704, 0x00000000 | (chan->ramin->vinst >> 12)); -+ nv_wr32(dev, 0x001704, 0x40000000 | (chan->ramin->vinst >> 12)); -+ nv_wr32(dev, 0x00170c, 0x80000000 | (priv->pramin_bar->cinst >> 4)); -+ -+ tmp = nv_ri32(dev, 0); -+ nv_wi32(dev, 0, ~tmp); -+ if (nv_ri32(dev, 0) != ~tmp) { -+ NV_ERROR(dev, "PRAMIN readback failed\n"); -+ return -EIO; - } -+ nv_wi32(dev, 0, tmp); - -- i = 0; -- while (v < dev_priv->vram_sys_base + c_offset + c_size) { -- BAR0_WI32(priv->pramin_pt->gpuobj, i + 0, lower_32_bits(v)); -- BAR0_WI32(priv->pramin_pt->gpuobj, i + 4, upper_32_bits(v)); -- v += 0x1000; -- i += 8; -- } -+ dev_priv->ramin_available = true; - -- while (i < pt_size) { -- BAR0_WI32(priv->pramin_pt->gpuobj, i + 0, 0x00000000); -- BAR0_WI32(priv->pramin_pt->gpuobj, i + 4, 0x00000000); -- i += 8; -- } -+ /* Determine VM layout */ -+ dev_priv->vm_gart_base = roundup(NV50_VM_BLOCK, NV50_VM_BLOCK); -+ dev_priv->vm_gart_size = NV50_VM_BLOCK; -+ -+ dev_priv->vm_vram_base = dev_priv->vm_gart_base + dev_priv->vm_gart_size; -+ dev_priv->vm_vram_size = dev_priv->vram_size; -+ if (dev_priv->vm_vram_size > NV50_VM_MAX_VRAM) -+ dev_priv->vm_vram_size = NV50_VM_MAX_VRAM; -+ dev_priv->vm_vram_size = roundup(dev_priv->vm_vram_size, NV50_VM_BLOCK); -+ dev_priv->vm_vram_pt_nr = dev_priv->vm_vram_size / NV50_VM_BLOCK; - -- BAR0_WI32(chan->vm_pd, 0x00, priv->pramin_pt->instance | 0x63); -- BAR0_WI32(chan->vm_pd, 0x04, 0x00000000); -+ dev_priv->vm_end = dev_priv->vm_vram_base + dev_priv->vm_vram_size; -+ -+ NV_DEBUG(dev, "NV50VM: GART 0x%016llx-0x%016llx\n", -+ dev_priv->vm_gart_base, -+ dev_priv->vm_gart_base + dev_priv->vm_gart_size - 1); -+ NV_DEBUG(dev, "NV50VM: VRAM 0x%016llx-0x%016llx\n", -+ dev_priv->vm_vram_base, -+ dev_priv->vm_vram_base + dev_priv->vm_vram_size - 1); - - /* VRAM page table(s), mapped into VM at +1GiB */ - for (i = 0; i < dev_priv->vm_vram_pt_nr; i++) { -- ret = nouveau_gpuobj_new_ref(dev, chan, NULL, 0, -- NV50_VM_BLOCK/65536*8, 0, 0, -- &chan->vm_vram_pt[i]); -+ ret = nouveau_gpuobj_new(dev, NULL, NV50_VM_BLOCK / 0x10000 * 8, -+ 0, NVOBJ_FLAG_ZERO_ALLOC, -+ &chan->vm_vram_pt[i]); - if (ret) { -- NV_ERROR(dev, "Error creating VRAM page tables: %d\n", -- ret); -+ NV_ERROR(dev, "Error creating VRAM PGT: %d\n", ret); - dev_priv->vm_vram_pt_nr = i; - return ret; - } -- dev_priv->vm_vram_pt[i] = chan->vm_vram_pt[i]->gpuobj; -+ dev_priv->vm_vram_pt[i] = chan->vm_vram_pt[i]; - -- for (v = 0; v < dev_priv->vm_vram_pt[i]->im_pramin->size; -- v += 4) -- BAR0_WI32(dev_priv->vm_vram_pt[i], v, 0); -- -- BAR0_WI32(chan->vm_pd, 0x10 + (i*8), -- chan->vm_vram_pt[i]->instance | 0x61); -- BAR0_WI32(chan->vm_pd, 0x14 + (i*8), 0); -+ nv_wo32(chan->vm_pd, 0x10 + (i*8), -+ chan->vm_vram_pt[i]->vinst | 0x61); -+ nv_wo32(chan->vm_pd, 0x14 + (i*8), 0); - } - -- /* DMA object for PRAMIN BAR */ -- ret = nouveau_gpuobj_new_ref(dev, chan, chan, 0, 6*4, 16, 0, -- &priv->pramin_bar); -- if (ret) -- return ret; -- BAR0_WI32(priv->pramin_bar->gpuobj, 0x00, 0x7fc00000); -- BAR0_WI32(priv->pramin_bar->gpuobj, 0x04, dev_priv->ramin_size - 1); -- BAR0_WI32(priv->pramin_bar->gpuobj, 0x08, 0x00000000); -- BAR0_WI32(priv->pramin_bar->gpuobj, 0x0c, 0x00000000); -- BAR0_WI32(priv->pramin_bar->gpuobj, 0x10, 0x00000000); -- BAR0_WI32(priv->pramin_bar->gpuobj, 0x14, 0x00000000); -- - /* DMA object for FB BAR */ -- ret = nouveau_gpuobj_new_ref(dev, chan, chan, 0, 6*4, 16, 0, -- &priv->fb_bar); -+ ret = nouveau_gpuobj_new(dev, chan, 6*4, 16, 0, &priv->fb_bar); - if (ret) - return ret; -- BAR0_WI32(priv->fb_bar->gpuobj, 0x00, 0x7fc00000); -- BAR0_WI32(priv->fb_bar->gpuobj, 0x04, 0x40000000 + -- pci_resource_len(dev->pdev, 1) - 1); -- BAR0_WI32(priv->fb_bar->gpuobj, 0x08, 0x40000000); -- BAR0_WI32(priv->fb_bar->gpuobj, 0x0c, 0x00000000); -- BAR0_WI32(priv->fb_bar->gpuobj, 0x10, 0x00000000); -- BAR0_WI32(priv->fb_bar->gpuobj, 0x14, 0x00000000); -+ nv_wo32(priv->fb_bar, 0x00, 0x7fc00000); -+ nv_wo32(priv->fb_bar, 0x04, 0x40000000 + -+ pci_resource_len(dev->pdev, 1) - 1); -+ nv_wo32(priv->fb_bar, 0x08, 0x40000000); -+ nv_wo32(priv->fb_bar, 0x0c, 0x00000000); -+ nv_wo32(priv->fb_bar, 0x10, 0x00000000); -+ nv_wo32(priv->fb_bar, 0x14, 0x00000000); - -- /* Poke the relevant regs, and pray it works :) */ -- nv_wr32(dev, NV50_PUNK_BAR_CFG_BASE, (chan->ramin->instance >> 12)); -- nv_wr32(dev, NV50_PUNK_UNK1710, 0); -- nv_wr32(dev, NV50_PUNK_BAR_CFG_BASE, (chan->ramin->instance >> 12) | -- NV50_PUNK_BAR_CFG_BASE_VALID); -- nv_wr32(dev, NV50_PUNK_BAR1_CTXDMA, (priv->fb_bar->instance >> 4) | -- NV50_PUNK_BAR1_CTXDMA_VALID); -- nv_wr32(dev, NV50_PUNK_BAR3_CTXDMA, (priv->pramin_bar->instance >> 4) | -- NV50_PUNK_BAR3_CTXDMA_VALID); -+ dev_priv->engine.instmem.flush(dev); - -+ nv_wr32(dev, 0x001708, 0x80000000 | (priv->fb_bar->cinst >> 4)); - for (i = 0; i < 8; i++) - nv_wr32(dev, 0x1900 + (i*4), 0); - -- /* Assume that praying isn't enough, check that we can re-read the -- * entire fake channel back from the PRAMIN BAR */ -- for (i = 0; i < c_size; i += 4) { -- if (nv_rd32(dev, NV_RAMIN + i) != nv_ri32(dev, i)) { -- NV_ERROR(dev, "Error reading back PRAMIN at 0x%08x\n", -- i); -- return -EINVAL; -- } -- } -- -- nv_wr32(dev, NV50_PUNK_BAR0_PRAMIN, save_nv001700); -- -- /* Global PRAMIN heap */ -- if (drm_mm_init(&dev_priv->ramin_heap, c_size, dev_priv->ramin_size - c_size)) { -- NV_ERROR(dev, "Failed to init RAMIN heap\n"); -- } -- -- /*XXX: incorrect, but needed to make hash func "work" */ -- dev_priv->ramht_offset = 0x10000; -- dev_priv->ramht_bits = 9; -- dev_priv->ramht_size = (1 << dev_priv->ramht_bits) * 8; - return 0; - } - -@@ -289,7 +240,7 @@ - { - struct drm_nouveau_private *dev_priv = dev->dev_private; - struct nv50_instmem_priv *priv = dev_priv->engine.instmem.priv; -- struct nouveau_channel *chan = dev_priv->fifos[0]; -+ struct nouveau_channel *chan = dev_priv->channels.ptr[0]; - int i; - - NV_DEBUG(dev, "\n"); -@@ -297,29 +248,24 @@ - if (!priv) - return; - -+ dev_priv->ramin_available = false; -+ - /* Restore state from before init */ - for (i = 0x1700; i <= 0x1710; i += 4) - nv_wr32(dev, i, priv->save1700[(i - 0x1700) / 4]); - -- nouveau_gpuobj_ref_del(dev, &priv->fb_bar); -- nouveau_gpuobj_ref_del(dev, &priv->pramin_bar); -- nouveau_gpuobj_ref_del(dev, &priv->pramin_pt); -+ nouveau_gpuobj_ref(NULL, &priv->fb_bar); -+ nouveau_gpuobj_ref(NULL, &priv->pramin_bar); -+ nouveau_gpuobj_ref(NULL, &priv->pramin_pt); - - /* Destroy dummy channel */ - if (chan) { -- for (i = 0; i < dev_priv->vm_vram_pt_nr; i++) { -- nouveau_gpuobj_ref_del(dev, &chan->vm_vram_pt[i]); -- dev_priv->vm_vram_pt[i] = NULL; -- } -+ for (i = 0; i < dev_priv->vm_vram_pt_nr; i++) -+ nouveau_gpuobj_ref(NULL, &chan->vm_vram_pt[i]); - dev_priv->vm_vram_pt_nr = 0; - -- nouveau_gpuobj_del(dev, &chan->vm_pd); -- nouveau_gpuobj_ref_del(dev, &chan->ramfc); -- nouveau_gpuobj_ref_del(dev, &chan->ramin); -- drm_mm_takedown(&chan->ramin_heap); -- -- dev_priv->fifos[0] = dev_priv->fifos[127] = NULL; -- kfree(chan); -+ nv50_channel_del(&dev_priv->channels.ptr[0]); -+ dev_priv->channels.ptr[127] = NULL; - } - - dev_priv->engine.instmem.priv = NULL; -@@ -330,15 +276,15 @@ - nv50_instmem_suspend(struct drm_device *dev) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; -- struct nouveau_channel *chan = dev_priv->fifos[0]; -- struct nouveau_gpuobj *ramin = chan->ramin->gpuobj; -+ struct nouveau_channel *chan = dev_priv->channels.ptr[0]; -+ struct nouveau_gpuobj *ramin = chan->ramin; - int i; - -- ramin->im_backing_suspend = vmalloc(ramin->im_pramin->size); -+ ramin->im_backing_suspend = vmalloc(ramin->size); - if (!ramin->im_backing_suspend) - return -ENOMEM; - -- for (i = 0; i < ramin->im_pramin->size; i += 4) -+ for (i = 0; i < ramin->size; i += 4) - ramin->im_backing_suspend[i/4] = nv_ri32(dev, i); - return 0; - } -@@ -348,24 +294,26 @@ - { - struct drm_nouveau_private *dev_priv = dev->dev_private; - struct nv50_instmem_priv *priv = dev_priv->engine.instmem.priv; -- struct nouveau_channel *chan = dev_priv->fifos[0]; -- struct nouveau_gpuobj *ramin = chan->ramin->gpuobj; -+ struct nouveau_channel *chan = dev_priv->channels.ptr[0]; -+ struct nouveau_gpuobj *ramin = chan->ramin; - int i; - -- nv_wr32(dev, NV50_PUNK_BAR0_PRAMIN, (ramin->im_backing_start >> 16)); -- for (i = 0; i < ramin->im_pramin->size; i += 4) -- BAR0_WI32(ramin, i, ramin->im_backing_suspend[i/4]); -+ dev_priv->ramin_available = false; -+ dev_priv->ramin_base = ~0; -+ for (i = 0; i < ramin->size; i += 4) -+ nv_wo32(ramin, i, ramin->im_backing_suspend[i/4]); -+ dev_priv->ramin_available = true; - vfree(ramin->im_backing_suspend); - ramin->im_backing_suspend = NULL; - - /* Poke the relevant regs, and pray it works :) */ -- nv_wr32(dev, NV50_PUNK_BAR_CFG_BASE, (chan->ramin->instance >> 12)); -+ nv_wr32(dev, NV50_PUNK_BAR_CFG_BASE, (chan->ramin->vinst >> 12)); - nv_wr32(dev, NV50_PUNK_UNK1710, 0); -- nv_wr32(dev, NV50_PUNK_BAR_CFG_BASE, (chan->ramin->instance >> 12) | -+ nv_wr32(dev, NV50_PUNK_BAR_CFG_BASE, (chan->ramin->vinst >> 12) | - NV50_PUNK_BAR_CFG_BASE_VALID); -- nv_wr32(dev, NV50_PUNK_BAR1_CTXDMA, (priv->fb_bar->instance >> 4) | -+ nv_wr32(dev, NV50_PUNK_BAR1_CTXDMA, (priv->fb_bar->cinst >> 4) | - NV50_PUNK_BAR1_CTXDMA_VALID); -- nv_wr32(dev, NV50_PUNK_BAR3_CTXDMA, (priv->pramin_bar->instance >> 4) | -+ nv_wr32(dev, NV50_PUNK_BAR3_CTXDMA, (priv->pramin_bar->cinst >> 4) | - NV50_PUNK_BAR3_CTXDMA_VALID); - - for (i = 0; i < 8; i++) -@@ -374,19 +322,19 @@ - - int - nv50_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj, -- uint32_t *sz) -+ u32 *size, u32 align) - { - int ret; - - if (gpuobj->im_backing) - return -EINVAL; - -- *sz = ALIGN(*sz, NV50_INSTMEM_PAGE_SIZE); -- if (*sz == 0) -+ *size = ALIGN(*size, 4096); -+ if (*size == 0) - return -EINVAL; - -- ret = nouveau_bo_new(dev, NULL, *sz, 0, TTM_PL_FLAG_VRAM, 0, 0x0000, -- true, false, &gpuobj->im_backing); -+ ret = nouveau_bo_new(dev, NULL, *size, align, TTM_PL_FLAG_VRAM, -+ 0, 0x0000, true, false, &gpuobj->im_backing); - if (ret) { - NV_ERROR(dev, "error getting PRAMIN backing pages: %d\n", ret); - return ret; -@@ -399,9 +347,7 @@ - return ret; - } - -- gpuobj->im_backing_start = gpuobj->im_backing->bo.mem.mm_node->start; -- gpuobj->im_backing_start <<= PAGE_SHIFT; -- -+ gpuobj->vinst = gpuobj->im_backing->bo.mem.start << PAGE_SHIFT; - return 0; - } - -@@ -424,7 +370,7 @@ - { - struct drm_nouveau_private *dev_priv = dev->dev_private; - struct nv50_instmem_priv *priv = dev_priv->engine.instmem.priv; -- struct nouveau_gpuobj *pramin_pt = priv->pramin_pt->gpuobj; -+ struct nouveau_gpuobj *pramin_pt = priv->pramin_pt; - uint32_t pte, pte_end; - uint64_t vram; - -@@ -436,11 +382,11 @@ - - pte = (gpuobj->im_pramin->start >> 12) << 1; - pte_end = ((gpuobj->im_pramin->size >> 12) << 1) + pte; -- vram = gpuobj->im_backing_start; -+ vram = gpuobj->vinst; - - NV_DEBUG(dev, "pramin=0x%lx, pte=%d, pte_end=%d\n", - gpuobj->im_pramin->start, pte, pte_end); -- NV_DEBUG(dev, "first vram page: 0x%08x\n", gpuobj->im_backing_start); -+ NV_DEBUG(dev, "first vram page: 0x%010llx\n", gpuobj->vinst); - - vram |= 1; - if (dev_priv->vram_sys_base) { -@@ -449,13 +395,13 @@ - } - - while (pte < pte_end) { -- nv_wo32(dev, pramin_pt, pte++, lower_32_bits(vram)); -- nv_wo32(dev, pramin_pt, pte++, upper_32_bits(vram)); -- vram += NV50_INSTMEM_PAGE_SIZE; -+ nv_wo32(pramin_pt, (pte * 4) + 0, lower_32_bits(vram)); -+ nv_wo32(pramin_pt, (pte * 4) + 4, upper_32_bits(vram)); -+ vram += 0x1000; -+ pte += 2; - } - dev_priv->engine.instmem.flush(dev); - -- nv50_vm_flush(dev, 4); - nv50_vm_flush(dev, 6); - - gpuobj->im_bound = 1; -@@ -472,12 +418,17 @@ - if (gpuobj->im_bound == 0) - return -EINVAL; - -+ /* can happen during late takedown */ -+ if (unlikely(!dev_priv->ramin_available)) -+ return 0; -+ - pte = (gpuobj->im_pramin->start >> 12) << 1; - pte_end = ((gpuobj->im_pramin->size >> 12) << 1) + pte; - - while (pte < pte_end) { -- nv_wo32(dev, priv->pramin_pt->gpuobj, pte++, 0x00000000); -- nv_wo32(dev, priv->pramin_pt->gpuobj, pte++, 0x00000000); -+ nv_wo32(priv->pramin_pt, (pte * 4) + 0, 0x00000000); -+ nv_wo32(priv->pramin_pt, (pte * 4) + 4, 0x00000000); -+ pte += 2; - } - dev_priv->engine.instmem.flush(dev); - -@@ -489,7 +440,7 @@ - nv50_instmem_flush(struct drm_device *dev) - { - nv_wr32(dev, 0x00330c, 0x00000001); -- if (!nv_wait(0x00330c, 0x00000002, 0x00000000)) -+ if (!nv_wait(dev, 0x00330c, 0x00000002, 0x00000000)) - NV_ERROR(dev, "PRAMIN flush timeout\n"); - } - -@@ -497,7 +448,7 @@ - nv84_instmem_flush(struct drm_device *dev) - { - nv_wr32(dev, 0x070000, 0x00000001); -- if (!nv_wait(0x070000, 0x00000002, 0x00000000)) -+ if (!nv_wait(dev, 0x070000, 0x00000002, 0x00000000)) - NV_ERROR(dev, "PRAMIN flush timeout\n"); - } - -@@ -505,7 +456,7 @@ - nv50_vm_flush(struct drm_device *dev, int engine) - { - nv_wr32(dev, 0x100c80, (engine << 16) | 1); -- if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) -+ if (!nv_wait(dev, 0x100c80, 0x00000001, 0x00000000)) - NV_ERROR(dev, "vm flush timeout: engine %d\n", engine); - } - -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_pm.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_pm.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_pm.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_pm.c 2010-11-05 00:40:00.000000000 +0100 -@@ -0,0 +1,131 @@ -+/* -+ * Copyright 2010 Red Hat Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining a -+ * copy of this software and associated documentation files (the "Software"), -+ * to deal in the Software without restriction, including without limitation -+ * the rights to use, copy, modify, merge, publish, distribute, sublicense, -+ * and/or sell copies of the Software, and to permit persons to whom the -+ * Software is furnished to do so, subject to the following conditions: -+ * -+ * The above copyright notice and this permission notice shall be included in -+ * all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR -+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -+ * OTHER DEALINGS IN THE SOFTWARE. -+ * -+ * Authors: Ben Skeggs -+ */ -+ -+#include "drmP.h" -+#include "nouveau_drv.h" -+#include "nouveau_bios.h" -+#include "nouveau_pm.h" -+ -+struct nv50_pm_state { -+ struct nouveau_pm_level *perflvl; -+ struct pll_lims pll; -+ enum pll_types type; -+ int N, M, P; -+}; -+ -+int -+nv50_pm_clock_get(struct drm_device *dev, u32 id) -+{ -+ struct pll_lims pll; -+ int P, N, M, ret; -+ u32 reg0, reg1; -+ -+ ret = get_pll_limits(dev, id, &pll); -+ if (ret) -+ return ret; -+ -+ reg0 = nv_rd32(dev, pll.reg + 0); -+ reg1 = nv_rd32(dev, pll.reg + 4); -+ P = (reg0 & 0x00070000) >> 16; -+ N = (reg1 & 0x0000ff00) >> 8; -+ M = (reg1 & 0x000000ff); -+ -+ return ((pll.refclk * N / M) >> P); -+} -+ -+void * -+nv50_pm_clock_pre(struct drm_device *dev, struct nouveau_pm_level *perflvl, -+ u32 id, int khz) -+{ -+ struct nv50_pm_state *state; -+ int dummy, ret; -+ -+ state = kzalloc(sizeof(*state), GFP_KERNEL); -+ if (!state) -+ return ERR_PTR(-ENOMEM); -+ state->type = id; -+ state->perflvl = perflvl; -+ -+ ret = get_pll_limits(dev, id, &state->pll); -+ if (ret < 0) { -+ kfree(state); -+ return (ret == -ENOENT) ? NULL : ERR_PTR(ret); -+ } -+ -+ ret = nv50_calc_pll(dev, &state->pll, khz, &state->N, &state->M, -+ &dummy, &dummy, &state->P); -+ if (ret < 0) { -+ kfree(state); -+ return ERR_PTR(ret); -+ } -+ -+ return state; -+} -+ -+void -+nv50_pm_clock_set(struct drm_device *dev, void *pre_state) -+{ -+ struct nv50_pm_state *state = pre_state; -+ struct nouveau_pm_level *perflvl = state->perflvl; -+ u32 reg = state->pll.reg, tmp; -+ struct bit_entry BIT_M; -+ u16 script; -+ int N = state->N; -+ int M = state->M; -+ int P = state->P; -+ -+ if (state->type == PLL_MEMORY && perflvl->memscript && -+ bit_table(dev, 'M', &BIT_M) == 0 && -+ BIT_M.version == 1 && BIT_M.length >= 0x0b) { -+ script = ROM16(BIT_M.data[0x05]); -+ if (script) -+ nouveau_bios_run_init_table(dev, script, NULL); -+ script = ROM16(BIT_M.data[0x07]); -+ if (script) -+ nouveau_bios_run_init_table(dev, script, NULL); -+ script = ROM16(BIT_M.data[0x09]); -+ if (script) -+ nouveau_bios_run_init_table(dev, script, NULL); -+ -+ nouveau_bios_run_init_table(dev, perflvl->memscript, NULL); -+ } -+ -+ if (state->type == PLL_MEMORY) { -+ nv_wr32(dev, 0x100210, 0); -+ nv_wr32(dev, 0x1002dc, 1); -+ } -+ -+ tmp = nv_rd32(dev, reg + 0) & 0xfff8ffff; -+ tmp |= 0x80000000 | (P << 16); -+ nv_wr32(dev, reg + 0, tmp); -+ nv_wr32(dev, reg + 4, (N << 8) | M); -+ -+ if (state->type == PLL_MEMORY) { -+ nv_wr32(dev, 0x1002dc, 0); -+ nv_wr32(dev, 0x100210, 0x80000000); -+ } -+ -+ kfree(state); -+} -+ -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv50_sor.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_sor.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv50_sor.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv50_sor.c 2010-11-05 00:40:00.000000000 +0100 -@@ -92,7 +92,7 @@ - } - - /* wait for it to be done */ -- if (!nv_wait(NV50_PDISPLAY_SOR_DPMS_CTRL(or), -+ if (!nv_wait(dev, NV50_PDISPLAY_SOR_DPMS_CTRL(or), - NV50_PDISPLAY_SOR_DPMS_CTRL_PENDING, 0)) { - NV_ERROR(dev, "timeout: SOR_DPMS_CTRL_PENDING(%d) == 0\n", or); - NV_ERROR(dev, "SOR_DPMS_CTRL(%d) = 0x%08x\n", or, -@@ -108,7 +108,7 @@ - - nv_wr32(dev, NV50_PDISPLAY_SOR_DPMS_CTRL(or), val | - NV50_PDISPLAY_SOR_DPMS_CTRL_PENDING); -- if (!nv_wait(NV50_PDISPLAY_SOR_DPMS_STATE(or), -+ if (!nv_wait(dev, NV50_PDISPLAY_SOR_DPMS_STATE(or), - NV50_PDISPLAY_SOR_DPMS_STATE_WAIT, 0)) { - NV_ERROR(dev, "timeout: SOR_DPMS_STATE_WAIT(%d) == 0\n", or); - NV_ERROR(dev, "SOR_DPMS_STATE(%d) = 0x%08x\n", or, -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nv84_crypt.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv84_crypt.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nv84_crypt.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nv84_crypt.c 2010-11-05 00:40:00.000000000 +0100 -@@ -0,0 +1,110 @@ -+/* -+ * Copyright 2010 Red Hat Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining a -+ * copy of this software and associated documentation files (the "Software"), -+ * to deal in the Software without restriction, including without limitation -+ * the rights to use, copy, modify, merge, publish, distribute, sublicense, -+ * and/or sell copies of the Software, and to permit persons to whom the -+ * Software is furnished to do so, subject to the following conditions: -+ * -+ * The above copyright notice and this permission notice shall be included in -+ * all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR -+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -+ * OTHER DEALINGS IN THE SOFTWARE. -+ * -+ * Authors: Ben Skeggs -+ */ -+ -+#include "drmP.h" -+#include "nouveau_drv.h" -+ -+int -+nv84_crypt_create_context(struct nouveau_channel *chan) -+{ -+ struct drm_device *dev = chan->dev; -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_gpuobj *ramin = chan->ramin; -+ int ret; -+ -+ NV_DEBUG(dev, "ch%d\n", chan->id); -+ -+ ret = nouveau_gpuobj_new(dev, chan, 256, 0, -+ NVOBJ_FLAG_ZERO_ALLOC | NVOBJ_FLAG_ZERO_FREE, -+ &chan->crypt_ctx); -+ if (ret) -+ return ret; -+ -+ nv_wo32(ramin, 0xa0, 0x00190000); -+ nv_wo32(ramin, 0xa4, chan->crypt_ctx->vinst + 0xff); -+ nv_wo32(ramin, 0xa8, chan->crypt_ctx->vinst); -+ nv_wo32(ramin, 0xac, 0); -+ nv_wo32(ramin, 0xb0, 0); -+ nv_wo32(ramin, 0xb4, 0); -+ -+ dev_priv->engine.instmem.flush(dev); -+ return 0; -+} -+ -+void -+nv84_crypt_destroy_context(struct nouveau_channel *chan) -+{ -+ struct drm_device *dev = chan->dev; -+ u32 inst; -+ -+ if (!chan->ramin) -+ return; -+ -+ inst = (chan->ramin->vinst >> 12); -+ inst |= 0x80000000; -+ -+ /* mark context as invalid if still on the hardware, not -+ * doing this causes issues the next time PCRYPT is used, -+ * unsurprisingly :) -+ */ -+ nv_wr32(dev, 0x10200c, 0x00000000); -+ if (nv_rd32(dev, 0x102188) == inst) -+ nv_mask(dev, 0x102188, 0x80000000, 0x00000000); -+ if (nv_rd32(dev, 0x10218c) == inst) -+ nv_mask(dev, 0x10218c, 0x80000000, 0x00000000); -+ nv_wr32(dev, 0x10200c, 0x00000010); -+ -+ nouveau_gpuobj_ref(NULL, &chan->crypt_ctx); -+} -+ -+void -+nv84_crypt_tlb_flush(struct drm_device *dev) -+{ -+ nv50_vm_flush(dev, 0x0a); -+} -+ -+int -+nv84_crypt_init(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_crypt_engine *pcrypt = &dev_priv->engine.crypt; -+ -+ if (!pcrypt->registered) { -+ NVOBJ_CLASS(dev, 0x74c1, CRYPT); -+ pcrypt->registered = true; -+ } -+ -+ nv_mask(dev, 0x000200, 0x00004000, 0x00000000); -+ nv_mask(dev, 0x000200, 0x00004000, 0x00004000); -+ nv_wr32(dev, 0x102130, 0xffffffff); -+ nv_wr32(dev, 0x102140, 0xffffffbf); -+ nv_wr32(dev, 0x10200c, 0x00000010); -+ return 0; -+} -+ -+void -+nv84_crypt_fini(struct drm_device *dev) -+{ -+ nv_wr32(dev, 0x102140, 0x00000000); -+} -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nva3_pm.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nva3_pm.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nva3_pm.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nva3_pm.c 2010-11-05 00:40:00.000000000 +0100 -@@ -0,0 +1,95 @@ -+/* -+ * Copyright 2010 Red Hat Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining a -+ * copy of this software and associated documentation files (the "Software"), -+ * to deal in the Software without restriction, including without limitation -+ * the rights to use, copy, modify, merge, publish, distribute, sublicense, -+ * and/or sell copies of the Software, and to permit persons to whom the -+ * Software is furnished to do so, subject to the following conditions: -+ * -+ * The above copyright notice and this permission notice shall be included in -+ * all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR -+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -+ * OTHER DEALINGS IN THE SOFTWARE. -+ * -+ * Authors: Ben Skeggs -+ */ -+ -+#include "drmP.h" -+#include "nouveau_drv.h" -+#include "nouveau_bios.h" -+#include "nouveau_pm.h" -+ -+/*XXX: boards using limits 0x40 need fixing, the register layout -+ * is correct here, but, there's some other funny magic -+ * that modifies things, so it's not likely we'll set/read -+ * the correct timings yet.. working on it... -+ */ -+ -+struct nva3_pm_state { -+ struct pll_lims pll; -+ int N, M, P; -+}; -+ -+int -+nva3_pm_clock_get(struct drm_device *dev, u32 id) -+{ -+ struct pll_lims pll; -+ int P, N, M, ret; -+ u32 reg; -+ -+ ret = get_pll_limits(dev, id, &pll); -+ if (ret) -+ return ret; -+ -+ reg = nv_rd32(dev, pll.reg + 4); -+ P = (reg & 0x003f0000) >> 16; -+ N = (reg & 0x0000ff00) >> 8; -+ M = (reg & 0x000000ff); -+ return pll.refclk * N / M / P; -+} -+ -+void * -+nva3_pm_clock_pre(struct drm_device *dev, struct nouveau_pm_level *perflvl, -+ u32 id, int khz) -+{ -+ struct nva3_pm_state *state; -+ int dummy, ret; -+ -+ state = kzalloc(sizeof(*state), GFP_KERNEL); -+ if (!state) -+ return ERR_PTR(-ENOMEM); -+ -+ ret = get_pll_limits(dev, id, &state->pll); -+ if (ret < 0) { -+ kfree(state); -+ return (ret == -ENOENT) ? NULL : ERR_PTR(ret); -+ } -+ -+ ret = nv50_calc_pll2(dev, &state->pll, khz, &state->N, &dummy, -+ &state->M, &state->P); -+ if (ret < 0) { -+ kfree(state); -+ return ERR_PTR(ret); -+ } -+ -+ return state; -+} -+ -+void -+nva3_pm_clock_set(struct drm_device *dev, void *pre_state) -+{ -+ struct nva3_pm_state *state = pre_state; -+ u32 reg = state->pll.reg; -+ -+ nv_wr32(dev, reg + 4, (state->P << 16) | (state->N << 8) | state->M); -+ kfree(state); -+} -+ -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nvc0_fifo.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nvc0_fifo.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nvc0_fifo.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nvc0_fifo.c 2010-11-05 00:40:00.000000000 +0100 -@@ -43,12 +43,6 @@ - } - - bool --nvc0_fifo_cache_flush(struct drm_device *dev) --{ -- return true; --} -- --bool - nvc0_fifo_cache_pull(struct drm_device *dev, bool enable) - { - return false; -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nvc0_instmem.c linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nvc0_instmem.c ---- linux-2.6.36/drivers/gpu/drm/nouveau/nvc0_instmem.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nvc0_instmem.c 2010-11-05 00:40:00.000000000 +0100 -@@ -28,7 +28,7 @@ - - int - nvc0_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj, -- uint32_t *size) -+ u32 *size, u32 align) - { - int ret; - -@@ -36,8 +36,8 @@ - if (*size == 0) - return -EINVAL; - -- ret = nouveau_bo_new(dev, NULL, *size, 0, TTM_PL_FLAG_VRAM, 0, 0x0000, -- true, false, &gpuobj->im_backing); -+ ret = nouveau_bo_new(dev, NULL, *size, align, TTM_PL_FLAG_VRAM, -+ 0, 0x0000, true, false, &gpuobj->im_backing); - if (ret) { - NV_ERROR(dev, "error getting PRAMIN backing pages: %d\n", ret); - return ret; -@@ -50,8 +50,7 @@ - return ret; - } - -- gpuobj->im_backing_start = gpuobj->im_backing->bo.mem.mm_node->start; -- gpuobj->im_backing_start <<= PAGE_SHIFT; -+ gpuobj->vinst = gpuobj->im_backing->bo.mem.start << PAGE_SHIFT; - return 0; - } - -@@ -84,11 +83,11 @@ - - pte = gpuobj->im_pramin->start >> 12; - pte_end = (gpuobj->im_pramin->size >> 12) + pte; -- vram = gpuobj->im_backing_start; -+ vram = gpuobj->vinst; - - NV_DEBUG(dev, "pramin=0x%lx, pte=%d, pte_end=%d\n", - gpuobj->im_pramin->start, pte, pte_end); -- NV_DEBUG(dev, "first vram page: 0x%08x\n", gpuobj->im_backing_start); -+ NV_DEBUG(dev, "first vram page: 0x%010llx\n", gpuobj->vinst); - - while (pte < pte_end) { - nv_wr32(dev, 0x702000 + (pte * 8), (vram >> 8) | 1); -@@ -134,7 +133,7 @@ - nvc0_instmem_flush(struct drm_device *dev) - { - nv_wr32(dev, 0x070000, 1); -- if (!nv_wait(0x070000, 0x00000002, 0x00000000)) -+ if (!nv_wait(dev, 0x070000, 0x00000002, 0x00000000)) - NV_ERROR(dev, "PRAMIN flush timeout\n"); - } - -@@ -221,10 +220,6 @@ - return -ENOMEM; - } - -- /*XXX: incorrect, but needed to make hash func "work" */ -- dev_priv->ramht_offset = 0x10000; -- dev_priv->ramht_bits = 9; -- dev_priv->ramht_size = (1 << dev_priv->ramht_bits) * 8; - return 0; - } - -diff -Naur linux-2.6.36/drivers/gpu/drm/nouveau/nvreg.h linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nvreg.h ---- linux-2.6.36/drivers/gpu/drm/nouveau/nvreg.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/nouveau/nvreg.h 2010-11-05 00:40:00.000000000 +0100 -@@ -153,7 +153,8 @@ - #define NV_PCRTC_START 0x00600800 - #define NV_PCRTC_CONFIG 0x00600804 - # define NV_PCRTC_CONFIG_START_ADDRESS_NON_VGA (1 << 0) --# define NV_PCRTC_CONFIG_START_ADDRESS_HSYNC (2 << 0) -+# define NV04_PCRTC_CONFIG_START_ADDRESS_HSYNC (4 << 0) -+# define NV10_PCRTC_CONFIG_START_ADDRESS_HSYNC (2 << 0) - #define NV_PCRTC_CURSOR_CONFIG 0x00600810 - # define NV_PCRTC_CURSOR_CONFIG_ENABLE_ENABLE (1 << 0) - # define NV_PCRTC_CURSOR_CONFIG_DOUBLE_SCAN_ENABLE (1 << 4) -@@ -263,6 +264,7 @@ - # define NV_CIO_CRE_HCUR_ADDR1_ADR 7:2 - # define NV_CIO_CRE_LCD__INDEX 0x33 - # define NV_CIO_CRE_LCD_LCD_SELECT 0:0 -+# define NV_CIO_CRE_LCD_ROUTE_MASK 0x3b - # define NV_CIO_CRE_DDC0_STATUS__INDEX 0x36 - # define NV_CIO_CRE_DDC0_WR__INDEX 0x37 - # define NV_CIO_CRE_ILACE__INDEX 0x39 /* interlace */ -diff -Naur linux-2.6.36/drivers/gpu/drm/radeon/radeon_object.c linux-2.6.36.nouveau/drivers/gpu/drm/radeon/radeon_object.c ---- linux-2.6.36/drivers/gpu/drm/radeon/radeon_object.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/radeon/radeon_object.c 2010-11-05 00:40:00.000000000 +0100 -@@ -435,7 +435,7 @@ - - out: - radeon_set_surface_reg(rdev, i, bo->tiling_flags, bo->pitch, -- bo->tbo.mem.mm_node->start << PAGE_SHIFT, -+ bo->tbo.mem.start << PAGE_SHIFT, - bo->tbo.num_pages << PAGE_SHIFT); - return 0; - } -@@ -532,7 +532,7 @@ - rdev = rbo->rdev; - if (bo->mem.mem_type == TTM_PL_VRAM) { - size = bo->mem.num_pages << PAGE_SHIFT; -- offset = bo->mem.mm_node->start << PAGE_SHIFT; -+ offset = bo->mem.start << PAGE_SHIFT; - if ((offset + size) > rdev->mc.visible_vram_size) { - /* hurrah the memory is not visible ! */ - radeon_ttm_placement_from_domain(rbo, RADEON_GEM_DOMAIN_VRAM); -@@ -540,7 +540,7 @@ - r = ttm_bo_validate(bo, &rbo->placement, false, true, false); - if (unlikely(r != 0)) - return r; -- offset = bo->mem.mm_node->start << PAGE_SHIFT; -+ offset = bo->mem.start << PAGE_SHIFT; - /* this should not happen */ - if ((offset + size) > rdev->mc.visible_vram_size) - return -EINVAL; -diff -Naur linux-2.6.36/drivers/gpu/drm/radeon/radeon_ttm.c linux-2.6.36.nouveau/drivers/gpu/drm/radeon/radeon_ttm.c ---- linux-2.6.36/drivers/gpu/drm/radeon/radeon_ttm.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/radeon/radeon_ttm.c 2010-11-05 00:40:00.000000000 +0100 -@@ -152,6 +152,7 @@ - man->default_caching = TTM_PL_FLAG_CACHED; - break; - case TTM_PL_TT: -+ man->func = &ttm_bo_manager_func; - man->gpu_offset = rdev->mc.gtt_start; - man->available_caching = TTM_PL_MASK_CACHING; - man->default_caching = TTM_PL_FLAG_CACHED; -@@ -173,6 +174,7 @@ - break; - case TTM_PL_VRAM: - /* "On-card" video ram */ -+ man->func = &ttm_bo_manager_func; - man->gpu_offset = rdev->mc.vram_start; - man->flags = TTM_MEMTYPE_FLAG_FIXED | - TTM_MEMTYPE_FLAG_MAPPABLE; -@@ -246,8 +248,8 @@ - if (unlikely(r)) { - return r; - } -- old_start = old_mem->mm_node->start << PAGE_SHIFT; -- new_start = new_mem->mm_node->start << PAGE_SHIFT; -+ old_start = old_mem->start << PAGE_SHIFT; -+ new_start = new_mem->start << PAGE_SHIFT; - - switch (old_mem->mem_type) { - case TTM_PL_VRAM: -@@ -326,14 +328,7 @@ - } - r = ttm_bo_move_ttm(bo, true, no_wait_reserve, no_wait_gpu, new_mem); - out_cleanup: -- if (tmp_mem.mm_node) { -- struct ttm_bo_global *glob = rdev->mman.bdev.glob; -- -- spin_lock(&glob->lru_lock); -- drm_mm_put_block(tmp_mem.mm_node); -- spin_unlock(&glob->lru_lock); -- return r; -- } -+ ttm_bo_mem_put(bo, &tmp_mem); - return r; - } - -@@ -372,14 +367,7 @@ - goto out_cleanup; - } - out_cleanup: -- if (tmp_mem.mm_node) { -- struct ttm_bo_global *glob = rdev->mman.bdev.glob; -- -- spin_lock(&glob->lru_lock); -- drm_mm_put_block(tmp_mem.mm_node); -- spin_unlock(&glob->lru_lock); -- return r; -- } -+ ttm_bo_mem_put(bo, &tmp_mem); - return r; - } - -@@ -449,14 +437,14 @@ - #if __OS_HAS_AGP - if (rdev->flags & RADEON_IS_AGP) { - /* RADEON_IS_AGP is set only if AGP is active */ -- mem->bus.offset = mem->mm_node->start << PAGE_SHIFT; -+ mem->bus.offset = mem->start << PAGE_SHIFT; - mem->bus.base = rdev->mc.agp_base; - mem->bus.is_iomem = !rdev->ddev->agp->cant_use_aperture; - } - #endif - break; - case TTM_PL_VRAM: -- mem->bus.offset = mem->mm_node->start << PAGE_SHIFT; -+ mem->bus.offset = mem->start << PAGE_SHIFT; - /* check if it's visible */ - if ((mem->bus.offset + mem->bus.size) > rdev->mc.visible_vram_size) - return -EINVAL; -@@ -699,7 +687,7 @@ - int r; - - gtt = container_of(backend, struct radeon_ttm_backend, backend); -- gtt->offset = bo_mem->mm_node->start << PAGE_SHIFT; -+ gtt->offset = bo_mem->start << PAGE_SHIFT; - if (!gtt->num_pages) { - WARN(1, "nothing to bind %lu pages for mreg %p back %p!\n", gtt->num_pages, bo_mem, backend); - } -@@ -798,9 +786,9 @@ - radeon_mem_types_list[i].show = &radeon_mm_dump_table; - radeon_mem_types_list[i].driver_features = 0; - if (i == 0) -- radeon_mem_types_list[i].data = &rdev->mman.bdev.man[TTM_PL_VRAM].manager; -+ radeon_mem_types_list[i].data = &rdev->mman.bdev.man[TTM_PL_VRAM].priv; - else -- radeon_mem_types_list[i].data = &rdev->mman.bdev.man[TTM_PL_TT].manager; -+ radeon_mem_types_list[i].data = &rdev->mman.bdev.man[TTM_PL_TT].priv; - - } - /* Add ttm page pool to debugfs */ -diff -Naur linux-2.6.36/drivers/gpu/drm/ttm/Makefile linux-2.6.36.nouveau/drivers/gpu/drm/ttm/Makefile ---- linux-2.6.36/drivers/gpu/drm/ttm/Makefile 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/ttm/Makefile 2010-11-05 00:40:00.000000000 +0100 -@@ -4,6 +4,7 @@ - ccflags-y := -Iinclude/drm - ttm-y := ttm_agp_backend.o ttm_memory.o ttm_tt.o ttm_bo.o \ - ttm_bo_util.o ttm_bo_vm.o ttm_module.o \ -- ttm_object.o ttm_lock.o ttm_execbuf_util.o ttm_page_alloc.o -+ ttm_object.o ttm_lock.o ttm_execbuf_util.o ttm_page_alloc.o \ -+ ttm_bo_manager.o - - obj-$(CONFIG_DRM_TTM) += ttm.o -diff -Naur linux-2.6.36/drivers/gpu/drm/ttm/ttm_agp_backend.c linux-2.6.36.nouveau/drivers/gpu/drm/ttm/ttm_agp_backend.c ---- linux-2.6.36/drivers/gpu/drm/ttm/ttm_agp_backend.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/ttm/ttm_agp_backend.c 2010-11-05 00:40:00.000000000 +0100 -@@ -74,6 +74,7 @@ - { - struct ttm_agp_backend *agp_be = - container_of(backend, struct ttm_agp_backend, backend); -+ struct drm_mm_node *node = bo_mem->mm_node; - struct agp_memory *mem = agp_be->mem; - int cached = (bo_mem->placement & TTM_PL_FLAG_CACHED); - int ret; -@@ -81,7 +82,7 @@ - mem->is_flushed = 1; - mem->type = (cached) ? AGP_USER_CACHED_MEMORY : AGP_USER_MEMORY; - -- ret = agp_bind_memory(mem, bo_mem->mm_node->start); -+ ret = agp_bind_memory(mem, node->start); - if (ret) - printk(KERN_ERR TTM_PFX "AGP Bind memory failed.\n"); - -diff -Naur linux-2.6.36/drivers/gpu/drm/ttm/ttm_bo.c linux-2.6.36.nouveau/drivers/gpu/drm/ttm/ttm_bo.c ---- linux-2.6.36/drivers/gpu/drm/ttm/ttm_bo.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/ttm/ttm_bo.c 2010-11-05 00:40:00.000000000 +0100 -@@ -84,11 +84,8 @@ - man->available_caching); - printk(KERN_ERR TTM_PFX " default_caching: 0x%08X\n", - man->default_caching); -- if (mem_type != TTM_PL_SYSTEM) { -- spin_lock(&bdev->glob->lru_lock); -- drm_mm_debug_table(&man->manager, TTM_PFX); -- spin_unlock(&bdev->glob->lru_lock); -- } -+ if (mem_type != TTM_PL_SYSTEM) -+ (*man->func->debug)(man, TTM_PFX); - } - - static void ttm_bo_mem_space_debug(struct ttm_buffer_object *bo, -@@ -421,7 +418,7 @@ - - if (bo->mem.mm_node) { - spin_lock(&bo->lock); -- bo->offset = (bo->mem.mm_node->start << PAGE_SHIFT) + -+ bo->offset = (bo->mem.start << PAGE_SHIFT) + - bdev->man[bo->mem.mem_type].gpu_offset; - bo->cur_placement = bo->mem.placement; - spin_unlock(&bo->lock); -@@ -452,6 +449,7 @@ - static void ttm_bo_cleanup_memtype_use(struct ttm_buffer_object *bo) - { - struct ttm_bo_global *glob = bo->glob; -+ struct ttm_mem_reg tmp_mem; - - if (bo->ttm) { - -@@ -467,14 +465,14 @@ - spin_lock(&glob->lru_lock); - } - -- if (bo->mem.mm_node) { -- drm_mm_put_block(bo->mem.mm_node); -- bo->mem.mm_node = NULL; -- } -+ tmp_mem = bo->mem; -+ bo->mem.mm_node = NULL; - - atomic_set(&bo->reserved, 0); - wake_up_all(&bo->event_queue); - spin_unlock(&glob->lru_lock); -+ -+ ttm_bo_mem_put(bo, &tmp_mem); - } - - -@@ -680,7 +678,6 @@ - bool no_wait_reserve, bool no_wait_gpu) - { - struct ttm_bo_device *bdev = bo->bdev; -- struct ttm_bo_global *glob = bo->glob; - struct ttm_mem_reg evict_mem; - struct ttm_placement placement; - int ret = 0; -@@ -726,12 +723,7 @@ - if (ret) { - if (ret != -ERESTARTSYS) - printk(KERN_ERR TTM_PFX "Buffer eviction failed\n"); -- spin_lock(&glob->lru_lock); -- if (evict_mem.mm_node) { -- drm_mm_put_block(evict_mem.mm_node); -- evict_mem.mm_node = NULL; -- } -- spin_unlock(&glob->lru_lock); -+ ttm_bo_mem_put(bo, &evict_mem); - goto out; - } - bo->evicted = true; -@@ -792,41 +784,14 @@ - return ret; - } - --static int ttm_bo_man_get_node(struct ttm_buffer_object *bo, -- struct ttm_mem_type_manager *man, -- struct ttm_placement *placement, -- struct ttm_mem_reg *mem, -- struct drm_mm_node **node) -+void ttm_bo_mem_put(struct ttm_buffer_object *bo, struct ttm_mem_reg *mem) - { -- struct ttm_bo_global *glob = bo->glob; -- unsigned long lpfn; -- int ret; -- -- lpfn = placement->lpfn; -- if (!lpfn) -- lpfn = man->size; -- *node = NULL; -- do { -- ret = drm_mm_pre_get(&man->manager); -- if (unlikely(ret)) -- return ret; -+ struct ttm_mem_type_manager *man = &bo->bdev->man[mem->mem_type]; - -- spin_lock(&glob->lru_lock); -- *node = drm_mm_search_free_in_range(&man->manager, -- mem->num_pages, mem->page_alignment, -- placement->fpfn, lpfn, 1); -- if (unlikely(*node == NULL)) { -- spin_unlock(&glob->lru_lock); -- return 0; -- } -- *node = drm_mm_get_block_atomic_range(*node, mem->num_pages, -- mem->page_alignment, -- placement->fpfn, -- lpfn); -- spin_unlock(&glob->lru_lock); -- } while (*node == NULL); -- return 0; -+ if (mem->mm_node) -+ (*man->func->put_node)(man, mem); - } -+EXPORT_SYMBOL(ttm_bo_mem_put); - - /** - * Repeatedly evict memory from the LRU for @mem_type until we create enough -@@ -843,14 +808,13 @@ - struct ttm_bo_device *bdev = bo->bdev; - struct ttm_bo_global *glob = bdev->glob; - struct ttm_mem_type_manager *man = &bdev->man[mem_type]; -- struct drm_mm_node *node; - int ret; - - do { -- ret = ttm_bo_man_get_node(bo, man, placement, mem, &node); -+ ret = (*man->func->get_node)(man, bo, placement, mem); - if (unlikely(ret != 0)) - return ret; -- if (node) -+ if (mem->mm_node) - break; - spin_lock(&glob->lru_lock); - if (list_empty(&man->lru)) { -@@ -863,9 +827,8 @@ - if (unlikely(ret != 0)) - return ret; - } while (1); -- if (node == NULL) -+ if (mem->mm_node == NULL) - return -ENOMEM; -- mem->mm_node = node; - mem->mem_type = mem_type; - return 0; - } -@@ -939,7 +902,6 @@ - bool type_found = false; - bool type_ok = false; - bool has_erestartsys = false; -- struct drm_mm_node *node = NULL; - int i, ret; - - mem->mm_node = NULL; -@@ -973,17 +935,15 @@ - - if (man->has_type && man->use_type) { - type_found = true; -- ret = ttm_bo_man_get_node(bo, man, placement, mem, -- &node); -+ ret = (*man->func->get_node)(man, bo, placement, mem); - if (unlikely(ret)) - return ret; - } -- if (node) -+ if (mem->mm_node) - break; - } - -- if ((type_ok && (mem_type == TTM_PL_SYSTEM)) || node) { -- mem->mm_node = node; -+ if ((type_ok && (mem_type == TTM_PL_SYSTEM)) || mem->mm_node) { - mem->mem_type = mem_type; - mem->placement = cur_flags; - return 0; -@@ -1053,7 +1013,6 @@ - bool interruptible, bool no_wait_reserve, - bool no_wait_gpu) - { -- struct ttm_bo_global *glob = bo->glob; - int ret = 0; - struct ttm_mem_reg mem; - -@@ -1081,11 +1040,8 @@ - goto out_unlock; - ret = ttm_bo_handle_move_mem(bo, &mem, false, interruptible, no_wait_reserve, no_wait_gpu); - out_unlock: -- if (ret && mem.mm_node) { -- spin_lock(&glob->lru_lock); -- drm_mm_put_block(mem.mm_node); -- spin_unlock(&glob->lru_lock); -- } -+ if (ret && mem.mm_node) -+ ttm_bo_mem_put(bo, &mem); - return ret; - } - -@@ -1093,11 +1049,10 @@ - struct ttm_mem_reg *mem) - { - int i; -- struct drm_mm_node *node = mem->mm_node; - -- if (node && placement->lpfn != 0 && -- (node->start < placement->fpfn || -- node->start + node->size > placement->lpfn)) -+ if (mem->mm_node && placement->lpfn != 0 && -+ (mem->start < placement->fpfn || -+ mem->start + mem->num_pages > placement->lpfn)) - return -1; - - for (i = 0; i < placement->num_placement; i++) { -@@ -1341,7 +1296,6 @@ - - int ttm_bo_clean_mm(struct ttm_bo_device *bdev, unsigned mem_type) - { -- struct ttm_bo_global *glob = bdev->glob; - struct ttm_mem_type_manager *man; - int ret = -EINVAL; - -@@ -1364,13 +1318,7 @@ - if (mem_type > 0) { - ttm_bo_force_list_clean(bdev, mem_type, false); - -- spin_lock(&glob->lru_lock); -- if (drm_mm_clean(&man->manager)) -- drm_mm_takedown(&man->manager); -- else -- ret = -EBUSY; -- -- spin_unlock(&glob->lru_lock); -+ ret = (*man->func->takedown)(man); - } - - return ret; -@@ -1421,6 +1369,7 @@ - ret = bdev->driver->init_mem_type(bdev, type, man); - if (ret) - return ret; -+ man->bdev = bdev; - - ret = 0; - if (type != TTM_PL_SYSTEM) { -@@ -1430,7 +1379,8 @@ - type); - return ret; - } -- ret = drm_mm_init(&man->manager, 0, p_size); -+ -+ ret = (*man->func->init)(man, p_size); - if (ret) - return ret; - } -diff -Naur linux-2.6.36/drivers/gpu/drm/ttm/ttm_bo_manager.c linux-2.6.36.nouveau/drivers/gpu/drm/ttm/ttm_bo_manager.c ---- linux-2.6.36/drivers/gpu/drm/ttm/ttm_bo_manager.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/ttm/ttm_bo_manager.c 2010-11-05 00:40:00.000000000 +0100 -@@ -0,0 +1,148 @@ -+/************************************************************************** -+ * -+ * Copyright (c) 2007-2009 VMware, Inc., Palo Alto, CA., USA -+ * All Rights Reserved. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining a -+ * copy of this software and associated documentation files (the -+ * "Software"), to deal in the Software without restriction, including -+ * without limitation the rights to use, copy, modify, merge, publish, -+ * distribute, sub license, and/or sell copies of the Software, and to -+ * permit persons to whom the Software is furnished to do so, subject to -+ * the following conditions: -+ * -+ * The above copyright notice and this permission notice (including the -+ * next paragraph) shall be included in all copies or substantial portions -+ * of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL -+ * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, -+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -+ * USE OR OTHER DEALINGS IN THE SOFTWARE. -+ * -+ **************************************************************************/ -+/* -+ * Authors: Thomas Hellstrom -+ */ -+ -+#include "ttm/ttm_module.h" -+#include "ttm/ttm_bo_driver.h" -+#include "ttm/ttm_placement.h" -+#include -+#include -+#include -+#include -+#include -+#include -+ -+static int ttm_bo_man_get_node(struct ttm_mem_type_manager *man, -+ struct ttm_buffer_object *bo, -+ struct ttm_placement *placement, -+ struct ttm_mem_reg *mem) -+{ -+ struct ttm_bo_global *glob = man->bdev->glob; -+ struct drm_mm *mm = man->priv; -+ struct drm_mm_node *node = NULL; -+ unsigned long lpfn; -+ int ret; -+ -+ lpfn = placement->lpfn; -+ if (!lpfn) -+ lpfn = man->size; -+ do { -+ ret = drm_mm_pre_get(mm); -+ if (unlikely(ret)) -+ return ret; -+ -+ spin_lock(&glob->lru_lock); -+ node = drm_mm_search_free_in_range(mm, -+ mem->num_pages, mem->page_alignment, -+ placement->fpfn, lpfn, 1); -+ if (unlikely(node == NULL)) { -+ spin_unlock(&glob->lru_lock); -+ return 0; -+ } -+ node = drm_mm_get_block_atomic_range(node, mem->num_pages, -+ mem->page_alignment, -+ placement->fpfn, -+ lpfn); -+ spin_unlock(&glob->lru_lock); -+ } while (node == NULL); -+ -+ mem->mm_node = node; -+ mem->start = node->start; -+ return 0; -+} -+ -+static void ttm_bo_man_put_node(struct ttm_mem_type_manager *man, -+ struct ttm_mem_reg *mem) -+{ -+ struct ttm_bo_global *glob = man->bdev->glob; -+ -+ if (mem->mm_node) { -+ spin_lock(&glob->lru_lock); -+ drm_mm_put_block(mem->mm_node); -+ spin_unlock(&glob->lru_lock); -+ mem->mm_node = NULL; -+ } -+} -+ -+static int ttm_bo_man_init(struct ttm_mem_type_manager *man, -+ unsigned long p_size) -+{ -+ struct drm_mm *mm; -+ int ret; -+ -+ mm = kzalloc(sizeof(*mm), GFP_KERNEL); -+ if (!mm) -+ return -ENOMEM; -+ -+ ret = drm_mm_init(mm, 0, p_size); -+ if (ret) { -+ kfree(mm); -+ return ret; -+ } -+ -+ man->priv = mm; -+ return 0; -+} -+ -+static int ttm_bo_man_takedown(struct ttm_mem_type_manager *man) -+{ -+ struct ttm_bo_global *glob = man->bdev->glob; -+ struct drm_mm *mm = man->priv; -+ int ret = 0; -+ -+ spin_lock(&glob->lru_lock); -+ if (drm_mm_clean(mm)) { -+ drm_mm_takedown(mm); -+ kfree(mm); -+ man->priv = NULL; -+ } else -+ ret = -EBUSY; -+ spin_unlock(&glob->lru_lock); -+ return ret; -+} -+ -+static void ttm_bo_man_debug(struct ttm_mem_type_manager *man, -+ const char *prefix) -+{ -+ struct ttm_bo_global *glob = man->bdev->glob; -+ struct drm_mm *mm = man->priv; -+ -+ spin_lock(&glob->lru_lock); -+ drm_mm_debug_table(mm, prefix); -+ spin_unlock(&glob->lru_lock); -+} -+ -+const struct ttm_mem_type_manager_func ttm_bo_manager_func = { -+ ttm_bo_man_init, -+ ttm_bo_man_takedown, -+ ttm_bo_man_get_node, -+ ttm_bo_man_put_node, -+ ttm_bo_man_debug -+}; -+EXPORT_SYMBOL(ttm_bo_manager_func); -diff -Naur linux-2.6.36/drivers/gpu/drm/ttm/ttm_bo_util.c linux-2.6.36.nouveau/drivers/gpu/drm/ttm/ttm_bo_util.c ---- linux-2.6.36/drivers/gpu/drm/ttm/ttm_bo_util.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/ttm/ttm_bo_util.c 2010-11-05 00:40:00.000000000 +0100 -@@ -39,14 +39,7 @@ - - void ttm_bo_free_old_node(struct ttm_buffer_object *bo) - { -- struct ttm_mem_reg *old_mem = &bo->mem; -- -- if (old_mem->mm_node) { -- spin_lock(&bo->glob->lru_lock); -- drm_mm_put_block(old_mem->mm_node); -- spin_unlock(&bo->glob->lru_lock); -- } -- old_mem->mm_node = NULL; -+ ttm_bo_mem_put(bo, &bo->mem); - } - - int ttm_bo_move_ttm(struct ttm_buffer_object *bo, -@@ -263,8 +256,7 @@ - dir = 1; - - if ((old_mem->mem_type == new_mem->mem_type) && -- (new_mem->mm_node->start < -- old_mem->mm_node->start + old_mem->mm_node->size)) { -+ (new_mem->start < old_mem->start + old_mem->size)) { - dir = -1; - add = new_mem->num_pages - 1; - } -diff -Naur linux-2.6.36/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c linux-2.6.36.nouveau/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c ---- linux-2.6.36/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c 2010-11-05 00:40:00.000000000 +0100 -@@ -147,6 +147,7 @@ - break; - case TTM_PL_VRAM: - /* "On-card" video ram */ -+ man->func = &ttm_bo_manager_func; - man->gpu_offset = 0; - man->flags = TTM_MEMTYPE_FLAG_FIXED | TTM_MEMTYPE_FLAG_MAPPABLE; - man->available_caching = TTM_PL_MASK_CACHING; -@@ -203,7 +204,7 @@ - /* System memory */ - return 0; - case TTM_PL_VRAM: -- mem->bus.offset = mem->mm_node->start << PAGE_SHIFT; -+ mem->bus.offset = mem->start << PAGE_SHIFT; - mem->bus.base = dev_priv->vram_start; - mem->bus.is_iomem = true; - break; -diff -Naur linux-2.6.36/include/drm/nouveau_drm.h linux-2.6.36.nouveau/include/drm/nouveau_drm.h ---- linux-2.6.36/include/drm/nouveau_drm.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/include/drm/nouveau_drm.h 2010-11-05 00:40:00.000000000 +0100 -@@ -80,6 +80,8 @@ - #define NOUVEAU_GETPARAM_VM_VRAM_BASE 12 - #define NOUVEAU_GETPARAM_GRAPH_UNITS 13 - #define NOUVEAU_GETPARAM_PTIMER_TIME 14 -+#define NOUVEAU_GETPARAM_HAS_BO_USAGE 15 -+#define NOUVEAU_GETPARAM_HAS_PAGEFLIP 16 - struct drm_nouveau_getparam { - uint64_t param; - uint64_t value; -@@ -95,6 +97,12 @@ - #define NOUVEAU_GEM_DOMAIN_GART (1 << 2) - #define NOUVEAU_GEM_DOMAIN_MAPPABLE (1 << 3) - -+#define NOUVEAU_GEM_TILE_LAYOUT_MASK 0x0000ff00 -+#define NOUVEAU_GEM_TILE_16BPP 0x00000001 -+#define NOUVEAU_GEM_TILE_32BPP 0x00000002 -+#define NOUVEAU_GEM_TILE_ZETA 0x00000004 -+#define NOUVEAU_GEM_TILE_NONCONTIG 0x00000008 -+ - struct drm_nouveau_gem_info { - uint32_t handle; - uint32_t domain; -@@ -164,7 +172,6 @@ - }; - - #define NOUVEAU_GEM_CPU_PREP_NOWAIT 0x00000001 --#define NOUVEAU_GEM_CPU_PREP_NOBLOCK 0x00000002 - #define NOUVEAU_GEM_CPU_PREP_WRITE 0x00000004 - struct drm_nouveau_gem_cpu_prep { - uint32_t handle; -diff -Naur linux-2.6.36/include/drm/ttm/ttm_bo_api.h linux-2.6.36.nouveau/include/drm/ttm/ttm_bo_api.h ---- linux-2.6.36/include/drm/ttm/ttm_bo_api.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/include/drm/ttm/ttm_bo_api.h 2010-11-05 00:40:00.000000000 +0100 -@@ -102,7 +102,8 @@ - */ - - struct ttm_mem_reg { -- struct drm_mm_node *mm_node; -+ void *mm_node; -+ unsigned long start; - unsigned long size; - unsigned long num_pages; - uint32_t page_alignment; -diff -Naur linux-2.6.36/include/drm/ttm/ttm_bo_driver.h linux-2.6.36.nouveau/include/drm/ttm/ttm_bo_driver.h ---- linux-2.6.36/include/drm/ttm/ttm_bo_driver.h 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36.nouveau/include/drm/ttm/ttm_bo_driver.h 2010-11-05 00:40:00.000000000 +0100 -@@ -203,7 +203,22 @@ - * It's set up by the ttm_bo_driver::init_mem_type method. - */ - -+struct ttm_mem_type_manager; -+ -+struct ttm_mem_type_manager_func { -+ int (*init)(struct ttm_mem_type_manager *man, unsigned long p_size); -+ int (*takedown)(struct ttm_mem_type_manager *man); -+ int (*get_node)(struct ttm_mem_type_manager *man, -+ struct ttm_buffer_object *bo, -+ struct ttm_placement *placement, -+ struct ttm_mem_reg *mem); -+ void (*put_node)(struct ttm_mem_type_manager *man, -+ struct ttm_mem_reg *mem); -+ void (*debug)(struct ttm_mem_type_manager *man, const char *prefix); -+}; -+ - struct ttm_mem_type_manager { -+ struct ttm_bo_device *bdev; - - /* - * No protection. Constant from start. -@@ -222,8 +237,8 @@ - * TODO: Consider one lru_lock per ttm_mem_type_manager. - * Plays ill with list removal, though. - */ -- -- struct drm_mm manager; -+ const struct ttm_mem_type_manager_func *func; -+ void *priv; - struct list_head lru; - }; - -@@ -649,6 +664,10 @@ - struct ttm_mem_reg *mem, - bool interruptible, - bool no_wait_reserve, bool no_wait_gpu); -+ -+extern void ttm_bo_mem_put(struct ttm_buffer_object *bo, -+ struct ttm_mem_reg *mem); -+ - /** - * ttm_bo_wait_for_cpu - * -@@ -891,6 +910,8 @@ - */ - extern pgprot_t ttm_io_prot(uint32_t caching_flags, pgprot_t tmp); - -+extern const struct ttm_mem_type_manager_func ttm_bo_manager_func; -+ - #if (defined(CONFIG_AGP) || (defined(CONFIG_AGP_MODULE) && defined(MODULE))) - #define TTM_HAS_AGP - #include diff --git a/packages/linux/patches/linux-2.6.37-rc2-000_crosscompile.patch b/packages/linux/patches/linux-2.6.37-rc3-000_crosscompile.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc2-000_crosscompile.patch rename to packages/linux/patches/linux-2.6.37-rc3-000_crosscompile.patch diff --git a/packages/linux/patches/linux-2.6.37-rc2-000_fix_include.patch b/packages/linux/patches/linux-2.6.37-rc3-000_fix_include.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc2-000_fix_include.patch rename to packages/linux/patches/linux-2.6.37-rc3-000_fix_include.patch diff --git a/packages/linux/patches/linux-2.6.37-rc2-000_fix_userspace_build_of_fs.h.patch b/packages/linux/patches/linux-2.6.37-rc3-000_fix_userspace_build_of_fs.h.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc2-000_fix_userspace_build_of_fs.h.patch rename to packages/linux/patches/linux-2.6.37-rc3-000_fix_userspace_build_of_fs.h.patch diff --git a/packages/linux/patches/linux-2.6.37-rc2-002_bash_only_feature.patch b/packages/linux/patches/linux-2.6.37-rc3-002_bash_only_feature.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc2-002_bash_only_feature.patch rename to packages/linux/patches/linux-2.6.37-rc3-002_bash_only_feature.patch diff --git a/packages/linux/patches/linux-2.6.37-rc2-003-no_dev_console.patch b/packages/linux/patches/linux-2.6.37-rc3-003-no_dev_console.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc2-003-no_dev_console.patch rename to packages/linux/patches/linux-2.6.37-rc3-003-no_dev_console.patch diff --git a/packages/linux/patches/linux-2.6.37-rc2-004_lower_undefined_mode_timeout.patch b/packages/linux/patches/linux-2.6.37-rc3-004_lower_undefined_mode_timeout.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc2-004_lower_undefined_mode_timeout.patch rename to packages/linux/patches/linux-2.6.37-rc3-004_lower_undefined_mode_timeout.patch diff --git a/packages/linux/patches/linux-2.6.37-rc2-005_kconfig_no_timestamp.patch b/packages/linux/patches/linux-2.6.37-rc3-005_kconfig_no_timestamp.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc2-005_kconfig_no_timestamp.patch rename to packages/linux/patches/linux-2.6.37-rc3-005_kconfig_no_timestamp.patch diff --git a/packages/linux/patches/linux-2.6.37-rc2-006_enable_utf8.patch b/packages/linux/patches/linux-2.6.37-rc3-006_enable_utf8.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc2-006_enable_utf8.patch rename to packages/linux/patches/linux-2.6.37-rc3-006_enable_utf8.patch diff --git a/packages/linux/patches/linux-2.6.37-rc2-007_die_floppy_die.patch b/packages/linux/patches/linux-2.6.37-rc3-007_die_floppy_die.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc2-007_die_floppy_die.patch rename to packages/linux/patches/linux-2.6.37-rc3-007_die_floppy_die.patch diff --git a/packages/linux/patches/linux-2.6.37-rc2-008-hda_intel_prealloc_4mb_dmabuffer.patch b/packages/linux/patches/linux-2.6.37-rc3-008-hda_intel_prealloc_4mb_dmabuffer.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc2-008-hda_intel_prealloc_4mb_dmabuffer.patch rename to packages/linux/patches/linux-2.6.37-rc3-008-hda_intel_prealloc_4mb_dmabuffer.patch diff --git a/packages/linux/patches/linux-2.6.37-rc2-009_disable_i8042_check_on_apple_mac.patch b/packages/linux/patches/linux-2.6.37-rc3-009_disable_i8042_check_on_apple_mac.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc2-009_disable_i8042_check_on_apple_mac.patch rename to packages/linux/patches/linux-2.6.37-rc3-009_disable_i8042_check_on_apple_mac.patch diff --git a/packages/linux/patches/linux-2.6.37-rc2-050_add_appleir_usb_driver.patch b/packages/linux/patches/linux-2.6.37-rc3-050_add_appleir_usb_driver.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc2-050_add_appleir_usb_driver.patch rename to packages/linux/patches/linux-2.6.37-rc3-050_add_appleir_usb_driver.patch diff --git a/packages/linux/patches/linux-2.6.37-rc2-052-aureal_remote_quirk-0.1.patch b/packages/linux/patches/linux-2.6.37-rc3-052-aureal_remote_quirk-0.1.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc2-052-aureal_remote_quirk-0.1.patch rename to packages/linux/patches/linux-2.6.37-rc3-052-aureal_remote_quirk-0.1.patch diff --git a/packages/linux/patches/linux-2.6.37-rc2-110-drm_nouveau_upstream-20101121.patch b/packages/linux/patches/linux-2.6.37-rc3-110-drm_nouveau_upstream-20101122.patch similarity index 87% rename from packages/linux/patches/linux-2.6.37-rc2-110-drm_nouveau_upstream-20101121.patch rename to packages/linux/patches/linux-2.6.37-rc3-110-drm_nouveau_upstream-20101122.patch index 27336e0af1..eadd453274 100644 --- a/packages/linux/patches/linux-2.6.37-rc2-110-drm_nouveau_upstream-20101121.patch +++ b/packages/linux/patches/linux-2.6.37-rc3-110-drm_nouveau_upstream-20101122.patch @@ -1,6 +1,6 @@ -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/Makefile linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/Makefile ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/Makefile 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/Makefile 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/Makefile linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/Makefile +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/Makefile 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/Makefile 2010-11-22 06:33:32.000000000 +0100 @@ -5,7 +5,7 @@ ccflags-y := -Iinclude/drm nouveau-y := nouveau_drv.o nouveau_state.o nouveau_channel.o nouveau_mem.o \ @@ -21,35 +21,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/Makefile linux-2.6.37-rc2.no nv50_cursor.o nv50_display.o nv50_fbcon.o \ nv04_dac.o nv04_dfp.o nv04_tv.o nv17_tv.o nv17_tv_modes.o \ nv04_crtc.o nv04_display.o nv04_cursor.o nv04_fbcon.o \ -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_backlight.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_backlight.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_backlight.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_backlight.c 2010-11-20 14:43:51.000000000 +0100 -@@ -31,6 +31,7 @@ - */ - - #include -+#include - - #include "drmP.h" - #include "nouveau_drv.h" -@@ -136,6 +137,14 @@ - { - struct drm_nouveau_private *dev_priv = dev->dev_private; - -+#ifdef CONFIG_ACPI -+ if (acpi_video_backlight_support()) { -+ NV_INFO(dev, "ACPI backlight interface available, " -+ "not registering our own\n"); -+ return 0; -+ } -+#endif -+ - switch (dev_priv->card_type) { - case NV_40: - return nouveau_nv40_backlight_init(dev); -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_bios.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_bios.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_bios.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_bios.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_bios.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_bios.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_bios.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_bios.c 2010-11-22 06:33:32.000000000 +0100 @@ -6039,7 +6039,6 @@ if (type != cte->type) NV_WARN(dev, " -> type 0x%02x\n", cte->type); @@ -192,15 +166,6 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_bios.c linux-2.6.37- return 0; } -@@ -6829,7 +6802,7 @@ - struct drm_nouveau_private *dev_priv = dev->dev_private; - unsigned htotal; - -- if (dev_priv->chipset >= NV_50) { -+ if (dev_priv->card_type >= NV_50) { - if (NVReadVgaCrtc(dev, 0, 0x00) == 0 && - NVReadVgaCrtc(dev, 0, 0x1a) == 0) - return false; @@ -6859,7 +6832,7 @@ if (ret) return ret; @@ -210,9 +175,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_bios.c linux-2.6.37- if (ret) return ret; -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_bo.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_bo.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_bo.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_bo.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_bo.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_bo.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_bo.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_bo.c 2010-11-22 06:33:32.000000000 +0100 @@ -46,9 +46,7 @@ if (unlikely(nvbo->gem)) DRM_ERROR("bo %p still attached to GEM object\n", bo); @@ -224,60 +189,19 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_bo.c linux-2.6.37-rc kfree(nvbo); } -@@ -143,8 +141,10 @@ - nvbo->no_vm = no_vm; - nvbo->tile_mode = tile_mode; - nvbo->tile_flags = tile_flags; -+ nvbo->bo.bdev = &dev_priv->ttm.bdev; - -- nouveau_bo_fixup_align(dev, tile_mode, tile_flags, &align, &size); -+ nouveau_bo_fixup_align(dev, tile_mode, nouveau_bo_tile_layout(nvbo), -+ &align, &size); - align >>= PAGE_SHIFT; - - nouveau_bo_placement_set(nvbo, flags, 0); -@@ -176,6 +176,31 @@ - pl[(*n)++] = TTM_PL_FLAG_SYSTEM | flags; - } - -+static void -+set_placement_range(struct nouveau_bo *nvbo, uint32_t type) -+{ -+ struct drm_nouveau_private *dev_priv = nouveau_bdev(nvbo->bo.bdev); -+ -+ if (dev_priv->card_type == NV_10 && -+ nvbo->tile_mode && (type & TTM_PL_FLAG_VRAM)) { -+ /* -+ * Make sure that the color and depth buffers are handled -+ * by independent memory controller units. Up to a 9x -+ * speed up when alpha-blending and depth-test are enabled -+ * at the same time. -+ */ -+ int vram_pages = dev_priv->vram_size >> PAGE_SHIFT; -+ -+ if (nvbo->tile_flags & NOUVEAU_GEM_TILE_ZETA) { -+ nvbo->placement.fpfn = vram_pages / 2; -+ nvbo->placement.lpfn = ~0; -+ } else { -+ nvbo->placement.fpfn = 0; -+ nvbo->placement.lpfn = vram_pages / 2; -+ } -+ } -+} -+ - void - nouveau_bo_placement_set(struct nouveau_bo *nvbo, uint32_t type, uint32_t busy) - { -@@ -190,6 +215,8 @@ - pl->busy_placement = nvbo->busy_placements; - set_placement_list(nvbo->busy_placements, &pl->num_busy_placement, - type | busy, flags); -+ -+ set_placement_range(nvbo, type); - } - - int -@@ -456,16 +483,9 @@ +@@ -426,8 +424,9 @@ + switch (dev_priv->gart_info.type) { + case NOUVEAU_GART_AGP: + man->flags = TTM_MEMTYPE_FLAG_MAPPABLE; +- man->available_caching = TTM_PL_FLAG_UNCACHED; +- man->default_caching = TTM_PL_FLAG_UNCACHED; ++ man->available_caching = TTM_PL_FLAG_UNCACHED | ++ TTM_PL_FLAG_WC; ++ man->default_caching = TTM_PL_FLAG_WC; + break; + case NOUVEAU_GART_SGDMA: + man->flags = TTM_MEMTYPE_FLAG_MAPPABLE | +@@ -485,16 +484,9 @@ if (ret) return ret; @@ -295,27 +219,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_bo.c linux-2.6.37-rc return ret; } -@@ -525,7 +545,8 @@ - stride = 16 * 4; - height = amount / stride; - -- if (new_mem->mem_type == TTM_PL_VRAM && nvbo->tile_flags) { -+ if (new_mem->mem_type == TTM_PL_VRAM && -+ nouveau_bo_tile_layout(nvbo)) { - ret = RING_SPACE(chan, 8); - if (ret) - return ret; -@@ -546,7 +567,8 @@ - BEGIN_RING(chan, NvSubM2MF, 0x0200, 1); - OUT_RING (chan, 1); - } -- if (old_mem->mem_type == TTM_PL_VRAM && nvbo->tile_flags) { -+ if (old_mem->mem_type == TTM_PL_VRAM && -+ nouveau_bo_tile_layout(nvbo)) { - ret = RING_SPACE(chan, 8); - if (ret) - return ret; -@@ -652,17 +674,24 @@ +@@ -683,17 +675,24 @@ int ret; chan = nvbo->channel; @@ -344,16 +248,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_bo.c linux-2.6.37-rc } static int -@@ -753,14 +782,16 @@ - if (dev_priv->card_type == NV_50) { - ret = nv50_mem_vm_bind_linear(dev, - offset + dev_priv->vm_vram_base, -- new_mem->size, nvbo->tile_flags, -+ new_mem->size, -+ nouveau_bo_tile_layout(nvbo), - offset); - if (ret) - return ret; +@@ -792,7 +791,8 @@ } else if (dev_priv->card_type >= NV_10) { *new_tile = nv10_mem_set_tiling(dev, offset, new_mem->size, @@ -363,7 +258,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_bo.c linux-2.6.37-rc } return 0; -@@ -776,9 +807,7 @@ +@@ -808,9 +808,7 @@ if (dev_priv->card_type >= NV_10 && dev_priv->card_type < NV_50) { @@ -374,17 +269,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_bo.c linux-2.6.37-rc *old_tile = new_tile; } } -@@ -894,7 +923,8 @@ - * nothing to do here. - */ - if (bo->mem.mem_type != TTM_PL_VRAM) { -- if (dev_priv->card_type < NV_50 || !nvbo->tile_flags) -+ if (dev_priv->card_type < NV_50 || -+ !nouveau_bo_tile_layout(nvbo)) - return 0; - } - -@@ -909,6 +939,22 @@ +@@ -942,6 +940,22 @@ return ttm_bo_validate(bo, &nvbo->placement, false, true, false); } @@ -407,7 +292,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_bo.c linux-2.6.37-rc struct ttm_bo_driver nouveau_bo_driver = { .create_ttm_backend_entry = nouveau_bo_create_ttm_backend_entry, .invalidate_caches = nouveau_bo_invalidate_caches, -@@ -916,11 +962,11 @@ +@@ -949,11 +963,11 @@ .evict_flags = nouveau_bo_evict_flags, .move = nouveau_bo_move, .verify_access = nouveau_bo_verify_access, @@ -424,9 +309,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_bo.c linux-2.6.37-rc .fault_reserve_notify = &nouveau_ttm_fault_reserve_notify, .io_mem_reserve = &nouveau_ttm_io_mem_reserve, .io_mem_free = &nouveau_ttm_io_mem_free, -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_channel.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_channel.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_channel.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_channel.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_channel.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_channel.c 2010-11-22 06:33:32.000000000 +0100 @@ -39,22 +39,22 @@ if (dev_priv->card_type >= NV_50) { @@ -634,7 +519,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6. return ret; } -@@ -225,83 +229,121 @@ +@@ -225,83 +229,108 @@ if (!ret) ret = nouveau_fence_channel_init(chan); if (ret) { @@ -698,7 +583,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6. + struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; + struct nouveau_crypt_engine *pcrypt = &dev_priv->engine.crypt; unsigned long flags; - int ret; +- int ret; - NV_INFO(dev, "%s: freeing fifo %d\n", __func__, chan->id); + /* decrement the refcount, and we're done if there's still refs */ @@ -712,22 +597,21 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6. nouveau_debugfs_channel_fini(chan); - /* Give outstanding push buffers a chance to complete */ -+ /* give it chance to idle */ - nouveau_fence_update(chan); - if (chan->fence.sequence != chan->fence.sequence_ack) { - struct nouveau_fence *fence = NULL; - - ret = nouveau_fence_new(chan, &fence, true); - if (ret == 0) { +- nouveau_fence_update(chan); +- if (chan->fence.sequence != chan->fence.sequence_ack) { +- struct nouveau_fence *fence = NULL; +- +- ret = nouveau_fence_new(chan, &fence, true); +- if (ret == 0) { - ret = nouveau_fence_wait(fence, NULL, false, false); - nouveau_fence_unref((void *)&fence); -+ ret = nouveau_fence_wait(fence, false, false); -+ nouveau_fence_unref(&fence); - } - - if (ret) - NV_ERROR(dev, "Failed to idle channel %d.\n", chan->id); - } +- } +- +- if (ret) +- NV_ERROR(dev, "Failed to idle channel %d.\n", chan->id); +- } ++ /* give it chance to idle */ ++ nouveau_channel_idle(chan); - /* Ensure all outstanding fences are signaled. They should be if the + /* ensure all outstanding fences are signaled. they should be if the @@ -785,7 +669,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6. nouveau_gpuobj_ref(NULL, &chan->pushbuf); if (chan->pushbuf_bo) { nouveau_bo_unmap(chan->pushbuf_bo); -@@ -310,44 +352,62 @@ +@@ -310,44 +339,83 @@ } nouveau_gpuobj_channel_takedown(chan); nouveau_notifier_takedown_channel(chan); @@ -825,6 +709,27 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6. + + *pchan = chan; +} ++ ++void ++nouveau_channel_idle(struct nouveau_channel *chan) ++{ ++ struct drm_device *dev = chan->dev; ++ struct nouveau_fence *fence = NULL; ++ int ret; ++ ++ nouveau_fence_update(chan); ++ ++ if (chan->fence.sequence != chan->fence.sequence_ack) { ++ ret = nouveau_fence_new(chan, &fence, true); ++ if (!ret) { ++ ret = nouveau_fence_wait(fence, false, false); ++ nouveau_fence_unref(&fence); ++ } ++ ++ if (ret) ++ NV_ERROR(dev, "Failed to idle channel %d.\n", chan->id); ++ } ++} + /* cleans up all the fifos from file_priv */ void @@ -866,7 +771,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6. /*********************************** * ioctls wrapping the functions -@@ -395,24 +455,26 @@ +@@ -395,24 +463,26 @@ /* Named memory object area */ ret = drm_gem_handle_create(file_priv, chan->notifier_bo->gem, &init->notifier_handle); @@ -901,7 +806,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6. return 0; } -@@ -421,18 +483,18 @@ +@@ -421,18 +491,18 @@ ***********************************/ struct drm_ioctl_desc nouveau_ioctls[] = { @@ -932,9 +837,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_channel.c linux-2.6. }; int nouveau_max_ioctl = DRM_ARRAY_SIZE(nouveau_ioctls); -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_connector.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_connector.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_connector.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_connector.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.c 2010-11-22 06:33:32.000000000 +0100 @@ -37,6 +37,8 @@ #include "nouveau_connector.h" #include "nouveau_hw.h" @@ -981,106 +886,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_connector.c linux-2. } static struct nouveau_i2c_chan * -@@ -281,7 +291,7 @@ - nv_encoder = find_encoder_by_type(connector, OUTPUT_ANALOG); - if (!nv_encoder && !nouveau_tv_disable) - nv_encoder = find_encoder_by_type(connector, OUTPUT_TV); -- if (nv_encoder) { -+ if (nv_encoder && force) { - struct drm_encoder *encoder = to_drm_encoder(nv_encoder); - struct drm_encoder_helper_funcs *helper = - encoder->helper_private; -@@ -641,11 +651,28 @@ - return ret; - } - -+static unsigned -+get_tmds_link_bandwidth(struct drm_connector *connector) -+{ -+ struct nouveau_connector *nv_connector = nouveau_connector(connector); -+ struct drm_nouveau_private *dev_priv = connector->dev->dev_private; -+ struct dcb_entry *dcb = nv_connector->detected_encoder->dcb; -+ -+ if (dcb->location != DCB_LOC_ON_CHIP || -+ dev_priv->chipset >= 0x46) -+ return 165000; -+ else if (dev_priv->chipset >= 0x40) -+ return 155000; -+ else if (dev_priv->chipset >= 0x18) -+ return 135000; -+ else -+ return 112000; -+} -+ - static int - nouveau_connector_mode_valid(struct drm_connector *connector, - struct drm_display_mode *mode) - { -- struct drm_nouveau_private *dev_priv = connector->dev->dev_private; - struct nouveau_connector *nv_connector = nouveau_connector(connector); - struct nouveau_encoder *nv_encoder = nv_connector->detected_encoder; - struct drm_encoder *encoder = to_drm_encoder(nv_encoder); -@@ -663,11 +690,9 @@ - max_clock = 400000; - break; - case OUTPUT_TMDS: -- if ((dev_priv->card_type >= NV_50 && !nouveau_duallink) || -- !nv_encoder->dcb->duallink_possible) -- max_clock = 165000; -- else -- max_clock = 330000; -+ max_clock = get_tmds_link_bandwidth(connector); -+ if (nouveau_duallink && nv_encoder->dcb->duallink_possible) -+ max_clock *= 2; - break; - case OUTPUT_ANALOG: - max_clock = nv_encoder->dcb->crtconf.maxfreq; -@@ -709,44 +734,6 @@ - return NULL; - } - --void --nouveau_connector_set_polling(struct drm_connector *connector) --{ -- struct drm_device *dev = connector->dev; -- struct drm_nouveau_private *dev_priv = dev->dev_private; -- struct drm_crtc *crtc; -- bool spare_crtc = false; -- -- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) -- spare_crtc |= !crtc->enabled; -- -- connector->polled = 0; -- -- switch (connector->connector_type) { -- case DRM_MODE_CONNECTOR_VGA: -- case DRM_MODE_CONNECTOR_TV: -- if (dev_priv->card_type >= NV_50 || -- (nv_gf4_disp_arch(dev) && spare_crtc)) -- connector->polled = DRM_CONNECTOR_POLL_CONNECT; -- break; -- -- case DRM_MODE_CONNECTOR_DVII: -- case DRM_MODE_CONNECTOR_DVID: -- case DRM_MODE_CONNECTOR_HDMIA: -- case DRM_MODE_CONNECTOR_DisplayPort: -- case DRM_MODE_CONNECTOR_eDP: -- if (dev_priv->card_type >= NV_50) -- connector->polled = DRM_CONNECTOR_POLL_HPD; -- else if (connector->connector_type == DRM_MODE_CONNECTOR_DVID || -- spare_crtc) -- connector->polled = DRM_CONNECTOR_POLL_CONNECT; -- break; -- -- default: -- break; -- } --} -- - static const struct drm_connector_helper_funcs - nouveau_connector_helper_funcs = { - .get_modes = nouveau_connector_get_modes, -@@ -783,6 +770,7 @@ +@@ -760,6 +770,7 @@ { const struct drm_connector_funcs *funcs = &nouveau_connector_funcs; struct drm_nouveau_private *dev_priv = dev->dev_private; @@ -1088,37 +894,19 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_connector.c linux-2. struct nouveau_connector *nv_connector = NULL; struct dcb_connector_table_entry *dcb = NULL; struct drm_connector *connector; -@@ -872,6 +860,7 @@ - dev->mode_config.scaling_mode_property, - nv_connector->scaling_mode); - } -+ connector->polled = DRM_CONNECTOR_POLL_CONNECT; - /* fall-through */ - case DCB_CONNECTOR_TV_0: - case DCB_CONNECTOR_TV_1: -@@ -888,10 +877,20 @@ - dev->mode_config.dithering_mode_property, - nv_connector->use_dithering ? - DRM_MODE_DITHERING_ON : DRM_MODE_DITHERING_OFF); -+ -+ if (dcb->type != DCB_CONNECTOR_LVDS) { -+ if (dev_priv->card_type >= NV_50) -+ connector->polled = DRM_CONNECTOR_POLL_HPD; -+ else -+ connector->polled = DRM_CONNECTOR_POLL_CONNECT; -+ } +@@ -876,6 +887,11 @@ break; } -- nouveau_connector_set_polling(connector); + if (pgpio->irq_register) { + pgpio->irq_register(dev, nv_connector->dcb->gpio_tag, + nouveau_connector_hotplug, connector); + } - ++ drm_sysfs_connector_add(connector); dcb->drm = connector; -@@ -903,3 +902,29 @@ + return dcb->drm; +@@ -886,3 +902,29 @@ return ERR_PTR(ret); } @@ -1148,22 +936,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_connector.c linux-2. + + drm_helper_hpd_irq_event(dev); +} -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_connector.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.h ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_connector.h 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_connector.h 2010-11-20 14:43:51.000000000 +0100 -@@ -52,9 +52,6 @@ - struct drm_connector * - nouveau_connector_create(struct drm_device *, int index); - --void --nouveau_connector_set_polling(struct drm_connector *); -- - int - nouveau_connector_bpp(struct drm_connector *); - -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_display.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_display.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_display.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_display.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_display.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_display.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_display.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_display.c 2010-11-22 06:33:32.000000000 +0100 @@ -29,6 +29,9 @@ #include "nouveau_drv.h" #include "nouveau_fb.h" @@ -1382,9 +1157,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_display.c linux-2.6. + spin_unlock_irqrestore(&dev->event_lock, flags); + return 0; +} -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_dp.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_dp.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_dp.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_dp.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_dp.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_dp.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_dp.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_dp.c 2010-11-22 06:33:32.000000000 +0100 @@ -279,7 +279,7 @@ struct bit_displayport_encoder_table *dpe; int dpe_headerlen; @@ -1412,9 +1187,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_dp.c linux-2.6.37-rc return eq_done; } -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_drv.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_drv.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.c 2010-11-22 06:33:32.000000000 +0100 @@ -115,6 +115,10 @@ int nouveau_perflvl_wr; module_param_named(perflvl_wr, nouveau_perflvl_wr, int, 0400); @@ -1426,27 +1201,34 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.c linux-2.6.37-r int nouveau_fbpercrtc; #if 0 module_param_named(fbpercrtc, nouveau_fbpercrtc, int, 0400); -@@ -195,15 +199,14 @@ - for (i = 0; i < pfifo->channels; i++) { - struct nouveau_fence *fence = NULL; +@@ -193,23 +197,10 @@ + NV_INFO(dev, "Idling channels...\n"); + for (i = 0; i < pfifo->channels; i++) { +- struct nouveau_fence *fence = NULL; +- - chan = dev_priv->fifos[i]; - if (!chan || (dev_priv->card_type >= NV_50 && - chan == dev_priv->fifos[0])) +- continue; + chan = dev_priv->channels.ptr[i]; -+ if (!chan || !chan->pushbuf_bo) - continue; - ret = nouveau_fence_new(chan, &fence, true); - if (ret == 0) { +- ret = nouveau_fence_new(chan, &fence, true); +- if (ret == 0) { - ret = nouveau_fence_wait(fence, NULL, false, false); - nouveau_fence_unref((void *)&fence); -+ ret = nouveau_fence_wait(fence, false, false); -+ nouveau_fence_unref(&fence); - } +- } +- +- if (ret) { +- NV_ERROR(dev, "Failed to idle channel %d for suspend\n", +- chan->id); +- } ++ if (chan && chan->pushbuf_bo) ++ nouveau_channel_idle(chan); + } - if (ret) { -@@ -219,17 +222,17 @@ + pgraph->fifo_access(dev, false); +@@ -219,17 +210,17 @@ pfifo->unload_context(dev); pgraph->unload_context(dev); @@ -1468,7 +1250,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.c linux-2.6.37-r goto out_abort; } -@@ -294,17 +297,18 @@ +@@ -294,17 +285,18 @@ } } @@ -1490,7 +1272,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.c linux-2.6.37-r nouveau_irq_postinstall(dev); /* Re-write SKIPS, they'll have been lost over the suspend */ -@@ -313,7 +317,7 @@ +@@ -313,7 +305,7 @@ int j; for (i = 0; i < dev_priv->engine.fifo.channels; i++) { @@ -1499,7 +1281,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.c linux-2.6.37-r if (!chan || !chan->pushbuf_bo) continue; -@@ -393,6 +397,9 @@ +@@ -393,6 +385,9 @@ .irq_postinstall = nouveau_irq_postinstall, .irq_uninstall = nouveau_irq_uninstall, .irq_handler = nouveau_irq_handler, @@ -1509,7 +1291,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.c linux-2.6.37-r .reclaim_buffers = drm_core_reclaim_buffers, .ioctls = nouveau_ioctls, .fops = { -@@ -403,6 +410,7 @@ +@@ -403,6 +398,7 @@ .mmap = nouveau_ttm_mmap, .poll = drm_poll, .fasync = drm_fasync, @@ -1517,7 +1299,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.c linux-2.6.37-r #if defined(CONFIG_COMPAT) .compat_ioctl = nouveau_compat_ioctl, #endif -@@ -448,6 +456,12 @@ +@@ -448,6 +444,12 @@ if (!nouveau_modeset) return 0; @@ -1530,9 +1312,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.c linux-2.6.37-r nouveau_register_dsm_handler(); return drm_init(&driver); } -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.h ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.h 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.h +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_drv.h 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_drv.h 2010-11-22 06:33:32.000000000 +0100 @@ -54,6 +54,7 @@ #include "nouveau_drm.h" #include "nouveau_reg.h" @@ -1558,7 +1340,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r }; struct nouveau_bo { -@@ -96,10 +100,12 @@ +@@ -96,7 +100,6 @@ struct nouveau_tile_reg *tile; struct drm_gem_object *gem; @@ -1566,13 +1348,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r int pin_refcnt; }; -+#define nouveau_bo_tile_layout(nvbo) \ -+ ((nvbo)->tile_flags & NOUVEAU_GEM_TILE_LAYOUT_MASK) -+ - static inline struct nouveau_bo * - nouveau_bo(struct ttm_buffer_object *bo) - { -@@ -130,20 +136,26 @@ +@@ -133,20 +136,26 @@ #define NVOBJ_ENGINE_SW 0 #define NVOBJ_ENGINE_GR 1 @@ -1604,7 +1380,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r uint32_t flags; -@@ -159,10 +171,29 @@ +@@ -162,10 +171,29 @@ void *priv; }; @@ -1634,7 +1410,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r /* owner of this fifo */ struct drm_file *file_priv; /* mapping of the fifo itself */ -@@ -199,6 +230,7 @@ +@@ -202,6 +230,7 @@ /* PGRAPH context */ /* XXX may be merge 2 pointers as private data ??? */ struct nouveau_gpuobj *ramin_grctx; @@ -1642,7 +1418,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r void *pgraph_ctx; /* NV50 VM */ -@@ -235,9 +267,11 @@ +@@ -238,9 +267,11 @@ struct { struct nouveau_gpuobj *vblsem; @@ -1654,7 +1430,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r } nvsw; struct { -@@ -255,11 +289,11 @@ +@@ -258,11 +289,11 @@ int (*suspend)(struct drm_device *dev); void (*resume)(struct drm_device *dev); @@ -1671,7 +1447,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r void (*flush)(struct drm_device *); }; -@@ -276,12 +310,17 @@ +@@ -279,12 +310,17 @@ struct nouveau_fb_engine { int num_tiles; @@ -1691,12 +1467,10 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r }; struct nouveau_fifo_engine { -@@ -304,23 +343,12 @@ - void (*destroy_context)(struct nouveau_channel *); - int (*load_context)(struct nouveau_channel *); - int (*unload_context)(struct drm_device *); --}; -- +@@ -310,21 +346,9 @@ + void (*tlb_flush)(struct drm_device *dev); + }; + -struct nouveau_pgraph_object_method { - int id; - int (*exec)(struct nouveau_channel *chan, int grclass, int mthd, @@ -1707,9 +1481,8 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r - int id; - bool software; - struct nouveau_pgraph_object_method *methods; -+ void (*tlb_flush)(struct drm_device *dev); - }; - +-}; +- struct nouveau_pgraph_engine { - struct nouveau_pgraph_object_class *grclass; bool accel_blocked; @@ -1717,11 +1490,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r int grctx_size; /* NV2x/NV3x context table (0x400780) */ -@@ -336,9 +364,9 @@ - void (*destroy_context)(struct nouveau_channel *); - int (*load_context)(struct nouveau_channel *); +@@ -342,8 +366,7 @@ int (*unload_context)(struct drm_device *); -+ void (*tlb_flush)(struct drm_device *dev); + void (*tlb_flush)(struct drm_device *dev); - void (*set_region_tiling)(struct drm_device *dev, int i, uint32_t addr, - uint32_t size, uint32_t pitch); @@ -1729,7 +1500,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r }; struct nouveau_display_engine { -@@ -350,13 +378,19 @@ +@@ -355,13 +378,19 @@ }; struct nouveau_gpio_engine { @@ -1750,7 +1521,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r }; struct nouveau_pm_voltage_level { -@@ -432,6 +466,7 @@ +@@ -437,6 +466,7 @@ struct nouveau_pm_level *cur; struct device *hwmon; @@ -1758,7 +1529,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r int (*clock_get)(struct drm_device *, u32 id); void *(*clock_pre)(struct drm_device *, struct nouveau_pm_level *, -@@ -444,6 +479,16 @@ +@@ -449,6 +479,16 @@ int (*temp_get)(struct drm_device *); }; @@ -1775,7 +1546,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r struct nouveau_engine { struct nouveau_instmem_engine instmem; struct nouveau_mc_engine mc; -@@ -454,6 +499,7 @@ +@@ -459,6 +499,7 @@ struct nouveau_display_engine display; struct nouveau_gpio_engine gpio; struct nouveau_pm_engine pm; @@ -1783,68 +1554,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r }; struct nouveau_pll_vals { -@@ -485,13 +531,13 @@ - }; - - struct nv04_crtc_reg { -- unsigned char MiscOutReg; /* */ -+ unsigned char MiscOutReg; - uint8_t CRTC[0xa0]; - uint8_t CR58[0x10]; - uint8_t Sequencer[5]; - uint8_t Graphics[9]; - uint8_t Attribute[21]; -- unsigned char DAC[768]; /* Internal Colorlookuptable */ -+ unsigned char DAC[768]; - - /* PCRTC regs */ - uint32_t fb_start; -@@ -539,43 +585,9 @@ - }; - - struct nv04_mode_state { -- uint32_t bpp; -- uint32_t width; -- uint32_t height; -- uint32_t interlace; -- uint32_t repaint0; -- uint32_t repaint1; -- uint32_t screen; -- uint32_t scale; -- uint32_t dither; -- uint32_t extra; -- uint32_t fifo; -- uint32_t pixel; -- uint32_t horiz; -- int arbitration0; -- int arbitration1; -- uint32_t pll; -- uint32_t pllB; -- uint32_t vpll; -- uint32_t vpll2; -- uint32_t vpllB; -- uint32_t vpll2B; -+ struct nv04_crtc_reg crtc_reg[2]; - uint32_t pllsel; - uint32_t sel_clk; -- uint32_t general; -- uint32_t crtcOwner; -- uint32_t head; -- uint32_t head2; -- uint32_t cursorConfig; -- uint32_t cursor0; -- uint32_t cursor1; -- uint32_t cursor2; -- uint32_t timingH; -- uint32_t timingV; -- uint32_t displayV; -- uint32_t crtcSync; -- -- struct nv04_crtc_reg crtc_reg[2]; - }; - - enum nouveau_card_type { -@@ -606,12 +618,15 @@ +@@ -577,18 +618,15 @@ bool ramin_available; struct drm_mm ramin_heap; struct list_head gpuobj_list; @@ -1858,10 +1568,16 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r struct workqueue_struct *wq; struct work_struct irq_work; - struct work_struct hpd_work; +- +- struct { +- spinlock_t lock; +- uint32_t hpd0_bits; +- uint32_t hpd1_bits; +- } hpd_state; struct list_head vbl_waiting; -@@ -628,8 +643,10 @@ +@@ -605,8 +643,10 @@ struct nouveau_bo *bo; } fence; @@ -1874,7 +1590,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r struct nouveau_engine engine; struct nouveau_channel *channel; -@@ -655,12 +672,13 @@ +@@ -632,12 +672,13 @@ uint64_t aper_free; struct nouveau_gpuobj *sg_ctxdma; @@ -1891,7 +1607,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r /* VRAM/fb configuration */ uint64_t vram_size; -@@ -697,6 +715,7 @@ +@@ -674,6 +715,7 @@ struct backlight_device *backlight; struct nouveau_channel *evo; @@ -1899,7 +1615,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r struct { struct dcb_entry *dcb; u16 script; -@@ -742,16 +761,6 @@ +@@ -719,16 +761,6 @@ return 0; } @@ -1916,7 +1632,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r /* nouveau_drv.c */ extern int nouveau_agpmode; extern int nouveau_duallink; -@@ -771,6 +780,7 @@ +@@ -748,6 +780,7 @@ extern int nouveau_override_conntype; extern char *nouveau_perflvl; extern int nouveau_perflvl_wr; @@ -1924,7 +1640,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern int nouveau_pci_suspend(struct pci_dev *pdev, pm_message_t pm_state); extern int nouveau_pci_resume(struct pci_dev *pdev); -@@ -798,13 +808,12 @@ +@@ -775,13 +808,12 @@ extern int nouveau_mem_init_agp(struct drm_device *); extern int nouveau_mem_reset_agp(struct drm_device *); extern void nouveau_mem_close(struct drm_device *); @@ -1944,7 +1660,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern int nv50_mem_vm_bind_linear(struct drm_device *, uint64_t virt, uint32_t size, uint32_t flags, uint64_t phys); -@@ -826,21 +835,43 @@ +@@ -803,21 +835,44 @@ extern struct drm_ioctl_desc nouveau_ioctls[]; extern int nouveau_max_ioctl; extern void nouveau_channel_cleanup(struct drm_device *, struct drm_file *); @@ -1963,6 +1679,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r +extern void nouveau_channel_put(struct nouveau_channel **); +extern void nouveau_channel_ref(struct nouveau_channel *chan, + struct nouveau_channel **pchan); ++extern void nouveau_channel_idle(struct nouveau_channel *chan); /* nouveau_object.c */ +#define NVOBJ_CLASS(d,c,e) do { \ @@ -1992,7 +1709,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern int nouveau_gpuobj_channel_init(struct nouveau_channel *, uint32_t vram_h, uint32_t tt_h); extern void nouveau_gpuobj_channel_takedown(struct nouveau_channel *); -@@ -855,21 +886,26 @@ +@@ -832,21 +887,26 @@ extern int nouveau_gpuobj_dma_new(struct nouveau_channel *, int class, uint64_t offset, uint64_t size, int access, int target, struct nouveau_gpuobj **); @@ -2025,7 +1742,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern void nouveau_irq_preinstall(struct drm_device *); extern int nouveau_irq_postinstall(struct drm_device *); extern void nouveau_irq_uninstall(struct drm_device *); -@@ -989,18 +1025,25 @@ +@@ -966,18 +1026,25 @@ /* nv10_fb.c */ extern int nv10_fb_init(struct drm_device *); extern void nv10_fb_takedown(struct drm_device *); @@ -2055,7 +1772,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r /* nv50_fb.c */ extern int nv50_fb_init(struct drm_device *); extern void nv50_fb_takedown(struct drm_device *); -@@ -1012,6 +1055,7 @@ +@@ -989,6 +1056,7 @@ /* nv04_fifo.c */ extern int nv04_fifo_init(struct drm_device *); @@ -2063,7 +1780,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern void nv04_fifo_disable(struct drm_device *); extern void nv04_fifo_enable(struct drm_device *); extern bool nv04_fifo_reassign(struct drm_device *, bool); -@@ -1021,19 +1065,18 @@ +@@ -998,19 +1066,18 @@ extern void nv04_fifo_destroy_context(struct nouveau_channel *); extern int nv04_fifo_load_context(struct nouveau_channel *); extern int nv04_fifo_unload_context(struct drm_device *); @@ -2084,15 +1801,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern int nv40_fifo_load_context(struct nouveau_channel *); extern int nv40_fifo_unload_context(struct drm_device *); -@@ -1045,6 +1088,7 @@ - extern void nv50_fifo_destroy_context(struct nouveau_channel *); - extern int nv50_fifo_load_context(struct nouveau_channel *); - extern int nv50_fifo_unload_context(struct drm_device *); -+extern void nv50_fifo_tlb_flush(struct drm_device *dev); - - /* nvc0_fifo.c */ - extern int nvc0_fifo_init(struct drm_device *); -@@ -1060,7 +1104,6 @@ +@@ -1038,7 +1105,6 @@ extern int nvc0_fifo_unload_context(struct drm_device *); /* nv04_graph.c */ @@ -2100,7 +1809,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern int nv04_graph_init(struct drm_device *); extern void nv04_graph_takedown(struct drm_device *); extern void nv04_graph_fifo_access(struct drm_device *, bool); -@@ -1069,10 +1112,11 @@ +@@ -1047,10 +1113,11 @@ extern void nv04_graph_destroy_context(struct nouveau_channel *); extern int nv04_graph_load_context(struct nouveau_channel *); extern int nv04_graph_unload_context(struct drm_device *); @@ -2114,7 +1823,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern int nv10_graph_init(struct drm_device *); extern void nv10_graph_takedown(struct drm_device *); extern struct nouveau_channel *nv10_graph_channel(struct drm_device *); -@@ -1080,13 +1124,11 @@ +@@ -1058,13 +1125,11 @@ extern void nv10_graph_destroy_context(struct nouveau_channel *); extern int nv10_graph_load_context(struct nouveau_channel *); extern int nv10_graph_unload_context(struct drm_device *); @@ -2131,7 +1840,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern int nv20_graph_create_context(struct nouveau_channel *); extern void nv20_graph_destroy_context(struct nouveau_channel *); extern int nv20_graph_load_context(struct nouveau_channel *); -@@ -1094,11 +1136,9 @@ +@@ -1072,11 +1137,9 @@ extern int nv20_graph_init(struct drm_device *); extern void nv20_graph_takedown(struct drm_device *); extern int nv30_graph_init(struct drm_device *); @@ -2144,7 +1853,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern int nv40_graph_init(struct drm_device *); extern void nv40_graph_takedown(struct drm_device *); extern struct nouveau_channel *nv40_graph_channel(struct drm_device *); -@@ -1107,11 +1147,9 @@ +@@ -1085,11 +1148,9 @@ extern int nv40_graph_load_context(struct nouveau_channel *); extern int nv40_graph_unload_context(struct drm_device *); extern void nv40_grctx_init(struct nouveau_grctx *); @@ -2157,18 +1866,15 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern int nv50_graph_init(struct drm_device *); extern void nv50_graph_takedown(struct drm_device *); extern void nv50_graph_fifo_access(struct drm_device *, bool); -@@ -1120,8 +1158,9 @@ +@@ -1098,7 +1159,6 @@ extern void nv50_graph_destroy_context(struct nouveau_channel *); extern int nv50_graph_load_context(struct nouveau_channel *); extern int nv50_graph_unload_context(struct drm_device *); -extern void nv50_graph_context_switch(struct drm_device *); extern int nv50_grctx_init(struct nouveau_grctx *); -+extern void nv50_graph_tlb_flush(struct drm_device *dev); -+extern void nv86_graph_tlb_flush(struct drm_device *dev); - - /* nvc0_graph.c */ - extern int nvc0_graph_init(struct drm_device *); -@@ -1133,16 +1172,22 @@ + extern void nv50_graph_tlb_flush(struct drm_device *dev); + extern void nv86_graph_tlb_flush(struct drm_device *dev); +@@ -1113,16 +1173,22 @@ extern int nvc0_graph_load_context(struct nouveau_channel *); extern int nvc0_graph_unload_context(struct drm_device *); @@ -2196,7 +1902,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern void nv04_instmem_flush(struct drm_device *); /* nv50_instmem.c */ -@@ -1150,11 +1195,10 @@ +@@ -1130,11 +1196,10 @@ extern void nv50_instmem_takedown(struct drm_device *); extern int nv50_instmem_suspend(struct drm_device *); extern void nv50_instmem_resume(struct drm_device *); @@ -2212,7 +1918,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern void nv50_instmem_flush(struct drm_device *); extern void nv84_instmem_flush(struct drm_device *); extern void nv50_vm_flush(struct drm_device *, int engine); -@@ -1164,11 +1208,10 @@ +@@ -1144,11 +1209,10 @@ extern void nvc0_instmem_takedown(struct drm_device *); extern int nvc0_instmem_suspend(struct drm_device *); extern void nvc0_instmem_resume(struct drm_device *); @@ -2228,16 +1934,15 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r extern void nvc0_instmem_flush(struct drm_device *); /* nv04_mc.c */ -@@ -1239,7 +1282,7 @@ +@@ -1219,6 +1283,7 @@ extern void nouveau_bo_wr16(struct nouveau_bo *nvbo, unsigned index, u16 val); extern u32 nouveau_bo_rd32(struct nouveau_bo *nvbo, unsigned index); extern void nouveau_bo_wr32(struct nouveau_bo *nvbo, unsigned index, u32 val); --extern int nouveau_bo_sync_gpu(struct nouveau_bo *, struct nouveau_channel *); +extern void nouveau_bo_fence(struct nouveau_bo *, struct nouveau_fence *); /* nouveau_fence.c */ struct nouveau_fence; -@@ -1255,12 +1298,35 @@ +@@ -1234,12 +1299,35 @@ void (*work)(void *priv, bool signalled), void *priv); struct nouveau_channel *nouveau_fence_channel(struct nouveau_fence *); @@ -2278,7 +1983,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r /* nouveau_gem.c */ extern int nouveau_gem_new(struct drm_device *, struct nouveau_channel *, -@@ -1280,15 +1346,28 @@ +@@ -1259,15 +1347,28 @@ extern int nouveau_gem_ioctl_info(struct drm_device *, void *, struct drm_file *); @@ -2308,7 +2013,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r /* nv50_calc. */ int nv50_calc_pll(struct drm_device *, struct pll_lims *, int clk, -@@ -1468,6 +1547,22 @@ +@@ -1447,6 +1548,22 @@ dev->pdev->subsystem_device == sub_device; } @@ -2331,16 +2036,16 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_drv.h linux-2.6.37-r #define NV_SW 0x0000506e #define NV_SW_DMA_SEMAPHORE 0x00000060 #define NV_SW_SEMAPHORE_OFFSET 0x00000064 -@@ -1478,5 +1573,6 @@ +@@ -1457,5 +1574,6 @@ #define NV_SW_VBLSEM_OFFSET 0x00000400 #define NV_SW_VBLSEM_RELEASE_VALUE 0x00000404 #define NV_SW_VBLSEM_RELEASE 0x00000408 +#define NV_SW_PAGE_FLIP 0x00000500 #endif /* __NOUVEAU_DRV_H__ */ -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fbcon.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fbcon.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_fbcon.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_fbcon.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.c 2010-11-22 06:33:32.000000000 +0100 @@ -49,6 +49,96 @@ #include "nouveau_fbcon.h" #include "nouveau_dma.h" @@ -2561,9 +2266,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fbcon.c linux-2.6.37 vga_switcheroo_client_fb_set(dev->pdev, info); return 0; -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fbcon.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.h ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fbcon.h 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.h 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_fbcon.h linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.h +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_fbcon.h 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_fbcon.h 2010-11-22 06:33:32.000000000 +0100 @@ -40,13 +40,13 @@ void nouveau_fbcon_restore(void); @@ -2584,9 +2289,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fbcon.h linux-2.6.37 int nv50_fbcon_accel_init(struct fb_info *info); void nouveau_fbcon_gpu_lockup(struct fb_info *info); -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fence.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_fence.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fence.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_fence.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_fence.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_fence.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_fence.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_fence.c 2010-11-22 06:33:32.000000000 +0100 @@ -64,6 +64,7 @@ struct nouveau_fence *fence = container_of(ref, struct nouveau_fence, refcount); @@ -2663,31 +2368,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fence.c linux-2.6.37 break; if (time_after_eq(jiffies, timeout)) { -@@ -249,6 +250,7 @@ - { - struct drm_nouveau_private *dev_priv = dev->dev_private; - struct nouveau_semaphore *sema; -+ int ret; - - if (!USE_SEMA(dev)) - return NULL; -@@ -257,10 +259,14 @@ - if (!sema) - goto fail; - -+ ret = drm_mm_pre_get(&dev_priv->fence.heap); -+ if (ret) -+ goto fail; -+ - spin_lock(&dev_priv->fence.lock); - sema->mem = drm_mm_search_free(&dev_priv->fence.heap, 4, 0, 0); - if (sema->mem) -- sema->mem = drm_mm_get_block(sema->mem, 4, 0); -+ sema->mem = drm_mm_get_block_atomic(sema->mem, 4, 0); - spin_unlock(&dev_priv->fence.lock); - - if (!sema->mem) -@@ -363,7 +369,7 @@ +@@ -368,7 +369,7 @@ kref_get(&sema->ref); nouveau_fence_work(fence, semaphore_work, sema); @@ -2696,7 +2377,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fence.c linux-2.6.37 return 0; } -@@ -375,33 +381,49 @@ +@@ -380,33 +381,49 @@ struct nouveau_channel *chan = nouveau_fence_channel(fence); struct drm_device *dev = wchan->dev; struct nouveau_semaphore *sema; @@ -2754,7 +2435,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fence.c linux-2.6.37 { return 0; } -@@ -415,7 +437,7 @@ +@@ -420,7 +437,7 @@ int ret; /* Create an NV_SW object for various sync purposes */ @@ -2763,7 +2444,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fence.c linux-2.6.37 if (ret) return ret; -@@ -437,8 +459,8 @@ +@@ -442,8 +459,8 @@ ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, mem->start << PAGE_SHIFT, mem->size << PAGE_SHIFT, @@ -2774,7 +2455,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fence.c linux-2.6.37 if (ret) return ret; -@@ -468,6 +490,8 @@ +@@ -473,6 +490,8 @@ { struct nouveau_fence *tmp, *fence; @@ -2783,7 +2464,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fence.c linux-2.6.37 list_for_each_entry_safe(fence, tmp, &chan->fence.pending, entry) { fence->signalled = true; list_del(&fence->entry); -@@ -477,6 +501,8 @@ +@@ -482,6 +501,8 @@ kref_put(&fence->refcount, nouveau_fence_del); } @@ -2792,9 +2473,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_fence.c linux-2.6.37 } int -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_gem.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_gem.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_gem.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_gem.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_gem.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_gem.c 2010-11-22 06:33:32.000000000 +0100 @@ -48,9 +48,6 @@ return; nvbo->gem = NULL; @@ -2805,52 +2486,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.37-r if (unlikely(nvbo->pin_refcnt)) { nvbo->pin_refcnt = 1; nouveau_bo_unpin(nvbo); -@@ -107,23 +104,29 @@ - } - - static bool --nouveau_gem_tile_flags_valid(struct drm_device *dev, uint32_t tile_flags) { -- switch (tile_flags) { -- case 0x0000: -- case 0x1800: -- case 0x2800: -- case 0x4800: -- case 0x7000: -- case 0x7400: -- case 0x7a00: -- case 0xe000: -- break; -- default: -- NV_ERROR(dev, "bad page flags: 0x%08x\n", tile_flags); -- return false; -+nouveau_gem_tile_flags_valid(struct drm_device *dev, uint32_t tile_flags) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ -+ if (dev_priv->card_type >= NV_50) { -+ switch (tile_flags & NOUVEAU_GEM_TILE_LAYOUT_MASK) { -+ case 0x0000: -+ case 0x1800: -+ case 0x2800: -+ case 0x4800: -+ case 0x7000: -+ case 0x7400: -+ case 0x7a00: -+ case 0xe000: -+ return true; -+ } -+ } else { -+ if (!(tile_flags & NOUVEAU_GEM_TILE_LAYOUT_MASK)) -+ return true; - } - -- return true; -+ NV_ERROR(dev, "bad page flags: 0x%08x\n", tile_flags); -+ return false; - } - - int -@@ -140,11 +143,6 @@ +@@ -146,11 +143,6 @@ if (unlikely(dev_priv->ttm.bdev.dev_mapping == NULL)) dev_priv->ttm.bdev.dev_mapping = dev_priv->dev->dev_mapping; @@ -2862,7 +2498,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.37-r if (req->info.domain & NOUVEAU_GEM_DOMAIN_VRAM) flags |= TTM_PL_FLAG_VRAM; if (req->info.domain & NOUVEAU_GEM_DOMAIN_GART) -@@ -155,10 +153,18 @@ +@@ -161,10 +153,18 @@ if (!nouveau_gem_tile_flags_valid(dev, req->info.tile_flags)) return -EINVAL; @@ -2881,7 +2517,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.37-r if (ret) return ret; -@@ -225,15 +231,8 @@ +@@ -231,15 +231,8 @@ list_for_each_safe(entry, tmp, list) { nvbo = list_entry(entry, struct nouveau_bo, entry); @@ -2898,7 +2534,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.37-r if (unlikely(nvbo->validate_mapped)) { ttm_bo_kunmap(&nvbo->kmap); -@@ -293,14 +292,15 @@ +@@ -299,14 +292,15 @@ return -EINVAL; } @@ -2919,7 +2555,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.37-r return ret; } goto retry; -@@ -325,25 +325,6 @@ +@@ -331,25 +325,6 @@ validate_fini(op, NULL); return -EINVAL; } @@ -2945,7 +2581,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.37-r } return 0; -@@ -378,10 +359,11 @@ +@@ -384,10 +359,11 @@ nvbo->channel = (b->read_domains & (1 << 31)) ? NULL : chan; ret = ttm_bo_validate(&nvbo->bo, &nvbo->placement, @@ -2959,7 +2595,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.37-r return ret; } -@@ -433,13 +415,15 @@ +@@ -439,13 +415,15 @@ ret = validate_init(chan, file_priv, pbbo, nr_buffers, op); if (unlikely(ret)) { @@ -2977,7 +2613,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.37-r validate_fini(op, NULL); return ret; } -@@ -447,7 +431,8 @@ +@@ -453,7 +431,8 @@ ret = validate_list(chan, &op->gart_list, pbbo, user_buffers); if (unlikely(ret < 0)) { @@ -2987,7 +2623,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.37-r validate_fini(op, NULL); return ret; } -@@ -455,7 +440,8 @@ +@@ -461,7 +440,8 @@ ret = validate_list(chan, &op->both_list, pbbo, user_buffers); if (unlikely(ret < 0)) { @@ -2997,7 +2633,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.37-r validate_fini(op, NULL); return ret; } -@@ -579,7 +565,9 @@ +@@ -585,7 +565,9 @@ struct nouveau_fence *fence = NULL; int i, j, ret = 0, do_reloc = 0; @@ -3008,7 +2644,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.37-r req->vram_available = dev_priv->fb_aper_free; req->gart_available = dev_priv->gart_info.aper_free; -@@ -589,28 +577,34 @@ +@@ -595,28 +577,34 @@ if (unlikely(req->nr_push > NOUVEAU_GEM_MAX_PUSH)) { NV_ERROR(dev, "pushbuf push count exceeds limit: %d max %d\n", req->nr_push, NOUVEAU_GEM_MAX_PUSH); @@ -3044,7 +2680,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.37-r return PTR_ERR(bo); } -@@ -633,7 +627,8 @@ +@@ -639,7 +627,8 @@ ret = nouveau_gem_pushbuf_validate(chan, file_priv, bo, req->buffers, req->nr_buffers, &op, &do_reloc); if (ret) { @@ -3054,7 +2690,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.37-r goto out; } -@@ -726,7 +721,7 @@ +@@ -732,7 +721,7 @@ out: validate_fini(&op, fence); @@ -3063,7 +2699,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.37-r kfree(bo); kfree(push); -@@ -744,6 +739,7 @@ +@@ -750,6 +739,7 @@ req->suffix1 = 0x00000000; } @@ -3071,7 +2707,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.37-r return ret; } -@@ -775,26 +771,9 @@ +@@ -781,26 +771,9 @@ return -ENOENT; nvbo = nouveau_gem_object(gem); @@ -3101,7 +2737,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.37-r drm_gem_object_unreference_unlocked(gem); return ret; } -@@ -803,26 +782,7 @@ +@@ -809,26 +782,7 @@ nouveau_gem_ioctl_cpu_fini(struct drm_device *dev, void *data, struct drm_file *file_priv) { @@ -3129,33 +2765,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_gem.c linux-2.6.37-r } int -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_hw.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_hw.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.c 2010-11-20 14:43:51.000000000 +0100 -@@ -519,11 +519,11 @@ - - struct pll_lims pll_lim; - struct nouveau_pll_vals pv; -- uint32_t pllreg = head ? NV_RAMDAC_VPLL2 : NV_PRAMDAC_VPLL_COEFF; -+ enum pll_types pll = head ? PLL_VPLL1 : PLL_VPLL0; - -- if (get_pll_limits(dev, pllreg, &pll_lim)) -+ if (get_pll_limits(dev, pll, &pll_lim)) - return; -- nouveau_hw_get_pllvals(dev, pllreg, &pv); -+ nouveau_hw_get_pllvals(dev, pll, &pv); - - if (pv.M1 >= pll_lim.vco1.min_m && pv.M1 <= pll_lim.vco1.max_m && - pv.N1 >= pll_lim.vco1.min_n && pv.N1 <= pll_lim.vco1.max_n && -@@ -536,7 +536,7 @@ - pv.M1 = pll_lim.vco1.max_m; - pv.N1 = pll_lim.vco1.min_n; - pv.log2P = pll_lim.max_usable_log2p; -- nouveau_hw_setpll(dev, pllreg, &pv); -+ nouveau_hw_setpll(dev, pll_lim.reg, &pv); - } - - /* +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_hw.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_hw.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.c 2010-11-22 06:33:32.000000000 +0100 @@ -953,7 +953,7 @@ NVWriteCRTC(dev, head, NV_PCRTC_850, regp->crtc_850); @@ -3177,51 +2789,10 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_hw.c linux-2.6.37-rc NVWriteCRTC(dev, head, NV_PCRTC_INTR_0, NV_PCRTC_INTR_0_VBLANK); } -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_hw.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.h ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_hw.h 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_hw.h 2010-11-20 14:43:51.000000000 +0100 -@@ -416,6 +416,25 @@ - } - - static inline void -+nv_set_crtc_base(struct drm_device *dev, int head, uint32_t offset) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ -+ NVWriteCRTC(dev, head, NV_PCRTC_START, offset); -+ -+ if (dev_priv->card_type == NV_04) { -+ /* -+ * Hilarious, the 24th bit doesn't want to stick to -+ * PCRTC_START... -+ */ -+ int cre_heb = NVReadVgaCrtc(dev, head, NV_CIO_CRE_HEB__INDEX); -+ -+ NVWriteVgaCrtc(dev, head, NV_CIO_CRE_HEB__INDEX, -+ (cre_heb & ~0x40) | ((offset >> 18) & 0x40)); -+ } -+} -+ -+static inline void - nv_show_cursor(struct drm_device *dev, int head, bool show) - { - struct drm_nouveau_private *dev_priv = dev->dev_private; -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_i2c.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_i2c.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_i2c.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_i2c.c 2010-11-20 14:43:51.000000000 +0100 -@@ -256,7 +256,7 @@ - if (index >= DCB_MAX_NUM_I2C_ENTRIES) - return NULL; - -- if (dev_priv->chipset >= NV_50 && (i2c->entry & 0x00000100)) { -+ if (dev_priv->card_type >= NV_50 && (i2c->entry & 0x00000100)) { - uint32_t reg = 0xe500, val; - - if (i2c->port_type == 6) { -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_irq.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_irq.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_irq.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_irq.c 2010-11-20 14:43:51.000000000 +0100 -@@ -36,11 +36,7 @@ +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_irq.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_irq.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_irq.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_irq.c 2010-11-22 06:33:32.000000000 +0100 +@@ -36,18 +36,7 @@ #include "nouveau_drv.h" #include "nouveau_reg.h" #include "nouveau_ramht.h" @@ -3230,17 +2801,25 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_irq.c linux-2.6.37-r -/* needed for hotplug irq */ -#include "nouveau_connector.h" -#include "nv50_display.h" +- +-static DEFINE_RATELIMIT_STATE(nouveau_ratelimit_state, 3 * HZ, 20); +- +-static int nouveau_ratelimit(void) +-{ +- return __ratelimit(&nouveau_ratelimit_state); +-} +#include "nouveau_util.h" void nouveau_irq_preinstall(struct drm_device *dev) -@@ -50,18 +46,19 @@ +@@ -57,19 +46,19 @@ /* Master disable */ nv_wr32(dev, NV03_PMC_INTR_EN_0, 0); - if (dev_priv->card_type >= NV_50) { - INIT_WORK(&dev_priv->irq_work, nv50_display_irq_handler_bh); - INIT_WORK(&dev_priv->hpd_work, nv50_display_irq_hotplug_bh); +- spin_lock_init(&dev_priv->hpd_state.lock); - INIT_LIST_HEAD(&dev_priv->vbl_waiting); - } + INIT_LIST_HEAD(&dev_priv->vbl_waiting); @@ -3259,7 +2838,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_irq.c linux-2.6.37-r return 0; } -@@ -72,1182 +69,83 @@ +@@ -80,1178 +69,83 @@ nv_wr32(dev, NV03_PMC_INTR_EN_0, 0); } @@ -3393,8 +2972,8 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_irq.c linux-2.6.37-r - } - - if (status & NV_PFIFO_INTR_DMA_PUSHER) { -- u32 get = nv_rd32(dev, 0x003244); -- u32 put = nv_rd32(dev, 0x003240); +- u32 dma_get = nv_rd32(dev, 0x003244); +- u32 dma_put = nv_rd32(dev, 0x003240); - u32 push = nv_rd32(dev, 0x003220); - u32 state = nv_rd32(dev, 0x003228); - @@ -3404,16 +2983,18 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_irq.c linux-2.6.37-r - u32 ib_get = nv_rd32(dev, 0x003334); - u32 ib_put = nv_rd32(dev, 0x003330); - -- NV_INFO(dev, "PFIFO_DMA_PUSHER - Ch %d Get 0x%02x%08x " +- if (nouveau_ratelimit()) +- NV_INFO(dev, "PFIFO_DMA_PUSHER - Ch %d Get 0x%02x%08x " - "Put 0x%02x%08x IbGet 0x%08x IbPut 0x%08x " - "State 0x%08x Push 0x%08x\n", -- chid, ho_get, get, ho_put, put, ib_get, ib_put, -- state, push); +- chid, ho_get, dma_get, ho_put, +- dma_put, ib_get, ib_put, state, +- push); - - /* METHOD_COUNT, in DMA_STATE on earlier chipsets */ - nv_wr32(dev, 0x003364, 0x00000000); -- if (get != put || ho_get != ho_put) { -- nv_wr32(dev, 0x003244, put); +- if (dma_get != dma_put || ho_get != ho_put) { +- nv_wr32(dev, 0x003244, dma_put); - nv_wr32(dev, 0x003328, ho_put); - } else - if (ib_get != ib_put) { @@ -3422,10 +3003,10 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_irq.c linux-2.6.37-r - } else { - NV_INFO(dev, "PFIFO_DMA_PUSHER - Ch %d Get 0x%08x " - "Put 0x%08x State 0x%08x Push 0x%08x\n", -- chid, get, put, state, push); +- chid, dma_get, dma_put, state, push); - -- if (get != put) -- nv_wr32(dev, 0x003244, put); +- if (dma_get != dma_put) +- nv_wr32(dev, 0x003244, dma_put); - } - - nv_wr32(dev, 0x003228, 0x00000000); @@ -3457,8 +3038,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_irq.c linux-2.6.37-r - } - - if (status) { -- NV_INFO(dev, "PFIFO_INTR 0x%08x - Ch %d\n", -- status, chid); +- if (nouveau_ratelimit()) +- NV_INFO(dev, "PFIFO_INTR 0x%08x - Ch %d\n", +- status, chid); - nv_wr32(dev, NV03_PFIFO_INTR_0, status); - status = 0; - } @@ -3749,13 +3331,6 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_irq.c linux-2.6.37-r - nouveau_graph_dump_trap_info(dev, "PGRAPH_NOTIFY", &trap); -} - --static DEFINE_RATELIMIT_STATE(nouveau_ratelimit_state, 3 * HZ, 20); -- --static int nouveau_ratelimit(void) --{ -- return __ratelimit(&nouveau_ratelimit_state); --} -- - -static inline void -nouveau_pgraph_intr_error(struct drm_device *dev, uint32_t nsource) @@ -4487,21 +4062,10 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_irq.c linux-2.6.37-r - - return IRQ_HANDLED; } -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_mem.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_mem.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_mem.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_mem.c 2010-11-20 14:43:51.000000000 +0100 -@@ -33,92 +33,113 @@ - #include "drmP.h" - #include "drm.h" - #include "drm_sarea.h" --#include "nouveau_drv.h" - --#define MIN(a,b) a < b ? a : b -+#include "nouveau_drv.h" -+#include "nouveau_pm.h" - - /* - * NV10-NV40 tiling helpers +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_mem.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_mem.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_mem.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_mem.c 2010-11-22 06:33:32.000000000 +0100 +@@ -42,83 +42,104 @@ */ static void @@ -4518,19 +4082,19 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_mem.c linux-2.6.37-r - struct nouveau_tile_reg *tile = &dev_priv->tile[i]; + int i = tile - dev_priv->tile.reg; + unsigned long save; -+ -+ nouveau_fence_unref(&tile->fence); -+ -+ if (tile->pitch) -+ pfb->free_tile_region(dev, i); - tile->addr = addr; - tile->size = size; - tile->used = !!pitch; - nouveau_fence_unref((void **)&tile->fence); ++ nouveau_fence_unref(&tile->fence); + ++ if (tile->pitch) ++ pfb->free_tile_region(dev, i); ++ + if (pitch) + pfb->init_tile_region(dev, i, addr, size, pitch, flags); - ++ + spin_lock_irqsave(&dev_priv->context_switch_lock, save); pfifo->reassign(dev, false); pfifo->cache_pull(dev, false); @@ -4604,9 +4168,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_mem.c linux-2.6.37-r + nouveau_fence_ref(fence); } - } - -- spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); - +- spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); + - return found; + tile->used = false; + spin_unlock(&dev_priv->tile.lock); @@ -4652,103 +4216,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_mem.c linux-2.6.37-r } /* -@@ -177,9 +198,9 @@ - } - dev_priv->engine.instmem.flush(dev); - -- nv50_vm_flush(dev, 5); -- nv50_vm_flush(dev, 0); -- nv50_vm_flush(dev, 4); -+ dev_priv->engine.instmem.flush(dev); -+ dev_priv->engine.fifo.tlb_flush(dev); -+ dev_priv->engine.graph.tlb_flush(dev); - nv50_vm_flush(dev, 6); - return 0; - } -@@ -209,11 +230,10 @@ - pte++; - } - } -- dev_priv->engine.instmem.flush(dev); - -- nv50_vm_flush(dev, 5); -- nv50_vm_flush(dev, 0); -- nv50_vm_flush(dev, 4); -+ dev_priv->engine.instmem.flush(dev); -+ dev_priv->engine.fifo.tlb_flush(dev); -+ dev_priv->engine.graph.tlb_flush(dev); - nv50_vm_flush(dev, 6); - } - -@@ -653,6 +673,7 @@ - void - nouveau_mem_timing_init(struct drm_device *dev) - { -+ /* cards < NVC0 only */ - struct drm_nouveau_private *dev_priv = dev->dev_private; - struct nouveau_pm_engine *pm = &dev_priv->engine.pm; - struct nouveau_pm_memtimings *memtimings = &pm->memtimings; -@@ -719,14 +740,14 @@ - tUNK_19 = 1; - tUNK_20 = 0; - tUNK_21 = 0; -- switch (MIN(recordlen,21)) { -- case 21: -+ switch (min(recordlen, 22)) { -+ case 22: - tUNK_21 = entry[21]; -- case 20: -+ case 21: - tUNK_20 = entry[20]; -- case 19: -+ case 20: - tUNK_19 = entry[19]; -- case 18: -+ case 19: - tUNK_18 = entry[18]; - default: - tUNK_0 = entry[0]; -@@ -756,24 +777,30 @@ - timing->reg_100228 = (tUNK_12 << 16 | tUNK_11 << 8 | tUNK_10); - if(recordlen > 19) { - timing->reg_100228 += (tUNK_19 - 1) << 24; -- } else { -+ }/* I cannot back-up this else-statement right now -+ else { - timing->reg_100228 += tUNK_12 << 24; -- } -+ }*/ - - /* XXX: reg_10022c */ -+ timing->reg_10022c = tUNK_2 - 1; - - timing->reg_100230 = (tUNK_20 << 24 | tUNK_21 << 16 | - tUNK_13 << 8 | tUNK_13); - - /* XXX: +6? */ - timing->reg_100234 = (tRAS << 24 | (tUNK_19 + 6) << 8 | tRC); -- if(tUNK_10 > tUNK_11) { -- timing->reg_100234 += tUNK_10 << 16; -- } else { -- timing->reg_100234 += tUNK_11 << 16; -+ timing->reg_100234 += max(tUNK_10,tUNK_11) << 16; -+ -+ /* XXX; reg_100238, reg_10023c -+ * reg: 0x00?????? -+ * reg_10023c: -+ * 0 for pre-NV50 cards -+ * 0x????0202 for NV50+ cards (empirical evidence) */ -+ if(dev_priv->card_type >= NV_50) { -+ timing->reg_10023c = 0x202; - } - -- /* XXX; reg_100238, reg_10023c */ - NV_DEBUG(dev, "Entry %d: 220: %08x %08x %08x %08x\n", i, - timing->reg_100220, timing->reg_100224, - timing->reg_100228, timing->reg_10022c); -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_notifier.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_notifier.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_notifier.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_notifier.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_notifier.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_notifier.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_notifier.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_notifier.c 2010-11-22 06:33:32.000000000 +0100 @@ -99,7 +99,6 @@ int size, uint32_t *b_offset) { @@ -4812,9 +4282,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_notifier.c linux-2.6 + nouveau_channel_put(&chan); + return ret; } -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_object.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_object.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_object.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_object.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_object.c 2010-11-22 06:33:32.000000000 +0100 @@ -36,6 +36,101 @@ #include "nouveau_drm.h" #include "nouveau_ramht.h" @@ -4953,7 +4423,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 } - } else { - NV_DEBUG(dev, "global heap\n"); - +- - /* allocate backing pages, sets vinst */ - ret = engine->instmem.populate(dev, gpuobj, &size); - if (ret) { @@ -4972,9 +4442,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 - if (ramin == NULL) { - spin_unlock(&dev_priv->ramin_lock); - nouveau_gpuobj_ref(NULL, &gpuobj); -- return ret; +- return -ENOMEM; - } -- + - ramin = drm_mm_get_block_atomic(ramin, size, align); - spin_unlock(&dev_priv->ramin_lock); - } while (ramin == NULL); @@ -5170,10 +4640,10 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 + break; + case NV_MEM_TARGET_PCI: + flags0 |= 0x00020000; -+ break; + break; + case NV_MEM_TARGET_PCI_NOSNOOP: + flags0 |= 0x00030000; - break; ++ break; + case NV_MEM_TARGET_GART: + base += dev_priv->vm_gart_base; default: @@ -5189,18 +4659,11 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 - NV_ERROR(dev, "Error creating gpuobj: %d\n", ret); - return ret; - } -+ /* convert to base + limit */ -+ size = (base + size) - 1; - +- - if (dev_priv->card_type < NV_50) { - uint32_t frame, adjust, pte_flags = 0; -+ nv_wo32(obj, offset + 0x00, flags0); -+ nv_wo32(obj, offset + 0x04, lower_32_bits(size)); -+ nv_wo32(obj, offset + 0x08, lower_32_bits(base)); -+ nv_wo32(obj, offset + 0x0c, upper_32_bits(size) << 24 | -+ upper_32_bits(base)); -+ nv_wo32(obj, offset + 0x10, 0x00000000); -+ nv_wo32(obj, offset + 0x14, 0x00000000); ++ /* convert to base + limit */ ++ size = (base + size) - 1; - if (access != NV_DMA_ACCESS_RO) - pte_flags |= (1<<1); @@ -5216,7 +4679,14 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 - } else { - uint64_t limit = offset + size - 1; - uint32_t flags0, flags5; -- ++ nv_wo32(obj, offset + 0x00, flags0); ++ nv_wo32(obj, offset + 0x04, lower_32_bits(size)); ++ nv_wo32(obj, offset + 0x08, lower_32_bits(base)); ++ nv_wo32(obj, offset + 0x0c, upper_32_bits(size) << 24 | ++ upper_32_bits(base)); ++ nv_wo32(obj, offset + 0x10, 0x00000000); ++ nv_wo32(obj, offset + 0x14, 0x00000000); + - if (target == NV_DMA_TARGET_VIDMEM) { - flags0 = 0x00190000; - flags5 = 0x00010000; @@ -5690,7 +5160,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 } ret = nouveau_ramht_insert(chan, init->handle, gr); -@@ -911,27 +998,27 @@ +@@ -911,27 +998,30 @@ if (ret) { NV_ERROR(dev, "Error referencing object: %d (%d/0x%08x)\n", ret, init->channel, init->handle); @@ -5712,14 +5182,16 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 + int ret; - NOUVEAU_GET_USER_CHANNEL_WITH_RETURN(objfree->channel, file_priv, chan); -- -- gpuobj = nouveau_ramht_find(chan, objfree->handle); -- if (!gpuobj) -- return -ENOENT; + chan = nouveau_channel_get(dev, file_priv, objfree->channel); + if (IS_ERR(chan)) + return PTR_ERR(chan); +- gpuobj = nouveau_ramht_find(chan, objfree->handle); +- if (!gpuobj) +- return -ENOENT; ++ /* Synchronize with the user channel */ ++ nouveau_channel_idle(chan); + - nouveau_ramht_remove(chan, objfree->handle); - return 0; + ret = nouveau_ramht_remove(chan, objfree->handle); @@ -5728,9 +5200,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_object.c linux-2.6.3 } u32 -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_pm.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_pm.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_pm.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_pm.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_pm.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_pm.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_pm.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_pm.c 2010-11-22 06:33:32.000000000 +0100 @@ -27,6 +27,10 @@ #include "nouveau_drv.h" #include "nouveau_pm.h" @@ -5742,50 +5214,10 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_pm.c linux-2.6.37-rc #include #include -@@ -284,6 +288,7 @@ - } +@@ -446,6 +450,25 @@ + #endif } -+#ifdef CONFIG_HWMON - static ssize_t - nouveau_hwmon_show_temp(struct device *d, struct device_attribute *a, char *buf) - { -@@ -395,10 +400,12 @@ - static const struct attribute_group hwmon_attrgroup = { - .attrs = hwmon_attributes, - }; -+#endif - - static int - nouveau_hwmon_init(struct drm_device *dev) - { -+#ifdef CONFIG_HWMON - struct drm_nouveau_private *dev_priv = dev->dev_private; - struct nouveau_pm_engine *pm = &dev_priv->engine.pm; - struct device *hwmon_dev; -@@ -425,13 +432,14 @@ - } - - pm->hwmon = hwmon_dev; -- -+#endif - return 0; - } - - static void - nouveau_hwmon_fini(struct drm_device *dev) - { -+#ifdef CONFIG_HWMON - struct drm_nouveau_private *dev_priv = dev->dev_private; - struct nouveau_pm_engine *pm = &dev_priv->engine.pm; - -@@ -439,7 +447,27 @@ - sysfs_remove_group(&pm->hwmon->kobj, &hwmon_attrgroup); - hwmon_device_unregister(pm->hwmon); - } -+#endif -+} -+ +#ifdef CONFIG_ACPI +static int +nouveau_pm_acpi_event(struct notifier_block *nb, unsigned long val, void *data) @@ -5802,12 +5234,13 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_pm.c linux-2.6.37-rc + } + + return NOTIFY_OK; - } ++} +#endif - ++ int nouveau_pm_init(struct drm_device *dev) -@@ -480,6 +508,10 @@ + { +@@ -485,6 +508,10 @@ nouveau_sysfs_init(dev); nouveau_hwmon_init(dev); @@ -5818,7 +5251,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_pm.c linux-2.6.37-rc return 0; } -@@ -498,6 +530,9 @@ +@@ -503,6 +530,9 @@ nouveau_perf_fini(dev); nouveau_volt_fini(dev); @@ -5828,9 +5261,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_pm.c linux-2.6.37-rc nouveau_hwmon_fini(dev); nouveau_sysfs_fini(dev); } -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_ramht.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_ramht.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_ramht.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_ramht.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.c 2010-11-22 06:33:32.000000000 +0100 @@ -104,17 +104,17 @@ nouveau_gpuobj_ref(gpuobj, &entry->gpuobj); @@ -5852,132 +5285,31 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_ramht.c linux-2.6.37 } else { ctx = (gpuobj->cinst >> 4) | ((gpuobj->engine << -@@ -153,26 +153,42 @@ - return -ENOMEM; - } - -+static struct nouveau_ramht_entry * -+nouveau_ramht_remove_entry(struct nouveau_channel *chan, u32 handle) -+{ -+ struct nouveau_ramht *ramht = chan ? chan->ramht : NULL; -+ struct nouveau_ramht_entry *entry; -+ unsigned long flags; -+ -+ if (!ramht) -+ return NULL; -+ -+ spin_lock_irqsave(&ramht->lock, flags); -+ list_for_each_entry(entry, &ramht->entries, head) { -+ if (entry->channel == chan && -+ (!handle || entry->handle == handle)) { -+ list_del(&entry->head); -+ spin_unlock_irqrestore(&ramht->lock, flags); -+ -+ return entry; -+ } -+ } -+ spin_unlock_irqrestore(&ramht->lock, flags); -+ -+ return NULL; -+} -+ - static void --nouveau_ramht_remove_locked(struct nouveau_channel *chan, u32 handle) -+nouveau_ramht_remove_hash(struct nouveau_channel *chan, u32 handle) - { - struct drm_device *dev = chan->dev; - struct drm_nouveau_private *dev_priv = dev->dev_private; - struct nouveau_instmem_engine *instmem = &dev_priv->engine.instmem; - struct nouveau_gpuobj *ramht = chan->ramht->gpuobj; -- struct nouveau_ramht_entry *entry, *tmp; -+ unsigned long flags; - u32 co, ho; - -- list_for_each_entry_safe(entry, tmp, &chan->ramht->entries, head) { -- if (entry->channel != chan || entry->handle != handle) -- continue; -- -- nouveau_gpuobj_ref(NULL, &entry->gpuobj); -- list_del(&entry->head); -- kfree(entry); -- break; -- } -- -+ spin_lock_irqsave(&chan->ramht->lock, flags); - co = ho = nouveau_ramht_hash_handle(chan, handle); - do { - if (nouveau_ramht_entry_valid(dev, ramht, co) && -@@ -184,7 +200,7 @@ - nv_wo32(ramht, co + 0, 0x00000000); - nv_wo32(ramht, co + 4, 0x00000000); - instmem->flush(dev); -- return; -+ goto out; - } - - co += 8; -@@ -194,17 +210,23 @@ - - NV_ERROR(dev, "RAMHT entry not found. ch=%d, handle=0x%08x\n", - chan->id, handle); -+out: -+ spin_unlock_irqrestore(&chan->ramht->lock, flags); +@@ -214,18 +214,19 @@ + spin_unlock_irqrestore(&chan->ramht->lock, flags); } -void +int nouveau_ramht_remove(struct nouveau_channel *chan, u32 handle) { -- struct nouveau_ramht *ramht = chan->ramht; -- unsigned long flags; -+ struct nouveau_ramht_entry *entry; + struct nouveau_ramht_entry *entry; -- spin_lock_irqsave(&ramht->lock, flags); -- nouveau_ramht_remove_locked(chan, handle); -- spin_unlock_irqrestore(&ramht->lock, flags); -+ entry = nouveau_ramht_remove_entry(chan, handle); -+ if (!entry) + entry = nouveau_ramht_remove_entry(chan, handle); + if (!entry) +- return; + return -ENOENT; -+ -+ nouveau_ramht_remove_hash(chan, entry->handle); -+ nouveau_gpuobj_ref(NULL, &entry->gpuobj); -+ kfree(entry); + + nouveau_ramht_remove_hash(chan, entry->handle); + nouveau_gpuobj_ref(NULL, &entry->gpuobj); + kfree(entry); + return 0; } struct nouveau_gpuobj * -@@ -265,23 +287,19 @@ - nouveau_ramht_ref(struct nouveau_ramht *ref, struct nouveau_ramht **ptr, - struct nouveau_channel *chan) - { -- struct nouveau_ramht_entry *entry, *tmp; -+ struct nouveau_ramht_entry *entry; - struct nouveau_ramht *ramht; -- unsigned long flags; - - if (ref) - kref_get(&ref->refcount); - - ramht = *ptr; - if (ramht) { -- spin_lock_irqsave(&ramht->lock, flags); -- list_for_each_entry_safe(entry, tmp, &ramht->entries, head) { -- if (entry->channel != chan) -- continue; -- -- nouveau_ramht_remove_locked(chan, entry->handle); -+ while ((entry = nouveau_ramht_remove_entry(chan, 0))) { -+ nouveau_ramht_remove_hash(chan, entry->handle); -+ nouveau_gpuobj_ref(NULL, &entry->gpuobj); -+ kfree(entry); - } -- spin_unlock_irqrestore(&ramht->lock, flags); - - kref_put(&ramht->refcount, nouveau_ramht_del); - } -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_ramht.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.h ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_ramht.h 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.h 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_ramht.h linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.h +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_ramht.h 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_ramht.h 2010-11-22 06:33:32.000000000 +0100 @@ -48,7 +48,7 @@ extern int nouveau_ramht_insert(struct nouveau_channel *, u32 handle, @@ -5987,9 +5319,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_ramht.h linux-2.6.37 extern struct nouveau_gpuobj * nouveau_ramht_find(struct nouveau_channel *chan, u32 handle); -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_reg.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_reg.h ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_reg.h 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_reg.h 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_reg.h linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_reg.h +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_reg.h 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_reg.h 2010-11-22 06:33:32.000000000 +0100 @@ -45,6 +45,11 @@ # define NV04_PFB_REF_CMD_REFRESH (1 << 0) #define NV04_PFB_PRE 0x001002d4 @@ -6111,21 +5443,10 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_reg.h linux-2.6.37-r #define NV50_PDISPLAY_CRTC_P(i, r) ((i) * 0x540 + NV50_PDISPLAY_CRTC_##r) #define NV50_PDISPLAY_CRTC_C(i, r) (4 + (i) * 0x540 + NV50_PDISPLAY_CRTC_##r) -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_sgdma.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_sgdma.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_sgdma.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_sgdma.c 2010-11-20 14:43:51.000000000 +0100 -@@ -120,8 +120,8 @@ - dev_priv->engine.instmem.flush(nvbe->dev); - - if (dev_priv->card_type == NV_50) { -- nv50_vm_flush(dev, 5); /* PGRAPH */ -- nv50_vm_flush(dev, 0); /* PFIFO */ -+ dev_priv->engine.fifo.tlb_flush(dev); -+ dev_priv->engine.graph.tlb_flush(dev); - } - - nvbe->bound = true; -@@ -144,26 +144,22 @@ +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_sgdma.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_sgdma.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_sgdma.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_sgdma.c 2010-11-22 06:33:32.000000000 +0100 +@@ -144,19 +144,15 @@ pte = nvbe->pte_start; for (i = 0; i < nvbe->nr_pages; i++) { @@ -6146,16 +5467,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_sgdma.c linux-2.6.37 } } dev_priv->engine.instmem.flush(nvbe->dev); - - if (dev_priv->card_type == NV_50) { -- nv50_vm_flush(dev, 5); -- nv50_vm_flush(dev, 0); -+ dev_priv->engine.fifo.tlb_flush(dev); -+ dev_priv->engine.graph.tlb_flush(dev); - } - - nvbe->bound = false; -@@ -218,13 +214,16 @@ +@@ -218,7 +214,6 @@ nouveau_sgdma_init(struct drm_device *dev) { struct drm_nouveau_private *dev_priv = dev->dev_private; @@ -6163,18 +5475,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_sgdma.c linux-2.6.37 struct nouveau_gpuobj *gpuobj = NULL; uint32_t aper_size, obj_size; int i, ret; - - if (dev_priv->card_type < NV_50) { -- aper_size = (64 * 1024 * 1024); -+ if(dev_priv->ramin_rsvd_vram < 2 * 1024 * 1024) -+ aper_size = 64 * 1024 * 1024; -+ else -+ aper_size = 512 * 1024 * 1024; -+ - obj_size = (aper_size >> NV_CTXDMA_PAGE_SHIFT) * 4; - obj_size += 8; /* ctxdma header */ - } else { -@@ -241,42 +240,15 @@ +@@ -245,42 +240,15 @@ return ret; } @@ -6221,7 +5522,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_sgdma.c linux-2.6.37 } else { for (i = 0; i < obj_size; i += 8) { nv_wo32(gpuobj, i + 0, 0x00000000); -@@ -297,15 +269,6 @@ +@@ -301,15 +269,6 @@ { struct drm_nouveau_private *dev_priv = dev->dev_private; @@ -6237,9 +5538,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_sgdma.c linux-2.6.37 nouveau_gpuobj_ref(NULL, &dev_priv->gart_info.sg_ctxdma); } -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_state.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_state.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_state.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_state.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_state.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_state.c 2010-11-22 06:33:32.000000000 +0100 @@ -53,10 +53,10 @@ engine->instmem.takedown = nv04_instmem_takedown; engine->instmem.suspend = nv04_instmem_suspend; @@ -6529,30 +5830,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 engine->graph.init = nv50_graph_init; engine->graph.takedown = nv50_graph_takedown; engine->graph.fifo_access = nv50_graph_fifo_access; -@@ -354,6 +366,15 @@ - engine->graph.destroy_context = nv50_graph_destroy_context; - engine->graph.load_context = nv50_graph_load_context; - engine->graph.unload_context = nv50_graph_unload_context; -+ if (dev_priv->chipset != 0x86) -+ engine->graph.tlb_flush = nv50_graph_tlb_flush; -+ else { -+ /* from what i can see nvidia do this on every -+ * pre-NVA3 board except NVAC, but, we've only -+ * ever seen problems on NV86 -+ */ -+ engine->graph.tlb_flush = nv86_graph_tlb_flush; -+ } - engine->fifo.channels = 128; - engine->fifo.init = nv50_fifo_init; - engine->fifo.takedown = nv50_fifo_takedown; -@@ -365,30 +386,39 @@ - engine->fifo.destroy_context = nv50_fifo_destroy_context; - engine->fifo.load_context = nv50_fifo_load_context; - engine->fifo.unload_context = nv50_fifo_unload_context; -+ engine->fifo.tlb_flush = nv50_fifo_tlb_flush; - engine->display.early_init = nv50_display_early_init; - engine->display.late_takedown = nv50_display_late_takedown; - engine->display.create = nv50_display_create; +@@ -381,24 +393,32 @@ engine->display.init = nv50_display_init; engine->display.destroy = nv50_display_destroy; engine->gpio.init = nv50_gpio_init; @@ -6595,7 +5873,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 } engine->pm.voltage_get = nouveau_voltage_gpio_get; engine->pm.voltage_set = nouveau_voltage_gpio_set; -@@ -396,16 +426,34 @@ +@@ -406,16 +426,34 @@ engine->pm.temp_get = nv84_temp_get; else engine->pm.temp_get = nv40_temp_get; @@ -6634,7 +5912,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 engine->instmem.flush = nvc0_instmem_flush; engine->mc.init = nv50_mc_init; engine->mc.takedown = nv50_mc_takedown; -@@ -414,7 +462,6 @@ +@@ -424,7 +462,6 @@ engine->timer.takedown = nv04_timer_takedown; engine->fb.init = nvc0_fb_init; engine->fb.takedown = nvc0_fb_takedown; @@ -6642,7 +5920,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 engine->graph.init = nvc0_graph_init; engine->graph.takedown = nvc0_graph_takedown; engine->graph.fifo_access = nvc0_graph_fifo_access; -@@ -443,7 +490,11 @@ +@@ -453,7 +490,11 @@ engine->gpio.takedown = nouveau_stub_takedown; engine->gpio.get = nv50_gpio_get; engine->gpio.set = nv50_gpio_set; @@ -6654,7 +5932,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 break; default: NV_ERROR(dev, "NV%02x unsupported\n", dev_priv->chipset); -@@ -485,7 +536,7 @@ +@@ -495,7 +536,7 @@ ret = nouveau_gpuobj_dma_new(dev_priv->channel, NV_CLASS_DMA_IN_MEMORY, 0, dev_priv->vram_size, @@ -6663,7 +5941,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 &gpuobj); if (ret) goto out_err; -@@ -495,9 +546,10 @@ +@@ -505,9 +546,10 @@ if (ret) goto out_err; @@ -6677,7 +5955,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 if (ret) goto out_err; -@@ -506,11 +558,11 @@ +@@ -516,11 +558,11 @@ if (ret) goto out_err; @@ -6691,7 +5969,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 return ret; } -@@ -557,6 +609,8 @@ +@@ -567,6 +609,8 @@ if (ret) goto out; engine = &dev_priv->engine; @@ -6700,7 +5978,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 spin_lock_init(&dev_priv->context_switch_lock); /* Make the CRTCs and I2C buses accessible */ -@@ -615,26 +669,28 @@ +@@ -625,26 +669,28 @@ if (ret) goto out_fb; @@ -6737,7 +6015,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 /* what about PVIDEO/PCRTC/PRAMDAC etc? */ -@@ -659,12 +715,16 @@ +@@ -669,12 +715,16 @@ out_fence: nouveau_fence_fini(dev); out_irq: @@ -6756,7 +6034,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 out_graph: if (!nouveau_noaccel) engine->graph.takedown(dev); -@@ -703,12 +763,12 @@ +@@ -713,12 +763,12 @@ if (!engine->graph.accel_blocked) { nouveau_fence_fini(dev); @@ -6771,7 +6049,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 engine->graph.takedown(dev); } engine->fb.takedown(dev); -@@ -727,7 +787,8 @@ +@@ -737,7 +787,8 @@ nouveau_gpuobj_takedown(dev); nouveau_mem_vram_fini(dev); @@ -6781,7 +6059,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 nouveau_pm_fini(dev); nouveau_bios_takedown(dev); -@@ -1014,21 +1075,6 @@ +@@ -1024,21 +1075,6 @@ else getparam->value = NV_PCI; break; @@ -6803,7 +6081,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 case NOUVEAU_GETPARAM_FB_SIZE: getparam->value = dev_priv->fb_available_size; break; -@@ -1036,11 +1082,17 @@ +@@ -1046,7 +1082,7 @@ getparam->value = dev_priv->gart_info.aper_size; break; case NOUVEAU_GETPARAM_VM_VRAM_BASE: @@ -6812,35 +6090,17 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 break; case NOUVEAU_GETPARAM_PTIMER_TIME: getparam->value = dev_priv->engine.timer.read(dev); +@@ -1054,6 +1090,9 @@ + case NOUVEAU_GETPARAM_HAS_BO_USAGE: + getparam->value = 1; break; -+ case NOUVEAU_GETPARAM_HAS_BO_USAGE: -+ getparam->value = 1; -+ break; + case NOUVEAU_GETPARAM_HAS_PAGEFLIP: + getparam->value = (dev_priv->card_type < NV_50); + break; case NOUVEAU_GETPARAM_GRAPH_UNITS: /* NV40 and NV50 versions are quite different, but register * address is the same. User is supposed to know the card -@@ -1051,7 +1103,7 @@ - } - /* FALLTHRU */ - default: -- NV_ERROR(dev, "unknown parameter %lld\n", getparam->param); -+ NV_DEBUG(dev, "unknown parameter %lld\n", getparam->param); - return -EINVAL; - } - -@@ -1066,7 +1118,7 @@ - - switch (setparam->param) { - default: -- NV_ERROR(dev, "unknown parameter %lld\n", setparam->param); -+ NV_DEBUG(dev, "unknown parameter %lld\n", setparam->param); - return -EINVAL; - } - -@@ -1092,7 +1144,13 @@ +@@ -1105,7 +1144,13 @@ /* Waits for PGRAPH to go completely idle */ bool nouveau_wait_for_idle(struct drm_device *dev) { @@ -6855,21 +6115,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_state.c linux-2.6.37 NV_ERROR(dev, "PGRAPH idle timed out with status 0x%08x\n", nv_rd32(dev, NV04_PGRAPH_STATUS)); return false; -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_temp.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_temp.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_temp.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_temp.c 2010-11-20 14:43:51.000000000 +0100 -@@ -191,7 +191,7 @@ - int offset = sensor->offset_mult / sensor->offset_div; - int core_temp; - -- if (dev_priv->chipset >= 0x50) { -+ if (dev_priv->card_type >= NV_50) { - core_temp = nv_rd32(dev, 0x20008); - } else { - core_temp = nv_rd32(dev, 0x0015b4) & 0x1fff; -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_util.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_util.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_util.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_util.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_util.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_util.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_util.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_util.c 2010-11-22 06:33:32.000000000 +0100 @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2010 Nouveau Project @@ -6940,9 +6188,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_util.c linux-2.6.37- +{ + return __ratelimit(&nouveau_ratelimit_state); +} -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_util.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_util.h ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_util.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nouveau_util.h 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_util.h linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_util.h +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nouveau_util.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nouveau_util.h 2010-11-22 06:33:32.000000000 +0100 @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2010 Nouveau Project @@ -6989,29 +6237,10 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nouveau_util.h linux-2.6.37- +int nouveau_ratelimit(void); + +#endif -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_crtc.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_crtc.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_crtc.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_crtc.c 2010-11-20 14:43:51.000000000 +0100 -@@ -158,7 +158,6 @@ - { - struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); - struct drm_device *dev = crtc->dev; -- struct drm_connector *connector; - unsigned char seq1 = 0, crtc17 = 0; - unsigned char crtc1A; - -@@ -213,10 +212,6 @@ - NVVgaSeqReset(dev, nv_crtc->index, false); - - NVWriteVgaCrtc(dev, nv_crtc->index, NV_CIO_CRE_RPC1_INDEX, crtc1A); -- -- /* Update connector polling modes */ -- list_for_each_entry(connector, &dev->mode_config.connector_list, head) -- nouveau_connector_set_polling(connector); - } - - static bool -@@ -556,7 +551,10 @@ +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv04_crtc.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv04_crtc.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv04_crtc.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv04_crtc.c 2010-11-22 06:33:32.000000000 +0100 +@@ -551,7 +551,10 @@ if (dev_priv->card_type >= NV_30) regp->gpio_ext = NVReadCRTC(dev, 0, NV_PCRTC_GPIO_EXT); @@ -7023,7 +6252,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_crtc.c linux-2.6.37-rc2 /* Some misc regs */ if (dev_priv->card_type == NV_40) { -@@ -674,6 +672,7 @@ +@@ -669,6 +672,7 @@ if (nv_two_heads(dev)) NVSetOwner(dev, nv_crtc->index); @@ -7031,7 +6260,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_crtc.c linux-2.6.37-rc2 funcs->dpms(crtc, DRM_MODE_DPMS_OFF); NVBlankScreen(dev, nv_crtc->index, true); -@@ -706,6 +705,7 @@ +@@ -701,6 +705,7 @@ #endif funcs->dpms(crtc, DRM_MODE_DPMS_ON); @@ -7039,16 +6268,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_crtc.c linux-2.6.37-rc2 } static void nv_crtc_destroy(struct drm_crtc *crtc) -@@ -831,7 +831,7 @@ - /* Update the framebuffer location. */ - regp->fb_start = nv_crtc->fb.offset & ~3; - regp->fb_start += (y * drm_fb->pitch) + (x * drm_fb->bits_per_pixel / 8); -- NVWriteCRTC(dev, nv_crtc->index, NV_PCRTC_START, regp->fb_start); -+ nv_set_crtc_base(dev, nv_crtc->index, regp->fb_start); - - /* Update the arbitration parameters. */ - nouveau_calc_arb(dev, crtc->mode.clock, drm_fb->bits_per_pixel, -@@ -991,6 +991,7 @@ +@@ -986,6 +991,7 @@ .cursor_move = nv04_crtc_cursor_move, .gamma_set = nv_crtc_gamma_set, .set_config = drm_crtc_helper_set_config, @@ -7056,34 +6276,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_crtc.c linux-2.6.37-rc2 .destroy = nv_crtc_destroy, }; -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_dfp.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_dfp.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_dfp.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_dfp.c 2010-11-20 14:43:51.000000000 +0100 -@@ -185,14 +185,15 @@ - struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); - struct nouveau_connector *nv_connector = nouveau_encoder_connector_get(nv_encoder); - -- /* For internal panels and gpu scaling on DVI we need the native mode */ -- if (nv_connector->scaling_mode != DRM_MODE_SCALE_NONE) { -- if (!nv_connector->native_mode) -- return false; -+ if (!nv_connector->native_mode || -+ nv_connector->scaling_mode == DRM_MODE_SCALE_NONE || -+ mode->hdisplay > nv_connector->native_mode->hdisplay || -+ mode->vdisplay > nv_connector->native_mode->vdisplay) { -+ nv_encoder->mode = *adjusted_mode; -+ -+ } else { - nv_encoder->mode = *nv_connector->native_mode; - adjusted_mode->clock = nv_connector->native_mode->clock; -- } else { -- nv_encoder->mode = *adjusted_mode; - } - - return true; -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_display.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_display.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_display.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_display.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv04_display.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv04_display.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv04_display.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv04_display.c 2010-11-22 06:33:32.000000000 +0100 @@ -32,6 +32,9 @@ #include "nouveau_encoder.h" #include "nouveau_connector.h" @@ -7130,9 +6325,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_display.c linux-2.6.37- + nv_wr32(dev, NV_CRTC1_INTSTAT, NV_CRTC_INTR_VBLANK); + drm_handle_vblank(dev, 1); +} -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_fbcon.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_fbcon.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_fbcon.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_fbcon.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv04_fbcon.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv04_fbcon.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv04_fbcon.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv04_fbcon.c 2010-11-22 06:33:32.000000000 +0100 @@ -28,52 +28,39 @@ #include "nouveau_ramht.h" #include "nouveau_fbcon.h" @@ -7262,9 +6457,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_fbcon.c linux-2.6.37-rc } static int -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_fifo.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_fifo.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_fifo.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_fifo.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv04_fifo.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv04_fifo.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv04_fifo.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv04_fifo.c 2010-11-22 06:33:32.000000000 +0100 @@ -28,6 +28,7 @@ #include "drm.h" #include "nouveau_drv.h" @@ -7537,9 +6732,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_fifo.c linux-2.6.37-rc2 + + nv_wr32(dev, NV03_PMC_INTR_0, NV_PMC_INTR_0_PFIFO_PENDING); +} -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_graph.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_graph.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv04_graph.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv04_graph.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv04_graph.c 2010-11-22 06:33:32.000000000 +0100 @@ -26,6 +26,11 @@ #include "drm.h" #include "nouveau_drm.h" @@ -8408,9 +7603,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_graph.c linux-2.6.37-rc + } + } +} -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_instmem.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_instmem.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_instmem.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_instmem.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv04_instmem.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv04_instmem.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv04_instmem.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv04_instmem.c 2010-11-22 06:33:32.000000000 +0100 @@ -98,42 +98,66 @@ } @@ -8490,28 +7685,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_instmem.c linux-2.6.37- +nv04_instmem_flush(struct drm_device *dev) +{ +} -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_pm.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_pm.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv04_pm.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv04_pm.c 2010-11-20 14:43:51.000000000 +0100 -@@ -76,6 +76,15 @@ - reg += 4; - - nouveau_hw_setpll(dev, reg, &state->calc); -+ -+ if (dev_priv->card_type < NV_30 && reg == NV_PRAMDAC_MPLL_COEFF) { -+ if (dev_priv->card_type == NV_20) -+ nv_mask(dev, 0x1002c4, 0, 1 << 20); -+ -+ /* Reset the DLLs */ -+ nv_mask(dev, 0x1002c0, 0, 1 << 8); -+ } -+ - kfree(state); - } - -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_fb.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv10_fb.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_fb.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv10_fb.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv10_fb.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv10_fb.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv10_fb.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv10_fb.c 2010-11-22 06:33:32.000000000 +0100 @@ -3,23 +3,109 @@ #include "nouveau_drv.h" #include "nouveau_drm.h" @@ -8663,9 +7839,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_fb.c linux-2.6.37-rc2.n + if (dev_priv->card_type == NV_20) + drm_mm_takedown(&pfb->tag_heap); } -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_fifo.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv10_fifo.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_fifo.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv10_fifo.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv10_fifo.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv10_fifo.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv10_fifo.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv10_fifo.c 2010-11-22 06:33:32.000000000 +0100 @@ -73,17 +73,6 @@ return 0; } @@ -8701,9 +7877,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_fifo.c linux-2.6.37-rc2 uint32_t mode = nv_rd32(dev, NV04_PFIFO_MODE); nv_wr32(dev, NV04_PFIFO_MODE, mode | (1 << i)); } -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_graph.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv10_graph.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_graph.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv10_graph.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv10_graph.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv10_graph.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv10_graph.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv10_graph.c 2010-11-22 06:33:32.000000000 +0100 @@ -26,6 +26,10 @@ #include "drm.h" #include "nouveau_drm.h" @@ -9018,9 +8194,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv10_graph.c linux-2.6.37-rc + } + } +} -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv20_graph.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv20_graph.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv20_graph.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv20_graph.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv20_graph.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv20_graph.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv20_graph.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv20_graph.c 2010-11-22 06:33:32.000000000 +0100 @@ -32,6 +32,10 @@ #define NV34_GRCTX_SIZE (18140) #define NV35_36_GRCTX_SIZE (22396) @@ -9351,9 +8527,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv20_graph.c linux-2.6.37-rc + } + } +} -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv30_fb.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv30_fb.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv30_fb.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv30_fb.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv30_fb.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv30_fb.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv30_fb.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv30_fb.c 2010-11-22 06:33:32.000000000 +0100 @@ -29,6 +29,27 @@ #include "nouveau_drv.h" #include "nouveau_drm.h" @@ -9391,9 +8567,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv30_fb.c linux-2.6.37-rc2.n /* Init the memory timing regs at 0x10037c/0x1003ac */ if (dev_priv->chipset == 0x30 || -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv40_fb.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv40_fb.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv40_fb.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv40_fb.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv40_fb.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv40_fb.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv40_fb.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv40_fb.c 2010-11-22 06:33:32.000000000 +0100 @@ -4,26 +4,22 @@ #include "nouveau_drm.h" @@ -9438,9 +8614,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv40_fb.c linux-2.6.37-rc2.n return 0; } -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv40_fifo.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv40_fifo.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv40_fifo.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv40_fifo.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv40_fifo.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv40_fifo.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv40_fifo.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv40_fifo.c 2010-11-22 06:33:32.000000000 +0100 @@ -70,17 +70,6 @@ return 0; } @@ -9476,9 +8652,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv40_fifo.c linux-2.6.37-rc2 uint32_t mode = nv_rd32(dev, NV04_PFIFO_MODE); nv_wr32(dev, NV04_PFIFO_MODE, mode | (1 << i)); } -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv40_graph.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv40_graph.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv40_graph.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv40_graph.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv40_graph.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv40_graph.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv40_graph.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv40_graph.c 2010-11-22 06:33:32.000000000 +0100 @@ -29,6 +29,9 @@ #include "nouveau_drv.h" #include "nouveau_grctx.h" @@ -9747,47 +8923,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv40_graph.c linux-2.6.37-rc + } + } +} -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_calc.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_calc.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_calc.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_calc.c 2010-11-20 14:43:51.000000000 +0100 -@@ -51,24 +51,28 @@ - int *N, int *fN, int *M, int *P) - { - fixed20_12 fb_div, a, b; -+ u32 refclk = pll->refclk / 10; -+ u32 max_vco_freq = pll->vco1.maxfreq / 10; -+ u32 max_vco_inputfreq = pll->vco1.max_inputfreq / 10; -+ clk /= 10; - -- *P = pll->vco1.maxfreq / clk; -+ *P = max_vco_freq / clk; - if (*P > pll->max_p) - *P = pll->max_p; - if (*P < pll->min_p) - *P = pll->min_p; - -- /* *M = ceil(refclk / pll->vco.max_inputfreq); */ -- a.full = dfixed_const(pll->refclk); -- b.full = dfixed_const(pll->vco1.max_inputfreq); -+ /* *M = floor((refclk + max_vco_inputfreq) / max_vco_inputfreq); */ -+ a.full = dfixed_const(refclk + max_vco_inputfreq); -+ b.full = dfixed_const(max_vco_inputfreq); - a.full = dfixed_div(a, b); -- a.full = dfixed_ceil(a); -+ a.full = dfixed_floor(a); - *M = dfixed_trunc(a); - - /* fb_div = (vco * *M) / refclk; */ - fb_div.full = dfixed_const(clk * *P); - fb_div.full = dfixed_mul(fb_div, a); -- a.full = dfixed_const(pll->refclk); -+ a.full = dfixed_const(refclk); - fb_div.full = dfixed_div(fb_div, a); - - /* *N = floor(fb_div); */ -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_crtc.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_crtc.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_crtc.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_crtc.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv50_crtc.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv50_crtc.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv50_crtc.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv50_crtc.c 2010-11-22 06:33:32.000000000 +0100 @@ -437,6 +437,7 @@ .cursor_move = nv50_crtc_cursor_move, .gamma_set = nv50_crtc_gamma_set, @@ -9812,27 +8950,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_crtc.c linux-2.6.37-rc2 ret = RING_SPACE(evo, 2); if (ret) { -@@ -546,7 +549,7 @@ - } - - nv_crtc->fb.offset = fb->nvbo->bo.offset - dev_priv->vm_vram_base; -- nv_crtc->fb.tile_flags = fb->nvbo->tile_flags; -+ nv_crtc->fb.tile_flags = nouveau_bo_tile_layout(fb->nvbo); - nv_crtc->fb.cpp = drm_fb->bits_per_pixel / 8; - if (!nv_crtc->fb.blanked && dev_priv->chipset != 0x50) { - ret = RING_SPACE(evo, 2); -@@ -578,7 +581,7 @@ - fb->nvbo->tile_mode); - } - if (dev_priv->chipset == 0x50) -- OUT_RING(evo, (fb->nvbo->tile_flags << 8) | format); -+ OUT_RING(evo, (nv_crtc->fb.tile_flags << 8) | format); - else - OUT_RING(evo, format); - -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_display.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_display.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_display.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_display.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv50_display.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv50_display.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv50_display.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv50_display.c 2010-11-22 06:33:32.000000000 +0100 @@ -33,6 +33,8 @@ #include "nouveau_ramht.h" #include "drm_crtc_helper.h" @@ -10112,6 +9232,10 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_display.c linux-2.6.37- + NV50_PDISPLAY_INTR_EN_1_CLK_UNK10 | + NV50_PDISPLAY_INTR_EN_1_CLK_UNK20 | + NV50_PDISPLAY_INTR_EN_1_CLK_UNK40); ++ ++ /* enable hotplug interrupts */ ++ list_for_each_entry(connector, &dev->mode_config.connector_list, head) { ++ struct nouveau_connector *conn = nouveau_connector(connector); - /* initialise fifo */ - nv_wr32(dev, NV50_PDISPLAY_CHANNEL_DMA_CB(0), @@ -10137,17 +9261,13 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_display.c linux-2.6.37- - evo->dma.put = 0; - evo->dma.cur = evo->dma.put; - evo->dma.free = evo->dma.max - evo->dma.cur; -+ /* enable hotplug interrupts */ -+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) { -+ struct nouveau_connector *conn = nouveau_connector(connector); -+ + if (conn->dcb->gpio_tag == 0xff) + continue; -+ -+ pgpio->irq_enable(dev, conn->dcb->gpio_tag, true); -+ } - ret = RING_SPACE(evo, NOUVEAU_DMA_SKIPS); ++ pgpio->irq_enable(dev, conn->dcb->gpio_tag, true); ++ } ++ + ret = nv50_evo_init(dev); if (ret) return ret; @@ -10287,7 +9407,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_display.c linux-2.6.37- } static void -@@ -1011,91 +785,31 @@ +@@ -1011,108 +785,31 @@ static void nv50_display_error_handler(struct drm_device *dev) { @@ -10312,11 +9432,18 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_display.c linux-2.6.37- - struct drm_connector *connector; - const uint32_t gpio_reg[4] = { 0xe104, 0xe108, 0xe280, 0xe284 }; - uint32_t unplug_mask, plug_mask, change_mask; -- uint32_t hpd0, hpd1 = 0; +- uint32_t hpd0, hpd1; - -- hpd0 = nv_rd32(dev, 0xe054) & nv_rd32(dev, 0xe050); +- spin_lock_irq(&dev_priv->hpd_state.lock); +- hpd0 = dev_priv->hpd_state.hpd0_bits; +- dev_priv->hpd_state.hpd0_bits = 0; +- hpd1 = dev_priv->hpd_state.hpd1_bits; +- dev_priv->hpd_state.hpd1_bits = 0; +- spin_unlock_irq(&dev_priv->hpd_state.lock); +- +- hpd0 &= nv_rd32(dev, 0xe050); - if (dev_priv->chipset >= 0x90) -- hpd1 = nv_rd32(dev, 0xe074) & nv_rd32(dev, 0xe070); +- hpd1 &= nv_rd32(dev, 0xe070); - - plug_mask = (hpd0 & 0x0000ffff) | (hpd1 << 16); - unplug_mask = (hpd0 >> 16) | (hpd1 & 0xffff0000); @@ -10330,6 +9457,13 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_display.c linux-2.6.37- - struct dcb_gpio_entry *gpio; - uint32_t reg; - bool plugged; +- +- if (!nv_connector->dcb) +- continue; +- +- gpio = nouveau_bios_gpio_entry(dev, nv_connector->dcb->gpio_tag); +- if (!gpio || !(change_mask & (1 << gpio->line))) +- continue; + u32 channels = (nv_rd32(dev, NV50_PDISPLAY_INTR_0) & 0x001f0000) >> 16; + u32 addr, data; + int chid; @@ -10345,13 +9479,6 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_display.c linux-2.6.37- + "(0x%04x 0x%02x)\n", chid, + addr & 0xffc, data, addr >> 16, (addr >> 12) & 0xf); -- if (!nv_connector->dcb) -- continue; -- -- gpio = nouveau_bios_gpio_entry(dev, nv_connector->dcb->gpio_tag); -- if (!gpio || !(change_mask & (1 << gpio->line))) -- continue; -- - reg = nv_rd32(dev, gpio_reg[gpio->line >> 3]); - plugged = !!(reg & (4 << ((gpio->line & 7) << 2))); - NV_INFO(dev, "%splugged %s\n", plugged ? "" : "un", @@ -10373,10 +9500,6 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_display.c linux-2.6.37- + nv_wr32(dev, NV50_PDISPLAY_TRAPPED_ADDR(chid), 0x90000000); } - -- nv_wr32(dev, 0xe054, nv_rd32(dev, 0xe054)); -- if (dev_priv->chipset >= 0x90) -- nv_wr32(dev, 0xe074, nv_rd32(dev, 0xe074)); -- - drm_helper_hpd_irq_event(dev); } @@ -10389,14 +9512,28 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_display.c linux-2.6.37- uint32_t delayed = 0; - if (nv_rd32(dev, NV50_PMC_INTR_0) & NV50_PMC_INTR_0_HOTPLUG) { -- if (!work_pending(&dev_priv->hpd_work)) -- queue_work(dev_priv->wq, &dev_priv->hpd_work); +- uint32_t hpd0_bits, hpd1_bits = 0; +- +- hpd0_bits = nv_rd32(dev, 0xe054); +- nv_wr32(dev, 0xe054, hpd0_bits); +- +- if (dev_priv->chipset >= 0x90) { +- hpd1_bits = nv_rd32(dev, 0xe074); +- nv_wr32(dev, 0xe074, hpd1_bits); +- } +- +- spin_lock(&dev_priv->hpd_state.lock); +- dev_priv->hpd_state.hpd0_bits |= hpd0_bits; +- dev_priv->hpd_state.hpd1_bits |= hpd1_bits; +- spin_unlock(&dev_priv->hpd_state.lock); +- +- queue_work(dev_priv->wq, &dev_priv->hpd_work); - } - while (nv_rd32(dev, NV50_PMC_INTR_0) & NV50_PMC_INTR_0_DISPLAY) { uint32_t intr0 = nv_rd32(dev, NV50_PDISPLAY_INTR_0); uint32_t intr1 = nv_rd32(dev, NV50_PDISPLAY_INTR_1); -@@ -1106,9 +820,9 @@ +@@ -1123,9 +820,9 @@ if (!intr0 && !(intr1 & ~delayed)) break; @@ -10408,14 +9545,14 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_display.c linux-2.6.37- } if (intr1 & NV50_PDISPLAY_INTR_1_VBLANK_CRTC) { -@@ -1139,4 +853,3 @@ +@@ -1156,4 +853,3 @@ } } } - -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_display.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_display.h ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_display.h 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_display.h 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv50_display.h linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv50_display.h +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv50_display.h 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv50_display.h 2010-11-22 06:33:32.000000000 +0100 @@ -35,9 +35,7 @@ #include "nouveau_crtc.h" #include "nv50_evo.h" @@ -10426,9 +9563,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_display.h linux-2.6.37- int nv50_display_early_init(struct drm_device *dev); void nv50_display_late_takedown(struct drm_device *dev); int nv50_display_create(struct drm_device *dev); -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_evo.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_evo.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_evo.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_evo.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv50_evo.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv50_evo.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv50_evo.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv50_evo.c 2010-11-22 06:33:32.000000000 +0100 @@ -0,0 +1,318 @@ +/* + * Copyright 2010 Red Hat Inc. @@ -10748,9 +9885,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_evo.c linux-2.6.37-rc2. + nv50_evo_channel_del(&dev_priv->evo); + } +} -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_evo.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_evo.h ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_evo.h 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_evo.h 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv50_evo.h linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv50_evo.h +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv50_evo.h 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv50_evo.h 2010-11-22 06:33:32.000000000 +0100 @@ -24,6 +24,15 @@ * */ @@ -10772,9 +9909,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_evo.h linux-2.6.37-rc2. #define NV50_EVO_CRTC_SCALE_RES2 0x000008dc +#endif -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_fb.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_fb.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_fb.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_fb.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv50_fb.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv50_fb.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv50_fb.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv50_fb.c 2010-11-22 06:33:32.000000000 +0100 @@ -3,30 +3,75 @@ #include "nouveau_drv.h" #include "nouveau_drm.h" @@ -10901,9 +10038,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_fb.c linux-2.6.37-rc2.n NV_INFO(dev, "%s - VM: Trapped %s at %02x%04x%04x status %08x " "channel %d (0x%08x)\n", -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_fbcon.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_fbcon.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_fbcon.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_fbcon.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv50_fbcon.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv50_fbcon.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv50_fbcon.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv50_fbcon.c 2010-11-22 06:33:32.000000000 +0100 @@ -4,26 +4,18 @@ #include "nouveau_ramht.h" #include "nouveau_fbcon.h" @@ -11035,9 +10172,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_fbcon.c linux-2.6.37-rc } int -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_fifo.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_fifo.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_fifo.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_fifo.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv50_fifo.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv50_fifo.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv50_fifo.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv50_fifo.c 2010-11-22 06:33:32.000000000 +0100 @@ -44,7 +44,8 @@ /* We never schedule channel 0 or 127 */ @@ -11128,18 +10265,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_fifo.c linux-2.6.37-rc2 if (!chan) { NV_ERROR(dev, "Inactive channel on PFIFO: %d\n", chid); return -EINVAL; -@@ -464,3 +486,8 @@ - return 0; - } - -+void -+nv50_fifo_tlb_flush(struct drm_device *dev) -+{ -+ nv50_vm_flush(dev, 5); -+} -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_gpio.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_gpio.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_gpio.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_gpio.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv50_gpio.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv50_gpio.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv50_gpio.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv50_gpio.c 2010-11-22 06:33:32.000000000 +0100 @@ -26,6 +26,28 @@ #include "nouveau_drv.h" #include "nouveau_hw.h" @@ -11376,9 +10504,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_gpio.c linux-2.6.37-rc2 + } + spin_unlock(&priv->lock); +} -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_graph.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_graph.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_graph.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_graph.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv50_graph.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv50_graph.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv50_graph.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv50_graph.c 2010-11-22 06:33:32.000000000 +0100 @@ -29,6 +29,11 @@ #include "nouveau_drv.h" #include "nouveau_ramht.h" @@ -11524,7 +10652,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_graph.c linux-2.6.37-rc { struct drm_device *dev = chan->dev; struct drm_nouveau_private *dev_priv = dev->dev_private; -@@ -368,37 +390,621 @@ +@@ -368,40 +390,80 @@ if (!chan->nvsw.vblsem || chan->nvsw.vblsem_offset == ~0 || data > 1) return -EINVAL; @@ -11541,15 +10669,35 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_graph.c linux-2.6.37-rc + chan->nvsw.vblsem_head = data; list_add(&chan->nvsw.vbl_wait, &dev_priv->vbl_waiting); + -+ return 0; -+} -+ + return 0; + } + +-static struct nouveau_pgraph_object_method nv50_graph_nvsw_methods[] = { +- { 0x018c, nv50_graph_nvsw_dma_vblsem }, +- { 0x0400, nv50_graph_nvsw_vblsem_offset }, +- { 0x0404, nv50_graph_nvsw_vblsem_release_val }, +- { 0x0408, nv50_graph_nvsw_vblsem_release }, +- {} +-}; +static int +nv50_graph_nvsw_mthd_page_flip(struct nouveau_channel *chan, + u32 class, u32 mthd, u32 data) +{ + struct nouveau_page_flip_state s; -+ + +-struct nouveau_pgraph_object_class nv50_graph_grclass[] = { +- { 0x506e, true, nv50_graph_nvsw_methods }, /* nvsw */ +- { 0x0030, false, NULL }, /* null */ +- { 0x5039, false, NULL }, /* m2mf */ +- { 0x502d, false, NULL }, /* 2d */ +- { 0x50c0, false, NULL }, /* compute */ +- { 0x85c0, false, NULL }, /* compute (nva3, nva5, nva8) */ +- { 0x5097, false, NULL }, /* tesla (nv50) */ +- { 0x8297, false, NULL }, /* tesla (nv8x/nv9x) */ +- { 0x8397, false, NULL }, /* tesla (nva0, nvaa, nvac) */ +- { 0x8597, false, NULL }, /* tesla (nva3, nva5, nva8) */ +- {} +-}; + if (!nouveau_finish_page_flip(chan, &s)) { + /* XXX - Do something here */ + } @@ -11608,65 +10756,15 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_graph.c linux-2.6.37-rc + NVOBJ_CLASS(dev, 0x85c0, GR); + + dev_priv->engine.graph.registered = true; - return 0; - } ++ return 0; ++} --static struct nouveau_pgraph_object_method nv50_graph_nvsw_methods[] = { -- { 0x018c, nv50_graph_nvsw_dma_vblsem }, -- { 0x0400, nv50_graph_nvsw_vblsem_offset }, -- { 0x0404, nv50_graph_nvsw_vblsem_release_val }, -- { 0x0408, nv50_graph_nvsw_vblsem_release }, -+void -+nv50_graph_tlb_flush(struct drm_device *dev) -+{ -+ nv50_vm_flush(dev, 0); -+} -+ -+void -+nv86_graph_tlb_flush(struct drm_device *dev) -+{ -+ struct drm_nouveau_private *dev_priv = dev->dev_private; -+ struct nouveau_timer_engine *ptimer = &dev_priv->engine.timer; -+ bool idle, timeout = false; -+ unsigned long flags; -+ u64 start; -+ u32 tmp; -+ -+ spin_lock_irqsave(&dev_priv->context_switch_lock, flags); -+ nv_mask(dev, 0x400500, 0x00000001, 0x00000000); -+ -+ start = ptimer->read(dev); -+ do { -+ idle = true; -+ -+ for (tmp = nv_rd32(dev, 0x400380); tmp && idle; tmp >>= 3) { -+ if ((tmp & 7) == 1) -+ idle = false; -+ } -+ -+ for (tmp = nv_rd32(dev, 0x400384); tmp && idle; tmp >>= 3) { -+ if ((tmp & 7) == 1) -+ idle = false; -+ } -+ -+ for (tmp = nv_rd32(dev, 0x400388); tmp && idle; tmp >>= 3) { -+ if ((tmp & 7) == 1) -+ idle = false; -+ } -+ } while (!idle && !(timeout = ptimer->read(dev) - start > 2000000000)); -+ -+ if (timeout) { -+ NV_ERROR(dev, "PGRAPH TLB flush idle timeout fail: " -+ "0x%08x 0x%08x 0x%08x 0x%08x\n", -+ nv_rd32(dev, 0x400700), nv_rd32(dev, 0x400380), -+ nv_rd32(dev, 0x400384), nv_rd32(dev, 0x400388)); -+ } -+ -+ nv50_vm_flush(dev, 0); -+ -+ nv_mask(dev, 0x400500, 0x00000001, 0x00000001); -+ spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); -+} + void + nv50_graph_tlb_flush(struct drm_device *dev) +@@ -454,3 +516,495 @@ + nv_mask(dev, 0x400500, 0x00000001, 0x00000001); + spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); + } + +static struct nouveau_enum nv50_mp_exec_error_names[] = +{ @@ -11697,20 +10795,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_graph.c linux-2.6.37-rc + +static struct nouveau_bitfield nv50_graph_trap_ccache[] = { + { 0x00000001, "FAULT" }, - {} - }; - --struct nouveau_pgraph_object_class nv50_graph_grclass[] = { -- { 0x506e, true, nv50_graph_nvsw_methods }, /* nvsw */ -- { 0x0030, false, NULL }, /* null */ -- { 0x5039, false, NULL }, /* m2mf */ -- { 0x502d, false, NULL }, /* 2d */ -- { 0x50c0, false, NULL }, /* compute */ -- { 0x85c0, false, NULL }, /* compute (nva3, nva5, nva8) */ -- { 0x5097, false, NULL }, /* tesla (nv50) */ -- { 0x8297, false, NULL }, /* tesla (nv8x/nv9x) */ -- { 0x8397, false, NULL }, /* tesla (nva0, nvaa, nvac) */ -- { 0x8597, false, NULL }, /* tesla (nva3, nva5, nva8) */ ++ {} ++}; ++ +/* There must be a *lot* of these. Will take some time to gather them up. */ +static struct nouveau_enum nv50_data_error_names[] = { + { 4, "INVALID_VALUE" }, @@ -11719,8 +10806,8 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_graph.c linux-2.6.37-rc + { 0xc, "INVALID_BITFIELD" }, + { 0x28, "MP_NO_REG_SPACE" }, + { 0x2b, "MP_BLOCK_SIZE_MISMATCH" }, - {} - }; ++ {} ++}; + +static struct nouveau_bitfield nv50_graph_intr[] = { + { 0x00000001, "NOTIFY" }, @@ -12170,9 +11257,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_graph.c linux-2.6.37-rc + if (nv_rd32(dev, 0x400824) & (1 << 31)) + nv_wr32(dev, 0x400824, nv_rd32(dev, 0x400824) & ~(1 << 31)); +} -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_instmem.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_instmem.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_instmem.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv50_instmem.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv50_instmem.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv50_instmem.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv50_instmem.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv50_instmem.c 2010-11-22 06:33:32.000000000 +0100 @@ -131,10 +131,10 @@ } @@ -12387,7 +11474,7 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_instmem.c linux-2.6.37- NV_DEBUG(dev, "first vram page: 0x%010llx\n", gpuobj->vinst); vram |= 1; -@@ -395,46 +396,45 @@ +@@ -395,8 +396,8 @@ } while (pte < pte_end) { @@ -12398,9 +11485,8 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_instmem.c linux-2.6.37- vram += 0x1000; pte += 2; } - dev_priv->engine.instmem.flush(dev); +@@ -404,36 +405,36 @@ -- nv50_vm_flush(dev, 4); nv50_vm_flush(dev, 6); - gpuobj->im_bound = 1; @@ -12452,9 +11538,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv50_instmem.c linux-2.6.37- } void -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv84_crypt.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv84_crypt.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv84_crypt.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nv84_crypt.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv84_crypt.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv84_crypt.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nv84_crypt.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nv84_crypt.c 2010-11-22 06:33:32.000000000 +0100 @@ -0,0 +1,137 @@ +/* + * Copyright 2010 Red Hat Inc. @@ -12593,9 +11679,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nv84_crypt.c linux-2.6.37-rc + + nv50_fb_vm_trap(dev, show, "PCRYPT"); +} -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nvc0_instmem.c linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nvc0_instmem.c ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nvc0_instmem.c 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nvc0_instmem.c 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nvc0_instmem.c linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nvc0_instmem.c +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nvc0_instmem.c 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nvc0_instmem.c 2010-11-22 06:33:32.000000000 +0100 @@ -26,67 +26,89 @@ #include "nouveau_drv.h" @@ -12768,9 +11854,9 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nvc0_instmem.c linux-2.6.37- } void -diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nvreg.h linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nvreg.h ---- linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nvreg.h 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/drivers/gpu/drm/nouveau/nvreg.h 2010-11-20 14:43:51.000000000 +0100 +diff -Naur linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nvreg.h linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nvreg.h +--- linux-2.6.37-rc3/drivers/gpu/drm/nouveau/nvreg.h 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/drivers/gpu/drm/nouveau/nvreg.h 2010-11-22 06:33:32.000000000 +0100 @@ -153,7 +153,8 @@ #define NV_PCRTC_START 0x00600800 #define NV_PCRTC_CONFIG 0x00600804 @@ -12781,10 +11867,10 @@ diff -Naur linux-2.6.37-rc2/drivers/gpu/drm/nouveau/nvreg.h linux-2.6.37-rc2.nou #define NV_PCRTC_CURSOR_CONFIG 0x00600810 # define NV_PCRTC_CURSOR_CONFIG_ENABLE_ENABLE (1 << 0) # define NV_PCRTC_CURSOR_CONFIG_DOUBLE_SCAN_ENABLE (1 << 4) -diff -Naur linux-2.6.37-rc2/include/drm/nouveau_drm.h linux-2.6.37-rc2.nouveau/include/drm/nouveau_drm.h ---- linux-2.6.37-rc2/include/drm/nouveau_drm.h 2010-11-16 03:31:02.000000000 +0100 -+++ linux-2.6.37-rc2.nouveau/include/drm/nouveau_drm.h 2010-11-20 14:43:51.000000000 +0100 -@@ -71,15 +71,14 @@ +diff -Naur linux-2.6.37-rc3/include/drm/nouveau_drm.h linux-2.6.37-rc3.nouveau/include/drm/nouveau_drm.h +--- linux-2.6.37-rc3/include/drm/nouveau_drm.h 2010-11-22 00:18:56.000000000 +0100 ++++ linux-2.6.37-rc3.nouveau/include/drm/nouveau_drm.h 2010-11-22 06:33:32.000000000 +0100 +@@ -71,16 +71,15 @@ #define NOUVEAU_GETPARAM_PCI_VENDOR 3 #define NOUVEAU_GETPARAM_PCI_DEVICE 4 #define NOUVEAU_GETPARAM_BUS_TYPE 5 @@ -12797,25 +11883,13 @@ diff -Naur linux-2.6.37-rc2/include/drm/nouveau_drm.h linux-2.6.37-rc2.nouveau/i #define NOUVEAU_GETPARAM_VM_VRAM_BASE 12 #define NOUVEAU_GETPARAM_GRAPH_UNITS 13 #define NOUVEAU_GETPARAM_PTIMER_TIME 14 -+#define NOUVEAU_GETPARAM_HAS_BO_USAGE 15 + #define NOUVEAU_GETPARAM_HAS_BO_USAGE 15 +#define NOUVEAU_GETPARAM_HAS_PAGEFLIP 16 ++ struct drm_nouveau_getparam { uint64_t param; uint64_t value; -@@ -95,6 +94,12 @@ - #define NOUVEAU_GEM_DOMAIN_GART (1 << 2) - #define NOUVEAU_GEM_DOMAIN_MAPPABLE (1 << 3) - -+#define NOUVEAU_GEM_TILE_LAYOUT_MASK 0x0000ff00 -+#define NOUVEAU_GEM_TILE_16BPP 0x00000001 -+#define NOUVEAU_GEM_TILE_32BPP 0x00000002 -+#define NOUVEAU_GEM_TILE_ZETA 0x00000004 -+#define NOUVEAU_GEM_TILE_NONCONTIG 0x00000008 -+ - struct drm_nouveau_gem_info { - uint32_t handle; - uint32_t domain; -@@ -164,7 +169,6 @@ +@@ -171,7 +170,6 @@ }; #define NOUVEAU_GEM_CPU_PREP_NOWAIT 0x00000001 diff --git a/packages/linux/patches/linux-2.6.37-rc2-120_RFC-RFT-v3-sched-automated-per-tty-task-groups.patch b/packages/linux/patches/linux-2.6.37-rc3-120_RFC-RFT-v3-sched-automated-per-tty-task-groups.patch similarity index 100% rename from packages/linux/patches/linux-2.6.37-rc2-120_RFC-RFT-v3-sched-automated-per-tty-task-groups.patch rename to packages/linux/patches/linux-2.6.37-rc3-120_RFC-RFT-v3-sched-automated-per-tty-task-groups.patch diff --git a/packages/linux/patches/rename.sh b/packages/linux/patches/rename.sh new file mode 100755 index 0000000000..e78f4eb137 --- /dev/null +++ b/packages/linux/patches/rename.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +for i in `ls linux-$1-*.patch`; do + mv $i `echo $i | sed "s,$1,$2,g"` +done From 6de2410de243d583352178898668306813bd276c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 22 Nov 2010 19:48:39 +0100 Subject: [PATCH 482/850] Mesa: update to Mesa-20101122 Signed-off-by: Stephan Raue --- packages/graphics/Mesa/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/graphics/Mesa/meta b/packages/graphics/Mesa/meta index 7ec71c8e25..a108a8fc4a 100644 --- a/packages/graphics/Mesa/meta +++ b/packages/graphics/Mesa/meta @@ -14,6 +14,6 @@ PKG_LONGDESC="Mesa is a 3-D graphics library with an API which is very similar t PKG_IS_ADDON="no" if [ $MESA_MASTER = "yes" ]; then - PKG_VERSION="20101121" + PKG_VERSION="20101122" PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" fi From c306a8bda13d293b0edc87b8c55d737bed3ebf1d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 22 Nov 2010 19:48:53 +0100 Subject: [PATCH 483/850] libdrm: update to libdrm-20101122 Signed-off-by: Stephan Raue --- packages/graphics/libdrm/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/graphics/libdrm/meta b/packages/graphics/libdrm/meta index 7ff155e2cb..ac271355f7 100644 --- a/packages/graphics/libdrm/meta +++ b/packages/graphics/libdrm/meta @@ -14,6 +14,6 @@ PKG_LONGDESC="The userspace interface library to kernel DRM services." PKG_IS_ADDON="no" if [ $LIBDRM_MASTER = "yes" ]; then - PKG_VERSION="20101111" + PKG_VERSION="20101122" PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" fi From 17e0f524001ca24681ece24492f53bd4faa77551 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 22 Nov 2010 20:14:31 +0100 Subject: [PATCH 484/850] linux: remove unneeded patch Signed-off-by: Stephan Raue --- .../linux-2.6.37-rc3-000_fix_include.patch | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 packages/linux/patches/linux-2.6.37-rc3-000_fix_include.patch diff --git a/packages/linux/patches/linux-2.6.37-rc3-000_fix_include.patch b/packages/linux/patches/linux-2.6.37-rc3-000_fix_include.patch deleted file mode 100644 index d5d7a1edf6..0000000000 --- a/packages/linux/patches/linux-2.6.37-rc3-000_fix_include.patch +++ /dev/null @@ -1,19 +0,0 @@ -diff -Naur linux-2.6.37-rc1/include/linux/rtnetlink.h linux-2.6.37-rc1.patch/include/linux/rtnetlink.h ---- linux-2.6.37-rc1/include/linux/rtnetlink.h 2010-11-01 12:54:12.000000000 +0100 -+++ linux-2.6.37-rc1.patch/include/linux/rtnetlink.h 2010-11-15 18:03:38.434438769 +0100 -@@ -6,7 +6,6 @@ - #include - #include - #include --#include - - /* rtnetlink families. Values up to 127 are reserved for real address - * families, values above 128 may be used arbitrarily. -@@ -606,6 +605,7 @@ - #ifdef __KERNEL__ - - #include -+#include - - static __inline__ int rtattr_strcmp(const struct rtattr *rta, const char *str) - { From 40299c472acae749721ac3408a507e3059ca66c2 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 22 Nov 2010 21:04:32 +0100 Subject: [PATCH 485/850] bluez: update to bluez-4.80 Signed-off-by: Stephan Raue --- packages/network/bluez/meta | 2 +- .../{bluez-4.79-ps3remote.patch => bluez-4.80-ps3remote.patch} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename packages/network/bluez/patches/{bluez-4.79-ps3remote.patch => bluez-4.80-ps3remote.patch} (100%) diff --git a/packages/network/bluez/meta b/packages/network/bluez/meta index 2642ac2fc8..326f91f128 100644 --- a/packages/network/bluez/meta +++ b/packages/network/bluez/meta @@ -1,5 +1,5 @@ PKG_NAME="bluez" -PKG_VERSION="4.79" +PKG_VERSION="4.80" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/network/bluez/patches/bluez-4.79-ps3remote.patch b/packages/network/bluez/patches/bluez-4.80-ps3remote.patch similarity index 100% rename from packages/network/bluez/patches/bluez-4.79-ps3remote.patch rename to packages/network/bluez/patches/bluez-4.80-ps3remote.patch From fb4d32328594e6ce74781bf046b233507e1896ab Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 22 Nov 2010 21:05:08 +0100 Subject: [PATCH 486/850] mysql: update to mysql-5.1.53 Signed-off-by: Stephan Raue --- packages/databases/mysql/meta | 2 +- ...osscompiling.patch => mysql-5.1.53-010_crosscompiling.patch} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename packages/databases/mysql/patches/{mysql-5.1.52-010_crosscompiling.patch => mysql-5.1.53-010_crosscompiling.patch} (100%) diff --git a/packages/databases/mysql/meta b/packages/databases/mysql/meta index 36e5df33dc..125d81288c 100644 --- a/packages/databases/mysql/meta +++ b/packages/databases/mysql/meta @@ -1,5 +1,5 @@ PKG_NAME="mysql" -PKG_VERSION="5.1.52" +PKG_VERSION="5.1.53" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="LGPL" diff --git a/packages/databases/mysql/patches/mysql-5.1.52-010_crosscompiling.patch b/packages/databases/mysql/patches/mysql-5.1.53-010_crosscompiling.patch similarity index 100% rename from packages/databases/mysql/patches/mysql-5.1.52-010_crosscompiling.patch rename to packages/databases/mysql/patches/mysql-5.1.53-010_crosscompiling.patch From 2ad0e04615aedb6a7cb62bb58df2087432b10cd7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 22 Nov 2010 22:44:39 +0100 Subject: [PATCH 487/850] config/path: cleanup, fix detection of $PKG_BUILD Signed-off-by: Stephan Raue --- config/path | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/config/path b/config/path index 06624152e3..7dc616ee16 100644 --- a/config/path +++ b/config/path @@ -85,11 +85,7 @@ SED="sed -i" [ -r $PKG_DIR/meta ] && . $PKG_DIR/meta [ "$PKG_IS_ADDON" = "yes" ] && PKG_ADDON_ID="addon.$PKG_SECTION.$PKG_NAME" -if [ -r $PKG_DIR/meta ]; then - PKG_BUILD=$BUILD/${PKG_NAME}\[-_]${PKG_VERSION} -else - PKG_BUILD=$BUILD/$1\[-_][0-9]* -fi + PKG_BUILD=`[ -d $BUILD/${PKG_NAME}*${PKG_VERSION} ] && ls -d $BUILD/${PKG_NAME}*${PKG_VERSION} || echo ""` XORG_PATH_ENCODINGS=/usr/share/X11/encodings XORG_PATH_FONTS=/usr/share/X11/fonts From a1c70ed450f659040fc8ada2f481b0a6b7c8fc13 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 22 Nov 2010 22:46:26 +0100 Subject: [PATCH 488/850] LVM2: use $PKG_BUILD Signed-off-by: Stephan Raue --- packages/sysutils/LVM2/build | 2 +- packages/sysutils/LVM2/install | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/sysutils/LVM2/build b/packages/sysutils/LVM2/build index 4af3f21cc9..eb9f772b84 100755 --- a/packages/sysutils/LVM2/build +++ b/packages/sysutils/LVM2/build @@ -2,7 +2,7 @@ . config/options $1 -cd $BUILD/$1* +cd $PKG_BUILD ac_cv_func_malloc_0_nonnull=yes \ ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/sysutils/LVM2/install b/packages/sysutils/LVM2/install index 038525b353..2c82305b3c 100755 --- a/packages/sysutils/LVM2/install +++ b/packages/sysutils/LVM2/install @@ -3,13 +3,13 @@ . config/options $1 mkdir -p $INSTALL/etc/lvm - cp $BUILD/$1*/doc/example.conf $INSTALL/etc/lvm/lvm.conf + cp $PKG_BUILD/doc/example.conf $INSTALL/etc/lvm/lvm.conf mkdir -p $INSTALL/usr/lib - cp -P $BUILD/$1*/libdm/ioctl/libdevmapper.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/libdm/ioctl/libdevmapper.so* $INSTALL/usr/lib if [ "$DEVTOOLS" = yes ]; then mkdir -p $INSTALL/sbin - cp $BUILD/$1*/tools/lvm $INSTALL/sbin + cp $PKG_BUILD/tools/lvm $INSTALL/sbin fi From dc49047ea703417146da57287ddc7aee4b130e60 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 23 Nov 2010 03:08:13 +0100 Subject: [PATCH 489/850] new package: add package 'w_scan' Signed-off-by: Stephan Raue --- packages/debug/meta | 2 +- packages/debug/w_scan/build | 13 +++++++++++++ packages/debug/w_scan/install | 7 +++++++ packages/debug/w_scan/meta | 14 ++++++++++++++ 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100755 packages/debug/w_scan/build create mode 100755 packages/debug/w_scan/install create mode 100644 packages/debug/w_scan/meta diff --git a/packages/debug/meta b/packages/debug/meta index 7a239595c4..e91e924510 100644 --- a/packages/debug/meta +++ b/packages/debug/meta @@ -5,7 +5,7 @@ PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://www.openelec.tv" PKG_URL="" -PKG_DEPENDS="strace gdb mesa-demos htop nano wgetpaste evtest tvdump" +PKG_DEPENDS="strace gdb mesa-demos htop nano wgetpaste evtest tvdump w_scan" PKG_BUILD_DEPENDS="toolchain" PKG_PRIORITY="optional" PKG_SECTION="debug" diff --git a/packages/debug/w_scan/build b/packages/debug/w_scan/build new file mode 100755 index 0000000000..772145cba5 --- /dev/null +++ b/packages/debug/w_scan/build @@ -0,0 +1,13 @@ +#!/bin/sh + +. config/options + +cd $PKG_BUILD +./configure --host=$TARGET_NAME \ + --build=$HOST_NAME \ + --prefix=/usr \ + --enable-shared \ + --disable-static \ + --disable-documentation \ + +make diff --git a/packages/debug/w_scan/install b/packages/debug/w_scan/install new file mode 100755 index 0000000000..d90996168e --- /dev/null +++ b/packages/debug/w_scan/install @@ -0,0 +1,7 @@ +#!/bin/sh + +. config/options + +mkdir -p $INSTALL/usr/bin + cp -P $PKG_BUILD/w_scan $INSTALL/usr/bin + diff --git a/packages/debug/w_scan/meta b/packages/debug/w_scan/meta new file mode 100644 index 0000000000..70c6b7e19f --- /dev/null +++ b/packages/debug/w_scan/meta @@ -0,0 +1,14 @@ +PKG_NAME="w_scan" +PKG_VERSION="20101001" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://wirbel.htpc-forum.de/w_scan/index2.html" +PKG_URL="http://wirbel.htpc-forum.de/w_scan/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="debug" +PKG_SHORTDESC="w_scan: eine kleine Anwendung zum Scannen von ATSC/DVB-C/S/T Transpondern/Bouquets nach Sendern und Erstellen einer VDR channels.conf." +PKG_LONGDESC="w_scan ist eine kleine Anwendung zum Scannen von ATSC/DVB-C/S/T Transpondern/Bouquets nach Sendern und Erstellen einer VDR channels.conf." +PKG_IS_ADDON="no" From 630eabffb13b1fc03bf96a9fe413a468bb19c5c5 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 23 Nov 2010 03:09:12 +0100 Subject: [PATCH 490/850] projects/ATV: add tvheadend support, optimize kernel config, backup old config Signed-off-by: Stephan Raue --- projects/ATV/linux/linux.i386.conf | 254 ++- projects/ATV/linux/linux.i386.conf.2.6.37-2 | 2246 +++++++++++++++++++ projects/ATV/options | 2 +- 3 files changed, 2483 insertions(+), 19 deletions(-) create mode 100644 projects/ATV/linux/linux.i386.conf.2.6.37-2 diff --git a/projects/ATV/linux/linux.i386.conf b/projects/ATV/linux/linux.i386.conf index 87c03aef29..02b396ffe8 100644 --- a/projects/ATV/linux/linux.i386.conf +++ b/projects/ATV/linux/linux.i386.conf @@ -1,6 +1,6 @@ # # Automatically generated make config: don't edit -# Linux/i386 2.6.37-rc2 Kernel Configuration +# Linux/i386 2.6.37-rc3 Kernel Configuration # # CONFIG_64BIT is not set CONFIG_X86_32=y @@ -263,6 +263,7 @@ CONFIG_SMP=y CONFIG_X86_MPPARSE=y # CONFIG_X86_BIGSMP is not set # CONFIG_X86_EXTENDED_PLATFORM is not set +CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y CONFIG_SCHED_OMIT_FRAME_POINTER=y # CONFIG_PARAVIRT_GUEST is not set CONFIG_NO_BOOTMEM=y @@ -321,8 +322,8 @@ CONFIG_DMI=y # CONFIG_IOMMU_HELPER is not set # CONFIG_IOMMU_API is not set CONFIG_NR_CPUS=2 -CONFIG_SCHED_SMT=y -CONFIG_SCHED_MC=y +# CONFIG_SCHED_SMT is not set +# CONFIG_SCHED_MC is not set CONFIG_IRQ_TIME_ACCOUNTING=y # CONFIG_PREEMPT_NONE is not set # CONFIG_PREEMPT_VOLUNTARY is not set @@ -356,18 +357,18 @@ CONFIG_PAGE_OFFSET=0xB0000000 # CONFIG_X86_PAE is not set # CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set # CONFIG_ARCH_DMA_ADDR_T_64BIT is not set -CONFIG_NEED_NODE_MEMMAP_SIZE=y CONFIG_ARCH_FLATMEM_ENABLE=y CONFIG_ARCH_SPARSEMEM_ENABLE=y CONFIG_ARCH_SELECT_MEMORY_MODEL=y CONFIG_ILLEGAL_POINTER_VALUE=0 CONFIG_SELECT_MEMORY_MODEL=y -# CONFIG_FLATMEM_MANUAL is not set -CONFIG_SPARSEMEM_MANUAL=y -CONFIG_SPARSEMEM=y -CONFIG_HAVE_MEMORY_PRESENT=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y CONFIG_SPARSEMEM_STATIC=y CONFIG_HAVE_MEMBLOCK=y +CONFIG_PAGEFLAGS_EXTENDED=y CONFIG_SPLIT_PTLOCK_CPUS=4 # CONFIG_PHYS_ADDR_T_64BIT is not set CONFIG_ZONE_DMA_FLAG=1 @@ -375,6 +376,8 @@ CONFIG_BOUNCE=y CONFIG_VIRT_TO_BUS=y # CONFIG_KSM is not set CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y +# CONFIG_MEMORY_FAILURE is not set # CONFIG_X86_CHECK_BIOS_CORRUPTION is not set CONFIG_X86_RESERVE_LOW=64 # CONFIG_MATH_EMULATION is not set @@ -411,7 +414,6 @@ CONFIG_PM=y # CONFIG_SUSPEND is not set # CONFIG_HIBERNATION is not set # CONFIG_PM_RUNTIME is not set -# CONFIG_PM_OPP is not set CONFIG_ACPI=y # CONFIG_ACPI_PROCFS is not set # CONFIG_ACPI_PROCFS_POWER is not set @@ -450,8 +452,8 @@ CONFIG_CPU_FREQ_TABLE=y CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y -CONFIG_CPU_FREQ_GOV_USERSPACE=y +# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_GOV_USERSPACE is not set CONFIG_CPU_FREQ_GOV_ONDEMAND=y # CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set @@ -479,7 +481,7 @@ CONFIG_X86_ACPI_CPUFREQ=y # CONFIG_X86_SPEEDSTEP_LIB is not set CONFIG_CPU_IDLE=y CONFIG_CPU_IDLE_GOV_LADDER=y -# CONFIG_INTEL_IDLE is not set +CONFIG_INTEL_IDLE=y # # Bus options (PCI etc.) @@ -922,9 +924,6 @@ CONFIG_USB_ZD1201=m # CONFIG_ATH_COMMON is not set # CONFIG_B43 is not set # CONFIG_B43LEGACY is not set -# CONFIG_B43LEGACY_DMA_AND_PIO_MODE is not set -# CONFIG_B43LEGACY_DMA_MODE is not set -# CONFIG_B43LEGACY_PIO_MODE is not set # CONFIG_HOSTAP is not set # CONFIG_IPW2100 is not set # CONFIG_IPW2200 is not set @@ -1232,8 +1231,8 @@ CONFIG_MEDIA_SUPPORT=m # Multimedia core support # # CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_VIDEO_MEDIA is not set +CONFIG_DVB_CORE=m +CONFIG_VIDEO_MEDIA=m # # Multimedia drivers @@ -1254,6 +1253,226 @@ CONFIG_IR_RC5_SZ_DECODER=m CONFIG_IR_MCEUSB=m # CONFIG_IR_NUVOTON is not set # CONFIG_IR_STREAMZAP is not set +# CONFIG_MEDIA_ATTACH is not set +CONFIG_MEDIA_TUNER=m +CONFIG_MEDIA_TUNER_CUSTOMISE=y +# CONFIG_MEDIA_TUNER_SIMPLE is not set +# CONFIG_MEDIA_TUNER_TDA8290 is not set +# CONFIG_MEDIA_TUNER_TDA827X is not set +# CONFIG_MEDIA_TUNER_TDA18271 is not set +# CONFIG_MEDIA_TUNER_TDA9887 is not set +# CONFIG_MEDIA_TUNER_TEA5761 is not set +# CONFIG_MEDIA_TUNER_TEA5767 is not set +# CONFIG_MEDIA_TUNER_MT20XX is not set +# CONFIG_MEDIA_TUNER_MT2060 is not set +# CONFIG_MEDIA_TUNER_MT2266 is not set +# CONFIG_MEDIA_TUNER_MT2131 is not set +# CONFIG_MEDIA_TUNER_QT1010 is not set +# CONFIG_MEDIA_TUNER_XC2028 is not set +# CONFIG_MEDIA_TUNER_XC5000 is not set +# CONFIG_MEDIA_TUNER_MXL5005S is not set +# CONFIG_MEDIA_TUNER_MXL5007T is not set +# CONFIG_MEDIA_TUNER_MC44S803 is not set +# CONFIG_MEDIA_TUNER_MAX2165 is not set +# CONFIG_MEDIA_TUNER_TDA18218 is not set +CONFIG_DVB_MAX_ADAPTERS=2 +# CONFIG_DVB_DYNAMIC_MINORS is not set +CONFIG_DVB_CAPTURE_DRIVERS=y + +# +# Supported SAA7146 based PCI Adapters +# +# CONFIG_TTPCI_EEPROM is not set +# CONFIG_DVB_BUDGET_CORE is not set + +# +# Supported USB Adapters +# +CONFIG_DVB_USB=m +# CONFIG_DVB_USB_DEBUG is not set +# CONFIG_DVB_USB_A800 is not set +# CONFIG_DVB_USB_DIBUSB_MB is not set +# CONFIG_DVB_USB_DIBUSB_MC is not set +# CONFIG_DVB_USB_DIB0700 is not set +# CONFIG_DVB_USB_UMT_010 is not set +# CONFIG_DVB_USB_CXUSB is not set +# CONFIG_DVB_USB_M920X is not set +# CONFIG_DVB_USB_GL861 is not set +# CONFIG_DVB_USB_AU6610 is not set +# CONFIG_DVB_USB_DIGITV is not set +# CONFIG_DVB_USB_VP7045 is not set +# CONFIG_DVB_USB_VP702X is not set +# CONFIG_DVB_USB_GP8PSK is not set +# CONFIG_DVB_USB_NOVA_T_USB2 is not set +# CONFIG_DVB_USB_TTUSB2 is not set +# CONFIG_DVB_USB_DTT200U is not set +# CONFIG_DVB_USB_OPERA1 is not set +# CONFIG_DVB_USB_AF9005 is not set +# CONFIG_DVB_USB_DW2102 is not set +# CONFIG_DVB_USB_CINERGY_T2 is not set +CONFIG_DVB_USB_ANYSEE=m +# CONFIG_DVB_USB_DTV5100 is not set +# CONFIG_DVB_USB_AF9015 is not set +# CONFIG_DVB_USB_CE6230 is not set +# CONFIG_DVB_USB_FRIIO is not set +# CONFIG_DVB_USB_EC168 is not set +# CONFIG_DVB_USB_AZ6027 is not set +# CONFIG_DVB_USB_LME2510 is not set +# CONFIG_DVB_TTUSB_BUDGET is not set +# CONFIG_DVB_TTUSB_DEC is not set +# CONFIG_SMS_SIANO_MDTV is not set + +# +# Supported FlexCopII (B2C2) Adapters +# +# CONFIG_DVB_B2C2_FLEXCOP is not set + +# +# Supported BT878 Adapters +# + +# +# Supported Pluto2 Adapters +# +# CONFIG_DVB_PLUTO2 is not set + +# +# Supported SDMC DM1105 Adapters +# +# CONFIG_DVB_DM1105 is not set +# CONFIG_DVB_FIREDTV is not set + +# +# Supported Earthsoft PT1 Adapters +# +# CONFIG_DVB_PT1 is not set + +# +# Supported Mantis Adapters +# +# CONFIG_MANTIS_CORE is not set + +# +# Supported nGene Adapters +# +# CONFIG_DVB_NGENE is not set + +# +# Supported DVB Frontends +# +CONFIG_DVB_FE_CUSTOMISE=y + +# +# Customise DVB Frontends +# + +# +# Multistandard (satellite) frontends +# +# CONFIG_DVB_STB0899 is not set +# CONFIG_DVB_STB6100 is not set +# CONFIG_DVB_STV090x is not set +# CONFIG_DVB_STV6110x is not set + +# +# DVB-S (satellite) frontends +# +# CONFIG_DVB_CX24110 is not set +# CONFIG_DVB_CX24123 is not set +# CONFIG_DVB_MT312 is not set +# CONFIG_DVB_ZL10036 is not set +# CONFIG_DVB_ZL10039 is not set +# CONFIG_DVB_S5H1420 is not set +# CONFIG_DVB_STV0288 is not set +# CONFIG_DVB_STB6000 is not set +# CONFIG_DVB_STV0299 is not set +# CONFIG_DVB_STV6110 is not set +# CONFIG_DVB_STV0900 is not set +# CONFIG_DVB_TDA8083 is not set +# CONFIG_DVB_TDA10086 is not set +# CONFIG_DVB_TDA8261 is not set +# CONFIG_DVB_VES1X93 is not set +# CONFIG_DVB_TUNER_ITD1000 is not set +# CONFIG_DVB_TUNER_CX24113 is not set +# CONFIG_DVB_TDA826X is not set +# CONFIG_DVB_TUA6100 is not set +# CONFIG_DVB_CX24116 is not set +# CONFIG_DVB_SI21XX is not set +# CONFIG_DVB_DS3000 is not set +# CONFIG_DVB_MB86A16 is not set + +# +# DVB-T (terrestrial) frontends +# +# CONFIG_DVB_SP8870 is not set +# CONFIG_DVB_SP887X is not set +# CONFIG_DVB_CX22700 is not set +# CONFIG_DVB_CX22702 is not set +# CONFIG_DVB_S5H1432 is not set +# CONFIG_DVB_DRX397XD is not set +# CONFIG_DVB_L64781 is not set +# CONFIG_DVB_TDA1004X is not set +# CONFIG_DVB_NXT6000 is not set +CONFIG_DVB_MT352=m +CONFIG_DVB_ZL10353=m +# CONFIG_DVB_DIB3000MB is not set +# CONFIG_DVB_DIB3000MC is not set +# CONFIG_DVB_DIB7000M is not set +# CONFIG_DVB_DIB7000P is not set +# CONFIG_DVB_TDA10048 is not set +# CONFIG_DVB_AF9013 is not set +# CONFIG_DVB_EC100 is not set + +# +# DVB-C (cable) frontends +# +# CONFIG_DVB_VES1820 is not set +# CONFIG_DVB_TDA10021 is not set +CONFIG_DVB_TDA10023=m +# CONFIG_DVB_STV0297 is not set + +# +# ATSC (North American/Korean Terrestrial/Cable DTV) frontends +# +# CONFIG_DVB_NXT200X is not set +# CONFIG_DVB_OR51211 is not set +# CONFIG_DVB_OR51132 is not set +# CONFIG_DVB_BCM3510 is not set +# CONFIG_DVB_LGDT330X is not set +# CONFIG_DVB_LGDT3305 is not set +# CONFIG_DVB_S5H1409 is not set +# CONFIG_DVB_S5H1411 is not set + +# +# ISDB-T (terrestrial) frontends +# +# CONFIG_DVB_S921 is not set +# CONFIG_DVB_DIB8000 is not set + +# +# Digital terrestrial only tuners/PLL +# +CONFIG_DVB_PLL=m +# CONFIG_DVB_TUNER_DIB0070 is not set +# CONFIG_DVB_TUNER_DIB0090 is not set + +# +# SEC control devices for DVB-S +# +# CONFIG_DVB_LNBP21 is not set +# CONFIG_DVB_ISL6405 is not set +# CONFIG_DVB_ISL6421 is not set +# CONFIG_DVB_ISL6423 is not set +# CONFIG_DVB_LGS8GL5 is not set +# CONFIG_DVB_LGS8GXX is not set +# CONFIG_DVB_ATBM8830 is not set +# CONFIG_DVB_TDA665x is not set +# CONFIG_DVB_IX2505V is not set + +# +# Tools to develop new frontends +# +# CONFIG_DVB_DUMMY_FE is not set # CONFIG_DAB is not set # @@ -1807,7 +2026,6 @@ CONFIG_STAGING=y # CONFIG_PRISM2_USB is not set # CONFIG_ECHO is not set # CONFIG_BRCM80211 is not set -# CONFIG_BRCM80211_PCI is not set # CONFIG_RT2860 is not set # CONFIG_RT2870 is not set # CONFIG_COMEDI is not set diff --git a/projects/ATV/linux/linux.i386.conf.2.6.37-2 b/projects/ATV/linux/linux.i386.conf.2.6.37-2 new file mode 100644 index 0000000000..87c03aef29 --- /dev/null +++ b/projects/ATV/linux/linux.i386.conf.2.6.37-2 @@ -0,0 +1,2246 @@ +# +# Automatically generated make config: don't edit +# Linux/i386 2.6.37-rc2 Kernel Configuration +# +# CONFIG_64BIT is not set +CONFIG_X86_32=y +# CONFIG_X86_64 is not set +CONFIG_X86=y +CONFIG_INSTRUCTION_DECODER=y +CONFIG_OUTPUT_FORMAT="elf32-i386" +CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig" +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_CLOCKSOURCE_WATCHDOG=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_MMU=y +CONFIG_ZONE_DMA=y +# CONFIG_NEED_DMA_MAP_STATE is not set +CONFIG_NEED_SG_DMA_LENGTH=y +CONFIG_GENERIC_ISA_DMA=y +CONFIG_GENERIC_IOMAP=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +# CONFIG_RWSEM_GENERIC_SPINLOCK is not set +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +# CONFIG_GENERIC_TIME_VSYSCALL is not set +CONFIG_ARCH_HAS_CPU_RELAX=y +CONFIG_ARCH_HAS_DEFAULT_IDLE=y +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y +CONFIG_HAVE_SETUP_PER_CPU_AREA=y +CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y +CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y +# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y +# CONFIG_ZONE_DMA32 is not set +CONFIG_ARCH_POPULATES_NODE_MAP=y +# CONFIG_AUDIT_ARCH is not set +CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y +CONFIG_USE_GENERIC_SMP_HELPERS=y +CONFIG_X86_32_SMP=y +CONFIG_X86_HT=y +CONFIG_X86_TRAMPOLINE=y +CONFIG_X86_32_LAZY_GS=y +CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-ecx -fcall-saved-edx" +CONFIG_KTIME_SCALAR=y +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y +CONFIG_HAVE_IRQ_WORK=y +CONFIG_IRQ_WORK=y + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_CROSS_COMPILE="" +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_HAVE_KERNEL_GZIP=y +CONFIG_HAVE_KERNEL_BZIP2=y +CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y +# CONFIG_KERNEL_GZIP is not set +# CONFIG_KERNEL_BZIP2 is not set +CONFIG_KERNEL_LZMA=y +# CONFIG_KERNEL_LZO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y +CONFIG_BSD_PROCESS_ACCT=y +# CONFIG_BSD_PROCESS_ACCT_V3 is not set +# CONFIG_TASKSTATS is not set +# CONFIG_AUDIT is not set +CONFIG_HAVE_GENERIC_HARDIRQS=y + +# +# IRQ subsystem +# +CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y +# CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED is not set +CONFIG_HAVE_SPARSE_IRQ=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_GENERIC_PENDING_IRQ=y +# CONFIG_AUTO_IRQ_AFFINITY is not set +# CONFIG_IRQ_PER_CPU is not set +# CONFIG_HARDIRQS_SW_RESEND is not set +# CONFIG_SPARSE_IRQ is not set + +# +# RCU Subsystem +# +CONFIG_TREE_PREEMPT_RCU=y +CONFIG_PREEMPT_RCU=y +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=32 +# CONFIG_RCU_FANOUT_EXACT is not set +# CONFIG_TREE_RCU_TRACE is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=16 +CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y +CONFIG_CGROUPS=y +# CONFIG_CGROUP_DEBUG is not set +CONFIG_CGROUP_NS=y +# CONFIG_CGROUP_FREEZER is not set +# CONFIG_CGROUP_DEVICE is not set +# CONFIG_CPUSETS is not set +# CONFIG_CGROUP_CPUACCT is not set +CONFIG_RESOURCE_COUNTERS=y +# CONFIG_CGROUP_MEM_RES_CTLR is not set +CONFIG_CGROUP_SCHED=y +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_RT_GROUP_SCHED=y +CONFIG_BLK_CGROUP=y +# CONFIG_DEBUG_BLK_CGROUP is not set +CONFIG_NAMESPACES=y +CONFIG_UTS_NS=y +CONFIG_IPC_NS=y +CONFIG_USER_NS=y +CONFIG_PID_NS=y +CONFIG_NET_NS=y +CONFIG_SCHED_AUTOGROUP=y +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE=" " +CONFIG_INITRAMFS_ROOT_UID=0 +CONFIG_INITRAMFS_ROOT_GID=0 +# CONFIG_RD_GZIP is not set +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set +CONFIG_INITRAMFS_COMPRESSION_NONE=y +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +# CONFIG_KALLSYMS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +# CONFIG_BUG is not set +CONFIG_ELF_CORE=y +# CONFIG_PCSPKR_PLATFORM is not set +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_AIO=y +CONFIG_HAVE_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +CONFIG_PERF_EVENTS=y +# CONFIG_PERF_COUNTERS is not set +# CONFIG_VM_EVENT_COUNTERS is not set +CONFIG_PCI_QUIRKS=y +# CONFIG_COMPAT_BRK is not set +# CONFIG_SLAB is not set +# CONFIG_SLUB is not set +CONFIG_SLOB=y +# CONFIG_PROFILING is not set +CONFIG_HAVE_OPROFILE=y +# CONFIG_KPROBES is not set +CONFIG_JUMP_LABEL=y +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +CONFIG_HAVE_IOREMAP_PROT=y +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_HAVE_OPTPROBES=y +CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y +CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y +CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y +CONFIG_HAVE_USER_RETURN_NOTIFIER=y +CONFIG_HAVE_PERF_EVENTS_NMI=y +CONFIG_HAVE_ARCH_JUMP_LABEL=y + +# +# GCOV-based kernel profiling +# +CONFIG_HAVE_GENERIC_DMA_COHERENT=y +CONFIG_RT_MUTEXES=y +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +# CONFIG_MODULE_FORCE_LOAD is not set +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_STOP_MACHINE=y +CONFIG_BLOCK=y +CONFIG_LBDAF=y +CONFIG_BLK_DEV_BSG=y +# CONFIG_BLK_DEV_INTEGRITY is not set +# CONFIG_BLK_DEV_THROTTLING is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_DEADLINE is not set +CONFIG_IOSCHED_CFQ=y +# CONFIG_CFQ_GROUP_IOSCHED is not set +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +# CONFIG_INLINE_SPIN_UNLOCK is not set +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +# CONFIG_INLINE_READ_UNLOCK is not set +# CONFIG_INLINE_READ_UNLOCK_BH is not set +# CONFIG_INLINE_READ_UNLOCK_IRQ is not set +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +# CONFIG_INLINE_WRITE_UNLOCK is not set +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +CONFIG_MUTEX_SPIN_ON_OWNER=y +# CONFIG_FREEZER is not set + +# +# Processor type and features +# +CONFIG_TICK_ONESHOT=y +# CONFIG_NO_HZ is not set +CONFIG_HIGH_RES_TIMERS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_SMP=y +CONFIG_X86_MPPARSE=y +# CONFIG_X86_BIGSMP is not set +# CONFIG_X86_EXTENDED_PLATFORM is not set +CONFIG_SCHED_OMIT_FRAME_POINTER=y +# CONFIG_PARAVIRT_GUEST is not set +CONFIG_NO_BOOTMEM=y +# CONFIG_MEMTEST is not set +# CONFIG_M386 is not set +# CONFIG_M486 is not set +# CONFIG_M586 is not set +# CONFIG_M586TSC is not set +# CONFIG_M586MMX is not set +# CONFIG_M686 is not set +# CONFIG_MPENTIUMII is not set +# CONFIG_MPENTIUMIII is not set +CONFIG_MPENTIUMM=y +# CONFIG_MPENTIUM4 is not set +# CONFIG_MK6 is not set +# CONFIG_MK7 is not set +# CONFIG_MK8 is not set +# CONFIG_MCRUSOE is not set +# CONFIG_MEFFICEON is not set +# CONFIG_MWINCHIPC6 is not set +# CONFIG_MWINCHIP3D is not set +# CONFIG_MGEODEGX1 is not set +# CONFIG_MGEODE_LX is not set +# CONFIG_MCYRIXIII is not set +# CONFIG_MVIAC3_2 is not set +# CONFIG_MVIAC7 is not set +# CONFIG_MCORE2 is not set +# CONFIG_MATOM is not set +# CONFIG_X86_GENERIC is not set +CONFIG_X86_CPU=y +CONFIG_X86_INTERNODE_CACHE_SHIFT=6 +CONFIG_X86_CMPXCHG=y +CONFIG_X86_L1_CACHE_SHIFT=6 +CONFIG_X86_XADD=y +CONFIG_X86_WP_WORKS_OK=y +CONFIG_X86_INVLPG=y +CONFIG_X86_BSWAP=y +CONFIG_X86_POPAD_OK=y +CONFIG_X86_INTEL_USERCOPY=y +CONFIG_X86_USE_PPRO_CHECKSUM=y +CONFIG_X86_TSC=y +CONFIG_X86_CMPXCHG64=y +CONFIG_X86_CMOV=y +CONFIG_X86_MINIMUM_CPU_FAMILY=5 +CONFIG_X86_DEBUGCTLMSR=y +CONFIG_PROCESSOR_SELECT=y +CONFIG_CPU_SUP_INTEL=y +# CONFIG_CPU_SUP_CYRIX_32 is not set +# CONFIG_CPU_SUP_AMD is not set +# CONFIG_CPU_SUP_CENTAUR is not set +# CONFIG_CPU_SUP_TRANSMETA_32 is not set +# CONFIG_CPU_SUP_UMC_32 is not set +CONFIG_HPET_TIMER=y +CONFIG_HPET_EMULATE_RTC=y +CONFIG_DMI=y +# CONFIG_IOMMU_HELPER is not set +# CONFIG_IOMMU_API is not set +CONFIG_NR_CPUS=2 +CONFIG_SCHED_SMT=y +CONFIG_SCHED_MC=y +CONFIG_IRQ_TIME_ACCOUNTING=y +# CONFIG_PREEMPT_NONE is not set +# CONFIG_PREEMPT_VOLUNTARY is not set +CONFIG_PREEMPT=y +CONFIG_X86_LOCAL_APIC=y +CONFIG_X86_IO_APIC=y +CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y +CONFIG_X86_MCE=y +CONFIG_X86_MCE_INTEL=y +# CONFIG_X86_MCE_AMD is not set +# CONFIG_X86_ANCIENT_MCE is not set +CONFIG_X86_MCE_THRESHOLD=y +# CONFIG_X86_MCE_INJECT is not set +CONFIG_X86_THERMAL_VECTOR=y +# CONFIG_VM86 is not set +# CONFIG_TOSHIBA is not set +# CONFIG_I8K is not set +# CONFIG_X86_REBOOTFIXUPS is not set +# CONFIG_MICROCODE is not set +CONFIG_X86_MSR=y +CONFIG_X86_CPUID=y +CONFIG_NOHIGHMEM=y +# CONFIG_HIGHMEM4G is not set +# CONFIG_HIGHMEM64G is not set +# CONFIG_VMSPLIT_3G is not set +CONFIG_VMSPLIT_3G_OPT=y +# CONFIG_VMSPLIT_2G is not set +# CONFIG_VMSPLIT_2G_OPT is not set +# CONFIG_VMSPLIT_1G is not set +CONFIG_PAGE_OFFSET=0xB0000000 +# CONFIG_X86_PAE is not set +# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set +# CONFIG_ARCH_DMA_ADDR_T_64BIT is not set +CONFIG_NEED_NODE_MEMMAP_SIZE=y +CONFIG_ARCH_FLATMEM_ENABLE=y +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ILLEGAL_POINTER_VALUE=0 +CONFIG_SELECT_MEMORY_MODEL=y +# CONFIG_FLATMEM_MANUAL is not set +CONFIG_SPARSEMEM_MANUAL=y +CONFIG_SPARSEMEM=y +CONFIG_HAVE_MEMORY_PRESENT=y +CONFIG_SPARSEMEM_STATIC=y +CONFIG_HAVE_MEMBLOCK=y +CONFIG_SPLIT_PTLOCK_CPUS=4 +# CONFIG_PHYS_ADDR_T_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +# CONFIG_X86_CHECK_BIOS_CORRUPTION is not set +CONFIG_X86_RESERVE_LOW=64 +# CONFIG_MATH_EMULATION is not set +CONFIG_MTRR=y +CONFIG_MTRR_SANITIZER=y +CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0 +CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1 +CONFIG_X86_PAT=y +CONFIG_ARCH_USES_PG_UNCACHED=y +CONFIG_EFI=y +CONFIG_SECCOMP=y +# CONFIG_CC_STACKPROTECTOR is not set +# CONFIG_HZ_100 is not set +# CONFIG_HZ_250 is not set +CONFIG_HZ_300=y +# CONFIG_HZ_1000 is not set +CONFIG_HZ=300 +CONFIG_SCHED_HRTICK=y +# CONFIG_KEXEC is not set +CONFIG_PHYSICAL_START=0x1000000 +# CONFIG_RELOCATABLE is not set +CONFIG_PHYSICAL_ALIGN=0x1000000 +# CONFIG_HOTPLUG_CPU is not set +# CONFIG_COMPAT_VDSO is not set +CONFIG_CMDLINE_BOOL=y +CONFIG_CMDLINE="fastboot root=/dev/ram0 rdinit=/init" +# CONFIG_CMDLINE_OVERRIDE is not set + +# +# Power management and ACPI options +# +CONFIG_PM=y +# CONFIG_PM_DEBUG is not set +# CONFIG_SUSPEND is not set +# CONFIG_HIBERNATION is not set +# CONFIG_PM_RUNTIME is not set +# CONFIG_PM_OPP is not set +CONFIG_ACPI=y +# CONFIG_ACPI_PROCFS is not set +# CONFIG_ACPI_PROCFS_POWER is not set +# CONFIG_ACPI_EC_DEBUGFS is not set +# CONFIG_ACPI_PROC_EVENT is not set +# CONFIG_ACPI_AC is not set +# CONFIG_ACPI_BATTERY is not set +# CONFIG_ACPI_BUTTON is not set +CONFIG_ACPI_VIDEO=y +CONFIG_ACPI_FAN=y +# CONFIG_ACPI_DOCK is not set +CONFIG_ACPI_PROCESSOR=y +# CONFIG_ACPI_PROCESSOR_AGGREGATOR is not set +CONFIG_ACPI_THERMAL=y +# CONFIG_ACPI_CUSTOM_DSDT is not set +CONFIG_ACPI_BLACKLIST_YEAR=0 +# CONFIG_ACPI_DEBUG is not set +# CONFIG_ACPI_PCI_SLOT is not set +CONFIG_X86_PM_TIMER=y +# CONFIG_ACPI_CONTAINER is not set +# CONFIG_ACPI_SBS is not set +# CONFIG_ACPI_HED is not set +# CONFIG_ACPI_APEI is not set +# CONFIG_SFI is not set + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_TABLE=y +# CONFIG_CPU_FREQ_DEBUG is not set +# CONFIG_CPU_FREQ_STAT is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set + +# +# CPUFreq processor drivers +# +# CONFIG_X86_PCC_CPUFREQ is not set +CONFIG_X86_ACPI_CPUFREQ=y +# CONFIG_X86_POWERNOW_K6 is not set +# CONFIG_X86_POWERNOW_K7 is not set +# CONFIG_X86_POWERNOW_K8 is not set +# CONFIG_X86_GX_SUSPMOD is not set +# CONFIG_X86_SPEEDSTEP_CENTRINO is not set +# CONFIG_X86_SPEEDSTEP_ICH is not set +# CONFIG_X86_SPEEDSTEP_SMI is not set +# CONFIG_X86_P4_CLOCKMOD is not set +# CONFIG_X86_CPUFREQ_NFORCE2 is not set +# CONFIG_X86_LONGRUN is not set +# CONFIG_X86_LONGHAUL is not set +# CONFIG_X86_E_POWERSAVER is not set + +# +# shared options +# +# CONFIG_X86_SPEEDSTEP_LIB is not set +CONFIG_CPU_IDLE=y +CONFIG_CPU_IDLE_GOV_LADDER=y +# CONFIG_INTEL_IDLE is not set + +# +# Bus options (PCI etc.) +# +CONFIG_PCI=y +# CONFIG_PCI_GOBIOS is not set +# CONFIG_PCI_GOMMCONFIG is not set +# CONFIG_PCI_GODIRECT is not set +CONFIG_PCI_GOANY=y +CONFIG_PCI_BIOS=y +CONFIG_PCI_DIRECT=y +CONFIG_PCI_MMCONFIG=y +CONFIG_PCI_DOMAINS=y +# CONFIG_PCI_CNB20LE_QUIRK is not set +# CONFIG_DMAR is not set +CONFIG_PCIEPORTBUS=y +# CONFIG_PCIEAER is not set +# CONFIG_PCIEASPM is not set +CONFIG_ARCH_SUPPORTS_MSI=y +CONFIG_PCI_MSI=y +# CONFIG_PCI_STUB is not set +CONFIG_HT_IRQ=y +# CONFIG_PCI_IOV is not set +CONFIG_PCI_IOAPIC=y +CONFIG_ISA_DMA_API=y +# CONFIG_ISA is not set +# CONFIG_MCA is not set +# CONFIG_SCx200 is not set +# CONFIG_OLPC is not set +# CONFIG_OLPC_OPENFIRMWARE is not set +# CONFIG_PCCARD is not set +# CONFIG_HOTPLUG_PCI is not set + +# +# Executable file formats / Emulations +# +CONFIG_BINFMT_ELF=y +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set +CONFIG_HAVE_AOUT=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set +CONFIG_HAVE_ATOMIC_IOMAP=y +CONFIG_HAVE_TEXT_POKE_SMP=y +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_XFRM_STATISTICS is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE_DEMUX is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=y +CONFIG_INET_XFRM_MODE_TUNNEL=y +CONFIG_INET_XFRM_MODE_BEET=y +CONFIG_INET_LRO=y +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +CONFIG_IPV6=y +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +# CONFIG_INET6_AH is not set +# CONFIG_INET6_ESP is not set +# CONFIG_INET6_IPCOMP is not set +# CONFIG_IPV6_MIP6 is not set +# CONFIG_INET6_XFRM_TUNNEL is not set +# CONFIG_INET6_TUNNEL is not set +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +# CONFIG_IPV6_SIT_6RD is not set +CONFIG_IPV6_NDISC_NODETYPE=y +# CONFIG_IPV6_TUNNEL is not set +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_IPV6_MROUTE is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +# CONFIG_NETFILTER is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_L2TP is not set +# CONFIG_BRIDGE is not set +# CONFIG_NET_DSA is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set +# CONFIG_NET_SCHED is not set +# CONFIG_DCB is not set +CONFIG_DNS_RESOLVER=y +CONFIG_RPS=y + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +# CONFIG_AF_RXRPC is not set +CONFIG_WIRELESS=y +CONFIG_WIRELESS_EXT=y +CONFIG_WEXT_CORE=y +CONFIG_WEXT_PROC=y +CONFIG_WEXT_PRIV=y +CONFIG_CFG80211=y +# CONFIG_NL80211_TESTMODE is not set +# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set +# CONFIG_CFG80211_REG_DEBUG is not set +# CONFIG_CFG80211_DEFAULT_PS is not set +# CONFIG_CFG80211_INTERNAL_REGDB is not set +CONFIG_CFG80211_WEXT=y +CONFIG_WIRELESS_EXT_SYSFS=y +CONFIG_LIB80211=y +# CONFIG_LIB80211_DEBUG is not set +CONFIG_MAC80211=y +CONFIG_MAC80211_HAS_RC=y +# CONFIG_MAC80211_RC_PID is not set +CONFIG_MAC80211_RC_MINSTREL=y +CONFIG_MAC80211_RC_MINSTREL_HT=y +CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y +CONFIG_MAC80211_RC_DEFAULT="minstrel_ht" +# CONFIG_MAC80211_MESH is not set +CONFIG_MAC80211_LEDS=y +# CONFIG_MAC80211_DEBUG_MENU is not set +# CONFIG_WIMAX is not set +CONFIG_RFKILL=y +CONFIG_RFKILL_LEDS=y +CONFIG_RFKILL_INPUT=y +# CONFIG_NET_9P is not set +# CONFIG_CAIF is not set +# CONFIG_CEPH_LIB is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="" +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_STANDALONE=y +# CONFIG_PREVENT_FIRMWARE_BUILD is not set +CONFIG_FW_LOADER=y +CONFIG_FIRMWARE_IN_KERNEL=y +CONFIG_EXTRA_FIRMWARE="" +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +# CONFIG_MTD is not set +# CONFIG_PARPORT is not set +CONFIG_PNP=y +# CONFIG_PNP_DEBUG_MESSAGES is not set + +# +# Protocols +# +CONFIG_PNPACPI=y +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set + +# +# DRBD disabled because PROC_FS, INET or CONNECTOR not selected +# +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_SX8 is not set +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=4 +CONFIG_BLK_DEV_RAM_SIZE=4096 +# CONFIG_BLK_DEV_XIP is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +# CONFIG_BLK_DEV_HD is not set +# CONFIG_BLK_DEV_RBD is not set +# CONFIG_MISC_DEVICES is not set +CONFIG_HAVE_IDE=y +# CONFIG_IDE is not set + +# +# SCSI device support +# +CONFIG_SCSI_MOD=y +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_SCSI_PROC_FS is not set + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +CONFIG_BLK_DEV_SR=y +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_CHR_DEV_SG=y +# CONFIG_CHR_DEV_SCH is not set +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set +# CONFIG_SCSI_LOWLEVEL is not set +# CONFIG_SCSI_DH is not set +# CONFIG_SCSI_OSD_INITIATOR is not set +CONFIG_ATA=y +# CONFIG_ATA_NONSTANDARD is not set +# CONFIG_ATA_VERBOSE_ERROR is not set +CONFIG_ATA_ACPI=y +# CONFIG_SATA_PMP is not set + +# +# Controllers with non-SFF native interface +# +# CONFIG_SATA_AHCI is not set +# CONFIG_SATA_AHCI_PLATFORM is not set +# CONFIG_SATA_INIC162X is not set +# CONFIG_SATA_SIL24 is not set +CONFIG_ATA_SFF=y + +# +# SFF controllers with custom DMA interface +# +# CONFIG_PDC_ADMA is not set +# CONFIG_SATA_QSTOR is not set +# CONFIG_SATA_SX4 is not set +CONFIG_ATA_BMDMA=y + +# +# SATA SFF controllers with BMDMA +# +CONFIG_ATA_PIIX=y +# CONFIG_SATA_MV is not set +# CONFIG_SATA_NV is not set +# CONFIG_SATA_PROMISE is not set +# CONFIG_SATA_SIL is not set +# CONFIG_SATA_SIS is not set +# CONFIG_SATA_SVW is not set +# CONFIG_SATA_ULI is not set +# CONFIG_SATA_VIA is not set +# CONFIG_SATA_VITESSE is not set + +# +# PATA SFF controllers with BMDMA +# +# CONFIG_PATA_ALI is not set +# CONFIG_PATA_AMD is not set +# CONFIG_PATA_ARTOP is not set +# CONFIG_PATA_ATIIXP is not set +# CONFIG_PATA_ATP867X is not set +# CONFIG_PATA_CMD64X is not set +# CONFIG_PATA_CS5520 is not set +# CONFIG_PATA_CS5530 is not set +# CONFIG_PATA_CS5535 is not set +# CONFIG_PATA_CS5536 is not set +# CONFIG_PATA_CYPRESS is not set +# CONFIG_PATA_EFAR is not set +# CONFIG_PATA_HPT366 is not set +# CONFIG_PATA_HPT37X is not set +# CONFIG_PATA_HPT3X2N is not set +# CONFIG_PATA_HPT3X3 is not set +# CONFIG_PATA_IT8213 is not set +# CONFIG_PATA_IT821X is not set +# CONFIG_PATA_JMICRON is not set +# CONFIG_PATA_MARVELL is not set +# CONFIG_PATA_NETCELL is not set +# CONFIG_PATA_NINJA32 is not set +# CONFIG_PATA_NS87415 is not set +# CONFIG_PATA_OLDPIIX is not set +# CONFIG_PATA_OPTIDMA is not set +# CONFIG_PATA_PDC2027X is not set +# CONFIG_PATA_PDC_OLD is not set +# CONFIG_PATA_RADISYS is not set +# CONFIG_PATA_RDC is not set +# CONFIG_PATA_SC1200 is not set +# CONFIG_PATA_SCH is not set +# CONFIG_PATA_SERVERWORKS is not set +# CONFIG_PATA_SIL680 is not set +# CONFIG_PATA_SIS is not set +# CONFIG_PATA_TOSHIBA is not set +# CONFIG_PATA_TRIFLEX is not set +# CONFIG_PATA_VIA is not set +# CONFIG_PATA_WINBOND is not set + +# +# PIO-only SFF controllers +# +# CONFIG_PATA_CMD640_PCI is not set +# CONFIG_PATA_MPIIX is not set +# CONFIG_PATA_NS87410 is not set +# CONFIG_PATA_OPTI is not set +# CONFIG_PATA_PLATFORM is not set +# CONFIG_PATA_RZ1000 is not set + +# +# Generic fallback / legacy drivers +# +CONFIG_PATA_ACPI=y +# CONFIG_ATA_GENERIC is not set +# CONFIG_PATA_LEGACY is not set +# CONFIG_MD is not set +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# +CONFIG_FIREWIRE=m +CONFIG_FIREWIRE_OHCI=m +CONFIG_FIREWIRE_OHCI_DEBUG=y +CONFIG_FIREWIRE_SBP2=m +# CONFIG_FIREWIRE_NET is not set +# CONFIG_FIREWIRE_NOSY is not set +# CONFIG_I2O is not set +# CONFIG_MACINTOSH_DRIVERS is not set +CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_VETH is not set +# CONFIG_NET_SB1000 is not set +# CONFIG_ARCNET is not set +CONFIG_MII=y +# CONFIG_PHYLIB is not set +CONFIG_NET_ETHERNET=y +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_CASSINI is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_ETHOC is not set +# CONFIG_DNET is not set +# CONFIG_NET_TULIP is not set +# CONFIG_HP100 is not set +# CONFIG_IBM_NEW_EMAC_ZMII is not set +# CONFIG_IBM_NEW_EMAC_RGMII is not set +# CONFIG_IBM_NEW_EMAC_TAH is not set +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set +# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set +# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set +# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set +CONFIG_NET_PCI=y +# CONFIG_PCNET32 is not set +# CONFIG_AMD8111_ETH is not set +# CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_KSZ884X_PCI is not set +# CONFIG_B44 is not set +# CONFIG_FORCEDETH is not set +# CONFIG_E100 is not set +# CONFIG_FEALNX is not set +# CONFIG_NATSEMI is not set +# CONFIG_NE2K_PCI is not set +# CONFIG_8139CP is not set +CONFIG_8139TOO=y +CONFIG_8139TOO_PIO=y +# CONFIG_8139TOO_TUNE_TWISTER is not set +# CONFIG_8139TOO_8129 is not set +# CONFIG_8139_OLD_RX_RESET is not set +# CONFIG_R6040 is not set +# CONFIG_SIS900 is not set +# CONFIG_EPIC100 is not set +# CONFIG_SMSC9420 is not set +# CONFIG_SUNDANCE is not set +# CONFIG_TLAN is not set +# CONFIG_KS8851_MLL is not set +# CONFIG_VIA_RHINE is not set +# CONFIG_SC92031 is not set +# CONFIG_ATL2 is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set +# CONFIG_TR is not set +CONFIG_WLAN=y +# CONFIG_LIBERTAS_THINFIRM is not set +# CONFIG_AIRO is not set +# CONFIG_ATMEL is not set +# CONFIG_AT76C50X_USB is not set +# CONFIG_PRISM54 is not set +CONFIG_USB_ZD1201=m +# CONFIG_USB_NET_RNDIS_WLAN is not set +# CONFIG_RTL8180 is not set +# CONFIG_RTL8187 is not set +# CONFIG_ADM8211 is not set +# CONFIG_MAC80211_HWSIM is not set +# CONFIG_MWL8K is not set +# CONFIG_ATH_COMMON is not set +# CONFIG_B43 is not set +# CONFIG_B43LEGACY is not set +# CONFIG_B43LEGACY_DMA_AND_PIO_MODE is not set +# CONFIG_B43LEGACY_DMA_MODE is not set +# CONFIG_B43LEGACY_PIO_MODE is not set +# CONFIG_HOSTAP is not set +# CONFIG_IPW2100 is not set +# CONFIG_IPW2200 is not set +# CONFIG_IWLWIFI is not set +# CONFIG_LIBERTAS is not set +# CONFIG_HERMES is not set +# CONFIG_P54_COMMON is not set +# CONFIG_RT2X00 is not set +# CONFIG_WL1251 is not set +# CONFIG_WL12XX is not set +# CONFIG_ZD1211RW is not set + +# +# Enable WiMAX (Networking options) to see the WiMAX drivers +# + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET is not set +# CONFIG_USB_HSO is not set +# CONFIG_USB_IPHETH is not set +# CONFIG_WAN is not set + +# +# CAIF transport drivers +# +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_NET_FC is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set +# CONFIG_ISDN is not set +# CONFIG_PHONE is not set + +# +# Input device support +# +CONFIG_INPUT=y +CONFIG_INPUT_FF_MEMLESS=y +# CONFIG_INPUT_POLLDEV is not set +# CONFIG_INPUT_SPARSEKMAP is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ADP5588 is not set +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_QT2160 is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_TCA6416 is not set +# CONFIG_KEYBOARD_LM8323 is not set +# CONFIG_KEYBOARD_MAX7359 is not set +# CONFIG_KEYBOARD_MCS is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_OPENCORES is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=y +CONFIG_MOUSE_PS2_ALPS=y +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +CONFIG_MOUSE_PS2_LIFEBOOK=y +CONFIG_MOUSE_PS2_TRACKPOINT=y +# CONFIG_MOUSE_PS2_ELANTECH is not set +# CONFIG_MOUSE_PS2_SENTELIC is not set +# CONFIG_MOUSE_PS2_TOUCHKIT is not set +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_APPLETOUCH is not set +# CONFIG_MOUSE_BCM5974 is not set +# CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_MOUSE_SYNAPTICS_I2C is not set +CONFIG_INPUT_JOYSTICK=y +# CONFIG_JOYSTICK_ANALOG is not set +# CONFIG_JOYSTICK_A3D is not set +# CONFIG_JOYSTICK_ADI is not set +# CONFIG_JOYSTICK_COBRA is not set +# CONFIG_JOYSTICK_GF2K is not set +# CONFIG_JOYSTICK_GRIP is not set +# CONFIG_JOYSTICK_GRIP_MP is not set +# CONFIG_JOYSTICK_GUILLEMOT is not set +# CONFIG_JOYSTICK_INTERACT is not set +# CONFIG_JOYSTICK_SIDEWINDER is not set +# CONFIG_JOYSTICK_TMDC is not set +# CONFIG_JOYSTICK_IFORCE is not set +# CONFIG_JOYSTICK_WARRIOR is not set +# CONFIG_JOYSTICK_MAGELLAN is not set +# CONFIG_JOYSTICK_SPACEORB is not set +# CONFIG_JOYSTICK_SPACEBALL is not set +# CONFIG_JOYSTICK_STINGER is not set +# CONFIG_JOYSTICK_TWIDJOY is not set +# CONFIG_JOYSTICK_ZHENHUA is not set +# CONFIG_JOYSTICK_JOYDUMP is not set +CONFIG_JOYSTICK_XPAD=m +CONFIG_JOYSTICK_XPAD_FF=y +CONFIG_JOYSTICK_XPAD_LEDS=y +# CONFIG_INPUT_TABLET is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_AD714X is not set +# CONFIG_INPUT_APANEL is not set +# CONFIG_INPUT_WISTRON_BTNS is not set +# CONFIG_INPUT_ATLAS_BTNS is not set +# CONFIG_INPUT_ATI_REMOTE is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +CONFIG_INPUT_APPLEIR=y +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +# CONFIG_INPUT_CM109 is not set +CONFIG_INPUT_UINPUT=y +# CONFIG_INPUT_WINBOND_CIR is not set +# CONFIG_INPUT_PCF8574 is not set +# CONFIG_INPUT_ADXL34X is not set + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +# CONFIG_SERIO_SERPORT is not set +# CONFIG_SERIO_CT82C710 is not set +# CONFIG_SERIO_PCIPS2 is not set +CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_RAW is not set +# CONFIG_SERIO_ALTERA_PS2 is not set +# CONFIG_SERIO_PS2MULT is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_CONSOLE_TRANSLATIONS=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +CONFIG_VT_HW_CONSOLE_BINDING=y +# CONFIG_DEVKMEM is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_N_GSM is not set +# CONFIG_NOZOMI is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +# CONFIG_SERIAL_8250_CONSOLE is not set +CONFIG_FIX_EARLYCON_MEM=y +CONFIG_SERIAL_8250_PCI=y +# CONFIG_SERIAL_8250_PNP is not set +CONFIG_SERIAL_8250_NR_UARTS=4 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +# CONFIG_SERIAL_MFD_HSU is not set +CONFIG_SERIAL_CORE=y +# CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_TIMBERDALE is not set +# CONFIG_SERIAL_ALTERA_JTAGUART is not set +# CONFIG_SERIAL_ALTERA_UART is not set +CONFIG_UNIX98_PTYS=y +# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set +# CONFIG_LEGACY_PTYS is not set +# CONFIG_TTY_PRINTK is not set +# CONFIG_IPMI_HANDLER is not set +# CONFIG_HW_RANDOM is not set +CONFIG_NVRAM=y +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_SONYPI is not set +# CONFIG_MWAVE is not set +# CONFIG_PC8736x_GPIO is not set +# CONFIG_NSC_GPIO is not set +# CONFIG_CS5535_GPIO is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_HPET is not set +# CONFIG_HANGCHECK_TIMER is not set +# CONFIG_TCG_TPM is not set +# CONFIG_TELCLOCK is not set +CONFIG_DEVPORT=y +# CONFIG_RAMOOPS is not set +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +# CONFIG_I2C_COMPAT is not set +CONFIG_I2C_CHARDEV=m +# CONFIG_I2C_MUX is not set +CONFIG_I2C_HELPER_AUTO=y +CONFIG_I2C_ALGOBIT=y + +# +# I2C Hardware Bus support +# + +# +# PC SMBus host controller drivers +# +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +CONFIG_I2C_I801=y +# CONFIG_I2C_ISCH is not set +# CONFIG_I2C_PIIX4 is not set +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set + +# +# ACPI drivers +# +# CONFIG_I2C_SCMI is not set + +# +# I2C system bus drivers (mostly embedded / system-on-chip) +# +# CONFIG_I2C_INTEL_MID is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PCA_PLATFORM is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set + +# +# External I2C/SMBus adapter drivers +# +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Other I2C/SMBus bus drivers +# +# CONFIG_I2C_STUB is not set +# CONFIG_SCx200_ACB is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_SPI is not set + +# +# PPS support +# +# CONFIG_PPS is not set +CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y +# CONFIG_GPIOLIB is not set +# CONFIG_W1 is not set +CONFIG_POWER_SUPPLY=y +# CONFIG_POWER_SUPPLY_DEBUG is not set +# CONFIG_PDA_POWER is not set +# CONFIG_TEST_POWER is not set +# CONFIG_BATTERY_DS2782 is not set +# CONFIG_BATTERY_BQ20Z75 is not set +# CONFIG_BATTERY_BQ27x00 is not set +# CONFIG_BATTERY_MAX17040 is not set +# CONFIG_HWMON is not set +CONFIG_THERMAL=y +# CONFIG_WATCHDOG is not set +CONFIG_SSB_POSSIBLE=y + +# +# Sonics Silicon Backplane +# +CONFIG_SSB=m +CONFIG_SSB_SPROM=y +CONFIG_SSB_PCIHOST_POSSIBLE=y +CONFIG_SSB_PCIHOST=y +# CONFIG_SSB_B43_PCI_BRIDGE is not set +# CONFIG_SSB_SILENT is not set +# CONFIG_SSB_DEBUG is not set +CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y +CONFIG_SSB_DRIVER_PCICORE=y +# CONFIG_MFD_SUPPORT is not set +# CONFIG_REGULATOR is not set +CONFIG_MEDIA_SUPPORT=m + +# +# Multimedia core support +# +# CONFIG_VIDEO_DEV is not set +# CONFIG_DVB_CORE is not set +# CONFIG_VIDEO_MEDIA is not set + +# +# Multimedia drivers +# +CONFIG_IR_CORE=m +CONFIG_VIDEO_IR=m +CONFIG_LIRC=m +CONFIG_RC_MAP=m +CONFIG_IR_NEC_DECODER=m +CONFIG_IR_RC5_DECODER=m +CONFIG_IR_RC6_DECODER=m +CONFIG_IR_JVC_DECODER=m +CONFIG_IR_SONY_DECODER=m +CONFIG_IR_RC5_SZ_DECODER=m +# CONFIG_IR_LIRC_CODEC is not set +# CONFIG_IR_ENE is not set +# CONFIG_IR_IMON is not set +CONFIG_IR_MCEUSB=m +# CONFIG_IR_NUVOTON is not set +# CONFIG_IR_STREAMZAP is not set +# CONFIG_DAB is not set + +# +# Graphics support +# +CONFIG_AGP=y +# CONFIG_AGP_ALI is not set +# CONFIG_AGP_ATI is not set +# CONFIG_AGP_AMD is not set +CONFIG_AGP_INTEL=y +# CONFIG_AGP_NVIDIA is not set +# CONFIG_AGP_SIS is not set +# CONFIG_AGP_SWORKS is not set +# CONFIG_AGP_VIA is not set +# CONFIG_AGP_EFFICEON is not set +CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=1 +# CONFIG_VGA_SWITCHEROO is not set +CONFIG_DRM=y +CONFIG_DRM_KMS_HELPER=y +CONFIG_DRM_TTM=y +# CONFIG_DRM_TDFX is not set +# CONFIG_DRM_R128 is not set +# CONFIG_DRM_RADEON is not set +# CONFIG_DRM_MGA is not set +# CONFIG_DRM_SIS is not set +# CONFIG_DRM_VIA is not set +# CONFIG_DRM_SAVAGE is not set +# CONFIG_STUB_POULSBO is not set +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=y +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +# CONFIG_FB_BOOT_VESA_SUPPORT is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_FOREIGN_ENDIAN is not set +# CONFIG_FB_SYS_FOPS is not set +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +CONFIG_FB_BACKLIGHT=y +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_CIRRUS is not set +# CONFIG_FB_PM2 is not set +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_ARC is not set +# CONFIG_FB_ASILIANT is not set +# CONFIG_FB_IMSTT is not set +# CONFIG_FB_VGA16 is not set +# CONFIG_FB_VESA is not set +# CONFIG_FB_EFI is not set +# CONFIG_FB_N411 is not set +# CONFIG_FB_HGA is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_NVIDIA is not set +# CONFIG_FB_RIVA is not set +# CONFIG_FB_I810 is not set +# CONFIG_FB_LE80578 is not set +# CONFIG_FB_INTEL is not set +# CONFIG_FB_MATROX is not set +# CONFIG_FB_RADEON is not set +# CONFIG_FB_ATY128 is not set +# CONFIG_FB_ATY is not set +# CONFIG_FB_S3 is not set +# CONFIG_FB_SAVAGE is not set +# CONFIG_FB_SIS is not set +# CONFIG_FB_VIA is not set +# CONFIG_FB_NEOMAGIC is not set +# CONFIG_FB_KYRO is not set +# CONFIG_FB_3DFX is not set +# CONFIG_FB_VOODOO1 is not set +# CONFIG_FB_VT8623 is not set +# CONFIG_FB_TRIDENT is not set +# CONFIG_FB_ARK is not set +# CONFIG_FB_PM3 is not set +# CONFIG_FB_CARMINE is not set +# CONFIG_FB_GEODE is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FB_METRONOME is not set +# CONFIG_FB_MB862XX is not set +# CONFIG_FB_BROADSHEET is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_GENERIC is not set +# CONFIG_BACKLIGHT_PROGEAR is not set +# CONFIG_BACKLIGHT_MBP_NVIDIA is not set +# CONFIG_BACKLIGHT_SAHARA is not set +# CONFIG_BACKLIGHT_ADP8860 is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +CONFIG_VGA_CONSOLE=y +CONFIG_VGACON_SOFT_SCROLLBACK=y +CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=256 +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE is not set +# CONFIG_LOGO is not set +CONFIG_SOUND=y +# CONFIG_SOUND_OSS_CORE is not set +CONFIG_SND=y +CONFIG_SND_TIMER=y +CONFIG_SND_PCM=y +CONFIG_SND_HWDEP=y +# CONFIG_SND_SEQUENCER is not set +# CONFIG_SND_MIXER_OSS is not set +# CONFIG_SND_PCM_OSS is not set +# CONFIG_SND_HRTIMER is not set +CONFIG_SND_DYNAMIC_MINORS=y +# CONFIG_SND_SUPPORT_OLD_API is not set +# CONFIG_SND_VERBOSE_PROCFS is not set +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set +CONFIG_SND_VMASTER=y +CONFIG_SND_DMA_SGBUF=y +# CONFIG_SND_RAWMIDI_SEQ is not set +# CONFIG_SND_OPL3_LIB_SEQ is not set +# CONFIG_SND_OPL4_LIB_SEQ is not set +# CONFIG_SND_SBAWE_SEQ is not set +# CONFIG_SND_EMU10K1_SEQ is not set +# CONFIG_SND_DRIVERS is not set +CONFIG_SND_PCI=y +# CONFIG_SND_AD1889 is not set +# CONFIG_SND_ALS300 is not set +# CONFIG_SND_ALS4000 is not set +# CONFIG_SND_ALI5451 is not set +# CONFIG_SND_ASIHPI is not set +# CONFIG_SND_ATIIXP is not set +# CONFIG_SND_ATIIXP_MODEM is not set +# CONFIG_SND_AU8810 is not set +# CONFIG_SND_AU8820 is not set +# CONFIG_SND_AU8830 is not set +# CONFIG_SND_AW2 is not set +# CONFIG_SND_AZT3328 is not set +# CONFIG_SND_BT87X is not set +# CONFIG_SND_CA0106 is not set +# CONFIG_SND_CMIPCI is not set +# CONFIG_SND_OXYGEN is not set +# CONFIG_SND_CS4281 is not set +# CONFIG_SND_CS46XX is not set +# CONFIG_SND_CS5530 is not set +# CONFIG_SND_CS5535AUDIO is not set +# CONFIG_SND_CTXFI is not set +# CONFIG_SND_DARLA20 is not set +# CONFIG_SND_GINA20 is not set +# CONFIG_SND_LAYLA20 is not set +# CONFIG_SND_DARLA24 is not set +# CONFIG_SND_GINA24 is not set +# CONFIG_SND_LAYLA24 is not set +# CONFIG_SND_MONA is not set +# CONFIG_SND_MIA is not set +# CONFIG_SND_ECHO3G is not set +# CONFIG_SND_INDIGO is not set +# CONFIG_SND_INDIGOIO is not set +# CONFIG_SND_INDIGODJ is not set +# CONFIG_SND_INDIGOIOX is not set +# CONFIG_SND_INDIGODJX is not set +# CONFIG_SND_EMU10K1 is not set +# CONFIG_SND_EMU10K1X is not set +# CONFIG_SND_ENS1370 is not set +# CONFIG_SND_ENS1371 is not set +# CONFIG_SND_ES1938 is not set +# CONFIG_SND_ES1968 is not set +# CONFIG_SND_FM801 is not set +CONFIG_SND_HDA_INTEL=y +CONFIG_SND_HDA_HWDEP=y +# CONFIG_SND_HDA_RECONFIG is not set +# CONFIG_SND_HDA_INPUT_BEEP is not set +# CONFIG_SND_HDA_INPUT_JACK is not set +# CONFIG_SND_HDA_PATCH_LOADER is not set +CONFIG_SND_HDA_CODEC_REALTEK=y +# CONFIG_SND_HDA_CODEC_ANALOG is not set +# CONFIG_SND_HDA_CODEC_SIGMATEL is not set +# CONFIG_SND_HDA_CODEC_VIA is not set +CONFIG_SND_HDA_CODEC_HDMI=y +# CONFIG_SND_HDA_CODEC_CIRRUS is not set +# CONFIG_SND_HDA_CODEC_CONEXANT is not set +# CONFIG_SND_HDA_CODEC_CA0110 is not set +# CONFIG_SND_HDA_CODEC_CMEDIA is not set +# CONFIG_SND_HDA_CODEC_SI3054 is not set +CONFIG_SND_HDA_GENERIC=y +CONFIG_SND_HDA_POWER_SAVE=y +CONFIG_SND_HDA_POWER_SAVE_DEFAULT=5 +# CONFIG_SND_HDSP is not set +# CONFIG_SND_HDSPM is not set +# CONFIG_SND_HIFIER is not set +# CONFIG_SND_ICE1712 is not set +# CONFIG_SND_ICE1724 is not set +# CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_INTEL8X0M is not set +# CONFIG_SND_KORG1212 is not set +# CONFIG_SND_LX6464ES is not set +# CONFIG_SND_MAESTRO3 is not set +# CONFIG_SND_MIXART is not set +# CONFIG_SND_NM256 is not set +# CONFIG_SND_PCXHR is not set +# CONFIG_SND_RIPTIDE is not set +# CONFIG_SND_RME32 is not set +# CONFIG_SND_RME96 is not set +# CONFIG_SND_RME9652 is not set +# CONFIG_SND_SIS7019 is not set +# CONFIG_SND_SONICVIBES is not set +# CONFIG_SND_TRIDENT is not set +# CONFIG_SND_VIA82XX is not set +# CONFIG_SND_VIA82XX_MODEM is not set +# CONFIG_SND_VIRTUOSO is not set +# CONFIG_SND_VX222 is not set +# CONFIG_SND_YMFPCI is not set +# CONFIG_SND_USB is not set +# CONFIG_SND_SOC is not set +# CONFIG_SOUND_PRIME is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +CONFIG_HIDRAW=y + +# +# USB Input Devices +# +CONFIG_USB_HID=y +# CONFIG_HID_PID is not set +CONFIG_USB_HIDDEV=y + +# +# Special HID drivers +# +# CONFIG_HID_3M_PCT is not set +# CONFIG_HID_A4TECH is not set +# CONFIG_HID_ACRUX_FF is not set +CONFIG_HID_APPLE=y +CONFIG_HID_AUREAL=y +# CONFIG_HID_BELKIN is not set +# CONFIG_HID_CANDO is not set +# CONFIG_HID_CHERRY is not set +# CONFIG_HID_CHICONY is not set +# CONFIG_HID_PRODIKEYS is not set +# CONFIG_HID_CYPRESS is not set +# CONFIG_HID_DRAGONRISE is not set +# CONFIG_HID_EGALAX is not set +# CONFIG_HID_EZKEY is not set +# CONFIG_HID_KYE is not set +# CONFIG_HID_UCLOGIC is not set +# CONFIG_HID_WALTOP is not set +# CONFIG_HID_GYRATION is not set +CONFIG_HID_TWINHAN=y +# CONFIG_HID_KENSINGTON is not set +CONFIG_HID_LOGITECH=y +CONFIG_LOGITECH_FF=y +CONFIG_LOGIRUMBLEPAD2_FF=y +CONFIG_LOGIG940_FF=y +CONFIG_LOGIWII_FF=y +CONFIG_HID_MICROSOFT=y +# CONFIG_HID_MOSART is not set +# CONFIG_HID_MONTEREY is not set +# CONFIG_HID_NTRIG is not set +# CONFIG_HID_ORTEK is not set +# CONFIG_HID_PANTHERLORD is not set +# CONFIG_HID_PETALYNX is not set +# CONFIG_HID_PICOLCD is not set +# CONFIG_HID_QUANTA is not set +# CONFIG_HID_ROCCAT is not set +# CONFIG_HID_ROCCAT_KONE is not set +# CONFIG_HID_ROCCAT_PYRA is not set +# CONFIG_HID_SAMSUNG is not set +CONFIG_HID_SONY=y +# CONFIG_HID_STANTUM is not set +CONFIG_HID_SUNPLUS=y +# CONFIG_HID_GREENASIA is not set +# CONFIG_HID_SMARTJOYPLUS is not set +CONFIG_HID_TOPSEED=y +# CONFIG_HID_THRUSTMASTER is not set +# CONFIG_HID_ZEROPLUS is not set +# CONFIG_HID_ZYDACRON is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +CONFIG_USB_ARCH_HAS_EHCI=y +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set +# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set + +# +# Miscellaneous USB options +# +# CONFIG_USB_DEVICEFS is not set +# CONFIG_USB_DEVICE_CLASS is not set +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_OTG_WHITELIST is not set +# CONFIG_USB_OTG_BLACKLIST_HUB is not set +# CONFIG_USB_MON is not set +# CONFIG_USB_WUSB is not set +# CONFIG_USB_WUSB_CBAF is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_C67X00_HCD is not set +# CONFIG_USB_XHCI_HCD is not set +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_ROOT_HUB_TT=y +# CONFIG_USB_EHCI_TT_NEWSCHED is not set +# CONFIG_USB_OXU210HP_HCD is not set +# CONFIG_USB_ISP116X_HCD is not set +# CONFIG_USB_ISP1760_HCD is not set +# CONFIG_USB_ISP1362_HCD is not set +# CONFIG_USB_OHCI_HCD is not set +CONFIG_USB_UHCI_HCD=y +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set +# CONFIG_USB_WHCI_HCD is not set +# CONFIG_USB_HWA_HCD is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set +# CONFIG_USB_WDM is not set +# CONFIG_USB_TMC is not set + +# +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may +# + +# +# also be needed; see USB_STORAGE Help for more info +# +CONFIG_USB_STORAGE=y +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_ONETOUCH is not set +# CONFIG_USB_STORAGE_KARMA is not set +# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set +# CONFIG_USB_UAS is not set +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set + +# +# USB port drivers +# +CONFIG_USB_SERIAL=m +# CONFIG_USB_EZUSB is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_AIRCABLE is not set +# CONFIG_USB_SERIAL_ARK3116 is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_CH341 is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_CP210X is not set +# CONFIG_USB_SERIAL_CYPRESS_M8 is not set +# CONFIG_USB_SERIAL_EMPEG is not set +CONFIG_USB_SERIAL_FTDI_SIO=m +# CONFIG_USB_SERIAL_FUNSOFT is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IPAQ is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_EDGEPORT_TI is not set +# CONFIG_USB_SERIAL_GARMIN is not set +# CONFIG_USB_SERIAL_IPW is not set +# CONFIG_USB_SERIAL_IUU is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KLSI is not set +# CONFIG_USB_SERIAL_KOBIL_SCT is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_MOS7720 is not set +# CONFIG_USB_SERIAL_MOS7840 is not set +# CONFIG_USB_SERIAL_MOTOROLA is not set +# CONFIG_USB_SERIAL_NAVMAN is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_OTI6858 is not set +# CONFIG_USB_SERIAL_QCAUX is not set +# CONFIG_USB_SERIAL_QUALCOMM is not set +# CONFIG_USB_SERIAL_SPCP8X5 is not set +# CONFIG_USB_SERIAL_HP4X is not set +# CONFIG_USB_SERIAL_SAFE is not set +# CONFIG_USB_SERIAL_SAMBA is not set +# CONFIG_USB_SERIAL_SIEMENS_MPI is not set +# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set +# CONFIG_USB_SERIAL_SYMBOL is not set +# CONFIG_USB_SERIAL_TI is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OPTION is not set +# CONFIG_USB_SERIAL_OMNINET is not set +# CONFIG_USB_SERIAL_OPTICON is not set +# CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set +# CONFIG_USB_SERIAL_ZIO is not set +# CONFIG_USB_SERIAL_SSU100 is not set +# CONFIG_USB_SERIAL_DEBUG is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_SEVSEG is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_SISUSBVGA is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set +# CONFIG_USB_ISIGHTFW is not set +# CONFIG_USB_YUREX is not set +# CONFIG_USB_GADGET is not set + +# +# OTG and related infrastructure +# +# CONFIG_NOP_USB_XCEIV is not set +# CONFIG_UWB is not set +# CONFIG_MMC is not set +# CONFIG_MEMSTICK is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +# CONFIG_LEDS_ALIX2 is not set +# CONFIG_LEDS_PCA9532 is not set +# CONFIG_LEDS_LP3944 is not set +# CONFIG_LEDS_LP5521 is not set +# CONFIG_LEDS_LP5523 is not set +# CONFIG_LEDS_CLEVO_MAIL is not set +# CONFIG_LEDS_PCA955X is not set +# CONFIG_LEDS_BD2802 is not set +# CONFIG_LEDS_INTEL_SS4200 is not set +CONFIG_LEDS_TRIGGERS=y + +# +# LED Triggers +# +# CONFIG_LEDS_TRIGGER_TIMER is not set +# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set +# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set +# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set + +# +# iptables trigger is under Netfilter config (LED target) +# +# CONFIG_ACCESSIBILITY is not set +# CONFIG_INFINIBAND is not set +# CONFIG_EDAC is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1374 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_DS3232 is not set +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_ISL12022 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set +# CONFIG_RTC_DRV_BQ32K is not set +# CONFIG_RTC_DRV_S35390A is not set +# CONFIG_RTC_DRV_FM3130 is not set +# CONFIG_RTC_DRV_RX8581 is not set +# CONFIG_RTC_DRV_RX8025 is not set + +# +# SPI RTC drivers +# + +# +# Platform RTC drivers +# +CONFIG_RTC_DRV_CMOS=y +# CONFIG_RTC_DRV_DS1286 is not set +# CONFIG_RTC_DRV_DS1511 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T35 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_MSM6242 is not set +# CONFIG_RTC_DRV_BQ4802 is not set +# CONFIG_RTC_DRV_RP5C01 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +# CONFIG_DMADEVICES is not set +# CONFIG_AUXDISPLAY is not set +# CONFIG_UIO is not set +CONFIG_STAGING=y +# CONFIG_STAGING_EXCLUDE_BUILD is not set +# CONFIG_W35UND is not set +# CONFIG_PRISM2_USB is not set +# CONFIG_ECHO is not set +# CONFIG_BRCM80211 is not set +# CONFIG_BRCM80211_PCI is not set +# CONFIG_RT2860 is not set +# CONFIG_RT2870 is not set +# CONFIG_COMEDI is not set +# CONFIG_ASUS_OLED is not set +# CONFIG_R8187SE is not set +# CONFIG_RTL8192U is not set +# CONFIG_RTL8192E is not set +# CONFIG_R8712U is not set +# CONFIG_TRANZPORT is not set +# CONFIG_POHMELFS is not set +# CONFIG_IDE_PHISON is not set +# CONFIG_LINE6_USB is not set +# CONFIG_DRM_VMWGFX is not set +CONFIG_DRM_NOUVEAU=y +CONFIG_DRM_NOUVEAU_BACKLIGHT=y + +# +# I2C encoder or helper chips +# +CONFIG_DRM_I2C_CH7006=m +CONFIG_DRM_I2C_SIL164=m +# CONFIG_USB_SERIAL_QUATECH2 is not set +# CONFIG_USB_SERIAL_QUATECH_USB2 is not set +# CONFIG_VT6655 is not set +# CONFIG_VT6656 is not set +# CONFIG_FB_UDL is not set +# CONFIG_HYPERV is not set +# CONFIG_VME_BUS is not set +# CONFIG_IIO is not set +# CONFIG_ZRAM is not set +# CONFIG_BATMAN_ADV is not set +# CONFIG_SAMSUNG_LAPTOP is not set +# CONFIG_FB_SM7XX is not set +# CONFIG_CRYSTALHD is not set + +# +# Texas Instruments shared transport line discipline +# +# CONFIG_FB_XGI is not set +# CONFIG_LIRC_STAGING is not set +# CONFIG_ACPI_QUICKSTART is not set +CONFIG_MACH_NO_WESTBRIDGE=y +# CONFIG_USB_ENESTORAGE is not set +# CONFIG_BCM_WIMAX is not set +# CONFIG_FT1000 is not set + +# +# Speakup console speech +# +# CONFIG_SPEAKUP is not set +# CONFIG_X86_PLATFORM_DEVICES is not set + +# +# Firmware Drivers +# +# CONFIG_EDD is not set +CONFIG_FIRMWARE_MEMMAP=y +# CONFIG_EFI_VARS is not set +# CONFIG_DELL_RBU is not set +# CONFIG_DCDBAS is not set +CONFIG_DMIID=y +# CONFIG_ISCSI_IBFT_FIND is not set + +# +# File systems +# +# CONFIG_EXT2_FS is not set +# CONFIG_EXT3_FS is not set +CONFIG_EXT4_FS=y +CONFIG_EXT4_USE_FOR_EXT23=y +# CONFIG_EXT4_FS_XATTR is not set +# CONFIG_EXT4_DEBUG is not set +CONFIG_JBD2=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y +CONFIG_DNOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_FANOTIFY is not set +# CONFIG_QUOTA is not set +# CONFIG_QUOTACTL is not set +CONFIG_AUTOFS4_FS=y +CONFIG_FUSE_FS=y +# CONFIG_CUSE is not set + +# +# Caches +# +# CONFIG_FSCACHE is not set + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=y +CONFIG_JOLIET=y +CONFIG_ZISOFS=y + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=y +# CONFIG_MSDOS_FS is not set +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="ascii" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_PROC_SYSCTL=y +CONFIG_PROC_PAGE_MONITOR=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLBFS is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set +CONFIG_MISC_FILESYSTEMS=y +# CONFIG_AFFS_FS is not set +# CONFIG_ECRYPT_FS is not set +# CONFIG_HFS_FS is not set +CONFIG_HFSPLUS_FS=y +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_LOGFS is not set +# CONFIG_CRAMFS is not set +CONFIG_SQUASHFS=y +CONFIG_SQUASHFS_XATTR=y +CONFIG_SQUASHFS_LZO=y +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +# CONFIG_VXFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_OMFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_SYSV_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +CONFIG_NFS_V4=y +# CONFIG_NFS_V4_1 is not set +# CONFIG_NFS_USE_LEGACY_DNS is not set +CONFIG_NFS_USE_KERNEL_DNS=y +# CONFIG_NFS_USE_NEW_IDMAPPER is not set +# CONFIG_NFSD is not set +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y +CONFIG_SUNRPC_GSS=y +CONFIG_RPCSEC_GSS_KRB5=y +# CONFIG_CEPH_FS is not set +CONFIG_CIFS=y +CONFIG_CIFS_STATS=y +CONFIG_CIFS_STATS2=y +# CONFIG_CIFS_WEAK_PW_HASH is not set +# CONFIG_CIFS_UPCALL is not set +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_DFS_UPCALL is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +CONFIG_MAC_PARTITION=y +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +CONFIG_LDM_PARTITION=y +# CONFIG_LDM_DEBUG is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +CONFIG_EFI_PARTITION=y +# CONFIG_SYSV68_PARTITION is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="utf8" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +CONFIG_NLS_ASCII=y +CONFIG_NLS_ISO8859_1=y +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +CONFIG_NLS_UTF8=y +# CONFIG_DLM is not set + +# +# Kernel hacking +# +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_PRINTK_TIME=y +# CONFIG_ENABLE_WARN_DEPRECATED is not set +# CONFIG_ENABLE_MUST_CHECK is not set +CONFIG_FRAME_WARN=1024 +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_STRIP_ASM_SYMS is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_HARDLOCKUP_DETECTOR is not set +# CONFIG_BKL is not set +# CONFIG_SPARSE_RCU_POINTER is not set +# CONFIG_DEBUG_MEMORY_INIT is not set +CONFIG_ARCH_WANT_FRAME_POINTERS=y +# CONFIG_FRAME_POINTER is not set +# CONFIG_RCU_CPU_STALL_DETECTOR is not set +CONFIG_SYSCTL_SYSCALL_CHECK=y +CONFIG_USER_STACKTRACE_SUPPORT=y +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y +CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y +CONFIG_HAVE_C_RECORDMCOUNT=y +CONFIG_TRACING_SUPPORT=y +# CONFIG_FTRACE is not set +# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set +# CONFIG_FIREWIRE_OHCI_REMOTE_DMA is not set +# CONFIG_DMA_API_DEBUG is not set +# CONFIG_ATOMIC64_SELFTEST is not set +# CONFIG_SAMPLES is not set +CONFIG_HAVE_ARCH_KGDB=y +CONFIG_HAVE_ARCH_KMEMCHECK=y +CONFIG_STRICT_DEVMEM=y +# CONFIG_X86_VERBOSE_BOOTUP is not set +# CONFIG_EARLY_PRINTK is not set +CONFIG_DOUBLEFAULT=y +# CONFIG_IOMMU_STRESS is not set +CONFIG_HAVE_MMIOTRACE_SUPPORT=y +CONFIG_IO_DELAY_TYPE_0X80=0 +CONFIG_IO_DELAY_TYPE_0XED=1 +CONFIG_IO_DELAY_TYPE_UDELAY=2 +CONFIG_IO_DELAY_TYPE_NONE=3 +CONFIG_IO_DELAY_0X80=y +# CONFIG_IO_DELAY_0XED is not set +# CONFIG_IO_DELAY_UDELAY is not set +# CONFIG_IO_DELAY_NONE is not set +CONFIG_DEFAULT_IO_DELAY_TYPE=0 +CONFIG_OPTIMIZE_INLINING=y + +# +# Security options +# +CONFIG_KEYS=y +# CONFIG_KEYS_DEBUG_PROC_KEYS is not set +# CONFIG_SECURITY_DMESG_RESTRICT is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITYFS is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY="" +CONFIG_CRYPTO=y + +# +# Crypto core or helper +# +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_ALGAPI2=y +CONFIG_CRYPTO_AEAD2=y +CONFIG_CRYPTO_BLKCIPHER=y +CONFIG_CRYPTO_BLKCIPHER2=y +CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_HASH2=y +CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_PCOMP2=y +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_MANAGER2=y +CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y +# CONFIG_CRYPTO_GF128MUL is not set +# CONFIG_CRYPTO_NULL is not set +# CONFIG_CRYPTO_PCRYPT is not set +CONFIG_CRYPTO_WORKQUEUE=y +# CONFIG_CRYPTO_CRYPTD is not set +# CONFIG_CRYPTO_AUTHENC is not set +# CONFIG_CRYPTO_TEST is not set + +# +# Authenticated Encryption with Associated Data +# +# CONFIG_CRYPTO_CCM is not set +# CONFIG_CRYPTO_GCM is not set +# CONFIG_CRYPTO_SEQIV is not set + +# +# Block modes +# +CONFIG_CRYPTO_CBC=y +# CONFIG_CRYPTO_CTR is not set +# CONFIG_CRYPTO_CTS is not set +CONFIG_CRYPTO_ECB=y +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_PCBC is not set +# CONFIG_CRYPTO_XTS is not set + +# +# Hash modes +# +# CONFIG_CRYPTO_HMAC is not set +# CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_VMAC is not set + +# +# Digest +# +# CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_CRC32C_INTEL is not set +# CONFIG_CRYPTO_GHASH is not set +# CONFIG_CRYPTO_MD4 is not set +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_MICHAEL_MIC=y +# CONFIG_CRYPTO_RMD128 is not set +# CONFIG_CRYPTO_RMD160 is not set +# CONFIG_CRYPTO_RMD256 is not set +# CONFIG_CRYPTO_RMD320 is not set +# CONFIG_CRYPTO_SHA1 is not set +# CONFIG_CRYPTO_SHA256 is not set +# CONFIG_CRYPTO_SHA512 is not set +# CONFIG_CRYPTO_TGR192 is not set +# CONFIG_CRYPTO_WP512 is not set + +# +# Ciphers +# +CONFIG_CRYPTO_AES=y +# CONFIG_CRYPTO_AES_586 is not set +# CONFIG_CRYPTO_ANUBIS is not set +CONFIG_CRYPTO_ARC4=y +# CONFIG_CRYPTO_BLOWFISH is not set +# CONFIG_CRYPTO_CAMELLIA is not set +# CONFIG_CRYPTO_CAST5 is not set +# CONFIG_CRYPTO_CAST6 is not set +CONFIG_CRYPTO_DES=y +# CONFIG_CRYPTO_FCRYPT is not set +# CONFIG_CRYPTO_KHAZAD is not set +# CONFIG_CRYPTO_SALSA20 is not set +# CONFIG_CRYPTO_SALSA20_586 is not set +# CONFIG_CRYPTO_SEED is not set +# CONFIG_CRYPTO_SERPENT is not set +# CONFIG_CRYPTO_TEA is not set +# CONFIG_CRYPTO_TWOFISH is not set +# CONFIG_CRYPTO_TWOFISH_586 is not set + +# +# Compression +# +# CONFIG_CRYPTO_DEFLATE is not set +# CONFIG_CRYPTO_ZLIB is not set +# CONFIG_CRYPTO_LZO is not set + +# +# Random Number Generation +# +# CONFIG_CRYPTO_ANSI_CPRNG is not set +# CONFIG_CRYPTO_HW is not set +CONFIG_HAVE_KVM=y +# CONFIG_VIRTUALIZATION is not set +# CONFIG_BINARY_PRINTF is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_GENERIC_FIND_FIRST_BIT=y +CONFIG_GENERIC_FIND_NEXT_BIT=y +CONFIG_GENERIC_FIND_LAST_BIT=y +CONFIG_CRC_CCITT=m +CONFIG_CRC16=y +# CONFIG_CRC_T10DIF is not set +CONFIG_CRC_ITU_T=y +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y +CONFIG_NLATTR=y diff --git a/projects/ATV/options b/projects/ATV/options index 60fe8965ba..ec55e4a93f 100644 --- a/projects/ATV/options +++ b/projects/ATV/options @@ -83,7 +83,7 @@ FAAC_SUPPORT="yes" # build and install Tvheadend TV server (yes / no) - TVHEADEND="no" + TVHEADEND="yes" # additional drivers to install: # bcm_sta: Broadcom STA WLAN Driver From 5ec35d59ed7f5bbc09839e92a83c195a44f9f506 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 23 Nov 2010 03:09:51 +0100 Subject: [PATCH 491/850] xbmc-dharma: update to xbmc-dharma-35419 Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc-dharma/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mediacenter/xbmc-dharma/meta b/packages/mediacenter/xbmc-dharma/meta index bc70843f71..324bed84cc 100644 --- a/packages/mediacenter/xbmc-dharma/meta +++ b/packages/mediacenter/xbmc-dharma/meta @@ -1,5 +1,5 @@ PKG_NAME="xbmc-dharma" -PKG_VERSION="35326" +PKG_VERSION="35419" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From f34875c7fae77c174f6694fe817a59af5c1cfbce Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 23 Nov 2010 03:10:05 +0100 Subject: [PATCH 492/850] xbmc-dharma-theme-Confluence: update to xbmc-dharma-theme-Confluence-35419 Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc-dharma-theme-Confluence/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mediacenter/xbmc-dharma-theme-Confluence/meta b/packages/mediacenter/xbmc-dharma-theme-Confluence/meta index d07860aaae..b9696d5a8a 100644 --- a/packages/mediacenter/xbmc-dharma-theme-Confluence/meta +++ b/packages/mediacenter/xbmc-dharma-theme-Confluence/meta @@ -1,5 +1,5 @@ PKG_NAME="xbmc-dharma-theme-Confluence" -PKG_VERSION="35326" +PKG_VERSION="35419" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From 7f4e704282bc2b58db32ae82cb116800285575d5 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 23 Nov 2010 20:38:45 +0100 Subject: [PATCH 493/850] xbmc-dharma: rename patches (forgot in last commits) Signed-off-by: Stephan Raue --- ...> xbmc-dharma-35419-002-arm_remove_forced_python2.5-0.1.patch} | 0 ...ch => xbmc-dharma-35419-201-let_select_XBMCProjectM-0.1.patch} | 0 ...-0.1.patch => xbmc-dharma-35419-202-let_select_RSXS-0.1.patch} | 0 ....patch => xbmc-dharma-35419-301-correct_lzo_include-0.1.patch} | 0 ... => xbmc-dharma-35419-302-dont_hardcode_usr_include-0.1.patch} | 0 ...h => xbmc-dharma-35419-303-WiiRemote_crosscompiling-0.1.patch} | 0 ....1.patch => xbmc-dharma-35419-303-fix_libdvd_xFLAGS-0.1.patch} | 0 ...h => xbmc-dharma-35419-401-we_dont_need_libXinerama-0.1.patch} | 0 ...atch => xbmc-dharma-35419-402-enable_yasm_in_ffmpeg-0.1.patch} | 0 ...lash-0.1.patch => xbmc-dharma-35419-451-full_splash-0.1.patch} | 0 ...1.patch => xbmc-dharma-35419-452-change_lcd_content-0.1.patch} | 0 ...h => xbmc-dharma-35419-452-ps3_remote_be_more_quiet-0.1.patch} | 0 ...bmc-dharma-35419-462-add_remote_irtrans_mediacenter-0.1.patch} | 0 ....patch => xbmc-dharma-35419-463-add_remote_devinput-0.1.patch} | 0 ...mc-dharma-35419-901-advancedsettings_alwaysextractflags.patch} | 0 ...5419-902-advancedsettings_videolibrary.flattenmoviesets.patch} | 0 16 files changed, 0 insertions(+), 0 deletions(-) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35326-002-arm_remove_forced_python2.5-0.1.patch => xbmc-dharma-35419-002-arm_remove_forced_python2.5-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35326-201-let_select_XBMCProjectM-0.1.patch => xbmc-dharma-35419-201-let_select_XBMCProjectM-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35326-202-let_select_RSXS-0.1.patch => xbmc-dharma-35419-202-let_select_RSXS-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35326-301-correct_lzo_include-0.1.patch => xbmc-dharma-35419-301-correct_lzo_include-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35326-302-dont_hardcode_usr_include-0.1.patch => xbmc-dharma-35419-302-dont_hardcode_usr_include-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35326-303-WiiRemote_crosscompiling-0.1.patch => xbmc-dharma-35419-303-WiiRemote_crosscompiling-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35326-303-fix_libdvd_xFLAGS-0.1.patch => xbmc-dharma-35419-303-fix_libdvd_xFLAGS-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35326-401-we_dont_need_libXinerama-0.1.patch => xbmc-dharma-35419-401-we_dont_need_libXinerama-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35326-402-enable_yasm_in_ffmpeg-0.1.patch => xbmc-dharma-35419-402-enable_yasm_in_ffmpeg-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35326-451-full_splash-0.1.patch => xbmc-dharma-35419-451-full_splash-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35326-452-change_lcd_content-0.1.patch => xbmc-dharma-35419-452-change_lcd_content-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35326-452-ps3_remote_be_more_quiet-0.1.patch => xbmc-dharma-35419-452-ps3_remote_be_more_quiet-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35326-462-add_remote_irtrans_mediacenter-0.1.patch => xbmc-dharma-35419-462-add_remote_irtrans_mediacenter-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35326-463-add_remote_devinput-0.1.patch => xbmc-dharma-35419-463-add_remote_devinput-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35326-901-advancedsettings_alwaysextractflags.patch => xbmc-dharma-35419-901-advancedsettings_alwaysextractflags.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35326-902-advancedsettings_videolibrary.flattenmoviesets.patch => xbmc-dharma-35419-902-advancedsettings_videolibrary.flattenmoviesets.patch} (100%) diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-002-arm_remove_forced_python2.5-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-002-arm_remove_forced_python2.5-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-002-arm_remove_forced_python2.5-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-002-arm_remove_forced_python2.5-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-201-let_select_XBMCProjectM-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-201-let_select_XBMCProjectM-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-201-let_select_XBMCProjectM-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-201-let_select_XBMCProjectM-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-202-let_select_RSXS-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-202-let_select_RSXS-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-202-let_select_RSXS-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-202-let_select_RSXS-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-301-correct_lzo_include-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-301-correct_lzo_include-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-301-correct_lzo_include-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-301-correct_lzo_include-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-302-dont_hardcode_usr_include-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-302-dont_hardcode_usr_include-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-302-dont_hardcode_usr_include-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-302-dont_hardcode_usr_include-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-303-WiiRemote_crosscompiling-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-303-WiiRemote_crosscompiling-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-303-WiiRemote_crosscompiling-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-303-WiiRemote_crosscompiling-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-303-fix_libdvd_xFLAGS-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-303-fix_libdvd_xFLAGS-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-303-fix_libdvd_xFLAGS-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-303-fix_libdvd_xFLAGS-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-401-we_dont_need_libXinerama-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-401-we_dont_need_libXinerama-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-401-we_dont_need_libXinerama-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-401-we_dont_need_libXinerama-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-402-enable_yasm_in_ffmpeg-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-402-enable_yasm_in_ffmpeg-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-402-enable_yasm_in_ffmpeg-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-402-enable_yasm_in_ffmpeg-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-451-full_splash-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-451-full_splash-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-451-full_splash-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-451-full_splash-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-452-change_lcd_content-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-452-change_lcd_content-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-452-change_lcd_content-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-452-change_lcd_content-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-452-ps3_remote_be_more_quiet-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-452-ps3_remote_be_more_quiet-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-452-ps3_remote_be_more_quiet-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-452-ps3_remote_be_more_quiet-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-462-add_remote_irtrans_mediacenter-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-462-add_remote_irtrans_mediacenter-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-462-add_remote_irtrans_mediacenter-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-462-add_remote_irtrans_mediacenter-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-463-add_remote_devinput-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-463-add_remote_devinput-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-463-add_remote_devinput-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-463-add_remote_devinput-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-901-advancedsettings_alwaysextractflags.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-901-advancedsettings_alwaysextractflags.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-901-advancedsettings_alwaysextractflags.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-901-advancedsettings_alwaysextractflags.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-902-advancedsettings_videolibrary.flattenmoviesets.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-902-advancedsettings_videolibrary.flattenmoviesets.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35326-902-advancedsettings_videolibrary.flattenmoviesets.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-902-advancedsettings_videolibrary.flattenmoviesets.patch From 6c3bb5df5414fc2790497deb54519c0a28ea25c5 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:57:08 +0100 Subject: [PATCH 494/850] bigreqsproto: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/proto/bigreqsproto/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/proto/bigreqsproto/meta b/packages/x11/proto/bigreqsproto/meta index 8e03a21dad..0537953df5 100644 --- a/packages/x11/proto/bigreqsproto/meta +++ b/packages/x11/proto/bigreqsproto/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/proto" PKG_SHORTDESC="bigreqsproto: BigReqs extension headers" PKG_LONGDESC="BigReqs extension headers" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From d883db0544fd7bd81ef1fe443e0716df6a9872e7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:57:11 +0100 Subject: [PATCH 495/850] damageproto: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/proto/damageproto/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/proto/damageproto/meta b/packages/x11/proto/damageproto/meta index a1c2419511..020c5df214 100644 --- a/packages/x11/proto/damageproto/meta +++ b/packages/x11/proto/damageproto/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/proto" PKG_SHORTDESC="damageproto: Damage extension header" PKG_LONGDESC="Damage extension headers" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 8551eceb63c2f862d674289490ad59bed5712bc2 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:57:11 +0100 Subject: [PATCH 496/850] dri2proto: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/proto/dri2proto/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/proto/dri2proto/meta b/packages/x11/proto/dri2proto/meta index a7f06dd01f..348ebb7089 100644 --- a/packages/x11/proto/dri2proto/meta +++ b/packages/x11/proto/dri2proto/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/proto" PKG_SHORTDESC="dri2proto: X.Org DRI2 protocol headers" PKG_LONGDESC="X.Org DRI2 protocol headers." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From b865dfeffdc0b9e018a013dd2643e1d2fb733064 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:57:11 +0100 Subject: [PATCH 497/850] fixesproto: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/proto/fixesproto/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/proto/fixesproto/meta b/packages/x11/proto/fixesproto/meta index c2f46b0e8b..6d5706c4d3 100644 --- a/packages/x11/proto/fixesproto/meta +++ b/packages/x11/proto/fixesproto/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/proto" PKG_SHORTDESC="fixesproto: Fixes extension headers" PKG_LONGDESC="Fixes extension headers" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 6f406539f5376ecb9c09aa0978dc4f8536c32481 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:57:11 +0100 Subject: [PATCH 498/850] fontcacheproto: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/proto/fontcacheproto/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/proto/fontcacheproto/meta b/packages/x11/proto/fontcacheproto/meta index 49190e2b55..ee35862255 100644 --- a/packages/x11/proto/fontcacheproto/meta +++ b/packages/x11/proto/fontcacheproto/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/proto" PKG_SHORTDESC="fontcacheproto: Fontcache extension headers" PKG_LONGDESC="Fontcache extension headers" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 816a580c52036a655f87201bb5e2c7df96ea23ed Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:57:12 +0100 Subject: [PATCH 499/850] fontsproto: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/proto/fontsproto/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/proto/fontsproto/meta b/packages/x11/proto/fontsproto/meta index 56e714738c..d285bf184a 100644 --- a/packages/x11/proto/fontsproto/meta +++ b/packages/x11/proto/fontsproto/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/proto" PKG_SHORTDESC="fontsproto: Fonts extension headers" PKG_LONGDESC="Fonts extension headers" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From e89dc55c678d7113ad557e1d80eabb417757973e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:57:12 +0100 Subject: [PATCH 500/850] glproto: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/proto/glproto/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/proto/glproto/meta b/packages/x11/proto/glproto/meta index c4eed50d9a..7e07e049b9 100644 --- a/packages/x11/proto/glproto/meta +++ b/packages/x11/proto/glproto/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.x.org/" PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/proto" PKG_SHORTDESC="glproto: GL extension headers" PKG_LONGDESC="GL extension headers" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From c948ad1637dd0a72b99fd924e7da6e506a882f87 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:57:12 +0100 Subject: [PATCH 501/850] inputproto: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/proto/inputproto/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/proto/inputproto/meta b/packages/x11/proto/inputproto/meta index 4e35ec331a..d238adf155 100644 --- a/packages/x11/proto/inputproto/meta +++ b/packages/x11/proto/inputproto/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/proto" PKG_SHORTDESC="inputproto: Input extension headers" PKG_LONGDESC="Input extension headers" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 63cd61fe422c912e080b1d53af30c50422255360 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:57:12 +0100 Subject: [PATCH 502/850] kbproto: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/proto/kbproto/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/proto/kbproto/meta b/packages/x11/proto/kbproto/meta index 31369b99ff..bc2a0be166 100644 --- a/packages/x11/proto/kbproto/meta +++ b/packages/x11/proto/kbproto/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.x.org/" PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/proto" PKG_SHORTDESC="kbproto: KB extension headers" PKG_LONGDESC="KB extension headers" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 8477f0d9c9c3e7ee8575b7eadecbc69d2a2f7fdb Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:57:12 +0100 Subject: [PATCH 503/850] randrproto: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/proto/randrproto/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/proto/randrproto/meta b/packages/x11/proto/randrproto/meta index 20b74f6869..0aea3fbf20 100644 --- a/packages/x11/proto/randrproto/meta +++ b/packages/x11/proto/randrproto/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/proto" PKG_SHORTDESC="randrproto: Randr extension headers" PKG_LONGDESC="Randr extension headers" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From e09b5c6faabf1cdbcf898414b519f2766f2db899 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:57:12 +0100 Subject: [PATCH 504/850] recordproto: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/proto/recordproto/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/proto/recordproto/meta b/packages/x11/proto/recordproto/meta index ad49ed76ed..9a06a91ff4 100644 --- a/packages/x11/proto/recordproto/meta +++ b/packages/x11/proto/recordproto/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/proto" PKG_SHORTDESC="recordproto: Record extension headers" PKG_LONGDESC="Record extension headers" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From ed772c84d1408f222c19a31570016e5e13fdd1c6 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:57:13 +0100 Subject: [PATCH 505/850] renderproto: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/proto/renderproto/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/proto/renderproto/meta b/packages/x11/proto/renderproto/meta index 937c137048..c045c05b2a 100644 --- a/packages/x11/proto/renderproto/meta +++ b/packages/x11/proto/renderproto/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.x.org/" PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/proto" PKG_SHORTDESC="renderproto: KB extension headers" PKG_LONGDESC="Render extension headers" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From d1de5d41cf47f86459d256606639d11fa58fb2ee Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:57:13 +0100 Subject: [PATCH 506/850] scrnsaverproto: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/proto/scrnsaverproto/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/proto/scrnsaverproto/meta b/packages/x11/proto/scrnsaverproto/meta index 4b52f02c16..f2f0aa08dd 100644 --- a/packages/x11/proto/scrnsaverproto/meta +++ b/packages/x11/proto/scrnsaverproto/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/proto" PKG_SHORTDESC="scrnsaverproto: ScrnSaver extension headers" PKG_LONGDESC="ScrnSaver extension headers" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 0640d1d2ce3483d6d528177ed61017f09bfc5d11 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:57:13 +0100 Subject: [PATCH 507/850] videoproto: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/proto/videoproto/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/proto/videoproto/meta b/packages/x11/proto/videoproto/meta index c3225b366f..ca38d3ef46 100644 --- a/packages/x11/proto/videoproto/meta +++ b/packages/x11/proto/videoproto/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.x.org/" PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/proto" PKG_SHORTDESC="videoproto: KB extension headers" PKG_LONGDESC="Video extension headers" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 0b3fd5cd175c9bb5a43144916c667722195347da Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:57:13 +0100 Subject: [PATCH 508/850] xcb-proto: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/proto/xcb-proto/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/proto/xcb-proto/meta b/packages/x11/proto/xcb-proto/meta index 9ad3c843cf..6e64373c18 100644 --- a/packages/x11/proto/xcb-proto/meta +++ b/packages/x11/proto/xcb-proto/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xcb.freedesktop.org/dist/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain Python" +PKG_BUILD_DEPENDS="toolchain util-macros Python" PKG_PRIORITY="optional" PKG_SECTION="x11/proto" PKG_SHORTDESC="xcb-proto: X C-language Bindings protocol headers" PKG_LONGDESC="X C-language Bindings protocol headers." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From a898ac4d936f95518a7875a52741eb20b54e368b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:57:13 +0100 Subject: [PATCH 509/850] xcmiscproto: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/proto/xcmiscproto/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/proto/xcmiscproto/meta b/packages/x11/proto/xcmiscproto/meta index b973e5d236..4b5d05879e 100644 --- a/packages/x11/proto/xcmiscproto/meta +++ b/packages/x11/proto/xcmiscproto/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OpenSource" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/proto" PKG_SHORTDESC="xcmiscproto: XCMisc extension headers" PKG_LONGDESC="XCMisc extension headers" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From a0d068e727908acec1facfa68a3e536b1f7228e4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:57:14 +0100 Subject: [PATCH 510/850] xextproto: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/proto/xextproto/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/proto/xextproto/meta b/packages/x11/proto/xextproto/meta index 26936fbdf1..925b8ea115 100644 --- a/packages/x11/proto/xextproto/meta +++ b/packages/x11/proto/xextproto/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.x.org/" PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/proto" PKG_SHORTDESC="xextproto: KB extension headers" PKG_LONGDESC="Xext extension headers" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From e5bbeb5b05ccae1e1dcf18b33767383fa286c554 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:57:14 +0100 Subject: [PATCH 511/850] xf86dgaproto: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/proto/xf86dgaproto/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/proto/xf86dgaproto/meta b/packages/x11/proto/xf86dgaproto/meta index ce68b93de0..06097238df 100644 --- a/packages/x11/proto/xf86dgaproto/meta +++ b/packages/x11/proto/xf86dgaproto/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/proto" PKG_SHORTDESC="xf86dgaproto: XF86DGA extension headers" PKG_LONGDESC="XF86DGA extension headers" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From c3f97136bc66c593c6c4cc9218b42cb94ff837e8 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:57:14 +0100 Subject: [PATCH 512/850] xf86driproto: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/proto/xf86driproto/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/proto/xf86driproto/meta b/packages/x11/proto/xf86driproto/meta index 43ddf47101..88f011eb56 100644 --- a/packages/x11/proto/xf86driproto/meta +++ b/packages/x11/proto/xf86driproto/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/proto" PKG_SHORTDESC="xf86driproto: XF86DRI extension headers" PKG_LONGDESC="XF86DRI extension headers" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From cc4b1579c629f3b16fa1dc19300b064b7660cff8 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:57:14 +0100 Subject: [PATCH 513/850] xf86miscproto: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/proto/xf86miscproto/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/proto/xf86miscproto/meta b/packages/x11/proto/xf86miscproto/meta index 8a970ce3f2..0c6e6f120b 100644 --- a/packages/x11/proto/xf86miscproto/meta +++ b/packages/x11/proto/xf86miscproto/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/proto" PKG_SHORTDESC="xf86miscproto: XF86Misc extension headers" PKG_LONGDESC="XF86Misc extension headers" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 5f7b5b713d30124699ad55b1edf8b12ebe3562a9 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:57:14 +0100 Subject: [PATCH 514/850] xf86vidmodeproto: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/proto/xf86vidmodeproto/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/proto/xf86vidmodeproto/meta b/packages/x11/proto/xf86vidmodeproto/meta index 00a1a166df..7282e21637 100644 --- a/packages/x11/proto/xf86vidmodeproto/meta +++ b/packages/x11/proto/xf86vidmodeproto/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/proto" PKG_SHORTDESC="xf86vidmodeproto: XF86VidMode extension headers" PKG_LONGDESC="XF86VidMode extension headers" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From f4abe351c06a2c64393efa613bff11b76b1771e6 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:57:15 +0100 Subject: [PATCH 515/850] xineramaproto: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/proto/xineramaproto/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/proto/xineramaproto/meta b/packages/x11/proto/xineramaproto/meta index 12169a4dd8..3b944d09a1 100644 --- a/packages/x11/proto/xineramaproto/meta +++ b/packages/x11/proto/xineramaproto/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/proto" PKG_SHORTDESC="xineramaproto: Xinerama extension headers" PKG_LONGDESC="Xinerama extension headers" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 402090fc4641c440354565821bb75f37c044de53 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:57:15 +0100 Subject: [PATCH 516/850] xproto: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/proto/xproto/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/proto/xproto/meta b/packages/x11/proto/xproto/meta index 222b0aacb4..6b165a34bb 100644 --- a/packages/x11/proto/xproto/meta +++ b/packages/x11/proto/xproto/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.x.org/" PKG_URL="http://xorg.freedesktop.org/archive/individual/proto/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/proto" PKG_SHORTDESC="xproto: KB extension headers" PKG_LONGDESC="X11 extension headers" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 33ae4fa0eabb69fc07afc39f63874df553c91b85 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:58:17 +0100 Subject: [PATCH 517/850] libfontenc: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/lib/libfontenc/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/lib/libfontenc/meta b/packages/x11/lib/libfontenc/meta index 361d6b8030..c78bee723f 100644 --- a/packages/x11/lib/libfontenc/meta +++ b/packages/x11/lib/libfontenc/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain xproto zlib" +PKG_BUILD_DEPENDS="toolchain util-macros xproto zlib" PKG_PRIORITY="optional" PKG_SECTION="x11/lib" PKG_SHORTDESC="libfontenc: X11 font encoding library" PKG_LONGDESC="Libfontenc is a library which helps font libraries portably determine and deal with different encodings of fonts." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 15bb2b55ea67c9aa09193152660f7f2f472c6172 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:58:18 +0100 Subject: [PATCH 518/850] libICE: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/lib/libICE/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/lib/libICE/meta b/packages/x11/lib/libICE/meta index 1b8ac83286..6313c854ea 100644 --- a/packages/x11/lib/libICE/meta +++ b/packages/x11/lib/libICE/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain xtrans" +PKG_BUILD_DEPENDS="toolchain util-macros xtrans" PKG_PRIORITY="optional" PKG_SECTION="x11/lib" PKG_SHORTDESC="libice: X Inter-Client Exchange (ICE) protocol library" PKG_LONGDESC="X Inter-Client Exchange (ICE) protocol library." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From cc7f120117b67e8d41bba11de9f2e48c0e443bc3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:58:18 +0100 Subject: [PATCH 519/850] libpciaccess: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/lib/libpciaccess/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/lib/libpciaccess/meta b/packages/x11/lib/libpciaccess/meta index e572df4a54..74553d3cde 100644 --- a/packages/x11/lib/libpciaccess/meta +++ b/packages/x11/lib/libpciaccess/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://freedesktop.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="zlib" -PKG_BUILD_DEPENDS="toolchain zlib" +PKG_BUILD_DEPENDS="toolchain util-macros zlib" PKG_PRIORITY="optional" PKG_SECTION="x11/lib" PKG_SHORTDESC="libpciaccess: X.org libpciaccess library" PKG_LONGDESC="X.org libpciaccess library." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From b4ef11e61bf0a4ceb83290c56741853701a016fe Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:58:18 +0100 Subject: [PATCH 520/850] libSM: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/lib/libSM/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/lib/libSM/meta b/packages/x11/lib/libSM/meta index f2755c0fe1..99266ec0de 100644 --- a/packages/x11/lib/libSM/meta +++ b/packages/x11/lib/libSM/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="util-linux-ng libICE" -PKG_BUILD_DEPENDS="toolchain util-linux-ng libICE" +PKG_BUILD_DEPENDS="toolchain util-macros util-linux-ng libICE" PKG_PRIORITY="optional" PKG_SECTION="x11/lib" PKG_SHORTDESC="libSM: X11 Inter-Client Exchange library" PKG_LONGDESC="This package provides the main interface to the X11 Session Management library, which allows for applications to both manage sessions, and make use of session managers to save and restore their state for later use." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From e68a54f5694a47e9da8433aa99191052f523dd0f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:58:18 +0100 Subject: [PATCH 521/850] libX11: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/lib/libX11/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/lib/libX11/meta b/packages/x11/lib/libX11/meta index 21d58b31e6..d43bc916a1 100644 --- a/packages/x11/lib/libX11/meta +++ b/packages/x11/lib/libX11/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.x.org/" PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="libXau libxcb" -PKG_BUILD_DEPENDS="toolchain xextproto xcmiscproto bigreqsproto kbproto inputproto xtrans libXau libxcb util-macros" +PKG_BUILD_DEPENDS="toolchain util-macros xextproto xcmiscproto bigreqsproto kbproto inputproto xtrans libXau libxcb util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/lib" PKG_SHORTDESC="libx11: The X11 library" PKG_LONGDESC="LibX11 is the main X11 library containing all the client-side code to access the X11 windowing system." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 078b24548322b5ee50eec5864ca580d6c9f616e4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:58:18 +0100 Subject: [PATCH 522/850] libXau: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/lib/libXau/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/lib/libXau/meta b/packages/x11/lib/libXau/meta index 91afb93858..0fcb2b9b88 100644 --- a/packages/x11/lib/libXau/meta +++ b/packages/x11/lib/libXau/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain xproto" +PKG_BUILD_DEPENDS="toolchain util-macros xproto" PKG_PRIORITY="optional" PKG_SECTION="x11/lib" PKG_SHORTDESC="libXau: X authorization file management libary" PKG_LONGDESC="X authorization file management libary" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 7a003e7d7eb859b3646c359bc0a35a3c06eab62b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:58:18 +0100 Subject: [PATCH 523/850] libxcb: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/lib/libxcb/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/lib/libxcb/meta b/packages/x11/lib/libxcb/meta index b31f24e1ac..ee13825c82 100644 --- a/packages/x11/lib/libxcb/meta +++ b/packages/x11/lib/libxcb/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://xcb.freedesktop.org" PKG_URL="http://xcb.freedesktop.org/dist/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="libXau" -PKG_BUILD_DEPENDS="toolchain Python xcb-proto libpthread-stubs libXau" +PKG_BUILD_DEPENDS="toolchain util-macros Python xcb-proto libpthread-stubs libXau" PKG_PRIORITY="optional" PKG_SECTION="x11/lib" PKG_SHORTDESC="libxcb: X C-language Bindings library" PKG_LONGDESC="X C-language Bindings library." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From ab7dc509168fd1f914f698149990cf1682261179 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:58:19 +0100 Subject: [PATCH 524/850] libXdamage: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/lib/libXdamage/meta | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/x11/lib/libXdamage/meta b/packages/x11/lib/libXdamage/meta index e0038e123d..5ad60e2378 100644 --- a/packages/x11/lib/libXdamage/meta +++ b/packages/x11/lib/libXdamage/meta @@ -6,11 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="libX11 libXfixes" -PKG_BUILD_DEPENDS="toolchain damageproto fixesproto libX11 libXfixes" +PKG_BUILD_DEPENDS="toolchain util-macros damageproto fixesproto libX11 libXfixes" PKG_PRIORITY="optional" PKG_SECTION="x11/lib" PKG_SHORTDESC="libXdamage: X11 damaged region extension library" PKG_LONGDESC="LibXdamage provides an X Window System client interface to the DAMAGE extension to the X protocol. The Damage extension provides for notification of when on-screen regions have been 'damaged' (altered)." PKG_IS_ADDON="no" - +PKG_AUTORECONF="yes" From 011104307e4e5c3c9443734279a12ac393bd33d9 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:58:19 +0100 Subject: [PATCH 525/850] libXext: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/lib/libXext/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/lib/libXext/meta b/packages/x11/lib/libXext/meta index 817674585a..66337d1ee6 100644 --- a/packages/x11/lib/libXext/meta +++ b/packages/x11/lib/libXext/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="libX11" -PKG_BUILD_DEPENDS="toolchain xextproto libX11" +PKG_BUILD_DEPENDS="toolchain util-macros xextproto libX11" PKG_PRIORITY="optional" PKG_SECTION="x11/lib" PKG_SHORTDESC="libxext: X11 miscellaneous extensions library" PKG_LONGDESC="LibXext provides an X Window System client interface to several extensions to the X protocol, iincluding DOUBLE-BUFFER (DBE), DPMS, Extended-Visual-Information (EVI), LBX, MIT-SHM, MIT-SUNDRY-NONSTANDARD, Multi-Buffering, SECURITY, SHAPE, SHAPE, SYNC, TOG-CUP, XC-APPGROUP, XC-MISC, XTEST and possibly others." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 80f4d3d37e505063fdccb4fbea7ac9950e18a5aa Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:58:19 +0100 Subject: [PATCH 526/850] libXfixes: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/lib/libXfixes/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/lib/libXfixes/meta b/packages/x11/lib/libXfixes/meta index 9df3dcac74..e2faada9b7 100644 --- a/packages/x11/lib/libXfixes/meta +++ b/packages/x11/lib/libXfixes/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="libX11" -PKG_BUILD_DEPENDS="toolchain fixesproto libX11" +PKG_BUILD_DEPENDS="toolchain util-macros fixesproto libX11" PKG_PRIORITY="optional" PKG_SECTION="x11/lib" PKG_SHORTDESC="libxfixes: X Fixes Library" PKG_LONGDESC="X Fixes Library" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 4fb42012817cb39d7915c2bb015a047a3ec8c230 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:58:19 +0100 Subject: [PATCH 527/850] libXfont: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/lib/libXfont/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/lib/libXfont/meta b/packages/x11/lib/libXfont/meta index 8ce23a0e09..3b96dccbd0 100644 --- a/packages/x11/lib/libXfont/meta +++ b/packages/x11/lib/libXfont/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="freetype" -PKG_BUILD_DEPENDS="toolchain fontcacheproto fontsproto xtrans freetype libfontenc" +PKG_BUILD_DEPENDS="toolchain util-macros fontcacheproto fontsproto xtrans freetype libfontenc" PKG_PRIORITY="optional" PKG_SECTION="x11/lib" PKG_SHORTDESC="libxfont: X font Library" PKG_LONGDESC="X font Library" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 260036c1199e23d1d88537c2abef3a8b5b8eaed7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:58:19 +0100 Subject: [PATCH 528/850] libXft: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/lib/libXft/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/lib/libXft/meta b/packages/x11/lib/libXft/meta index 073b8939e3..a00a57b655 100644 --- a/packages/x11/lib/libXft/meta +++ b/packages/x11/lib/libXft/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="libXrender fontconfig freetype" -PKG_BUILD_DEPENDS="toolchain xproto libXrender fontconfig freetype" +PKG_BUILD_DEPENDS="toolchain util-macros xproto libXrender fontconfig freetype" PKG_PRIORITY="optional" PKG_SECTION="x11/lib" PKG_SHORTDESC="libxft: X FreeType library" PKG_LONGDESC="X FreeType library" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 20bb5a728b01812b01cad05c8839854cb80f26e4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:58:20 +0100 Subject: [PATCH 529/850] libXi: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/lib/libXi/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/lib/libXi/meta b/packages/x11/lib/libXi/meta index 2eedc5b631..579f5ecdf3 100644 --- a/packages/x11/lib/libXi/meta +++ b/packages/x11/lib/libXi/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.x.org/" PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="libX11" -PKG_BUILD_DEPENDS="toolchain libX11" +PKG_BUILD_DEPENDS="toolchain util-macros libX11" PKG_PRIORITY="optional" PKG_SECTION="x11/lib" PKG_SHORTDESC="libxi: X11 Input extension library" PKG_LONGDESC="LibXi provides an X Window System client interface to the XINPUT extension to the X protocol." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From ede2ee3579ed46e675eacdf4e7cbf332ff26341b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:58:20 +0100 Subject: [PATCH 530/850] libXinerama: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/lib/libXinerama/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/lib/libXinerama/meta b/packages/x11/lib/libXinerama/meta index 7a841ec62b..1259d0cec9 100644 --- a/packages/x11/lib/libXinerama/meta +++ b/packages/x11/lib/libXinerama/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="libXext" -PKG_BUILD_DEPENDS="toolchain xineramaproto libXext" +PKG_BUILD_DEPENDS="toolchain util-macros xineramaproto libXext" PKG_PRIORITY="optional" PKG_SECTION="x11/lib" PKG_SHORTDESC="libxft: X FreeType library" PKG_LONGDESC="X FreeType library" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From e35d8a2bea05eaf003087119813d65b3582152ad Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:58:20 +0100 Subject: [PATCH 531/850] libxkbfile: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/lib/libxkbfile/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/lib/libxkbfile/meta b/packages/x11/lib/libxkbfile/meta index 9b0bea2471..2103ff91e6 100644 --- a/packages/x11/lib/libxkbfile/meta +++ b/packages/x11/lib/libxkbfile/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain kbproto libX11" +PKG_BUILD_DEPENDS="toolchain util-macros kbproto libX11" PKG_PRIORITY="optional" PKG_SECTION="x11/lib" PKG_SHORTDESC="libxkbfile: X11 keyboard file manipulation library" PKG_LONGDESC="Libxkbfile provides an interface to read and manipulate description files for XKB, the X11 keyboard configuration extension." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 35d0afe17c41abaf1d60d00f0248639b8a1e5435 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:58:20 +0100 Subject: [PATCH 532/850] libXmu: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/lib/libXmu/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/lib/libXmu/meta b/packages/x11/lib/libXmu/meta index 7ac90379ac..861f75cae0 100644 --- a/packages/x11/lib/libXmu/meta +++ b/packages/x11/lib/libXmu/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="libXext libX11 libXt" -PKG_BUILD_DEPENDS="toolchain xextproto libXext libX11 libXt" +PKG_BUILD_DEPENDS="toolchain util-macros xextproto libXext libX11 libXt" PKG_PRIORITY="optional" PKG_SECTION="x11/lib" PKG_SHORTDESC="libxmu: X11 miscellaneous utility library" PKG_LONGDESC="LibXmu provides a set of miscellaneous utility convenience functions for X libraries to use." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 4cc05b8f733cba337f503c3ace165bcb8c15137d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:58:20 +0100 Subject: [PATCH 533/850] libXrandr: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/lib/libXrandr/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/lib/libXrandr/meta b/packages/x11/lib/libXrandr/meta index 6fb62cd170..ea03da5b76 100644 --- a/packages/x11/lib/libXrandr/meta +++ b/packages/x11/lib/libXrandr/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="libX11 libXrender libXext" -PKG_BUILD_DEPENDS="toolchain randrproto libX11 libXrender libXext" +PKG_BUILD_DEPENDS="toolchain util-macros randrproto libX11 libXrender libXext" PKG_PRIORITY="optional" PKG_SECTION="x11/lib" PKG_SHORTDESC="libxrandr: X Resize, Rotate and Reflection extension client library" PKG_LONGDESC="Xrandr is a simple library designed to interface the X Resize and Rotate Extension. This allows clients to change the size and rotation of the root window of a screen, along with the ability to reflect the screen about either axis." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 616dbb167217ad4cfa16ac781c0440c0d21509a4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:58:20 +0100 Subject: [PATCH 534/850] libXrender: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/lib/libXrender/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/lib/libXrender/meta b/packages/x11/lib/libXrender/meta index 461ecba97e..52e7d7af43 100644 --- a/packages/x11/lib/libXrender/meta +++ b/packages/x11/lib/libXrender/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="libX11" -PKG_BUILD_DEPENDS="toolchain renderproto libX11" +PKG_BUILD_DEPENDS="toolchain util-macros renderproto libX11" PKG_PRIORITY="optional" PKG_SECTION="x11/lib" PKG_SHORTDESC="libxrender: X Rendering Extension client library" PKG_LONGDESC="The X Rendering Extension (Render) introduces digital image composition as the foundation of a new rendering model within the X Window System. Rendering geometric figures is accomplished by client-side tesselation into either triangles or trapezoids." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 12745c6b149303b5d846ef09a54bb0629499caac Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:58:21 +0100 Subject: [PATCH 535/850] libXt: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/lib/libXt/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/lib/libXt/meta b/packages/x11/lib/libXt/meta index 4b528eb67f..0c1c29b92f 100644 --- a/packages/x11/lib/libXt/meta +++ b/packages/x11/lib/libXt/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="libX11 libSM" -PKG_BUILD_DEPENDS="toolchain libX11 libSM" +PKG_BUILD_DEPENDS="toolchain util-macros libX11 libSM" PKG_PRIORITY="optional" PKG_SECTION="x11/lib" PKG_SHORTDESC="libxt: X11 toolkit intrinsics library" PKG_LONGDESC="LibXt provides the X Toolkit Intrinsics, an abstract widget library upon which other toolkits are based. Xt is the basis for many toolkits, including the Athena widgets (Xaw), and LessTif." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 15142d3c4be41d7c22bad4e696b78b1dd2051e80 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:58:21 +0100 Subject: [PATCH 536/850] libXtst: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/lib/libXtst/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/lib/libXtst/meta b/packages/x11/lib/libXtst/meta index 50e99dc7f4..8c260db4e6 100644 --- a/packages/x11/lib/libXtst/meta +++ b/packages/x11/lib/libXtst/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="libXext libXi libX11" -PKG_BUILD_DEPENDS="toolchain recordproto xextproto libXext inputproto libXi libX11" +PKG_BUILD_DEPENDS="toolchain util-macros recordproto xextproto libXext inputproto libXi libX11" PKG_PRIORITY="optional" PKG_SECTION="x11/lib" PKG_SHORTDESC="libxtst: The Xtst Library" PKG_LONGDESC="The Xtst Library" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 6003ba297c85d1a7e2d02220c19e1eb2a19c2226 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:58:21 +0100 Subject: [PATCH 537/850] libXxf86vm: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/lib/libXxf86vm/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/lib/libXxf86vm/meta b/packages/x11/lib/libXxf86vm/meta index 5831ca6033..0d53d52b25 100644 --- a/packages/x11/lib/libXxf86vm/meta +++ b/packages/x11/lib/libXxf86vm/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="libX11 libXext" -PKG_BUILD_DEPENDS="toolchain xf86vidmodeproto libX11 libXext" +PKG_BUILD_DEPENDS="toolchain util-macros xf86vidmodeproto libX11 libXext" PKG_PRIORITY="optional" PKG_SECTION="x11/lib" PKG_SHORTDESC="libxxf86vm: Extension library for the XFree86-VidMode X extension" PKG_LONGDESC="The libxxf86vm provides an interface to the server extension XFree86-VidModeExtension which allows the video modes to be queried and adjusted dynamically and mode switching to be controlled." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 77aadae01d41d5fa85e4404e43eb19fb8b92fe01 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:58:21 +0100 Subject: [PATCH 538/850] pixman: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/lib/pixman/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/lib/pixman/meta b/packages/x11/lib/pixman/meta index 87df6e7b85..ac48893b59 100644 --- a/packages/x11/lib/pixman/meta +++ b/packages/x11/lib/pixman/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.x.org/" PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/lib" PKG_SHORTDESC="pixman: Pixel manipulation library" PKG_LONGDESC="Pixman is a generic library for manipulating pixel regions, contains low-level pixel manipulation routines and is used by both xorg and cairo." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From f1d9f14da7611b20e0cc2de3aeaac14074bbd04d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:58:21 +0100 Subject: [PATCH 539/850] xtrans: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/lib/xtrans/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/lib/xtrans/meta b/packages/x11/lib/xtrans/meta index 3c65aab5ac..26b63e8bb2 100644 --- a/packages/x11/lib/xtrans/meta +++ b/packages/x11/lib/xtrans/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/lib" PKG_SHORTDESC="xtrans: Abstract network code for X" PKG_LONGDESC="Abstract network code for X." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From b70ccd9bc323d0693d2a7a9784056512de69fe6f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:59:04 +0100 Subject: [PATCH 540/850] encodings: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/font/encodings/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/font/encodings/meta b/packages/x11/font/encodings/meta index aa2e82cfef..e482ee2777 100644 --- a/packages/x11/font/encodings/meta +++ b/packages/x11/font/encodings/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/font/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/font" PKG_SHORTDESC="encodings: X font encodings" PKG_LONGDESC="X font encoding meta files." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 2671102ec782ed5a1e9447582ca47834e85e2c9d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:59:04 +0100 Subject: [PATCH 541/850] font-bitstream-type1: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/font/font-bitstream-type1/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/font/font-bitstream-type1/meta b/packages/x11/font/font-bitstream-type1/meta index d8d264009b..d4f8657dc0 100644 --- a/packages/x11/font/font-bitstream-type1/meta +++ b/packages/x11/font/font-bitstream-type1/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/font/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/font" PKG_SHORTDESC="font-bitstream-type1: Bitstream font family" PKG_LONGDESC="Bitstream font family." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 5e80672996028ed1d29f9f2ed04a624ba9a759b3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:59:04 +0100 Subject: [PATCH 542/850] font-cursor-misc: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/font/font-cursor-misc/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/font/font-cursor-misc/meta b/packages/x11/font/font-cursor-misc/meta index adff577582..218de1ac3a 100644 --- a/packages/x11/font/font-cursor-misc/meta +++ b/packages/x11/font/font-cursor-misc/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/font/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="font-util" -PKG_BUILD_DEPENDS="toolchain font-util" +PKG_BUILD_DEPENDS="toolchain util-macros font-util" PKG_PRIORITY="optional" PKG_SECTION="x11/font" PKG_SHORTDESC="font-cursor-misc: X11 cursor fonts" PKG_LONGDESC="X11 cursor fonts." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 9e97cc455497a5ab552a353a69f7a3fc5e29a89b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:59:04 +0100 Subject: [PATCH 543/850] font-misc-misc: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/font/font-misc-misc/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/font/font-misc-misc/meta b/packages/x11/font/font-misc-misc/meta index b567d78c4c..206c2deb0c 100644 --- a/packages/x11/font/font-misc-misc/meta +++ b/packages/x11/font/font-misc-misc/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/font/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="font-cursor-misc font-util" -PKG_BUILD_DEPENDS="toolchain font-cursor-misc font-util" +PKG_BUILD_DEPENDS="toolchain util-macros font-cursor-misc font-util" PKG_PRIORITY="optional" PKG_SECTION="x11/font" PKG_SHORTDESC="font-misc-misc: A misc. public domain font" PKG_LONGDESC="A misc. public domain font." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 31c82c53ac2ddf0c349703e063d7c175dd5f30c4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:59:05 +0100 Subject: [PATCH 544/850] font-util: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/font/font-util/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/font/font-util/meta b/packages/x11/font/font-util/meta index 16f7124f83..06585b0f69 100644 --- a/packages/x11/font/font-util/meta +++ b/packages/x11/font/font-util/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/font/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/font" PKG_SHORTDESC="font-util: X.org font utilities" PKG_LONGDESC="X.org font utilities." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 6caeaa30e6af9abd8e611416a9917a08413797e6 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:59:05 +0100 Subject: [PATCH 545/850] font-xfree86-type1: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/font/font-xfree86-type1/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/font/font-xfree86-type1/meta b/packages/x11/font/font-xfree86-type1/meta index 7f7a136f7c..c363cf156b 100644 --- a/packages/x11/font/font-xfree86-type1/meta +++ b/packages/x11/font/font-xfree86-type1/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/releases/individual/font/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/font" PKG_SHORTDESC="font-xfree86-type1: A Xfree86 Inc. Type1 font" PKG_LONGDESC="A Xfree86 Inc. Type1 font." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 8bc90d2ea0c62492141186eb7b46dd33c64bdc8d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 17:59:05 +0100 Subject: [PATCH 546/850] liberation-fonts-ttf: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/font/liberation-fonts-ttf/meta | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/x11/font/liberation-fonts-ttf/meta b/packages/x11/font/liberation-fonts-ttf/meta index 5561c816d5..ad591f7abf 100644 --- a/packages/x11/font/liberation-fonts-ttf/meta +++ b/packages/x11/font/liberation-fonts-ttf/meta @@ -6,11 +6,11 @@ PKG_LICENSE="GPL" PKG_SITE="https://www.redhat.com/promo/fonts/" PKG_URL="https://fedorahosted.org/releases/l/i/liberation-fonts/$PKG_NAME-$PKG_VERSION.tar.gz" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/fonts" PKG_SHORTDESC="liberation-fonts: High quality "open-sourced" vector fonts" PKG_LONGDESC="This packages included the high-quality and open-sourced TrueType vector fonts released by RedHat." PKG_IS_ADDON="no" - +PKG_AUTORECONF="no" From a98212041d28387d2ad92e9a45f2a297b9883e01 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:00:30 +0100 Subject: [PATCH 547/850] new package: add package 'gtk-doc' Signed-off-by: Stephan Raue --- packages/x11/toolkits/gtk-doc/build | 7 +++++++ packages/x11/toolkits/gtk-doc/meta | 16 ++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100755 packages/x11/toolkits/gtk-doc/build create mode 100644 packages/x11/toolkits/gtk-doc/meta diff --git a/packages/x11/toolkits/gtk-doc/build b/packages/x11/toolkits/gtk-doc/build new file mode 100755 index 0000000000..1c5c55a3a0 --- /dev/null +++ b/packages/x11/toolkits/gtk-doc/build @@ -0,0 +1,7 @@ +#!/bin/sh + +. config/options $1 + +cd $PKG_BUILD + mkdir -p $SYSROOT_PREFIX/usr/share/aclocal + cp gtk-doc.m4 $SYSROOT_PREFIX/usr/share/aclocal diff --git a/packages/x11/toolkits/gtk-doc/meta b/packages/x11/toolkits/gtk-doc/meta new file mode 100644 index 0000000000..60530b4733 --- /dev/null +++ b/packages/x11/toolkits/gtk-doc/meta @@ -0,0 +1,16 @@ +PKG_NAME="gtk-doc" +PKG_VERSION="1.15" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.gtk.org/gtk-doc/" +PKG_URL="http://ftp.acc.umu.se/pub/GNOME/sources/gtk-doc/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="x11/toolkits" +PKG_SHORTDESC="gtk-doc: a project which was started to generate API documentation from comments added to C code." +PKG_LONGDESC="GTK-Doc is a project which was started to generate API documentation from comments added to C code. It is typically used to document the public API of GTK+ and GNOME libraries, but it can also be used to document application code." +PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 1f05520579cfa5dd506da05092b1b14a8fa4bb25 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:01:13 +0100 Subject: [PATCH 548/850] gdk-pixbuf: add autoreconf support and enable if possible Signed-off-by: Stephan Raue --- packages/x11/toolkits/gdk-pixbuf/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/x11/toolkits/gdk-pixbuf/meta b/packages/x11/toolkits/gdk-pixbuf/meta index 29af6660ad..f342e14927 100644 --- a/packages/x11/toolkits/gdk-pixbuf/meta +++ b/packages/x11/toolkits/gdk-pixbuf/meta @@ -12,3 +12,5 @@ PKG_SECTION="x11/toolkits" PKG_SHORTDESC="gdk-pixbuf: a GNOME library for image loading and manipulation." PKG_LONGDESC="gdk-pixbuf (GdkPixbuf) is a GNOME library for image loading and manipulation. The GdkPixbuf documentation contains both the programmer's guide and the API reference." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 0b641fa7a39e80f520155e7c6b58971e1dcf5f79 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:01:13 +0100 Subject: [PATCH 549/850] gtk+: add autoreconf support and enable if possible Signed-off-by: Stephan Raue --- packages/x11/toolkits/gtk+/build | 10 ---------- packages/x11/toolkits/gtk+/install | 9 --------- packages/x11/toolkits/gtk+/meta | 2 ++ 3 files changed, 2 insertions(+), 19 deletions(-) diff --git a/packages/x11/toolkits/gtk+/build b/packages/x11/toolkits/gtk+/build index c35c3ea5b3..b4af1278de 100755 --- a/packages/x11/toolkits/gtk+/build +++ b/packages/x11/toolkits/gtk+/build @@ -2,16 +2,6 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build atk -$SCRIPTS/build libX11 -$SCRIPTS/build libXrandr -$SCRIPTS/build libXi -$SCRIPTS/build glib -$SCRIPTS/build pango -$SCRIPTS/build cairo -$SCRIPTS/build gdk-pixbuf - cd $PKG_BUILD ac_cv_path_GLIB_GENMARSHAL=$ROOT/$TOOLCHAIN/bin/glib-genmarshal \ ./configure --host=$TARGET_NAME \ diff --git a/packages/x11/toolkits/gtk+/install b/packages/x11/toolkits/gtk+/install index 07a76fe47a..062929c83f 100755 --- a/packages/x11/toolkits/gtk+/install +++ b/packages/x11/toolkits/gtk+/install @@ -2,15 +2,6 @@ . config/options $1 -$SCRIPTS/install atk -$SCRIPTS/install libX11 -$SCRIPTS/install libXrandr -$SCRIPTS/install libXi -$SCRIPTS/install glib -$SCRIPTS/install pango -$SCRIPTS/install cairo -$SCRIPTS/install gdk-pixbuf - GTK_BINARY_VERSION=`pkg-config gtk+-2.0 --variable=gtk_binary_version` GTK_LIB_DIR="gtk-2.0/$GTK_BINARY_VERSION" diff --git a/packages/x11/toolkits/gtk+/meta b/packages/x11/toolkits/gtk+/meta index 9939f1ff11..4e1ea5d099 100644 --- a/packages/x11/toolkits/gtk+/meta +++ b/packages/x11/toolkits/gtk+/meta @@ -12,3 +12,5 @@ PKG_SECTION="x11/toolkits" PKG_SHORTDESC="gtk+: The Gimp ToolKit (GTK)" PKG_LONGDESC="This is GTK+. GTK+, which stands for the Gimp ToolKit, is a library for creating graphical user interfaces for the X Window System. It is designed to be small, efficient, and flexible. GTK+ is written in C with a very object-oriented approach." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 6a471ec11ed95e4d121ac132dbc84680261842b3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:01:13 +0100 Subject: [PATCH 550/850] pango: add autoreconf support and enable if possible Signed-off-by: Stephan Raue --- packages/x11/toolkits/pango/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/x11/toolkits/pango/meta b/packages/x11/toolkits/pango/meta index 4b1fa6200d..913edef2b1 100644 --- a/packages/x11/toolkits/pango/meta +++ b/packages/x11/toolkits/pango/meta @@ -12,3 +12,5 @@ PKG_SECTION="x11/toolkits" PKG_SHORTDESC="pango: Library for layout and rendering of internationalized text" PKG_LONGDESC="The goal of the Pango project is to provide an open-source framework for the layout and rendering of internationalized text. Pango is an offshoot of the GTK+ and GNOME projects, and the initial focus is operation in those environments, however there is nothing fundamentally GTK+ or GNOME specific about Pango. Pango uses Unicode for all of its encoding, and will eventually support output in all the worlds major languages." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From e909d7c2811aa602069ee097df81daeceaa89631 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:02:03 +0100 Subject: [PATCH 551/850] xkbcomp: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/app/xkbcomp/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/app/xkbcomp/meta b/packages/x11/app/xkbcomp/meta index dca6fcf302..3976c1540a 100644 --- a/packages/x11/app/xkbcomp/meta +++ b/packages/x11/app/xkbcomp/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/app/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="libX11" -PKG_BUILD_DEPENDS="toolchain libX11" +PKG_BUILD_DEPENDS="toolchain util-macros libX11" PKG_PRIORITY="optional" PKG_SECTION="x11/app" PKG_SHORTDESC="xkbcomp: Compiles XKB keyboard description" PKG_LONGDESC="The xkbcomp keymap compiler converts a description of an XKB keymap into one of several output formats." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From b212bfe2833ca6a34b1e47b8b27a1d1e46de7b61 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:02:04 +0100 Subject: [PATCH 552/850] xrandr: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/app/xrandr/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/app/xrandr/meta b/packages/x11/app/xrandr/meta index a0ff0b2e98..0c16fc00e7 100644 --- a/packages/x11/app/xrandr/meta +++ b/packages/x11/app/xrandr/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/app/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="libXrandr" -PKG_BUILD_DEPENDS="toolchain libXrandr" +PKG_BUILD_DEPENDS="toolchain util-macros libXrandr" PKG_PRIORITY="optional" PKG_SECTION="x11/app" PKG_SHORTDESC="xrandr: A primitive command line interface to RandR extension" PKG_LONGDESC="Xrandr is a primitive command line interface to the RandR extension and used to set the screen size, orientation and/or reflection." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 30ab588eb3b7574ab69d147036db98dca6c85c46 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:02:04 +0100 Subject: [PATCH 553/850] xwd: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/app/xwd/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/app/xwd/meta b/packages/x11/app/xwd/meta index d1f3a70152..20cfd8e4ec 100644 --- a/packages/x11/app/xwd/meta +++ b/packages/x11/app/xwd/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/app/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/app" PKG_SHORTDESC="xwd: Dumps an image of an X window" PKG_LONGDESC="Xwd is an X Window System window dumping utility. Xwd allows X users to store window images in a specially formatted dump file." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 3cd14c285d14366dc119c79c67ce22a9bc8450b5 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:02:15 +0100 Subject: [PATCH 554/850] xkeyboard-config: add autoreconf support, depends on util-macros Signed-off-by: Stephan Raue --- packages/x11/data/xkeyboard-config/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/data/xkeyboard-config/meta b/packages/x11/data/xkeyboard-config/meta index 9a1650c110..a80818c4ef 100644 --- a/packages/x11/data/xkeyboard-config/meta +++ b/packages/x11/data/xkeyboard-config/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://people.freedesktop.org/~svu/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain xkbcomp" +PKG_BUILD_DEPENDS="toolchain util-macros xkbcomp" PKG_PRIORITY="optional" PKG_SECTION="x11/data" PKG_SHORTDESC="xkeyboard-config: X keyboard extension data files" PKG_LONGDESC="X keyboard extension data files." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 06bcdff6ef21afe635cba74e258b9d68e1ae5128 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:02:57 +0100 Subject: [PATCH 555/850] xf86-input-evdev: add autoreconf support Signed-off-by: Stephan Raue --- packages/x11/driver/xf86-input-evdev/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/driver/xf86-input-evdev/meta b/packages/x11/driver/xf86-input-evdev/meta index 399dcbb3fd..23a03cfcff 100644 --- a/packages/x11/driver/xf86-input-evdev/meta +++ b/packages/x11/driver/xf86-input-evdev/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/driver/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11/driver" PKG_SHORTDESC="xf86-input-evdev: Generic Xorg Linux input driver" PKG_LONGDESC="Evdev is an Xorg input driver for Linux's generic event devices. It therefore supports all input devices that the kernel knows about, including most mice and keyboards." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 111069da7a93dde344216d9045e15a1d28d021b6 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:02:57 +0100 Subject: [PATCH 556/850] xf86-input-synaptics: add autoreconf support Signed-off-by: Stephan Raue --- packages/x11/driver/xf86-input-synaptics/build | 2 -- packages/x11/driver/xf86-input-synaptics/meta | 4 +++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/x11/driver/xf86-input-synaptics/build b/packages/x11/driver/xf86-input-synaptics/build index e29cf5d511..e6935d9fff 100755 --- a/packages/x11/driver/xf86-input-synaptics/build +++ b/packages/x11/driver/xf86-input-synaptics/build @@ -3,8 +3,6 @@ . config/options $1 cd $PKG_BUILD - -$AUTORECONF ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ diff --git a/packages/x11/driver/xf86-input-synaptics/meta b/packages/x11/driver/xf86-input-synaptics/meta index 112154ddf2..983c0e8866 100644 --- a/packages/x11/driver/xf86-input-synaptics/meta +++ b/packages/x11/driver/xf86-input-synaptics/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xorg.freedesktop.org/archive/individual/driver/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="libXi" -PKG_BUILD_DEPENDS="toolchain libXi" +PKG_BUILD_DEPENDS="toolchain util-macros libXi" PKG_PRIORITY="optional" PKG_SECTION="x11/driver" PKG_SHORTDESC="xf86-input-synaptics: A (alternate) Synaptics touchpad X driver" PKG_LONGDESC="This package provides an (alternate) Synaptics touchpad driver." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 905f3297312ed15b82e4b56780e1fca041436960 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:02:57 +0100 Subject: [PATCH 557/850] xf86-input-wacom: add autoreconf support Signed-off-by: Stephan Raue --- packages/x11/driver/xf86-input-wacom/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/driver/xf86-input-wacom/meta b/packages/x11/driver/xf86-input-wacom/meta index 5fff5f5a16..774ad4ec98 100644 --- a/packages/x11/driver/xf86-input-wacom/meta +++ b/packages/x11/driver/xf86-input-wacom/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OpenSource" PKG_SITE="http://www.X.org" PKG_URL="http://freefr.dl.sourceforge.net/project/linuxwacom/xf86-input-wacom/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain util-macros" PKG_PRIORITY="optional" PKG_SECTION="x11" PKG_SHORTDESC="xf86-input-wacom: The Xorg wacom driver" PKG_LONGDESC="The Xorg wacomdriver for all sorts of common tablets." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From b04225e1dcfa2bac8f5b5b90ad21855345e0a7f9 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:02:57 +0100 Subject: [PATCH 558/850] xf86-video-ati: add autoreconf support Signed-off-by: Stephan Raue --- packages/x11/driver/xf86-video-ati/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/driver/xf86-video-ati/meta b/packages/x11/driver/xf86-video-ati/meta index b5d8af6883..c5248376b7 100644 --- a/packages/x11/driver/xf86-video-ati/meta +++ b/packages/x11/driver/xf86-video-ati/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.x.org/" PKG_URL="http://xorg.freedesktop.org/archive/individual/driver/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="libXrandr libXrender libXext libpciaccess libdrm udev" -PKG_BUILD_DEPENDS="toolchain util-macros libXrandr libXrender libXext libpciaccess libdrm udev xorg-server" +PKG_BUILD_DEPENDS="toolchain util-macros util-macros libXrandr libXrender libXext libpciaccess libdrm udev xorg-server" PKG_PRIORITY="optional" PKG_SECTION="x11/driver" PKG_SHORTDESC="xf86-video-ati: The Xorg driver for ATI video chips" PKG_LONGDESC="The ati driver supports various ATi, know AMD, video chips." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 341ea9d827235a62919b39127f5538b2ddf2da1e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:02:58 +0100 Subject: [PATCH 559/850] xf86-video-intel: add autoreconf support Signed-off-by: Stephan Raue --- packages/x11/driver/xf86-video-intel/build | 3 --- packages/x11/driver/xf86-video-intel/meta | 4 +++- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/x11/driver/xf86-video-intel/build b/packages/x11/driver/xf86-video-intel/build index 731a110ba4..dc9fbe5be0 100755 --- a/packages/x11/driver/xf86-video-intel/build +++ b/packages/x11/driver/xf86-video-intel/build @@ -8,9 +8,6 @@ PKG_CONFIG="$PKG_CONFIG --define-variable=sdkdir=$SYSROOT_PREFIX/usr/include/xor CFLAGS="$CFLAGS -I$SYSROOT_PREFIX/usr/include/xorg/" cd $PKG_BUILD - -$AUTORECONF - ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ diff --git a/packages/x11/driver/xf86-video-intel/meta b/packages/x11/driver/xf86-video-intel/meta index e8df3e23c9..13007ee2cb 100644 --- a/packages/x11/driver/xf86-video-intel/meta +++ b/packages/x11/driver/xf86-video-intel/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://intellinuxgraphics.org/" PKG_URL="http://xorg.freedesktop.org/archive/individual/driver/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="udev" -PKG_BUILD_DEPENDS="toolchain util-macros fontsproto udev xorg-server" +PKG_BUILD_DEPENDS="toolchain util-macros util-macros fontsproto udev xorg-server" PKG_PRIORITY="optional" PKG_SECTION="x11/driver" PKG_SHORTDESC="xf86-video-intel: The Xorg driver for Intel video chips" PKG_LONGDESC="The Xorg driver for Intel i810, i815, 830M, 845G, 852GM, 855GM, 865G, 915G, 915GM and 965G video chips." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 445e66354a1f1307216eb799120929642385378f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:02:58 +0100 Subject: [PATCH 560/850] xf86-video-nouveau: add autoreconf support Signed-off-by: Stephan Raue --- packages/x11/driver/xf86-video-nouveau/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/driver/xf86-video-nouveau/meta b/packages/x11/driver/xf86-video-nouveau/meta index 798c2d2a8f..619e85a946 100644 --- a/packages/x11/driver/xf86-video-nouveau/meta +++ b/packages/x11/driver/xf86-video-nouveau/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.x.org/" PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="libXrandr libXrender libdrm libXext libpciaccess udev Mesa" -PKG_BUILD_DEPENDS="toolchain libXrandr libXrender libdrm libXext libpciaccess udev Mesa xorg-server" +PKG_BUILD_DEPENDS="toolchain util-macros libXrandr libXrender libdrm libXext libpciaccess udev Mesa xorg-server" PKG_PRIORITY="optional" PKG_SECTION="x11/driver" PKG_SHORTDESC="xf86-video-nouveau: Nouveau display driver (experimental)" PKG_LONGDESC="This driver for the X.Org X server (see xserver-xorg for a further description) provides support for NVIDIA Riva, TNT, GeForce, and Quadro cards. Although the nouveau project aims to provide full 3D support it is not yet complete, and these packages do not include any 3D support. Users requiring 3D support should use the non-free "nvidia" driver." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 441bfdcd343354f6565b7f7c2640db4dd81cd201 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:02:58 +0100 Subject: [PATCH 561/850] xf86-video-nvidia: add autoreconf support Signed-off-by: Stephan Raue --- packages/x11/driver/xf86-video-nvidia/meta | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/x11/driver/xf86-video-nvidia/meta b/packages/x11/driver/xf86-video-nvidia/meta index 577eb827a5..a1551f42a5 100644 --- a/packages/x11/driver/xf86-video-nvidia/meta +++ b/packages/x11/driver/xf86-video-nvidia/meta @@ -7,10 +7,11 @@ PKG_SITE="http://www.nvidia.com/" [ $TARGET_ARCH = i386 ] && PKG_URL="ftp://download.nvidia.com/XFree86/Linux-x86/$PKG_VERSION/NVIDIA-Linux-x86-$PKG_VERSION.run" [ $TARGET_ARCH = x86_64 ] && PKG_URL="ftp://download.nvidia.com/XFree86/Linux-x86_64/$PKG_VERSION/NVIDIA-Linux-x86_64-$PKG_VERSION-no-compat32.run" PKG_DEPENDS="linux libXinerama" -PKG_BUILD_DEPENDS="toolchain linux xorg-server" +PKG_BUILD_DEPENDS="toolchain util-macros linux xorg-server" PKG_PRIORITY="optional" PKG_SECTION="x11/driver" PKG_SHORTDESC="xf86-video-nvidia: The Xorg driver for NVIDIA video chips" PKG_LONGDESC="These binary drivers provide optimized hardware acceleration of OpenGL applications via a direct-rendering X Server. AGP, PCIe, SLI, TV-out and flat panel displays are also supported. This version only supports GeForce 6xxx and higher of the Geforce GPUs plus complimentary Quadros and nforce." PKG_IS_ADDON="no" +PKG_AUTORECONF="no" From a930f41ff7755271bd86f7b1ef6b3c084bce6efb Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:03:27 +0100 Subject: [PATCH 562/850] fontconfig: add autoreconf support Signed-off-by: Stephan Raue --- packages/x11/other/fontconfig/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/x11/other/fontconfig/meta b/packages/x11/other/fontconfig/meta index f21ff503c5..7b05b9927d 100644 --- a/packages/x11/other/fontconfig/meta +++ b/packages/x11/other/fontconfig/meta @@ -6,9 +6,11 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.fontconfig.org" PKG_URL="http://fontconfig.org/release/$PKG_NAME-$PKG_VERSION.tar.gz" PKG_DEPENDS="freetype libxml2 zlib" -PKG_BUILD_DEPENDS="toolchain freetype libxml2 zlib" +PKG_BUILD_DEPENDS="toolchain util-macros freetype libxml2 zlib" PKG_PRIORITY="optional" PKG_SECTION="x11/other" PKG_SHORTDESC="fontconfig: A library for font customization and configuration" PKG_LONGDESC="Fontconfig is a library for font customization and configuration." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From b6a4765455bfd22815a91d90974b844ff721fedc Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:03:27 +0100 Subject: [PATCH 563/850] ratpoison: add autoreconf support Signed-off-by: Stephan Raue --- packages/x11/other/ratpoison/build | 2 -- packages/x11/other/ratpoison/meta | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/x11/other/ratpoison/build b/packages/x11/other/ratpoison/build index 97d695cbc0..0741a42efe 100755 --- a/packages/x11/other/ratpoison/build +++ b/packages/x11/other/ratpoison/build @@ -5,8 +5,6 @@ LDFLAGS="$LDFLAGS -fwhole-program" cd $PKG_BUILD - -$AUTORECONF ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ diff --git a/packages/x11/other/ratpoison/meta b/packages/x11/other/ratpoison/meta index 558a75d092..2b9273cf0b 100644 --- a/packages/x11/other/ratpoison/meta +++ b/packages/x11/other/ratpoison/meta @@ -6,11 +6,11 @@ PKG_LICENSE="GPL" PKG_SITE="http://www.nongnu.org/ratpoison" PKG_URL="http://mirror.lihnidos.org/GNU/savannah/ratpoison/$PKG_NAME-$PKG_VERSION.tar.gz" PKG_DEPENDS="libXft libICE libX11 libXext libXtst libXinerama liberation-fonts-ttf" -PKG_BUILD_DEPENDS="toolchain libXft libICE libX11 libXext libXtst libXinerama" +PKG_BUILD_DEPENDS="toolchain util-macros libXft libICE libX11 libXext libXtst libXinerama" PKG_PRIORITY="optional" PKG_SECTION="x11/other" PKG_SHORTDESC="ratpoison: A window manager that lets you say good-bye to the rodent" PKG_LONGDESC="Ratpoison is a simple window manager with no large library dependencies, no fancy graphics, no window decorations, and no rodent dependence. It is largely modeled after GNU Screen, which has done wonders in the virtual terminal market. All interaction with the window manager is done through keystrokes. Ratpoison has a prefix map to minimize the key clobbering that cripples EMACS and other quality pieces of software. All windows are maximized and kept maximized to avoid wasting precious screen space." PKG_IS_ADDON="no" - +PKG_AUTORECONF="yes" From 62796078f010c40ba056e6865101dafa3a40a6bd Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:03:42 +0100 Subject: [PATCH 564/850] util-macros: add autoreconf support Signed-off-by: Stephan Raue --- packages/x11/util/util-macros/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/x11/util/util-macros/meta b/packages/x11/util/util-macros/meta index 1e8ff5325a..b352f4ca5e 100644 --- a/packages/x11/util/util-macros/meta +++ b/packages/x11/util/util-macros/meta @@ -12,3 +12,5 @@ PKG_SECTION="x11/util" PKG_SHORTDESC="util-macros: X.org autoconf utilities" PKG_LONGDESC="X.org autoconf utilities such as M4 macros." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 06f71ec6c87b4d872fb8ddb353c24553f25bb946 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:04:08 +0100 Subject: [PATCH 565/850] xorg-server: add autoreconf support Signed-off-by: Stephan Raue --- packages/x11/xserver/xorg-server/build | 3 --- packages/x11/xserver/xorg-server/meta | 2 ++ 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/x11/xserver/xorg-server/build b/packages/x11/xserver/xorg-server/build index c1a79ae39d..477f3ba66d 100755 --- a/packages/x11/xserver/xorg-server/build +++ b/packages/x11/xserver/xorg-server/build @@ -13,9 +13,6 @@ else fi cd $PKG_BUILD - -$AUTORECONF - ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ diff --git a/packages/x11/xserver/xorg-server/meta b/packages/x11/xserver/xorg-server/meta index 58ec10854c..a638143e2a 100644 --- a/packages/x11/xserver/xorg-server/meta +++ b/packages/x11/xserver/xorg-server/meta @@ -13,6 +13,8 @@ PKG_SHORTDESC="xorg-server: The Xorg X server" PKG_LONGDESC="Xorg is a full featured X server that was originally designed for UNIX and UNIX-like operating systems running on Intel x86 hardware." PKG_IS_ADDON="no" +PKG_AUTORECONF="yes" + get_graphicdrivers if [ "$XINERAMA_SUPPORT" = "yes" ]; then PKG_DEPENDS="$PKG_DEPENDS libXinerama" From c986f8e205496ff9c87c4391494df727e78a0e3e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:01 +0100 Subject: [PATCH 566/850] crystalhd: add autoreconf support Signed-off-by: Stephan Raue --- packages/multimedia/crystalhd/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/multimedia/crystalhd/meta b/packages/multimedia/crystalhd/meta index 1396062053..88d031c921 100644 --- a/packages/multimedia/crystalhd/meta +++ b/packages/multimedia/crystalhd/meta @@ -12,3 +12,5 @@ PKG_SECTION="multimedia" PKG_SHORTDESC="crystalhd: OSX and Linux driver and library support for the Broadcom Crystal HD Video Accelerator." PKG_LONGDESC="OSX and Linux driver and library support for the Broadcom Crystal HD Video Accelerator. Supported under XBMC for Mac on the AppleTV and under 10.4 and 10.5 OSX platforms." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 42b63bd2f81ad01ab16086dcd0cf021372590728 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:01 +0100 Subject: [PATCH 567/850] libass: add autoreconf support Signed-off-by: Stephan Raue --- packages/multimedia/libass/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/multimedia/libass/meta b/packages/multimedia/libass/meta index 1d88540c6a..833dc5a125 100644 --- a/packages/multimedia/libass/meta +++ b/packages/multimedia/libass/meta @@ -12,3 +12,5 @@ PKG_SECTION="multimedia" PKG_SHORTDESC="libass: a portable subtitle renderer for the ASS/SSA (Advanced Substation Alpha/Substation Alpha) subtitle format." PKG_LONGDESC="libass is a portable subtitle renderer for the ASS/SSA (Advanced Substation Alpha/Substation Alpha) subtitle format. It is mostly compatible with VSFilter" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 3b4783b37573d0a29d29214061657fcd31b7271e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:02 +0100 Subject: [PATCH 568/850] libbluray: add autoreconf support Signed-off-by: Stephan Raue --- packages/multimedia/libbluray/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/multimedia/libbluray/meta b/packages/multimedia/libbluray/meta index ed999886e9..5e04af85b1 100644 --- a/packages/multimedia/libbluray/meta +++ b/packages/multimedia/libbluray/meta @@ -12,3 +12,5 @@ PKG_SECTION="multimedia" PKG_SHORTDESC="libbluray: A Blu-Ray Discs playback library" PKG_LONGDESC="libbluray is an open-source library designed for Blu-Ray Discs playback for media players, like VLC or MPlayer." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From d5848bd54a27b7d50749d73637c7bd08c9633d88 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:02 +0100 Subject: [PATCH 569/850] libmpeg2: add autoreconf support Signed-off-by: Stephan Raue --- packages/multimedia/libmpeg2/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/multimedia/libmpeg2/meta b/packages/multimedia/libmpeg2/meta index 1632bb06e5..0ec1a58a6b 100644 --- a/packages/multimedia/libmpeg2/meta +++ b/packages/multimedia/libmpeg2/meta @@ -12,3 +12,5 @@ PKG_SECTION="multimedia" PKG_SHORTDESC="libmpeg2: The MPEG Library - version 2" PKG_LONGDESC="The MPEG Library is a collection of C routines to decode MPEG-1 and MPEG-2 movies and dither them in a variety of colour schemes." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 2bf00b28545bd27f7c68e4a93cb9e1a7c7302586 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:02 +0100 Subject: [PATCH 570/850] libva: add autoreconf support Signed-off-by: Stephan Raue --- packages/multimedia/libva/build | 2 -- packages/multimedia/libva/meta | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/multimedia/libva/build b/packages/multimedia/libva/build index db1b796173..7db418d329 100755 --- a/packages/multimedia/libva/build +++ b/packages/multimedia/libva/build @@ -7,8 +7,6 @@ cd $BUILD/$PKG_NAME-* # apply patches provide with the source package cat debian/patches/*.patch | patch -p1 -$AUTORECONF - ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ diff --git a/packages/multimedia/libva/meta b/packages/multimedia/libva/meta index bdb5d4ea8b..d97f46387b 100644 --- a/packages/multimedia/libva/meta +++ b/packages/multimedia/libva/meta @@ -13,3 +13,4 @@ PKG_SHORTDESC="libva: The main motivation for VAAPI (Video Acceleration API) is PKG_LONGDESC="The main motivation for VAAPI (Video Acceleration API) is to enable hardware accelerated video decode/encode at various entry-points (VLD, IDCT, Motion Compensation etc.) for the prevailing coding standards today (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 AVC/H.264, and VC-1/VMW3). Extending XvMC was considered, but due to its original design for MPEG-2 MotionComp only, it made more sense to design an interface from scratch that can fully expose the video decode capabilities in today's GPUs." PKG_IS_ADDON="no" +PKG_AUTORECONF="yes" From b2ae5422d24e637a7c29b615efa4fd8cee697669 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:02 +0100 Subject: [PATCH 571/850] libvdpau: add autoreconf support Signed-off-by: Stephan Raue --- packages/multimedia/libvdpau/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/multimedia/libvdpau/meta b/packages/multimedia/libvdpau/meta index 16c37df127..3fdb44c405 100644 --- a/packages/multimedia/libvdpau/meta +++ b/packages/multimedia/libvdpau/meta @@ -13,6 +13,8 @@ PKG_SHORTDESC="libvdpau: a Video Decode and Presentation API for UNIX." PKG_LONGDESC="VDPAU is the Video Decode and Presentation API for UNIX. It provides an interface to video decode acceleration and presentation hardware present in modern GPUs." PKG_IS_ADDON="no" +PKG_AUTORECONF="yes" + if [ "$DEVTOOLS" = "yes" ]; then PKG_DEPENDS="$PKG_DEPENDS vdpauinfo" fi From 5f0b242d78c7f3604c960ed2624e4746a8373fb4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:02 +0100 Subject: [PATCH 572/850] openal-soft: add autoreconf support Signed-off-by: Stephan Raue --- packages/multimedia/openal-soft/meta | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/multimedia/openal-soft/meta b/packages/multimedia/openal-soft/meta index da80304a8e..d04199e42b 100644 --- a/packages/multimedia/openal-soft/meta +++ b/packages/multimedia/openal-soft/meta @@ -13,3 +13,4 @@ PKG_SHORTDESC="openal: Open Audio Library" PKG_LONGDESC="OpenAL, the Open Audio Library, is a joint effort to create an open, vendor- neutral, cross-platform API for interactive, primarily spatialized audio. OpenAL's primary audience are application developers and desktop users that rely on portable standards like OpenGL, for games and other multimedia applications. OpenAL is already supported by a number of hardware vendors and developers." PKG_IS_ADDON="no" +PKG_AUTORECONF="no" From e66a642f38a17d5e351852cc5efa65eded87868f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:02 +0100 Subject: [PATCH 573/850] rtmpdump: add autoreconf support Signed-off-by: Stephan Raue --- packages/multimedia/rtmpdump/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/multimedia/rtmpdump/meta b/packages/multimedia/rtmpdump/meta index 7b7845cf17..6c31b97270 100644 --- a/packages/multimedia/rtmpdump/meta +++ b/packages/multimedia/rtmpdump/meta @@ -12,3 +12,5 @@ PKG_SECTION="multimedia" PKG_SHORTDESC="rtmpdump: a toolkit for RTMP streams." PKG_LONGDESC="rtmpdump is a toolkit for RTMP streams. All forms of RTMP are supported, including rtmp://, rtmpt://, rtmpe://, rtmpte://, and rtmps://." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From ced7d15a53fc6b114c68dee54eeefd57fc70e1f1 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:03 +0100 Subject: [PATCH 574/850] SDL: add autoreconf support Signed-off-by: Stephan Raue --- packages/multimedia/SDL/build | 6 ++++++ packages/multimedia/SDL/meta | 1 + .../multimedia/SDL/patches/SDL-1.2.14-configure.patch | 11 +++++++++++ 3 files changed, 18 insertions(+) create mode 100644 packages/multimedia/SDL/patches/SDL-1.2.14-configure.patch diff --git a/packages/multimedia/SDL/build b/packages/multimedia/SDL/build index 5359544df7..287b086b9a 100755 --- a/packages/multimedia/SDL/build +++ b/packages/multimedia/SDL/build @@ -3,6 +3,12 @@ . config/options $1 cd $PKG_BUILD + +rm -f acinclude/alsa.m4 +# Skip autoheader because there is a problem with AC_DEFINE's in the configure.in of SDL 1.2.14. +# Added include directory 'acinclude' because SDL 1.2.14 has no Makefile.am in which to specify it. + AUTOHEADER="true" autoreconf --verbose --install --force -I $SYSROOT_PREFIX/usr/share/aclocal -I acinclude + ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ diff --git a/packages/multimedia/SDL/meta b/packages/multimedia/SDL/meta index 0214f7b0e5..13fcd74ec2 100644 --- a/packages/multimedia/SDL/meta +++ b/packages/multimedia/SDL/meta @@ -13,3 +13,4 @@ PKG_SHORTDESC="libsdl: A cross-platform Graphic API" PKG_LONGDESC="Simple DirectMedia Layer is a cross-platform multimedia library designed to provide fast access to the graphics framebuffer and audio device. It is used by MPEG playback software, emulators, and many popular games, including the award winning Linux port of 'Civilization: Call To Power.' Simple DirectMedia Layer supports Linux, Win32, BeOS, MacOS, Solaris, IRIX, and FreeBSD." PKG_IS_ADDON="no" +PKG_AUTORECONF="" diff --git a/packages/multimedia/SDL/patches/SDL-1.2.14-configure.patch b/packages/multimedia/SDL/patches/SDL-1.2.14-configure.patch new file mode 100644 index 0000000000..b6fdf484f5 --- /dev/null +++ b/packages/multimedia/SDL/patches/SDL-1.2.14-configure.patch @@ -0,0 +1,11 @@ +diff -Naur SDL-1.2.14-old/configure.in SDL-1.2.14-new/configure.in +--- SDL-1.2.14-old/configure.in 2009-10-17 10:35:03.000000000 -0700 ++++ SDL-1.2.14-new/configure.in 2010-08-17 16:42:33.000000000 -0700 +@@ -3,6 +3,7 @@ + AC_CONFIG_HEADER(include/SDL_config.h) + AC_GNU_SOURCE + AC_CONFIG_AUX_DIRS($srcdir/build-scripts) ++AC_CONFIG_MACRO_DIR([acinclude]) + + dnl Set various version strings - taken gratefully from the GTk sources + # From 603f57fdc64afd5ac9a63af89e3e40413bfd9a23 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:03 +0100 Subject: [PATCH 575/850] SDL_image: add autoreconf support Signed-off-by: Stephan Raue --- packages/multimedia/SDL_image/build | 6 ++++++ packages/multimedia/SDL_image/meta | 2 ++ 2 files changed, 8 insertions(+) diff --git a/packages/multimedia/SDL_image/build b/packages/multimedia/SDL_image/build index c277e2e018..4f670448cc 100755 --- a/packages/multimedia/SDL_image/build +++ b/packages/multimedia/SDL_image/build @@ -3,6 +3,11 @@ . config/options $1 cd $PKG_BUILD + +# create some files needed for autoreconf + touch NEWS AUTHORS ChangeLog + do_autoreconf + ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ @@ -25,6 +30,7 @@ cd $PKG_BUILD --enable-xcf \ --enable-xpm \ --enable-xv \ + --with-sdl-prefix=$SYSROOT_PREFIX/usr \ make diff --git a/packages/multimedia/SDL_image/meta b/packages/multimedia/SDL_image/meta index 9c8d37b6e8..128b81ab07 100644 --- a/packages/multimedia/SDL_image/meta +++ b/packages/multimedia/SDL_image/meta @@ -12,3 +12,5 @@ PKG_SECTION="multimedia" PKG_SHORTDESC="libsdl_image: A cross-platform Graphic API" PKG_LONGDESC="SDL_image is an image loading library that is used with the SDL library, and almost as portable. It allows a programmer to use multiple image formats without having to code all the loading and conversion algorithms themselves." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 72247eda660abad798da38747330c5d5e9bb70ca Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:03 +0100 Subject: [PATCH 576/850] SDL_mixer: add autoreconf support Signed-off-by: Stephan Raue --- packages/multimedia/SDL_mixer/build | 2 ++ packages/multimedia/SDL_mixer/meta | 2 ++ 2 files changed, 4 insertions(+) diff --git a/packages/multimedia/SDL_mixer/build b/packages/multimedia/SDL_mixer/build index 3e8620550c..d96fa478be 100755 --- a/packages/multimedia/SDL_mixer/build +++ b/packages/multimedia/SDL_mixer/build @@ -25,6 +25,8 @@ cd $PKG_BUILD --enable-music-mp3-shared \ --enable-music-mp3-mad-gpl \ --disable-smpegtest \ + --with-gnu-ld \ + --with-sdl-prefix=$SYSROOT_PREFIX/usr \ make diff --git a/packages/multimedia/SDL_mixer/meta b/packages/multimedia/SDL_mixer/meta index 55fd1e935d..3f0db82168 100644 --- a/packages/multimedia/SDL_mixer/meta +++ b/packages/multimedia/SDL_mixer/meta @@ -12,3 +12,5 @@ PKG_SECTION="multimedia" PKG_SHORTDESC="libsdl_mixer: Simple Directmedia Layer - Mixer" PKG_LONGDESC="SDL_mixer is a sound mixing library that is used with the SDL library, and almost as portable. It allows a programmer to use multiple samples along with music without having to code a mixing algorithm themselves. It also simplyfies the handling of loading and playing samples and music from all sorts of file formats." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 8dd42a2bb9e75a263250afc9bd1f73d3aa581807 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:03 +0100 Subject: [PATCH 577/850] SDL_net: add autoreconf support Signed-off-by: Stephan Raue --- packages/multimedia/SDL_net/build | 2 ++ packages/multimedia/SDL_net/meta | 2 ++ 2 files changed, 4 insertions(+) diff --git a/packages/multimedia/SDL_net/build b/packages/multimedia/SDL_net/build index 92a61340e5..12e8243036 100755 --- a/packages/multimedia/SDL_net/build +++ b/packages/multimedia/SDL_net/build @@ -3,6 +3,8 @@ . config/options $1 cd $PKG_BUILD + +touch NEWS AUTHORS ChangeLog && do_autoreconf ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ diff --git a/packages/multimedia/SDL_net/meta b/packages/multimedia/SDL_net/meta index 97a8ae597b..6b0a2f2a54 100644 --- a/packages/multimedia/SDL_net/meta +++ b/packages/multimedia/SDL_net/meta @@ -12,3 +12,5 @@ PKG_SECTION="multimedia" PKG_SHORTDESC="libsdl_net: A simple cross-platform network library" PKG_LONGDESC="SDL_net is a network library that is used with the SDL library, and almost as portable. It allows a programmer to use network functionality without having to code different things for different platforms. It also simplyfies the handling of network connections and data transfer." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 5533e9915261da96cfa36f34ea9de2466266d8a7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:03 +0100 Subject: [PATCH 578/850] SDL_ttf: add autoreconf support Signed-off-by: Stephan Raue --- packages/multimedia/SDL_ttf/build | 3 +++ packages/multimedia/SDL_ttf/meta | 2 ++ 2 files changed, 5 insertions(+) diff --git a/packages/multimedia/SDL_ttf/build b/packages/multimedia/SDL_ttf/build index 48ef600034..0f506d6b9d 100755 --- a/packages/multimedia/SDL_ttf/build +++ b/packages/multimedia/SDL_ttf/build @@ -3,6 +3,8 @@ . config/options $1 cd $PKG_BUILD + +touch NEWS AUTHORS ChangeLog && do_autoreconf ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ @@ -10,6 +12,7 @@ cd $PKG_BUILD --localstatedir=/var \ --enable-shared \ --disable-static \ + --with-sdl-prefix=$SYSROOT_PREFIX/usr \ make diff --git a/packages/multimedia/SDL_ttf/meta b/packages/multimedia/SDL_ttf/meta index 4fec61c3fd..45bc5b6eb0 100644 --- a/packages/multimedia/SDL_ttf/meta +++ b/packages/multimedia/SDL_ttf/meta @@ -12,3 +12,5 @@ PKG_SECTION="multimedia" PKG_SHORTDESC="libsdl_ttf: A library to use TrueType fonts in SDL applications" PKG_LONGDESC="This is a sample library which allows you to use TrueType fonts in your SDL applications. It comes with an example program 'showfont' which displays an example string for a given TrueType font file." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 58a3486d1e01ee1d7d49a6a7d273d2b871e636e4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:04 +0100 Subject: [PATCH 579/850] tvheadend: add autoreconf support Signed-off-by: Stephan Raue --- packages/multimedia/tvheadend/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/multimedia/tvheadend/meta b/packages/multimedia/tvheadend/meta index c64f26ddda..bdee0c62da 100644 --- a/packages/multimedia/tvheadend/meta +++ b/packages/multimedia/tvheadend/meta @@ -12,3 +12,5 @@ PKG_SECTION="multimedia" PKG_SHORTDESC="tvheadend: a TV streaming server for Linux supporting DVB-S, DVB-S2, DVB-C, DVB-T, ATSC, IPTV, and Analog video (V4L) as input sources." PKG_LONGDESC="Tvheadend is a TV streaming server for Linux supporting DVB-S, DVB-S2, DVB-C, DVB-T, ATSC, IPTV, and Analog video (V4L) as input sources. It also comes with a powerful and easy to use web interface both used for configuration and day-to-day operations, such as searching the EPG and scheduling recordings. Even so, the most notable feature of Tvheadend is how easy it is to set up: Install it, navigate to the web user interface, drill into the TV adapters tab, select your current location and Tvheadend will start scanning channels and present them to you in just a few minutes" PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 42243ac2f258b713b135912060d8bb096a3b8aa5 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:04 +0100 Subject: [PATCH 580/850] vdpauinfo: add autoreconf support Signed-off-by: Stephan Raue --- packages/multimedia/vdpauinfo/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/multimedia/vdpauinfo/meta b/packages/multimedia/vdpauinfo/meta index 18d68d564d..f96ea90a27 100644 --- a/packages/multimedia/vdpauinfo/meta +++ b/packages/multimedia/vdpauinfo/meta @@ -12,3 +12,5 @@ PKG_SECTION="debug" PKG_SHORTDESC="vdpauinfo: a tool to show vdpau infos " PKG_LONGDESC="VDPAU is the Video Decode and Presentation API for UNIX. It provides an interface to video decode acceleration and presentation hardware present in modern GPUs." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From ca62416efc995f86f00d7cd776dc2bd9e45c1cd2 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:26 +0100 Subject: [PATCH 581/850] autoupdate: add autoreconf support Signed-off-by: Stephan Raue --- packages/tools/autoupdate/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/tools/autoupdate/meta b/packages/tools/autoupdate/meta index ee38fd24dd..f81e498ceb 100644 --- a/packages/tools/autoupdate/meta +++ b/packages/tools/autoupdate/meta @@ -12,3 +12,5 @@ PKG_SECTION="tools" PKG_SHORTDESC="autoupdate: an simple automatic update script" PKG_LONGDESC="autoupdate: an simple automatic update script." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 91ef58161863313f24fae979201311bf694b2de2 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:26 +0100 Subject: [PATCH 582/850] bc: add autoreconf support Signed-off-by: Stephan Raue --- packages/tools/bc/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/tools/bc/meta b/packages/tools/bc/meta index a90ed344c8..8c5cf03e9e 100644 --- a/packages/tools/bc/meta +++ b/packages/tools/bc/meta @@ -12,3 +12,5 @@ PKG_SECTION="tools" PKG_SHORTDESC="bc: GNU's numeric processing language and a calculator" PKG_LONGDESC="Bc is an arbitrary precision numeric processing language. Syntax is similar to C, but differs in many substantial areas. It supports interactive execution of statements. Bc is a utility included in the POSIX P1003.2/D11 draft standard. Since the POSIX document does not specify how bc must be implemented, this version does not use the historical method of having bc be a compiler for the dc calculator. This version has a single executable that both compiles the language and runs the resulting 'byte code'. The byte code is not the dc language." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From cf9b7de27e3a7a0e26fb400d567307a784ea49f9 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:26 +0100 Subject: [PATCH 583/850] dialog: add autoreconf support Signed-off-by: Stephan Raue --- packages/tools/dialog/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/tools/dialog/meta b/packages/tools/dialog/meta index f435cb2b3c..7b8aab144c 100644 --- a/packages/tools/dialog/meta +++ b/packages/tools/dialog/meta @@ -12,3 +12,5 @@ PKG_SECTION="tools" PKG_SHORTDESC="dialog: A utility for creating TTY dialog boxes" PKG_LONGDESC="Dialog is a utility that allows you to show dialog boxes (containing questions or messages) in TTY (text mode) interfaces from shell scripts. Dialog is initally written by Savio Lam and various branches do exist (e.g. lxdialog which is used for a linux kernel make menuconfig). This is the branch maintained by Thomas Dickey." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 43cfb694c78adab0380788abe473db904cc0fed0 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:26 +0100 Subject: [PATCH 584/850] e2fsprogs: add autoreconf support Signed-off-by: Stephan Raue --- packages/tools/e2fsprogs/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/tools/e2fsprogs/meta b/packages/tools/e2fsprogs/meta index 1f7e64be27..6dc574cb64 100644 --- a/packages/tools/e2fsprogs/meta +++ b/packages/tools/e2fsprogs/meta @@ -12,3 +12,5 @@ PKG_SECTION="tools" PKG_SHORTDESC="e2fsprogs: Utilities for use with the ext2 filesystem" PKG_LONGDESC="The filesystem utilities for the EXT2 filesystem, including e2fsck, mke2fs, dumpe2fs, fsck, and others." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From d18d4c081856682bd0afc318f69cb0782ab516fd Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:27 +0100 Subject: [PATCH 585/850] flashrom: add autoreconf support Signed-off-by: Stephan Raue --- packages/tools/flashrom/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/tools/flashrom/meta b/packages/tools/flashrom/meta index 20899a8f79..0bcb05e2ed 100644 --- a/packages/tools/flashrom/meta +++ b/packages/tools/flashrom/meta @@ -12,3 +12,5 @@ PKG_SECTION="tools" PKG_SHORTDESC="flashrom: linux BIOS programmer" PKG_LONGDESC="flashrom is a utility for identifying, reading, writing, verifying and erasing flash chips. It is designed to flash BIOS/EFI/coreboot/firmware/optionROM images on mainboards, network/graphics/storage controller cards, and various programmer devices." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 941811b661e037fbbaf70c2465d4ae865ce75d44 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:27 +0100 Subject: [PATCH 586/850] hdparm: add autoreconf support Signed-off-by: Stephan Raue --- packages/tools/hdparm/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/tools/hdparm/meta b/packages/tools/hdparm/meta index 24a3746977..c34e8180a7 100644 --- a/packages/tools/hdparm/meta +++ b/packages/tools/hdparm/meta @@ -12,3 +12,5 @@ PKG_SECTION="tools" PKG_SHORTDESC="hdparm: Get/set hard disk parameters" PKG_LONGDESC="Shell utility to access/tune ioctl features of the Linux IDE driver and IDE drives." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 6b9bcf1513866540ad30f7df7f6073bde0506409 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:27 +0100 Subject: [PATCH 587/850] installer: add autoreconf support Signed-off-by: Stephan Raue --- packages/tools/installer/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/tools/installer/meta b/packages/tools/installer/meta index 15054c2c8b..f8be4cb96a 100644 --- a/packages/tools/installer/meta +++ b/packages/tools/installer/meta @@ -13,4 +13,4 @@ PKG_SHORTDESC="installer: OpenELEC.tv Install manager" PKG_LONGDESC="OpenELEC.tv Install manager to install the system on any disk" PKG_IS_ADDON="no" - +PKG_AUTORECONF="no" From 609afa09528524507fc94e8eafe7edaeb6b3d9e0 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:27 +0100 Subject: [PATCH 588/850] syslinux: add autoreconf support Signed-off-by: Stephan Raue --- packages/tools/syslinux/arch | 2 -- packages/tools/syslinux/meta | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 packages/tools/syslinux/arch diff --git a/packages/tools/syslinux/arch b/packages/tools/syslinux/arch deleted file mode 100644 index 7414689203..0000000000 --- a/packages/tools/syslinux/arch +++ /dev/null @@ -1,2 +0,0 @@ -i386 -x86_64 diff --git a/packages/tools/syslinux/meta b/packages/tools/syslinux/meta index cb4e4619c4..3f66037aa1 100644 --- a/packages/tools/syslinux/meta +++ b/packages/tools/syslinux/meta @@ -12,3 +12,5 @@ PKG_SECTION="tools" PKG_SHORTDESC="syslinux: Linux bootloader collection" PKG_LONGDESC="The SYSLINUX project covers lightweight linux bootloaders for floppy media (syslinux), network booting (pxelinux) and bootable el-torito cd-roms (isolinux)." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From b169effe23eed0ef73a6054152d1a6e6fc0e3ef4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:34 +0100 Subject: [PATCH 589/850] curl: add autoreconf support Signed-off-by: Stephan Raue --- packages/web/curl/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/web/curl/meta b/packages/web/curl/meta index 58d3af0752..cf29701aef 100644 --- a/packages/web/curl/meta +++ b/packages/web/curl/meta @@ -12,3 +12,5 @@ PKG_SECTION="web" PKG_SHORTDESC="curl: Client and library for (HTTP, HTTPS, FTP, ...) transfers" PKG_LONGDESC="Curl is a client to get documents/files from or send documents to a server, using any of the supported protocols (HTTP, HTTPS, FTP, FTPS, GOPHER, DICT, TELNET, LDAP or FILE). The command is designed to work without user interaction or any kind of interactivity." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 1c9f886a828f55c00453b8a2c6abd84d9291dddb Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:34 +0100 Subject: [PATCH 590/850] libmicrohttpd: add autoreconf support Signed-off-by: Stephan Raue --- packages/web/libmicrohttpd/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/web/libmicrohttpd/meta b/packages/web/libmicrohttpd/meta index be8eb0a7c6..fedac78c27 100644 --- a/packages/web/libmicrohttpd/meta +++ b/packages/web/libmicrohttpd/meta @@ -12,3 +12,5 @@ PKG_SECTION="web" PKG_SHORTDESC="libmicrohttpd: a small webserver C library" PKG_LONGDESC="GNU libmicrohttpd is a small C library that is supposed to make it easy to run an HTTP server as part of another application." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 7a5c51e1f546d6fac42bdcddfa98152cfd243e76 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:34 +0100 Subject: [PATCH 591/850] wget: add autoreconf support Signed-off-by: Stephan Raue --- packages/web/wget/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/web/wget/meta b/packages/web/wget/meta index 47b16a75c9..50f761e9ae 100644 --- a/packages/web/wget/meta +++ b/packages/web/wget/meta @@ -12,3 +12,5 @@ PKG_SECTION="web" PKG_SHORTDESC="wget: A non-interactive network retriever" PKG_LONGDESC="GNU Wget is a free network utility to retrieve files from the World Wide Web using HTTP and FTP, the two most widely used Internet protocols. It works non-interactively, thus enabling work in the background, after having logged off. The recursive retrieval of HTML pages, as well as FTP sites is supported -- you can use Wget to make mirrors of archives and home pages, or traverse the web like a WWW robot (Wget understands /robots.txt)." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 35225b52aba0548f78306ce2e0bfbe9bc8563bac Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:54 +0100 Subject: [PATCH 592/850] expat: add autoreconf support Signed-off-by: Stephan Raue --- packages/textproc/expat/build | 4 +++- packages/textproc/expat/meta | 2 ++ .../expat/patches/expat-2.0.1-configure.patch | 21 +++++++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 packages/textproc/expat/patches/expat-2.0.1-configure.patch diff --git a/packages/textproc/expat/build b/packages/textproc/expat/build index a58bbb0a50..cdefacd081 100755 --- a/packages/textproc/expat/build +++ b/packages/textproc/expat/build @@ -3,8 +3,10 @@ . config/options $1 cd $PKG_BUILD -mkdir -p .build-target && cd .build-target +do_autoreconf -I conftools + +mkdir -p .build-target && cd .build-target ../configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ diff --git a/packages/textproc/expat/meta b/packages/textproc/expat/meta index 0ff604b8d6..db86db551e 100644 --- a/packages/textproc/expat/meta +++ b/packages/textproc/expat/meta @@ -12,3 +12,5 @@ PKG_SECTION="textproc" PKG_SHORTDESC="expat: XML parser library" PKG_LONGDESC="Expat is an XML parser library written in C. It is a stream-oriented parser in which an application registers handlers for things the parser might find in the XML document (like start tags). An introductory article on using Expat is available on xml.com." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" diff --git a/packages/textproc/expat/patches/expat-2.0.1-configure.patch b/packages/textproc/expat/patches/expat-2.0.1-configure.patch new file mode 100644 index 0000000000..0f92407a8e --- /dev/null +++ b/packages/textproc/expat/patches/expat-2.0.1-configure.patch @@ -0,0 +1,21 @@ +diff -Naur expat-2.0.1-old/configure.in expat-2.0.1-new/configure.in +--- expat-2.0.1-old/configure.in 2007-05-09 06:26:48.000000000 -0700 ++++ expat-2.0.1-new/configure.in 2010-08-17 13:12:17.000000000 -0700 +@@ -31,6 +31,7 @@ + + AC_CONFIG_SRCDIR(Makefile.in) + AC_CONFIG_AUX_DIR(conftools) ++AC_CONFIG_MACRO_DIR([conftools]) + + + dnl +@@ -50,9 +51,6 @@ + + AC_CONFIG_HEADER(expat_config.h) + +-sinclude(conftools/libtool.m4) +-sinclude(conftools/ac_c_bigendian_cross.m4) +- + AC_LIBTOOL_WIN32_DLL + AC_PROG_LIBTOOL + From 51278a3e5d1ec042f09eb027ddd9df9ade4af6d7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:55 +0100 Subject: [PATCH 593/850] expat-host: add autoreconf support Signed-off-by: Stephan Raue --- packages/textproc/expat-host/build | 3 ++- packages/textproc/expat-host/meta | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/textproc/expat-host/build b/packages/textproc/expat-host/build index d152a0018c..a3ef8f8563 100755 --- a/packages/textproc/expat-host/build +++ b/packages/textproc/expat-host/build @@ -7,8 +7,9 @@ $SCRIPTS/unpack expat setup_toolchain host cd $BUILD/expat-* -mkdir -p .build-host && cd .build-host +do_autoreconf -I conftools +mkdir -p .build-host && cd .build-host ../configure --prefix=$ROOT/$TOOLCHAIN \ --enable-shared \ --disable-static \ diff --git a/packages/textproc/expat-host/meta b/packages/textproc/expat-host/meta index 5460c1c7dd..dfa064ba5f 100644 --- a/packages/textproc/expat-host/meta +++ b/packages/textproc/expat-host/meta @@ -12,3 +12,5 @@ PKG_SECTION="textproc" PKG_SHORTDESC="expat: XML parser library" PKG_LONGDESC="Expat is an XML parser library written in C. It is a stream-oriented parser in which an application registers handlers for things the parser might find in the XML document (like start tags). An introductory article on using Expat is available on xml.com." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From c8cbfb24370631fd7f6dd63a2c6557f44f9a18bd Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:55 +0100 Subject: [PATCH 594/850] libxml2: add autoreconf support Signed-off-by: Stephan Raue --- packages/textproc/libxml2/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/textproc/libxml2/meta b/packages/textproc/libxml2/meta index 14cc6eb076..c4ce32d021 100644 --- a/packages/textproc/libxml2/meta +++ b/packages/textproc/libxml2/meta @@ -12,3 +12,5 @@ PKG_SECTION="textproc" PKG_SHORTDESC="libxml: XML parser library for Gnome" PKG_LONGDESC="The libxml package contains an XML library, which allows you to manipulate XML files. XML (eXtensible Markup Language) is a data format for structured document interchange via the Web." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From c79612edee817421e2e204645641308aa2355c05 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:55 +0100 Subject: [PATCH 595/850] libxml2-host: add autoreconf support Signed-off-by: Stephan Raue --- packages/textproc/libxml2-host/build | 4 ++-- packages/textproc/libxml2-host/meta | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/textproc/libxml2-host/build b/packages/textproc/libxml2-host/build index 3dc60cc313..8746bc842d 100755 --- a/packages/textproc/libxml2-host/build +++ b/packages/textproc/libxml2-host/build @@ -7,9 +7,9 @@ $SCRIPTS/unpack libxml2 setup_toolchain host cd $BUILD/libxml2-* -mkdir -p .build-host -cd .build-host +do_autoreconf +mkdir -p .build-host && cd .build-host ../configure --prefix=$ROOT/$TOOLCHAIN \ --disable-ipv6 \ --with-python \ diff --git a/packages/textproc/libxml2-host/meta b/packages/textproc/libxml2-host/meta index 5c00a09442..2affe1cc3e 100644 --- a/packages/textproc/libxml2-host/meta +++ b/packages/textproc/libxml2-host/meta @@ -12,3 +12,5 @@ PKG_SECTION="textproc" PKG_SHORTDESC="libxml: XML parser library for Gnome" PKG_LONGDESC="The libxml package contains an XML library, which allows you to manipulate XML files. XML (eXtensible Markup Language) is a data format for structured document interchange via the Web." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 9e4f270e160187579c665be0519713b6675e96a6 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:05:55 +0100 Subject: [PATCH 596/850] xerces-c: add autoreconf support Signed-off-by: Stephan Raue --- packages/textproc/xerces-c/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/textproc/xerces-c/meta b/packages/textproc/xerces-c/meta index 8733b5c1e9..ee24c254e2 100644 --- a/packages/textproc/xerces-c/meta +++ b/packages/textproc/xerces-c/meta @@ -12,3 +12,5 @@ PKG_SECTION="textproc" PKG_SHORTDESC="xerces-c: A C++ XML parser" PKG_LONGDESC="Xerces C++ is a validating XML parser written in a portable subset of C++. It makes it easy to give your application the ability to read and write XML data. A shared library is provided for parsing, generating, manipulating, and validating XML documents. It is faithful to the XML 1. 0 recommendation and associated standards ( DOM 1. 0, DOM 2. 0. SAX 1. 0, SAX 2. 0, Namespaces). It also provides an implementation of a subset of the Schema." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 7c1b122a82b91e988a983623dcf76a6afba46a23 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:06:14 +0100 Subject: [PATCH 597/850] enca: add autoreconf support Signed-off-by: Stephan Raue --- packages/other/enca/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/other/enca/meta b/packages/other/enca/meta index e4d41d5bfe..b300bc7911 100644 --- a/packages/other/enca/meta +++ b/packages/other/enca/meta @@ -6,9 +6,11 @@ PKG_LICENSE="GPL" PKG_SITE="http://freshmeat.net/projects/enca/" PKG_URL="http://dl.cihar.com/enca/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain libiconv" PKG_PRIORITY="optional" PKG_SECTION="other" PKG_SHORTDESC="enca: detects the encoding of text files, on the basis of knowledge of their language." PKG_LONGDESC="Enca detects the encoding of text files, on the basis of knowledge of their language. It can also convert them to other encodings, allowing you to recode files without knowing their current encoding. It supports most of Central and East European languages, and a few Unicode variants, independently on language." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 34ae29bd1f8124fc0bf7768262e77290b34e2d60 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:06:15 +0100 Subject: [PATCH 598/850] fribidi: add autoreconf support Signed-off-by: Stephan Raue --- packages/other/fribidi/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/other/fribidi/meta b/packages/other/fribidi/meta index d8c3928661..03270c8810 100644 --- a/packages/other/fribidi/meta +++ b/packages/other/fribidi/meta @@ -12,3 +12,5 @@ PKG_SECTION="other" PKG_SHORTDESC="fribidi: The Bidirectional Algorithm library" PKG_LONGDESC="The library implements all of the algorithm as described in the Unicode Standard Annex #9, The Bidirectional Algorithm, http://www.unicode.org/unicode/reports/tr9/. FriBidi is exhautively tested against Bidi Reference Code, and due to our best knowledge, does not contain any conformance bugs." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 4e804bbc69a869b1e96e76ec63a84fe3a8eabcf6 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:06:15 +0100 Subject: [PATCH 599/850] libdaemon: add autoreconf support Signed-off-by: Stephan Raue --- packages/other/libdaemon/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/other/libdaemon/meta b/packages/other/libdaemon/meta index 2099fbc160..cf6cde368f 100644 --- a/packages/other/libdaemon/meta +++ b/packages/other/libdaemon/meta @@ -12,3 +12,5 @@ PKG_SECTION="other" PKG_SHORTDESC="libdaemon: A lightweight C library which eases the writing of UNIX daemons" PKG_LONGDESC="A wrapper around fork() which does the correct daemonization procedure of a process. A wrapper around syslog() for simpler and compatible log output to Syslog or STDERR. An API for writing PID files. An API for serializing UNIX signals into a pipe for usage with select() or poll()." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 019aa40be6fea33aae3e0ceb6721ce5730c5ac0e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:06:15 +0100 Subject: [PATCH 600/850] libIDL: add autoreconf support Signed-off-by: Stephan Raue --- packages/other/libIDL/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/other/libIDL/meta b/packages/other/libIDL/meta index 02c6e576ce..d2acad1a0a 100644 --- a/packages/other/libIDL/meta +++ b/packages/other/libIDL/meta @@ -12,3 +12,5 @@ PKG_SECTION="other" PKG_SHORTDESC="libidl: Library for creating trees of CORBA IDL files" PKG_LONGDESC="libIDL is a library for creating trees of CORBA Interface Definition Language (IDL) files." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 812eba789e05b2fb94ffcc754f7b121b15157615 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:06:15 +0100 Subject: [PATCH 601/850] libIDL-host: add autoreconf support Signed-off-by: Stephan Raue --- packages/other/libIDL-host/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/other/libIDL-host/meta b/packages/other/libIDL-host/meta index 6f6618f1c8..302adf4b65 100644 --- a/packages/other/libIDL-host/meta +++ b/packages/other/libIDL-host/meta @@ -12,3 +12,5 @@ PKG_SECTION="other" PKG_SHORTDESC="libidl: Library for creating trees of CORBA IDL files" PKG_LONGDESC="libIDL is a library for creating trees of CORBA Interface Definition Language (IDL) files." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From b8534b33fcb16cb0ad1c74cfee0f99a0c4ab0297 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:06:22 +0100 Subject: [PATCH 602/850] freetype: add autoreconf support Signed-off-by: Stephan Raue --- packages/print/freetype/build | 2 ++ packages/print/freetype/meta | 2 ++ 2 files changed, 4 insertions(+) diff --git a/packages/print/freetype/build b/packages/print/freetype/build index 2ca080c1c3..25aeddcef7 100755 --- a/packages/print/freetype/build +++ b/packages/print/freetype/build @@ -6,6 +6,8 @@ unset LIBTOOL cd $PKG_BUILD + +sh autogen.sh ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ diff --git a/packages/print/freetype/meta b/packages/print/freetype/meta index c698a331dc..d4a6a3b82d 100644 --- a/packages/print/freetype/meta +++ b/packages/print/freetype/meta @@ -12,3 +12,5 @@ PKG_SECTION="print" PKG_SHORTDESC="freetype: TrueType font rendering library" PKG_LONGDESC="The FreeType engine is a free and portable TrueType font rendering engine. It has been developed to provide TT support to a great variety of platforms and environments." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 1b0ea0c21ca94bd23f0f1cd54b95b04ba8d7c182 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:06:46 +0100 Subject: [PATCH 603/850] ipw2100-fw: add autoreconf support Signed-off-by: Stephan Raue --- packages/linux-firmware/ipw2100-fw/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/linux-firmware/ipw2100-fw/meta b/packages/linux-firmware/ipw2100-fw/meta index 279d383f05..de1a430f96 100644 --- a/packages/linux-firmware/ipw2100-fw/meta +++ b/packages/linux-firmware/ipw2100-fw/meta @@ -12,3 +12,5 @@ PKG_SECTION="linux-firmware" PKG_SHORTDESC="ipw2100-fw: Intel PRO/Wireless 2100 Driver for Linux" PKG_LONGDESC="This project was created by Intel to enable support for the Intel PRO/Wireless 2100 Network Connection mini PCI adapter. This project (IPW2100) is intended to be a community effort as much as is possible given some working constraints (mainly, no HW documentation is available)." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 65897ec5dadc9f46db1de1628533206b5ab37fac Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:06:46 +0100 Subject: [PATCH 604/850] ipw2200-fw: add autoreconf support Signed-off-by: Stephan Raue --- packages/linux-firmware/ipw2200-fw/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/linux-firmware/ipw2200-fw/meta b/packages/linux-firmware/ipw2200-fw/meta index 027a407e5d..dce07f34c3 100644 --- a/packages/linux-firmware/ipw2200-fw/meta +++ b/packages/linux-firmware/ipw2200-fw/meta @@ -12,3 +12,5 @@ PKG_SECTION="linux-firmware" PKG_SHORTDESC="ipw2200-fw: Intel PRO/Wireless 2200 Driver for Linux" PKG_LONGDESC="This project was created by Intel to enable support for the Intel PRO/Wireless 2200 Network Connection mini PCI adapter. This project (IPW2200) is intended to be a community effort as much as is possible given some working constraints (mainly, no HW documentation is available)." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From f36fa24e82e8a5793d6048d1672d2d05eafb3720 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:06:46 +0100 Subject: [PATCH 605/850] iwlwifi-1000-ucode: add autoreconf support Signed-off-by: Stephan Raue --- packages/linux-firmware/iwlwifi-1000-ucode/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/linux-firmware/iwlwifi-1000-ucode/meta b/packages/linux-firmware/iwlwifi-1000-ucode/meta index dcc0d7bca3..62c9a1ca38 100644 --- a/packages/linux-firmware/iwlwifi-1000-ucode/meta +++ b/packages/linux-firmware/iwlwifi-1000-ucode/meta @@ -12,3 +12,5 @@ PKG_SECTION="linux-firmware" PKG_SHORTDESC="iwlwifi-1000-ucode: Intel PRO/Wireless 1000 Driver for Linux" PKG_LONGDESC="This project was created by Intel to enable support for the Intel PRO/Wireless 1000 Network Connection mini PCI adapter. This project (iwl1000) is intended to be a community effort as much as is possible given some working constraints (mainly, no HW documentation is available)." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From de28a2aca96157b31c084441168b3893c0394546 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:06:46 +0100 Subject: [PATCH 606/850] iwlwifi-3945-ucode: add autoreconf support Signed-off-by: Stephan Raue --- packages/linux-firmware/iwlwifi-3945-ucode/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/linux-firmware/iwlwifi-3945-ucode/meta b/packages/linux-firmware/iwlwifi-3945-ucode/meta index fb8aa51e6d..090da1f98a 100644 --- a/packages/linux-firmware/iwlwifi-3945-ucode/meta +++ b/packages/linux-firmware/iwlwifi-3945-ucode/meta @@ -12,3 +12,5 @@ PKG_SECTION="linux-firmware" PKG_SHORTDESC="iwlwifi-3945-ucode: Intel PRO/Wireless 3945 Driver for Linux" PKG_LONGDESC="This project was created by Intel to enable support for the Intel PRO/Wireless 3945 Network Connection mini PCI adapter. This project (iwl3945) is intended to be a community effort as much as is possible given some working constraints (mainly, no HW documentation is available)." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 7adcc154d8069ecd9517d2113264da98d4d3ee26 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:06:47 +0100 Subject: [PATCH 607/850] iwlwifi-4965-ucode: add autoreconf support Signed-off-by: Stephan Raue --- packages/linux-firmware/iwlwifi-4965-ucode/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/linux-firmware/iwlwifi-4965-ucode/meta b/packages/linux-firmware/iwlwifi-4965-ucode/meta index 59fa27aa8f..ba4bb1b266 100644 --- a/packages/linux-firmware/iwlwifi-4965-ucode/meta +++ b/packages/linux-firmware/iwlwifi-4965-ucode/meta @@ -12,3 +12,5 @@ PKG_SECTION="linux-firmware" PKG_SHORTDESC="iwlwifi-4965-ucode: Intel PRO/Wireless 4965 Driver for Linux" PKG_LONGDESC="This project was created by Intel to enable support for the Intel PRO/Wireless 4965 Network Connection mini PCI adapter. This project (iwl4965) is intended to be a community effort as much as is possible given some working constraints (mainly, no HW documentation is available)." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 0df568dc603d28c32c09351a51ea935d71415f93 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:06:47 +0100 Subject: [PATCH 608/850] iwlwifi-5000-ucode: add autoreconf support Signed-off-by: Stephan Raue --- packages/linux-firmware/iwlwifi-5000-ucode/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/linux-firmware/iwlwifi-5000-ucode/meta b/packages/linux-firmware/iwlwifi-5000-ucode/meta index d966ba5e7e..c3c827e3f7 100644 --- a/packages/linux-firmware/iwlwifi-5000-ucode/meta +++ b/packages/linux-firmware/iwlwifi-5000-ucode/meta @@ -12,3 +12,5 @@ PKG_SECTION="linux-firmware" PKG_SHORTDESC="iwlwifi-5000-ucode: Intel PRO/Wireless 5000 Driver for Linux" PKG_LONGDESC="This project was created by Intel to enable support for the Intel PRO/Wireless 5000 Network Connection mini PCI adapter. This project (iwl5000) is intended to be a community effort as much as is possible given some working constraints (mainly, no HW documentation is available)." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From f0841f6ba113ab3b728ad6dbeacd10232243a1da Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:06:47 +0100 Subject: [PATCH 609/850] iwlwifi-5150-ucode: add autoreconf support Signed-off-by: Stephan Raue --- packages/linux-firmware/iwlwifi-5150-ucode/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/linux-firmware/iwlwifi-5150-ucode/meta b/packages/linux-firmware/iwlwifi-5150-ucode/meta index bdd8deea5f..9702b99003 100644 --- a/packages/linux-firmware/iwlwifi-5150-ucode/meta +++ b/packages/linux-firmware/iwlwifi-5150-ucode/meta @@ -12,3 +12,5 @@ PKG_SECTION="linux-firmware" PKG_SHORTDESC="iwlwifi-5150-ucode: Intel PRO/Wireless 5150 Driver for Linux" PKG_LONGDESC="This project was created by Intel to enable support for the Intel PRO/Wireless 5150 Network Connection mini PCI adapter. This project (iwl5150) is intended to be a community effort as much as is possible given some working constraints (mainly, no HW documentation is available)." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From f6b01861882c707a0e0bf9daf225ebb018bfb885 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:06:47 +0100 Subject: [PATCH 610/850] iwlwifi-6000-ucode: add autoreconf support Signed-off-by: Stephan Raue --- packages/linux-firmware/iwlwifi-6000-ucode/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/linux-firmware/iwlwifi-6000-ucode/meta b/packages/linux-firmware/iwlwifi-6000-ucode/meta index 99f6f3a0d0..11721d05da 100644 --- a/packages/linux-firmware/iwlwifi-6000-ucode/meta +++ b/packages/linux-firmware/iwlwifi-6000-ucode/meta @@ -12,3 +12,5 @@ PKG_SECTION="linux-firmware" PKG_SHORTDESC="iwlwifi-6000-ucode: Intel PRO/Wireless 6000 Driver for Linux" PKG_LONGDESC="This project was created by Intel to enable support for the Intel PRO/Wireless 6000 Network Connection mini PCI adapter. This project (iwl6000) is intended to be a community effort as much as is possible given some working constraints (mainly, no HW documentation is available)." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 96c3aaf1f98e31d830abf741fdd223d75a6b6277 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:06:47 +0100 Subject: [PATCH 611/850] iwlwifi-6050-ucode: add autoreconf support Signed-off-by: Stephan Raue --- packages/linux-firmware/iwlwifi-6050-ucode/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/linux-firmware/iwlwifi-6050-ucode/meta b/packages/linux-firmware/iwlwifi-6050-ucode/meta index d7bbd3fb68..f7010b38d0 100644 --- a/packages/linux-firmware/iwlwifi-6050-ucode/meta +++ b/packages/linux-firmware/iwlwifi-6050-ucode/meta @@ -12,3 +12,5 @@ PKG_SECTION="linux-firmware" PKG_SHORTDESC="iwlwifi-6050-ucode: Intel PRO/Wireless 6050 Driver for Linux" PKG_LONGDESC="This project was created by Intel to enable support for the Intel PRO/Wireless 6050 Network Connection mini PCI adapter. This project (iwl6050) is intended to be a community effort as much as is possible given some working constraints (mainly, no HW documentation is available)." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From a26d78ce959b1631bb92836abd9fc178dd35f7a4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:06:48 +0100 Subject: [PATCH 612/850] meta: add autoreconf support Signed-off-by: Stephan Raue --- packages/linux-firmware/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/linux-firmware/meta b/packages/linux-firmware/meta index 81ae92c72f..8b01654177 100644 --- a/packages/linux-firmware/meta +++ b/packages/linux-firmware/meta @@ -13,6 +13,8 @@ PKG_SHORTDESC="linux-firmware: Meta package to install firmware drivers" PKG_LONGDESC="linux-firmware is a Meta package to install firmware drivers" PKG_IS_ADDON="no" +PKG_AUTORECONF="no" + for firmware in "$FIRMWARE"; do case $firmware in ipw2100) PKG_DEPENDS="$PKG_DEPENDS ipw2100-fw" From 6436b1f5c61452b52a554c40677f5d80dcf75d7d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:07:35 +0100 Subject: [PATCH 613/850] cairo: add autoreconf support Signed-off-by: Stephan Raue --- packages/graphics/cairo/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/graphics/cairo/meta b/packages/graphics/cairo/meta index 8b75444419..b06188565a 100644 --- a/packages/graphics/cairo/meta +++ b/packages/graphics/cairo/meta @@ -12,3 +12,5 @@ PKG_SECTION="graphics" PKG_SHORTDESC="cairo: Multi-platform 2D graphics library" PKG_LONGDESC="Cairo is a vector graphics library with cross-device output support. Currently supported output targets include the X Window System and in-memory image buffers. PostScript and PDF file output is planned. Cairo is designed to produce identical output on all output media while taking advantage of display hardware acceleration when available." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" # ToDo From 658d18bf0458b594d6ad5f6e6ea9f0c0573f133a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:07:35 +0100 Subject: [PATCH 614/850] glew: add autoreconf support Signed-off-by: Stephan Raue --- packages/graphics/glew/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/graphics/glew/meta b/packages/graphics/glew/meta index 10255901c3..26d68015e2 100644 --- a/packages/graphics/glew/meta +++ b/packages/graphics/glew/meta @@ -13,4 +13,4 @@ PKG_SHORTDESC="glew: The OpenGL Extension Wrangler Library" PKG_LONGDESC="The OpenGL Extension Wrangler Library (GLEW) is a cross-platform C/C++ extension loading library. GLEW provides efficient run-time mechanisms for determining which OpenGL extensions are supported on the target platform. OpenGL core and extension functionality is exposed in a single header file." PKG_IS_ADDON="no" - +PKG_AUTORECONF="no" From 10c0a44aad456e3b8e19899ea4359346d752e8db Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:07:35 +0100 Subject: [PATCH 615/850] jasper: add autoreconf support Signed-off-by: Stephan Raue --- packages/graphics/jasper/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/graphics/jasper/meta b/packages/graphics/jasper/meta index 490c8fda07..2d22ddbc05 100644 --- a/packages/graphics/jasper/meta +++ b/packages/graphics/jasper/meta @@ -12,3 +12,5 @@ PKG_SECTION="graphics" PKG_SHORTDESC="jasper: JPEG-2000 Part-1 standard (i.e., ISO/IEC 15444-1) implementation" PKG_LONGDESC="This distribution contains the public release of the an open-source implementation of the ISO/IEC 15444-1 also known as JPEG-2000 standard for image compression." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 5a730a445f2c240810890e1843bf8a213e182186 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:07:36 +0100 Subject: [PATCH 616/850] jpeg: add autoreconf support Signed-off-by: Stephan Raue --- packages/graphics/jpeg/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/graphics/jpeg/meta b/packages/graphics/jpeg/meta index c5630196e3..a029ba09fd 100644 --- a/packages/graphics/jpeg/meta +++ b/packages/graphics/jpeg/meta @@ -12,3 +12,5 @@ PKG_SECTION="graphics" PKG_SHORTDESC="libjpeg: The Independent JPEG Group's JPEG software" PKG_LONGDESC="This distribution contains the public release of the Independent JPEG Group's free JPEG software." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 7fedabd1cb4995554e702e65202938931b4e6e0d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:07:36 +0100 Subject: [PATCH 617/850] libdrm: add autoreconf support Signed-off-by: Stephan Raue --- packages/graphics/libdrm/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/graphics/libdrm/meta b/packages/graphics/libdrm/meta index ac271355f7..b337349e35 100644 --- a/packages/graphics/libdrm/meta +++ b/packages/graphics/libdrm/meta @@ -13,6 +13,8 @@ PKG_SHORTDESC="libdrm: Userspace interface to kernel DRM services" PKG_LONGDESC="The userspace interface library to kernel DRM services." PKG_IS_ADDON="no" +PKG_AUTORECONF="yes" + if [ $LIBDRM_MASTER = "yes" ]; then PKG_VERSION="20101122" PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" From facec5ac75b416d40f8496800f7b9c2a707819c5 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:07:36 +0100 Subject: [PATCH 618/850] libjpeg-turbo: add autoreconf support Signed-off-by: Stephan Raue --- packages/graphics/libjpeg-turbo/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/graphics/libjpeg-turbo/meta b/packages/graphics/libjpeg-turbo/meta index 5e48e3e46d..5a8d5066bc 100644 --- a/packages/graphics/libjpeg-turbo/meta +++ b/packages/graphics/libjpeg-turbo/meta @@ -12,3 +12,5 @@ PKG_SECTION="graphics" PKG_SHORTDESC="libjpeg-turbo: a high-speed version of libjpeg for x86 and x86-64 processors which uses SIMD instructions (MMX, SSE2, etc.) to accelerate baseline JPEG compression and decompression." PKG_LONGDESC="libjpeg-turbo is a high-speed version of libjpeg for x86 and x86-64 processors which uses SIMD instructions (MMX, SSE2, etc.) to accelerate baseline JPEG compression and decompression. libjpeg-turbo is generally 2-4x as fast as the unmodified version of libjpeg, all else being equal." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 83e954b29deb3841c90ecd9bcb65bcefc52325a3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:07:36 +0100 Subject: [PATCH 619/850] libpng: add autoreconf support Signed-off-by: Stephan Raue --- packages/graphics/libpng/meta | 2 ++ .../patches/libpng-1.4.4-autoconf.patch | 25 +++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 packages/graphics/libpng/patches/libpng-1.4.4-autoconf.patch diff --git a/packages/graphics/libpng/meta b/packages/graphics/libpng/meta index ddca022bc1..662596cbac 100644 --- a/packages/graphics/libpng/meta +++ b/packages/graphics/libpng/meta @@ -12,3 +12,5 @@ PKG_SECTION="graphics" PKG_SHORTDESC="libpng: Portable Network Graphics (PNG) Reference Library" PKG_LONGDESC="PNG (Portable Network Graphics) is an extensible file format for the lossless, portable, well-compressed storage of raster images. PNG provides a patent-free replacement for GIF and can also replace many common uses of TIFF. Indexed-color, grayscale, and truecolor images are supported, plus an optional alpha channel. Sample depths range from 1 to 16 bits." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" diff --git a/packages/graphics/libpng/patches/libpng-1.4.4-autoconf.patch b/packages/graphics/libpng/patches/libpng-1.4.4-autoconf.patch new file mode 100644 index 0000000000..ac2fb16cd0 --- /dev/null +++ b/packages/graphics/libpng/patches/libpng-1.4.4-autoconf.patch @@ -0,0 +1,25 @@ +diff -Naur libpng-1.4.4-old/configure.ac libpng-1.4.4-new/configure.ac +--- libpng-1.4.4-old/configure.ac 2010-09-23 05:18:36.000000000 -0700 ++++ libpng-1.4.4-new/configure.ac 2010-09-23 12:20:45.000000000 -0700 +@@ -18,16 +18,16 @@ + + dnl Version number stuff here: + +-PNGLIB_VERSION=1.4.4 +-PNGLIB_MAJOR=1 +-PNGLIB_MINOR=4 +-PNGLIB_RELEASE=4 +- + AC_INIT([libpng], [1.4.4], [png-mng-implement@lists.sourceforge.net]) + AM_INIT_AUTOMAKE + dnl stop configure from automagically running automake + AM_MAINTAINER_MODE + ++PNGLIB_VERSION=1.4.4 ++PNGLIB_MAJOR=1 ++PNGLIB_MINOR=4 ++PNGLIB_RELEASE=4 ++ + dnl End of version number stuff + + AC_CONFIG_SRCDIR([pngget.c]) From 336317201fbac3e8b2767c0a46e67cf9200260e5 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:07:36 +0100 Subject: [PATCH 620/850] Mesa: add autoreconf support Signed-off-by: Stephan Raue --- packages/graphics/Mesa/build | 4 ++++ packages/graphics/Mesa/meta | 2 ++ 2 files changed, 6 insertions(+) diff --git a/packages/graphics/Mesa/build b/packages/graphics/Mesa/build index a301bc92fa..c9dd74421b 100755 --- a/packages/graphics/Mesa/build +++ b/packages/graphics/Mesa/build @@ -4,6 +4,10 @@ get_graphicdrivers +# dont use gold linker because of compiling issues + strip_gold + strip_linker_plugin + # dont use strip or ggdb because of use from mklib LDFLAGS=`echo $LDFLAGS | sed -e "s|-s||"` LDFLAGS=`echo $LDFLAGS | sed -e "s|-ggdb||"` diff --git a/packages/graphics/Mesa/meta b/packages/graphics/Mesa/meta index a108a8fc4a..8dc968ac42 100644 --- a/packages/graphics/Mesa/meta +++ b/packages/graphics/Mesa/meta @@ -13,6 +13,8 @@ PKG_SHORTDESC="mesa: 3-D graphics library with OpenGL API" PKG_LONGDESC="Mesa is a 3-D graphics library with an API which is very similar to that of OpenGL*. To the extent that Mesa utilizes the OpenGL command syntax or state machine, it is being used with authorization from Silicon Graphics, Inc. However, the author makes no claim that Mesa is in any way a compatible replacement for OpenGL or associated with Silicon Graphics, Inc. Those who want a licensed implementation of OpenGL should contact a licensed vendor. While Mesa is not a licensed OpenGL implementation, it is currently being tested with the OpenGL conformance tests. For the current conformance status see the CONFORM file included in the Mesa distribution." PKG_IS_ADDON="no" +PKG_AUTORECONF="yes" + if [ $MESA_MASTER = "yes" ]; then PKG_VERSION="20101122" PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" From 8dec7d82bed2fe7f75951e59feb646a14d05e3df Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:07:37 +0100 Subject: [PATCH 621/850] Mesa-GL: add autoreconf support Signed-off-by: Stephan Raue --- packages/graphics/Mesa-GL/build | 6 ++++++ packages/graphics/Mesa-GL/meta | 2 ++ 2 files changed, 8 insertions(+) diff --git a/packages/graphics/Mesa-GL/build b/packages/graphics/Mesa-GL/build index 41041b10a6..d8cd506d1b 100755 --- a/packages/graphics/Mesa-GL/build +++ b/packages/graphics/Mesa-GL/build @@ -4,7 +4,13 @@ $SCRIPTS/unpack Mesa +# dont use gold linker because of compiling issues + strip_gold + strip_linker_plugin + cd $BUILD/Mesa* + +do_autoreconf ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ diff --git a/packages/graphics/Mesa-GL/meta b/packages/graphics/Mesa-GL/meta index c1e8728ad7..917d274a5d 100644 --- a/packages/graphics/Mesa-GL/meta +++ b/packages/graphics/Mesa-GL/meta @@ -12,3 +12,5 @@ PKG_SECTION="graphics" PKG_SHORTDESC="Mesa-GL: 3-D graphics library with OpenGL API (GL part)" PKG_LONGDESC="Mesa is a 3-D graphics library with an API which is very similar to that of OpenGL*. To the extent that Mesa utilizes the OpenGL command syntax or state machine, it is being used with authorization from Silicon Graphics, Inc. However, the author makes no claim that Mesa is in any way a compatible replacement for OpenGL or associated with Silicon Graphics, Inc. Those who want a licensed implementation of OpenGL should contact a licensed vendor. While Mesa is not a licensed OpenGL implementation, it is currently being tested with the OpenGL conformance tests. For the current conformance status see the CONFORM file included in the Mesa distribution." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 2fbcd713ef82a776533b9b82955c7a849ad0ad5a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:07:37 +0100 Subject: [PATCH 622/850] tiff: add autoreconf support Signed-off-by: Stephan Raue --- packages/graphics/tiff/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/graphics/tiff/meta b/packages/graphics/tiff/meta index 61d79af7a4..e3fdedbb6f 100644 --- a/packages/graphics/tiff/meta +++ b/packages/graphics/tiff/meta @@ -12,3 +12,5 @@ PKG_SECTION="graphics" PKG_SHORTDESC="libtiff: A library for reading and writing TIFF files" PKG_LONGDESC="libtiff is a library for reading and writing data files encoded with the Tag Image File format, Revision 6.0 (or revision 5.0 or revision 4.0). This file format is suit- able for archiving multi-color and monochromatic image data." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From a77cfe686835aedd3a03f2acccb8fc150d614320 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:07:45 +0100 Subject: [PATCH 623/850] avahi: add autoreconf support Signed-off-by: Stephan Raue --- packages/network/avahi/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/network/avahi/meta b/packages/network/avahi/meta index c25fafd23f..2a3b0694ab 100644 --- a/packages/network/avahi/meta +++ b/packages/network/avahi/meta @@ -12,3 +12,5 @@ PKG_SECTION="network" PKG_SHORTDESC="avahi: A Zeroconf mDNS/DNS-SD responder" PKG_LONGDESC="Avahi is a framework for Multicast DNS Service Discovery (mDNS/DNS-SD a.k.a. Zeroconf) on Linux. It allows programs to publish and discover services running on a local network with no specific configuration. For example, you can plug into a network and instantly find printers to print to, files to look at, and people to talk to." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 33b5a69f8c8f1f43e7035c15084f295792fdd108 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:07:45 +0100 Subject: [PATCH 624/850] bluez: add autoreconf support Signed-off-by: Stephan Raue --- packages/network/bluez/meta | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/network/bluez/meta b/packages/network/bluez/meta index 326f91f128..9ec10a916e 100644 --- a/packages/network/bluez/meta +++ b/packages/network/bluez/meta @@ -13,5 +13,4 @@ PKG_SHORTDESC="bluez: Bluetooth Tools and System Daemons for Linux." PKG_LONGDESC="Bluetooth Tools and System Daemons for Linux." PKG_IS_ADDON="no" - - +PKG_AUTORECONF="yes" From 9213e8dc618fc5106f41c9ace273689af5bb13ae Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:07:45 +0100 Subject: [PATCH 625/850] connman: add autoreconf support Signed-off-by: Stephan Raue --- packages/network/connman/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/network/connman/meta b/packages/network/connman/meta index bcae24f1aa..c4f9375f12 100644 --- a/packages/network/connman/meta +++ b/packages/network/connman/meta @@ -13,6 +13,8 @@ PKG_SHORTDESC="connman: Network manager daemon" PKG_LONGDESC="The ConnMan project provides a daemon for managing internet connections within embedded devices running the Linux operating system. The Connection Manager is designed to be slim and to use as few resources as possible, so it can be easily integrated. It is a fully modular system that can be extended, through plug-ins, to support all kinds of wired or wireless technologies. Also, configuration methods, like DHCP and domain name resolving, are implemented using plug-ins. The plug-in approach allows for easy adaption and modification for various use cases." PKG_IS_ADDON="no" +PKG_AUTORECONF="yes" + if [ "$DEVTOOLS" = yes ]; then PKG_DEPENDS="$PKG_DEPENDS Python pygobject dbus-python" fi From 4e57c1587bc14900b4710dcb5760b11e92156b54 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:07:46 +0100 Subject: [PATCH 626/850] dropbear: add autoreconf support Signed-off-by: Stephan Raue --- packages/network/dropbear/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/network/dropbear/meta b/packages/network/dropbear/meta index f4add09994..acc3036463 100644 --- a/packages/network/dropbear/meta +++ b/packages/network/dropbear/meta @@ -12,3 +12,5 @@ PKG_SECTION="security" PKG_SHORTDESC="dropbear: A relatively small SSH 2 server and client" PKG_LONGDESC="Dropbear is a relatively small SSH 2 server and client suitable for embedded systems. It runs on a variety of POSIX-based platforms." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 6ba9eb99a9e3efa91940c8e70c154ca22ceadc83 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:07:46 +0100 Subject: [PATCH 627/850] ethtool: add autoreconf support Signed-off-by: Stephan Raue --- packages/network/ethtool/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/network/ethtool/meta b/packages/network/ethtool/meta index c18dede8b9..32de4f6ed9 100644 --- a/packages/network/ethtool/meta +++ b/packages/network/ethtool/meta @@ -12,3 +12,5 @@ PKG_SECTION="network" PKG_SHORTDESC="ethtool: Display or change ethernet card settings" PKG_LONGDESC="Ethtool is used for querying settings of an ethernet device and changing them." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 0c5e4fa954cc99ccd262d0fea1769ab7dcee5fc3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:07:46 +0100 Subject: [PATCH 628/850] iptables: add autoreconf support Signed-off-by: Stephan Raue --- packages/network/iptables/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/network/iptables/meta b/packages/network/iptables/meta index 1f733ad558..2933d9cd14 100644 --- a/packages/network/iptables/meta +++ b/packages/network/iptables/meta @@ -12,3 +12,5 @@ PKG_SECTION="network" PKG_SHORTDESC="iptables: IP packet filter administration" PKG_LONGDESC="Iptables is used to set up, maintain, and inspect the tables of IP packet filter rules in the Linux kernel. There are several different tables which may be defined, and each table contains a number of built-in chains, and may contain user-defined chains." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 0c8ca159132a56024574aa9b0aad24572629b6ae Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:07:46 +0100 Subject: [PATCH 629/850] libnl: add autoreconf support Signed-off-by: Stephan Raue --- packages/network/libnl/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/network/libnl/meta b/packages/network/libnl/meta index 6e3e6a08df..23b0056723 100644 --- a/packages/network/libnl/meta +++ b/packages/network/libnl/meta @@ -12,3 +12,5 @@ PKG_SECTION="network" PKG_SHORTDESC="libnl: libnl - netlink library" PKG_LONGDESC="libnl is a library for applications dealing with netlink socket. It provides an easy to use interface for raw netlink message but also netlink family specific APIs." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 72b5be4d4186b1bc4abf41619fc017dfe35ec279 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:07:46 +0100 Subject: [PATCH 630/850] libssh: add autoreconf support Signed-off-by: Stephan Raue --- packages/network/libssh/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/network/libssh/meta b/packages/network/libssh/meta index aea25c571c..7ce32af935 100644 --- a/packages/network/libssh/meta +++ b/packages/network/libssh/meta @@ -12,3 +12,5 @@ PKG_SECTION="network" PKG_SHORTDESC="libssh: A working SSH implementation by means of a library" PKG_LONGDESC="The ssh library was designed to be used by programmers needing a working SSH implementation by the mean of a library. The complete control of the client is made by the programmer. With libssh, you can remotely execute programs, transfer files, use a secure and transparent tunnel for your remote programs. With its Secure FTP implementation, you can play with remote files easily, without third-party programs others than libcrypto (from openssl)." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 105f71aaabe76da44c61c496d565abb463ecd39a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:07:47 +0100 Subject: [PATCH 631/850] netmount: add autoreconf support Signed-off-by: Stephan Raue --- packages/network/netmount/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/network/netmount/meta b/packages/network/netmount/meta index 7001fd02fa..2f6528ccb8 100644 --- a/packages/network/netmount/meta +++ b/packages/network/netmount/meta @@ -12,3 +12,5 @@ PKG_SECTION="tools" PKG_SHORTDESC="netmount: scripts for mounting network shares on boottime" PKG_LONGDESC="netmount: scripts for mounting network shares on boottime" PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From fd2de5984f34d922c65154cb6a6aa1dfd92cfe90 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:07:47 +0100 Subject: [PATCH 632/850] ntp: add autoreconf support Signed-off-by: Stephan Raue --- packages/network/ntp/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/network/ntp/meta b/packages/network/ntp/meta index d76666c92d..0e05c170f0 100644 --- a/packages/network/ntp/meta +++ b/packages/network/ntp/meta @@ -12,3 +12,5 @@ PKG_SECTION="network" PKG_SHORTDESC="ntp: Network Time Protocol utilities" PKG_LONGDESC="The Network Time Protocol (NTP) is used to synchronize the time of a computer client or server to another server or reference time source, such as a radio or satellite receiver or modem. It provides client accuracies typically within a millisecond on LANs and up to a few tens of milliseconds on WANs relative to a primary server synchronized to Coordinated Universal Time (UTC) via a Global Positioning Service (GPS) receiver, for example." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 877dcff7d3331807c8058f49a8dec7d97eee4638 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:07:47 +0100 Subject: [PATCH 633/850] ppp: add autoreconf support Signed-off-by: Stephan Raue --- packages/network/ppp/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/network/ppp/meta b/packages/network/ppp/meta index 289abd2172..e75f30a220 100644 --- a/packages/network/ppp/meta +++ b/packages/network/ppp/meta @@ -12,3 +12,5 @@ PKG_SECTION="network" PKG_SHORTDESC="ppp: The PPP user level programs" PKG_LONGDESC="The Point-to-Point Protocol (PPP) provides a standard way to establish a network connection over a serial link. At present, this package supports IP and the protocols layered above IP, such as TCP and UDP. The Linux port of this package also has support for IPX." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From c863d22d2f72bd6303775cd60de8b03911a976b4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:07:47 +0100 Subject: [PATCH 634/850] samba: add autoreconf support Signed-off-by: Stephan Raue --- packages/network/samba/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/network/samba/meta b/packages/network/samba/meta index b89fc76cbe..b4b91f56ed 100644 --- a/packages/network/samba/meta +++ b/packages/network/samba/meta @@ -13,6 +13,8 @@ PKG_SHORTDESC="samba: The free SMB / CIFS fileserver and client" PKG_LONGDESC="Samba is a SMB server that runs on Unix and other operating systems. It allows these operating systems (currently Unix, Netware, OS/2 and AmigaDOS) to act as a file and print server for SMB and CIFS clients. There are many Lan-Manager compatible clients such as LanManager for DOS, Windows for Workgroups, Windows NT, Windows 95, Linux smbfs, OS/2, Pathworks and more." PKG_IS_ADDON="no" +PKG_AUTORECONF="no" + if [ "$AVAHI_DAEMON" = yes ]; then PKG_DEPENDS="$PKG_DEPENDS avahi" PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS avahi" From 20a85dba4ae41ae02895e6b24f4e2771c9120436 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:07:47 +0100 Subject: [PATCH 635/850] transmission: add autoreconf support Signed-off-by: Stephan Raue --- packages/network/transmission/build | 1 - packages/network/transmission/meta | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/network/transmission/build b/packages/network/transmission/build index ad93ae0cbc..6f9e6d2e3f 100755 --- a/packages/network/transmission/build +++ b/packages/network/transmission/build @@ -3,7 +3,6 @@ . config/options $1 cd $PKG_BUILD - ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ diff --git a/packages/network/transmission/meta b/packages/network/transmission/meta index 2c1fe9b06e..0ee8bc9b67 100644 --- a/packages/network/transmission/meta +++ b/packages/network/transmission/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="transmission: a fast, easy and free BitTorrent client" PKG_LONGDESC="transmission is a fast, easy and free BitTorrent client" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 852a40cacf6dbbc564091cd21c1833b2a5fdc42d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:07:48 +0100 Subject: [PATCH 636/850] wpa_supplicant: add autoreconf support Signed-off-by: Stephan Raue --- packages/network/wpa_supplicant/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/network/wpa_supplicant/meta b/packages/network/wpa_supplicant/meta index 8e0ca3a17b..291736f874 100644 --- a/packages/network/wpa_supplicant/meta +++ b/packages/network/wpa_supplicant/meta @@ -12,3 +12,5 @@ PKG_SECTION="network" PKG_SHORTDESC="wpa_supplicant: An IEEE 802.11i supplicant implementation" PKG_LONGDESC="The wpa_supplicant is a free software implementation of an IEEE 802.11i supplicant. In addition to being a full-featured WPA2 supplicant, it also has support for WPA and older wireless LAN security protocols." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From d8600546398b18b4e361fc412652884750e3885b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:09:39 +0100 Subject: [PATCH 637/850] alsa-utils: enable 'Master,0' and set to 100% Signed-off-by: Stephan Raue --- packages/audio/alsa-utils/scripts/soundconfig | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/audio/alsa-utils/scripts/soundconfig b/packages/audio/alsa-utils/scripts/soundconfig index 6a8c6f6078..90a5051155 100755 --- a/packages/audio/alsa-utils/scripts/soundconfig +++ b/packages/audio/alsa-utils/scripts/soundconfig @@ -122,10 +122,13 @@ else mixer 1 IEC958,2 on mixer 1 IEC958,3 on - # ASRock ION 330 has Master Front set to 0 mixer 0 'Master Front' 100% +# Shuttle XS35GT needs this too + mixer 0 Master,0 100% + + fi exit 0 From e1f9a6942c4e31065ab5d18848efb710ff062869 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:09:55 +0100 Subject: [PATCH 638/850] alsa: add autoreconf support Signed-off-by: Stephan Raue --- packages/audio/alsa/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/audio/alsa/meta b/packages/audio/alsa/meta index e693eb0904..d9eeba7627 100644 --- a/packages/audio/alsa/meta +++ b/packages/audio/alsa/meta @@ -12,3 +12,5 @@ PKG_SECTION="audio" PKG_SHORTDESC="alsa: Matapackage to install all alsa components" PKG_LONGDESC="ALSA (Advanced Linux Sound Architecture) is the next generation Linux Sound API. It provides much finer (->better) access to the sound hardware, has a unbeatable mixer API and supports stuff like multi channel hardware, digital outs and ins, uninterleaved sound data access, and an oss emulation layer (for the old applications). It is the prefered API for professional sound apps under Linux." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 9d44447d192255db328392aa4d3f9a6128cd339d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:09:55 +0100 Subject: [PATCH 639/850] alsa-lib: add autoreconf support Signed-off-by: Stephan Raue --- packages/audio/alsa-lib/build | 3 +++ packages/audio/alsa-lib/meta | 2 ++ 2 files changed, 5 insertions(+) diff --git a/packages/audio/alsa-lib/build b/packages/audio/alsa-lib/build index 83b5aa443d..427975b8de 100755 --- a/packages/audio/alsa-lib/build +++ b/packages/audio/alsa-lib/build @@ -25,3 +25,6 @@ $MAKE $MAKE -C include DESTDIR=$SYSROOT_PREFIX install-data $MAKE -C src DESTDIR=$SYSROOT_PREFIX install-exec $MAKE -C utils DESTDIR=$SYSROOT_PREFIX install-pkgconfigDATA + +mkdir -p $SYSROOT_PREFIX/usr/share/aclocal + cp utils/alsa.m4 $SYSROOT_PREFIX/usr/share/aclocal \ No newline at end of file diff --git a/packages/audio/alsa-lib/meta b/packages/audio/alsa-lib/meta index 872b55a507..141aa68476 100644 --- a/packages/audio/alsa-lib/meta +++ b/packages/audio/alsa-lib/meta @@ -12,3 +12,5 @@ PKG_SECTION="audio" PKG_SHORTDESC="alsa-lib: Advanced Linux Sound Architecture library" PKG_LONGDESC="ALSA (Advanced Linux Sound Architecture) is the next generation Linux Sound API. It provides much finer (->better) access to the sound hardware, has a unbeatable mixer API and supports stuff like multi channel hardware, digital outs and ins, uninterleaved sound data access, and an oss emulation layer (for the old applications). It is the prefered API for professional sound apps under Linux." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From e49a76a0131b2c170cb6d13134ac8e45605bcd19 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:09:56 +0100 Subject: [PATCH 640/850] alsa-plugins: add autoreconf support Signed-off-by: Stephan Raue --- packages/audio/alsa-plugins/meta | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/audio/alsa-plugins/meta b/packages/audio/alsa-plugins/meta index a7f99e7c0b..d6bc7b2d2f 100644 --- a/packages/audio/alsa-plugins/meta +++ b/packages/audio/alsa-plugins/meta @@ -13,3 +13,4 @@ PKG_SHORTDESC="alsa-plugins: Advanced Linux Sound Architecture Plugins" PKG_LONGDESC="ALSA (Advanced Linux Sound Architecture) is the next generation Linux Sound API. It provides much finer (->better) access to the sound hardware, has a unbeatable mixer API and supports stuff like multi channel hardware, digital outs and ins, uninterleaved sound data access, and an oss emulation layer (for the old applications). It is the prefered API for professional sound apps under Linux." PKG_IS_ADDON="no" +PKG_AUTORECONF="yes" From 66cacf8a8b4404e06106fa5831e88190acdfc2b9 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:09:56 +0100 Subject: [PATCH 641/850] alsa-utils: add autoreconf support Signed-off-by: Stephan Raue --- packages/audio/alsa-utils/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/audio/alsa-utils/meta b/packages/audio/alsa-utils/meta index 4a4bfc6d44..298c8b12b8 100644 --- a/packages/audio/alsa-utils/meta +++ b/packages/audio/alsa-utils/meta @@ -12,3 +12,5 @@ PKG_SECTION="audio" PKG_SHORTDESC="alsa-utils: Advanced Linux Sound Architecture utilities" PKG_LONGDESC="This package includes the utilities for ALSA, like alsamixer, aplay, arecord, alsactl, iecset and speaker-test." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From dfa679efab177b91385e2537c76a55d15aafb129 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:09:56 +0100 Subject: [PATCH 642/850] faac: add autoreconf support Signed-off-by: Stephan Raue --- packages/audio/faac/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/audio/faac/meta b/packages/audio/faac/meta index c822cfbb83..6551f34aed 100644 --- a/packages/audio/faac/meta +++ b/packages/audio/faac/meta @@ -12,3 +12,5 @@ PKG_SECTION="audio" PKG_SHORTDESC="faac: An MPEG-4 AAC encoder" PKG_LONGDESC="The FAAC project includes the AAC encoder supporting several MPEG-4 object types (LC, Main, LTP, HE AAC, PS) and file formats (ADTS AAC, raw AAC, MP4), multichannel and gapless encoding as well as MP4 metadata tags. The codecs are compatible with standard-compliant audio applications using one or more of these profiles." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 6abf8b71de394c5356ea5ba34218ab5c6d346967 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:09:56 +0100 Subject: [PATCH 643/850] faad2: add autoreconf support Signed-off-by: Stephan Raue --- packages/audio/faad2/build | 2 -- packages/audio/faad2/meta | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/audio/faad2/build b/packages/audio/faad2/build index 67a881f170..a2f7448fd4 100755 --- a/packages/audio/faad2/build +++ b/packages/audio/faad2/build @@ -3,8 +3,6 @@ . config/options $1 cd $PKG_BUILD - -$AUTORECONF ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ diff --git a/packages/audio/faad2/meta b/packages/audio/faad2/meta index 42d2727d00..71eaeb620d 100644 --- a/packages/audio/faad2/meta +++ b/packages/audio/faad2/meta @@ -12,3 +12,5 @@ PKG_SECTION="audio" PKG_SHORTDESC="faad: An MPEG-4 AAC decoder" PKG_LONGDESC="The FAAD project includes the AAC decoder FAAD2. It supports several MPEG-4 object types (LC, Main, LTP, HE AAC, PS) and file formats (ADTS AAC, raw AAC, MP4), multichannel and gapless decoding as well as MP4 metadata tags. The codecs are compatible with standard-compliant audio applications using one or more of these profiles." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 42a5c9a0f296d185e4971fd5eb9ebe592e665994 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:09:56 +0100 Subject: [PATCH 644/850] flac: add autoreconf support Signed-off-by: Stephan Raue --- packages/audio/flac/build | 1 + packages/audio/flac/meta | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/audio/flac/build b/packages/audio/flac/build index 22b9c5318a..dbf331f5c3 100755 --- a/packages/audio/flac/build +++ b/packages/audio/flac/build @@ -3,6 +3,7 @@ . config/options $1 cd $PKG_BUILD +do_autoreconf -I m4 ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ diff --git a/packages/audio/flac/meta b/packages/audio/flac/meta index 138baae3c7..137f24db22 100644 --- a/packages/audio/flac/meta +++ b/packages/audio/flac/meta @@ -6,9 +6,11 @@ PKG_LICENSE="LGPL" PKG_SITE="http://flac.sourceforge.net/" PKG_URL="http://downloads.sourceforge.net/flac/$PKG_NAME-$PKG_VERSION.tar.gz" PKG_DEPENDS="libogg" -PKG_BUILD_DEPENDS="toolchain libogg" +PKG_BUILD_DEPENDS="toolchain libogg libiconv" PKG_PRIORITY="optional" PKG_SECTION="audio" PKG_SHORTDESC="flac: An Free Lossless Audio Codec" PKG_LONGDESC="Grossly oversimplified, FLAC is similar to MP3, but lossless, meaning that audio is compressed in FLAC without throwing away any information. This is similar to how Zip works, except with FLAC you will get much better compression because it is designed specifically for audio." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From ea3e922da4faa9f2759806eda703d49db13c39d2 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:09:57 +0100 Subject: [PATCH 645/850] libcdio: add autoreconf support Signed-off-by: Stephan Raue --- packages/audio/libcdio/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/audio/libcdio/meta b/packages/audio/libcdio/meta index da2f6bee25..91369eb33e 100644 --- a/packages/audio/libcdio/meta +++ b/packages/audio/libcdio/meta @@ -12,3 +12,5 @@ PKG_SECTION="audio" PKG_SHORTDESC="libcdio: A CD-ROM reading and control library" PKG_LONGDESC="This library is to encapsulate CD-ROM reading and control. Applications wishing to be oblivious of the OS- and device-dependant properties of a CD-ROM can use this library. Some support for disk image types like BIN/CUE and NRG is available, so applications that use this library also have the ability to read disc images as though they were CD's." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 5490a17503e7eb64ef67703f14de2db112818593 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:09:57 +0100 Subject: [PATCH 646/850] libmad: add autoreconf support Signed-off-by: Stephan Raue --- packages/audio/libmad/build | 5 +++++ packages/audio/libmad/meta | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/audio/libmad/build b/packages/audio/libmad/build index 29242d4410..0dfed46dc1 100755 --- a/packages/audio/libmad/build +++ b/packages/audio/libmad/build @@ -3,6 +3,11 @@ . config/options $1 cd $PKG_BUILD + +# some fixes for autoreconf + touch NEWS AUTHORS ChangeLog + do_autoreconf + ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ diff --git a/packages/audio/libmad/meta b/packages/audio/libmad/meta index 03377838ff..8f0827a609 100644 --- a/packages/audio/libmad/meta +++ b/packages/audio/libmad/meta @@ -11,4 +11,6 @@ PKG_PRIORITY="optional" PKG_SECTION="audio" PKG_SHORTDESC="libmad: MPEG Audio Decoder" PKG_LONGDESC="MAD is a high-quality MPEG audio decoder. It currently supports MPEG-1 and the MPEG-2 extension to Lower Sampling Frequencies, as well as the so-called MPEG 2.5 format. All three audio layers (Layer I, Layer II, and Layer III a.k.a. MP3) are fully implemented." -PKG_IS_ADDON="no" \ No newline at end of file +PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From e3c5db48155034816bdf103955f0c371f5e1a73f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:09:57 +0100 Subject: [PATCH 647/850] libmms: add autoreconf support Signed-off-by: Stephan Raue --- packages/audio/libmms/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/audio/libmms/meta b/packages/audio/libmms/meta index ad9500651c..c54498a21c 100644 --- a/packages/audio/libmms/meta +++ b/packages/audio/libmms/meta @@ -12,3 +12,5 @@ PKG_SECTION="audio" PKG_SHORTDESC="libmms: a common library for parsing mms:// and mmsh:// type network streams." PKG_LONGDESC="LibMMS is a common library for parsing mms:// and mmsh:// type network streams. These are commonly used to stream Windows Media Video content over the web. LibMMS itself is only for receiving MMS stream, it doesn't handle sending at all." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 34e45375134ed5acf6746bc79bc0442726093483 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:09:57 +0100 Subject: [PATCH 648/850] libmodplug: add autoreconf support Signed-off-by: Stephan Raue --- packages/audio/libmodplug/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/audio/libmodplug/meta b/packages/audio/libmodplug/meta index 01229a94f2..50ce2ff07c 100644 --- a/packages/audio/libmodplug/meta +++ b/packages/audio/libmodplug/meta @@ -12,3 +12,5 @@ PKG_SECTION="audio" PKG_SHORTDESC="libmodplug: renders mod music files as raw audio data, for playing or conversion." PKG_LONGDESC="libmodplug renders mod music files as raw audio data, for playing or conversion. libmodplug is based on the fast and high quality mod playing code written and released to the public domain by Olivier Lapicque. mod, .s3m, .it, .xm, and a number of lesser-known formats are supported. Optional features include high-quality resampling, bass expansion, surround and reverb." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 6ae2e2bd51eebb984c5e5180e0af45b88682fe50 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:09:57 +0100 Subject: [PATCH 649/850] libogg: add autoreconf support Signed-off-by: Stephan Raue --- packages/audio/libogg/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/audio/libogg/meta b/packages/audio/libogg/meta index fccd9c404d..f9ab5c90c4 100644 --- a/packages/audio/libogg/meta +++ b/packages/audio/libogg/meta @@ -11,4 +11,6 @@ PKG_PRIORITY="optional" PKG_SECTION="audio" PKG_SHORTDESC="libogg: Open source bitstream container format" PKG_LONGDESC="Libogg contains necessary functionality to create, decode, and work with Ogg bitstreams." -PKG_IS_ADDON="no" \ No newline at end of file +PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 093538b16ae4fe87e70cfc6756b1ea8c01dfaaf1 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:09:57 +0100 Subject: [PATCH 650/850] libsamplerate: add autoreconf support Signed-off-by: Stephan Raue --- packages/audio/libsamplerate/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/audio/libsamplerate/meta b/packages/audio/libsamplerate/meta index 7a925da4ce..dc5b63032a 100644 --- a/packages/audio/libsamplerate/meta +++ b/packages/audio/libsamplerate/meta @@ -11,4 +11,6 @@ PKG_PRIORITY="optional" PKG_SECTION="audio" PKG_SHORTDESC="libsamplerate: A Sample Rate Converter library for audio" PKG_LONGDESC="Libsamplerate is a Sample Rate Converter for audio. One example of where such a thing would be useful is converting audio from the CD sample rate of 44.1kHz to the 48kHz sample rate used by DAT players." -PKG_IS_ADDON="no" \ No newline at end of file +PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" # ToDo From 7283f7738aedcd317e57c94246089ae2b7bdf344 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:09:58 +0100 Subject: [PATCH 651/850] libsndfile: add autoreconf support Signed-off-by: Stephan Raue --- packages/audio/libsndfile/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/audio/libsndfile/meta b/packages/audio/libsndfile/meta index faa80fe8e5..990ae0e786 100644 --- a/packages/audio/libsndfile/meta +++ b/packages/audio/libsndfile/meta @@ -12,3 +12,5 @@ PKG_SECTION="audio" PKG_SHORTDESC="libsndfile: A library for accessing various audio file formats" PKG_LONGDESC="libsndfile is a C library for reading and writing sound files such as AIFF, AU, WAV, and others through one standard interface. It can currently read/write 8, 16, 24 and 32-bit PCM files as well as 32 and 64-bit floating point WAV files and a number of compressed formats. It compiles and runs on *nix, MacOS, and Win32." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From b50a274973595f2e0f7424ba8eb9ef06e357784c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:09:58 +0100 Subject: [PATCH 652/850] libvorbis: add autoreconf support Signed-off-by: Stephan Raue --- packages/audio/libvorbis/meta | 4 ++- .../patches/libvorbis-1.3.2-configure.patch | 31 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 packages/audio/libvorbis/patches/libvorbis-1.3.2-configure.patch diff --git a/packages/audio/libvorbis/meta b/packages/audio/libvorbis/meta index 72a9918d7b..c707995598 100644 --- a/packages/audio/libvorbis/meta +++ b/packages/audio/libvorbis/meta @@ -11,4 +11,6 @@ PKG_PRIORITY="optional" PKG_SECTION="audio" PKG_SHORTDESC="libvorbis: Lossless audio compression tools using the ogg-vorbis algorithms" PKG_LONGDESC="Ogg Vorbis is a fully open, non-proprietary, patent-and-royalty-free, general-purpose compressed audio format for mid to high quality (8kHz-48.0kHz, 16+ bit, polyphonic) audio and music at fixed and variable bitrates from 16 to 128 kbps/channel. This places Vorbis in the same competitive class as audio representations such as MPEG-4 (AAC), and similar to, but higher performance than MPEG-1/2 audio layer 3, MPEG-4 audio (TwinVQ), WMA and PAC." -PKG_IS_ADDON="no" \ No newline at end of file +PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" diff --git a/packages/audio/libvorbis/patches/libvorbis-1.3.2-configure.patch b/packages/audio/libvorbis/patches/libvorbis-1.3.2-configure.patch new file mode 100644 index 0000000000..5a4eb52857 --- /dev/null +++ b/packages/audio/libvorbis/patches/libvorbis-1.3.2-configure.patch @@ -0,0 +1,31 @@ +diff -Naur libvorbis-1.3.2-old/configure.ac libvorbis-1.3.2-new/configure.ac +--- libvorbis-1.3.2-old/configure.ac 2010-11-01 12:27:12.000000000 -0700 ++++ libvorbis-1.3.2-new/configure.ac 2010-11-01 14:50:03.000000000 -0700 +@@ -8,6 +8,7 @@ + AC_INIT([libvorbis],[1.3.2],[vorbis-dev@xiph.org]) + + AC_CONFIG_SRCDIR([lib/mdct.c]) ++AC_CONFIG_MACRO_DIR([m4]) + + AC_CANONICAL_TARGET([]) + +@@ -16,7 +17,6 @@ + AM_CONFIG_HEADER([config.h]) + + dnl Add parameters for aclocal +-AC_SUBST(ACLOCAL_AMFLAGS, "-I m4") + + dnl Library versioning + dnl - library source changed -> increment REVISION +diff -Naur libvorbis-1.3.2-old/Makefile.am libvorbis-1.3.2-new/Makefile.am +--- libvorbis-1.3.2-old/Makefile.am 2010-03-25 18:56:25.000000000 -0700 ++++ libvorbis-1.3.2-new/Makefile.am 2010-11-01 14:50:03.000000000 -0700 +@@ -2,6 +2,8 @@ + + AUTOMAKE_OPTIONS = 1.7 foreign dist-zip dist-bzip2 + ++ACLOCAL_AMFLAGS = -I m4 ++ + SUBDIRS = m4 include vq lib test doc + + if BUILD_EXAMPLES From e2422e668704054e06180ae9bd8530e5c220ad1d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:09:58 +0100 Subject: [PATCH 653/850] speex: add autoreconf support Signed-off-by: Stephan Raue --- packages/audio/speex/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/audio/speex/meta b/packages/audio/speex/meta index cece44002d..e6e68ee7e9 100644 --- a/packages/audio/speex/meta +++ b/packages/audio/speex/meta @@ -12,3 +12,5 @@ PKG_SECTION="audio" PKG_SHORTDESC="speex: A free Audio Codec optimized for speech" PKG_LONGDESC="Speex is a patent-free compression format designed especially for speech. It is specialized for voice communications at low bit-rates in the 2-45 kbps range. Possible applications include Voice over IP (VoIP), Internet audio streaming, audio books, and archiving of speech data (e.g. voice mail)." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From e1d5098c33f1959b1a31f7caf854a53281a5a878 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:09:58 +0100 Subject: [PATCH 654/850] wavpack: add autoreconf support Signed-off-by: Stephan Raue --- packages/audio/wavpack/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/audio/wavpack/meta b/packages/audio/wavpack/meta index 73c2489e21..8a7f9e7fbc 100644 --- a/packages/audio/wavpack/meta +++ b/packages/audio/wavpack/meta @@ -12,3 +12,5 @@ PKG_SECTION="audio" PKG_SHORTDESC="wavpack: a completely open audio compression format" PKG_LONGDESC="WavPack is a completely open audio compression format providing lossless, high-quality lossy, and a unique hybrid compression mode. Although the technology is loosely based on previous versions of WavPack, the new version 4 format has been designed from the ground up to offer unparalleled performance and functionality." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From b205a5c5f9039ee966eaacd99c44cba9b634f492 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:10:25 +0100 Subject: [PATCH 655/850] autoconf: add autoreconf support Signed-off-by: Stephan Raue --- packages/toolchain/devel/autotools/autoconf/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/toolchain/devel/autotools/autoconf/meta b/packages/toolchain/devel/autotools/autoconf/meta index 0a7834e6d2..05343207ce 100644 --- a/packages/toolchain/devel/autotools/autoconf/meta +++ b/packages/toolchain/devel/autotools/autoconf/meta @@ -12,3 +12,5 @@ PKG_SECTION="toolchain/devel" PKG_SHORTDESC="autoconf: A GNU tool for automatically configuring source code" PKG_LONGDESC="Autoconf is an extensible package of m4 macros that produce shell scripts to automatically configure software source code packages. These scripts can adapt the packages to many kinds of UNIX-like systems without manual user intervention. Autoconf creates a configuration script for a package from a template file that lists the operating system features that the package can use, in the form of m4 macro calls." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From bfc89a2dd3516303187be6b866309f699d646d22 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:10:25 +0100 Subject: [PATCH 656/850] autoconf-2.64: add autoreconf support Signed-off-by: Stephan Raue --- packages/toolchain/devel/autotools/autoconf-2.64/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/toolchain/devel/autotools/autoconf-2.64/meta b/packages/toolchain/devel/autotools/autoconf-2.64/meta index 7094699337..50f8e92141 100644 --- a/packages/toolchain/devel/autotools/autoconf-2.64/meta +++ b/packages/toolchain/devel/autotools/autoconf-2.64/meta @@ -12,3 +12,5 @@ PKG_SECTION="toolchain/devel" PKG_SHORTDESC="autoconf: A GNU tool for automatically configuring source code" PKG_LONGDESC="Autoconf is an extensible package of m4 macros that produce shell scripts to automatically configure software source code packages. These scripts can adapt the packages to many kinds of UNIX-like systems without manual user intervention. Autoconf creates a configuration script for a package from a template file that lists the operating system features that the package can use, in the form of m4 macro calls." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From acf6ac6a31f4836b0fff390ff55b5aa49d2cd319 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:10:25 +0100 Subject: [PATCH 657/850] automake: add autoreconf support Signed-off-by: Stephan Raue --- packages/toolchain/devel/autotools/automake/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/toolchain/devel/autotools/automake/meta b/packages/toolchain/devel/autotools/automake/meta index f5e61d20aa..cf514f98b7 100644 --- a/packages/toolchain/devel/autotools/automake/meta +++ b/packages/toolchain/devel/autotools/automake/meta @@ -12,3 +12,5 @@ PKG_SECTION="toolchain/devel" PKG_SHORTDESC="automake: A GNU tool for automatically creating Makefiles" PKG_LONGDESC="This is Automake, a Makefile generator. It was inspired by the 4.4BSD make and include files, but aims to be portable and to conform to the GNU standards for Makefile variables and targets. Automake is a Perl script. The input files are called Makefile.am. The output files are called Makefile.in; they are intended for use with Autoconf. Automake requires certain things to be done in your configure.in." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 0d085d41b6eafc731998c9d2285722ac85486841 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:10:25 +0100 Subject: [PATCH 658/850] libtool-host: add autoreconf support Signed-off-by: Stephan Raue --- packages/toolchain/devel/autotools/libtool-host/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/toolchain/devel/autotools/libtool-host/meta b/packages/toolchain/devel/autotools/libtool-host/meta index ad8e1e48e2..354505eea3 100644 --- a/packages/toolchain/devel/autotools/libtool-host/meta +++ b/packages/toolchain/devel/autotools/libtool-host/meta @@ -11,4 +11,6 @@ PKG_PRIORITY="optional" PKG_SECTION="toolchain/devel" PKG_SHORTDESC="libtool: Generic library support script" PKG_LONGDESC="This is GNU Libtool, a generic library support script. Libtool hides the complexity of using shared libraries behind a consistent, portable interface." -PKG_IS_ADDON="no" \ No newline at end of file +PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From d1b345d15e40f250fb943c761c75daef211e797d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:10:26 +0100 Subject: [PATCH 659/850] m4: add autoreconf support Signed-off-by: Stephan Raue --- packages/toolchain/devel/autotools/m4/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/toolchain/devel/autotools/m4/meta b/packages/toolchain/devel/autotools/m4/meta index 3334913ce6..c3567fed64 100644 --- a/packages/toolchain/devel/autotools/m4/meta +++ b/packages/toolchain/devel/autotools/m4/meta @@ -12,3 +12,5 @@ PKG_SECTION="toolchain/devel" PKG_SHORTDESC="m4: The m4 macro processor" PKG_LONGDESC="GNU 'M4' is an implementation of the traditional Unix macro processor. It is mostly SVR4 compatible, although it has some extensions (for example, handling more than 9 positional parameters to macros). 'M4' also has built-in functions for including files, running shell commands, doing arithmetic, etc. Autoconf needs GNU 'M4' for generating 'configure' scripts, but not for running them." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 94677a95e6258cc991482100ee34328ce76adc92 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:10:50 +0100 Subject: [PATCH 660/850] binutils: add autoreconf support Signed-off-by: Stephan Raue --- packages/toolchain/devel/binutils/build | 10 +++ packages/toolchain/devel/binutils/meta | 2 + .../binutils-2.21.51.0.1-visibility.patch | 71 +++++++++++++++++++ 3 files changed, 83 insertions(+) create mode 100644 packages/toolchain/devel/binutils/patches/binutils-2.21.51.0.1-visibility.patch diff --git a/packages/toolchain/devel/binutils/build b/packages/toolchain/devel/binutils/build index 6292ee8635..7bcf36f00f 100755 --- a/packages/toolchain/devel/binutils/build +++ b/packages/toolchain/devel/binutils/build @@ -8,6 +8,11 @@ fi setup_toolchain host +CPPFLAGS="" +CFLAGS="" +CXXFLAGS="" +LDFLAGS="" + cd $PKG_BUILD mkdir -p objdir && cd objdir ../configure --host=$HOST_NAME \ @@ -26,6 +31,9 @@ mkdir -p objdir && cd objdir --disable-libssp \ --enable-version-specific-runtime-libs \ $WITH_64B_BFD \ + --enable-plugins \ + --enable-gold=both/ld \ + --enable-lto \ --disable-nls make configure-host @@ -34,3 +42,5 @@ make cp -v ../include/libiberty.h $SYSROOT_PREFIX/usr/include make install + +cp $ROOT/$TOOLCHAIN/bin/$TARGET_NAME-ld.gold $ROOT/$TOOLCHAIN/bin/$TARGET_NAME-gold \ No newline at end of file diff --git a/packages/toolchain/devel/binutils/meta b/packages/toolchain/devel/binutils/meta index 5f7d7400a2..a225767dc3 100644 --- a/packages/toolchain/devel/binutils/meta +++ b/packages/toolchain/devel/binutils/meta @@ -12,3 +12,5 @@ PKG_SECTION="toolchain/devel" PKG_SHORTDESC="binutils: A GNU collection of binary utilities" PKG_LONGDESC="The GNU binutils are utilities of use when dealing with object files. the packages includes ld - the GNU linker, as - the GNU assembler, addr2line - converts addresses into filenames and line numbers, ar - a utility for creating, modifying and extracting from archives, c++filt - filter to demangle encoded C++ symbols, gprof - displays profiling information, nlmconv - converts object code into an NLM, nm - lists symbols from object files, objcopy - Copys and translates object files, objdump - displays information from object files, ranlib - generates an index to the contents of an archive, readelf - displays information from any ELF format object file, size - lists the section sizes of an object or archive file, strings - lists printable strings from files, strip - discards symbols as well as windres - a compiler for Windows resource files." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" diff --git a/packages/toolchain/devel/binutils/patches/binutils-2.21.51.0.1-visibility.patch b/packages/toolchain/devel/binutils/patches/binutils-2.21.51.0.1-visibility.patch new file mode 100644 index 0000000000..58067c1e86 --- /dev/null +++ b/packages/toolchain/devel/binutils/patches/binutils-2.21.51.0.1-visibility.patch @@ -0,0 +1,71 @@ +diff -Naur binutils-2.20.51.0.12-old/gold/plugin.cc binutils-2.20.51.0.12-new/gold/plugin.cc +--- binutils-2.20.51.0.12-old/gold/plugin.cc 2010-10-22 06:41:04.000000000 -0700 ++++ binutils-2.20.51.0.12-new/gold/plugin.cc 2010-10-23 06:03:56.000000000 -0700 +@@ -668,28 +668,50 @@ + break; + } + +- switch (isym->visibility) +- { +- case LDPV_PROTECTED: +- vis = elfcpp::STV_PROTECTED; +- break; +- case LDPV_INTERNAL: +- vis = elfcpp::STV_INTERNAL; +- break; +- case LDPV_HIDDEN: +- vis = elfcpp::STV_HIDDEN; +- break; +- case LDPV_DEFAULT: +- default: +- vis = elfcpp::STV_DEFAULT; +- break; +- } +- + if (isym->comdat_key != NULL + && isym->comdat_key[0] != '\0' + && !this->include_comdat_group(isym->comdat_key, layout)) + shndx = elfcpp::SHN_UNDEF; + ++ if (shndx == elfcpp::SHN_UNDEF) ++ { ++ switch (isym->visibility) ++ { ++ case LDPV_PROTECTED: ++ vis = elfcpp::STV_DEFAULT; ++ break; ++ case LDPV_INTERNAL: ++ vis = elfcpp::STV_DEFAULT; ++ break; ++ case LDPV_HIDDEN: ++ vis = elfcpp::STV_DEFAULT; ++ break; ++ case LDPV_DEFAULT: ++ default: ++ vis = elfcpp::STV_DEFAULT; ++ break; ++ } ++ } ++ else ++ { ++ switch (isym->visibility) ++ { ++ case LDPV_PROTECTED: ++ vis = elfcpp::STV_PROTECTED; ++ break; ++ case LDPV_INTERNAL: ++ vis = elfcpp::STV_INTERNAL; ++ break; ++ case LDPV_HIDDEN: ++ vis = elfcpp::STV_HIDDEN; ++ break; ++ case LDPV_DEFAULT: ++ default: ++ vis = elfcpp::STV_DEFAULT; ++ break; ++ } ++ } ++ + osym.put_st_name(0); + osym.put_st_value(0); + osym.put_st_size(static_cast(isym->size)); From 5f8ade56a4f95ab8e9594ba1d28e242945d57955 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:10:51 +0100 Subject: [PATCH 661/850] ccache: add autoreconf support Signed-off-by: Stephan Raue --- packages/toolchain/devel/ccache/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/toolchain/devel/ccache/meta b/packages/toolchain/devel/ccache/meta index d6fc402577..3408f0f47d 100644 --- a/packages/toolchain/devel/ccache/meta +++ b/packages/toolchain/devel/ccache/meta @@ -12,3 +12,5 @@ PKG_SECTION="toolchain/devel" PKG_SHORTDESC="ccache: A fast compiler cache" PKG_LONGDESC="Ccache is a compiler cache. It speeds up re-compilation of C/C++ code by caching previous compiles and detecting when the same compile is being done again." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 8e4ee2391fa80112447fa72b274ca0f072f7346a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:10:51 +0100 Subject: [PATCH 662/850] cmake: add autoreconf support Signed-off-by: Stephan Raue --- packages/toolchain/devel/cmake/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/toolchain/devel/cmake/meta b/packages/toolchain/devel/cmake/meta index 17914e0ba7..968250112d 100644 --- a/packages/toolchain/devel/cmake/meta +++ b/packages/toolchain/devel/cmake/meta @@ -12,3 +12,5 @@ PKG_SECTION="toolchain/devel" PKG_SHORTDESC="cmake: A cross-platform, open-source make system" PKG_LONGDESC="CMake is used to control the software compilation process using simple platform and compiler independent configuration files. CMake generates native makefiles and workspaces that can be used in the compiler environment of your choice. CMake is quite sophisticated: it is possible to support complex environments requiring system configuration, preprocessor generation, code generation, and template instantiation." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From b48d1e0bfa6a294959708641196d0193cb2fc280 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:10:51 +0100 Subject: [PATCH 663/850] eglibc: add autoreconf support Signed-off-by: Stephan Raue --- packages/toolchain/devel/eglibc/build | 6 ++++-- packages/toolchain/devel/eglibc/meta | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/toolchain/devel/eglibc/build b/packages/toolchain/devel/eglibc/build index c34b0d3554..d262776684 100755 --- a/packages/toolchain/devel/eglibc/build +++ b/packages/toolchain/devel/eglibc/build @@ -2,9 +2,11 @@ . config/options $1 +strip_lto # Fails to compile with GCC's link time optimization. +strip_gold # Fails to compile using the gold linker. + # Filter out some problematic CFLAGS - CFLAGS=`echo $CFLAGS | sed -e "s|-ffast-math||"` - CFLAGS=`echo $CFLAGS | sed -e "s|-Os|-O2|"` + CFLAGS=`echo $CFLAGS | sed -e "s|-ffast-math||" -e "s|-O?||"` # set some CFLAGS we need CFLAGS="$CFLAGS -g -fno-stack-protector" diff --git a/packages/toolchain/devel/eglibc/meta b/packages/toolchain/devel/eglibc/meta index f271846cd2..a60996000b 100644 --- a/packages/toolchain/devel/eglibc/meta +++ b/packages/toolchain/devel/eglibc/meta @@ -13,3 +13,4 @@ PKG_SHORTDESC="eglibc: The Embedded GNU C library" PKG_LONGDESC="The Embedded GLIBC (EGLIBC) is a variant of the GNU C Library (GLIBC) that is designed to work well on embedded systems. EGLIBC strives to be source and binary compatible with GLIBC. EGLIBC's goals include reduced footprint, configurable components, better support for cross-compilation and cross-testing. In contrast to what Ulrich Drepper makes out of GLIBC, in EGLIBC all patches assigned to the FSF will be considered regardless of individual or company affiliation and cooperation is encouraged, as well as communication, civility, and respect among developers." PKG_IS_ADDON="no" +PKG_AUTORECONF="no" From 495d3791e160b15488dcebab886cb6853c08a547 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:10:51 +0100 Subject: [PATCH 664/850] fakeroot: add autoreconf support Signed-off-by: Stephan Raue --- packages/toolchain/devel/fakeroot/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/toolchain/devel/fakeroot/meta b/packages/toolchain/devel/fakeroot/meta index 3fcc041cb9..12f8b73e45 100644 --- a/packages/toolchain/devel/fakeroot/meta +++ b/packages/toolchain/devel/fakeroot/meta @@ -12,3 +12,5 @@ PKG_SECTION="toolchain/devel" PKG_SHORTDESC="fakeroot: provides a fake root environment by means of LD_PRELOAD and SYSV IPC (or TCP) trickery." PKG_LONGDESC="fakeroot provides a fake root environment by means of LD_PRELOAD and SYSV IPC (or TCP) trickery." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 82d54ab63e19b1a00d7a1057fb3bec794949d81d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:10:51 +0100 Subject: [PATCH 665/850] intltool: add autoreconf support Signed-off-by: Stephan Raue --- packages/toolchain/devel/intltool/build | 3 +++ packages/toolchain/devel/intltool/meta | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/toolchain/devel/intltool/build b/packages/toolchain/devel/intltool/build index 047df6151a..911a703e4b 100755 --- a/packages/toolchain/devel/intltool/build +++ b/packages/toolchain/devel/intltool/build @@ -12,3 +12,6 @@ cd $PKG_BUILD --disable-nls make install + +mkdir -p $SYSROOT_PREFIX/usr/share/aclocal + cp intltool.m4 $SYSROOT_PREFIX/usr/share/aclocal \ No newline at end of file diff --git a/packages/toolchain/devel/intltool/meta b/packages/toolchain/devel/intltool/meta index b75012428c..4e302a0861 100644 --- a/packages/toolchain/devel/intltool/meta +++ b/packages/toolchain/devel/intltool/meta @@ -6,9 +6,11 @@ PKG_LICENSE="GPL" PKG_SITE="http://www.gnome.org" PKG_URL="http://ftp.gnome.org/pub/GNOME/sources/intltool/0.40/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="ccache" +PKG_BUILD_DEPENDS="ccache gettext" PKG_PRIORITY="optional" PKG_SECTION="toolchain/devel" PKG_SHORTDESC="intltool: Gnome international tools" PKG_LONGDESC="The Gnome international tools help to handle translation strings from various source files (.xml.in, .glade, .desktop.in, .server.in, .oaf.in)." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 375a1810cd8cc269fe4ad89ca09bf2a71e49aa40 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:10:52 +0100 Subject: [PATCH 666/850] jam: add autoreconf support Signed-off-by: Stephan Raue --- packages/toolchain/devel/jam/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/toolchain/devel/jam/meta b/packages/toolchain/devel/jam/meta index e0f922503b..456f1e219a 100644 --- a/packages/toolchain/devel/jam/meta +++ b/packages/toolchain/devel/jam/meta @@ -12,3 +12,5 @@ PKG_SECTION="toolchain/devel" PKG_SHORTDESC="jam: A make-like program" PKG_LONGDESC="Jam is a portable build tool with its own interpreted language, allowing to implement rather complex logic in a readable way and without resorting to external programs." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 5c3448d44e0160afb984ee657d6182fa96023fa9 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:10:52 +0100 Subject: [PATCH 667/850] libelf: add autoreconf support Signed-off-by: Stephan Raue --- packages/toolchain/devel/libelf/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/toolchain/devel/libelf/meta b/packages/toolchain/devel/libelf/meta index 5657610d6a..cb1e8d32ad 100644 --- a/packages/toolchain/devel/libelf/meta +++ b/packages/toolchain/devel/libelf/meta @@ -12,3 +12,5 @@ PKG_SECTION="toolchain/devel" PKG_SHORTDESC="libelf: ELF object file access library" PKG_LONGDESC="Libelf is a library to access ELF object files." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 3f64da0ad84c659d96271d47cea761954d00bd13 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:10:52 +0100 Subject: [PATCH 668/850] linux-headers: add autoreconf support Signed-off-by: Stephan Raue --- packages/toolchain/devel/linux-headers/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/toolchain/devel/linux-headers/meta b/packages/toolchain/devel/linux-headers/meta index 26e171e279..91ae3970b6 100644 --- a/packages/toolchain/devel/linux-headers/meta +++ b/packages/toolchain/devel/linux-headers/meta @@ -12,3 +12,5 @@ PKG_SECTION="toolchain/devel" PKG_SHORTDESC="linux-headers: "Sanitized" Linux kernel headers" PKG_LONGDESC="This package includes the linux kernel headers (include files) needed to compile applications. The files resist in /usr/include/{asm,asm-generic,linux}." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 5820d149d76e8bda312bbc29aabd2a815c4ba9f2 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:10:52 +0100 Subject: [PATCH 669/850] make: add autoreconf support Signed-off-by: Stephan Raue --- packages/toolchain/devel/make/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/toolchain/devel/make/meta b/packages/toolchain/devel/make/meta index 0133b16ac9..653a278d5e 100644 --- a/packages/toolchain/devel/make/meta +++ b/packages/toolchain/devel/make/meta @@ -12,3 +12,5 @@ PKG_SECTION="toolchain/devel" PKG_SHORTDESC="make: GNU make utility to maintain groups of programs" PKG_LONGDESC="The 'make' utility automatically determines which pieces of a large program need to be recompiled, and issues commands to recompile them. This is GNU 'make', which was implemented by Richard Stallman and Roland McGrath. GNU 'make' conforms to section 6.2 of EEE Standard 1003.2-1992' (POSIX.2)." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 34526bb259e98a3c709ccac1f5b80b763062e50f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:10:52 +0100 Subject: [PATCH 670/850] pkg-config: add autoreconf support Signed-off-by: Stephan Raue --- packages/toolchain/devel/pkg-config/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/toolchain/devel/pkg-config/meta b/packages/toolchain/devel/pkg-config/meta index cc53aa848a..da301f1292 100644 --- a/packages/toolchain/devel/pkg-config/meta +++ b/packages/toolchain/devel/pkg-config/meta @@ -12,3 +12,5 @@ PKG_SECTION="toolchain/devel" PKG_SHORTDESC="pkg-config: A library configuration management system" PKG_LONGDESC="pkg-config is a system for managing library compile/link flags that works with automake and autoconf. It replaces the ubiquitous *-config scripts you may have seen with a single tool." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 04e034939f3743d2d8f9580c2daef67eeeb29468 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:11:24 +0100 Subject: [PATCH 671/850] cloog-ppl: add autoreconf support Signed-off-by: Stephan Raue --- packages/toolchain/math/cloog-ppl/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/toolchain/math/cloog-ppl/meta b/packages/toolchain/math/cloog-ppl/meta index 496eeed10f..c7b71abc31 100644 --- a/packages/toolchain/math/cloog-ppl/meta +++ b/packages/toolchain/math/cloog-ppl/meta @@ -12,3 +12,5 @@ PKG_SECTION="toolchain/math" PKG_SHORTDESC="cloog-ppl: Code Generator in the Polyhedral Model's Home" PKG_LONGDESC="CLooG-PPL is a library to generate code for scanning Z-polyhedra. In other words, it finds code that reaches each integral point of one or more parameterized polyhedra. GCC links with this library in order to enable the new loop generation code known as Graphite." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 6101835cc0c67d697f23703add870e24ed430541 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:11:24 +0100 Subject: [PATCH 672/850] gmp: add autoreconf support Signed-off-by: Stephan Raue --- packages/toolchain/math/gmp/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/toolchain/math/gmp/meta b/packages/toolchain/math/gmp/meta index da8ed0be57..e158fbd2d1 100644 --- a/packages/toolchain/math/gmp/meta +++ b/packages/toolchain/math/gmp/meta @@ -12,3 +12,5 @@ PKG_SECTION="toolchain/math" PKG_SHORTDESC="gmp: The GNU MP (multiple precision arithmetic) library" PKG_LONGDESC="GNU MP is a library for arbitrary precision arithmetic, operating on signed integers, rational numbers, and floating point numbers. It has a rich set of functions, and the functions have a regular interface. GNU MP is designed to be as fast as possible, both for small operands and for huge operands. The speed is achieved by using fullwords as the basic arithmetic type, by using fast algorithms, by carefully optimized assembly code for the most common inner loops for a lots of CPUs, and by a general emphasis on speed (instead of simplicity or elegance). The speed of GNU MP is believed to be faster than any other similar library. The advantage for GNU MP increases with the operand sizes for certain operations, since GNU MP in many cases has asymptotically faster algorithms." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 03099b582312140e3721625e4115b7acac2ac859 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:11:24 +0100 Subject: [PATCH 673/850] mpc: add autoreconf support Signed-off-by: Stephan Raue --- packages/toolchain/math/mpc/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/toolchain/math/mpc/meta b/packages/toolchain/math/mpc/meta index 79ee0f9f34..26fba428cc 100644 --- a/packages/toolchain/math/mpc/meta +++ b/packages/toolchain/math/mpc/meta @@ -12,3 +12,5 @@ PKG_SECTION="toolchain/math" PKG_SHORTDESC="mpc: A C library for the arithmetic of high precision complex numbers" PKG_LONGDESC="pc is a C library for the arithmetic of complex numbers with arbitrarily high precision and correct rounding of the result. It is built upon and follows the same principles as Mpfr." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 072fd94db13057dfdd5b015bfb800a18f58840df Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:11:24 +0100 Subject: [PATCH 674/850] mpfr: add autoreconf support Signed-off-by: Stephan Raue --- packages/toolchain/math/mpfr/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/toolchain/math/mpfr/meta b/packages/toolchain/math/mpfr/meta index 89dfc421a3..b930a90a4b 100644 --- a/packages/toolchain/math/mpfr/meta +++ b/packages/toolchain/math/mpfr/meta @@ -12,3 +12,5 @@ PKG_SECTION="toolchain/math" PKG_SHORTDESC="mpfr: A C library for multiple-precision floating-point computations with exact roundi" PKG_LONGDESC="The MPFR library is a C library for multiple-precision floating-point computations with exact rounding (also called correct rounding). It is based on the GMP multiple-precision library. The main goal of MPFR is to provide a library for multiple-precision floating-point computation which is both efficient and has well-defined semantics. It copies the good ideas from the ANSI/IEEE-754 standard for double-precision floating-point arithmetic (53-bit mantissa)." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From d4d8989cb00bd7584450ae9e1d1d3a6f61ef21a0 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:11:25 +0100 Subject: [PATCH 675/850] ppl: add autoreconf support Signed-off-by: Stephan Raue --- packages/toolchain/math/ppl/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/toolchain/math/ppl/meta b/packages/toolchain/math/ppl/meta index 7d165323cd..13b1e87a3a 100644 --- a/packages/toolchain/math/ppl/meta +++ b/packages/toolchain/math/ppl/meta @@ -12,3 +12,5 @@ PKG_SECTION="toolchain/math" PKG_SHORTDESC="ppl: Parma Polyhedra Library" PKG_LONGDESC="The Parma Polyhedra Library (PPL) provides numerical abstractions especially targeted at applications in the field of analysis and verification of complex systems." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 0752613fa8660890158ba65c4248f0d9fb160f85 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:11:35 +0100 Subject: [PATCH 676/850] sed: add autoreconf support Signed-off-by: Stephan Raue --- packages/toolchain/sysutils/sed/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/toolchain/sysutils/sed/meta b/packages/toolchain/sysutils/sed/meta index c25987a418..72c308413e 100644 --- a/packages/toolchain/sysutils/sed/meta +++ b/packages/toolchain/sysutils/sed/meta @@ -12,3 +12,5 @@ PKG_SECTION="toolchain/sysutils" PKG_SHORTDESC="sed: This is the GNU implementation of the POSIX stream editor" PKG_LONGDESC="The sed (Stream EDitor) editor is a stream or batch (non-interactive) editor. Sed takes text as input, performs an operation or set of operations on the text and outputs the modified text. The operations that sed performs (substitutions, deletions, insertions, etc.) can be specified in a script file or from the command line." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 7c69dcc44521f9feb383175256044a2bc2a7b0bf Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:11:35 +0100 Subject: [PATCH 677/850] squashfs: add autoreconf support Signed-off-by: Stephan Raue --- packages/toolchain/sysutils/squashfs/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/toolchain/sysutils/squashfs/meta b/packages/toolchain/sysutils/squashfs/meta index 22b529c850..9dfaeda153 100644 --- a/packages/toolchain/sysutils/squashfs/meta +++ b/packages/toolchain/sysutils/squashfs/meta @@ -12,3 +12,5 @@ PKG_SECTION="toolchain/sysutils" PKG_SHORTDESC="squashfs-tools: A compressed read-only filesystem for Linux" PKG_LONGDESC="Squashfs is intended to be a general read-only filesystem, for archival use (i.e. in cases where a .tar.gz file may be used), and in constrained block device/memory systems (e.g. embedded systems) where low overhead is needed. The filesystem is currently stable and has been tested on PowerPC, i386, SPARC and ARM architectures." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 3f1e9dfb608804bacc58088d503fb32659b06040 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:11:55 +0100 Subject: [PATCH 678/850] lzma: add autoreconf support Signed-off-by: Stephan Raue --- packages/toolchain/archivers/lzma/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/toolchain/archivers/lzma/meta b/packages/toolchain/archivers/lzma/meta index 90434fb6d8..122f52f2bf 100644 --- a/packages/toolchain/archivers/lzma/meta +++ b/packages/toolchain/archivers/lzma/meta @@ -12,3 +12,5 @@ PKG_SECTION="toolchain/archivers" PKG_SHORTDESC="lzma: A file compression utility using the LZMA algorithm" PKG_LONGDESC="LZMA utils in a nutshell. Average compression ratio of LZMA is about 30% better than that of gzip, and 15% better than that of bzip2. Decompression speed is only little slower than that of gzip, being two to five times faster than bzip2. In fast mode, compresses faster than bzip2 with a comparable compression ratio. However achieving the best compression ratios takes four to even twelve times longer than with bzip2. However, this doesn't affect decompressing speed." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 5e3a25f818087be3ac382709f5d0bdf3b979898f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:12:59 +0100 Subject: [PATCH 679/850] busybox: update to busybox-1.18.0, add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/busybox/build | 4 ++ packages/sysutils/busybox/config/busybox.conf | 66 +++++++++++++------ packages/sysutils/busybox/meta | 4 +- .../busybox-1.18.0-00_halt_no_init.patch | 12 ++++ 4 files changed, 64 insertions(+), 22 deletions(-) create mode 100644 packages/sysutils/busybox/patches/busybox-1.18.0-00_halt_no_init.patch diff --git a/packages/sysutils/busybox/build b/packages/sysutils/busybox/build index 5b71b6ae22..05d9367280 100755 --- a/packages/sysutils/busybox/build +++ b/packages/sysutils/busybox/build @@ -11,6 +11,10 @@ fi # optimize for size CFLAGS=`echo $CFLAGS | sed -e "s|-O?|-Os|"` +# Fails to compile using the gold linker. + LDFLAGS=`echo $LDFLAGS | sed -e "s|-fuse-ld=gold||"` + LDFLAGS=`echo $LDFLAGS | sed -e "s|-fuse-linker-plugin||"` + cd $BUILD/busybox* # Build Busybox for system diff --git a/packages/sysutils/busybox/config/busybox.conf b/packages/sysutils/busybox/config/busybox.conf index eac032f123..1a41ef7974 100644 --- a/packages/sysutils/busybox/config/busybox.conf +++ b/packages/sysutils/busybox/config/busybox.conf @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit -# Busybox version: 1.17.3 -# Thu Oct 28 23:38:16 2010 +# Busybox version: 1.18.0 +# Tue Nov 23 18:26:37 2010 # CONFIG_HAVE_DOT_CONFIG=y @@ -16,6 +16,7 @@ CONFIG_DESKTOP=y # CONFIG_EXTRA_COMPAT is not set # CONFIG_INCLUDE_SUSv2 is not set # CONFIG_USE_PORTABLE_CODE is not set +CONFIG_PLATFORM_LINUX=y # CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set CONFIG_FEATURE_BUFFERS_GO_ON_STACK=y # CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set @@ -23,6 +24,7 @@ CONFIG_SHOW_USAGE=y CONFIG_FEATURE_VERBOSE_USAGE=y # CONFIG_FEATURE_COMPRESS_USAGE is not set # CONFIG_FEATURE_INSTALLER is not set +# CONFIG_INSTALL_NO_USR is not set # CONFIG_LOCALE_SUPPORT is not set CONFIG_UNICODE_SUPPORT=y # CONFIG_UNICODE_USING_LOCALE is not set @@ -37,8 +39,8 @@ CONFIG_LAST_SUPPORTED_WCHAR=767 CONFIG_LONG_OPTS=y CONFIG_FEATURE_DEVPTS=y # CONFIG_FEATURE_CLEAN_UP is not set -CONFIG_FEATURE_UTMP=y CONFIG_FEATURE_WTMP=y +CONFIG_FEATURE_UTMP=y CONFIG_FEATURE_PIDFILE=y CONFIG_FEATURE_SUID=y # CONFIG_FEATURE_SUID_CONFIG is not set @@ -73,9 +75,8 @@ CONFIG_NO_DEBUG_LIB=y # CONFIG_EFENCE is not set # -# Installation Options +# Installation Options ("make install" behavior) # -# CONFIG_INSTALL_NO_USR is not set CONFIG_INSTALL_APPLET_SYMLINKS=y # CONFIG_INSTALL_APPLET_HARDLINKS is not set # CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set @@ -92,6 +93,7 @@ CONFIG_PASSWORD_MINLEN=6 CONFIG_MD5_SIZE_VS_SPEED=1 CONFIG_FEATURE_FAST_TOP=y # CONFIG_FEATURE_ETC_NETWORKS is not set +CONFIG_FEATURE_USE_TERMIOS=y CONFIG_FEATURE_EDITING=y CONFIG_FEATURE_EDITING_MAX_LEN=1024 # CONFIG_FEATURE_EDITING_VI is not set @@ -172,6 +174,7 @@ CONFIG_TEST=y CONFIG_TR=y CONFIG_FEATURE_TR_CLASSES=y CONFIG_FEATURE_TR_EQUIV=y +# CONFIG_BASE64 is not set # CONFIG_CAL is not set # CONFIG_CATV is not set # CONFIG_CHGRP is not set @@ -294,6 +297,10 @@ CONFIG_WHOAMI=y # Common options for df, du, ls # CONFIG_FEATURE_HUMAN_READABLE=y + +# +# Common options for md5sum, sha1sum, sha256sum, sha512sum +# # CONFIG_FEATURE_MD5_SHA1_SUM_CHECK is not set # @@ -338,6 +345,7 @@ CONFIG_WHICH=y # # Editors # +# CONFIG_PATCH is not set CONFIG_AWK=y CONFIG_FEATURE_AWK_LIBM=y # CONFIG_CMP is not set @@ -345,7 +353,6 @@ CONFIG_FEATURE_AWK_LIBM=y # CONFIG_FEATURE_DIFF_LONG_OPTIONS is not set # CONFIG_FEATURE_DIFF_DIR is not set # CONFIG_ED is not set -# CONFIG_PATCH is not set CONFIG_SED=y CONFIG_VI=y CONFIG_FEATURE_VI_MAX_LEN=4096 @@ -405,6 +412,9 @@ CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y CONFIG_BOOTCHARTD=y CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER=y CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE=y +CONFIG_HALT=y +# CONFIG_FEATURE_CALL_TELINIT is not set +CONFIG_TELINIT_PATH="" # CONFIG_INIT is not set # CONFIG_FEATURE_USE_INITTAB is not set # CONFIG_FEATURE_KILL_REMOVED is not set @@ -414,30 +424,30 @@ CONFIG_FEATURE_KILL_DELAY=0 # CONFIG_FEATURE_EXTRA_QUIET is not set # CONFIG_FEATURE_INIT_COREDUMPS is not set # CONFIG_FEATURE_INITRD is not set -CONFIG_HALT=y -# CONFIG_FEATURE_CALL_TELINIT is not set -CONFIG_TELINIT_PATH="" +CONFIG_INIT_TERMINAL_TYPE="" # CONFIG_MESG is not set # # Login/Password Management Utilities # +# CONFIG_ADD_SHELL is not set +# CONFIG_REMOVE_SHELL is not set # CONFIG_FEATURE_SHADOWPASSWDS is not set CONFIG_USE_BB_PWD_GRP=y # CONFIG_USE_BB_SHADOW is not set CONFIG_USE_BB_CRYPT=y CONFIG_USE_BB_CRYPT_SHA=y +# CONFIG_ADDUSER is not set +# CONFIG_FEATURE_ADDUSER_LONG_OPTIONS is not set +# CONFIG_FEATURE_CHECK_NAMES is not set +CONFIG_FIRST_SYSTEM_ID=0 +CONFIG_LAST_SYSTEM_ID=0 # CONFIG_ADDGROUP is not set # CONFIG_FEATURE_ADDGROUP_LONG_OPTIONS is not set # CONFIG_FEATURE_ADDUSER_TO_GROUP is not set +# CONFIG_DELUSER is not set # CONFIG_DELGROUP is not set # CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set -# CONFIG_FEATURE_CHECK_NAMES is not set -# CONFIG_ADDUSER is not set -# CONFIG_FEATURE_ADDUSER_LONG_OPTIONS is not set -CONFIG_FIRST_SYSTEM_ID=0 -CONFIG_LAST_SYSTEM_ID=0 -# CONFIG_DELUSER is not set CONFIG_GETTY=y CONFIG_LOGIN=y # CONFIG_PAM is not set @@ -496,6 +506,7 @@ CONFIG_DEFAULT_DEPMOD_FILE="modules.dep" # # Linux System Utilities # +# CONFIG_BLOCKDEV is not set # CONFIG_REV is not set # CONFIG_ACPID is not set # CONFIG_FEATURE_ACPID_COMPAT is not set @@ -514,6 +525,7 @@ CONFIG_FDISK_SUPPORT_LARGE_DISKS=y # CONFIG_FEATURE_SGI_LABEL is not set # CONFIG_FEATURE_SUN_LABEL is not set # CONFIG_FEATURE_OSF_LABEL is not set +# CONFIG_FEATURE_GPT_LABEL is not set # CONFIG_FEATURE_FDISK_ADVANCED is not set CONFIG_FINDFS=y CONFIG_FLOCK=y @@ -546,7 +558,6 @@ CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y CONFIG_MKSWAP=y CONFIG_FEATURE_MKSWAP_UUID=y CONFIG_MORE=y -CONFIG_FEATURE_USE_TERMIOS=y # CONFIG_MOUNT is not set # CONFIG_FEATURE_MOUNT_FAKE is not set # CONFIG_FEATURE_MOUNT_VERBOSE is not set @@ -599,10 +610,13 @@ CONFIG_FEATURE_VOLUMEID_LINUXRAID=y # Miscellaneous Utilities # # CONFIG_CONSPY is not set +# CONFIG_NANDWRITE is not set +# CONFIG_NANDDUMP is not set # CONFIG_UBIATTACH is not set # CONFIG_UBIDETACH is not set # CONFIG_ADJTIMEX is not set # CONFIG_BBCONFIG is not set +# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set # CONFIG_BEEP is not set CONFIG_FEATURE_BEEP_FREQ=0 CONFIG_FEATURE_BEEP_LENGTH_MS=0 @@ -682,6 +696,7 @@ CONFIG_TTYSIZE=y # # Networking Utilities # +CONFIG_NBDCLIENT=y CONFIG_NC=y # CONFIG_NC_SERVER is not set # CONFIG_NC_EXTRA is not set @@ -717,6 +732,7 @@ CONFIG_HOSTNAME=y # CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set # CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set # CONFIG_FEATURE_HTTPD_PROXY is not set +# CONFIG_FEATURE_HTTPD_GZIP is not set CONFIG_IFCONFIG=y CONFIG_FEATURE_IFCONFIG_STATUS=y # CONFIG_FEATURE_IFCONFIG_SLIP is not set @@ -811,6 +827,7 @@ CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="" # CONFIG_FEATURE_WGET_STATUSBAR is not set # CONFIG_FEATURE_WGET_AUTHENTICATION is not set # CONFIG_FEATURE_WGET_LONG_OPTIONS is not set +# CONFIG_FEATURE_WGET_TIMEOUT is not set # CONFIG_ZCIP is not set # @@ -834,7 +851,11 @@ CONFIG_FEATURE_MIME_CHARSET="" # # Process Utilities # -# CONFIG_SMEMCAP is not set +CONFIG_IOSTAT=y +CONFIG_MPSTAT=y +CONFIG_PMAP=y +CONFIG_POWERTOP=y +CONFIG_SMEMCAP=y CONFIG_FREE=y CONFIG_FUSER=y CONFIG_KILL=y @@ -910,10 +931,13 @@ CONFIG_SV_DEFAULT_SERVICE_DIR="" # CONFIG_ASH_OPTIMIZE_FOR_SIZE is not set # CONFIG_ASH_RANDOM_SUPPORT is not set # CONFIG_ASH_EXPAND_PRMT is not set +# CONFIG_CTTYHACK is not set # CONFIG_HUSH is not set # CONFIG_HUSH_BASH_COMPAT is not set +# CONFIG_HUSH_BRACE_EXPANSION is not set # CONFIG_HUSH_HELP is not set # CONFIG_HUSH_INTERACTIVE is not set +# CONFIG_HUSH_SAVEHISTORY is not set # CONFIG_HUSH_JOB is not set # CONFIG_HUSH_TICK is not set # CONFIG_HUSH_IF is not set @@ -921,22 +945,21 @@ CONFIG_SV_DEFAULT_SERVICE_DIR="" # CONFIG_HUSH_CASE is not set # CONFIG_HUSH_FUNCTIONS is not set # CONFIG_HUSH_LOCAL is not set -# CONFIG_HUSH_EXPORT_N is not set # CONFIG_HUSH_RANDOM_SUPPORT is not set +# CONFIG_HUSH_EXPORT_N is not set +# CONFIG_HUSH_MODE_X is not set +# CONFIG_MSH is not set # CONFIG_FEATURE_SH_IS_ASH is not set # CONFIG_FEATURE_SH_IS_HUSH is not set CONFIG_FEATURE_SH_IS_NONE=y # CONFIG_FEATURE_BASH_IS_ASH is not set # CONFIG_FEATURE_BASH_IS_HUSH is not set CONFIG_FEATURE_BASH_IS_NONE=y -# CONFIG_LASH is not set -# CONFIG_MSH is not set # CONFIG_SH_MATH_SUPPORT is not set # CONFIG_SH_MATH_SUPPORT_64 is not set # CONFIG_FEATURE_SH_EXTRA_QUIET is not set # CONFIG_FEATURE_SH_STANDALONE is not set # CONFIG_FEATURE_SH_NOFORK is not set -# CONFIG_CTTYHACK is not set # # System Logging Utilities @@ -951,4 +974,5 @@ CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=32 CONFIG_LOGREAD=y # CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set CONFIG_KLOGD=y +CONFIG_FEATURE_KLOGD_KLOGCTL=y CONFIG_LOGGER=y diff --git a/packages/sysutils/busybox/meta b/packages/sysutils/busybox/meta index add8f81c84..cf9e57f84a 100644 --- a/packages/sysutils/busybox/meta +++ b/packages/sysutils/busybox/meta @@ -1,5 +1,5 @@ PKG_NAME="busybox" -PKG_VERSION="1.17.3" +PKG_VERSION="1.18.0" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="BusyBox: The Swiss Army Knife of Embedded Linux" PKG_LONGDESC="BusyBox combines tiny versions of many common UNIX utilities into a single small executable. It provides replacements for most of the utilities you usually find in GNU fileutils, shellutils, etc. The utilities in BusyBox generally have fewer options than their full-featured GNU cousins; however, the options that are included provide the expected functionality and behave very much like their GNU counterparts. BusyBox provides a fairly complete environment for any small or embedded system." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" diff --git a/packages/sysutils/busybox/patches/busybox-1.18.0-00_halt_no_init.patch b/packages/sysutils/busybox/patches/busybox-1.18.0-00_halt_no_init.patch new file mode 100644 index 0000000000..ce454f4c07 --- /dev/null +++ b/packages/sysutils/busybox/patches/busybox-1.18.0-00_halt_no_init.patch @@ -0,0 +1,12 @@ +diff -Naur busybox-1.13.2/init/halt.c busybox-1.13.2a/init/halt.c +--- busybox-1.13.2/init/halt.c 2008-11-09 18:28:19.000000000 +0100 ++++ busybox-1.13.2a/init/halt.c 2009-02-01 16:38:37.000000000 +0100 +@@ -79,7 +79,7 @@ + + /* Perform action. */ + rc = 1; +- if (!(flags & 4)) { /* no -f */ ++ if (ENABLE_INIT && !(flags & 4)) { /* no -f */ + //TODO: I tend to think that signalling linuxrc is wrong + // pity original author didn't comment on it... + if (ENABLE_FEATURE_INITRD) { From 5a300b2af60793c007cbd1b7009c23c32e223ce4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:13:11 +0100 Subject: [PATCH 680/850] busybox-initramfs: update to busybox-1.18.0, add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/busybox-initramfs/build | 4 ++ .../config/busybox-initramfs.conf | 64 +++++++++++++------ packages/sysutils/busybox-initramfs/meta | 2 + 3 files changed, 50 insertions(+), 20 deletions(-) diff --git a/packages/sysutils/busybox-initramfs/build b/packages/sysutils/busybox-initramfs/build index 2b84d09ee7..7d24bba7f2 100755 --- a/packages/sysutils/busybox-initramfs/build +++ b/packages/sysutils/busybox-initramfs/build @@ -13,6 +13,10 @@ fi # optimize for size CFLAGS=`echo $CFLAGS | sed -e "s|-O?|-Os|"` +# Fails to compile using the gold linker. +# LDFLAGS=`echo $LDFLAGS | sed -e "s|-fuse-ld=gold||"` +# LDFLAGS=`echo $LDFLAGS | sed -e "s|-fuse-linker-plugin||"` + cd $BUILD/busybox* # Build Busybox for initramfs diff --git a/packages/sysutils/busybox-initramfs/config/busybox-initramfs.conf b/packages/sysutils/busybox-initramfs/config/busybox-initramfs.conf index b01aed5a0b..0d3038fa5e 100644 --- a/packages/sysutils/busybox-initramfs/config/busybox-initramfs.conf +++ b/packages/sysutils/busybox-initramfs/config/busybox-initramfs.conf @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit -# Busybox version: 1.17.3 -# Thu Oct 28 23:39:58 2010 +# Busybox version: 1.18.0 +# Tue Nov 23 18:27:38 2010 # CONFIG_HAVE_DOT_CONFIG=y @@ -16,6 +16,7 @@ CONFIG_HAVE_DOT_CONFIG=y # CONFIG_EXTRA_COMPAT is not set # CONFIG_INCLUDE_SUSv2 is not set # CONFIG_USE_PORTABLE_CODE is not set +CONFIG_PLATFORM_LINUX=y # CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set CONFIG_FEATURE_BUFFERS_GO_ON_STACK=y # CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set @@ -23,6 +24,7 @@ CONFIG_SHOW_USAGE=y CONFIG_FEATURE_VERBOSE_USAGE=y # CONFIG_FEATURE_COMPRESS_USAGE is not set # CONFIG_FEATURE_INSTALLER is not set +# CONFIG_INSTALL_NO_USR is not set # CONFIG_LOCALE_SUPPORT is not set CONFIG_UNICODE_SUPPORT=y # CONFIG_UNICODE_USING_LOCALE is not set @@ -37,8 +39,8 @@ CONFIG_LAST_SUPPORTED_WCHAR=767 # CONFIG_LONG_OPTS is not set CONFIG_FEATURE_DEVPTS=y # CONFIG_FEATURE_CLEAN_UP is not set -# CONFIG_FEATURE_UTMP is not set # CONFIG_FEATURE_WTMP is not set +# CONFIG_FEATURE_UTMP is not set # CONFIG_FEATURE_PIDFILE is not set # CONFIG_FEATURE_SUID is not set # CONFIG_FEATURE_SUID_CONFIG is not set @@ -73,9 +75,8 @@ CONFIG_NO_DEBUG_LIB=y # CONFIG_EFENCE is not set # -# Installation Options +# Installation Options ("make install" behavior) # -CONFIG_INSTALL_NO_USR=y # CONFIG_INSTALL_APPLET_SYMLINKS is not set # CONFIG_INSTALL_APPLET_HARDLINKS is not set # CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set @@ -92,6 +93,7 @@ CONFIG_PASSWORD_MINLEN=6 CONFIG_MD5_SIZE_VS_SPEED=1 CONFIG_FEATURE_FAST_TOP=y # CONFIG_FEATURE_ETC_NETWORKS is not set +# CONFIG_FEATURE_USE_TERMIOS is not set CONFIG_FEATURE_EDITING=y CONFIG_FEATURE_EDITING_MAX_LEN=1024 # CONFIG_FEATURE_EDITING_VI is not set @@ -172,6 +174,7 @@ CONFIG_FEATURE_TEST_64=y # CONFIG_TR is not set # CONFIG_FEATURE_TR_CLASSES is not set # CONFIG_FEATURE_TR_EQUIV is not set +# CONFIG_BASE64 is not set # CONFIG_CAL is not set # CONFIG_CATV is not set # CONFIG_CHGRP is not set @@ -294,6 +297,10 @@ CONFIG_USLEEP=y # Common options for df, du, ls # # CONFIG_FEATURE_HUMAN_READABLE is not set + +# +# Common options for md5sum, sha1sum, sha256sum, sha512sum +# # CONFIG_FEATURE_MD5_SHA1_SUM_CHECK is not set # @@ -338,6 +345,7 @@ CONFIG_DEFAULT_SETFONT_DIR="" # # Editors # +# CONFIG_PATCH is not set # CONFIG_AWK is not set # CONFIG_FEATURE_AWK_LIBM is not set # CONFIG_CMP is not set @@ -345,7 +353,6 @@ CONFIG_DEFAULT_SETFONT_DIR="" # CONFIG_FEATURE_DIFF_LONG_OPTIONS is not set # CONFIG_FEATURE_DIFF_DIR is not set # CONFIG_ED is not set -# CONFIG_PATCH is not set # CONFIG_SED is not set CONFIG_VI=y CONFIG_FEATURE_VI_MAX_LEN=4096 @@ -405,6 +412,9 @@ CONFIG_FEATURE_ALLOW_EXEC=y # CONFIG_BOOTCHARTD is not set # CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set # CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set +CONFIG_HALT=y +# CONFIG_FEATURE_CALL_TELINIT is not set +CONFIG_TELINIT_PATH="" # CONFIG_INIT is not set # CONFIG_FEATURE_USE_INITTAB is not set # CONFIG_FEATURE_KILL_REMOVED is not set @@ -414,30 +424,30 @@ CONFIG_FEATURE_KILL_DELAY=0 # CONFIG_FEATURE_EXTRA_QUIET is not set # CONFIG_FEATURE_INIT_COREDUMPS is not set # CONFIG_FEATURE_INITRD is not set -CONFIG_HALT=y -# CONFIG_FEATURE_CALL_TELINIT is not set -CONFIG_TELINIT_PATH="" +CONFIG_INIT_TERMINAL_TYPE="" # CONFIG_MESG is not set # # Login/Password Management Utilities # +# CONFIG_ADD_SHELL is not set +# CONFIG_REMOVE_SHELL is not set # CONFIG_FEATURE_SHADOWPASSWDS is not set # CONFIG_USE_BB_PWD_GRP is not set # CONFIG_USE_BB_SHADOW is not set # CONFIG_USE_BB_CRYPT is not set # CONFIG_USE_BB_CRYPT_SHA is not set +# CONFIG_ADDUSER is not set +# CONFIG_FEATURE_ADDUSER_LONG_OPTIONS is not set +# CONFIG_FEATURE_CHECK_NAMES is not set +CONFIG_FIRST_SYSTEM_ID=0 +CONFIG_LAST_SYSTEM_ID=0 # CONFIG_ADDGROUP is not set # CONFIG_FEATURE_ADDGROUP_LONG_OPTIONS is not set # CONFIG_FEATURE_ADDUSER_TO_GROUP is not set +# CONFIG_DELUSER is not set # CONFIG_DELGROUP is not set # CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set -# CONFIG_FEATURE_CHECK_NAMES is not set -# CONFIG_ADDUSER is not set -# CONFIG_FEATURE_ADDUSER_LONG_OPTIONS is not set -CONFIG_FIRST_SYSTEM_ID=0 -CONFIG_LAST_SYSTEM_ID=0 -# CONFIG_DELUSER is not set # CONFIG_GETTY is not set # CONFIG_LOGIN is not set # CONFIG_PAM is not set @@ -496,6 +506,7 @@ CONFIG_DEFAULT_DEPMOD_FILE="" # # Linux System Utilities # +# CONFIG_BLOCKDEV is not set # CONFIG_REV is not set # CONFIG_ACPID is not set # CONFIG_FEATURE_ACPID_COMPAT is not set @@ -514,6 +525,7 @@ CONFIG_FDISK_SUPPORT_LARGE_DISKS=y # CONFIG_FEATURE_SGI_LABEL is not set # CONFIG_FEATURE_SUN_LABEL is not set # CONFIG_FEATURE_OSF_LABEL is not set +# CONFIG_FEATURE_GPT_LABEL is not set # CONFIG_FEATURE_FDISK_ADVANCED is not set # CONFIG_FINDFS is not set # CONFIG_FLOCK is not set @@ -546,7 +558,6 @@ CONFIG_FDISK_SUPPORT_LARGE_DISKS=y # CONFIG_MKSWAP is not set # CONFIG_FEATURE_MKSWAP_UUID is not set # CONFIG_MORE is not set -# CONFIG_FEATURE_USE_TERMIOS is not set CONFIG_MOUNT=y CONFIG_FEATURE_MOUNT_FAKE=y # CONFIG_FEATURE_MOUNT_VERBOSE is not set @@ -603,10 +614,13 @@ CONFIG_FEATURE_VOLUMEID_LINUXRAID=y # Miscellaneous Utilities # # CONFIG_CONSPY is not set +# CONFIG_NANDWRITE is not set +# CONFIG_NANDDUMP is not set # CONFIG_UBIATTACH is not set # CONFIG_UBIDETACH is not set # CONFIG_ADJTIMEX is not set # CONFIG_BBCONFIG is not set +# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set # CONFIG_BEEP is not set CONFIG_FEATURE_BEEP_FREQ=0 CONFIG_FEATURE_BEEP_LENGTH_MS=0 @@ -686,6 +700,7 @@ CONFIG_FEATURE_LESS_MAXLINES=0 # # Networking Utilities # +# CONFIG_NBDCLIENT is not set # CONFIG_NC is not set # CONFIG_NC_SERVER is not set # CONFIG_NC_EXTRA is not set @@ -721,6 +736,7 @@ CONFIG_FEATURE_LESS_MAXLINES=0 # CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set # CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set # CONFIG_FEATURE_HTTPD_PROXY is not set +# CONFIG_FEATURE_HTTPD_GZIP is not set # CONFIG_IFCONFIG is not set # CONFIG_FEATURE_IFCONFIG_STATUS is not set # CONFIG_FEATURE_IFCONFIG_SLIP is not set @@ -815,6 +831,7 @@ CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="" # CONFIG_FEATURE_WGET_STATUSBAR is not set # CONFIG_FEATURE_WGET_AUTHENTICATION is not set # CONFIG_FEATURE_WGET_LONG_OPTIONS is not set +# CONFIG_FEATURE_WGET_TIMEOUT is not set # CONFIG_ZCIP is not set # @@ -838,6 +855,10 @@ CONFIG_FEATURE_MIME_CHARSET="" # # Process Utilities # +# CONFIG_IOSTAT is not set +# CONFIG_MPSTAT is not set +# CONFIG_PMAP is not set +# CONFIG_POWERTOP is not set # CONFIG_SMEMCAP is not set # CONFIG_FREE is not set # CONFIG_FUSER is not set @@ -914,10 +935,13 @@ CONFIG_ASH_BUILTIN_TEST=y # CONFIG_ASH_OPTIMIZE_FOR_SIZE is not set # CONFIG_ASH_RANDOM_SUPPORT is not set # CONFIG_ASH_EXPAND_PRMT is not set +# CONFIG_CTTYHACK is not set # CONFIG_HUSH is not set # CONFIG_HUSH_BASH_COMPAT is not set +# CONFIG_HUSH_BRACE_EXPANSION is not set # CONFIG_HUSH_HELP is not set # CONFIG_HUSH_INTERACTIVE is not set +# CONFIG_HUSH_SAVEHISTORY is not set # CONFIG_HUSH_JOB is not set # CONFIG_HUSH_TICK is not set # CONFIG_HUSH_IF is not set @@ -925,22 +949,21 @@ CONFIG_ASH_BUILTIN_TEST=y # CONFIG_HUSH_CASE is not set # CONFIG_HUSH_FUNCTIONS is not set # CONFIG_HUSH_LOCAL is not set -# CONFIG_HUSH_EXPORT_N is not set # CONFIG_HUSH_RANDOM_SUPPORT is not set +# CONFIG_HUSH_EXPORT_N is not set +# CONFIG_HUSH_MODE_X is not set +# CONFIG_MSH is not set CONFIG_FEATURE_SH_IS_ASH=y # CONFIG_FEATURE_SH_IS_HUSH is not set # CONFIG_FEATURE_SH_IS_NONE is not set CONFIG_FEATURE_BASH_IS_ASH=y # CONFIG_FEATURE_BASH_IS_HUSH is not set # CONFIG_FEATURE_BASH_IS_NONE is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set CONFIG_SH_MATH_SUPPORT=y # CONFIG_SH_MATH_SUPPORT_64 is not set CONFIG_FEATURE_SH_EXTRA_QUIET=y CONFIG_FEATURE_SH_STANDALONE=y # CONFIG_FEATURE_SH_NOFORK is not set -# CONFIG_CTTYHACK is not set # # System Logging Utilities @@ -955,4 +978,5 @@ CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=0 # CONFIG_LOGREAD is not set # CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set # CONFIG_KLOGD is not set +# CONFIG_FEATURE_KLOGD_KLOGCTL is not set # CONFIG_LOGGER is not set diff --git a/packages/sysutils/busybox-initramfs/meta b/packages/sysutils/busybox-initramfs/meta index af15c3c461..efa30aac56 100644 --- a/packages/sysutils/busybox-initramfs/meta +++ b/packages/sysutils/busybox-initramfs/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="BusyBox: The Swiss Army Knife of Embedded Linux" PKG_LONGDESC="BusyBox combines tiny versions of many common UNIX utilities into a single small executable. It provides replacements for most of the utilities you usually find in GNU fileutils, shellutils, etc. The utilities in BusyBox generally have fewer options than their full-featured GNU cousins; however, the options that are included provide the expected functionality and behave very much like their GNU counterparts. BusyBox provides a fairly complete environment for any small or embedded system." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From e8f37608eccfb6722730a3607caee2c031b9e8ac Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:13:25 +0100 Subject: [PATCH 681/850] busybox-hosttools: update to busybox-1.18.0, add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/busybox-hosttools/build | 7 ++- .../config/busybox-hosttools.conf | 60 ++++++++++++------- packages/sysutils/busybox-hosttools/meta | 2 + 3 files changed, 48 insertions(+), 21 deletions(-) diff --git a/packages/sysutils/busybox-hosttools/build b/packages/sysutils/busybox-hosttools/build index 85f48a939f..285fe007b6 100755 --- a/packages/sysutils/busybox-hosttools/build +++ b/packages/sysutils/busybox-hosttools/build @@ -14,5 +14,10 @@ cd $BUILD/busybox* ARCH=$TARGET_ARCH make CROSS_COMPILE="" install mkdir -p $ROOT/$TOOLCHAIN/bin - cp -R _install-hosttools/* $ROOT/$TOOLCHAIN + cp -R _install-hosttools/bin/* $ROOT/$TOOLCHAIN/bin chmod 4755 $ROOT/$TOOLCHAIN/bin/busybox + ln -sf busybox $ROOT/$TOOLCHAIN/bin/cryptpw + ln -sf busybox $ROOT/$TOOLCHAIN/bin/mkpasswd + + mkdir -p $ROOT/$TOOLCHAIN/sbin + ln -sf ../bin/busybox $ROOT/$TOOLCHAIN/sbin/depmod diff --git a/packages/sysutils/busybox-hosttools/config/busybox-hosttools.conf b/packages/sysutils/busybox-hosttools/config/busybox-hosttools.conf index 1e32ee95b6..3a9b3dd096 100644 --- a/packages/sysutils/busybox-hosttools/config/busybox-hosttools.conf +++ b/packages/sysutils/busybox-hosttools/config/busybox-hosttools.conf @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit -# Busybox version: 1.17.0 -# Tue Jul 27 12:32:00 2010 +# Busybox version: 1.18.0 +# Tue Nov 23 18:28:14 2010 # CONFIG_HAVE_DOT_CONFIG=y @@ -16,6 +16,7 @@ CONFIG_HAVE_DOT_CONFIG=y # CONFIG_EXTRA_COMPAT is not set # CONFIG_INCLUDE_SUSv2 is not set # CONFIG_USE_PORTABLE_CODE is not set +CONFIG_PLATFORM_LINUX=y # CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set CONFIG_FEATURE_BUFFERS_GO_ON_STACK=y # CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set @@ -23,6 +24,7 @@ CONFIG_SHOW_USAGE=y CONFIG_FEATURE_VERBOSE_USAGE=y # CONFIG_FEATURE_COMPRESS_USAGE is not set # CONFIG_FEATURE_INSTALLER is not set +CONFIG_INSTALL_NO_USR=y # CONFIG_LOCALE_SUPPORT is not set CONFIG_UNICODE_SUPPORT=y # CONFIG_UNICODE_USING_LOCALE is not set @@ -37,8 +39,8 @@ CONFIG_LAST_SUPPORTED_WCHAR=767 # CONFIG_LONG_OPTS is not set # CONFIG_FEATURE_DEVPTS is not set # CONFIG_FEATURE_CLEAN_UP is not set -# CONFIG_FEATURE_UTMP is not set # CONFIG_FEATURE_WTMP is not set +# CONFIG_FEATURE_UTMP is not set # CONFIG_FEATURE_PIDFILE is not set # CONFIG_FEATURE_SUID is not set # CONFIG_FEATURE_SUID_CONFIG is not set @@ -73,9 +75,8 @@ CONFIG_NO_DEBUG_LIB=y # CONFIG_EFENCE is not set # -# Installation Options +# Installation Options ("make install" behavior) # -CONFIG_INSTALL_NO_USR=y CONFIG_INSTALL_APPLET_SYMLINKS=y # CONFIG_INSTALL_APPLET_HARDLINKS is not set # CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set @@ -92,6 +93,7 @@ CONFIG_PASSWORD_MINLEN=6 CONFIG_MD5_SIZE_VS_SPEED=1 CONFIG_FEATURE_FAST_TOP=y # CONFIG_FEATURE_ETC_NETWORKS is not set +# CONFIG_FEATURE_USE_TERMIOS is not set CONFIG_FEATURE_EDITING=y CONFIG_FEATURE_EDITING_MAX_LEN=1024 # CONFIG_FEATURE_EDITING_VI is not set @@ -172,6 +174,7 @@ CONFIG_MONOTONIC_SYSCALL=y # CONFIG_TR is not set # CONFIG_FEATURE_TR_CLASSES is not set # CONFIG_FEATURE_TR_EQUIV is not set +# CONFIG_BASE64 is not set # CONFIG_CAL is not set # CONFIG_CATV is not set # CONFIG_CHGRP is not set @@ -326,6 +329,7 @@ CONFIG_DEFAULT_SETFONT_DIR="" # # Editors # +# CONFIG_PATCH is not set # CONFIG_AWK is not set # CONFIG_FEATURE_AWK_LIBM is not set # CONFIG_CMP is not set @@ -333,7 +337,6 @@ CONFIG_DEFAULT_SETFONT_DIR="" # CONFIG_FEATURE_DIFF_LONG_OPTIONS is not set # CONFIG_FEATURE_DIFF_DIR is not set # CONFIG_ED is not set -# CONFIG_PATCH is not set # CONFIG_SED is not set # CONFIG_VI is not set CONFIG_FEATURE_VI_MAX_LEN=0 @@ -393,6 +396,9 @@ CONFIG_FEATURE_VI_MAX_LEN=0 # CONFIG_BOOTCHARTD is not set # CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set # CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set +# CONFIG_HALT is not set +# CONFIG_FEATURE_CALL_TELINIT is not set +CONFIG_TELINIT_PATH="" # CONFIG_INIT is not set # CONFIG_FEATURE_USE_INITTAB is not set # CONFIG_FEATURE_KILL_REMOVED is not set @@ -402,30 +408,30 @@ CONFIG_FEATURE_KILL_DELAY=0 # CONFIG_FEATURE_EXTRA_QUIET is not set # CONFIG_FEATURE_INIT_COREDUMPS is not set # CONFIG_FEATURE_INITRD is not set -# CONFIG_HALT is not set -# CONFIG_FEATURE_CALL_TELINIT is not set -CONFIG_TELINIT_PATH="" +CONFIG_INIT_TERMINAL_TYPE="" # CONFIG_MESG is not set # # Login/Password Management Utilities # +# CONFIG_ADD_SHELL is not set +# CONFIG_REMOVE_SHELL is not set # CONFIG_FEATURE_SHADOWPASSWDS is not set # CONFIG_USE_BB_PWD_GRP is not set # CONFIG_USE_BB_SHADOW is not set # CONFIG_USE_BB_CRYPT is not set # CONFIG_USE_BB_CRYPT_SHA is not set +# CONFIG_ADDUSER is not set +# CONFIG_FEATURE_ADDUSER_LONG_OPTIONS is not set +# CONFIG_FEATURE_CHECK_NAMES is not set +CONFIG_FIRST_SYSTEM_ID=0 +CONFIG_LAST_SYSTEM_ID=0 # CONFIG_ADDGROUP is not set # CONFIG_FEATURE_ADDGROUP_LONG_OPTIONS is not set # CONFIG_FEATURE_ADDUSER_TO_GROUP is not set +# CONFIG_DELUSER is not set # CONFIG_DELGROUP is not set # CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set -# CONFIG_FEATURE_CHECK_NAMES is not set -# CONFIG_ADDUSER is not set -# CONFIG_FEATURE_ADDUSER_LONG_OPTIONS is not set -CONFIG_FIRST_SYSTEM_ID=0 -CONFIG_LAST_SYSTEM_ID=0 -# CONFIG_DELUSER is not set # CONFIG_GETTY is not set # CONFIG_LOGIN is not set # CONFIG_PAM is not set @@ -484,6 +490,7 @@ CONFIG_DEFAULT_DEPMOD_FILE="modules.dep" # # Linux System Utilities # +# CONFIG_BLOCKDEV is not set # CONFIG_REV is not set # CONFIG_ACPID is not set # CONFIG_FEATURE_ACPID_COMPAT is not set @@ -502,6 +509,7 @@ CONFIG_FDISK_SUPPORT_LARGE_DISKS=y # CONFIG_FEATURE_SGI_LABEL is not set # CONFIG_FEATURE_SUN_LABEL is not set # CONFIG_FEATURE_OSF_LABEL is not set +# CONFIG_FEATURE_GPT_LABEL is not set # CONFIG_FEATURE_FDISK_ADVANCED is not set # CONFIG_FINDFS is not set # CONFIG_FLOCK is not set @@ -534,7 +542,6 @@ CONFIG_FDISK_SUPPORT_LARGE_DISKS=y # CONFIG_MKSWAP is not set # CONFIG_FEATURE_MKSWAP_UUID is not set # CONFIG_MORE is not set -# CONFIG_FEATURE_USE_TERMIOS is not set # CONFIG_MOUNT is not set # CONFIG_FEATURE_MOUNT_FAKE is not set # CONFIG_FEATURE_MOUNT_VERBOSE is not set @@ -583,10 +590,13 @@ CONFIG_FDISK_SUPPORT_LARGE_DISKS=y # Miscellaneous Utilities # # CONFIG_CONSPY is not set +# CONFIG_NANDWRITE is not set +# CONFIG_NANDDUMP is not set # CONFIG_UBIATTACH is not set # CONFIG_UBIDETACH is not set # CONFIG_ADJTIMEX is not set # CONFIG_BBCONFIG is not set +# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set # CONFIG_BEEP is not set CONFIG_FEATURE_BEEP_FREQ=0 CONFIG_FEATURE_BEEP_LENGTH_MS=0 @@ -666,6 +676,7 @@ CONFIG_FEATURE_LESS_MAXLINES=0 # # Networking Utilities # +# CONFIG_NBDCLIENT is not set # CONFIG_NC is not set # CONFIG_NC_SERVER is not set # CONFIG_NC_EXTRA is not set @@ -701,6 +712,7 @@ CONFIG_FEATURE_LESS_MAXLINES=0 # CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set # CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set # CONFIG_FEATURE_HTTPD_PROXY is not set +# CONFIG_FEATURE_HTTPD_GZIP is not set # CONFIG_IFCONFIG is not set # CONFIG_FEATURE_IFCONFIG_STATUS is not set # CONFIG_FEATURE_IFCONFIG_SLIP is not set @@ -795,6 +807,7 @@ CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="" # CONFIG_FEATURE_WGET_STATUSBAR is not set # CONFIG_FEATURE_WGET_AUTHENTICATION is not set # CONFIG_FEATURE_WGET_LONG_OPTIONS is not set +# CONFIG_FEATURE_WGET_TIMEOUT is not set # CONFIG_ZCIP is not set # @@ -818,6 +831,10 @@ CONFIG_FEATURE_MIME_CHARSET="" # # Process Utilities # +# CONFIG_IOSTAT is not set +# CONFIG_MPSTAT is not set +# CONFIG_PMAP is not set +# CONFIG_POWERTOP is not set # CONFIG_SMEMCAP is not set # CONFIG_FREE is not set # CONFIG_FUSER is not set @@ -894,10 +911,13 @@ CONFIG_SV_DEFAULT_SERVICE_DIR="" # CONFIG_ASH_OPTIMIZE_FOR_SIZE is not set # CONFIG_ASH_RANDOM_SUPPORT is not set # CONFIG_ASH_EXPAND_PRMT is not set +# CONFIG_CTTYHACK is not set # CONFIG_HUSH is not set # CONFIG_HUSH_BASH_COMPAT is not set +# CONFIG_HUSH_BRACE_EXPANSION is not set # CONFIG_HUSH_HELP is not set # CONFIG_HUSH_INTERACTIVE is not set +# CONFIG_HUSH_SAVEHISTORY is not set # CONFIG_HUSH_JOB is not set # CONFIG_HUSH_TICK is not set # CONFIG_HUSH_IF is not set @@ -905,22 +925,21 @@ CONFIG_SV_DEFAULT_SERVICE_DIR="" # CONFIG_HUSH_CASE is not set # CONFIG_HUSH_FUNCTIONS is not set # CONFIG_HUSH_LOCAL is not set -# CONFIG_HUSH_EXPORT_N is not set # CONFIG_HUSH_RANDOM_SUPPORT is not set +# CONFIG_HUSH_EXPORT_N is not set +# CONFIG_HUSH_MODE_X is not set +# CONFIG_MSH is not set # CONFIG_FEATURE_SH_IS_ASH is not set # CONFIG_FEATURE_SH_IS_HUSH is not set CONFIG_FEATURE_SH_IS_NONE=y # CONFIG_FEATURE_BASH_IS_ASH is not set # CONFIG_FEATURE_BASH_IS_HUSH is not set CONFIG_FEATURE_BASH_IS_NONE=y -# CONFIG_LASH is not set -# CONFIG_MSH is not set # CONFIG_SH_MATH_SUPPORT is not set # CONFIG_SH_MATH_SUPPORT_64 is not set # CONFIG_FEATURE_SH_EXTRA_QUIET is not set # CONFIG_FEATURE_SH_STANDALONE is not set # CONFIG_FEATURE_SH_NOFORK is not set -# CONFIG_CTTYHACK is not set # # System Logging Utilities @@ -935,4 +954,5 @@ CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=0 # CONFIG_LOGREAD is not set # CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set # CONFIG_KLOGD is not set +# CONFIG_FEATURE_KLOGD_KLOGCTL is not set # CONFIG_LOGGER is not set diff --git a/packages/sysutils/busybox-hosttools/meta b/packages/sysutils/busybox-hosttools/meta index 0b1f9273ab..e68816fdd4 100644 --- a/packages/sysutils/busybox-hosttools/meta +++ b/packages/sysutils/busybox-hosttools/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="BusyBox: The Swiss Army Knife of Embedded Linux" PKG_LONGDESC="BusyBox combines tiny versions of many common UNIX utilities into a single small executable. It provides replacements for most of the utilities you usually find in GNU fileutils, shellutils, etc. The utilities in BusyBox generally have fewer options than their full-featured GNU cousins; however, the options that are included provide the expected functionality and behave very much like their GNU counterparts. BusyBox provides a fairly complete environment for any small or embedded system." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 17783293c67f06da7175d256226d385dbeaa839a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:14:31 +0100 Subject: [PATCH 682/850] wiiuse: rename patches, use proper $PKG_BUILD variable, add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/wiiuse/build | 2 +- packages/sysutils/wiiuse/install | 2 +- packages/sysutils/wiiuse/meta | 6 ++++-- ....12-connect-0.1.patch => wiiuse-v0.12-connect-0.1.patch} | 0 ...ling-0.1.patch => wiiuse-v0.12-crosscompiling-0.1.patch} | 0 5 files changed, 6 insertions(+), 4 deletions(-) rename packages/sysutils/wiiuse/patches/{wiiuse-0.12-connect-0.1.patch => wiiuse-v0.12-connect-0.1.patch} (100%) rename packages/sysutils/wiiuse/patches/{wiiuse-0.12-crosscompiling-0.1.patch => wiiuse-v0.12-crosscompiling-0.1.patch} (100%) diff --git a/packages/sysutils/wiiuse/build b/packages/sysutils/wiiuse/build index a0ce8b29a8..1da091b916 100755 --- a/packages/sysutils/wiiuse/build +++ b/packages/sysutils/wiiuse/build @@ -2,7 +2,7 @@ . config/options $1 -cd $BUILD/${PKG_NAME}_v${PKG_VERSION} +cd $PKG_BUILD make wiiuse diff --git a/packages/sysutils/wiiuse/install b/packages/sysutils/wiiuse/install index aa4f48b3c1..b02e898372 100755 --- a/packages/sysutils/wiiuse/install +++ b/packages/sysutils/wiiuse/install @@ -3,4 +3,4 @@ . config/options $1 mkdir -p $INSTALL/usr/lib - cp -PR $BUILD/${PKG_NAME}_v${PKG_VERSION}/src/release*/*.so $INSTALL/usr/lib + cp -PR $PKG_BUILD/src/release*/*.so $INSTALL/usr/lib diff --git a/packages/sysutils/wiiuse/meta b/packages/sysutils/wiiuse/meta index c377328e06..957b07f5c9 100644 --- a/packages/sysutils/wiiuse/meta +++ b/packages/sysutils/wiiuse/meta @@ -1,10 +1,10 @@ PKG_NAME="wiiuse" -PKG_VERSION="0.12" +PKG_VERSION="v0.12" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv3" PKG_SITE="http://www.wiiuse.net/" -PKG_URL="http://downloads.sourceforge.net/project/wiiuse/wiiuse/v0.12/wiiuse_v0.12_src.tar.gz" +PKG_URL="http://downloads.sourceforge.net/project/wiiuse/wiiuse/$PKG_VERSION/${PKG_NAME}_${PKG_VERSION}_src.tar.gz" PKG_DEPENDS="bluez" PKG_BUILD_DEPENDS="toolchain bluez" PKG_PRIORITY="optional" @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="Wiiuse is a library written in C that connects with several Nintendo Wii remotes." PKG_LONGDESC="Wiiuse is a library written in C that connects with several Nintendo Wii remotes. Supports motion sensing, IR tracking, nunchuk, classic controller, and the Guitar Hero 3 controller. Single threaded and nonblocking makes a light weight and clean API." PKG_IS_ADDON="yes" + +PKG_AUTORECONF="no" diff --git a/packages/sysutils/wiiuse/patches/wiiuse-0.12-connect-0.1.patch b/packages/sysutils/wiiuse/patches/wiiuse-v0.12-connect-0.1.patch similarity index 100% rename from packages/sysutils/wiiuse/patches/wiiuse-0.12-connect-0.1.patch rename to packages/sysutils/wiiuse/patches/wiiuse-v0.12-connect-0.1.patch diff --git a/packages/sysutils/wiiuse/patches/wiiuse-0.12-crosscompiling-0.1.patch b/packages/sysutils/wiiuse/patches/wiiuse-v0.12-crosscompiling-0.1.patch similarity index 100% rename from packages/sysutils/wiiuse/patches/wiiuse-0.12-crosscompiling-0.1.patch rename to packages/sysutils/wiiuse/patches/wiiuse-v0.12-crosscompiling-0.1.patch From c6ffda035e68f4d2ced07a09cc2fa1a04ee15924 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:15:07 +0100 Subject: [PATCH 683/850] atvclient: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/remote/atvclient/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/remote/atvclient/meta b/packages/sysutils/remote/atvclient/meta index 2b9d6d7f96..678993e2cc 100644 --- a/packages/sysutils/remote/atvclient/meta +++ b/packages/sysutils/remote/atvclient/meta @@ -12,3 +12,5 @@ PKG_SECTION="system/remote" PKG_SHORTDESC="atvclient: a background application for Linux that reads input from the AppleTV’s internal infra-red receiver" PKG_LONGDESC="atvclient is a background application for Linux that reads input from the AppleTV’s internal infra-red receiver and submits it to XBMC in a way very similar to how XBMCHelper does this under the native AppleTV OS. It implements most of the functionality the ATV OS HID driver supports, including pairing and control of the status LED." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From e16b0ebd18143b0df5c4a8dbc37c50d978614847 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:15:07 +0100 Subject: [PATCH 684/850] eventlircd: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/remote/eventlircd/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/remote/eventlircd/meta b/packages/sysutils/remote/eventlircd/meta index a18ae143d6..02175a4907 100644 --- a/packages/sysutils/remote/eventlircd/meta +++ b/packages/sysutils/remote/eventlircd/meta @@ -12,3 +12,5 @@ PKG_SECTION="system/remote" PKG_SHORTDESC="eventlircd:The eventlircd daemon provides various functions for LIRC devices" PKG_LONGDESC="The eventlircd daemon provides four functions for LIRC devices" PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From c309ff1fa71f02c45cd3b5011bd877302d975021 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:15:07 +0100 Subject: [PATCH 685/850] irserver: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/remote/irserver/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/remote/irserver/meta b/packages/sysutils/remote/irserver/meta index 5d143bf852..6d90ebbf9a 100644 --- a/packages/sysutils/remote/irserver/meta +++ b/packages/sysutils/remote/irserver/meta @@ -12,3 +12,5 @@ PKG_SECTION="sysutils/remote" PKG_SHORTDESC="irserver: IR Trans transforms your PC into a programmable remote control." PKG_LONGDESC="IR Trans transforms your PC into a programmable remote control: It learns the codes of your remote control, stores them in a database and sends them controlled by your applications." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From dc35f7054eacfd7e4768ae277064845943961cdd Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:15:07 +0100 Subject: [PATCH 686/850] lirc: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/remote/lirc/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/remote/lirc/meta b/packages/sysutils/remote/lirc/meta index 4e946bf0d6..0270fdf713 100644 --- a/packages/sysutils/remote/lirc/meta +++ b/packages/sysutils/remote/lirc/meta @@ -12,3 +12,5 @@ PKG_SECTION="sysutils/remote" PKG_SHORTDESC="lirc: Linux Infrared Remote Control" PKG_LONGDESC="LIRC is a package that allows you to decode and send infra-red signals of many (but not all) commonly used remote controls." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From c024c70cc8dcf4cfbcc5b2124827106893a99981 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:15:08 +0100 Subject: [PATCH 687/850] meta: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/remote/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/remote/meta b/packages/sysutils/remote/meta index 31c2e418fb..b1fefb37c1 100644 --- a/packages/sysutils/remote/meta +++ b/packages/sysutils/remote/meta @@ -13,6 +13,8 @@ PKG_SHORTDESC="remote: Meta package for installing various tools needed for remo PKG_LONGDESC="Meta package for installing various tools needed for remote support" PKG_IS_ADDON="no" +PKG_AUTORECONF="no" + if [ "$ATVCLIENT_SUPPORT" = "yes" ]; then PKG_DEPENDS="$PKG_DEPENDS atvclient" fi From fb67752fd9f89aad96f327bed1650c5038dccda7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:02 +0100 Subject: [PATCH 688/850] acpid: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/acpid/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/acpid/meta b/packages/sysutils/acpid/meta index 13e33baaf1..2da5636227 100644 --- a/packages/sysutils/acpid/meta +++ b/packages/sysutils/acpid/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="acpid: A daemon for delivering ACPI events" PKG_LONGDESC="ACPID is a completely flexible and expandable mechanism for delivering ACPI events from the kernel to user-space. It can be configured to perform any action at all when events occur, through regex matches and arbitrary action rules." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From b4012ecbd195f93d40fe13646088b57d0f17f9a2 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:02 +0100 Subject: [PATCH 689/850] bash: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/bash/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/bash/meta b/packages/sysutils/bash/meta index 06dddcb548..6ac1f5cc90 100644 --- a/packages/sysutils/bash/meta +++ b/packages/sysutils/bash/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="bash: Bourne Again Shell" PKG_LONGDESC="Bash is the shell, or command language interpreter, that will appear in the GNU operating system. Bash is an sh-compatible shell that incorporates useful features from the Korn shell (ksh) and C shell (csh). It is intended to conform to the IEEE POSIX P1003.2/ISO 9945.2 Shell and Tools standard. It offers functional improvements over sh for both programming and interactive use. In addition, most sh scripts can be run by Bash without modification." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From e11f7ed7046819862f5d88d4f488b7aee18fc3dd Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:03 +0100 Subject: [PATCH 690/850] ConsoleKit: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/ConsoleKit/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sysutils/ConsoleKit/meta b/packages/sysutils/ConsoleKit/meta index f7d33e1703..7869f3b54e 100644 --- a/packages/sysutils/ConsoleKit/meta +++ b/packages/sysutils/ConsoleKit/meta @@ -13,4 +13,4 @@ PKG_SHORTDESC="ConsoleKit: a framework for defining and tracking users, login se PKG_LONGDESC="ConsoleKit is a framework for defining and tracking users, login sessions, and seats." PKG_IS_ADDON="no" - +PKG_AUTORECONF="yes" From 5975bf41525eae5c41b464178d68d92535ab1b3d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:03 +0100 Subject: [PATCH 691/850] dbus: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/dbus/build | 5 +---- packages/sysutils/dbus/meta | 2 ++ 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/sysutils/dbus/build b/packages/sysutils/dbus/build index eb46a4078f..130d005b56 100755 --- a/packages/sysutils/dbus/build +++ b/packages/sysutils/dbus/build @@ -5,10 +5,7 @@ export ac_cv_have_abstract_sockets=yes cd $PKG_BUILD - -mkdir -p .build-target -cd .build-target - +mkdir -p .build-target && cd .build-target ../configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ diff --git a/packages/sysutils/dbus/meta b/packages/sysutils/dbus/meta index 4ecf70f966..ab53e31a17 100644 --- a/packages/sysutils/dbus/meta +++ b/packages/sysutils/dbus/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="dbus: simple interprocess messaging system" PKG_LONGDESC="D-Bus is a message bus, used for sending messages between applications. This package contains the D-Bus daemon and related utilities and the dbus shared library." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 0eb60f0f1e480e73f0accd00d8efba8b7d929b3d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:03 +0100 Subject: [PATCH 692/850] dbus-host: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/dbus-host/build | 5 +++-- packages/sysutils/dbus-host/meta | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/sysutils/dbus-host/build b/packages/sysutils/dbus-host/build index a25feafcb4..0824bf6000 100755 --- a/packages/sysutils/dbus-host/build +++ b/packages/sysutils/dbus-host/build @@ -9,9 +9,10 @@ DBUS_DIR=`ls -d $BUILD/dbus-[0-9]*` setup_toolchain host cd $DBUS_DIR -mkdir -p .build-host -cd .build-host +do_autoreconf + +mkdir -p .build-host && cd .build-host ../configure --prefix=$ROOT/$TOOLCHAIN \ --sysconfdir=$ROOT/$TOOLCHAIN/etc \ --disable-tests \ diff --git a/packages/sysutils/dbus-host/meta b/packages/sysutils/dbus-host/meta index d67cc3be45..f9fd23c1fa 100644 --- a/packages/sysutils/dbus-host/meta +++ b/packages/sysutils/dbus-host/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="dbus: simple interprocess messaging system" PKG_LONGDESC="D-Bus is a message bus, used for sending messages between applications. This package contains the D-Bus daemon and related utilities and the dbus shared library." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 33d2c3a768f4ca2c7fba419df5025c18f8238295 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:03 +0100 Subject: [PATCH 693/850] dmidecode: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/dmidecode/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/dmidecode/meta b/packages/sysutils/dmidecode/meta index 6556d79867..c43e22c3d9 100644 --- a/packages/sysutils/dmidecode/meta +++ b/packages/sysutils/dmidecode/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="dmidecode: Reports BIOS information according to the SMBIOS/DMI standard" PKG_LONGDESC="Reports BIOS information according to the SMBIOS/DMI standard, typically including system manufactor, model name, serial number and a lot of other details of varying level of interest and reliability." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 208fe3cafeee99455f9d89a6efe08ca26e10cf48 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:03 +0100 Subject: [PATCH 694/850] fuse: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/fuse/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/fuse/meta b/packages/sysutils/fuse/meta index cb829f4022..95bda618e1 100644 --- a/packages/sysutils/fuse/meta +++ b/packages/sysutils/fuse/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="fuse: A simple user-space filesystem interface for Linux" PKG_LONGDESC="FUSE provides a simple interface for userspace programs to export a virtual filesystem to the Linux kernel. FUSE also aims to provide a secure method for non privileged users to create and mount their own filesystem implementations." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 30e169c026c6103852badc61f559277e8284dced Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:04 +0100 Subject: [PATCH 695/850] grep: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/grep/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/grep/meta b/packages/sysutils/grep/meta index e58f52b99f..a57f5ae0fc 100644 --- a/packages/sysutils/grep/meta +++ b/packages/sysutils/grep/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="grep: This is GNU grep, the fastest grep in the west" PKG_LONGDESC="GNU grep is based on a fast lazy-state deterministic matcher (about twice as fast as stock Unix egrep) hybridized with a Boyer-Moore-Gosper search for a fixed string that eliminates impossible text from being considered by the full regexp matcher without necessarily having to look at every character. The result is typically many times faster than Unix grep or egrep." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 6c75e36b7e91099e2d16665ae3a49aa6f285b11a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:04 +0100 Subject: [PATCH 696/850] kbd: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/kbd/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/kbd/meta b/packages/sysutils/kbd/meta index 81877657d6..920cf9d58f 100644 --- a/packages/sysutils/kbd/meta +++ b/packages/sysutils/kbd/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="kbd: Keyboard and console utilities for Linux" PKG_LONGDESC="The Linux Console Tools are a set of programs allowing the user to setup/customize your console (restricted meaning: text mode screen + keyboard only)." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 10d117925225d67c2f415ac73fac7b84f9881595 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:04 +0100 Subject: [PATCH 697/850] lcdproc: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/lcdproc/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/lcdproc/meta b/packages/sysutils/lcdproc/meta index 13ce2f3c58..aecc7581fe 100644 --- a/packages/sysutils/lcdproc/meta +++ b/packages/sysutils/lcdproc/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="lcdproc: Software to display system information from your Linux/*BSD box on a LCD" PKG_LONGDESC="LCDproc is a piece of software that displays real-time system information from your Linux/*BSD box on a LCD. The server supports several serial devices: Matrix Orbital, Crystal Fontz, Bayrad, LB216, LCDM001 (kernelconcepts.de), Wirz-SLI, Cwlinux(.com) and PIC-an-LCD; and some devices connected to the LPT port: HD44780, STV5730, T6963, SED1520 and SED1330. Various clients are available that display things like CPU load, system load, memory usage, uptime, and a lot more." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 312a00a90caf78fb79c450b73e2dd345f3e5159a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:04 +0100 Subject: [PATCH 698/850] libatasmart: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/libatasmart/build | 2 ++ packages/sysutils/libatasmart/meta | 2 ++ 2 files changed, 4 insertions(+) diff --git a/packages/sysutils/libatasmart/build b/packages/sysutils/libatasmart/build index 9238612c91..a6c30371f2 100755 --- a/packages/sysutils/libatasmart/build +++ b/packages/sysutils/libatasmart/build @@ -3,6 +3,8 @@ . config/options $1 cd $PKG_BUILD + +mkdir -p m4 && do_autoreconf ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ diff --git a/packages/sysutils/libatasmart/meta b/packages/sysutils/libatasmart/meta index eef58d5f21..f9728caa87 100644 --- a/packages/sysutils/libatasmart/meta +++ b/packages/sysutils/libatasmart/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="libatasmart: a lean, small and clean implementation of an ATA S.M.A.R.T. reading and parsing library" PKG_LONGDESC="libatasmart is a lean, small and clean implementation of an ATA S.M.A.R.T. reading and parsing library. It's fairly comprehensive, however I only support a subset of the full S.M.A.R.T. set of functions: those parts which made sense to me, not the esoteric stuff." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 141e105b40557f8856b0c8893149d07d82f4b42c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:04 +0100 Subject: [PATCH 699/850] libusb: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/libusb/build | 2 ++ packages/sysutils/libusb/meta | 2 ++ 2 files changed, 4 insertions(+) diff --git a/packages/sysutils/libusb/build b/packages/sysutils/libusb/build index 29edf34235..403932bf65 100755 --- a/packages/sysutils/libusb/build +++ b/packages/sysutils/libusb/build @@ -3,6 +3,8 @@ . config/options $1 cd $PKG_BUILD + +mkdir -p m4 && do_autoreconf ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ diff --git a/packages/sysutils/libusb/meta b/packages/sysutils/libusb/meta index 5d4b8a2ab7..dbae603941 100644 --- a/packages/sysutils/libusb/meta +++ b/packages/sysutils/libusb/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="libusb: OS independent USB device access" PKG_LONGDESC="The libusb project's aim is to create a Library for use by user level applications to USB devices regardless of OS." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 10f777f499013ce1517517bcf8ace2a8d5a3b511 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:04 +0100 Subject: [PATCH 700/850] libusb-compat: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/libusb-compat/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/libusb-compat/meta b/packages/sysutils/libusb-compat/meta index af79d085a1..15cd83a6f6 100644 --- a/packages/sysutils/libusb-compat/meta +++ b/packages/sysutils/libusb-compat/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="libusb-compat: OS independent USB device access" PKG_LONGDESC="The libusb project's aim is to create a Library for use by user level applications to USB devices regardless of OS." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 48b3129800b67efa8433903e312195510b03f60a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:05 +0100 Subject: [PATCH 701/850] lm_sensors: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/lm_sensors/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/lm_sensors/meta b/packages/sysutils/lm_sensors/meta index 45be2b8743..49cc0f5c69 100644 --- a/packages/sysutils/lm_sensors/meta +++ b/packages/sysutils/lm_sensors/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="lm_sensors: Hardware monitoring via the SMBus" PKG_LONGDESC="lm_sensors is a package to get data from the SMB (System Management Bus - an i2c bus) on modern mainboards. It consists of kernel modules and users space tools to get stuff like cpu / mb temperature, voltages, fan speed..." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From a7945067d8fd818782ccdeb5dc1bfa08a2edbd7d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:05 +0100 Subject: [PATCH 702/850] LVM2: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/LVM2/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/LVM2/meta b/packages/sysutils/LVM2/meta index d0f43b7f46..0395712e75 100644 --- a/packages/sysutils/LVM2/meta +++ b/packages/sysutils/LVM2/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="lvm2: Logical Volume Management (Version 2)" PKG_LONGDESC="LVM includes all of the support for handling read/write operations on physical volumes (hard disks, RAID-Systems, magneto optical, etc., multiple devices (MD), see mdadd(8) or even loop devices, see losetup(8)), creating volume groups (kind of virtual disks) from one or more physical volumes and creating one or more logical volumes (kind of logical partitions) in volume groups. This 2nd version is based on device-mapper available in linux-2.6." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 539dc2b694124d3da59a3f9a55ff22157c8142bc Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:05 +0100 Subject: [PATCH 703/850] ntfs-3g: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/ntfs-3g/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/ntfs-3g/meta b/packages/sysutils/ntfs-3g/meta index a4a54f3477..7091b029be 100644 --- a/packages/sysutils/ntfs-3g/meta +++ b/packages/sysutils/ntfs-3g/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="ntfs-3g: NTFS-3G Read/Write userspace driver" PKG_LONGDESC="The NTFS-3G driver is an open source, freely available NTFS driver for Linux with read and write support. It provides safe and fast handling of the Windows XP, Windows Server 2003, Windows 2000 and Windows Vista file systems." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 242995876d038a2ae7d3a132e91e4d17ed6862b8 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:05 +0100 Subject: [PATCH 704/850] par2cmdline: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/par2cmdline/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/par2cmdline/meta b/packages/sysutils/par2cmdline/meta index e4bf2ff15c..e85016dbcb 100644 --- a/packages/sysutils/par2cmdline/meta +++ b/packages/sysutils/par2cmdline/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="par2cmdline: a utility to create and repair data files using Reed Solomon coding." PKG_LONGDESC="This is a concurrent (multithreaded) version of par2cmdline, a utility to create and repair data files using Reed Solomon coding. par2 parity archives are commonly used on Usenet postings to allow corrupted postings to be repaired instead of needing the original poster to repost the corrupted file(s)." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 7166fda596299fbd526d644665590ae4fd73e4bb Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:05 +0100 Subject: [PATCH 705/850] parted: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/parted/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/parted/meta b/packages/sysutils/parted/meta index d51c077d0b..5bad807510 100644 --- a/packages/sysutils/parted/meta +++ b/packages/sysutils/parted/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="parted: GNU partition editor" PKG_LONGDESC="GNU Parted is a program for creating, destroying, resizing, checking and copying partitions, and the file systems on them. This is useful for creating space for new operating systems, reorganising disk usage, copying data between hard disks and disk imaging." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 97b41362c8f2b986469ac9c7e6e1c7fc0a17396d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:05 +0100 Subject: [PATCH 706/850] pciutils: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/pciutils/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/pciutils/meta b/packages/sysutils/pciutils/meta index 1bb6a6e6b9..b8ddc324a4 100644 --- a/packages/sysutils/pciutils/meta +++ b/packages/sysutils/pciutils/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="pciutils: Linux PCI Utilities" PKG_LONGDESC="This package contains various utilities for inspecting and setting of devices connected to the PCI bus and the PCI vendor/product ID database." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From d490cc8df7a4a44d32e21da34ac8c6f88ded1235 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:06 +0100 Subject: [PATCH 707/850] plymouth-lite: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/plymouth-lite/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/plymouth-lite/meta b/packages/sysutils/plymouth-lite/meta index a7f5611b9b..63cfa5e27e 100644 --- a/packages/sysutils/plymouth-lite/meta +++ b/packages/sysutils/plymouth-lite/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="plymouth-lite: Boot splash screen based on Fedora's Plymouth code" PKG_LONGDESC="Boot splash screen based on Fedora's Plymouth code" PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 58806d09355083cf3f6c00b3c450282b55c1bb8f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:06 +0100 Subject: [PATCH 708/850] pm-utils: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/pm-utils/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/pm-utils/meta b/packages/sysutils/pm-utils/meta index 2db4232368..0e6714d7c8 100644 --- a/packages/sysutils/pm-utils/meta +++ b/packages/sysutils/pm-utils/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="pm-utils: a small collection of scripts that handle suspend and resume on behalf of HAL." PKG_LONGDESC="pm-utils is a small collection of scripts that handle suspend and resume on behalf of HAL." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From cdadb2e8e4c255eae0fe0dcf671b55452083ebcd Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:06 +0100 Subject: [PATCH 709/850] sg3_utils: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/sg3_utils/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/sg3_utils/meta b/packages/sysutils/sg3_utils/meta index 88b2b64578..079a736828 100644 --- a/packages/sysutils/sg3_utils/meta +++ b/packages/sysutils/sg3_utils/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="sg3_utils: a package of utilities for accessing devices that use SCSI command sets." PKG_LONGDESC="sg3_utils is a package of utilities for accessing devices that use SCSI command sets. Most utilities issue a single command and display the response, while some work at a slightly higher level. There are utilities for fetching INQUIRY data and VPD, mode, and log pages. There is support for modern SCSI transports such as SAS and FCP." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 642cb4e74fd811e57c6f3b95607042d117f82b7d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:06 +0100 Subject: [PATCH 710/850] siglaunchd: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/siglaunchd/build | 1 - packages/sysutils/siglaunchd/meta | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/sysutils/siglaunchd/build b/packages/sysutils/siglaunchd/build index d4ffcb370d..cf6d510702 100755 --- a/packages/sysutils/siglaunchd/build +++ b/packages/sysutils/siglaunchd/build @@ -3,7 +3,6 @@ . config/options $1 cd $PKG_BUILD -$AUTORECONF ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ diff --git a/packages/sysutils/siglaunchd/meta b/packages/sysutils/siglaunchd/meta index acef7f4405..bbfc44aa42 100644 --- a/packages/sysutils/siglaunchd/meta +++ b/packages/sysutils/siglaunchd/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="siglaunchd: This project is daemon which listens to dbus signals and runs applications accordingly." PKG_LONGDESC="This project is daemon which listens to dbus signals and runs applications accordingly. The signals, application to run and some rules that will be evaluated against incoming dbus signals can be easily changed in the configuration file. " PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From cd41cbd1234a99c424dff05fea72457dfcb308df Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:06 +0100 Subject: [PATCH 711/850] timezone-data: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/timezone-data/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/timezone-data/meta b/packages/sysutils/timezone-data/meta index 055d8f6df9..7715c34231 100644 --- a/packages/sysutils/timezone-data/meta +++ b/packages/sysutils/timezone-data/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="timezone-data" PKG_LONGDESC="timezone-data" PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From ab2d556c5766bc540abf96d3699158fa24c347d8 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:07 +0100 Subject: [PATCH 712/850] udev: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/udev/build | 2 -- packages/sysutils/udev/meta | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/sysutils/udev/build b/packages/sysutils/udev/build index 36a2b48971..60c2fea416 100755 --- a/packages/sysutils/udev/build +++ b/packages/sysutils/udev/build @@ -3,8 +3,6 @@ . config/options $1 cd $PKG_BUILD -$AUTORECONF - ac_cv_file__usr_share_pci_ids="yes" \ ac_cv_file__usr_share_hwdata_pci_ids="no" \ ac_cv_file__usr_share_misc_pci_ids="no" \ diff --git a/packages/sysutils/udev/meta b/packages/sysutils/udev/meta index 614d950c59..e3eba540a7 100644 --- a/packages/sysutils/udev/meta +++ b/packages/sysutils/udev/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="udev: A Userspace Implementation for dynamic /dev nodes" PKG_LONGDESC="U/dev is a program that replaces the functionality of DevFS (only providing /dev entries for devices that are in the system at any point in time). It is an attempt to move all naming policy out of the kernel." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 750ced49b7abc5fd3ddda83a21a6aa64c29c0130 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:07 +0100 Subject: [PATCH 713/850] udisks: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/udisks/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/udisks/meta b/packages/sysutils/udisks/meta index 10bdd55cb8..9415a19a2b 100644 --- a/packages/sysutils/udisks/meta +++ b/packages/sysutils/udisks/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="udisks: a modular hardware abstraction layer designed for use in Linux systems that is designed to simplify device management." PKG_LONGDESC="Udisks is a modular hardware abstraction layer designed for use in Linux systems that is designed to simplify device management and replace the current monolithic Linux HAL. Udisks includes the ability to enumerate system devices and send notifications when hardware is added or removed from the computer system." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From cb7950113c8e6f16bf8b416926f22f3bca8b3aaa Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:07 +0100 Subject: [PATCH 714/850] upower: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/upower/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/sysutils/upower/meta b/packages/sysutils/upower/meta index bf6a516b4a..a907a90a87 100644 --- a/packages/sysutils/upower/meta +++ b/packages/sysutils/upower/meta @@ -6,9 +6,11 @@ PKG_LICENSE="GPL" PKG_SITE="http://upower.freedesktop.org/" PKG_URL="http://upower.freedesktop.org/releases/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="udev glib dbus dbus-glib polkit pm-utils" -PKG_BUILD_DEPENDS="toolchain udev glib dbus dbus-glib polkit" +PKG_BUILD_DEPENDS="toolchain udev glib dbus dbus-glib gobject-introspection polkit" PKG_PRIORITY="optional" PKG_SECTION="system" PKG_SHORTDESC="upower: a modular hardware abstraction layer designed for use in Linux systems that is designed to simplify device management." PKG_LONGDESC="Upower is a modular hardware abstraction layer designed for use in Linux systems that is designed to simplify device management and replace the current monolithic Linux HAL. Upower includes the ability to enumerate system devices and send notifications when hardware is added or removed from the computer system." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 2e2c651d55cf9fa0c759099663b5e6e80f2bc4bd Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:07 +0100 Subject: [PATCH 715/850] usbutils: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/usbutils/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/usbutils/meta b/packages/sysutils/usbutils/meta index 7ca5b389f8..4328e5f7ce 100644 --- a/packages/sysutils/usbutils/meta +++ b/packages/sysutils/usbutils/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="usbutils: Linux USB Utilities" PKG_LONGDESC="This package contains various utilities for inspecting and setting of devices connected to the USB bus. Requires a kernel version including usbdevfs support - and this usbdevfs mounted to /proc/bus/usb." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 28ddd93728bb8a4899771aee9b9335b8d1d349ea Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:07 +0100 Subject: [PATCH 716/850] util-linux-ng: add autoreconf support Signed-off-by: Stephan Raue --- packages/sysutils/util-linux-ng/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/util-linux-ng/meta b/packages/sysutils/util-linux-ng/meta index fafcfe7b6d..09840fa18e 100644 --- a/packages/sysutils/util-linux-ng/meta +++ b/packages/sysutils/util-linux-ng/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="util-linux: Miscellaneous system utilities for Linux" PKG_LONGDESC="The util-linux package contains a large variety of low-level system utilities that are necessary for a Linux system to function. Among many features, Util-linux contains the fdisk configuration tool and the login program." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 82e68aaf4bdeeeeb53240ccbadee7de9082dc80d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:26 +0100 Subject: [PATCH 717/850] openssl: add autoreconf support Signed-off-by: Stephan Raue --- packages/security/openssl/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/security/openssl/meta b/packages/security/openssl/meta index 1ae40a9d2b..7c233368ec 100644 --- a/packages/security/openssl/meta +++ b/packages/security/openssl/meta @@ -12,3 +12,5 @@ PKG_SECTION="security" PKG_SHORTDESC="openssl: Open Source toolkit for Secure Sockets Layer and Transport Layer Security" PKG_LONGDESC="The OpenSSL Project is a collaborative effort to develop a robust, commercial-grade, fully featured, and Open Source toolkit implementing the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) protocols as well as a full-strength general purpose cryptography library. The project is managed by a worldwide community of volunteers that use the Internet to communicate, plan, and develop the OpenSSL toolkit and its related documentation." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 20221efca73dd8045c564b98f112fc27ee64e61e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:26 +0100 Subject: [PATCH 718/850] polkit: add autoreconf support Signed-off-by: Stephan Raue --- packages/security/polkit/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/security/polkit/meta b/packages/security/polkit/meta index 8dc8aa52b3..926149f581 100644 --- a/packages/security/polkit/meta +++ b/packages/security/polkit/meta @@ -12,3 +12,5 @@ PKG_SECTION="security" PKG_SHORTDESC="polkit: Authorization Toolkit" PKG_LONGDESC="PolicyKit is a toolkit for defining and handling authorizations. It is used for allowing unprivileged processes to speak to privileged processes." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From a242c35987f5e0a2ecc16c602451531b4c4469a9 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:39 +0100 Subject: [PATCH 719/850] feedparser: add autoreconf support Signed-off-by: Stephan Raue --- packages/python/web/feedparser/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/python/web/feedparser/meta b/packages/python/web/feedparser/meta index 37190e0c90..efc9e01acf 100644 --- a/packages/python/web/feedparser/meta +++ b/packages/python/web/feedparser/meta @@ -12,3 +12,5 @@ PKG_SECTION="python/web" PKG_SHORTDESC="feedparser: Parse RSS and Atom feeds in Python." PKG_LONGDESC="Parse RSS and Atom feeds in Python." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 8c853bc40799ad0f8d7a3386daa036fa9f9c2864 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:39 +0100 Subject: [PATCH 720/850] TwistedCore: add autoreconf support Signed-off-by: Stephan Raue --- packages/python/web/TwistedCore/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/python/web/TwistedCore/meta b/packages/python/web/TwistedCore/meta index 28d692d1da..0587355460 100644 --- a/packages/python/web/TwistedCore/meta +++ b/packages/python/web/TwistedCore/meta @@ -12,3 +12,5 @@ PKG_SECTION="python/web" PKG_SHORTDESC="TwistedCore: An event-based networking framework for Internet applications" PKG_LONGDESC="Twisted is an event-based framework for Internet applications. It includes a Web server, an SMTP/POP3 server, a telnet server, an SSH server, an IRC server, a DNS server, a generic client/server pair for remote object access (Perspective Broker), and APIs for creating new protocols. It supports integration with GTK+, GTK+ 2, Qt, Tkinter, wxPython, Mac OS X (PyObjC) and Win32 event loops. It also supports TCP, SSL and TLS, UDP, Unix sockets, multicast, and serial ports. Supported protocols include HTTP, FTP, SMTP, POP3, IMAP, TOC, OSCAR (AIM and ICQ), SSH, DNS, IRC, NNTP, Jabber, SOCKSv4, Telnet, SIP (for VoIP), and XML-RPC and SOAP using external packages. Most protocols are supported as both servers and clients." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 41f921817a3c10891f75ac72c4f04900649869e9 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:39 +0100 Subject: [PATCH 721/850] TwistedNames: add autoreconf support Signed-off-by: Stephan Raue --- packages/python/web/TwistedNames/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/python/web/TwistedNames/meta b/packages/python/web/TwistedNames/meta index e8903887f9..f7c5d6b889 100644 --- a/packages/python/web/TwistedNames/meta +++ b/packages/python/web/TwistedNames/meta @@ -12,3 +12,5 @@ PKG_SECTION="python/web" PKG_SHORTDESC="TwistedNames: Name resolution part of Twisted framework" PKG_LONGDESC="Twisted is an event-based framework for Internet applications. It includes a Web server, an SMTP/POP3 server, a telnet server, an SSH server, an IRC server, a DNS server, a generic client/server pair for remote object access (Perspective Broker), and APIs for creating new protocols. It supports integration with GTK+, GTK+ 2, Qt, Tkinter, wxPython, Mac OS X (PyObjC) and Win32 event loops. It also supports TCP, SSL and TLS, UDP, Unix sockets, multicast, and serial ports. Supported protocols include HTTP, FTP, SMTP, POP3, IMAP, TOC, OSCAR (AIM and ICQ), SSH, DNS, IRC, NNTP, Jabber, SOCKSv4, Telnet, SIP (for VoIP), and XML-RPC and SOAP using external packages. Most protocols are supported as both servers and clients." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 0e604e20d811ac7d720cdbcb91c56e65056c7884 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:39 +0100 Subject: [PATCH 722/850] TwistedWeb: add autoreconf support Signed-off-by: Stephan Raue --- packages/python/web/TwistedWeb/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/python/web/TwistedWeb/meta b/packages/python/web/TwistedWeb/meta index 431b270863..a3dce97c17 100644 --- a/packages/python/web/TwistedWeb/meta +++ b/packages/python/web/TwistedWeb/meta @@ -12,3 +12,5 @@ PKG_SECTION="python/web" PKG_SHORTDESC="TwistedWeb: An event-based networking framework for Internet applications" PKG_LONGDESC="Twisted is an event-based framework for Internet applications. It includes a Web server, an SMTP/POP3 server, a telnet server, an SSH server, an IRC server, a DNS server, a generic client/server pair for remote object access (Perspective Broker), and APIs for creating new protocols. It supports integration with GTK+, GTK+ 2, Qt, Tkinter, wxPython, Mac OS X (PyObjC) and Win32 event loops. It also supports TCP, SSL and TLS, UDP, Unix sockets, multicast, and serial ports. Supported protocols include HTTP, FTP, SMTP, POP3, IMAP, TOC, OSCAR (AIM and ICQ), SSH, DNS, IRC, NNTP, Jabber, SOCKSv4, Telnet, SIP (for VoIP), and XML-RPC and SOAP using external packages. Most protocols are supported as both servers and clients." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 3400193128f6bbe28c4099f4e9aef52421623d1d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:40 +0100 Subject: [PATCH 723/850] TwistedWords: add autoreconf support Signed-off-by: Stephan Raue --- packages/python/web/TwistedWords/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/python/web/TwistedWords/meta b/packages/python/web/TwistedWords/meta index 5303fb332b..db0fa17dd1 100644 --- a/packages/python/web/TwistedWords/meta +++ b/packages/python/web/TwistedWords/meta @@ -12,3 +12,5 @@ PKG_SECTION="python/web" PKG_SHORTDESC="TwistedWords: An event-based networking framework for Internet applications" PKG_LONGDESC="Twisted is an event-based framework for Internet applications. It includes a Web server, an SMTP/POP3 server, a telnet server, an SSH server, an IRC server, a DNS server, a generic client/server pair for remote object access (Perspective Broker), and APIs for creating new protocols. It supports integration with GTK+, GTK+ 2, Qt, Tkinter, wxPython, Mac OS X (PyObjC) and Win32 event loops. It also supports TCP, SSL and TLS, UDP, Unix sockets, multicast, and serial ports. Supported protocols include HTTP, FTP, SMTP, POP3, IMAP, TOC, OSCAR (AIM and ICQ), SSH, DNS, IRC, NNTP, Jabber, SOCKSv4, Telnet, SIP (for VoIP), and XML-RPC and SOAP using external packages. Most protocols are supported as both servers and clients." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 87843af59e97732a03abe2b2f7eff7db1ec70f22 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:40 +0100 Subject: [PATCH 724/850] wokkel: add autoreconf support Signed-off-by: Stephan Raue --- packages/python/web/wokkel/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/python/web/wokkel/meta b/packages/python/web/wokkel/meta index 591b22ead5..8e841e3186 100644 --- a/packages/python/web/wokkel/meta +++ b/packages/python/web/wokkel/meta @@ -12,3 +12,5 @@ PKG_SECTION="python/web" PKG_SHORTDESC="wokkel: Wokkel is a Python module for experimenting with future enhancements to TwistedWords" PKG_LONGDESC="Wokkel is collection of enhancements on top of the Twisted networking framework, written in Python. It mostly provides a testing ground for enhancements to the Jabber/XMPP protocol implementation as found in Twisted Words, that are meant to eventually move there." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 65da660a56ea3778d920b871fbf64ed81230f9ee Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:40 +0100 Subject: [PATCH 725/850] zope.interface: add autoreconf support Signed-off-by: Stephan Raue --- packages/python/web/zope.interface/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/python/web/zope.interface/meta b/packages/python/web/zope.interface/meta index bb4737c22a..613c2a4912 100644 --- a/packages/python/web/zope.interface/meta +++ b/packages/python/web/zope.interface/meta @@ -12,3 +12,5 @@ PKG_SECTION="python/web" PKG_SHORTDESC="zopeinterface: zope.interface package from Zope 3" PKG_LONGDESC="This is a separate distribution of the zope.interface package used in Zope 3, along with the packages it depends on." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From da12dbb162ebfae00e03f4c8800740cb4e156ed6 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:51 +0100 Subject: [PATCH 726/850] dbus-python: add autoreconf support Signed-off-by: Stephan Raue --- packages/python/system/dbus-python/build | 1 - packages/python/system/dbus-python/meta | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/python/system/dbus-python/build b/packages/python/system/dbus-python/build index d00f9a32fa..8cd121f3a2 100755 --- a/packages/python/system/dbus-python/build +++ b/packages/python/system/dbus-python/build @@ -5,7 +5,6 @@ PYTHON_LIBDIR="`ls -d $SYSROOT_PREFIX/usr/lib/python*`" cd $PKG_BUILD - ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ diff --git a/packages/python/system/dbus-python/meta b/packages/python/system/dbus-python/meta index 14f4180822..feee211aee 100644 --- a/packages/python/system/dbus-python/meta +++ b/packages/python/system/dbus-python/meta @@ -12,3 +12,5 @@ PKG_SECTION="python/system" PKG_SHORTDESC="dbus-python: A message bus system" PKG_LONGDESC="D-BUS is a message bus, used for sending messages between applications. Conceptually, it fits somewhere in between raw sockets and CORBA in terms of complexity. D-BUS supports broadcast messages, asynchronous messages (thus decreasing latency), authentication, and more. It is designed to be low-overhead; messages are sent using a binary protocol, not using XML. D-BUS also supports a method call mapping for its messages, but it is not required; this makes using the system quite simple." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From de9d29a293bb67e8c546dd8a9dd4d0acc3c21711 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:51 +0100 Subject: [PATCH 727/850] PyBluez: add autoreconf support Signed-off-by: Stephan Raue --- packages/python/system/PyBluez/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/python/system/PyBluez/meta b/packages/python/system/PyBluez/meta index e7fe4a9d69..44cd91b5d1 100644 --- a/packages/python/system/PyBluez/meta +++ b/packages/python/system/PyBluez/meta @@ -12,3 +12,5 @@ PKG_SECTION="python/system" PKG_SHORTDESC="PyBluez: an effort to create python wrappers around system Bluetooth resources" PKG_LONGDESC="PyBluez is an effort to create python wrappers around system Bluetooth resources to allow Python developers to easily and quickly create Bluetooth applications." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 82b0a528ec93642cbec0178e913d9faf6320dee2 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:51 +0100 Subject: [PATCH 728/850] yenc: add autoreconf support Signed-off-by: Stephan Raue --- packages/python/system/yenc/meta | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/python/system/yenc/meta b/packages/python/system/yenc/meta index 304d2ac42e..e61e40b6b4 100644 --- a/packages/python/system/yenc/meta +++ b/packages/python/system/yenc/meta @@ -13,3 +13,4 @@ PKG_SHORTDESC="yenc: a fairly simple module, it provide only raw yEnc encoding/d PKG_LONGDESC="This a fairly simple module, it provide only raw yEnc encoding/decoding with builitin crc32 calculation. Header parsing, checkings and yenc formatting are left to you (see examples directory for possible implementations). The interface is similar to the uu module from python standard library." PKG_IS_ADDON="no" +PKG_AUTORECONF="yes" From 52e9d6a58c1bc3cab2cb4df33b978005b34f3293 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:59 +0100 Subject: [PATCH 729/850] Cheetah: add autoreconf support Signed-off-by: Stephan Raue --- packages/python/devel/Cheetah/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/python/devel/Cheetah/meta b/packages/python/devel/Cheetah/meta index bdf06a5768..8355614ae1 100644 --- a/packages/python/devel/Cheetah/meta +++ b/packages/python/devel/Cheetah/meta @@ -12,3 +12,5 @@ PKG_SECTION="python/devel" PKG_SHORTDESC="cheetah: Python-powered template engine and code generator" PKG_LONGDESC="Cheetah is a Python-powered template engine and code generator. It can be used as a standalone utility or it can be combined with other tools. Cheetah has many potential uses, but web developers looking for a viable alternative to ASP, JSP, PHP and PSP are expected to be its principle user group." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From ed25620f982e5035956ea0e94b86240c41c95a6c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:59 +0100 Subject: [PATCH 730/850] distribute: add autoreconf support Signed-off-by: Stephan Raue --- packages/python/devel/distribute/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/python/devel/distribute/meta b/packages/python/devel/distribute/meta index 8f495ba637..6d697ae349 100644 --- a/packages/python/devel/distribute/meta +++ b/packages/python/devel/distribute/meta @@ -12,3 +12,5 @@ PKG_SECTION="python/devel" PKG_SHORTDESC="distribute: A collection of enhancements to the Python distutils" PKG_LONGDESC="Distribute is intended to replace Setuptools as the standard method for working with Python module distributions. Packages built and distributed using distribute look to the user like ordinary Python packages based on the distutils. Your users don't need to install or even know about setuptools in order to use them, and you don't have to include the entire setuptools package in your distributions. By including just a single bootstrap module (a 7K .py file), your package will automatically download and install setuptools if the user is building your package from source and doesn't have a suitable version already installed." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 24181584ac3f6a0faa4e0db1217148628892bf2d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:59 +0100 Subject: [PATCH 731/850] distutilscross: add autoreconf support Signed-off-by: Stephan Raue --- packages/python/devel/distutilscross/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/python/devel/distutilscross/meta b/packages/python/devel/distutilscross/meta index e526b2ea1d..1ea08cfa01 100644 --- a/packages/python/devel/distutilscross/meta +++ b/packages/python/devel/distutilscross/meta @@ -12,3 +12,5 @@ PKG_SECTION="python/devel" PKG_SHORTDESC="distutilscross: Cross Compile Python Extensions" PKG_LONGDESC="distutilscross enhances distutils to support Cross Compile of Python extensions" PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 5780d15c98a38d62209dab7fbca259f8c5bfdf54 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:16:59 +0100 Subject: [PATCH 732/850] pygobject: add autoreconf support Signed-off-by: Stephan Raue --- packages/python/devel/pygobject/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/python/devel/pygobject/meta b/packages/python/devel/pygobject/meta index 9dbbe18a33..b53ac1e9d7 100644 --- a/packages/python/devel/pygobject/meta +++ b/packages/python/devel/pygobject/meta @@ -12,3 +12,5 @@ PKG_SECTION="python/devel" PKG_SHORTDESC="pygobject: The Python bindings for GObject" PKG_LONGDESC="PyGObject provides a convenient wrapper for the GObject+ library for use in Python programs, and takes care of many of the boring details such as managing memory and type casting. When combined with PyGTK, PyORBit and gnome-python, it can be used to write full featured Gnome applications." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 813e5abed8060ecbf4f398ac76292d0bcdfdedda Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:17:14 +0100 Subject: [PATCH 733/850] pyOpenSSL: add autoreconf support Signed-off-by: Stephan Raue --- packages/python/security/pyOpenSSL/meta | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/python/security/pyOpenSSL/meta b/packages/python/security/pyOpenSSL/meta index 6bc84adc81..90a71b33ae 100644 --- a/packages/python/security/pyOpenSSL/meta +++ b/packages/python/security/pyOpenSSL/meta @@ -13,3 +13,4 @@ PKG_SHORTDESC="pyOpenSSL: Python interface to the OpenSSL library" PKG_LONGDESC="Python interface to the OpenSSL library. Includes: SSL Context objects, SSL Connection objects, using Python sockets as transport layer. The Connection object wraps all the socket methods and can therefore be used interchangeably." PKG_IS_ADDON="no" +PKG_AUTORECONF="yes" From 8da278efb416c93b80782405d390f323a5e3af64 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:18:41 +0100 Subject: [PATCH 734/850] new package: add package 'libiconv' Signed-off-by: Stephan Raue --- packages/devel/libiconv/build | 7 +++++++ packages/devel/libiconv/meta | 16 ++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100755 packages/devel/libiconv/build create mode 100644 packages/devel/libiconv/meta diff --git a/packages/devel/libiconv/build b/packages/devel/libiconv/build new file mode 100755 index 0000000000..1f894eb4b4 --- /dev/null +++ b/packages/devel/libiconv/build @@ -0,0 +1,7 @@ +#!/bin/sh + +. config/options $1 + +cd $PKG_BUILD + mkdir -p $SYSROOT_PREFIX/usr/share/aclocal + cp srcm4/*.m4 $SYSROOT_PREFIX/usr/share/aclocal diff --git a/packages/devel/libiconv/meta b/packages/devel/libiconv/meta new file mode 100644 index 0000000000..573bc6c59e --- /dev/null +++ b/packages/devel/libiconv/meta @@ -0,0 +1,16 @@ +PKG_NAME="libiconv" +PKG_VERSION="1.13.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.gnu.org/software/libiconv/" +PKG_URL="http://ftp.gnu.org/pub/gnu/libiconv/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="devel" +PKG_SHORTDESC="libiconv: Library converting between character encodings" +PKG_LONGDESC="This library provides an iconv() implementation, for use on systems which don't have one, or whose implementation cannot convert from/to Unicode. This library is a drop-in soution for systems lacking a iconv() implementation in the C library." +PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 85bbe69dd83590d7e066320abc905a649efa2965 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:18:54 +0100 Subject: [PATCH 735/850] new package: add package 'gettext' Signed-off-by: Stephan Raue --- packages/devel/gettext/build | 7 +++++++ packages/devel/gettext/meta | 16 ++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100755 packages/devel/gettext/build create mode 100644 packages/devel/gettext/meta diff --git a/packages/devel/gettext/build b/packages/devel/gettext/build new file mode 100755 index 0000000000..5b4f281597 --- /dev/null +++ b/packages/devel/gettext/build @@ -0,0 +1,7 @@ +#!/bin/sh + +. config/options $1 + +cd $PKG_BUILD + mkdir -p $SYSROOT_PREFIX/usr/share/aclocal + cp gettext-runtime/m4/*.m4 $SYSROOT_PREFIX/usr/share/aclocal diff --git a/packages/devel/gettext/meta b/packages/devel/gettext/meta new file mode 100644 index 0000000000..417e0112d0 --- /dev/null +++ b/packages/devel/gettext/meta @@ -0,0 +1,16 @@ +PKG_NAME="gettext" +PKG_VERSION="0.18.1" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.gnu.org/software/gettext/" +PKG_URL="http://ftp.gnu.org/pub/gnu/gettext/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="ccache" +PKG_PRIORITY="optional" +PKG_SECTION="devel" +PKG_SHORTDESC="gettext: A program internationalization library and tools" +PKG_LONGDESC="This is the GNU gettext package. It is interesting for authors or maintainers of other packages or programs which they want to see internationalized. As one step the handling of messages in different languages should be implemented. For this task GNU gettext provides the needed tools and library functions." +PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 4ba6639d1c87bb284e7b9822447af838ed97a03f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:12 +0100 Subject: [PATCH 736/850] new package: add package 'gobject-introspection' Signed-off-by: Stephan Raue --- packages/devel/gobject-introspection/build | 7 +++++++ packages/devel/gobject-introspection/meta | 16 ++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100755 packages/devel/gobject-introspection/build create mode 100644 packages/devel/gobject-introspection/meta diff --git a/packages/devel/gobject-introspection/build b/packages/devel/gobject-introspection/build new file mode 100755 index 0000000000..3fd067d9e7 --- /dev/null +++ b/packages/devel/gobject-introspection/build @@ -0,0 +1,7 @@ +#!/bin/sh + +. config/options $1 + +cd $PKG_BUILD + mkdir -p $SYSROOT_PREFIX/usr/share/aclocal + cp m4/introspection.m4 $SYSROOT_PREFIX/usr/share/aclocal diff --git a/packages/devel/gobject-introspection/meta b/packages/devel/gobject-introspection/meta new file mode 100644 index 0000000000..38012d0702 --- /dev/null +++ b/packages/devel/gobject-introspection/meta @@ -0,0 +1,16 @@ +PKG_NAME="gobject-introspection" +PKG_VERSION="0.9.12" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://live.gnome.org/GObjectIntrospection" +PKG_URL="http://ftp.acc.umu.se/pub/GNOME/sources/gobject-introspection/0.9/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="devel" +PKG_SHORTDESC="gobject-introspection: Introspection for GObject libraries" +PKG_LONGDESC="Introspection for GObject libraries." +PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 2d756e8b39c43452833cb85bfba6aa6099e272f8 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:30 +0100 Subject: [PATCH 737/850] boost: add autoreconf support Signed-off-by: Stephan Raue --- packages/devel/boost/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/devel/boost/meta b/packages/devel/boost/meta index def85e239a..b38da8827c 100644 --- a/packages/devel/boost/meta +++ b/packages/devel/boost/meta @@ -12,3 +12,5 @@ PKG_SECTION="devel" PKG_SHORTDESC="boost: Peer-reviewed STL style libraries for C++" PKG_LONGDESC="Boost provides free peer-reviewed portable C++ source libraries. The emphasis is on libraries which work well with the C++ Standard Library. One goal is to establish existing practice and provide reference implementations so that the Boost libraries are suitable for eventual standardization. Some of the libraries have already been proposed for inclusion in the C++ Standards Committee's upcoming C++ Standard Library Technical Report." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From f2bafdcbbd4ed79cef89f2fa46d6d68c867c1a4b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:30 +0100 Subject: [PATCH 738/850] boost-jam: add autoreconf support Signed-off-by: Stephan Raue --- packages/devel/boost-jam/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/devel/boost-jam/meta b/packages/devel/boost-jam/meta index f5cc7c531a..61acd1f30c 100644 --- a/packages/devel/boost-jam/meta +++ b/packages/devel/boost-jam/meta @@ -12,3 +12,5 @@ PKG_SECTION="devel" PKG_SHORTDESC="boost: Peer-reviewed STL style libraries for C++" PKG_LONGDESC="Boost provides free peer-reviewed portable C++ source libraries. The emphasis is on libraries which work well with the C++ Standard Library. One goal is to establish existing practice and provide reference implementations so that the Boost libraries are suitable for eventual standardization. Some of the libraries have already been proposed for inclusion in the C++ Standards Committee's upcoming C++ Standard Library Technical Report." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From eda25ce7b86808a010d9383d093535f698a8bc17 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:31 +0100 Subject: [PATCH 739/850] dbus-glib: add autoreconf support Signed-off-by: Stephan Raue --- packages/devel/dbus-glib/build | 4 +--- packages/devel/dbus-glib/meta | 4 +++- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/devel/dbus-glib/build b/packages/devel/dbus-glib/build index c15202bd77..ff2d3dad31 100755 --- a/packages/devel/dbus-glib/build +++ b/packages/devel/dbus-glib/build @@ -9,9 +9,7 @@ export have_abstract_sockets=yes DBUS_DIR=`ls -d $BUILD/dbus-[0-9]*` cd $PKG_BUILD -mkdir -p .build-target - -cd .build-target +mkdir -p .build-target && cd .build-target ../configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ diff --git a/packages/devel/dbus-glib/meta b/packages/devel/dbus-glib/meta index 78ea5dc5f1..20b25284e9 100644 --- a/packages/devel/dbus-glib/meta +++ b/packages/devel/dbus-glib/meta @@ -11,4 +11,6 @@ PKG_PRIORITY="optional" PKG_SECTION="devel" PKG_SHORTDESC="dbus-glib: A message bus system" PKG_LONGDESC="D-BUS is a message bus, used for sending messages between applications. Conceptually, it fits somewhere in between raw sockets and CORBA in terms of complexity." -PKG_IS_ADDON="no" \ No newline at end of file +PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 3c1f6090e6217252ac299908d76acbb75296abb4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:31 +0100 Subject: [PATCH 740/850] dbus-glib-host: add autoreconf support Signed-off-by: Stephan Raue --- packages/devel/dbus-glib-host/build | 4 ++-- packages/devel/dbus-glib-host/meta | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/devel/dbus-glib-host/build b/packages/devel/dbus-glib-host/build index e98d344c4c..c697bcdd1c 100755 --- a/packages/devel/dbus-glib-host/build +++ b/packages/devel/dbus-glib-host/build @@ -9,9 +9,9 @@ DBUS_GLIB_DIR=`ls -d $BUILD/dbus-glib-[0-9]*` setup_toolchain host cd $DBUS_GLIB_DIR -mkdir -p .build-host -cd .build-host +do_autoreconf +mkdir -p .build-host && cd .build-host ../configure --prefix=$ROOT/$TOOLCHAIN \ --sysconfdir=$ROOT/$TOOLCHAIN/etc \ --disable-tests \ diff --git a/packages/devel/dbus-glib-host/meta b/packages/devel/dbus-glib-host/meta index ee8d5db492..4ac19e7fbe 100644 --- a/packages/devel/dbus-glib-host/meta +++ b/packages/devel/dbus-glib-host/meta @@ -13,4 +13,4 @@ PKG_SHORTDESC="dbus-glib: A message bus system" PKG_LONGDESC="D-BUS is a message bus, used for sending messages between applications. Conceptually, it fits somewhere in between raw sockets and CORBA in terms of complexity." PKG_IS_ADDON="no" - +PKG_AUTORECONF="no" From 15cd28eac4ffa81e03c5734649a0f7e2ab35d2c7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:31 +0100 Subject: [PATCH 741/850] eggdbus: add autoreconf support Signed-off-by: Stephan Raue --- packages/devel/eggdbus/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/devel/eggdbus/meta b/packages/devel/eggdbus/meta index 14481b0b58..090aa9d212 100644 --- a/packages/devel/eggdbus/meta +++ b/packages/devel/eggdbus/meta @@ -12,3 +12,5 @@ PKG_SECTION="devel" PKG_SHORTDESC="eggdbus: D-Bus bindings for GObject" PKG_LONGDESC="D-Bus bindings for GObject." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From a593d75c470578e77c031df10150466b8cc7f0f5 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:31 +0100 Subject: [PATCH 742/850] eggdbus-host: add autoreconf support Signed-off-by: Stephan Raue --- packages/devel/eggdbus-host/build | 4 ++-- packages/devel/eggdbus-host/meta | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/devel/eggdbus-host/build b/packages/devel/eggdbus-host/build index 0b80611e8d..be053b6d20 100755 --- a/packages/devel/eggdbus-host/build +++ b/packages/devel/eggdbus-host/build @@ -9,9 +9,9 @@ EGGDBUS_DIR=`ls -d $BUILD/eggdbus-[0-9]*` setup_toolchain host cd $EGGDBUS_DIR -mkdir -p .build-host +do_autoreconf -cd .build-host +mkdir -p .build-host && cd .build-host ../configure --prefix=$ROOT/$TOOLCHAIN \ --sysconfdir=$ROOT/$TOOLCHAIN/etc \ --disable-static \ diff --git a/packages/devel/eggdbus-host/meta b/packages/devel/eggdbus-host/meta index d8f8d47f92..acedfb99be 100644 --- a/packages/devel/eggdbus-host/meta +++ b/packages/devel/eggdbus-host/meta @@ -12,3 +12,5 @@ PKG_SECTION="devel" PKG_SHORTDESC="eggdbus: D-Bus bindings for GObject" PKG_LONGDESC="D-Bus bindings for GObject." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 79a1b499e2e4776c0770ce89b61cb3a9ca728aaf Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:31 +0100 Subject: [PATCH 743/850] file: add autoreconf support Signed-off-by: Stephan Raue --- packages/devel/file/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/devel/file/meta b/packages/devel/file/meta index 48627b5e38..0630a1affa 100644 --- a/packages/devel/file/meta +++ b/packages/devel/file/meta @@ -12,3 +12,5 @@ PKG_SECTION="devel" PKG_SHORTDESC="file: File type identification utility" PKG_LONGDESC="These are the sources to Darwin's file(1) utility and master magic(4) file, now maintained by Christos Zoulas. The file(1) utility is used to determine the types of various files." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 0e064e84fb6d1422ea0cbce13f4917dd5e15b11c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:31 +0100 Subject: [PATCH 744/850] file-host: add autoreconf support Signed-off-by: Stephan Raue --- packages/devel/file-host/build | 7 ++++--- packages/devel/file-host/meta | 2 ++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/devel/file-host/build b/packages/devel/file-host/build index f9fd8919b4..739ba94401 100755 --- a/packages/devel/file-host/build +++ b/packages/devel/file-host/build @@ -7,11 +7,12 @@ $SCRIPTS/unpack file setup_toolchain host cd $BUILD/file-* -mkdir -p .build-host -cd .build-host + +do_autoreconf +mkdir -p .build-host && cd .build-host ../configure --prefix=$ROOT/$TOOLCHAIN \ --enable-shared \ --disable-static \ make -make install \ No newline at end of file +make install diff --git a/packages/devel/file-host/meta b/packages/devel/file-host/meta index 84e12e5961..776bb11429 100644 --- a/packages/devel/file-host/meta +++ b/packages/devel/file-host/meta @@ -12,3 +12,5 @@ PKG_SECTION="devel" PKG_SHORTDESC="file: File type identification utility" PKG_LONGDESC="These are the sources to Darwin's file(1) utility and master magic(4) file, now maintained by Christos Zoulas. The file(1) utility is used to determine the types of various files." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From a7db7f094bddca1f58ca5fc20514a86d40356ab5 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:31 +0100 Subject: [PATCH 745/850] flex: add autoreconf support Signed-off-by: Stephan Raue --- packages/devel/flex/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/devel/flex/meta b/packages/devel/flex/meta index f3c27f8d6e..c5924c03c4 100644 --- a/packages/devel/flex/meta +++ b/packages/devel/flex/meta @@ -11,4 +11,6 @@ PKG_PRIORITY="optional" PKG_SECTION="devel" PKG_SHORTDESC="flex: Fast lexical analyzer generator" PKG_LONGDESC="flex is a tool for generating programs that perform pattern-matching on text." -PKG_IS_ADDON="no" \ No newline at end of file +PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 53cc891faebca6b5fa51d810bd33b90d87207085 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:31 +0100 Subject: [PATCH 746/850] glib: add autoreconf support Signed-off-by: Stephan Raue --- packages/devel/glib/build | 12 +++++++++--- packages/devel/glib/meta | 4 +++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/devel/glib/build b/packages/devel/glib/build index 9e14f6a736..341d1c253f 100755 --- a/packages/devel/glib/build +++ b/packages/devel/glib/build @@ -2,11 +2,14 @@ . config/options $1 +# Fails to compile with GCC link time optimization, outputing the error: +# "mem-overflow.c:137:1: sorry, unimplemented: gimple bytecode streams do not support the optimization attribute". +# CFLAGS=`echo $CFLAGS | sed -e "s|-flto||"` +# LDFLAGS=`echo $LDFLAGS | sed -e "s|-flto||"` + cd $PKG_BUILD +mkdir -p .build-target && cd .build-target -mkdir -p .build-target - -cd .build-target ac_cv_func_posix_getpwuid_r='yes' \ ac_cv_func_posix_getgrgid_r='yes' \ glib_cv_uscore='no' \ @@ -42,3 +45,6 @@ $MAKEINSTALL # cp glib/glibconfig.h $SYSROOT_PREFIX/usr/include/glib-2.0 mkdir -p $SYSROOT_PREFIX/usr/lib/pkgconfig cp g*-2.0.pc $SYSROOT_PREFIX/usr/lib/pkgconfig + +mkdir -p $SYSROOT_PREFIX/usr/share/aclocal + cp ../m4macros/glib-gettext.m4 $SYSROOT_PREFIX/usr/share/aclocal \ No newline at end of file diff --git a/packages/devel/glib/meta b/packages/devel/glib/meta index f29743588d..908ff7a58f 100644 --- a/packages/devel/glib/meta +++ b/packages/devel/glib/meta @@ -6,9 +6,11 @@ PKG_LICENSE="LGPL" PKG_SITE="http://www.gtk.org/" PKG_URL="http://ftp.gnome.org/pub/gnome/sources/glib/2.27/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="zlib dbus" -PKG_BUILD_DEPENDS="toolchain zlib dbus glib-host" +PKG_BUILD_DEPENDS="toolchain zlib dbus gtk-doc glib-host" PKG_PRIORITY="optional" PKG_SECTION="devel" PKG_SHORTDESC="glib: C support library" PKG_LONGDESC="GLib is a library which includes support routines for C such as lists, trees, hashes, memory allocation, and many other things." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 75bcbcd913f50556e518544e5e7aa339a0ba9678 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:32 +0100 Subject: [PATCH 747/850] glib-host: add autoreconf support Signed-off-by: Stephan Raue --- packages/devel/glib-host/build | 5 ++--- packages/devel/glib-host/meta | 4 +++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/devel/glib-host/build b/packages/devel/glib-host/build index e4a7dba6ee..862b7a1111 100755 --- a/packages/devel/glib-host/build +++ b/packages/devel/glib-host/build @@ -10,9 +10,8 @@ export ZLIB_LIBS="" cd $BUILD/glib* -mkdir -p .build-host - -cd .build-host +do_autoreconf +mkdir -p .build-host && cd .build-host ../configure --prefix=$ROOT/$TOOLCHAIN \ --enable-shared \ --disable-static \ diff --git a/packages/devel/glib-host/meta b/packages/devel/glib-host/meta index 2594d8da4a..3c3e20260a 100644 --- a/packages/devel/glib-host/meta +++ b/packages/devel/glib-host/meta @@ -6,9 +6,11 @@ PKG_LICENSE="LGPL" PKG_SITE="http://www.gtk.org/" PKG_URL="" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain dbus-host" +PKG_BUILD_DEPENDS="toolchain dbus-host gtk-doc" PKG_PRIORITY="optional" PKG_SECTION="devel" PKG_SHORTDESC="glib-host: C support library" PKG_LONGDESC="GLib is a library which includes support routines for C such as lists, trees, hashes, memory allocation, and many other things." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 3e13082451a133fc4fc659fb261c8da0e5826d54 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:32 +0100 Subject: [PATCH 748/850] libevent: add autoreconf support Signed-off-by: Stephan Raue --- packages/devel/libevent/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/devel/libevent/meta b/packages/devel/libevent/meta index 3db33fa391..572faf51ab 100644 --- a/packages/devel/libevent/meta +++ b/packages/devel/libevent/meta @@ -11,4 +11,6 @@ PKG_PRIORITY="optional" PKG_SECTION="devel" PKG_SHORTDESC="libevent: A library for asynchronous event notification" PKG_LONGDESC="The libevent API provides a mechanism to execute a callback function when a specific event occurs on a file descriptor or after a timeout has been reached. It is meant to replace the asynchronous event loop found in event-driven network servers." -PKG_IS_ADDON="no" \ No newline at end of file +PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 7fa114a52ece9ff0895ba15d53d006587d4c7fd7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:32 +0100 Subject: [PATCH 749/850] libffi: add autoreconf support Signed-off-by: Stephan Raue --- packages/devel/libffi/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/devel/libffi/meta b/packages/devel/libffi/meta index 6be4cbeded..1a4b0bfa11 100644 --- a/packages/devel/libffi/meta +++ b/packages/devel/libffi/meta @@ -12,3 +12,5 @@ PKG_SECTION="devel" PKG_SHORTDESC="Foreign Function Interface Library" PKG_LONGDESC="The libffi library provides a portable, high level programming interface to various calling conventions. This allows a programmer to call any function specified by a call interface description at run-time." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 406edaeff2ea9442a1f675572d39dfe45f192814 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:33 +0100 Subject: [PATCH 750/850] libpthread-stubs: add autoreconf support Signed-off-by: Stephan Raue --- packages/devel/libpthread-stubs/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/devel/libpthread-stubs/meta b/packages/devel/libpthread-stubs/meta index 8f47685860..ec52c41d26 100644 --- a/packages/devel/libpthread-stubs/meta +++ b/packages/devel/libpthread-stubs/meta @@ -11,4 +11,6 @@ PKG_PRIORITY="optional" PKG_SECTION="devel" PKG_SHORTDESC="libpthread-stubs: A library providing weak aliases for pthread functions" PKG_LONGDESC="This library provides weak aliases for pthread functions not provided in libc or otherwise available by default. Libraries like libxcb rely on pthread stubs to use pthreads optionally, becoming thread-safe when linked to libpthread, while avoiding any performance hit when running single-threaded." -PKG_IS_ADDON="no" \ No newline at end of file +PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 5ff7ea35abba4ab5e2727508dedc5f49a67a2c9f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:33 +0100 Subject: [PATCH 751/850] libtool: add autoreconf support Signed-off-by: Stephan Raue --- packages/devel/libtool/meta | 4 +++- .../patches/libtool-2.4-no_use_linker_plugin.patch | 13 +++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 packages/devel/libtool/patches/libtool-2.4-no_use_linker_plugin.patch diff --git a/packages/devel/libtool/meta b/packages/devel/libtool/meta index d8e3ed65f2..a2b3463211 100644 --- a/packages/devel/libtool/meta +++ b/packages/devel/libtool/meta @@ -11,4 +11,6 @@ PKG_PRIORITY="optional" PKG_SECTION="devel" PKG_SHORTDESC="libtool: Generic library support script" PKG_LONGDESC="This is GNU Libtool, a generic library support script. Libtool hides the complexity of using shared libraries behind a consistent, portable interface." -PKG_IS_ADDON="no" \ No newline at end of file +PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" diff --git a/packages/devel/libtool/patches/libtool-2.4-no_use_linker_plugin.patch b/packages/devel/libtool/patches/libtool-2.4-no_use_linker_plugin.patch new file mode 100644 index 0000000000..30abedba9c --- /dev/null +++ b/packages/devel/libtool/patches/libtool-2.4-no_use_linker_plugin.patch @@ -0,0 +1,13 @@ +diff -Naur libtool-2.4-old/libltdl/m4/libtool.m4 libtool-2.4-new/libltdl/m4/libtool.m4 +--- libtool-2.4-old/libltdl/m4/libtool.m4 2010-09-22 01:41:19.000000000 -0700 ++++ libtool-2.4-new/libltdl/m4/libtool.m4 2010-09-23 20:25:25.000000000 -0700 +@@ -6905,6 +6905,9 @@ + *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; + *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; + esac ++case "$CC $CFLAGS " in #( ++*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; ++esac + + dnl Parse the compiler output and extract the necessary + dnl objects, libraries and library flags. From f1fe0330fb4761f3e9150a91a8b35092953b94fb Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:33 +0100 Subject: [PATCH 752/850] ncurses: add autoreconf support Signed-off-by: Stephan Raue --- packages/devel/ncurses/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/devel/ncurses/meta b/packages/devel/ncurses/meta index 7b0b0d2ddb..bf955120ff 100644 --- a/packages/devel/ncurses/meta +++ b/packages/devel/ncurses/meta @@ -11,4 +11,6 @@ PKG_PRIORITY="optional" PKG_SECTION="devel" PKG_SHORTDESC="ncurses: The ncurses (new curses) library" PKG_LONGDESC="The ncurses (new curses) library is a free software emulation of curses in System V Release 4.0, and more. It uses terminfo format, supports pads and color and multiple highlights and forms characters and function-key mapping, and has all the other SYSV-curses enhancements over BSD curses." -PKG_IS_ADDON="no" \ No newline at end of file +PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 20552a2f89f17074e32d5015661a00d1056f65c4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:33 +0100 Subject: [PATCH 753/850] pcre: add autoreconf support Signed-off-by: Stephan Raue --- packages/devel/pcre/build | 3 +++ packages/devel/pcre/meta | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/devel/pcre/build b/packages/devel/pcre/build index 424f0cc86e..3a0b1e5f51 100755 --- a/packages/devel/pcre/build +++ b/packages/devel/pcre/build @@ -3,6 +3,8 @@ . config/options $1 cd $PKG_BUILD + +mkdir -p m4 && do_autoreconf ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ @@ -13,6 +15,7 @@ cd $PKG_BUILD --disable-static \ --enable-utf8 \ --enable-unicode-properties \ + --with-gnu-ld make diff --git a/packages/devel/pcre/meta b/packages/devel/pcre/meta index a2b3196c0a..eaca718e4c 100644 --- a/packages/devel/pcre/meta +++ b/packages/devel/pcre/meta @@ -11,4 +11,6 @@ PKG_PRIORITY="optional" PKG_SECTION="devel" PKG_SHORTDESC="pcre: Perl Compatible Regulat Expressions" PKG_LONGDESC="The PCRE library is a set of functions that implement regular expression pattern matching using the same syntax and semantics as Perl 5. PCRE has its own native API, as well as a set of wrapper functions that correspond to the POSIX regular expression API. The PCRE library is free, even for building commercial software." -PKG_IS_ADDON="no" \ No newline at end of file +PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 66b355fd6fe99cd5ccf7c9332cd47d10ab993156 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:33 +0100 Subject: [PATCH 754/850] talloc: add autoreconf support Signed-off-by: Stephan Raue --- packages/devel/talloc/build | 4 +++- packages/devel/talloc/meta | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/devel/talloc/build b/packages/devel/talloc/build index 684c7e6d57..5d0c3c9f00 100755 --- a/packages/devel/talloc/build +++ b/packages/devel/talloc/build @@ -3,6 +3,8 @@ . config/options $1 cd $PKG_BUILD + +do_autoreconf -I libreplace ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ @@ -11,4 +13,4 @@ cd $PKG_BUILD make -$MAKEINSTALL \ No newline at end of file +$MAKEINSTALL diff --git a/packages/devel/talloc/meta b/packages/devel/talloc/meta index 22d2e1dbe9..a9df9daf19 100644 --- a/packages/devel/talloc/meta +++ b/packages/devel/talloc/meta @@ -12,3 +12,5 @@ PKG_SECTION="devel" PKG_SHORTDESC="talloc: talloc is a hierarchical, reference counted memory pool system with destructors." PKG_LONGDESC="talloc is a hierarchical, reference counted memory pool system with destructors. It is the core memory allocator used in Samba." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From a8923785492d9d7350826de37237153a159206e5 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:41 +0100 Subject: [PATCH 755/850] evtest: add autoreconf support Signed-off-by: Stephan Raue --- packages/debug/evtest/build | 3 --- packages/debug/evtest/meta | 2 ++ 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/debug/evtest/build b/packages/debug/evtest/build index fab2c07fa2..c63dca2f86 100755 --- a/packages/debug/evtest/build +++ b/packages/debug/evtest/build @@ -3,9 +3,6 @@ . config/options $1 cd $PKG_BUILD - -$AUTORECONF - ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ diff --git a/packages/debug/evtest/meta b/packages/debug/evtest/meta index 12d8e1c983..946107ec54 100644 --- a/packages/debug/evtest/meta +++ b/packages/debug/evtest/meta @@ -12,3 +12,5 @@ PKG_SECTION="debug" PKG_SHORTDESC="evtest: Simple tool for input event debugging." PKG_LONGDESC="evtest is a simple tool for input event debugging." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 681f8d5ceaa479bfe2d5fc36bd908411b206c876 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:41 +0100 Subject: [PATCH 756/850] gdb: add autoreconf support Signed-off-by: Stephan Raue --- packages/debug/gdb/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/debug/gdb/meta b/packages/debug/gdb/meta index 25b3f9037c..a9f6b6353f 100644 --- a/packages/debug/gdb/meta +++ b/packages/debug/gdb/meta @@ -12,3 +12,5 @@ PKG_SECTION="debug" PKG_SHORTDESC="gdb: The GNU Debugger" PKG_LONGDESC="The purpose of a debugger such as GDB is to allow you to see what is going on ``inside'' another program while it executes--or what another program was doing at the moment it crashed." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From f63c47b0828c62727ae38b2083080fe0bdfb1de3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:41 +0100 Subject: [PATCH 757/850] htop: add autoreconf support Signed-off-by: Stephan Raue --- packages/debug/htop/build | 2 -- packages/debug/htop/meta | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/debug/htop/build b/packages/debug/htop/build index 566f14ab9c..de26216428 100755 --- a/packages/debug/htop/build +++ b/packages/debug/htop/build @@ -3,8 +3,6 @@ . config/options $1 cd $PKG_BUILD -$AUTORECONF - ac_cv_func_malloc_0_nonnull=yes \ ac_cv_func_realloc_0_nonnull=yes \ ./configure --host=$TARGET_NAME \ diff --git a/packages/debug/htop/meta b/packages/debug/htop/meta index 8ef3c5927a..5613f2a2f3 100644 --- a/packages/debug/htop/meta +++ b/packages/debug/htop/meta @@ -12,3 +12,5 @@ PKG_SECTION="debug" PKG_SHORTDESC="htop: Htop is an ncurses based interactive process viewer for Linux." PKG_LONGDESC="Htop is an ncurses based interactive process viewer for Linux." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 82dbcddcdedf1718b15cf36e7132eb3c8f45a4c8 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:41 +0100 Subject: [PATCH 758/850] mesa-demos: add autoreconf support Signed-off-by: Stephan Raue --- packages/debug/mesa-demos/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/debug/mesa-demos/meta b/packages/debug/mesa-demos/meta index a3a600b2fc..9961577157 100644 --- a/packages/debug/mesa-demos/meta +++ b/packages/debug/mesa-demos/meta @@ -12,3 +12,5 @@ PKG_SECTION="debug" PKG_SHORTDESC="mesa-demos: Mesa 3D demos" PKG_LONGDESC="Mesa 3D demos - installed are the well known glxinfo and glxgears." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 5f81394e169c78ac04ae63e8b70576abe50ad402 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:41 +0100 Subject: [PATCH 759/850] meta: add autoreconf support Signed-off-by: Stephan Raue --- packages/debug/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/debug/meta b/packages/debug/meta index e91e924510..0f86ef36b1 100644 --- a/packages/debug/meta +++ b/packages/debug/meta @@ -13,5 +13,7 @@ PKG_SHORTDESC="debug: Metapackage for installing debugging tools" PKG_LONGDESC="debug is a Metapackage for installing debugging tools" PKG_IS_ADDON="no" +PKG_AUTORECONF="no" + From 023919bde0fdd6b6eb83780a580aee1b25ad7058 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:41 +0100 Subject: [PATCH 760/850] nano: add autoreconf support Signed-off-by: Stephan Raue --- packages/debug/nano/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/debug/nano/meta b/packages/debug/nano/meta index ccce389b1d..ea7e80940f 100644 --- a/packages/debug/nano/meta +++ b/packages/debug/nano/meta @@ -12,3 +12,5 @@ PKG_SECTION="debug" PKG_SHORTDESC="nano: Pico editor clone with enhancements" PKG_LONGDESC="GNU nano (Nano's ANOther editor, or Not ANOther editor) is an enhanced clone of the Pico text editor." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 290a84b230d9dcb6af1c1a65483040781423f3bf Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:42 +0100 Subject: [PATCH 761/850] strace: add autoreconf support Signed-off-by: Stephan Raue --- packages/debug/strace/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/debug/strace/meta b/packages/debug/strace/meta index 2cb0a1aa35..51e7d91261 100644 --- a/packages/debug/strace/meta +++ b/packages/debug/strace/meta @@ -12,3 +12,5 @@ PKG_SECTION="debug" PKG_SHORTDESC="strace: Trace system calls and signals" PKG_LONGDESC="In the simplest case strace runs the specified command until it exits. It intercepts and records the system calls which are called by a process and the signals which are received by a process. The name of each system call, its arguments and its return value are printed on standard error or to the file specified with the -o option." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From dd82aa0918e350c15016103c8eb16ad7d2354dc3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:42 +0100 Subject: [PATCH 762/850] tvdump: add autoreconf support Signed-off-by: Stephan Raue --- packages/debug/tvdump/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/debug/tvdump/meta b/packages/debug/tvdump/meta index 7364c829b2..130f417455 100644 --- a/packages/debug/tvdump/meta +++ b/packages/debug/tvdump/meta @@ -12,3 +12,5 @@ PKG_SECTION="system" PKG_SHORTDESC="tvdump: a tool for debugging some informations of video bios" PKG_LONGDESC="tvdump is a tool for debugging some informations of video bios" PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 019c81de9fbf6583512f65ccf3f9856f062be24e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:42 +0100 Subject: [PATCH 763/850] wgetpaste: add autoreconf support Signed-off-by: Stephan Raue --- packages/debug/wgetpaste/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/debug/wgetpaste/meta b/packages/debug/wgetpaste/meta index a6ed2779b3..db964a0cb8 100644 --- a/packages/debug/wgetpaste/meta +++ b/packages/debug/wgetpaste/meta @@ -12,3 +12,5 @@ PKG_SECTION="debug" PKG_SHORTDESC="wgetpaste: Upload Directly to Pastebin from the Linux Shell" PKG_LONGDESC="Wgetpaste is a tool for Uploading Directly to Pastebin from the Linux Shell" PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From aac7aa837f95016a2da3b62f0273e3a02f4e7dc2 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:19:42 +0100 Subject: [PATCH 764/850] w_scan: add autoreconf support Signed-off-by: Stephan Raue --- packages/debug/w_scan/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/debug/w_scan/meta b/packages/debug/w_scan/meta index 70c6b7e19f..97162d867e 100644 --- a/packages/debug/w_scan/meta +++ b/packages/debug/w_scan/meta @@ -12,3 +12,5 @@ PKG_SECTION="debug" PKG_SHORTDESC="w_scan: eine kleine Anwendung zum Scannen von ATSC/DVB-C/S/T Transpondern/Bouquets nach Sendern und Erstellen einer VDR channels.conf." PKG_LONGDESC="w_scan ist eine kleine Anwendung zum Scannen von ATSC/DVB-C/S/T Transpondern/Bouquets nach Sendern und Erstellen einer VDR channels.conf." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 6e5bb3f519d84ce41c2ea64d7de164591e3dd143 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:21:14 +0100 Subject: [PATCH 765/850] bzip2: add autoreconf support Signed-off-by: Stephan Raue --- packages/compress/bzip2/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/compress/bzip2/meta b/packages/compress/bzip2/meta index 495bbd7ed6..0e6858c314 100644 --- a/packages/compress/bzip2/meta +++ b/packages/compress/bzip2/meta @@ -12,3 +12,5 @@ PKG_SECTION="compress" PKG_SHORTDESC="bzip2 data compressor" PKG_LONGDESC="bzip2 is a freely available, patent free (see below), high-quality data compressor. It typically compresses files to within 10% to 15% of the best available techniques (the PPM family of statistical compressors), whilst being around twice as fast at compression and six times faster at decompression." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 4151b18cc82882fc46707d15ed794bae38326b4c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:21:14 +0100 Subject: [PATCH 766/850] lzo: add autoreconf support Signed-off-by: Stephan Raue --- packages/compress/lzo/build | 2 +- packages/compress/lzo/meta | 2 + .../lzo/patches/lzo-2.04-acinclude_m4.patch | 377 ++++++++++++++++++ .../patches/lzo-2.04-fix_makefile_am.patch | 24 ++ 4 files changed, 404 insertions(+), 1 deletion(-) create mode 100644 packages/compress/lzo/patches/lzo-2.04-acinclude_m4.patch create mode 100644 packages/compress/lzo/patches/lzo-2.04-fix_makefile_am.patch diff --git a/packages/compress/lzo/build b/packages/compress/lzo/build index 186f78693d..815fdf1043 100755 --- a/packages/compress/lzo/build +++ b/packages/compress/lzo/build @@ -14,4 +14,4 @@ cd $PKG_BUILD make -$MAKEINSTALL \ No newline at end of file +$MAKEINSTALL diff --git a/packages/compress/lzo/meta b/packages/compress/lzo/meta index 6581178639..531408d3a7 100644 --- a/packages/compress/lzo/meta +++ b/packages/compress/lzo/meta @@ -12,3 +12,5 @@ PKG_SECTION="compress" PKG_SHORTDESC="LZO data compressor" PKG_LONGDESC="LZO is a data compression library which is suitable for data de-/compression in real-time. This means it favours speed over compression ratio." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" diff --git a/packages/compress/lzo/patches/lzo-2.04-acinclude_m4.patch b/packages/compress/lzo/patches/lzo-2.04-acinclude_m4.patch new file mode 100644 index 0000000000..8f860f4cc0 --- /dev/null +++ b/packages/compress/lzo/patches/lzo-2.04-acinclude_m4.patch @@ -0,0 +1,377 @@ +The lzo tarball only contains an aclocal.m4, which is the result from +running aclocal. Unfortunately, it lacks the acinclude.m4 file which +would allow us to do an autoreconf of the package. Therefore, this +patch extracts from aclocal.m4 the parts that are specific to this lzo +package, and put them into an acinclude.m4 so that autoreconf on this +package will work. + +Signed-off-by: Thomas Petazzoni +--- + acinclude.m4 | 360 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 360 insertions(+) + +Index: lzo-2.03/acinclude.m4 +=================================================================== +--- /dev/null ++++ lzo-2.03/acinclude.m4 +@@ -0,0 +1,360 @@ ++# /*********************************************************************** ++# // standard ACC macros ++# ************************************************************************/ ++ ++AC_DEFUN([mfx_ACC_CHECK_ENDIAN], [ ++AC_C_BIGENDIAN([AC_DEFINE(ACC_ABI_BIG_ENDIAN,1,[Define to 1 if your machine is big endian.])],[AC_DEFINE(ACC_ABI_LITTLE_ENDIAN,1,[Define to 1 if your machine is little endian.])]) ++])# ++ ++AC_DEFUN([mfx_ACC_CHECK_HEADERS], [ ++AC_HEADER_TIME ++AC_CHECK_HEADERS([assert.h ctype.h dirent.h errno.h fcntl.h float.h limits.h malloc.h memory.h setjmp.h signal.h stdarg.h stddef.h stdint.h stdio.h stdlib.h string.h strings.h time.h unistd.h utime.h sys/mman.h sys/resource.h sys/stat.h sys/time.h sys/types.h sys/wait.h]) ++])# ++ ++AC_DEFUN([mfx_ACC_CHECK_FUNCS], [ ++AC_CHECK_FUNCS(access alloca atexit atoi atol chmod chown clock_getcpuclockid clock_getres clock_gettime ctime difftime fstat getenv getpagesize getrusage gettimeofday gmtime isatty localtime longjmp lstat memcmp memcpy memmove memset mkdir mktime mmap mprotect munmap qsort raise rmdir setjmp signal snprintf strcasecmp strchr strdup strerror strftime stricmp strncasecmp strnicmp strrchr strstr time umask utime vsnprintf) ++])# ++ ++ ++AC_DEFUN([mfx_ACC_CHECK_SIZEOF], [ ++AC_CHECK_SIZEOF(short) ++AC_CHECK_SIZEOF(int) ++AC_CHECK_SIZEOF(long) ++ ++AC_CHECK_SIZEOF(long long) ++AC_CHECK_SIZEOF(__int16) ++AC_CHECK_SIZEOF(__int32) ++AC_CHECK_SIZEOF(__int64) ++ ++AC_CHECK_SIZEOF(void *) ++AC_CHECK_SIZEOF(size_t) ++AC_CHECK_SIZEOF(ptrdiff_t) ++])# ++ ++ ++# /*********************************************************************** ++# // Check for ACC_conformance ++# ************************************************************************/ ++ ++AC_DEFUN([mfx_ACC_ACCCHK], [ ++mfx_tmp=$1 ++mfx_save_CPPFLAGS=$CPPFLAGS ++dnl in Makefile.in $(INCLUDES) will be before $(CPPFLAGS), so we mimic this here ++test "X$mfx_tmp" = "X" || CPPFLAGS="$mfx_tmp $CPPFLAGS" ++ ++AC_MSG_CHECKING([whether your compiler passes the ACC conformance test]) ++ ++AC_LANG_CONFTEST([AC_LANG_PROGRAM( ++[[#define ACC_CONFIG_NO_HEADER 1 ++#include "acc/acc.h" ++#include "acc/acc_incd.h" ++#undef ACCCHK_ASSERT ++#define ACCCHK_ASSERT(expr) ACC_COMPILE_TIME_ASSERT_HEADER(expr) ++#include "acc/acc_chk.ch" ++#undef ACCCHK_ASSERT ++static void test_acc_compile_time_assert(void) { ++#define ACCCHK_ASSERT(expr) ACC_COMPILE_TIME_ASSERT(expr) ++#include "acc/acc_chk.ch" ++#undef ACCCHK_ASSERT ++} ++#undef NDEBUG ++#include ++static int test_acc_run_time_assert(int r) { ++#define ACCCHK_ASSERT(expr) assert(expr); ++#include "acc/acc_chk.ch" ++#undef ACCCHK_ASSERT ++return r; ++} ++]], [[ ++test_acc_compile_time_assert(); ++if (test_acc_run_time_assert(1) != 1) return 1; ++]] ++)]) ++ ++mfx_tmp=FAILED ++_AC_COMPILE_IFELSE([], [mfx_tmp=yes]) ++rm -f conftest.$ac_ext conftest.$ac_objext ++ ++CPPFLAGS=$mfx_save_CPPFLAGS ++ ++AC_MSG_RESULT([$mfx_tmp]) ++case x$mfx_tmp in ++ xpassed | xyes) ;; ++ *) ++ AC_MSG_NOTICE([]) ++ AC_MSG_NOTICE([Your compiler failed the ACC conformance test - for details see ]) ++ AC_MSG_NOTICE([`config.log'. Please check that log file and consider sending]) ++ AC_MSG_NOTICE([a patch or bug-report to <${PACKAGE_BUGREPORT}>.]) ++ AC_MSG_NOTICE([Thanks for your support.]) ++ AC_MSG_NOTICE([]) ++ AC_MSG_ERROR([ACC conformance test failed. Stop.]) ++dnl AS_EXIT ++ ;; ++esac ++])# mfx_ACC_ACCCHK ++ ++ ++# /*********************************************************************** ++# // Check for ACC_conformance ++# ************************************************************************/ ++ ++AC_DEFUN([mfx_MINIACC_ACCCHK], [ ++mfx_tmp=$1 ++mfx_save_CPPFLAGS=$CPPFLAGS ++dnl in Makefile.in $(INCLUDES) will be before $(CPPFLAGS), so we mimic this here ++test "X$mfx_tmp" = "X" || CPPFLAGS="$mfx_tmp $CPPFLAGS" ++ ++AC_MSG_CHECKING([whether your compiler passes the ACC conformance test]) ++ ++AC_LANG_CONFTEST([AC_LANG_PROGRAM( ++[[#define ACC_CONFIG_NO_HEADER 1 ++#define ACC_WANT_ACC_INCD_H 1 ++#include $2 ++ ++#define ACC_WANT_ACC_CHK_CH 1 ++#undef ACCCHK_ASSERT ++#define ACCCHK_ASSERT(expr) ACC_COMPILE_TIME_ASSERT_HEADER(expr) ++#include $2 ++ ++#define ACC_WANT_ACC_CHK_CH 1 ++#undef ACCCHK_ASSERT ++#define ACCCHK_ASSERT(expr) ACC_COMPILE_TIME_ASSERT(expr) ++static void test_acc_compile_time_assert(void) { ++#include $2 ++} ++ ++#undef NDEBUG ++#include ++#define ACC_WANT_ACC_CHK_CH 1 ++#undef ACCCHK_ASSERT ++#define ACCCHK_ASSERT(expr) assert(expr); ++static int test_acc_run_time_assert(int r) { ++#include $2 ++return r; ++} ++]], [[ ++test_acc_compile_time_assert(); ++if (test_acc_run_time_assert(1) != 1) return 1; ++]] ++)]) ++ ++mfx_tmp=FAILED ++_AC_COMPILE_IFELSE([], [mfx_tmp=yes]) ++rm -f conftest.$ac_ext conftest.$ac_objext ++ ++CPPFLAGS=$mfx_save_CPPFLAGS ++ ++AC_MSG_RESULT([$mfx_tmp]) ++case x$mfx_tmp in ++ xpassed | xyes) ;; ++ *) ++ AC_MSG_NOTICE([]) ++ AC_MSG_NOTICE([Your compiler failed the ACC conformance test - for details see ]) ++ AC_MSG_NOTICE([`config.log'. Please check that log file and consider sending]) ++ AC_MSG_NOTICE([a patch or bug-report to <${PACKAGE_BUGREPORT}>.]) ++ AC_MSG_NOTICE([Thanks for your support.]) ++ AC_MSG_NOTICE([]) ++ AC_MSG_ERROR([ACC conformance test failed. Stop.]) ++dnl AS_EXIT ++ ;; ++esac ++])# mfx_MINIACC_ACCCHK ++ ++ ++ ++# serial 1 ++ ++AC_DEFUN([mfx_PROG_CPPFLAGS], [ ++AC_MSG_CHECKING([whether the C preprocessor needs special flags]) ++ ++AC_LANG_CONFTEST([AC_LANG_PROGRAM( ++[[#include ++#if (32767 >= 4294967295ul) || (65535u >= 4294967295ul) ++# include "your C preprocessor is broken 1" ++#elif (0xffffu == 0xfffffffful) ++# include "your C preprocessor is broken 2" ++#elif (32767 >= ULONG_MAX) || (65535u >= ULONG_MAX) ++# include "your C preprocessor is broken 3" ++#endif ++]], [[ ]] ++)]) ++ ++mfx_save_CPPFLAGS=$CPPFLAGS ++mfx_tmp=ERROR ++for mfx_arg in "" -no-cpp-precomp ++do ++ CPPFLAGS="$mfx_arg $mfx_save_CPPFLAGS" ++ _AC_COMPILE_IFELSE([], ++[mfx_tmp=$mfx_arg ++break]) ++done ++CPPFLAGS=$mfx_save_CPPFLAGS ++rm -f conftest.$ac_ext conftest.$ac_objext ++case x$mfx_tmp in ++ x) ++ AC_MSG_RESULT([none needed]) ;; ++ xERROR) ++ AC_MSG_RESULT([ERROR]) ++ AC_MSG_ERROR([your C preprocessor is broken - for details see config.log]) ++ ;; ++ *) ++ AC_MSG_RESULT([$mfx_tmp]) ++ CPPFLAGS="$mfx_tmp $CPPFLAGS" ++ ;; ++esac ++])# mfx_PROG_CPPFLAGS ++ ++# serial 3 ++ ++AC_DEFUN([mfx_CHECK_HEADER_SANE_LIMITS_H], [ ++AC_CACHE_CHECK([whether limits.h is sane], ++mfx_cv_header_sane_limits_h, ++[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ++#if (32767 >= 4294967295ul) || (65535u >= 4294967295ul) ++# if defined(__APPLE__) && defined(__GNUC__) ++# error "your preprocessor is broken - use compiler option -no-cpp-precomp" ++# else ++# include "your preprocessor is broken" ++# endif ++#endif ++#define MFX_0xffff 0xffff ++#define MFX_0xffffffffL 4294967295ul ++#if !defined(CHAR_BIT) || (CHAR_BIT != 8) ++# include "error CHAR_BIT" ++#endif ++#if !defined(UCHAR_MAX) ++# include "error UCHAR_MAX 1" ++#endif ++#if !defined(USHRT_MAX) ++# include "error USHRT_MAX 1" ++#endif ++#if !defined(UINT_MAX) ++# include "error UINT_MAX 1" ++#endif ++#if !defined(ULONG_MAX) ++# include "error ULONG_MAX 1" ++#endif ++#if !defined(SHRT_MAX) ++# include "error SHRT_MAX 1" ++#endif ++#if !defined(INT_MAX) ++# include "error INT_MAX 1" ++#endif ++#if !defined(LONG_MAX) ++# include "error LONG_MAX 1" ++#endif ++#if (UCHAR_MAX < 1) ++# include "error UCHAR_MAX 2" ++#endif ++#if (USHRT_MAX < 1) ++# include "error USHRT_MAX 2" ++#endif ++#if (UINT_MAX < 1) ++# include "error UINT_MAX 2" ++#endif ++#if (ULONG_MAX < 1) ++# include "error ULONG_MAX 2" ++#endif ++#if (UCHAR_MAX < 0xff) ++# include "error UCHAR_MAX 3" ++#endif ++#if (USHRT_MAX < MFX_0xffff) ++# include "error USHRT_MAX 3" ++#endif ++#if (UINT_MAX < MFX_0xffff) ++# include "error UINT_MAX 3" ++#endif ++#if (ULONG_MAX < MFX_0xffffffffL) ++# include "error ULONG_MAX 3" ++#endif ++#if (USHRT_MAX > UINT_MAX) ++# include "error USHRT_MAX vs UINT_MAX" ++#endif ++#if (UINT_MAX > ULONG_MAX) ++# include "error UINT_MAX vs ULONG_MAX" ++#endif ++]], [[ ++#if (USHRT_MAX == MFX_0xffff) ++{ typedef char a_short2a[1 - 2 * !(sizeof(short) == 2)]; } ++#elif (USHRT_MAX >= MFX_0xffff) ++{ typedef char a_short2b[1 - 2 * !(sizeof(short) > 2)]; } ++#endif ++#if (UINT_MAX == MFX_0xffff) ++{ typedef char a_int2a[1 - 2 * !(sizeof(int) == 2)]; } ++#elif (UINT_MAX >= MFX_0xffff) ++{ typedef char a_int2b[1 - 2 * !(sizeof(int) > 2)]; } ++#endif ++#if (ULONG_MAX == MFX_0xffff) ++{ typedef char a_long2a[1 - 2 * !(sizeof(long) == 2)]; } ++#elif (ULONG_MAX >= MFX_0xffff) ++{ typedef char a_long2b[1 - 2 * !(sizeof(long) > 2)]; } ++#endif ++#if !defined(_CRAY1) /* CRAY PVP systems */ ++#if (USHRT_MAX == MFX_0xffffffffL) ++{ typedef char a_short4a[1 - 2 * !(sizeof(short) == 4)]; } ++#elif (USHRT_MAX >= MFX_0xffffffffL) ++{ typedef char a_short4b[1 - 2 * !(sizeof(short) > 4)]; } ++#endif ++#endif /* _CRAY1 */ ++#if (UINT_MAX == MFX_0xffffffffL) ++{ typedef char a_int4a[1 - 2 * !(sizeof(int) == 4)]; } ++#elif (UINT_MAX >= MFX_0xffffffffL) ++{ typedef char a_int4b[1 - 2 * !(sizeof(int) > 4)]; } ++#endif ++#if (ULONG_MAX == MFX_0xffffffffL) ++{ typedef char a_long4a[1 - 2 * !(sizeof(long) == 4)]; } ++#elif (ULONG_MAX >= MFX_0xffffffffL) ++{ typedef char a_long4b[1 - 2 * !(sizeof(long) > 4)]; } ++#endif ++]])], ++[mfx_cv_header_sane_limits_h=yes], ++[mfx_cv_header_sane_limits_h=no])]) ++]) ++ ++# /*********************************************************************** ++# // standard ++# ************************************************************************/ ++ ++AC_DEFUN([mfx_LZO_CHECK_ENDIAN], [ ++AC_C_BIGENDIAN([AC_DEFINE(LZO_ABI_BIG_ENDIAN,1,[Define to 1 if your machine is big endian.])],[AC_DEFINE(LZO_ABI_LITTLE_ENDIAN,1,[Define to 1 if your machine is little endian.])]) ++])# ++ ++ ++# /*********************************************************************** ++# // ++# ************************************************************************/ ++ ++dnl more types which are not yet covered by ACC ++ ++AC_DEFUN([mfx_CHECK_SIZEOF], [ ++AC_CHECK_SIZEOF(__int32) ++AC_CHECK_SIZEOF(intmax_t) ++AC_CHECK_SIZEOF(uintmax_t) ++AC_CHECK_SIZEOF(intptr_t) ++AC_CHECK_SIZEOF(uintptr_t) ++ ++AC_CHECK_SIZEOF(float) ++AC_CHECK_SIZEOF(double) ++AC_CHECK_SIZEOF(long double) ++ ++AC_CHECK_SIZEOF(dev_t) ++AC_CHECK_SIZEOF(fpos_t) ++AC_CHECK_SIZEOF(mode_t) ++AC_CHECK_SIZEOF(off_t) ++AC_CHECK_SIZEOF(ssize_t) ++AC_CHECK_SIZEOF(time_t) ++])# ++ ++ ++ ++AC_DEFUN([mfx_CHECK_LIB_WINMM], [ ++if test "X$GCC" = Xyes; then ++case $host_os in ++cygwin* | mingw* | pw32*) ++ test "X$LIBS" != "X" && LIBS="$LIBS " ++ LIBS="${LIBS}-lwinmm" ;; ++*) ++ ;; ++esac ++fi ++])# diff --git a/packages/compress/lzo/patches/lzo-2.04-fix_makefile_am.patch b/packages/compress/lzo/patches/lzo-2.04-fix_makefile_am.patch new file mode 100644 index 0000000000..9f23e40db1 --- /dev/null +++ b/packages/compress/lzo/patches/lzo-2.04-fix_makefile_am.patch @@ -0,0 +1,24 @@ +Makefile.am is not allowed to override CFLAGS/CPPFLAGS, it must use +AM_CFLAGS and AM_CPPFLAGS. This is needed in order for autoreconf to +work on this package. + +Signed-off-by: Thomas Petazzoni +--- + src/Makefile.am | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Index: lzo-2.03/src/Makefile.am +=================================================================== +--- lzo-2.03.orig/src/Makefile.am ++++ lzo-2.03/src/Makefile.am +@@ -7,8 +7,8 @@ + SUFFIXES = .S + + INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir) +-CPPFLAGS = $(LZO_CPPFLAGS) $(configure_CPPFLAGS) $(LZO_EXTRA_CPPFLAGS) +-CFLAGS = $(LZO_CFLAGS) $(configure_CFLAGS) $(LZO_EXTRA_CFLAGS) ++AM_CPPFLAGS = $(LZO_CPPFLAGS) $(configure_CPPFLAGS) $(LZO_EXTRA_CPPFLAGS) ++AM_CFLAGS = $(LZO_CFLAGS) $(configure_CFLAGS) $(LZO_EXTRA_CFLAGS) + + lib_LTLIBRARIES = liblzo2.la + From 318ebbf7e15fb731bf09afffdb91d67ec2d294f2 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:21:14 +0100 Subject: [PATCH 767/850] unrar: add autoreconf support Signed-off-by: Stephan Raue --- packages/compress/unrar/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/compress/unrar/meta b/packages/compress/unrar/meta index 547e4d33ed..dd0eeca421 100644 --- a/packages/compress/unrar/meta +++ b/packages/compress/unrar/meta @@ -12,3 +12,5 @@ PKG_SECTION="compress" PKG_SHORTDESC="unrar: Extract, test and view RAR archives" PKG_LONGDESC="Unrar is a package to handle files compressed in the RAR format. Due to strange licensing issues this package can only view, test and extract files in a given archive, but not pack files. But since we have far more advanced open-source compression utils it should be enough to extract the content when you get a RAR archive." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 1cb652b6a547720f158761d84d22e2ebde68f5b5 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:21:14 +0100 Subject: [PATCH 768/850] unzip: add autoreconf support Signed-off-by: Stephan Raue --- packages/compress/unzip/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/compress/unzip/meta b/packages/compress/unzip/meta index d413d8753b..affdd0b238 100644 --- a/packages/compress/unzip/meta +++ b/packages/compress/unzip/meta @@ -12,3 +12,5 @@ PKG_SECTION="compress" PKG_SHORTDESC="unzip: PKUNZIP compatible compression utility" PKG_LONGDESC="UnZip is an extraction utility for archives compressed in .zip format (also called "zipfiles"). Although highly compatible both with PKWARE's PKZIP and PKUNZIP utilities for MS-DOS and with Info-ZIP's own Zip program, the primary objectives have been portability and non-MSDOS functionality." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 4b54aa70565e95ee5d4ab5f64a8961ab717a3f78 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:21:14 +0100 Subject: [PATCH 769/850] zlib: add autoreconf support Signed-off-by: Stephan Raue --- packages/compress/zlib/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/compress/zlib/meta b/packages/compress/zlib/meta index 684bbe4907..26dd3914ce 100644 --- a/packages/compress/zlib/meta +++ b/packages/compress/zlib/meta @@ -12,3 +12,5 @@ PKG_SECTION="compress" PKG_SHORTDESC="zlib: A general purpose (ZIP) data compression library" PKG_LONGDESC="zlib is a general purpose data compression library. All the code is thread safe. The data format used by the zlib library is described by RFCs (Request for Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format)." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 33f389f287cb4df2fc559f23de484a50abf4bb36 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:21:23 +0100 Subject: [PATCH 770/850] mysql: add autoreconf support Signed-off-by: Stephan Raue --- packages/databases/mysql/build | 3 --- packages/databases/mysql/meta | 2 ++ 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/databases/mysql/build b/packages/databases/mysql/build index ad9a9b53f0..c7aa0bbe12 100755 --- a/packages/databases/mysql/build +++ b/packages/databases/mysql/build @@ -3,9 +3,6 @@ . config/options $1 cd $PKG_BUILD - -$AUTORECONF - ac_cv_c_stack_direction=-1 \ ac_cv_sys_restartable_syscalls=yes \ ./configure --host=$TARGET_NAME \ diff --git a/packages/databases/mysql/meta b/packages/databases/mysql/meta index 125d81288c..f1420f7147 100644 --- a/packages/databases/mysql/meta +++ b/packages/databases/mysql/meta @@ -12,3 +12,5 @@ PKG_SECTION="database" PKG_SHORTDESC="mysql: A database server" PKG_LONGDESC="MySQL is a SQL (Structured Query Language) database server. SQL is the most popular database language in the world. MySQL is a client server implementation that consists of a server daemon mysqld and many different client programs/libraries." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 45dfaabca46b1ce658e8b43e6f0be80ed40462da Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:21:24 +0100 Subject: [PATCH 771/850] mysql-hosttools: add autoreconf support Signed-off-by: Stephan Raue --- packages/databases/mysql-hosttools/build | 8 ++------ packages/databases/mysql-hosttools/meta | 2 ++ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/databases/mysql-hosttools/build b/packages/databases/mysql-hosttools/build index 53875838a0..c6f7578880 100755 --- a/packages/databases/mysql-hosttools/build +++ b/packages/databases/mysql-hosttools/build @@ -7,12 +7,8 @@ $SCRIPTS/unpack mysql setup_toolchain host cd $BUILD/mysql* - -$AUTORECONF - -mkdir -p .objdir-host -cd .objdir-host - +do_autoreconf +mkdir -p .objdir-host && cd .objdir-host ../configure --prefix=/usr \ --sysconfdir=/etc \ --libexecdir=/usr/sbin \ diff --git a/packages/databases/mysql-hosttools/meta b/packages/databases/mysql-hosttools/meta index 5d71bc3650..8f6ccd06cd 100644 --- a/packages/databases/mysql-hosttools/meta +++ b/packages/databases/mysql-hosttools/meta @@ -12,3 +12,5 @@ PKG_SECTION="database" PKG_SHORTDESC="mysql: A database server" PKG_LONGDESC="MySQL is a SQL (Structured Query Language) database server. SQL is the most popular database language in the world. MySQL is a client server implementation that consists of a server daemon mysqld and many different client programs/libraries." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From e8c766d2e27ec87179ee876c3f74b92ad95cdfd0 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:21:24 +0100 Subject: [PATCH 772/850] sqlite: add autoreconf support Signed-off-by: Stephan Raue --- packages/databases/sqlite/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/databases/sqlite/meta b/packages/databases/sqlite/meta index e1948dcc99..ac3433184f 100644 --- a/packages/databases/sqlite/meta +++ b/packages/databases/sqlite/meta @@ -12,3 +12,5 @@ PKG_SECTION="database" PKG_SHORTDESC="sqlite: An Embeddable SQL Database Engine" PKG_LONGDESC="SQLite is a C library that implements an embeddable SQL database engine. Programs that link with the SQLite library can have SQL database access without running a separate RDBMS process. The distribution comes with a standalone command-line access program (sqlite) that can be used to administer an SQLite database and which serves as an example of how to use the SQLite library. SQLite is not a client library used to connect to a big database server. SQLite is the server. The SQLite library reads and writes directly to and from the database files on disk." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From d64a95705049ef55f61a8b44872011a54d6e5f12 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:21:39 +0100 Subject: [PATCH 773/850] meta: add autoreconf support Signed-off-by: Stephan Raue --- packages/plugins/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/plugins/meta b/packages/plugins/meta index 131409744c..c51c8a1eec 100644 --- a/packages/plugins/meta +++ b/packages/plugins/meta @@ -12,3 +12,5 @@ PKG_SECTION="plugins" PKG_SHORTDESC="plugins: Metafile to install plugins" PKG_LONGDESC="Metafile to install plugins" PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 1e658b505ea665d3b5d4458677cdb107bddd6578 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:21:39 +0100 Subject: [PATCH 774/850] SABnzbd: add autoreconf support Signed-off-by: Stephan Raue --- packages/plugins/SABnzbd/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/plugins/SABnzbd/meta b/packages/plugins/SABnzbd/meta index c0c1ae7904..c775afa157 100644 --- a/packages/plugins/SABnzbd/meta +++ b/packages/plugins/SABnzbd/meta @@ -13,4 +13,4 @@ PKG_SHORTDESC="SABnzbd: makes Usenet as simple and streamlined as possible by au PKG_LONGDESC="SABnzbd makes Usenet as simple and streamlined as possible by automating everything we can. All you have to do is add an .nzb. SABnzbd takes over from there, where it will be automatically downloaded, verified, repaired, extracted and filed away with zero human interaction." PKG_IS_ADDON="no" - +PKG_AUTORECONF="no" From 93f28e5e39e921499cbe37f8ae8f883d2f10f4d7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:22:10 +0100 Subject: [PATCH 775/850] gcc: add autoreconf support, enable LTO and GOLD support Signed-off-by: Stephan Raue --- packages/toolchain/lang/gcc/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/toolchain/lang/gcc/meta b/packages/toolchain/lang/gcc/meta index da0dd23433..0a423669ef 100644 --- a/packages/toolchain/lang/gcc/meta +++ b/packages/toolchain/lang/gcc/meta @@ -13,4 +13,6 @@ PKG_SHORTDESC="gcc: The GNU Compiler Collection Version 4 (aka GNU C Compiler)" PKG_LONGDESC="This package contains the GNU Compiler Collection. It includes compilers for the languages C, C++, Objective C, Fortran 95, Java and others ... This GCC contains the Stack-Smashing Protector Patch which can be enabled with the -fstack-protector command-line option. More information about it ca be found at http://www.research.ibm.com/trl/projects/security/ssp/." PKG_IS_ADDON="no" +PKG_AUTORECONF="no" + #PKG_URL="ftp://ftp.gwdg.de/pub/misc/gcc/releases/$PKG_NAME-$PKG_VERSION/$PKG_NAME-core-$PKG_VERSION.tar.bz2 ftp://ftp.gwdg.de/pub/misc/gcc/releases/$PKG_NAME-$PKG_VERSION/$PKG_NAME-g++-$PKG_VERSION.tar.bz2" From dda7ab66e750a47b896558057c049d8e88b2680b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:22:10 +0100 Subject: [PATCH 776/850] gcc-core: add autoreconf support, enable LTO and GOLD support Signed-off-by: Stephan Raue --- packages/toolchain/lang/gcc-core/build | 4 +++- packages/toolchain/lang/gcc-core/meta | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/toolchain/lang/gcc-core/build b/packages/toolchain/lang/gcc-core/build index 38778a9500..08301656f0 100755 --- a/packages/toolchain/lang/gcc-core/build +++ b/packages/toolchain/lang/gcc-core/build @@ -11,7 +11,6 @@ cd $BUILD/gcc* autoconf-2.64 mkdir -p objdir-$1 && cd objdir-$1 - ../configure --host=$HOST_NAME \ --build=$HOST_NAME \ --target=$TARGET_NAME \ @@ -29,6 +28,9 @@ mkdir -p objdir-$1 && cd objdir-$1 --disable-__cxa_atexit \ --disable-libada \ --disable-libmudflap \ + --enable-gold=both/ld \ + --enable-plugin \ + --enable-lto \ --disable-libssp \ --disable-libgomp \ --disable-shared \ diff --git a/packages/toolchain/lang/gcc-core/meta b/packages/toolchain/lang/gcc-core/meta index 3260d62126..84f00ee47a 100644 --- a/packages/toolchain/lang/gcc-core/meta +++ b/packages/toolchain/lang/gcc-core/meta @@ -13,3 +13,4 @@ PKG_SHORTDESC="gcc: The GNU Compiler Collection Version 4 (aka GNU C Compiler)" PKG_LONGDESC="This package contains the GNU Compiler Collection. It includes compilers for the languages C, C++, Objective C, Fortran 95, Java and others ... This GCC contains the Stack-Smashing Protector Patch which can be enabled with the -fstack-protector command-line option. More information about it ca be found at http://www.research.ibm.com/trl/projects/security/ssp/." PKG_IS_ADDON="no" +PKG_AUTORECONF="no" From d68d82c6757e32f56ce5f37d4e9d73ac178ef574 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:22:10 +0100 Subject: [PATCH 777/850] gcc-final: add autoreconf support, enable LTO and GOLD support Signed-off-by: Stephan Raue --- packages/toolchain/lang/gcc-final/build | 5 +++-- packages/toolchain/lang/gcc-final/meta | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/toolchain/lang/gcc-final/build b/packages/toolchain/lang/gcc-final/build index 861464782e..d941daf9dd 100755 --- a/packages/toolchain/lang/gcc-final/build +++ b/packages/toolchain/lang/gcc-final/build @@ -7,9 +7,7 @@ $SCRIPTS/unpack gcc setup_toolchain host cd $BUILD/gcc* - mkdir -p objdir-$1 && cd objdir-$1 - ../configure --host=$HOST_NAME \ --build=$HOST_NAME \ --target=$TARGET_NAME \ @@ -30,6 +28,9 @@ mkdir -p objdir-$1 && cd objdir-$1 --disable-libmudflap \ --disable-libssp \ --disable-multilib \ + --enable-gold=both/ld \ + --enable-plugin \ + --enable-lto \ --enable-tls \ --enable-shared \ --enable-c99 \ diff --git a/packages/toolchain/lang/gcc-final/meta b/packages/toolchain/lang/gcc-final/meta index 2fee14dd33..3982cf436f 100644 --- a/packages/toolchain/lang/gcc-final/meta +++ b/packages/toolchain/lang/gcc-final/meta @@ -12,3 +12,5 @@ PKG_SECTION="toolchain/lang" PKG_SHORTDESC="gcc: The GNU Compiler Collection Version 4 (aka GNU C Compiler)" PKG_LONGDESC="This package contains the GNU Compiler Collection. It includes compilers for the languages C, C++, Objective C, Fortran 95, Java and others ... This GCC contains the Stack-Smashing Protector Patch which can be enabled with the -fstack-protector command-line option. More information about it ca be found at http://www.research.ibm.com/trl/projects/security/ssp/." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 1ad7a608c2ec16228198b2c78161287f32e99a4b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:22:10 +0100 Subject: [PATCH 778/850] yasm: add autoreconf support, enable LTO and GOLD support Signed-off-by: Stephan Raue --- packages/toolchain/lang/yasm/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/toolchain/lang/yasm/meta b/packages/toolchain/lang/yasm/meta index 1da00fc090..6fb3b2fb3a 100644 --- a/packages/toolchain/lang/yasm/meta +++ b/packages/toolchain/lang/yasm/meta @@ -12,3 +12,5 @@ PKG_SECTION="toolchain/lang" PKG_SHORTDESC="yasm: A complete rewrite of the NASM assembler" PKG_LONGDESC="Yasm is a complete rewrite of the NASM assembler under the new BSD License (some portions are under other licenses, see COPYING for details). It is designed from the ground up to allow for multiple assembler syntaxes to be supported (eg, NASM, TASM, GAS, etc.) in addition to multiple output object formats and even multiple instruction sets. Another primary module of the overall design is an optimizer module." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 99841feda640e6f7c8dc31d74d0ff602b5e1f9e5 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:22:33 +0100 Subject: [PATCH 779/850] lua: add autoreconf support Signed-off-by: Stephan Raue --- packages/lang/lua/meta | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/lang/lua/meta b/packages/lang/lua/meta index 1661d43aa8..df0f638fbd 100644 --- a/packages/lang/lua/meta +++ b/packages/lang/lua/meta @@ -11,4 +11,6 @@ PKG_PRIORITY="optional" PKG_SECTION="lang" PKG_SHORTDESC="lua: A lightweight, extensible programming language" PKG_LONGDESC="Lua is a powerful light-weight programming language designed for extending applications. Lua is also frequently used as a general-purpose, stand-alone language." -PKG_IS_ADDON="no" \ No newline at end of file +PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 38814082dab59cfd1c100e4fbfc556a050160a28 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:22:33 +0100 Subject: [PATCH 780/850] Python: add autoreconf support Signed-off-by: Stephan Raue --- packages/lang/Python/meta | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/lang/Python/meta b/packages/lang/Python/meta index 1ed3a6d81f..89bea6c220 100644 --- a/packages/lang/Python/meta +++ b/packages/lang/Python/meta @@ -13,5 +13,4 @@ PKG_SHORTDESC="python: The Python programming language" PKG_LONGDESC="Python is an interpreted object-oriented programming language, and is often compared with Tcl, Perl, Java or Scheme." PKG_IS_ADDON="no" - - +PKG_AUTORECONF="no" From 286e7abef1f81f7e9d06ca8e4d7af059bcad5400 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:22:44 +0100 Subject: [PATCH 781/850] megaglest: add autoreconf support Signed-off-by: Stephan Raue --- packages/addons/games/megaglest/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/addons/games/megaglest/meta b/packages/addons/games/megaglest/meta index 3e65ebffac..792dc1d639 100644 --- a/packages/addons/games/megaglest/meta +++ b/packages/addons/games/megaglest/meta @@ -12,3 +12,5 @@ PKG_SECTION="games" PKG_SHORTDESC="(Game) MegaGlest: a free 3D real-time strategy game" PKG_LONGDESC="Glest is a free 3D real-time strategy game, where you control the armies of two different factions: Tech, which is mainly composed of warriors and mechanical devices, and Magic, that prefers mages and summoned creatures in the battlefield." PKG_IS_ADDON="yes" + +PKG_AUTORECONF="no" From 95c9dd25b1f48b15ff3abf0887eeaa5f2a14aa8b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:22:44 +0100 Subject: [PATCH 782/850] megaglest-data: add autoreconf support Signed-off-by: Stephan Raue --- packages/addons/games/megaglest-data/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/addons/games/megaglest-data/meta b/packages/addons/games/megaglest-data/meta index 6b9d60152e..b19d1410b1 100644 --- a/packages/addons/games/megaglest-data/meta +++ b/packages/addons/games/megaglest-data/meta @@ -12,3 +12,5 @@ PKG_SECTION="games" PKG_SHORTDESC="(Game) MegaGlest: a free 3D real-time strategy game" PKG_LONGDESC="Glest is a free 3D real-time strategy game, where you control the armies of two different factions: Tech, which is mainly composed of warriors and mechanical devices, and Magic, that prefers mages and summoned creatures in the battlefield." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 76a0bd954ddcae297ceee1ab8dc337a590cd2ba4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:22:44 +0100 Subject: [PATCH 783/850] megaglest-source: add autoreconf support Signed-off-by: Stephan Raue --- packages/addons/games/megaglest-source/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/addons/games/megaglest-source/meta b/packages/addons/games/megaglest-source/meta index b79e0b88cc..98262e0e32 100644 --- a/packages/addons/games/megaglest-source/meta +++ b/packages/addons/games/megaglest-source/meta @@ -12,3 +12,5 @@ PKG_SECTION="games" PKG_SHORTDESC="(Game) MegaGlest: a free 3D real-time strategy game" PKG_LONGDESC="Glest is a free 3D real-time strategy game, where you control the armies of two different factions: Tech, which is mainly composed of warriors and mechanical devices, and Magic, that prefers mages and summoned creatures in the battlefield." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From d677be8d176d3240b6ed0aa52d1e673f0fdbd000 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:22:44 +0100 Subject: [PATCH 784/850] sauerbraten: add autoreconf support Signed-off-by: Stephan Raue --- packages/addons/games/sauerbraten/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/addons/games/sauerbraten/meta b/packages/addons/games/sauerbraten/meta index 9cd9a1fa9b..85956c5c25 100644 --- a/packages/addons/games/sauerbraten/meta +++ b/packages/addons/games/sauerbraten/meta @@ -12,3 +12,5 @@ PKG_SECTION="games" PKG_SHORTDESC="(Game) Cube 2: Sauerbraten" PKG_LONGDESC="Sauerbraten is a free multiplayer/singleplayer first person shooter, built as a major redesign of the Cube FPS. Much like the original Cube, the aim of this game is not necessarily to produce the most features and eyecandy possible, but rather to allow map/geometry editing to be done dynamically in-game, to create fun gameplay and an elegant engine." PKG_IS_ADDON="yes" + +PKG_AUTORECONF="yes" From 58c92e2b1bde7706d3999f3e8109e4edffb14624 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:22:45 +0100 Subject: [PATCH 785/850] wesnoth: add autoreconf support Signed-off-by: Stephan Raue --- packages/addons/games/wesnoth/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/addons/games/wesnoth/meta b/packages/addons/games/wesnoth/meta index cbd866ce49..66ba907d81 100644 --- a/packages/addons/games/wesnoth/meta +++ b/packages/addons/games/wesnoth/meta @@ -13,4 +13,4 @@ PKG_SHORTDESC="(Game) The Battle for Wesnoth" PKG_LONGDESC="The Battle for Wesnoth is a turn-based strategy game with a fantasy theme. Build up a great army, gradually turning raw recruits into hardened veterans. In later games, recall your toughest warriors and form a deadly host against whom none can stand! Choose units from a large pool of specialists, and hand-pick a force with the right strengths to fight well on different terrains against all manner of opposition. Wesnoth has many different sagas waiting to be played out. Fight to regain the throne of Wesnoth, of which you are the legitimate heir... step into the boots of a young officer sent to guard a not-so-sleepy frontier outpost... vanquish a horde of undead warriors unleashed by a foul necromancer, who also happens tohave taken your brother hostage... guide a band of elvish survivors in an epic quest to find a new home. 200+ unit types. 16 races. 6 major factions. Hundreds of years of history. The world of Wesnoth is absolutely huge and limited only by your creativity - make your own custom units, compose your own maps, and write your own scenarios or even full-blown campaigns. You can also challenge up to 8 friends - or strangers - and fight in epic multi-player fantasy battles." PKG_IS_ADDON="yes" - +PKG_AUTORECONF="yes" From c6debf08132f4a2355dd93429ece16e5725f25de Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:23:03 +0100 Subject: [PATCH 786/850] atk: add autoreconf support Signed-off-by: Stephan Raue --- packages/accessibility/atk/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/accessibility/atk/meta b/packages/accessibility/atk/meta index 5bef3c55f9..61d92e227b 100644 --- a/packages/accessibility/atk/meta +++ b/packages/accessibility/atk/meta @@ -12,3 +12,5 @@ PKG_SECTION="accessibility" PKG_SHORTDESC="ATK - Accessibility Toolkit" PKG_LONGDESC="ATK provides the set of accessibility interfaces that are implemented by other toolkits and applications. Using the ATK interfaces, accessibility tools have full access to view and control running applications." PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 5db88b7c6cecd167f0d9d45e9ce63ba948fa6c7e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:23:13 +0100 Subject: [PATCH 787/850] meta: add autoreconf support Signed-off-by: Stephan Raue --- packages/mediacenter/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/mediacenter/meta b/packages/mediacenter/meta index a152178b53..d874b2d32f 100644 --- a/packages/mediacenter/meta +++ b/packages/mediacenter/meta @@ -13,6 +13,8 @@ PKG_SHORTDESC="Mediacenter: Metapackage" PKG_LONGDESC="" PKG_IS_ADDON="no" +PKG_AUTORECONF="no" + for i in "$SKINS"; do PKG_DEPENDS="$PKG_DEPENDS $MEDIACENTER-theme-$i" done \ No newline at end of file From 582da79e61fcbe683fc3582faecb1d2fded120f2 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:23:13 +0100 Subject: [PATCH 788/850] xbmc: add autoreconf support Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/mediacenter/xbmc/meta b/packages/mediacenter/xbmc/meta index 73c6ecf6d0..b607389e85 100644 --- a/packages/mediacenter/xbmc/meta +++ b/packages/mediacenter/xbmc/meta @@ -13,6 +13,8 @@ PKG_SHORTDESC="xbmc: XBMC Mediacenter" PKG_LONGDESC="XBMC Media Center (which was formerly named Xbox Media Center) is a free and open source cross-platform media player and home entertainment system software with a 10-foot user interface designed for the living-room TV. Its graphical user interface allows the user to easily manage video, photos, podcasts, and music from a computer, optical disk, local network, and the internet using a remote control." PKG_IS_ADDON="no" +PKG_AUTORECONF="yes" + if [ "$FAAC_SUPPORT" = yes ]; then PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS faac" PKG_DEPENDS="$PKG_DEPENDS faac" From 36682c7ca7a8b8147a22a5a3c64df1fa3c34bc9e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:23:14 +0100 Subject: [PATCH 789/850] xbmc-dharma: add autoreconf support Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc-dharma/build | 10 +++++++--- packages/mediacenter/xbmc-dharma/meta | 2 ++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/mediacenter/xbmc-dharma/build b/packages/mediacenter/xbmc-dharma/build index 6ca5c55f73..6e52216a19 100755 --- a/packages/mediacenter/xbmc-dharma/build +++ b/packages/mediacenter/xbmc-dharma/build @@ -84,9 +84,13 @@ fi cd $PKG_BUILD -./bootstrap - -$AUTORECONF xbmc/lib/libid3tag/libid3tag +do_autoreconf +do_autoreconf lib/cpluff +[ -d lib/libass ] && do_autoreconf lib/libass +[ -d xbmc/cores/dvdplayer/Codecs/libdvd/libdvdcss ] && do_autoreconf xbmc/cores/dvdplayer/Codecs/libdvd/libdvdcss +do_autoreconf xbmc/cores/dvdplayer/Codecs/libdvd/libdvdread +do_autoreconf xbmc/cores/dvdplayer/Codecs/libdvd/libdvdnav +do_autoreconf xbmc/lib/libid3tag/libid3tag ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/mediacenter/xbmc-dharma/meta b/packages/mediacenter/xbmc-dharma/meta index 324bed84cc..40ebcce35c 100644 --- a/packages/mediacenter/xbmc-dharma/meta +++ b/packages/mediacenter/xbmc-dharma/meta @@ -13,6 +13,8 @@ PKG_SHORTDESC="xbmc: XBMC Mediacenter" PKG_LONGDESC="XBMC Media Center (which was formerly named Xbox Media Center) is a free and open source cross-platform media player and home entertainment system software with a 10-foot user interface designed for the living-room TV. Its graphical user interface allows the user to easily manage video, photos, podcasts, and music from a computer, optical disk, local network, and the internet using a remote control." PKG_IS_ADDON="no" +PKG_AUTORECONF="no" + if [ "$FAAC_SUPPORT" = yes ]; then PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS faac" PKG_DEPENDS="$PKG_DEPENDS faac" From 784c233f15960f1017682ffde44a617da0f0f9c4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:23:14 +0100 Subject: [PATCH 790/850] xbmc-dharma-theme-Confluence: add autoreconf support Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc-dharma-theme-Confluence/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/mediacenter/xbmc-dharma-theme-Confluence/meta b/packages/mediacenter/xbmc-dharma-theme-Confluence/meta index b9696d5a8a..e13170df28 100644 --- a/packages/mediacenter/xbmc-dharma-theme-Confluence/meta +++ b/packages/mediacenter/xbmc-dharma-theme-Confluence/meta @@ -12,3 +12,5 @@ PKG_SECTION="mediacenter" PKG_SHORTDESC="xbmc-theme-Confluence: XBMC Mediacenter default theme" PKG_LONGDESC="XBMC Media Center (which was formerly named Xbox Media Center) is a free and open source cross-platform media player and home entertainment system software with a 10-foot user interface designed for the living-room TV. Its graphical user interface allows the user to easily manage video, photos, podcasts, and music from a computer, optical disk, local network, and the internet using a remote control." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 9c6564c6c8644e2b59e1c6c20d70c680f621ad73 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:23:14 +0100 Subject: [PATCH 791/850] xbmc-theme-Confluence: add autoreconf support Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc-theme-Confluence/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/mediacenter/xbmc-theme-Confluence/meta b/packages/mediacenter/xbmc-theme-Confluence/meta index f159137abb..442ba57078 100644 --- a/packages/mediacenter/xbmc-theme-Confluence/meta +++ b/packages/mediacenter/xbmc-theme-Confluence/meta @@ -12,3 +12,5 @@ PKG_SECTION="mediacenter" PKG_SHORTDESC="xbmc-theme-Confluence: XBMC Mediacenter default theme" PKG_LONGDESC="XBMC Media Center (which was formerly named Xbox Media Center) is a free and open source cross-platform media player and home entertainment system software with a 10-foot user interface designed for the living-room TV. Its graphical user interface allows the user to easily manage video, photos, podcasts, and music from a computer, optical disk, local network, and the internet using a remote control." PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 6eec5e42b94186af7c0489566cd79a1d43ba318f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:23:25 +0100 Subject: [PATCH 792/850] bcm_sta: add autoreconf support Signed-off-by: Stephan Raue --- packages/linux-drivers/bcm_sta/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/linux-drivers/bcm_sta/meta b/packages/linux-drivers/bcm_sta/meta index 2a95949c1d..73d9e5c79b 100644 --- a/packages/linux-drivers/bcm_sta/meta +++ b/packages/linux-drivers/bcm_sta/meta @@ -13,5 +13,7 @@ PKG_SHORTDESC="bcm_sta: Broadcom's BCM4311-, BCM4312-, BCM4313-, BCM4321-, BCM43 PKG_LONGDESC="These packages contain Broadcom's IEEE 802.11a/b/g/n hybrid Linux® device driver for use with Broadcom's BCM4311-, BCM4312-, BCM4313-, BCM4321-, BCM4322-, BCM43224-, and BCM43225-based hardware. There are different tars for 32-bit and 64-bit x86 CPU architectures. Make sure that you download the appropriate tar because the hybrid binary file must be of the appropriate architecture type. The hybrid binary file is agnostic to the specific version of the Linux kernel because it is designed to perform all interactions with the operating system through operating-system-specific files and an operating system abstraction layer file. All Linux operating-system-specific code is provided in source form, making it possible to retarget to different kernel versions and fix operating system related issues." PKG_IS_ADDON="no" +PKG_AUTORECONF="no" + # Downloadlocation: # http://www.broadcom.com/support/802.11/linux_sta.php \ No newline at end of file From 03d8ba80ebee9a311dfbaab353bc2420a220db19 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:23:26 +0100 Subject: [PATCH 793/850] meta: add autoreconf support Signed-off-by: Stephan Raue --- packages/linux-drivers/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/linux-drivers/meta b/packages/linux-drivers/meta index 60769b78cc..2861e4056d 100644 --- a/packages/linux-drivers/meta +++ b/packages/linux-drivers/meta @@ -13,6 +13,8 @@ PKG_SHORTDESC="linux-drivers: Meta package to install additional drivers" PKG_LONGDESC="linux-drivers is a Meta package to install additional drivers" PKG_IS_ADDON="no" +PKG_AUTORECONF="no" + for drivers in "$ADDITIONAL_DRIVERS"; do case $drivers in From 0145037364952ea6a33f531ecbb14b23d1f456fd Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:23:26 +0100 Subject: [PATCH 794/850] rtl8192se: add autoreconf support Signed-off-by: Stephan Raue --- packages/linux-drivers/rtl8192se/meta | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/linux-drivers/rtl8192se/meta b/packages/linux-drivers/rtl8192se/meta index 9b186582ca..5ced8dc07c 100644 --- a/packages/linux-drivers/rtl8192se/meta +++ b/packages/linux-drivers/rtl8192se/meta @@ -13,3 +13,4 @@ PKG_SHORTDESC="rtl8192se: Realtek RTL8191SE, RTL8192SE WLAN driver" PKG_LONGDESC="Realtek RTL8191SE, RTL8192SE WLAN driver" PKG_IS_ADDON="no" +PKG_AUTORECONF="no" From 724cef607cd9fd9bddcebce2f8f594a00a40bd3d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:27:02 +0100 Subject: [PATCH 795/850] config/functions: add functions: 'do_autoreconf', 'strip_lto', 'strip_gold', 'strip_linker_plugin' Signed-off-by: Stephan Raue --- config/functions | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/config/functions b/config/functions index 45daaefd9c..3cbdfd7009 100644 --- a/config/functions +++ b/config/functions @@ -5,6 +5,8 @@ setup_toolchain() { fi if [ "$1" = target ]; then + export DESTIMAGE="target" + export CC=$TARGET_CC export CXX=$TARGET_CXX export LD=$TARGET_LD @@ -26,6 +28,8 @@ setup_toolchain() { export CMAKE_CONF=$ROOT/$TOOLCHAIN/etc/cmake-$TARGET_NAME.conf elif [ "$1" = host ]; then + export DESTIMAGE="host" + export AWK=$HOST_AWK export CC=$HOST_CC export CXX=$HOST_CXX @@ -110,3 +114,42 @@ get_version() { TARGET_VERSION="$PROJECT.$TARGET_ARCH-$OPENELEC_VERSION" } + +do_autoreconf() { + if [ -e $ROOT/$TOOLCHAIN/bin/autoreconf ] && + [ -e $ROOT/$TOOLCHAIN/bin/autoconf ] && + [ -e $ROOT/$TOOLCHAIN/bin/automake ] && + [ -e $ROOT/$TOOLCHAIN/bin/libtoolize ] && + [ -e $ROOT/$TOOLCHAIN/bin/intltoolize ]; then + export LIBTOOL=$ROOT/$TOOLCHAIN/bin/libtool + export LIBTOOLIZE=$ROOT/$TOOLCHAIN/bin/libtoolize + export AUTOMAKE=$ROOT/$TOOLCHAIN/bin/automake + export ACLOCAL_DIR=$SYSROOT_PREFIX/usr/share/aclocal + export ACLOCAL="$ROOT/$TOOLCHAIN/bin/aclocal -I $ACLOCAL_DIR" + export AUTOCONF=$ROOT/$TOOLCHAIN/bin/autoconf + export AUTOHEADER=$ROOT/$TOOLCHAIN/bin/autoheader + export AUTORECONF="$ROOT/$TOOLCHAIN/bin/autoreconf -v -f -i -I $ACLOCAL_DIR" + + mkdir -p $ACLOCAL_DIR + autoreconf --verbose --force --install -I $ACLOCAL_DIR $@ + fi +} + +strip_lto() { + # strip out LTO optimization from *FLAGS + CFLAGS=`echo $CFLAGS | sed -e "s|-flto||" -e "s|-fuse-linker-plugin||"` + CXXFLAGS=`echo $CXXFLAGS | sed -e "s|-flto||" -e "s|-fuse-linker-plugin||"` + LDFLAGS=`echo $LDFLAGS | sed -e "s|-flto||" -e "s|-fuse-linker-plugin||"` +} + +strip_gold() { + # strip out usage from GOLD linker + LDFLAGS=`echo $LDFLAGS | sed -e "s|-fuse-ld=gold||"` +} + +strip_linker_plugin() { + # strip out usage from linker plugin + CFLAGS=`echo $CFLAGS | sed -e "s|-fuse-linker-plugin||"` + CXXFLAGS=`echo $CXXFLAGS | sed -e "s|-fuse-linker-plugin||"` + LDFLAGS=`echo $LDFLAGS | sed -e "s|-fuse-linker-plugin||"` +} From 257ea17a4e74b0ae40d8c9c4a7c0b8e3f28cd2b7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:29:20 +0100 Subject: [PATCH 796/850] config/path: remove old $AUTORECONF functions, add GOLD support, fix $PKG_BUILD variable Signed-off-by: Stephan Raue --- config/path | 34 ++++++++++++---------------------- 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/config/path b/config/path index 7dc616ee16..3c586e5fb4 100644 --- a/config/path +++ b/config/path @@ -85,7 +85,8 @@ SED="sed -i" [ -r $PKG_DIR/meta ] && . $PKG_DIR/meta [ "$PKG_IS_ADDON" = "yes" ] && PKG_ADDON_ID="addon.$PKG_SECTION.$PKG_NAME" - PKG_BUILD=`[ -d $BUILD/${PKG_NAME}*${PKG_VERSION} ] && ls -d $BUILD/${PKG_NAME}*${PKG_VERSION} || echo ""` + [ -d $BUILD/${PKG_NAME}[-_.]${PKG_VERSION} ] && PKG_BUILD=`ls -d $BUILD/${PKG_NAME}[-_.]${PKG_VERSION}` + [ -d $BUILD/${PKG_NAME}${PKG_VERSION} ] && PKG_BUILD=`ls -d $BUILD/${PKG_NAME}${PKG_VERSION}` XORG_PATH_ENCODINGS=/usr/share/X11/encodings XORG_PATH_FONTS=/usr/share/X11/fonts @@ -107,7 +108,13 @@ if [ "$OPTIMIZATIONS" = speed ];then GCC_OPTIM="$GCC_OPTIM -floop-strip-mine" GCC_OPTIM="$GCC_OPTIM -floop-block" GCC_OPTIM="$GCC_OPTIM -fgraphite-identity" -else +fi + +if [ "$OPTIMIZATIONS" = normal ];then + GCC_OPTIM="-O2 -ffast-math $PROJECT_CFLAGS" +fi + +if [ "$OPTIMIZATIONS" = size ];then GCC_OPTIM="-Os -ffast-math $PROJECT_CFLAGS" GCC_OPTIM="$GCC_OPTIM -ftree-loop-distribution" GCC_OPTIM="$GCC_OPTIM -floop-interchange" @@ -149,9 +156,9 @@ if [ "$DEBUG" = yes ]; then TARGET_CXXFLAGS="$TARGET_CXXFLAGS -ggdb" TARGET_LDFLAGS="$TARGET_LDFLAGS -ggdb" else - TARGET_CFLAGS="$TARGET_CFLAGS -s -fomit-frame-pointer" - TARGET_CXXFLAGS="$TARGET_CXXFLAGS -s -fomit-frame-pointer" - TARGET_LDFLAGS="$TARGET_LDFLAGS -s -Wl,--as-needed" + TARGET_CFLAGS="$TARGET_CFLAGS -s -fuse-linker-plugin -fomit-frame-pointer" + TARGET_CXXFLAGS="$TARGET_CXXFLAGS -s -fuse-linker-plugin -fomit-frame-pointer" + TARGET_LDFLAGS="$TARGET_LDFLAGS -s -fuse-linker-plugin -fuse-ld=gold -Wl,--as-needed" fi HOST_AWK=gawk @@ -188,23 +195,6 @@ if [ -z "$PATH" -o "$PATH" = "${PATH#$ROOT/$TOOLCHAIN/bin:}" ]; then export PATH="$ROOT/$TOOLCHAIN/bin:$PATH" fi -if [ -f $ROOT/$TOOLCHAIN/bin/libtool ]; then - export LIBTOOL=$ROOT/$TOOLCHAIN/bin/libtool - export LIBTOOLIZE=$ROOT/$TOOLCHAIN/bin/libtoolize -fi - -if [ -f $ROOT/$TOOLCHAIN/bin/automake ]; then - export AUTOMAKE=$ROOT/$TOOLCHAIN/bin/automake - export ACLOCAL_DIR=$SYSROOT_PREFIX/usr/share/aclocal - export ACLOCAL="$ROOT/$TOOLCHAIN/bin/aclocal -I $ACLOCAL_DIR" -fi - -if [ -f $ROOT/$TOOLCHAIN/bin/autoconf ]; then - export AUTOCONF=$ROOT/$TOOLCHAIN/bin/autoconf - export AUTOHEADER=$ROOT/$TOOLCHAIN/bin/autoheader - export AUTORECONF="$ROOT/$TOOLCHAIN/bin/autoreconf -v -f -i -I $ACLOCAL_DIR" -fi - VERSION_SUFFIX=$TARGET_ARCH . config/functions From ce686a2d7f8cb6b5415f3dcf2e74ffbd11f2b380 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:30:01 +0100 Subject: [PATCH 797/850] scripts/build: add autoreconf support Signed-off-by: Stephan Raue --- scripts/build | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/build b/scripts/build index 09f1c8fe84..4e8bd6fc36 100755 --- a/scripts/build +++ b/scripts/build @@ -37,6 +37,10 @@ if [ ! -f $STAMP ]; then $SCRIPTS/build $p done + [ -d $BUILD/${PKG_NAME}[-_.]${PKG_VERSION} ] && PKG_BUILD=`ls -d $BUILD/${PKG_NAME}[-_.]${PKG_VERSION}` + [ -d $BUILD/${PKG_NAME}${PKG_VERSION} ] && PKG_BUILD=`ls -d $BUILD/${PKG_NAME}${PKG_VERSION}` + [ "$PKG_AUTORECONF" = yes ] && $SCRIPTS/autoreconf $1 + if [ -f $PKG_DIR/build ]; then $PKG_DIR/build $@ >&$VERBOSE_OUT if [ "$DEBUG" = no ]; then From 2005778fef69b52b1c4b99fff466562a4b29d1f8 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:30:18 +0100 Subject: [PATCH 798/850] new script: add autoreconf script Signed-off-by: Stephan Raue --- scripts/autoreconf | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100755 scripts/autoreconf diff --git a/scripts/autoreconf b/scripts/autoreconf new file mode 100755 index 0000000000..674164a079 --- /dev/null +++ b/scripts/autoreconf @@ -0,0 +1,13 @@ +#!/bin/sh + +. config/options $1 + +[ ! -f "$PKG_BUILD/configure.in" -a ! -f "$PKG_BUILD/configure.ac" ] && echo "configure.in or configure.ac not found" && exit 1 +#[ ! -f "$PKG_BUILD/Makefile.am" -a ! -f "$PKG_BUILD/Makefile.in" ] && echo "Makefile.am or Makefile.in not found" && exit 1 + +printf "%${INDENT}c AUTORECONF $1\n" >&$SILENT_OUT +export INDENT=$((${INDENT:-1}+$INDENT_SIZE)) + +do_autoreconf $PKG_BUILD + +exit 0 From 9067a8a45765cfd544f9513d53182f546fbea627 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:31:01 +0100 Subject: [PATCH 799/850] scripts/unpack: use $PKG_BUILD variable Signed-off-by: Stephan Raue --- scripts/unpack | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/scripts/unpack b/scripts/unpack index 467d1e67de..8f058bf3ea 100755 --- a/scripts/unpack +++ b/scripts/unpack @@ -48,6 +48,9 @@ if [ -d $PKG_DIR/sources ]; then cp -PRf $PKG_DIR/sources/* $BUILD/$1*/ fi +[ -d $BUILD/${PKG_NAME}[-_.]${PKG_VERSION} ] && PKG_BUILD=`ls -d $BUILD/${PKG_NAME}[-_.]${PKG_VERSION}` +[ -d $BUILD/${PKG_NAME}${PKG_VERSION} ] && PKG_BUILD=`ls -d $BUILD/${PKG_NAME}${PKG_VERSION}` + for i in $PKG_DIR/patches/$PKG_NAME-$PKG_VERSION*.patch ; do if [ -f $i ]; then PATCH=`basename $i` @@ -57,12 +60,12 @@ for i in $PKG_DIR/patches/$PKG_NAME-$PKG_VERSION*.patch ; do continue; else echo "## Applying patch: $i" - cat $i | patch -d `echo $BUILD/$1* | cut -f1 -d\ ` -p1 >&$VERBOSE_OUT + cat $i | patch -d `echo $PKG_BUILD | cut -f1 -d\ ` -p1 >&$VERBOSE_OUT fi fi done -$SCRIPTS/fixconfigtools $BUILD/$1* +$SCRIPTS/fixconfigtools $PKG_BUILD [ -f $PKG_DIR/unpack ] && $PKG_DIR/unpack $@ >&$VERBOSE_OUT From d3d526139edf9f92501c4351f16fa426a8b086a4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:31:24 +0100 Subject: [PATCH 800/850] linux: add autoreconf support Signed-off-by: Stephan Raue --- packages/linux/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/linux/meta b/packages/linux/meta index a09710262e..ad8974af04 100644 --- a/packages/linux/meta +++ b/packages/linux/meta @@ -13,6 +13,8 @@ PKG_SHORTDESC="linux26: The Linux kernel 2.6 precompiled kernel binary image and PKG_LONGDESC="This package contains a precompiled kernel image and the modules." PKG_IS_ADDON="no" +PKG_AUTORECONF="no" + if [ "$LINUX_NEXT" = "yes" ]; then PKG_VERSION="2.6.37-rc3" PKG_URL="http://www.kernel.org/pub/linux/kernel/v2.6/testing/$PKG_NAME-$PKG_VERSION.tar.bz2" From 09caf5ae8dd5a413b28348ad3edb79186364cfa4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:31:35 +0100 Subject: [PATCH 801/850] oem: add autoreconf support Signed-off-by: Stephan Raue --- packages/oem/meta | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/oem/meta b/packages/oem/meta index f3a3d61f3e..74a92c3b23 100644 --- a/packages/oem/meta +++ b/packages/oem/meta @@ -12,3 +12,5 @@ PKG_SECTION="oem" PKG_SHORTDESC="OEM: Metapackage for various OEM packages" PKG_LONGDESC="" PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" From 0557086df33943a72a3208778d60e4efb8b6c9b9 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 18:31:46 +0100 Subject: [PATCH 802/850] toolchain: add autoreconf support Signed-off-by: Stephan Raue --- packages/toolchain/meta | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/toolchain/meta b/packages/toolchain/meta index 5d08561a87..3849140aee 100644 --- a/packages/toolchain/meta +++ b/packages/toolchain/meta @@ -13,3 +13,4 @@ PKG_SHORTDESC="toolchain: OpenELEC.tv' toolchain" PKG_LONGDESC="a crosscompiling toolchain to compile all packages" PKG_IS_ADDON="no" +PKG_AUTORECONF="no" From 860c3ccfb37288ea71634dca9fe40278f04b7008 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 25 Nov 2010 22:37:44 +0100 Subject: [PATCH 803/850] projects/ATV/options: optimize for size Signed-off-by: Stephan Raue --- projects/ATV/options | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/ATV/options b/projects/ATV/options index ec55e4a93f..17a7153039 100644 --- a/projects/ATV/options +++ b/projects/ATV/options @@ -45,7 +45,7 @@ esac # Build optimizations (size/speed) - OPTIMIZATIONS="speed" + OPTIMIZATIONS="size" # Project CFLAGS PROJECT_CFLAGS="" From 6598d67972d850f5dc9049a4e146702d48cb98ff Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 26 Nov 2010 21:56:45 +0100 Subject: [PATCH 804/850] dropbear: remove unneeded configure options Signed-off-by: Stephan Raue --- packages/network/dropbear/build | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/network/dropbear/build b/packages/network/dropbear/build index 6b25db7b6a..2354a4176e 100755 --- a/packages/network/dropbear/build +++ b/packages/network/dropbear/build @@ -8,8 +8,6 @@ cd $PKG_BUILD --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ - --disable-static \ - --enable-shared \ --enable-largefile \ --enable-zlib \ --disable-pam \ From 66abf7704ee5d20b8520d44f06be336c25f2dc26 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 26 Nov 2010 21:57:30 +0100 Subject: [PATCH 805/850] ntp: add some usefull configure options Signed-off-by: Stephan Raue --- packages/network/ntp/build | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/network/ntp/build b/packages/network/ntp/build index 663a7abe9a..56ab709d13 100755 --- a/packages/network/ntp/build +++ b/packages/network/ntp/build @@ -9,7 +9,12 @@ cd $PKG_BUILD --sysconfdir=/etc \ --disable-static \ --enable-shared \ + --disable-all-clocks \ + --disable-ipv6 \ + --without-rpath \ + --with-gnu-ld \ + --without-crypto make -C libopts make -C ntpd -make -C ntpdate +make -C ntpdate \ No newline at end of file From c129b0493fabc5b3f16bb1f8e13d46143da3c623 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 26 Nov 2010 22:00:37 +0100 Subject: [PATCH 806/850] grep: add some usefull configure options Signed-off-by: Stephan Raue --- packages/sysutils/grep/build | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/sysutils/grep/build b/packages/sysutils/grep/build index c63dca2f86..0ee1106f5b 100755 --- a/packages/sysutils/grep/build +++ b/packages/sysutils/grep/build @@ -6,5 +6,8 @@ cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ + --disable-silent-rules \ + --disable-rpath \ + --with-gnu-ld \ make From d8ad5279f2bceacdf628276b60ae9eff2252bb89 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 26 Nov 2010 22:01:43 +0100 Subject: [PATCH 807/850] lm_sensors: add support for our *FLAGS Signed-off-by: Stephan Raue --- packages/sysutils/lm_sensors/build | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/sysutils/lm_sensors/build b/packages/sysutils/lm_sensors/build index 0e78797f66..c367dfe85d 100755 --- a/packages/sysutils/lm_sensors/build +++ b/packages/sysutils/lm_sensors/build @@ -3,7 +3,4 @@ . config/options $1 cd $PKG_BUILD - -make PREFIX=/usr CC=$TARGET_CC - -$STRIP prog/sensors/sensors + make PREFIX=/usr CC=$TARGET_CC CFLAGS="$TARGET_CFLAGS" CPPFLAGS="$TARGET_CPPFLAGS" AR="$TARGET_AR" From 1bbf27cdc5156811001a296cd7152180847b223d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 26 Nov 2010 22:02:13 +0100 Subject: [PATCH 808/850] libusb: cleanups Signed-off-by: Stephan Raue --- packages/sysutils/libusb/build | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/sysutils/libusb/build b/packages/sysutils/libusb/build index 403932bf65..fcf400b498 100755 --- a/packages/sysutils/libusb/build +++ b/packages/sysutils/libusb/build @@ -3,7 +3,6 @@ . config/options $1 cd $PKG_BUILD - mkdir -p m4 && do_autoreconf ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ From 4dda2a5567a00134d9f2e1955ba5da8c6d48d4c6 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 26 Nov 2010 22:03:12 +0100 Subject: [PATCH 809/850] acpid: respect our *FLAGS Signed-off-by: Stephan Raue --- packages/sysutils/acpid/build | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/sysutils/acpid/build b/packages/sysutils/acpid/build index 90f4704040..56feb9c9b4 100755 --- a/packages/sysutils/acpid/build +++ b/packages/sysutils/acpid/build @@ -2,6 +2,8 @@ . config/options $1 +LDFLAGS="$CFLAGS $LDFLAGS -fwhole-program" + cd $PKG_BUILD -make +make OPT="$CFLAGS" From 28ac55523c25e62d18fb238feba4e321d6afdcf3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 26 Nov 2010 22:22:22 +0100 Subject: [PATCH 810/850] gcc: update to gcc-4.5-20101118 Signed-off-by: Stephan Raue --- packages/toolchain/lang/gcc/meta | 5 +- ...ix_undefined_references_with_lto-0.1.patch | 146 ++++ .../gcc-4.5-20101118-bfd_and_gold.patch | 666 ++++++++++++++++++ ...101118-disable_multilib_i386_linux64.patch | 25 + .../gcc-4.5-20101118-dynamic_linker.patch | 132 ++++ ...gcc-4.5-20101118-libstdc++-v3_config.patch | 95 +++ .../gcc-4.5-20101118-ppl-0.11-0.1.patch | 24 + 7 files changed, 1091 insertions(+), 2 deletions(-) create mode 100644 packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-050_fix_undefined_references_with_lto-0.1.patch create mode 100644 packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-bfd_and_gold.patch create mode 100644 packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-disable_multilib_i386_linux64.patch create mode 100644 packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-dynamic_linker.patch create mode 100644 packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-libstdc++-v3_config.patch create mode 100644 packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-ppl-0.11-0.1.patch diff --git a/packages/toolchain/lang/gcc/meta b/packages/toolchain/lang/gcc/meta index 0a423669ef..9e8f6afe56 100644 --- a/packages/toolchain/lang/gcc/meta +++ b/packages/toolchain/lang/gcc/meta @@ -1,10 +1,11 @@ PKG_NAME="gcc" -PKG_VERSION="4.5.1" +PKG_VERSION="4.5-20101118" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://gcc.gnu.org/" -PKG_URL="ftp://ftp.gwdg.de/pub/misc/gcc/releases/$PKG_NAME-$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.bz2" +# PKG_URL="ftp://ftp.gwdg.de/pub/misc/gcc/releases/$PKG_NAME-$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_URL="ftp://ftp.gwdg.de/pub/misc/gcc/snapshots/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" PKG_BUILD_DEPENDS="ccache" PKG_PRIORITY="optional" diff --git a/packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-050_fix_undefined_references_with_lto-0.1.patch b/packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-050_fix_undefined_references_with_lto-0.1.patch new file mode 100644 index 0000000000..5852d03ce9 --- /dev/null +++ b/packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-050_fix_undefined_references_with_lto-0.1.patch @@ -0,0 +1,146 @@ +diff -Naur gcc-4.5-20101118/gcc/ChangeLog gcc-4.5-20101118.patch/gcc/ChangeLog +--- gcc-4.5-20101118/gcc/ChangeLog 2010-11-17 11:46:36.000000000 +0100 ++++ gcc-4.5-20101118.patch/gcc/ChangeLog 2010-11-26 03:06:24.441101626 +0100 +@@ -1,3 +1,17 @@ ++2010-11-23 Dave Korn ++ ++ PR driver/42690 ++ * gcc.c (LINK_COMMAND_SPEC): Remove hard-coded pass-through plugin ++ options, replace by call of pass-through-libs spec function to process ++ link_gcc_c_sequence spec. ++ (lto_libgcc_spec): Delete variable. ++ (static_specs[]): Remove related entry. ++ (static_spec_functions[]): Add new entry for pass-through-libs. ++ (main): Don't generate deleted lto_libgcc_spec. ++ (pass_through_libs_spec_func): New function to implement the new ++ pass-through-libs spec function. ++ * doc/invoke.texi (pass-through-libs): Document new spec function. ++ + 2010-11-17 Richard Guenther + + PR tree-optimization/46498 +diff -Naur gcc-4.5-20101118/gcc/doc/invoke.texi gcc-4.5-20101118.patch/gcc/doc/invoke.texi +--- gcc-4.5-20101118/gcc/doc/invoke.texi 2010-09-08 19:36:40.000000000 +0200 ++++ gcc-4.5-20101118.patch/gcc/doc/invoke.texi 2010-11-26 03:05:14.029157093 +0100 +@@ -9382,6 +9382,18 @@ + %@{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)@} + @end smallexample + ++@item @code{pass-through-libs} ++The @code{pass-through-libs} spec function takes any number of arguments. It ++finds any @option{-l} options and any non-options ending in ".a" (which it ++assumes are the names of linker input library archive files) and returns a ++result containing all the found arguments each prepended by ++@option{-plugin-opt=-pass-through=} and joined by spaces. This list is ++intended to be passed to the LTO linker plugin. ++ ++@smallexample ++%:pass-through-libs(%G %L %G) ++@end smallexample ++ + @item @code{print-asm-header} + The @code{print-asm-header} function takes no arguments and simply + prints a banner like: +diff -Naur gcc-4.5-20101118/gcc/gcc.c gcc-4.5-20101118.patch/gcc/gcc.c +--- gcc-4.5-20101118/gcc/gcc.c 2010-04-18 19:46:08.000000000 +0200 ++++ gcc-4.5-20101118.patch/gcc/gcc.c 2010-11-26 03:03:47.120008881 +0100 +@@ -407,6 +407,7 @@ + static const char *compare_debug_dump_opt_spec_function (int, const char **); + static const char *compare_debug_self_opt_spec_function (int, const char **); + static const char *compare_debug_auxbase_opt_spec_function (int, const char **); ++static const char *pass_through_libs_spec_func (int, const char **); + + /* The Specs Language + +@@ -781,8 +782,7 @@ + -plugin %(linker_plugin_file) \ + -plugin-opt=%(lto_wrapper) \ + -plugin-opt=%(lto_gcc) \ +- %{static|static-libgcc:-plugin-opt=-pass-through=%(lto_libgcc)} \ +- %{static:-plugin-opt=-pass-through=-lc} \ ++ %{!nostdlib:%{!nodefaultlibs:%:pass-through-libs(%(link_gcc_c_sequence))}} \ + %{O*:-plugin-opt=-O%*} \ + %{w:-plugin-opt=-w} \ + %{f*:-plugin-opt=-f%*} \ +@@ -841,7 +841,6 @@ + static const char *linker_plugin_file_spec = ""; + static const char *lto_wrapper_spec = ""; + static const char *lto_gcc_spec = ""; +-static const char *lto_libgcc_spec = ""; + static const char *link_command_spec = LINK_COMMAND_SPEC; + static const char *link_libgcc_spec = LINK_LIBGCC_SPEC; + static const char *startfile_prefix_spec = STARTFILE_PREFIX_SPEC; +@@ -1688,7 +1687,6 @@ + INIT_STATIC_SPEC ("linker_plugin_file", &linker_plugin_file_spec), + INIT_STATIC_SPEC ("lto_wrapper", <o_wrapper_spec), + INIT_STATIC_SPEC ("lto_gcc", <o_gcc_spec), +- INIT_STATIC_SPEC ("lto_libgcc", <o_libgcc_spec), + INIT_STATIC_SPEC ("link_libgcc", &link_libgcc_spec), + INIT_STATIC_SPEC ("md_exec_prefix", &md_exec_prefix), + INIT_STATIC_SPEC ("md_startfile_prefix", &md_startfile_prefix), +@@ -1730,6 +1728,7 @@ + { "compare-debug-dump-opt", compare_debug_dump_opt_spec_function }, + { "compare-debug-self-opt", compare_debug_self_opt_spec_function }, + { "compare-debug-auxbase-opt", compare_debug_auxbase_opt_spec_function }, ++ { "pass-through-libs", pass_through_libs_spec_func }, + #ifdef EXTRA_SPEC_FUNCTIONS + EXTRA_SPEC_FUNCTIONS + #endif +@@ -7580,10 +7579,6 @@ + if (!linker_plugin_file_spec) + fatal ("-fuse-linker-plugin, but liblto_plugin.so not found"); + +- lto_libgcc_spec = find_a_file (&startfile_prefixes, "libgcc.a", +- R_OK, true); +- if (!lto_libgcc_spec) +- fatal ("could not find libgcc.a"); + } + lto_gcc_spec = argv[0]; + +@@ -8977,3 +8972,46 @@ + + return name; + } ++ ++/* %:pass-through-libs spec function. Finds all -l options and input ++ file names in the lib spec passed to it, and makes a list of them ++ prepended with the plugin option to cause them to be passed through ++ to the final link after all the new object files have been added. */ ++ ++const char * ++pass_through_libs_spec_func (int argc, const char **argv) ++{ ++ char *prepended = xstrdup (" "); ++ int n; ++ /* Shlemiel the painter's algorithm. Innately horrible, but at least ++ we know that there will never be more than a handful of strings to ++ concat, and it's only once per run, so it's not worth optimising. */ ++ for (n = 0; n < argc; n++) ++ { ++ char *old = prepended; ++ /* Anything that isn't an option is a full path to an output ++ file; pass it through if it ends in '.a'. Among options, ++ pass only -l. */ ++ if (argv[n][0] == '-' && argv[n][1] == 'l') ++ { ++ const char *lopt = argv[n] + 2; ++ /* Handle both joined and non-joined -l options. If for any ++ reason there's a trailing -l with no joined or following ++ arg just discard it. */ ++ if (!*lopt && ++n >= argc) ++ break; ++ else if (!*lopt) ++ lopt = argv[n]; ++ prepended = concat (prepended, "-plugin-opt=-pass-through=-l", ++ lopt, " ", NULL); ++ } ++ else if (!strcmp (".a", argv[n] + strlen (argv[n]) - 2)) ++ { ++ prepended = concat (prepended, "-plugin-opt=-pass-through=", ++ argv[n], " ", NULL); ++ } ++ if (prepended != old) ++ free (old); ++ } ++ return prepended; ++} diff --git a/packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-bfd_and_gold.patch b/packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-bfd_and_gold.patch new file mode 100644 index 0000000000..a3b33273d3 --- /dev/null +++ b/packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-bfd_and_gold.patch @@ -0,0 +1,666 @@ +diff -Naur gcc-4.5-20101118/configure.ac gcc-4.5-20101118.patch/configure.ac +--- gcc-4.5-20101118/configure.ac 2010-10-06 12:29:55.000000000 +0200 ++++ gcc-4.5-20101118.patch/configure.ac 2010-11-26 03:48:17.007444557 +0100 +@@ -174,7 +174,7 @@ + # know that we are building the simulator. + # binutils, gas and ld appear in that order because it makes sense to run + # "make check" in that particular order. +-# If --enable-gold is used, "gold" will replace "ld". ++# If --enable-gold is used, "gold" may replace "ld". + host_tools="texinfo byacc flex bison binutils gas ld fixincludes gcc cgen sid sim gdb make patch prms send-pr gprof etc expect dejagnu ash bash bzip2 m4 autoconf automake libtool diff rcs fileutils shellutils time textutils wdiff find uudecode hello tar gzip indent recode release sed utils guile perl gawk findutils gettext zip fastjar gnattools" + + # libgcj represents the runtime libraries only used by gcj. +@@ -315,37 +315,57 @@ + esac + + # Handle --enable-gold. ++# --enable-gold Build only gold ++# --disable-gold [default] Build only ld ++# --enable-gold=both Build both gold and ld, ld is default ++# --enable-gold=both/ld Same ++# --enable-gold=both/gold Build both gold and ld, gold is default, ld is renamed ld.bfd + + AC_ARG_ENABLE(gold, +-[ --enable-gold use gold instead of ld], ++[ --enable-gold[[=ARG]] build gold [[ARG={both}[[/{gold,ld}]]]]], + ENABLE_GOLD=$enableval, + ENABLE_GOLD=no) +-if test "${ENABLE_GOLD}" = "yes"; then +- # Check for ELF target. +- is_elf=no +- case "${target}" in +- *-*-elf* | *-*-sysv4* | *-*-unixware* | *-*-eabi* | hppa*64*-*-hpux* \ +- | *-*-linux* | frv-*-uclinux* | *-*-irix5* | *-*-irix6* \ +- | *-*-netbsd* | *-*-openbsd* | *-*-freebsd* | *-*-solaris2* | *-*-nto*) ++ case "${ENABLE_GOLD}" in ++ yes|both|both/gold|both/ld) ++ # Check for ELF target. ++ is_elf=no ++ case "${target}" in ++ *-*-elf* | *-*-sysv4* | *-*-unixware* | *-*-eabi* | hppa*64*-*-hpux* \ ++ | *-*-linux* | frv-*-uclinux* | *-*-irix5* | *-*-irix6* \ ++ | *-*-netbsd* | *-*-openbsd* | *-*-freebsd* | *-*-solaris2* | *-*-nto*) ++ case "${target}" in ++ *-*-linux*aout* | *-*-linux*oldld*) ++ ;; ++ *) ++ is_elf=yes ++ ;; ++ esac ++ esac ++ ++ if test "$is_elf" = "yes"; then ++ # Check for target supported by gold. + case "${target}" in +- *-*-linux*aout* | *-*-linux*oldld*) +- ;; +- *) +- is_elf=yes ++ i?86-*-* | x86_64-*-* | sparc*-*-* | powerpc*-*-* | arm*-*-*) ++ case "${ENABLE_GOLD}" in ++ both*) ++ configdirs="$configdirs gold" ++ ;; ++ *) ++ configdirs="`echo " ${configdirs} " | sed -e 's/ ld / gold /'`" ++ ;; ++ esac ++ ENABLE_GOLD=yes + ;; + esac ++ fi ++ ;; ++ no) ++ ;; ++ *) ++ AC_MSG_ERROR([invalid --enable-gold argument]) ++ ;; + esac + +- if test "$is_elf" = "yes"; then +- # Check for target supported by gold. +- case "${target}" in +- i?86-*-* | x86_64-*-* | sparc*-*-* | powerpc*-*-* | arm*-*-*) +- configdirs=`echo " ${configdirs} " | sed -e 's/ ld / gold /'` +- ;; +- esac +- fi +-fi +- + # Configure extra directories which are host specific + + case "${host}" in +diff -Naur gcc-4.5-20101118/gcc/collect2.c gcc-4.5-20101118.patch/gcc/collect2.c +--- gcc-4.5-20101118/gcc/collect2.c 2010-06-24 23:06:37.000000000 +0200 ++++ gcc-4.5-20101118.patch/gcc/collect2.c 2010-11-26 03:42:31.162881405 +0100 +@@ -1114,17 +1114,19 @@ + int + main (int argc, char **argv) + { +- static const char *const ld_suffix = "ld"; +- static const char *const plugin_ld_suffix = PLUGIN_LD; +- static const char *const real_ld_suffix = "real-ld"; ++ static const char *const ld_suffix = "ld"; ++ static const char *const gold_suffix = "gold"; ++ static const char *const bfd_ld_suffix = "ld.bfd"; ++ static const char *const plugin_ld_suffix = PLUGIN_LD; ++ static const char *const real_ld_suffix = "real-ld"; + static const char *const collect_ld_suffix = "collect-ld"; +- static const char *const nm_suffix = "nm"; +- static const char *const gnm_suffix = "gnm"; ++ static const char *const nm_suffix = "nm"; ++ static const char *const gnm_suffix = "gnm"; + #ifdef LDD_SUFFIX +- static const char *const ldd_suffix = LDD_SUFFIX; ++ static const char *const ldd_suffix = LDD_SUFFIX; + #endif +- static const char *const strip_suffix = "strip"; +- static const char *const gstrip_suffix = "gstrip"; ++ static const char *const strip_suffix = "strip"; ++ static const char *const gstrip_suffix = "gstrip"; + + #ifdef CROSS_DIRECTORY_STRUCTURE + /* If we look for a program in the compiler directories, we just use +@@ -1134,6 +1136,10 @@ + + const char *const full_ld_suffix = + concat(target_machine, "-", ld_suffix, NULL); ++ const char *const full_gold_suffix = ++ concat (target_machine, "-", gold_suffix, NULL); ++ const char *const full_bfd_ld_suffix = ++ concat (target_machine, "-", bfd_ld_suffix, NULL); + const char *const full_plugin_ld_suffix = + concat(target_machine, "-", plugin_ld_suffix, NULL); + const char *const full_nm_suffix = +@@ -1149,15 +1155,17 @@ + const char *const full_gstrip_suffix = + concat (target_machine, "-", gstrip_suffix, NULL); + #else +- const char *const full_ld_suffix = ld_suffix; ++ const char *const full_ld_suffix = ld_suffix; ++ const char *const full_gold_suffix = gold_suffix; ++ const char *const full_bfd_ld_suffix = bfd_ld_suffix; + const char *const full_plugin_ld_suffix = plugin_ld_suffix; +- const char *const full_nm_suffix = nm_suffix; +- const char *const full_gnm_suffix = gnm_suffix; ++ const char *const full_nm_suffix = nm_suffix; ++ const char *const full_gnm_suffix = gnm_suffix; + #ifdef LDD_SUFFIX +- const char *const full_ldd_suffix = ldd_suffix; ++ const char *const full_ldd_suffix = ldd_suffix; + #endif +- const char *const full_strip_suffix = strip_suffix; +- const char *const full_gstrip_suffix = gstrip_suffix; ++ const char *const full_strip_suffix = strip_suffix; ++ const char *const full_gstrip_suffix = gstrip_suffix; + #endif /* CROSS_DIRECTORY_STRUCTURE */ + + const char *arg; +@@ -1171,7 +1179,13 @@ + const char **c_ptr; + char **ld1_argv; + const char **ld1; +- bool use_plugin = false; ++ enum linker_select ++ { ++ DFLT_LINKER, ++ PLUGIN_LINKER, ++ GOLD_LINKER, ++ BFD_LINKER ++ } selected_linker = DFLT_LINKER; + + /* The kinds of symbols we will have to consider when scanning the + outcome of a first pass link. This is ALL to start with, then might +@@ -1188,7 +1202,6 @@ + int first_file; + int num_c_args; + char **old_argv; +- + bool use_verbose = false; + + old_argv = argv; +@@ -1244,22 +1257,29 @@ + { + if (! strcmp (argv[i], "-debug")) + debug = 1; +- else if (! strcmp (argv[i], "-flto") && ! use_plugin) ++ else if (! strcmp (argv[i], "-flto") ++ && selected_linker != PLUGIN_LINKER) + { + use_verbose = true; + lto_mode = LTO_MODE_LTO; + } +- else if (! strcmp (argv[i], "-fwhopr") && ! use_plugin) ++ else if (! strcmp (argv[i], "-fwhopr") ++ && selected_linker != PLUGIN_LINKER) + { + use_verbose = true; + lto_mode = LTO_MODE_WHOPR; + } + else if (! strcmp (argv[i], "-plugin")) + { +- use_plugin = true; ++ selected_linker = PLUGIN_LINKER; + use_verbose = true; + lto_mode = LTO_MODE_NONE; + } ++ else if (! strcmp (argv[i], "-use-gold")) ++ selected_linker = GOLD_LINKER; ++ else if (! strcmp (argv[i], "-use-ld")) ++ selected_linker = BFD_LINKER; ++ + #ifdef COLLECT_EXPORT_LIST + /* since -brtl, -bexport, -b64 are not position dependent + also check for them here */ +@@ -1339,35 +1359,108 @@ + /* Try to discover a valid linker/nm/strip to use. */ + + /* Maybe we know the right file to use (if not cross). */ +- ld_file_name = 0; ++ ld_file_name = NULL; + #ifdef DEFAULT_LINKER + if (access (DEFAULT_LINKER, X_OK) == 0) + ld_file_name = DEFAULT_LINKER; +- if (ld_file_name == 0) ++ if (ld_file_name == NULL) + #endif + #ifdef REAL_LD_FILE_NAME + ld_file_name = find_a_file (&path, REAL_LD_FILE_NAME); +- if (ld_file_name == 0) ++ if (ld_file_name == NULL) + #endif + /* Search the (target-specific) compiler dirs for ld'. */ + ld_file_name = find_a_file (&cpath, real_ld_suffix); + /* Likewise for `collect-ld'. */ +- if (ld_file_name == 0) ++ if (ld_file_name == NULL) + ld_file_name = find_a_file (&cpath, collect_ld_suffix); + /* Search the compiler directories for `ld'. We have protection against + recursive calls in find_a_file. */ +- if (ld_file_name == 0) +- ld_file_name = find_a_file (&cpath, +- use_plugin +- ? plugin_ld_suffix +- : ld_suffix); ++ if (ld_file_name == NULL) ++ switch (selected_linker) ++ { ++ default: ++ case DFLT_LINKER: ++ ld_file_name = find_a_file (&cpath, ld_suffix); ++ break; ++ case PLUGIN_LINKER: ++ ld_file_name = find_a_file (&cpath, plugin_ld_suffix); ++ break; ++ case GOLD_LINKER: ++ ld_file_name = find_a_file (&cpath, gold_suffix); ++ break; ++ case BFD_LINKER: ++ ld_file_name = find_a_file (&cpath, bfd_ld_suffix); ++ break; ++ } + /* Search the ordinary system bin directories + for `ld' (if native linking) or `TARGET-ld' (if cross). */ +- if (ld_file_name == 0) +- ld_file_name = find_a_file (&path, +- use_plugin +- ? full_plugin_ld_suffix +- : full_ld_suffix); ++ if (ld_file_name == NULL) ++ switch (selected_linker) ++ { ++ default: ++ case DFLT_LINKER: ++ ld_file_name = find_a_file (&path, full_ld_suffix); ++ break; ++ case PLUGIN_LINKER: ++ ld_file_name = find_a_file (&path, full_plugin_ld_suffix); ++ break; ++ case GOLD_LINKER: ++ ld_file_name = find_a_file (&path, full_gold_suffix); ++ break; ++ case BFD_LINKER: ++ ld_file_name = find_a_file (&path, full_bfd_ld_suffix); ++ break; ++ } ++ /* If we failed to find a plugin-capable linker, try the ordinary one. */ ++ if (ld_file_name == NULL && selected_linker == PLUGIN_LINKER) ++ ld_file_name = find_a_file (&cpath, ld_suffix); ++ ++ if ((vflag || debug) && ld_file_name == NULL) ++ { ++ struct prefix_list * p; ++ const char * s; ++ ++ notice ("collect2: warning: unable to find linker.\n"); ++ ++#ifdef DEFAULT_LINKER ++ notice (" Searched for this absolute executable:\n"); ++ notice (" %s\n", DEFAULT_LINKER); ++#endif ++ ++ notice (" Searched in these paths:\n"); ++ for (p = cpath.plist; p != NULL; p = p->next) ++ notice (" %s\n", p->prefix); ++ notice (" For these executables:\n"); ++ notice (" %s\n", real_ld_suffix); ++ notice (" %s\n", collect_ld_suffix); ++ switch (selected_linker) ++ { ++ default: ++ case DFLT_LINKER: s = ld_suffix; break; ++ case PLUGIN_LINKER: s = plugin_ld_suffix; break; ++ case GOLD_LINKER: s = gold_suffix; break; ++ case BFD_LINKER: s = bfd_ld_suffix; break; ++ } ++ notice (" %s\n", s); ++ ++ notice (" And searched in these paths:\n"); ++ for (p = path.plist; p != NULL; p = p->next) ++ notice (" %s\n", p->prefix); ++ notice (" For these executables:\n"); ++#ifdef REAL_LD_FILE_NAME ++ notice (" %s\n", REAL_LD_FILE_NAME); ++#endif ++ switch (selected_linker) ++ { ++ default: ++ case DFLT_LINKER: s = full_ld_suffix; break; ++ case PLUGIN_LINKER: s = full_plugin_ld_suffix; break; ++ case GOLD_LINKER: s = full_gold_suffix; break; ++ case BFD_LINKER: s = full_bfd_ld_suffix; break; ++ } ++ notice (" %s\n", s); ++ } + + #ifdef REAL_NM_FILE_NAME + nm_file_name = find_a_file (&path, REAL_NM_FILE_NAME); +diff -Naur gcc-4.5-20101118/gcc/common.opt gcc-4.5-20101118.patch/gcc/common.opt +--- gcc-4.5-20101118/gcc/common.opt 2010-03-18 04:01:09.000000000 +0100 ++++ gcc-4.5-20101118.patch/gcc/common.opt 2010-11-26 03:42:31.164881431 +0100 +@@ -1401,6 +1401,9 @@ + Common Report Var(flag_unwind_tables) Optimization + Just generate unwind tables for exception handling + ++fuse-ld= ++Common Joined Undocumented ++ + fuse-linker-plugin + Common Undocumented + +diff -Naur gcc-4.5-20101118/gcc/configure gcc-4.5-20101118.patch/gcc/configure +--- gcc-4.5-20101118/gcc/configure 2010-10-06 21:09:10.000000000 +0200 ++++ gcc-4.5-20101118.patch/gcc/configure 2010-11-26 03:42:31.184881696 +0100 +@@ -684,6 +684,7 @@ + gcc_cv_objdump + ORIGINAL_NM_FOR_TARGET + gcc_cv_nm ++ORIGINAL_GOLD_FOR_TARGET + ORIGINAL_LD_FOR_TARGET + ORIGINAL_PLUGIN_LD_FOR_TARGET + gcc_cv_ld +@@ -17108,7 +17109,7 @@ + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +-#line 17111 "configure" ++#line 17112 "configure" + #include "confdefs.h" + + #if HAVE_DLFCN_H +@@ -17214,7 +17215,7 @@ + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +-#line 17217 "configure" ++#line 17218 "configure" + #include "confdefs.h" + + #if HAVE_DLFCN_H +@@ -20662,6 +20663,21 @@ + fi + fi + ++gcc_cv_ld_gold_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/gold ++ ++if test "${gcc_cv_gold+set}" = set; then : ++ ++else ++ ++if test -f $gcc_cv_ld_gold_srcdir/configure.ac \ ++ && test -f ../gold/Makefile \ ++ && test x$build = x$host; then ++ gcc_cv_gold=../gold/ld-new$build_exeext ++else ++ gcc_cv_gold='' ++fi ++fi ++ + ORIGINAL_PLUGIN_LD_FOR_TARGET=$gcc_cv_ld + PLUGIN_LD=`basename $gcc_cv_ld` + +@@ -20688,6 +20704,9 @@ + ;; + esac + ++ORIGINAL_GOLD_FOR_TARGET=$gcc_cv_gold ++ ++ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking what linker to use" >&5 + $as_echo_n "checking what linker to use... " >&6; } + if test "$gcc_cv_ld" = ../ld/ld-new$build_exeext; then +diff -Naur gcc-4.5-20101118/gcc/configure.ac gcc-4.5-20101118.patch/gcc/configure.ac +--- gcc-4.5-20101118/gcc/configure.ac 2010-10-06 21:09:10.000000000 +0200 ++++ gcc-4.5-20101118.patch/gcc/configure.ac 2010-11-26 03:42:31.201881922 +0100 +@@ -1947,6 +1947,17 @@ + AC_PATH_PROG(gcc_cv_ld, $LD_FOR_TARGET) + fi]) + ++gcc_cv_ld_gold_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/gold ++ ++AS_VAR_SET_IF(gcc_cv_gold,, [ ++if test -f $gcc_cv_ld_gold_srcdir/configure.ac \ ++ && test -f ../gold/Makefile \ ++ && test x$build = x$host; then ++ gcc_cv_gold=../gold/ld-new$build_exeext ++else ++ gcc_cv_gold='' ++fi]) ++ + ORIGINAL_PLUGIN_LD_FOR_TARGET=$gcc_cv_ld + PLUGIN_LD=`basename $gcc_cv_ld` + AC_ARG_WITH(plugin-ld, +@@ -1965,6 +1976,9 @@ + *) AC_CONFIG_FILES(collect-ld:exec-tool.in, [chmod +x collect-ld]) ;; + esac + ++ORIGINAL_GOLD_FOR_TARGET=$gcc_cv_gold ++AC_SUBST(ORIGINAL_GOLD_FOR_TARGET) ++ + AC_MSG_CHECKING(what linker to use) + if test "$gcc_cv_ld" = ../ld/ld-new$build_exeext; then + # Single tree build which includes ld. We want to prefer it +diff -Naur gcc-4.5-20101118/gcc/doc/invoke.texi gcc-4.5-20101118.patch/gcc/doc/invoke.texi +--- gcc-4.5-20101118/gcc/doc/invoke.texi 2010-09-08 19:36:40.000000000 +0200 ++++ gcc-4.5-20101118.patch/gcc/doc/invoke.texi 2010-11-26 03:42:31.218882146 +0100 +@@ -390,7 +390,7 @@ + -funit-at-a-time -funroll-all-loops -funroll-loops @gol + -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops @gol + -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb @gol +--fwhole-program -fwhopr -fwpa -fuse-linker-plugin @gol ++-fwhole-program -fwhopr -fwpa -fuse-linker-plugin -fuse-ld @gol + --param @var{name}=@var{value} + -O -O0 -O1 -O2 -O3 -Os} + +@@ -7416,6 +7416,16 @@ + + Disabled by default. + ++@item -fuse-ld=gold ++Use the @command{gold} linker instead of the default linker. ++This option is only necessary if GCC has been configured with ++@option{--enable-gold=both} or @option{--enable-gold=both/ld}. ++ ++@item -fuse-ld=bfd ++Use the @command{ld.bfd} linker instead of the default linker. ++This option is only necessary if GCC has been configured with ++@option{--enable-gold=both/gold}. ++ + @item -fcprop-registers + @opindex fcprop-registers + After register allocation and post-register allocation instruction splitting, +diff -Naur gcc-4.5-20101118/gcc/doc/invoke.texi.orig gcc-4.5-20101118.patch/gcc/doc/invoke.texi.orig +diff -Naur gcc-4.5-20101118/gcc/exec-tool.in gcc-4.5-20101118.patch/gcc/exec-tool.in +--- gcc-4.5-20101118/gcc/exec-tool.in 2009-11-08 23:36:51.000000000 +0100 ++++ gcc-4.5-20101118.patch/gcc/exec-tool.in 2010-11-26 03:42:31.226882250 +0100 +@@ -1,6 +1,6 @@ + #! /bin/sh + +-# Copyright (C) 2007, 2008 Free Software Foundation, Inc. ++# Copyright (C) 2007, 2008, 2010 Free Software Foundation, Inc. + # This file is part of GCC. + + # GCC is free software; you can redistribute it and/or modify +@@ -21,11 +21,13 @@ + + ORIGINAL_AS_FOR_TARGET="@ORIGINAL_AS_FOR_TARGET@" + ORIGINAL_LD_FOR_TARGET="@ORIGINAL_LD_FOR_TARGET@" ++ORIGINAL_GOLD_FOR_TARGET="@ORIGINAL_GOLD_FOR_TARGET@" + ORIGINAL_PLUGIN_LD_FOR_TARGET="@ORIGINAL_PLUGIN_LD_FOR_TARGET@" + ORIGINAL_NM_FOR_TARGET="@ORIGINAL_NM_FOR_TARGET@" + exeext=@host_exeext@ + fast_install=@enable_fast_install@ + objdir=@objdir@ ++version="1.1" + + invoked=`basename "$0"` + case "$invoked" in +@@ -34,54 +36,110 @@ + prog=as-new$exeext + dir=gas + ;; +- collect-ld) +- # when using a linker plugin, gcc will always pass '-plugin' as the +- # first option to the linker. +- if test x"$1" = "x-plugin"; then +- original=$ORIGINAL_PLUGIN_LD_FOR_TARGET +- else +- original=$ORIGINAL_LD_FOR_TARGET +- fi +- prog=ld-new$exeext +- dir=ld +- ;; + nm) + original=$ORIGINAL_NM_FOR_TARGET + prog=nm-new$exeext + dir=binutils + ;; ++ collect-ld) ++ prog=ld-new$exeext ++ # Look for the a command line option ++ # specifying the linker to be used. ++ case " $* " in ++ *\ -use-gold\ *) ++ original=$ORIGINAL_GOLD_FOR_TARGET ++ dir=gold ++ ;; ++ *\ -use-ld\ * | *\ -use-ld.bfd\ *) ++ original=$ORIGINAL_LD_FOR_TARGET ++ dir=ld ++ ;; ++ *\ -plugin\ *) ++ original=$ORIGINAL_PLUGIN_LD_FOR_TARGET ++ dir=ld ++ ;; ++ *) ++ original=$ORIGINAL_LD_FOR_TARGET ++ dir=ld ++ ;; ++ esac ++ ++ # If the selected linker has not been configured then ++ # try using the others, in the order PLUGIN-LD, LD, GOLD. ++ if test x"$original" = x; then ++ if test x"$ORIGINAL_PLUGIN_LD_FOR_TARGET" != x; then ++ original=$ORIGINAL_PLUGIN_LD_FOR_TARGET ++ dir=ld ++ elif test x"$ORIGINAL_LD_FOR_TARGET" != x; then ++ original=$ORIGINAL_LD_FOR_TARGET ++ dir=ld ++ elif test x"$ORIGINAL_GOLD_FOR_TARGET" != x; then ++ original=$ORIGINAL_GOLD_FOR_TARGET ++ dir=gold ++ # Otherwise do nothing - the case statement below ++ # will issue an error message for us. ++ fi ++ fi ++ ;; + esac + + case "$original" in + ../*) +- # compute absolute path of the location of this script ++ # Compute absolute path to the location of this script. + tdir=`dirname "$0"` + scriptdir=`cd "$tdir" && pwd` + + if test -x $scriptdir/../$dir/$prog; then +- test "$fast_install" = yes || exec $scriptdir/../$dir/$prog ${1+"$@"} +- +- # if libtool did everything it needs to do, there's a fast path +- lt_prog=$scriptdir/../$dir/$objdir/lt-$prog +- test -x $lt_prog && exec $lt_prog ${1+"$@"} +- +- # libtool has not relinked ld-new yet, but we cannot just use the +- # previous stage (because then the relinking would just never happen!). +- # So we take extra care to use prev-ld/ld-new *on recursive calls*. +- test x"$LT_RCU" = x"1" && exec $scriptdir/../prev-$dir/$prog ${1+"$@"} +- +- LT_RCU=1; export LT_RCU +- $scriptdir/../$dir/$prog ${1+"$@"} +- result=$? +- exit $result +- ++ if test "$fast_install" = yes; then ++ # If libtool did everything it needs to do, there's a fast path. ++ lt_prog=$scriptdir/../$dir/$objdir/lt-$prog ++ ++ if test -x $lt_prog; then ++ original=$lt_prog ++ else ++ # Libtool has not relinked ld-new yet, but we cannot just use the ++ # previous stage (because then the relinking would just never happen!). ++ # So we take extra care to use prev-ld/ld-new *on recursive calls*. ++ if test x"$LT_RCU" = x"1"; then ++ original=$scriptdir/../prev-$dir/$prog ++ else ++ LT_RCU=1; export LT_RCU ++ case " $* " in ++ *\ -v\ *) ++ echo "$invoked $version" ++ echo $scriptdir/../$dir/$prog $* ++ ;; ++ esac ++ $scriptdir/../$dir/$prog ${1+"$@"} ++ result=$? ++ exit $result ++ fi ++ fi ++ else ++ original=$scriptdir/../$dir/$prog ++ fi + else +- exec $scriptdir/../prev-$dir/$prog ${1+"$@"} ++ original=$scriptdir/../prev-$dir/$prog + fi + ;; +- *) +- exec "$original" ${1+"$@"} ++ "") ++ echo "$invoked: executable not configured" ++ exit 1 + ;; + esac + ++# If -v has been used then display our version number ++# and then echo the command we are about to invoke. ++case " $* " in ++ *\ -v\ *) ++ echo "$invoked $version" ++ echo $original $* ++ ;; ++esac + ++if test -x $original; then ++ exec "$original" ${1+"$@"} ++else ++ echo "$invoked: unable to locate executable: $original" ++ exit 1 ++fi +diff -Naur gcc-4.5-20101118/gcc/gcc.c gcc-4.5-20101118.patch/gcc/gcc.c +--- gcc-4.5-20101118/gcc/gcc.c 2010-04-18 19:46:08.000000000 +0200 ++++ gcc-4.5-20101118.patch/gcc/gcc.c 2010-11-26 03:42:31.230882305 +0100 +@@ -790,6 +790,9 @@ + %{v:-plugin-opt=-v} \ + } \ + %{flto} %{fwhopr} %l " LINK_PIE_SPEC \ ++ "%{fuse-ld=gold:%{fuse-ld=bfd:%e-fuse-ld=gold and -fuse-ld=bfd may not be used together}} \ ++ %{fuse-ld=gold:-use-gold} \ ++ %{fuse-ld=bfd:-use-ld}" \ + "%X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r}\ + %{s} %{t} %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}\ + %{static:} %{L*} %(mfwrap) %(link_libgcc) %o\ +diff -Naur gcc-4.5-20101118/gcc/opts.c gcc-4.5-20101118.patch/gcc/opts.c +--- gcc-4.5-20101118/gcc/opts.c 2010-05-17 12:13:28.000000000 +0200 ++++ gcc-4.5-20101118.patch/gcc/opts.c 2010-11-26 03:42:31.236882383 +0100 +@@ -2138,8 +2138,9 @@ + /* These are no-ops, preserved for backward compatibility. */ + break; + ++ case OPT_fuse_ld_: + case OPT_fuse_linker_plugin: +- /* No-op. Used by the driver and passed to us because it starts with f.*/ ++ /* No-op. Used by the driver and passed to us because it starts with f. */ + break; + + default: diff --git a/packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-disable_multilib_i386_linux64.patch b/packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-disable_multilib_i386_linux64.patch new file mode 100644 index 0000000000..a616fa3ec2 --- /dev/null +++ b/packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-disable_multilib_i386_linux64.patch @@ -0,0 +1,25 @@ +diff -Naur gcc-4.5-20100610-old/gcc/config/i386/t-linux64 gcc-4.5-20100610-new/gcc/config/i386/t-linux64 +--- gcc-4.5-20100610-old/gcc/config/i386/t-linux64 2010-06-11 09:31:52.000000000 -0700 ++++ gcc-4.5-20100610-new/gcc/config/i386/t-linux64 2010-06-11 09:39:52.000000000 -0700 +@@ -23,13 +23,13 @@ + # it doesn't tell anything about the 32bit libraries on those systems. Set + # MULTILIB_OSDIRNAMES according to what is found on the target. + +-MULTILIB_OPTIONS = m64/m32 +-MULTILIB_DIRNAMES = 64 32 +-MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib) ++#MULTILIB_OPTIONS = m64/m32 ++#MULTILIB_DIRNAMES = 64 32 ++#MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib) + +-LIBGCC = stmp-multilib +-INSTALL_LIBGCC = install-multilib ++#LIBGCC = stmp-multilib ++#INSTALL_LIBGCC = install-multilib + +-EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o \ +- crtbeginT.o crtprec32.o crtprec64.o crtprec80.o \ +- crtfastmath.o ++#EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o \ ++# crtbeginT.o crtprec32.o crtprec64.o crtprec80.o \ ++# crtfastmath.o diff --git a/packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-dynamic_linker.patch b/packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-dynamic_linker.patch new file mode 100644 index 0000000000..05925a915a --- /dev/null +++ b/packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-dynamic_linker.patch @@ -0,0 +1,132 @@ +diff -Naur gcc-4.5-20100610-old/gcc/config/i386/linux64.h gcc-4.5-20100610-new/gcc/config/i386/linux64.h +--- gcc-4.5-20100610-old/gcc/config/i386/linux64.h 2010-06-11 09:40:14.000000000 -0700 ++++ gcc-4.5-20100610-new/gcc/config/i386/linux64.h 2010-06-11 09:41:13.000000000 -0700 +@@ -59,7 +59,7 @@ + done. */ + + #define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2" +-#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux-x86-64.so.2" ++#define GLIBC_DYNAMIC_LINKER64 "/lib/ld-linux-x86-64.so.2" + + #if TARGET_64BIT_DEFAULT + #define SPEC_32 "m32" +diff -Naur gcc-4.5-20100610-old/gcc/config/mips/iris6.h gcc-4.5-20100610-new/gcc/config/mips/iris6.h +--- gcc-4.5-20100610-old/gcc/config/mips/iris6.h 2010-06-11 09:40:14.000000000 -0700 ++++ gcc-4.5-20100610-new/gcc/config/mips/iris6.h 2010-06-11 09:41:13.000000000 -0700 +@@ -88,27 +88,27 @@ + %{mabi=32:%{pg:gcrt1.o%s} \ + %{!pg:%{p:mcrt1.o%s libprof1.a%s}%{!p:crt1.o%s}}} \ + %{mabi=n32: \ +- %{mips4:%{pg:/usr/lib32/mips4/gcrt1.o%s} \ +- %{!pg:%{p:/usr/lib32/mips4/mcrt1.o%s /usr/lib32/mips4/libprof1.a%s} \ +- %{!p:/usr/lib32/mips4/crt1.o%s}}} \ +- %{!mips4:%{pg:/usr/lib32/mips3/gcrt1.o%s} \ +- %{!pg:%{p:/usr/lib32/mips3/mcrt1.o%s /usr/lib32/mips3/libprof1.a%s} \ +- %{!p:/usr/lib32/mips3/crt1.o%s}}}} \ ++ %{mips4:%{pg:/usr/lib/mips4/gcrt1.o%s} \ ++ %{!pg:%{p:/usr/lib/mips4/mcrt1.o%s /usr/lib/mips4/libprof1.a%s} \ ++ %{!p:/usr/lib/mips4/crt1.o%s}}} \ ++ %{!mips4:%{pg:/usr/lib/mips3/gcrt1.o%s} \ ++ %{!pg:%{p:/usr/lib/mips3/mcrt1.o%s /usr/lib/mips3/libprof1.a%s} \ ++ %{!p:/usr/lib/mips3/crt1.o%s}}}} \ + %{mabi=64: \ +- %{mips4:%{pg:/usr/lib64/mips4/gcrt1.o} \ +- %{!pg:%{p:/usr/lib64/mips4/mcrt1.o /usr/lib64/mips4/libprof1.a} \ +- %{!p:/usr/lib64/mips4/crt1.o}}} \ +- %{!mips4:%{pg:/usr/lib64/mips3/gcrt1.o} \ +- %{!pg:%{p:/usr/lib64/mips3/mcrt1.o /usr/lib64/mips3/libprof1.a} \ +- %{!p:/usr/lib64/mips3/crt1.o}}}}} \ ++ %{mips4:%{pg:/usr/lib/mips4/gcrt1.o} \ ++ %{!pg:%{p:/usr/lib/mips4/mcrt1.o /usr/lib/mips4/libprof1.a} \ ++ %{!p:/usr/lib/mips4/crt1.o}}} \ ++ %{!mips4:%{pg:/usr/lib/mips3/gcrt1.o} \ ++ %{!pg:%{p:/usr/lib/mips3/mcrt1.o /usr/lib/mips3/libprof1.a} \ ++ %{!p:/usr/lib/mips3/crt1.o}}}}} \ + irix-crti.o%s crtbegin.o%s" + + #undef LIB_SPEC + #define LIB_SPEC \ +- "%{mabi=n32: %{mips4:-L/usr/lib32/mips4} %{!mips4:-L/usr/lib32/mips3} \ +- -L/usr/lib32} \ +- %{mabi=64: %{mips4:-L/usr/lib64/mips4} %{!mips4:-L/usr/lib64/mips3} \ +- -L/usr/lib64} \ ++ "%{mabi=n32: %{mips4:-L/usr/lib/mips4} %{!mips4:-L/usr/lib/mips3} \ ++ -L/usr/lib} \ ++ %{mabi=64: %{mips4:-L/usr/lib/mips4} %{!mips4:-L/usr/lib/mips3} \ ++ -L/usr/lib} \ + %{!shared:" \ + SUBTARGET_DONT_WARN_UNUSED_SPEC \ + " %{pthread:-lpthread} %{p:libprof1.a%s}%{pg:libprof1.a%s} -lc " \ +@@ -125,10 +125,10 @@ + "crtend.o%s irix-crtn.o%s \ + %{!shared: \ + %{mabi=32:crtn.o%s}\ +- %{mabi=n32:%{mips4:/usr/lib32/mips4/crtn.o%s}\ +- %{!mips4:/usr/lib32/mips3/crtn.o%s}}\ +- %{mabi=64:%{mips4:/usr/lib64/mips4/crtn.o%s}\ +- %{!mips4:/usr/lib64/mips3/crtn.o%s}}}" ++ %{mabi=n32:%{mips4:/usr/lib/mips4/crtn.o%s}\ ++ %{!mips4:/usr/lib/mips3/crtn.o%s}}\ ++ %{mabi=64:%{mips4:/usr/lib/mips4/crtn.o%s}\ ++ %{!mips4:/usr/lib/mips3/crtn.o%s}}}" + + #define MIPS_TFMODE_FORMAT mips_extended_format + +diff -Naur gcc-4.5-20100610-old/gcc/config/mips/linux64.h gcc-4.5-20100610-new/gcc/config/mips/linux64.h +--- gcc-4.5-20100610-old/gcc/config/mips/linux64.h 2010-06-11 09:40:14.000000000 -0700 ++++ gcc-4.5-20100610-new/gcc/config/mips/linux64.h 2010-06-11 09:41:13.000000000 -0700 +@@ -36,9 +36,9 @@ + %{profile:-lc_p} %{!profile:-lc}}" + + #define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1" +-#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld.so.1" +-#define GLIBC_DYNAMIC_LINKERN32 "/lib32/ld.so.1" +-#define UCLIBC_DYNAMIC_LINKERN32 "/lib32/ld-uClibc.so.0" ++#define GLIBC_DYNAMIC_LINKER64 "/lib/ld.so.1" ++#define GLIBC_DYNAMIC_LINKERN32 "/lib/ld.so.1" ++#define UCLIBC_DYNAMIC_LINKERN32 "/lib/ld-uClibc.so.0" + #define LINUX_DYNAMIC_LINKERN32 \ + CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKERN32, UCLIBC_DYNAMIC_LINKERN32) + +diff -Naur gcc-4.5-20100610-old/gcc/config/rs6000/linux64.h gcc-4.5-20100610-new/gcc/config/rs6000/linux64.h +--- gcc-4.5-20100610-old/gcc/config/rs6000/linux64.h 2010-06-11 09:40:14.000000000 -0700 ++++ gcc-4.5-20100610-new/gcc/config/rs6000/linux64.h 2010-06-11 09:41:13.000000000 -0700 +@@ -349,7 +349,7 @@ + #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)" + + #define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1" +-#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld64.so.1" ++#define GLIBC_DYNAMIC_LINKER64 "/lib/ld64.so.1" + #define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0" + #define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0" + #if UCLIBC_DEFAULT +diff -Naur gcc-4.5-20100610-old/gcc/config/sparc/linux64.h gcc-4.5-20100610-new/gcc/config/sparc/linux64.h +--- gcc-4.5-20100610-old/gcc/config/sparc/linux64.h 2010-06-11 09:40:14.000000000 -0700 ++++ gcc-4.5-20100610-new/gcc/config/sparc/linux64.h 2010-06-11 09:41:13.000000000 -0700 +@@ -110,7 +110,7 @@ + /* If ELF is the default format, we should not use /lib/elf. */ + + #define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2" +-#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux.so.2" ++#define GLIBC_DYNAMIC_LINKER64 "/lib/ld-linux.so.2" + + #ifdef SPARC_BI_ARCH + +@@ -130,7 +130,7 @@ + %{static:-static}}} \ + " + +-#define LINK_ARCH64_SPEC "-m elf64_sparc -Y P,%R/usr/lib64 %{shared:-shared} \ ++#define LINK_ARCH64_SPEC "-m elf64_sparc -Y P,%R/usr/lib %{shared:-shared} \ + %{!shared: \ + %{!ibcs: \ + %{!static: \ +@@ -211,7 +211,7 @@ + #else /* !SPARC_BI_ARCH */ + + #undef LINK_SPEC +-#define LINK_SPEC "-m elf64_sparc -Y P,%R/usr/lib64 %{shared:-shared} \ ++#define LINK_SPEC "-m elf64_sparc -Y P,%R/usr/lib %{shared:-shared} \ + %{!shared: \ + %{!ibcs: \ + %{!static: \ diff --git a/packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-libstdc++-v3_config.patch b/packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-libstdc++-v3_config.patch new file mode 100644 index 0000000000..b7c6a701e1 --- /dev/null +++ b/packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-libstdc++-v3_config.patch @@ -0,0 +1,95 @@ +diff -Naur gcc-4.5-20100610-old/libstdc++-v3/config.h.in gcc-4.5-20100610-new/libstdc++-v3/config.h.in +--- gcc-4.5-20100610-old/libstdc++-v3/config.h.in 2010-06-11 09:40:55.000000000 -0700 ++++ gcc-4.5-20100610-new/libstdc++-v3/config.h.in 2010-06-11 09:41:44.000000000 -0700 +@@ -115,7 +115,7 @@ + #undef HAVE_FABSL + + /* Define to 1 if you have the header file. */ +-#undef HAVE_FENV_H ++#define HAVE_FENV_H 1 + + /* Define to 1 if you have the `finite' function. */ + #undef HAVE_FINITE +@@ -170,7 +170,7 @@ + #undef HAVE_HYPOTL + + /* Define if you have the iconv() function. */ +-#undef HAVE_ICONV ++#define HAVE_ICONV 1 + + /* Define to 1 if you have the header file. */ + #undef HAVE_IEEEFP_H +@@ -209,7 +209,7 @@ + #undef HAVE_ISWBLANK + + /* Define if LC_MESSAGES is available in . */ +-#undef HAVE_LC_MESSAGES ++#define HAVE_LC_MESSAGES 1 + + /* Define to 1 if you have the `ldexpf' function. */ + #undef HAVE_LDEXPF +@@ -290,7 +290,7 @@ + #undef HAVE_QFPCLASS + + /* Define to 1 if you have the `setenv' function. */ +-#undef HAVE_SETENV ++#define HAVE_SETENV 1 + + /* Define to 1 if you have the `sincos' function. */ + #undef HAVE_SINCOS +@@ -329,7 +329,7 @@ + #undef HAVE_STDLIB_H + + /* Define if strerror_l is available in . */ +-#undef HAVE_STRERROR_L ++#define HAVE_STRERROR_L 1 + + /* Define if strerror_r is available in . */ + #undef HAVE_STRERROR_R +@@ -356,7 +356,7 @@ + #undef HAVE_SYS_IOCTL_H + + /* Define to 1 if you have the header file. */ +-#undef HAVE_SYS_IPC_H ++#define HAVE_SYS_IPC_H 1 + + /* Define to 1 if you have the header file. */ + #undef HAVE_SYS_ISA_DEFS_H +@@ -368,16 +368,16 @@ + #undef HAVE_SYS_PARAM_H + + /* Define to 1 if you have the header file. */ +-#undef HAVE_SYS_RESOURCE_H ++#define HAVE_SYS_RESOURCE_H 1 + + /* Define to 1 if you have the header file. */ +-#undef HAVE_SYS_SEM_H ++#define HAVE_SYS_SEM_H 1 + + /* Define to 1 if you have the header file. */ + #undef HAVE_SYS_STAT_H + + /* Define to 1 if you have the header file. */ +-#undef HAVE_SYS_TIME_H ++#define HAVE_SYS_TIME_H 1 + + /* Define to 1 if you have the header file. */ + #undef HAVE_SYS_TYPES_H +@@ -407,7 +407,7 @@ + #undef HAVE_TGMATH_H + + /* Define to 1 if the target supports thread-local storage. */ +-#undef HAVE_TLS ++#define HAVE_TLS 1 + + /* Define to 1 if you have the header file. */ + #undef HAVE_UNISTD_H +@@ -620,7 +620,7 @@ + #undef HAVE__TANL + + /* Define as const if the declaration of iconv() needs const. */ +-#undef ICONV_CONST ++#define ICONV_CONST 1 + + /* Define to the sub-directory in which libtool stores uninstalled libraries. + */ diff --git a/packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-ppl-0.11-0.1.patch b/packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-ppl-0.11-0.1.patch new file mode 100644 index 0000000000..946e23454b --- /dev/null +++ b/packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-ppl-0.11-0.1.patch @@ -0,0 +1,24 @@ +diff -Naur gcc-4.5.1/configure gcc-4.5.1.patch/configure +--- gcc-4.5.1/configure 2010-06-24 23:06:37.000000000 +0200 ++++ gcc-4.5.1.patch/configure 2010-09-02 17:12:08.807742278 +0200 +@@ -5781,7 +5781,7 @@ + + # Check for PPL + ppl_major_version=0 +-ppl_minor_version=10 ++ppl_minor_version=11 + ppllibs=" -lppl_c -lppl -lgmpxx" + pplinc= + +diff -Naur gcc-4.5.1/configure.ac gcc-4.5.1.patch/configure.ac +--- gcc-4.5.1/configure.ac 2010-06-24 23:06:37.000000000 +0200 ++++ gcc-4.5.1.patch/configure.ac 2010-09-02 17:12:22.748618664 +0200 +@@ -1511,7 +1511,7 @@ + + # Check for PPL + ppl_major_version=0 +-ppl_minor_version=10 ++ppl_minor_version=11 + ppllibs=" -lppl_c -lppl -lgmpxx" + pplinc= + From 487de8ea937f5e534336139c261672a3049d2790 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 02:47:23 +0100 Subject: [PATCH 811/850] grep: do not autoreconf Signed-off-by: Stephan Raue --- packages/sysutils/grep/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sysutils/grep/meta b/packages/sysutils/grep/meta index a57f5ae0fc..5e7fd4dff9 100644 --- a/packages/sysutils/grep/meta +++ b/packages/sysutils/grep/meta @@ -13,4 +13,4 @@ PKG_SHORTDESC="grep: This is GNU grep, the fastest grep in the west" PKG_LONGDESC="GNU grep is based on a fast lazy-state deterministic matcher (about twice as fast as stock Unix egrep) hybridized with a Boyer-Moore-Gosper search for a fixed string that eliminates impossible text from being considered by the full regexp matcher without necessarily having to look at every character. The result is typically many times faster than Unix grep or egrep." PKG_IS_ADDON="no" -PKG_AUTORECONF="yes" +PKG_AUTORECONF="no" From 58686fe7b1fb2e9a22e6714ea9a544e814f49310 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 02:49:22 +0100 Subject: [PATCH 812/850] plymouth-lite: build with -fwhole-program Signed-off-by: Stephan Raue --- packages/sysutils/plymouth-lite/build | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sysutils/plymouth-lite/build b/packages/sysutils/plymouth-lite/build index 8083767fd5..a23008fd07 100755 --- a/packages/sysutils/plymouth-lite/build +++ b/packages/sysutils/plymouth-lite/build @@ -6,6 +6,8 @@ CFLAGS=`echo $CFLAGS | sed -e "s|-O2|-Os|"` CFLAGS=`echo $CFLAGS | sed -e "s|-O3|-Os|"` +LDFLAGS="$LDFLAGS -fwhole-program" + cd $PKG_BUILD make From 58b5989fb96916a88114a41188a71c341b6770a4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 02:50:32 +0100 Subject: [PATCH 813/850] libmodplug: fails to build with lto optimization Signed-off-by: Stephan Raue --- packages/audio/libmodplug/build | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/audio/libmodplug/build b/packages/audio/libmodplug/build index 34dac54a72..3f62498c01 100755 --- a/packages/audio/libmodplug/build +++ b/packages/audio/libmodplug/build @@ -2,6 +2,8 @@ . config/options $1 +strip_lto # libmodplug fails to build with LTO optimization + cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ From f41851155977d3b7f88ad5bf1cda7ba9d79409de Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 02:50:56 +0100 Subject: [PATCH 814/850] Mesa: fails to build with lto optimization Signed-off-by: Stephan Raue --- packages/graphics/Mesa/build | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/graphics/Mesa/build b/packages/graphics/Mesa/build index c9dd74421b..c3831c2afd 100755 --- a/packages/graphics/Mesa/build +++ b/packages/graphics/Mesa/build @@ -7,6 +7,7 @@ get_graphicdrivers # dont use gold linker because of compiling issues strip_gold strip_linker_plugin + strip_lto # Mesa fails to build with LTO optimization # dont use strip or ggdb because of use from mklib LDFLAGS=`echo $LDFLAGS | sed -e "s|-s||"` From 3f55a26e648384574d93abc99c215494ca8632f0 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 02:51:19 +0100 Subject: [PATCH 815/850] glib: fails to build with lto optimization Signed-off-by: Stephan Raue --- packages/devel/glib/build | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/devel/glib/build b/packages/devel/glib/build index 341d1c253f..34da6232a6 100755 --- a/packages/devel/glib/build +++ b/packages/devel/glib/build @@ -4,8 +4,7 @@ # Fails to compile with GCC link time optimization, outputing the error: # "mem-overflow.c:137:1: sorry, unimplemented: gimple bytecode streams do not support the optimization attribute". -# CFLAGS=`echo $CFLAGS | sed -e "s|-flto||"` -# LDFLAGS=`echo $LDFLAGS | sed -e "s|-flto||"` + strip_lto cd $PKG_BUILD mkdir -p .build-target && cd .build-target From 7f36007f68cb48b3220a6866e80fb9bf09dc2754 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 02:51:44 +0100 Subject: [PATCH 816/850] libssh: fails to build with lto optimization Signed-off-by: Stephan Raue --- packages/network/libssh/build | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/network/libssh/build b/packages/network/libssh/build index 194660f04a..97ab504326 100755 --- a/packages/network/libssh/build +++ b/packages/network/libssh/build @@ -2,6 +2,8 @@ . config/options $1 +strip_lto # libssh fails to build with LTO optimization + cd $PKG_BUILD mkdir -p build && cd build From 3aaccd53c4212536f52900e2b8476cb80fa6b7b2 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 02:52:22 +0100 Subject: [PATCH 817/850] hdparm: build with -fwhole-program Signed-off-by: Stephan Raue --- packages/tools/hdparm/build | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/tools/hdparm/build b/packages/tools/hdparm/build index cd1a3b85e6..6d40e8db36 100755 --- a/packages/tools/hdparm/build +++ b/packages/tools/hdparm/build @@ -2,7 +2,7 @@ . config/options $1 +LDFLAGS="$CFLAGS $LDFLAGS -fwhole-program" + cd $PKG_BUILD -make binprefix="/usr" \ - sbindir="/sbin" \ - LDFLAGS="$LDFLAGS -s" \ No newline at end of file + make binprefix="/usr" sbindir="/sbin" From 478b67684c7eeefa0deb7681003c69f46ea78c15 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 02:54:19 +0100 Subject: [PATCH 818/850] busybox-hosttools: build verbose Signed-off-by: Stephan Raue --- packages/sysutils/busybox-hosttools/build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sysutils/busybox-hosttools/build b/packages/sysutils/busybox-hosttools/build index 285fe007b6..86384260bd 100755 --- a/packages/sysutils/busybox-hosttools/build +++ b/packages/sysutils/busybox-hosttools/build @@ -11,7 +11,7 @@ cd $BUILD/busybox* cp $ROOT/$PKG_DIR/config/$1.conf .config make oldconfig - ARCH=$TARGET_ARCH make CROSS_COMPILE="" install + ARCH=$TARGET_ARCH make CROSS_COMPILE="" KBUILD_VERBOSE="1" install mkdir -p $ROOT/$TOOLCHAIN/bin cp -R _install-hosttools/bin/* $ROOT/$TOOLCHAIN/bin From 73075eba7fb5a4e4b859604e5e1ef4004dcf441f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 02:56:14 +0100 Subject: [PATCH 819/850] busybox-initramfs: build with -fwhole-program, build verbose Signed-off-by: Stephan Raue --- packages/sysutils/busybox-initramfs/build | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/sysutils/busybox-initramfs/build b/packages/sysutils/busybox-initramfs/build index 7d24bba7f2..1abf53d805 100755 --- a/packages/sysutils/busybox-initramfs/build +++ b/packages/sysutils/busybox-initramfs/build @@ -13,9 +13,7 @@ fi # optimize for size CFLAGS=`echo $CFLAGS | sed -e "s|-O?|-Os|"` -# Fails to compile using the gold linker. -# LDFLAGS=`echo $LDFLAGS | sed -e "s|-fuse-ld=gold||"` -# LDFLAGS=`echo $LDFLAGS | sed -e "s|-fuse-linker-plugin||"` +LDFLAGS="$LDFLAGS -fwhole-program" cd $BUILD/busybox* @@ -27,4 +25,5 @@ cd $BUILD/busybox* make ARCH=$TARGET_ARCH \ HOSTCC=$HOST_CC \ CROSS_COMPILE=$TARGET_PREFIX \ + KBUILD_VERBOSE="1" \ install From 8abe77ff84f8728e4fc78bd43d8bc88f285b6702 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 02:56:52 +0100 Subject: [PATCH 820/850] busybox: add upstream patch Signed-off-by: Stephan Raue --- .../patches/busybox-1.18.0-buildsys.patch | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 packages/sysutils/busybox/patches/busybox-1.18.0-buildsys.patch diff --git a/packages/sysutils/busybox/patches/busybox-1.18.0-buildsys.patch b/packages/sysutils/busybox/patches/busybox-1.18.0-buildsys.patch new file mode 100644 index 0000000000..c72e4d3b56 --- /dev/null +++ b/packages/sysutils/busybox/patches/busybox-1.18.0-buildsys.patch @@ -0,0 +1,21 @@ +diff -urpN busybox-1.18.0/scripts/gen_build_files.sh busybox-1.18.0-buildsys/scripts/gen_build_files.sh +--- busybox-1.18.0/scripts/gen_build_files.sh 2010-11-22 21:43:22.000000000 +0100 ++++ busybox-1.18.0-buildsys/scripts/gen_build_files.sh 2010-11-24 14:59:47.732712663 +0100 +@@ -18,14 +18,14 @@ generate() + local src="$1" dst="$2" header="$3" insert="$4" + #chk "${dst}" + ( +- echo "${header}" ++ printf "%s\n" "${header}" + if grep -qs '^INSERT$' "${src}"; then + sed -n '1,/^INSERT$/p' "${src}" +- echo "${insert}" ++ printf "%s\n" "${insert}" + sed -n '/^INSERT$/,$p' "${src}" + else + if [ -n "${insert}" ]; then +- echo "ERROR: INSERT line missing in: ${src}" 1>&2 ++ printf "%s\n" "ERROR: INSERT line missing in: ${src}" 1>&2 + fi + cat "${src}" + fi From 49d0277699b35a546165ee2e07417a93bd43fd85 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 02:57:16 +0100 Subject: [PATCH 821/850] busybox: fix building with GOLD linker Signed-off-by: Stephan Raue --- .../busybox/patches/busybox-1.18.0-01_check_cc.patch | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 packages/sysutils/busybox/patches/busybox-1.18.0-01_check_cc.patch diff --git a/packages/sysutils/busybox/patches/busybox-1.18.0-01_check_cc.patch b/packages/sysutils/busybox/patches/busybox-1.18.0-01_check_cc.patch new file mode 100644 index 0000000000..64c2d68559 --- /dev/null +++ b/packages/sysutils/busybox/patches/busybox-1.18.0-01_check_cc.patch @@ -0,0 +1,12 @@ +diff -Naur busybox-1.17.3-old/scripts/trylink busybox-1.17.3-new/scripts/trylink +--- busybox-1.17.3-old/scripts/trylink 2010-09-16 16:05:35.000000000 -0700 ++++ busybox-1.17.3-new/scripts/trylink 2010-10-10 07:38:03.000000000 -0700 +@@ -49,7 +49,7 @@ + local tempname="/tmp/temp.$$.$RANDOM" + # Can use "-o /dev/null", but older gcc tend to *unlink it* on failure! :( + # "-xc": C language. "/dev/null" is an empty source file. +- if $CC $1 -shared -xc /dev/null -o "$tempname".o >/dev/null 2>&1; then ++ if $CC $CFLAGS $LDFLAGS $1 -shared -xc /dev/null -o "$tempname".o >/dev/null 2>&1; then + echo "$1"; + else + echo "$2"; From 88bc130d12e313b1ff841f00bd3d6afa251002ac Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 02:58:27 +0100 Subject: [PATCH 822/850] busybox: build with -fwhole-program, build verbose Signed-off-by: Stephan Raue --- packages/sysutils/busybox/build | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/sysutils/busybox/build b/packages/sysutils/busybox/build index 05d9367280..a539cd5966 100755 --- a/packages/sysutils/busybox/build +++ b/packages/sysutils/busybox/build @@ -11,9 +11,7 @@ fi # optimize for size CFLAGS=`echo $CFLAGS | sed -e "s|-O?|-Os|"` -# Fails to compile using the gold linker. - LDFLAGS=`echo $LDFLAGS | sed -e "s|-fuse-ld=gold||"` - LDFLAGS=`echo $LDFLAGS | sed -e "s|-fuse-linker-plugin||"` +LDFLAGS="$LDFLAGS -fwhole-program" cd $BUILD/busybox* @@ -25,4 +23,5 @@ cd $BUILD/busybox* make ARCH=$TARGET_ARCH \ HOSTCC=$HOST_CC \ CROSS_COMPILE=$TARGET_PREFIX \ + KBUILD_VERBOSE="1" \ install From 82aef81b63f9fdfe616f353e39920b5b7c80042f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 02:59:45 +0100 Subject: [PATCH 823/850] binutils: copy $TARGET_NAME/bin/ld.gold to $TARGET_NAME/bin/gold, cleanups Signed-off-by: Stephan Raue --- packages/toolchain/devel/binutils/build | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/toolchain/devel/binutils/build b/packages/toolchain/devel/binutils/build index 7bcf36f00f..ba49bbd59d 100755 --- a/packages/toolchain/devel/binutils/build +++ b/packages/toolchain/devel/binutils/build @@ -43,4 +43,5 @@ cp -v ../include/libiberty.h $SYSROOT_PREFIX/usr/include make install -cp $ROOT/$TOOLCHAIN/bin/$TARGET_NAME-ld.gold $ROOT/$TOOLCHAIN/bin/$TARGET_NAME-gold \ No newline at end of file +cp ${TARGET_PREFIX}ld.gold ${TARGET_PREFIX}gold +cp $ROOT/$TOOLCHAIN/$TARGET_NAME/bin/ld.gold $ROOT/$TOOLCHAIN/$TARGET_NAME/bin/gold From a9461a93c4871a94f3d1b3a87fcfaed046812d1a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 03:01:15 +0100 Subject: [PATCH 824/850] busybox: fix sed Signed-off-by: Stephan Raue --- packages/sysutils/busybox/build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sysutils/busybox/build b/packages/sysutils/busybox/build index a539cd5966..1e1b99b9df 100755 --- a/packages/sysutils/busybox/build +++ b/packages/sysutils/busybox/build @@ -9,7 +9,7 @@ else fi # optimize for size - CFLAGS=`echo $CFLAGS | sed -e "s|-O?|-Os|"` + CFLAGS=`echo $CFLAGS | sed -e "s|-O.|-Os|"` LDFLAGS="$LDFLAGS -fwhole-program" From 7dc9f050a961dd44971cf6c37d11925677f9ac0e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 03:01:26 +0100 Subject: [PATCH 825/850] busybox-initramfs: fix sed Signed-off-by: Stephan Raue --- packages/sysutils/busybox-initramfs/build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sysutils/busybox-initramfs/build b/packages/sysutils/busybox-initramfs/build index 1abf53d805..fb04de2490 100755 --- a/packages/sysutils/busybox-initramfs/build +++ b/packages/sysutils/busybox-initramfs/build @@ -11,7 +11,7 @@ else fi # optimize for size - CFLAGS=`echo $CFLAGS | sed -e "s|-O?|-Os|"` + CFLAGS=`echo $CFLAGS | sed -e "s|-O.|-Os|"` LDFLAGS="$LDFLAGS -fwhole-program" From 1270e561d0cf4066cbf6f8f5603e5349838bf5f6 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 03:02:39 +0100 Subject: [PATCH 826/850] eglibc: fix sed, respect our otimization Signed-off-by: Stephan Raue --- packages/toolchain/devel/eglibc/build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/toolchain/devel/eglibc/build b/packages/toolchain/devel/eglibc/build index d262776684..522beb382d 100755 --- a/packages/toolchain/devel/eglibc/build +++ b/packages/toolchain/devel/eglibc/build @@ -6,7 +6,7 @@ strip_lto # Fails to compile with GCC's link time optimization. strip_gold # Fails to compile using the gold linker. # Filter out some problematic CFLAGS - CFLAGS=`echo $CFLAGS | sed -e "s|-ffast-math||" -e "s|-O?||"` + CFLAGS=`echo $CFLAGS | sed -e "s|-ffast-math||"` # -e "s|-O.|-O3|" # set some CFLAGS we need CFLAGS="$CFLAGS -g -fno-stack-protector" From 285a48410eaaee708114cbf9a7d1d0c069db7c9f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 03:04:52 +0100 Subject: [PATCH 827/850] gcc-final: use gnu-as, use gnu-ld Signed-off-by: Stephan Raue --- packages/toolchain/lang/gcc-final/build | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/toolchain/lang/gcc-final/build b/packages/toolchain/lang/gcc-final/build index d941daf9dd..2d71d86cc4 100755 --- a/packages/toolchain/lang/gcc-final/build +++ b/packages/toolchain/lang/gcc-final/build @@ -13,8 +13,6 @@ mkdir -p objdir-$1 && cd objdir-$1 --target=$TARGET_NAME \ --prefix=$ROOT/$TOOLCHAIN \ --with-sysroot=$SYSROOT_PREFIX \ - --with-as=$TARGET_AS \ - --with-ld=$TARGET_LD \ --with-gmp=$ROOT/$TOOLCHAIN \ --with-mpfr=$ROOT/$TOOLCHAIN \ --with-mpc=$ROOT/$TOOLCHAIN \ @@ -22,6 +20,8 @@ mkdir -p objdir-$1 && cd objdir-$1 --with-cloog=$ROOT/$TOOLCHAIN \ --with-libelf=$ROOT/$TOOLCHAIN \ --enable-languages=${TOOLCHAIN_LANGUAGES} \ + --with-gnu-as \ + --with-gnu-ld \ --enable-__cxa_atexit \ --disable-libada \ --enable-decimal-float \ From 19a1ae94b0a9e7c7ddfc73ed1a745b16690b6a88 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 03:05:18 +0100 Subject: [PATCH 828/850] gcc-core: use gnu-as, use gnu-ld, do an full build and install Signed-off-by: Stephan Raue --- packages/toolchain/lang/gcc-core/build | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/toolchain/lang/gcc-core/build b/packages/toolchain/lang/gcc-core/build index 08301656f0..b5da7f54b2 100755 --- a/packages/toolchain/lang/gcc-core/build +++ b/packages/toolchain/lang/gcc-core/build @@ -16,14 +16,14 @@ mkdir -p objdir-$1 && cd objdir-$1 --target=$TARGET_NAME \ --prefix=$ROOT/$TOOLCHAIN \ --with-sysroot=$SYSROOT_PREFIX \ - --with-as=$TARGET_AS \ - --with-ld=$TARGET_LD \ --with-gmp=$ROOT/$TOOLCHAIN \ --with-mpfr=$ROOT/$TOOLCHAIN \ --with-mpc=$ROOT/$TOOLCHAIN \ --with-ppl=$ROOT/$TOOLCHAIN \ --with-cloog=$ROOT/$TOOLCHAIN \ --with-libelf=$ROOT/$TOOLCHAIN \ + --with-gnu-as \ + --with-gnu-ld \ --enable-languages=c \ --disable-__cxa_atexit \ --disable-libada \ @@ -41,6 +41,5 @@ mkdir -p objdir-$1 && cd objdir-$1 --disable-decimal-float \ --disable-nls -make all-gcc all-target-libgcc -make install-gcc install-target-libgcc - +make +make install From 8f9bb97e2fdccaf6f2f69b690eb1c6e62f450697 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 03:06:09 +0100 Subject: [PATCH 829/850] config/path: enable LTO support Signed-off-by: Stephan Raue --- config/path | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config/path b/config/path index 3c586e5fb4..2998c38ef3 100644 --- a/config/path +++ b/config/path @@ -156,9 +156,9 @@ if [ "$DEBUG" = yes ]; then TARGET_CXXFLAGS="$TARGET_CXXFLAGS -ggdb" TARGET_LDFLAGS="$TARGET_LDFLAGS -ggdb" else - TARGET_CFLAGS="$TARGET_CFLAGS -s -fuse-linker-plugin -fomit-frame-pointer" - TARGET_CXXFLAGS="$TARGET_CXXFLAGS -s -fuse-linker-plugin -fomit-frame-pointer" - TARGET_LDFLAGS="$TARGET_LDFLAGS -s -fuse-linker-plugin -fuse-ld=gold -Wl,--as-needed" + TARGET_CFLAGS="$TARGET_CFLAGS -flto -fomit-frame-pointer" + TARGET_CXXFLAGS="$TARGET_CXXFLAGS -flto -fomit-frame-pointer" + TARGET_LDFLAGS="$TARGET_LDFLAGS -s -fuse-linker-plugin -fuse-ld=gold -flto -Wl,--as-needed" fi HOST_AWK=gawk From 9369dc8822cf6ed6b75db7210f81cd10b8a0c4fb Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 03:08:36 +0100 Subject: [PATCH 830/850] config/functions: fix strip_lto(), fix strip_gold() Signed-off-by: Stephan Raue --- config/functions | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/config/functions b/config/functions index 3cbdfd7009..14481f6770 100644 --- a/config/functions +++ b/config/functions @@ -137,14 +137,14 @@ do_autoreconf() { strip_lto() { # strip out LTO optimization from *FLAGS - CFLAGS=`echo $CFLAGS | sed -e "s|-flto||" -e "s|-fuse-linker-plugin||"` - CXXFLAGS=`echo $CXXFLAGS | sed -e "s|-flto||" -e "s|-fuse-linker-plugin||"` - LDFLAGS=`echo $LDFLAGS | sed -e "s|-flto||" -e "s|-fuse-linker-plugin||"` + CFLAGS=`echo $CFLAGS | sed -e "s|-flto||"` + CXXFLAGS=`echo $CXXFLAGS | sed -e "s|-flto||"` + LDFLAGS=`echo $LDFLAGS | sed -e "s|-flto||"` } strip_gold() { # strip out usage from GOLD linker - LDFLAGS=`echo $LDFLAGS | sed -e "s|-fuse-ld=gold||"` + LDFLAGS=`echo $LDFLAGS | sed -e "s|-fuse-ld=gold||" -e "s|-fuse-linker-plugin||"` } strip_linker_plugin() { From 7ffd7f994b4683112079eab573dd8c6a3d148b6f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 03:09:56 +0100 Subject: [PATCH 831/850] mame: temporary remove package Signed-off-by: Stephan Raue --- packages/addons/emulators/mame/addon | 9 - packages/addons/emulators/mame/build | 55 ---- packages/addons/emulators/mame/changelog.txt | 5 - .../addons/emulators/mame/config/mame.ini | 266 ------------------ packages/addons/emulators/mame/icon/icon.png | Bin 11283 -> 0 bytes packages/addons/emulators/mame/meta | 14 - .../mame/patches/mame-0138s-cross.diff | 84 ------ .../addons/emulators/mame/scripts/start.sh | 40 --- 8 files changed, 473 deletions(-) delete mode 100755 packages/addons/emulators/mame/addon delete mode 100755 packages/addons/emulators/mame/build delete mode 100644 packages/addons/emulators/mame/changelog.txt delete mode 100644 packages/addons/emulators/mame/config/mame.ini delete mode 100644 packages/addons/emulators/mame/icon/icon.png delete mode 100644 packages/addons/emulators/mame/meta delete mode 100644 packages/addons/emulators/mame/patches/mame-0138s-cross.diff delete mode 100755 packages/addons/emulators/mame/scripts/start.sh diff --git a/packages/addons/emulators/mame/addon b/packages/addons/emulators/mame/addon deleted file mode 100755 index e04f1ed1c4..0000000000 --- a/packages/addons/emulators/mame/addon +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -. config/options $1 - -mkdir -p $ADDON_BUILD/mkimage - cp $PKG_DIR/config/mame.ini $ADDON_BUILD/mkimage - -mkdir -p $ADDON_BUILD/mkimage/bin - cp $PKG_BUILD/mame $ADDON_BUILD/mkimage/bin diff --git a/packages/addons/emulators/mame/build b/packages/addons/emulators/mame/build deleted file mode 100755 index 1ce9eaf819..0000000000 --- a/packages/addons/emulators/mame/build +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/sh - -. config/options $1 - -cd $PKG_BUILD - -# some hacks to build hosttools - setup_toolchain host - - mkdir -p obj/sdl/mame/build \ - obj/sdl/mame/osd/sdl \ - obj/sdl/mame/lib/util \ - obj/sdl/mame/lib/zlib \ - obj/sdl/mame/emu/cpu/m68000 \ - obj/sdl/mame/emu/cpu/tms57002 - - make BUILD_EXPAT=1 SDL_INSTALL_ROOT="/usr" obj/sdl/mame/build/file2str - make BUILD_EXPAT=1 SDL_INSTALL_ROOT="/usr" obj/sdl/mame/build/png2bdc - make BUILD_EXPAT=1 SDL_INSTALL_ROOT="/usr" obj/sdl/mame/build/m68kmake - make BUILD_EXPAT=1 SDL_INSTALL_ROOT="/usr" obj/sdl/mame/build/tmsmake - - cp obj/sdl/mame/build/file2str $ROOT/$TOOLCHAIN/bin/mame-file2str - cp obj/sdl/mame/build/png2bdc $ROOT/$TOOLCHAIN/bin/mame-png2bdc - cp obj/sdl/mame/build/m68kmake $ROOT/$TOOLCHAIN/bin/mame-m68kmake - cp obj/sdl/mame/build/tmsmake $ROOT/$TOOLCHAIN/bin/mame-tmsmake - - make clean - -# now build - setup_toolchain target - - if [ "$TARGET_ARCH" = x86_64 ]; then - ARCH_OPTS="PTR64=1" - else - ARCH_OPTS="PTR64=0" - fi - - if [ "$DEBUG" = yes ]; then - DEBUG_OPTS="OPTIMIZE=0 DEBUG=1 SYMBOLS=1 PROFILER=1 PROFILE=1" - else - DEBUG_OPTS="OPTIMIZE=3" - fi - - make CC="$TARGET_CC" \ - AR="$TARGET_AR" \ - LD="$TARGET_CXX" \ - ARCHOPTS="$TARGET_CFLAGS" \ - OPT_FLAGS='-DINI_PATH="\".\""' \ - NO_DEBUGGER=1 \ - NOWERROR=1 \ - BUILD_EXPAT=0 \ - BUILD_ZLIB=0 \ - SUFFIX64="" \ - $ARCH_OPTS \ - $DEBUG_OPTS diff --git a/packages/addons/emulators/mame/changelog.txt b/packages/addons/emulators/mame/changelog.txt deleted file mode 100644 index b4cb93ca4c..0000000000 --- a/packages/addons/emulators/mame/changelog.txt +++ /dev/null @@ -1,5 +0,0 @@ -0.90.2 - - update to MAME 0.139s - -0.90.1 - - initial version MAME 0.138s diff --git a/packages/addons/emulators/mame/config/mame.ini b/packages/addons/emulators/mame/config/mame.ini deleted file mode 100644 index d2dde9be10..0000000000 --- a/packages/addons/emulators/mame/config/mame.ini +++ /dev/null @@ -1,266 +0,0 @@ - - -# -# CORE CONFIGURATION OPTIONS -# -readconfig 1 - -# -# CORE SEARCH PATH OPTIONS -# -rompath $HOME/emulators/mame/roms -samplepath $HOME/emulators/mame/samples -artpath $HOME/emulators/mame/artwork -ctrlrpath $HOME/emulators/mame/ctrlr -inipath /etc/mame;$HOME/.config -fontpath $HOME/emulators/mame/fonts -cheatpath $HOME/emulators/mame/cheat -crosshairpath $HOME/emulators/mame/crosshair - -# -# CORE OUTPUT DIRECTORY OPTIONS -# -cfg_directory $HOME/emulators/mame/cfg -nvram_directory $HOME/emulators/mame/nvram -memcard_directory $HOME/emulators/mame/memcard -input_directory $HOME/emulators/mame/inp -state_directory $HOME/emulators/mame/sta -snapshot_directory $HOME/emulators/mame/snap -diff_directory $HOME/emulators/mame/diff -comment_directory $HOME/emulators/mame/comments - -# -# CORE STATE/PLAYBACK OPTIONS -# -state -autosave 1 -playback -record -mngwrite -aviwrite -wavwrite -snapname %g/%i -snapsize auto -snapview internal -burnin 0 - -# -# CORE PERFORMANCE OPTIONS -# -autoframeskip 0 -frameskip 0 -seconds_to_run 0 -throttle 1 -sleep 1 -speed 1.0 -refreshspeed 0 - -# -# CORE ROTATION OPTIONS -# -rotate 1 -ror 0 -rol 0 -autoror 0 -autorol 0 -flipx 0 -flipy 0 - -# -# CORE ARTWORK OPTIONS -# -artwork_crop 0 -use_backdrops 1 -use_overlays 1 -use_bezels 1 - -# -# CORE SCREEN OPTIONS -# -brightness 1.0 -contrast 1.0 -gamma 1.0 -pause_brightness 0.65 - -# -# CORE VECTOR OPTIONS -# -antialias 1 -beam 1.0 -flicker 0 - -# -# CORE SOUND OPTIONS -# -sound 1 -samplerate 48000 -samples 1 -volume 0 - -# -# CORE INPUT OPTIONS -# -coin_lockout 1 -ctrlr -mouse 0 -joystick 1 -lightgun 0 -multikeyboard 0 -multimouse 0 -steadykey 0 -offscreen_reload 0 -joystick_map auto -joystick_deadzone 0.3 -joystick_saturation 0.85 -natural 0 -uimodekey auto - -# -# CORE INPUT AUTOMATIC ENABLE OPTIONS -# -paddle_device keyboard -adstick_device keyboard -pedal_device keyboard -dial_device keyboard -trackball_device keyboard -lightgun_device keyboard -positional_device keyboard -mouse_device mouse - -# -# CORE DEBUGGING OPTIONS -# -log 0 -verbose 0 -update_in_pause 0 -debug 0 -debugscript -debug_internal 0 - -# -# CORE MISC OPTIONS -# -bios -cheat 0 -skip_gameinfo 0 - -# -# DEBUGGING OPTIONS -# -oslog 0 - -# -# PERFORMANCE OPTIONS -# -multithreading 1 -numprocessors auto -sdlvideofps 0 - -# -# VIDEO OPTIONS -# -video opengl -numscreens 1 -window 0 -maximize 1 -keepaspect 1 -unevenstretch 1 -effect none -centerh 1 -centerv 1 -waitvsync 0 -scalemode none - -# -# OpenGL-SPECIFIC OPTIONS -# -filter 1 -prescale 1 -gl_forcepow2texture 0 -gl_notexturerect 0 -gl_vbo 1 -gl_pbo 1 -gl_glsl 0 -gl_glsl_filter 1 -glsl_shader_mame0 none -glsl_shader_mame1 none -glsl_shader_mame2 none -glsl_shader_mame3 none -glsl_shader_mame4 none -glsl_shader_mame5 none -glsl_shader_mame6 none -glsl_shader_mame7 none -glsl_shader_mame8 none -glsl_shader_mame9 none -glsl_shader_screen0 none -glsl_shader_screen1 none -glsl_shader_screen2 none -glsl_shader_screen3 none -glsl_shader_screen4 none -glsl_shader_screen5 none -glsl_shader_screen6 none -glsl_shader_screen7 none -glsl_shader_screen8 none -glsl_shader_screen9 none -gl_glsl_vid_attr 1 - -# -# PER-WINDOW VIDEO OPTIONS -# -screen auto -aspect auto -resolution auto -view auto -screen0 auto -aspect0 auto -resolution0 auto -view0 auto -screen1 auto -aspect1 auto -resolution1 auto -view1 auto -screen2 auto -aspect2 auto -resolution2 auto -view2 auto -screen3 auto -aspect3 auto -resolution3 auto -view3 auto - -# -# FULL SCREEN OPTIONS -# -switchres 0 -useallheads 0 - -# -# SOUND OPTIONS -# -audio_latency 3 - -# -# SDL KEYBOARD MAPPING -# -keymap 0 -keymap_file keymap.dat - -# -# SDL JOYSTICK MAPPING -# -joy_idx1 auto -joy_idx2 auto -joy_idx3 auto -joy_idx4 auto -joy_idx5 auto -joy_idx6 auto -joy_idx7 auto -joy_idx8 auto -sixaxis 0 - -# -# SDL LOWLEVEL DRIVER OPTIONS -# -videodriver auto -audiodriver auto -gl_lib auto diff --git a/packages/addons/emulators/mame/icon/icon.png b/packages/addons/emulators/mame/icon/icon.png deleted file mode 100644 index c16a233fe9a2ba0d34a66141a0d82c4c1861729e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11283 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 B@Pq&W diff --git a/packages/addons/emulators/mame/meta b/packages/addons/emulators/mame/meta deleted file mode 100644 index a25dfb510b..0000000000 --- a/packages/addons/emulators/mame/meta +++ /dev/null @@ -1,14 +0,0 @@ -PKG_NAME="mame" -PKG_VERSION="0139s" -PKG_REV="2" -PKG_ARCH="any" -PKG_LICENSE="free" -PKG_SITE="http://www.mame.org" -PKG_URL="http://sources.openelec.tv/svn/$PKG_NAME-$PKG_VERSION.tar.bz2" -PKG_DEPENDS="libX11 libXinerama SDL expat zlib" -PKG_BUILD_DEPENDS="toolchain libX11 libXinerama SDL expat zlib" -PKG_PRIORITY="optional" -PKG_SECTION="emulators" -PKG_SHORTDESC="(Emulator) MAME: Multiple Arcade Machine Emulator" -PKG_LONGDESC="MAME stands for Multiple Arcade Machine Emulator. When used in conjunction with images of the original arcade game's ROM and disk data, MAME attempts to reproduce that game as faithfully as possible on a more modern general-purpose computer. MAME can currently emulate several thousand different classic arcade video games from the late 1970s through the modern era." -PKG_IS_ADDON="yes" diff --git a/packages/addons/emulators/mame/patches/mame-0138s-cross.diff b/packages/addons/emulators/mame/patches/mame-0138s-cross.diff deleted file mode 100644 index 6e56e84c68..0000000000 --- a/packages/addons/emulators/mame/patches/mame-0138s-cross.diff +++ /dev/null @@ -1,84 +0,0 @@ -diff -Naur mame-0138s/makefile mame-0138s.patch/makefile ---- mame-0138s/makefile 2010-05-13 11:12:54.000000000 +0200 -+++ mame-0138s.patch/makefile 2010-07-13 01:04:52.722999679 +0200 -@@ -206,10 +206,10 @@ - # BIGENDIAN = 1 - - # uncomment next line to build expat as part of MAME build --BUILD_EXPAT = 1 -+# BUILD_EXPAT = 1 - - # uncomment next line to build zlib as part of MAME build --BUILD_ZLIB = 1 -+# BUILD_ZLIB = 1 - - # uncomment next line to include the symbols - # SYMBOLS = 1 -@@ -439,7 +439,7 @@ - ifneq ($(OPTIMIZE),0) - ifneq ($(TARGETOS),os2) - ifndef NOWERROR --CCOMFLAGS += -Werror -fno-strict-aliasing $(ARCHOPTS) -+CCOMFLAGS += -fno-strict-aliasing $(ARCHOPTS) - else - CCOMFLAGS += -fno-strict-aliasing $(ARCHOPTS) - endif -@@ -706,12 +706,12 @@ - - $(OBJ)/%.lh: $(SRC)/%.lay $(FILE2STR) - @echo Converting $<... -- @$(FILE2STR) $< $@ layout_$(basename $(notdir $<)) -+ @mame-file2str $< $@ layout_$(basename $(notdir $<)) - - $(OBJ)/%.fh: $(SRC)/%.png $(PNG2BDC) $(FILE2STR) - @echo Converting $<... -- @$(PNG2BDC) $< $(OBJ)/temp.bdc -- @$(FILE2STR) $(OBJ)/temp.bdc $@ font_$(basename $(notdir $<)) UINT8 -+ @mame-png2bdc $< $(OBJ)/temp.bdc -+ @mame-file2str $(OBJ)/temp.bdc $@ font_$(basename $(notdir $<)) UINT8 - - $(OBJ)/%.a: - @echo Archiving $@... -diff -Naur mame-0138s/src/emu/cpu/cpu.mak mame-0138s.patch/src/emu/cpu/cpu.mak ---- mame-0138s/src/emu/cpu/cpu.mak 2010-02-03 22:20:20.000000000 +0100 -+++ mame-0138s.patch/src/emu/cpu/cpu.mak 2010-07-12 23:04:03.416999399 +0200 -@@ -1019,7 +1019,7 @@ - # rule to generate the C files - $(CPUOBJ)/m68000/m68kops.c: $(M68KMAKE) $(CPUSRC)/m68000/m68k_in.c - @echo Generating M68K source files... -- $(M68KMAKE) $(CPUOBJ)/m68000 $(CPUSRC)/m68000/m68k_in.c -+ mame-m68kmake$(EXE) $(CPUOBJ)/m68000 $(CPUSRC)/m68000/m68k_in.c - - # rule to build the generator - ifneq ($(CROSS_BUILD),1) -@@ -1548,7 +1548,7 @@ - # rule to generate the C file - $(CPUOBJ)/tms57002/tms57002.inc: $(TMSMAKE) $(CPUSRC)/tms57002/tmsinstr.lst - @echo Generating TMS57002 source file... -- $(TMSMAKE) $(CPUSRC)/tms57002/tmsinstr.lst $@ -+ mame-tmsmake$(EXE) $(CPUSRC)/tms57002/tmsinstr.lst $@ - - # rule to build the generator - ifneq ($(CROSS_BUILD),1) -diff -Naur mame-0138s/src/osd/sdl/sdl.mak mame-0138s.patch/src/osd/sdl/sdl.mak ---- mame-0138s/src/osd/sdl/sdl.mak 2010-02-14 04:47:30.000000000 +0100 -+++ mame-0138s.patch/src/osd/sdl/sdl.mak 2010-07-13 01:07:47.158999892 +0200 -@@ -454,14 +454,14 @@ - - # the new debugger relies on GTK+ in addition to the base SDLMAME needs - # Non-X11 builds can not use the debugger --CCOMFLAGS += `pkg-config --cflags gtk+-2.0` `pkg-config --cflags gconf-2.0` --LIBS += `pkg-config --libs gtk+-2.0` `pkg-config --libs gconf-2.0` -+#CCOMFLAGS += `pkg-config --cflags gtk+-2.0` `pkg-config --cflags gconf-2.0` -+#LIBS += `pkg-config --libs gtk+-2.0` `pkg-config --libs gconf-2.0` - #CCOMFLAGS += -DGTK_DISABLE_DEPRECATED - - # some systems still put important things in a different prefix --LIBS += -L/usr/X11/lib -L/usr/X11R6/lib -L/usr/openwin/lib -+#LIBS += -L/usr/X11/lib -L/usr/X11R6/lib -L/usr/openwin/lib - # make sure we can find X headers --CCOMFLAGS += -I/usr/X11/include -I/usr/X11R6/include -I/usr/openwin/include -+# CCOMFLAGS += -I/usr/X11/include -I/usr/X11R6/include -I/usr/openwin/include - endif # NO_X11 - - #------------------------------------------------- diff --git a/packages/addons/emulators/mame/scripts/start.sh b/packages/addons/emulators/mame/scripts/start.sh deleted file mode 100755 index 7133bc8d8f..0000000000 --- a/packages/addons/emulators/mame/scripts/start.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/sh - -################################################################################ -# Copyright (C) 2009-2010 OpenELEC.tv -# http://www.openelec.tv -# -# This Program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This Program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -# make directory structure for mame - mkdir -p $HOME/emulators/mame/roms - mkdir -p $HOME/emulators/mame/samples - mkdir -p $HOME/emulators/mame/artwork - mkdir -p $HOME/emulators/mame/ctrlr - mkdir -p $HOME/emulators/mame/ini - mkdir -p $HOME/emulators/mame/fonts - mkdir -p $HOME/emulators/mame/cheat - mkdir -p $HOME/emulators/mame/crosshair - -mkdir -p image - mount -o loop mame.img image - -ln -sf image/* . -./bin/mame $@ - -umount image - From c699b74da61ba9b562424d4d12462dd1b6de3179 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 03:14:05 +0100 Subject: [PATCH 832/850] xbmc: fails to build with lto optimization Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc/build | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/mediacenter/xbmc/build b/packages/mediacenter/xbmc/build index 22cb6ccf53..e5938a31ce 100755 --- a/packages/mediacenter/xbmc/build +++ b/packages/mediacenter/xbmc/build @@ -56,6 +56,9 @@ else XBMC_CRYSTALHD="--disable-crystalhd" fi +# xbmc (ffmpeg) fails to build with LTO optimization + strip_lto + # dont use some optimizations because of problems # this fixes problems with faac implementation of ffmpeg LDFLAGS=`echo $LDFLAGS | sed -e "s|-Wl,--as-needed||"` From bd8d6b5677df978922224d596b878f4f90e14756 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 03:14:14 +0100 Subject: [PATCH 833/850] xbmc-dharma: fails to build with lto optimization Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc-dharma/build | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/mediacenter/xbmc-dharma/build b/packages/mediacenter/xbmc-dharma/build index 6e52216a19..942516f84f 100755 --- a/packages/mediacenter/xbmc-dharma/build +++ b/packages/mediacenter/xbmc-dharma/build @@ -62,6 +62,9 @@ else XBMC_CRYSTALHD="--disable-crystalhd" fi +# xbmc (ffmpeg) fails to build with LTO optimization + strip_lto + # dont use some optimizations because of problems # this fixes problems with faac implementation of ffmpeg LDFLAGS=`echo $LDFLAGS | sed -e "s|-Wl,--as-needed||"` From 92a52adc00aa3f56d7f4f0a01929d144ba8ee2bc Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 06:43:35 +0100 Subject: [PATCH 834/850] fuse: fails to build with GOLD linker Signed-off-by: Stephan Raue --- packages/sysutils/fuse/build | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/sysutils/fuse/build b/packages/sysutils/fuse/build index 41229e2653..c07e8a7f59 100755 --- a/packages/sysutils/fuse/build +++ b/packages/sysutils/fuse/build @@ -2,6 +2,9 @@ . config/options $1 +# fuse fails to build with GOLD linker + strip_gold + cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ From 2bc9abf44c04b3dc47fb411105a9d01d1884dcd4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 06:46:10 +0100 Subject: [PATCH 835/850] dialog: fails to build with GOLD linker Signed-off-by: Stephan Raue --- packages/tools/dialog/build | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/tools/dialog/build b/packages/tools/dialog/build index eb4fecf1a8..4918c7a383 100755 --- a/packages/tools/dialog/build +++ b/packages/tools/dialog/build @@ -4,6 +4,9 @@ cd $PKG_BUILD +# dialog fails to build with GOLD linker + strip_gold + ac_cv_path_NCURSES_CONFIG="$ROOT/$TOOLCHAIN/bin/ncurses-config" \ ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ From b1137a9c4380e44899b19b234f375f526403b94a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 07:45:10 +0100 Subject: [PATCH 836/850] gcc: remove old patches Signed-off-by: Stephan Raue --- .../gcc/patches/gcc-4.5.1-bfd_and_gold.patch | 666 ------------------ ...-4.5.1-disable_multilib_i386_linux64.patch | 25 - .../patches/gcc-4.5.1-dynamic_linker.patch | 132 ---- .../gcc-4.5.1-libstdc++-v3_config.patch | 95 --- .../gcc/patches/gcc-4.5.1-ppl-0.11-0.1.patch | 24 - 5 files changed, 942 deletions(-) delete mode 100644 packages/toolchain/lang/gcc/patches/gcc-4.5.1-bfd_and_gold.patch delete mode 100644 packages/toolchain/lang/gcc/patches/gcc-4.5.1-disable_multilib_i386_linux64.patch delete mode 100644 packages/toolchain/lang/gcc/patches/gcc-4.5.1-dynamic_linker.patch delete mode 100644 packages/toolchain/lang/gcc/patches/gcc-4.5.1-libstdc++-v3_config.patch delete mode 100644 packages/toolchain/lang/gcc/patches/gcc-4.5.1-ppl-0.11-0.1.patch diff --git a/packages/toolchain/lang/gcc/patches/gcc-4.5.1-bfd_and_gold.patch b/packages/toolchain/lang/gcc/patches/gcc-4.5.1-bfd_and_gold.patch deleted file mode 100644 index a279019b5a..0000000000 --- a/packages/toolchain/lang/gcc/patches/gcc-4.5.1-bfd_and_gold.patch +++ /dev/null @@ -1,666 +0,0 @@ -diff -Naur gcc-4.5-20100624-old/configure gcc-4.5-20100624-new/configure -diff -Naur gcc-4.5-20100624-old/configure.ac gcc-4.5-20100624-new/configure.ac ---- gcc-4.5-20100624-old/configure.ac 2010-06-24 14:06:37.000000000 -0700 -+++ gcc-4.5-20100624-new/configure.ac 2010-06-25 07:18:18.000000000 -0700 -@@ -174,7 +174,7 @@ - # know that we are building the simulator. - # binutils, gas and ld appear in that order because it makes sense to run - # "make check" in that particular order. --# If --enable-gold is used, "gold" will replace "ld". -+# If --enable-gold is used, "gold" may replace "ld". - host_tools="texinfo byacc flex bison binutils gas ld fixincludes gcc cgen sid sim gdb make patch prms send-pr gprof etc expect dejagnu ash bash bzip2 m4 autoconf automake libtool diff rcs fileutils shellutils time textutils wdiff find uudecode hello tar gzip indent recode release sed utils guile perl gawk findutils gettext zip fastjar gnattools" - - # libgcj represents the runtime libraries only used by gcj. -@@ -315,37 +315,57 @@ - esac - - # Handle --enable-gold. -+# --enable-gold Build only gold -+# --disable-gold [default] Build only ld -+# --enable-gold=both Build both gold and ld, ld is default -+# --enable-gold=both/ld Same -+# --enable-gold=both/gold Build both gold and ld, gold is default, ld is renamed ld.bfd - - AC_ARG_ENABLE(gold, --[ --enable-gold use gold instead of ld], -+[ --enable-gold[[=ARG]] build gold [[ARG={both}[[/{gold,ld}]]]]], - ENABLE_GOLD=$enableval, - ENABLE_GOLD=no) --if test "${ENABLE_GOLD}" = "yes"; then -- # Check for ELF target. -- is_elf=no -- case "${target}" in -- *-*-elf* | *-*-sysv4* | *-*-unixware* | *-*-eabi* | hppa*64*-*-hpux* \ -- | *-*-linux* | frv-*-uclinux* | *-*-irix5* | *-*-irix6* \ -- | *-*-netbsd* | *-*-openbsd* | *-*-freebsd* | *-*-solaris2* | *-*-nto*) -+ case "${ENABLE_GOLD}" in -+ yes|both|both/gold|both/ld) -+ # Check for ELF target. -+ is_elf=no -+ case "${target}" in -+ *-*-elf* | *-*-sysv4* | *-*-unixware* | *-*-eabi* | hppa*64*-*-hpux* \ -+ | *-*-linux* | frv-*-uclinux* | *-*-irix5* | *-*-irix6* \ -+ | *-*-netbsd* | *-*-openbsd* | *-*-freebsd* | *-*-solaris2* | *-*-nto*) -+ case "${target}" in -+ *-*-linux*aout* | *-*-linux*oldld*) -+ ;; -+ *) -+ is_elf=yes -+ ;; -+ esac -+ esac -+ -+ if test "$is_elf" = "yes"; then -+ # Check for target supported by gold. - case "${target}" in -- *-*-linux*aout* | *-*-linux*oldld*) -- ;; -- *) -- is_elf=yes -+ i?86-*-* | x86_64-*-* | sparc*-*-* | powerpc*-*-* | arm*-*-*) -+ case "${ENABLE_GOLD}" in -+ both*) -+ configdirs="$configdirs gold" -+ ;; -+ *) -+ configdirs="`echo " ${configdirs} " | sed -e 's/ ld / gold /'`" -+ ;; -+ esac -+ ENABLE_GOLD=yes - ;; - esac -+ fi -+ ;; -+ no) -+ ;; -+ *) -+ AC_MSG_ERROR([invalid --enable-gold argument]) -+ ;; - esac - -- if test "$is_elf" = "yes"; then -- # Check for target supported by gold. -- case "${target}" in -- i?86-*-* | x86_64-*-* | sparc*-*-* | powerpc*-*-* | arm*-*-*) -- configdirs="`echo " ${configdirs} " | sed -e 's/ ld / gold /'`" -- ;; -- esac -- fi --fi -- - # Configure extra directories which are host specific - - case "${host}" in -diff -Naur gcc-4.5-20100624-old/gcc/collect2.c gcc-4.5-20100624-new/gcc/collect2.c ---- gcc-4.5-20100624-old/gcc/collect2.c 2010-06-24 14:06:37.000000000 -0700 -+++ gcc-4.5-20100624-new/gcc/collect2.c 2010-06-25 07:18:18.000000000 -0700 -@@ -1114,17 +1114,19 @@ - int - main (int argc, char **argv) - { -- static const char *const ld_suffix = "ld"; -- static const char *const plugin_ld_suffix = PLUGIN_LD; -- static const char *const real_ld_suffix = "real-ld"; -+ static const char *const ld_suffix = "ld"; -+ static const char *const gold_suffix = "gold"; -+ static const char *const bfd_ld_suffix = "ld.bfd"; -+ static const char *const plugin_ld_suffix = PLUGIN_LD; -+ static const char *const real_ld_suffix = "real-ld"; - static const char *const collect_ld_suffix = "collect-ld"; -- static const char *const nm_suffix = "nm"; -- static const char *const gnm_suffix = "gnm"; -+ static const char *const nm_suffix = "nm"; -+ static const char *const gnm_suffix = "gnm"; - #ifdef LDD_SUFFIX -- static const char *const ldd_suffix = LDD_SUFFIX; -+ static const char *const ldd_suffix = LDD_SUFFIX; - #endif -- static const char *const strip_suffix = "strip"; -- static const char *const gstrip_suffix = "gstrip"; -+ static const char *const strip_suffix = "strip"; -+ static const char *const gstrip_suffix = "gstrip"; - - #ifdef CROSS_DIRECTORY_STRUCTURE - /* If we look for a program in the compiler directories, we just use -@@ -1134,6 +1136,10 @@ - - const char *const full_ld_suffix = - concat(target_machine, "-", ld_suffix, NULL); -+ const char *const full_gold_suffix = -+ concat (target_machine, "-", gold_suffix, NULL); -+ const char *const full_bfd_ld_suffix = -+ concat (target_machine, "-", bfd_ld_suffix, NULL); - const char *const full_plugin_ld_suffix = - concat(target_machine, "-", plugin_ld_suffix, NULL); - const char *const full_nm_suffix = -@@ -1149,15 +1155,17 @@ - const char *const full_gstrip_suffix = - concat (target_machine, "-", gstrip_suffix, NULL); - #else -- const char *const full_ld_suffix = ld_suffix; -+ const char *const full_ld_suffix = ld_suffix; -+ const char *const full_gold_suffix = gold_suffix; -+ const char *const full_bfd_ld_suffix = bfd_ld_suffix; - const char *const full_plugin_ld_suffix = plugin_ld_suffix; -- const char *const full_nm_suffix = nm_suffix; -- const char *const full_gnm_suffix = gnm_suffix; -+ const char *const full_nm_suffix = nm_suffix; -+ const char *const full_gnm_suffix = gnm_suffix; - #ifdef LDD_SUFFIX -- const char *const full_ldd_suffix = ldd_suffix; -+ const char *const full_ldd_suffix = ldd_suffix; - #endif -- const char *const full_strip_suffix = strip_suffix; -- const char *const full_gstrip_suffix = gstrip_suffix; -+ const char *const full_strip_suffix = strip_suffix; -+ const char *const full_gstrip_suffix = gstrip_suffix; - #endif /* CROSS_DIRECTORY_STRUCTURE */ - - const char *arg; -@@ -1171,7 +1179,13 @@ - const char **c_ptr; - char **ld1_argv; - const char **ld1; -- bool use_plugin = false; -+ enum linker_select -+ { -+ DFLT_LINKER, -+ PLUGIN_LINKER, -+ GOLD_LINKER, -+ BFD_LINKER -+ } selected_linker = DFLT_LINKER; - - /* The kinds of symbols we will have to consider when scanning the - outcome of a first pass link. This is ALL to start with, then might -@@ -1188,7 +1202,6 @@ - int first_file; - int num_c_args; - char **old_argv; -- - bool use_verbose = false; - - old_argv = argv; -@@ -1244,22 +1257,29 @@ - { - if (! strcmp (argv[i], "-debug")) - debug = 1; -- else if (! strcmp (argv[i], "-flto") && ! use_plugin) -+ else if (! strcmp (argv[i], "-flto") -+ && selected_linker != PLUGIN_LINKER) - { - use_verbose = true; - lto_mode = LTO_MODE_LTO; - } -- else if (! strcmp (argv[i], "-fwhopr") && ! use_plugin) -+ else if (! strcmp (argv[i], "-fwhopr") -+ && selected_linker != PLUGIN_LINKER) - { - use_verbose = true; - lto_mode = LTO_MODE_WHOPR; - } - else if (! strcmp (argv[i], "-plugin")) - { -- use_plugin = true; -+ selected_linker = PLUGIN_LINKER; - use_verbose = true; - lto_mode = LTO_MODE_NONE; - } -+ else if (! strcmp (argv[i], "-use-gold")) -+ selected_linker = GOLD_LINKER; -+ else if (! strcmp (argv[i], "-use-ld")) -+ selected_linker = BFD_LINKER; -+ - #ifdef COLLECT_EXPORT_LIST - /* since -brtl, -bexport, -b64 are not position dependent - also check for them here */ -@@ -1339,35 +1359,108 @@ - /* Try to discover a valid linker/nm/strip to use. */ - - /* Maybe we know the right file to use (if not cross). */ -- ld_file_name = 0; -+ ld_file_name = NULL; - #ifdef DEFAULT_LINKER - if (access (DEFAULT_LINKER, X_OK) == 0) - ld_file_name = DEFAULT_LINKER; -- if (ld_file_name == 0) -+ if (ld_file_name == NULL) - #endif - #ifdef REAL_LD_FILE_NAME - ld_file_name = find_a_file (&path, REAL_LD_FILE_NAME); -- if (ld_file_name == 0) -+ if (ld_file_name == NULL) - #endif - /* Search the (target-specific) compiler dirs for ld'. */ - ld_file_name = find_a_file (&cpath, real_ld_suffix); - /* Likewise for `collect-ld'. */ -- if (ld_file_name == 0) -+ if (ld_file_name == NULL) - ld_file_name = find_a_file (&cpath, collect_ld_suffix); - /* Search the compiler directories for `ld'. We have protection against - recursive calls in find_a_file. */ -- if (ld_file_name == 0) -- ld_file_name = find_a_file (&cpath, -- use_plugin -- ? plugin_ld_suffix -- : ld_suffix); -+ if (ld_file_name == NULL) -+ switch (selected_linker) -+ { -+ default: -+ case DFLT_LINKER: -+ ld_file_name = find_a_file (&cpath, ld_suffix); -+ break; -+ case PLUGIN_LINKER: -+ ld_file_name = find_a_file (&cpath, plugin_ld_suffix); -+ break; -+ case GOLD_LINKER: -+ ld_file_name = find_a_file (&cpath, gold_suffix); -+ break; -+ case BFD_LINKER: -+ ld_file_name = find_a_file (&cpath, bfd_ld_suffix); -+ break; -+ } - /* Search the ordinary system bin directories - for `ld' (if native linking) or `TARGET-ld' (if cross). */ -- if (ld_file_name == 0) -- ld_file_name = find_a_file (&path, -- use_plugin -- ? full_plugin_ld_suffix -- : full_ld_suffix); -+ if (ld_file_name == NULL) -+ switch (selected_linker) -+ { -+ default: -+ case DFLT_LINKER: -+ ld_file_name = find_a_file (&path, full_ld_suffix); -+ break; -+ case PLUGIN_LINKER: -+ ld_file_name = find_a_file (&path, full_plugin_ld_suffix); -+ break; -+ case GOLD_LINKER: -+ ld_file_name = find_a_file (&path, full_gold_suffix); -+ break; -+ case BFD_LINKER: -+ ld_file_name = find_a_file (&path, full_bfd_ld_suffix); -+ break; -+ } -+ /* If we failed to find a plugin-capable linker, try the ordinary one. */ -+ if (ld_file_name == NULL && selected_linker == PLUGIN_LINKER) -+ ld_file_name = find_a_file (&cpath, ld_suffix); -+ -+ if ((vflag || debug) && ld_file_name == NULL) -+ { -+ struct prefix_list * p; -+ const char * s; -+ -+ notice ("collect2: warning: unable to find linker.\n"); -+ -+#ifdef DEFAULT_LINKER -+ notice (" Searched for this absolute executable:\n"); -+ notice (" %s\n", DEFAULT_LINKER); -+#endif -+ -+ notice (" Searched in these paths:\n"); -+ for (p = cpath.plist; p != NULL; p = p->next) -+ notice (" %s\n", p->prefix); -+ notice (" For these executables:\n"); -+ notice (" %s\n", real_ld_suffix); -+ notice (" %s\n", collect_ld_suffix); -+ switch (selected_linker) -+ { -+ default: -+ case DFLT_LINKER: s = ld_suffix; break; -+ case PLUGIN_LINKER: s = plugin_ld_suffix; break; -+ case GOLD_LINKER: s = gold_suffix; break; -+ case BFD_LINKER: s = bfd_ld_suffix; break; -+ } -+ notice (" %s\n", s); -+ -+ notice (" And searched in these paths:\n"); -+ for (p = path.plist; p != NULL; p = p->next) -+ notice (" %s\n", p->prefix); -+ notice (" For these executables:\n"); -+#ifdef REAL_LD_FILE_NAME -+ notice (" %s\n", REAL_LD_FILE_NAME); -+#endif -+ switch (selected_linker) -+ { -+ default: -+ case DFLT_LINKER: s = full_ld_suffix; break; -+ case PLUGIN_LINKER: s = full_plugin_ld_suffix; break; -+ case GOLD_LINKER: s = full_gold_suffix; break; -+ case BFD_LINKER: s = full_bfd_ld_suffix; break; -+ } -+ notice (" %s\n", s); -+ } - - #ifdef REAL_NM_FILE_NAME - nm_file_name = find_a_file (&path, REAL_NM_FILE_NAME); -diff -Naur gcc-4.5-20100624-old/gcc/common.opt gcc-4.5-20100624-new/gcc/common.opt ---- gcc-4.5-20100624-old/gcc/common.opt 2010-03-17 20:01:09.000000000 -0700 -+++ gcc-4.5-20100624-new/gcc/common.opt 2010-06-25 07:18:18.000000000 -0700 -@@ -1401,6 +1401,9 @@ - Common Report Var(flag_unwind_tables) Optimization - Just generate unwind tables for exception handling - -+fuse-ld= -+Common Joined Undocumented -+ - fuse-linker-plugin - Common Undocumented - -diff -Naur gcc-4.5-20100624-old/gcc/configure gcc-4.5-20100624-new/gcc/configure ---- gcc-4.5-20100624-old/gcc/configure 2010-06-14 03:38:18.000000000 -0700 -+++ gcc-4.5-20100624-new/gcc/configure 2010-06-25 07:18:18.000000000 -0700 -@@ -684,6 +684,7 @@ - gcc_cv_objdump - ORIGINAL_NM_FOR_TARGET - gcc_cv_nm -+ORIGINAL_GOLD_FOR_TARGET - ORIGINAL_LD_FOR_TARGET - ORIGINAL_PLUGIN_LD_FOR_TARGET - gcc_cv_ld -@@ -17108,7 +17109,7 @@ - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF --#line 17111 "configure" -+#line 17112 "configure" - #include "confdefs.h" - - #if HAVE_DLFCN_H -@@ -17214,7 +17215,7 @@ - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF --#line 17217 "configure" -+#line 17218 "configure" - #include "confdefs.h" - - #if HAVE_DLFCN_H -@@ -20662,6 +20663,21 @@ - fi - fi - -+gcc_cv_ld_gold_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/gold -+ -+if test "${gcc_cv_gold+set}" = set; then : -+ -+else -+ -+if test -f $gcc_cv_ld_gold_srcdir/configure.ac \ -+ && test -f ../gold/Makefile \ -+ && test x$build = x$host; then -+ gcc_cv_gold=../gold/ld-new$build_exeext -+else -+ gcc_cv_gold='' -+fi -+fi -+ - ORIGINAL_PLUGIN_LD_FOR_TARGET=$gcc_cv_ld - PLUGIN_LD=`basename $gcc_cv_ld` - -@@ -20688,6 +20704,9 @@ - ;; - esac - -+ORIGINAL_GOLD_FOR_TARGET=$gcc_cv_gold -+ -+ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking what linker to use" >&5 - $as_echo_n "checking what linker to use... " >&6; } - if test "$gcc_cv_ld" = ../ld/ld-new$build_exeext; then -diff -Naur gcc-4.5-20100624-old/gcc/configure.ac gcc-4.5-20100624-new/gcc/configure.ac ---- gcc-4.5-20100624-old/gcc/configure.ac 2010-06-14 03:38:18.000000000 -0700 -+++ gcc-4.5-20100624-new/gcc/configure.ac 2010-06-25 07:18:18.000000000 -0700 -@@ -1947,6 +1947,17 @@ - AC_PATH_PROG(gcc_cv_ld, $LD_FOR_TARGET) - fi]) - -+gcc_cv_ld_gold_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/gold -+ -+AS_VAR_SET_IF(gcc_cv_gold,, [ -+if test -f $gcc_cv_ld_gold_srcdir/configure.ac \ -+ && test -f ../gold/Makefile \ -+ && test x$build = x$host; then -+ gcc_cv_gold=../gold/ld-new$build_exeext -+else -+ gcc_cv_gold='' -+fi]) -+ - ORIGINAL_PLUGIN_LD_FOR_TARGET=$gcc_cv_ld - PLUGIN_LD=`basename $gcc_cv_ld` - AC_ARG_WITH(plugin-ld, -@@ -1965,6 +1976,9 @@ - *) AC_CONFIG_FILES(collect-ld:exec-tool.in, [chmod +x collect-ld]) ;; - esac - -+ORIGINAL_GOLD_FOR_TARGET=$gcc_cv_gold -+AC_SUBST(ORIGINAL_GOLD_FOR_TARGET) -+ - AC_MSG_CHECKING(what linker to use) - if test "$gcc_cv_ld" = ../ld/ld-new$build_exeext; then - # Single tree build which includes ld. We want to prefer it -diff -Naur gcc-4.5-20100624-old/gcc/doc/invoke.texi gcc-4.5-20100624-new/gcc/doc/invoke.texi ---- gcc-4.5-20100624-old/gcc/doc/invoke.texi 2010-04-06 07:02:22.000000000 -0700 -+++ gcc-4.5-20100624-new/gcc/doc/invoke.texi 2010-06-25 07:18:18.000000000 -0700 -@@ -390,7 +390,7 @@ - -funit-at-a-time -funroll-all-loops -funroll-loops @gol - -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops @gol - -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb @gol ---fwhole-program -fwhopr -fwpa -fuse-linker-plugin @gol -+-fwhole-program -fwhopr -fwpa -fuse-linker-plugin -fuse-ld @gol - --param @var{name}=@var{value} - -O -O0 -O1 -O2 -O3 -Os} - -@@ -7415,6 +7415,16 @@ - - Disabled by default. - -+@item -fuse-ld=gold -+Use the @command{gold} linker instead of the default linker. -+This option is only necessary if GCC has been configured with -+@option{--enable-gold=both} or @option{--enable-gold=both/ld}. -+ -+@item -fuse-ld=bfd -+Use the @command{ld.bfd} linker instead of the default linker. -+This option is only necessary if GCC has been configured with -+@option{--enable-gold=both/gold}. -+ - @item -fcprop-registers - @opindex fcprop-registers - After register allocation and post-register allocation instruction splitting, -diff -Naur gcc-4.5-20100624-old/gcc/exec-tool.in gcc-4.5-20100624-new/gcc/exec-tool.in ---- gcc-4.5-20100624-old/gcc/exec-tool.in 2009-11-08 14:36:51.000000000 -0800 -+++ gcc-4.5-20100624-new/gcc/exec-tool.in 2010-06-25 07:18:18.000000000 -0700 -@@ -1,6 +1,6 @@ - #! /bin/sh - --# Copyright (C) 2007, 2008 Free Software Foundation, Inc. -+# Copyright (C) 2007, 2008, 2010 Free Software Foundation, Inc. - # This file is part of GCC. - - # GCC is free software; you can redistribute it and/or modify -@@ -21,11 +21,13 @@ - - ORIGINAL_AS_FOR_TARGET="@ORIGINAL_AS_FOR_TARGET@" - ORIGINAL_LD_FOR_TARGET="@ORIGINAL_LD_FOR_TARGET@" -+ORIGINAL_GOLD_FOR_TARGET="@ORIGINAL_GOLD_FOR_TARGET@" - ORIGINAL_PLUGIN_LD_FOR_TARGET="@ORIGINAL_PLUGIN_LD_FOR_TARGET@" - ORIGINAL_NM_FOR_TARGET="@ORIGINAL_NM_FOR_TARGET@" - exeext=@host_exeext@ - fast_install=@enable_fast_install@ - objdir=@objdir@ -+version="1.1" - - invoked=`basename "$0"` - case "$invoked" in -@@ -34,54 +36,110 @@ - prog=as-new$exeext - dir=gas - ;; -- collect-ld) -- # when using a linker plugin, gcc will always pass '-plugin' as the -- # first option to the linker. -- if test x"$1" = "x-plugin"; then -- original=$ORIGINAL_PLUGIN_LD_FOR_TARGET -- else -- original=$ORIGINAL_LD_FOR_TARGET -- fi -- prog=ld-new$exeext -- dir=ld -- ;; - nm) - original=$ORIGINAL_NM_FOR_TARGET - prog=nm-new$exeext - dir=binutils - ;; -+ collect-ld) -+ prog=ld-new$exeext -+ # Look for the a command line option -+ # specifying the linker to be used. -+ case " $* " in -+ *\ -use-gold\ *) -+ original=$ORIGINAL_GOLD_FOR_TARGET -+ dir=gold -+ ;; -+ *\ -use-ld\ * | *\ -use-ld.bfd\ *) -+ original=$ORIGINAL_LD_FOR_TARGET -+ dir=ld -+ ;; -+ *\ -plugin\ *) -+ original=$ORIGINAL_PLUGIN_LD_FOR_TARGET -+ dir=ld -+ ;; -+ *) -+ original=$ORIGINAL_LD_FOR_TARGET -+ dir=ld -+ ;; -+ esac -+ -+ # If the selected linker has not been configured then -+ # try using the others, in the order PLUGIN-LD, LD, GOLD. -+ if test x"$original" = x; then -+ if test x"$ORIGINAL_PLUGIN_LD_FOR_TARGET" != x; then -+ original=$ORIGINAL_PLUGIN_LD_FOR_TARGET -+ dir=ld -+ elif test x"$ORIGINAL_LD_FOR_TARGET" != x; then -+ original=$ORIGINAL_LD_FOR_TARGET -+ dir=ld -+ elif test x"$ORIGINAL_GOLD_FOR_TARGET" != x; then -+ original=$ORIGINAL_GOLD_FOR_TARGET -+ dir=gold -+ # Otherwise do nothing - the case statement below -+ # will issue an error message for us. -+ fi -+ fi -+ ;; - esac - - case "$original" in - ../*) -- # compute absolute path of the location of this script -+ # Compute absolute path to the location of this script. - tdir=`dirname "$0"` - scriptdir=`cd "$tdir" && pwd` - - if test -x $scriptdir/../$dir/$prog; then -- test "$fast_install" = yes || exec $scriptdir/../$dir/$prog ${1+"$@"} -- -- # if libtool did everything it needs to do, there's a fast path -- lt_prog=$scriptdir/../$dir/$objdir/lt-$prog -- test -x $lt_prog && exec $lt_prog ${1+"$@"} -- -- # libtool has not relinked ld-new yet, but we cannot just use the -- # previous stage (because then the relinking would just never happen!). -- # So we take extra care to use prev-ld/ld-new *on recursive calls*. -- test x"$LT_RCU" = x"1" && exec $scriptdir/../prev-$dir/$prog ${1+"$@"} -- -- LT_RCU=1; export LT_RCU -- $scriptdir/../$dir/$prog ${1+"$@"} -- result=$? -- exit $result -- -+ if test "$fast_install" = yes; then -+ # If libtool did everything it needs to do, there's a fast path. -+ lt_prog=$scriptdir/../$dir/$objdir/lt-$prog -+ -+ if test -x $lt_prog; then -+ original=$lt_prog -+ else -+ # Libtool has not relinked ld-new yet, but we cannot just use the -+ # previous stage (because then the relinking would just never happen!). -+ # So we take extra care to use prev-ld/ld-new *on recursive calls*. -+ if test x"$LT_RCU" = x"1"; then -+ original=$scriptdir/../prev-$dir/$prog -+ else -+ LT_RCU=1; export LT_RCU -+ case " $* " in -+ *\ -v\ *) -+ echo "$invoked $version" -+ echo $scriptdir/../$dir/$prog $* -+ ;; -+ esac -+ $scriptdir/../$dir/$prog ${1+"$@"} -+ result=$? -+ exit $result -+ fi -+ fi -+ else -+ original=$scriptdir/../$dir/$prog -+ fi - else -- exec $scriptdir/../prev-$dir/$prog ${1+"$@"} -+ original=$scriptdir/../prev-$dir/$prog - fi - ;; -- *) -- exec "$original" ${1+"$@"} -+ "") -+ echo "$invoked: executable not configured" -+ exit 1 - ;; - esac - -+# If -v has been used then display our version number -+# and then echo the command we are about to invoke. -+case " $* " in -+ *\ -v\ *) -+ echo "$invoked $version" -+ echo $original $* -+ ;; -+esac - -+if test -x $original; then -+ exec "$original" ${1+"$@"} -+else -+ echo "$invoked: unable to locate executable: $original" -+ exit 1 -+fi -diff -Naur gcc-4.5-20100624-old/gcc/gcc.c gcc-4.5-20100624-new/gcc/gcc.c ---- gcc-4.5-20100624-old/gcc/gcc.c 2010-04-18 10:46:08.000000000 -0700 -+++ gcc-4.5-20100624-new/gcc/gcc.c 2010-06-25 07:18:18.000000000 -0700 -@@ -790,6 +790,9 @@ - %{v:-plugin-opt=-v} \ - } \ - %{flto} %{fwhopr} %l " LINK_PIE_SPEC \ -+ "%{fuse-ld=gold:%{fuse-ld=bfd:%e-fuse-ld=gold and -fuse-ld=bfd may not be used together}} \ -+ %{fuse-ld=gold:-use-gold} \ -+ %{fuse-ld=bfd:-use-ld}" \ - "%X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r}\ - %{s} %{t} %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}\ - %{static:} %{L*} %(mfwrap) %(link_libgcc) %o\ -diff -Naur gcc-4.5-20100624-old/gcc/opts.c gcc-4.5-20100624-new/gcc/opts.c ---- gcc-4.5-20100624-old/gcc/opts.c 2010-05-17 03:13:28.000000000 -0700 -+++ gcc-4.5-20100624-new/gcc/opts.c 2010-06-25 07:18:18.000000000 -0700 -@@ -2138,8 +2138,9 @@ - /* These are no-ops, preserved for backward compatibility. */ - break; - -+ case OPT_fuse_ld_: - case OPT_fuse_linker_plugin: -- /* No-op. Used by the driver and passed to us because it starts with f.*/ -+ /* No-op. Used by the driver and passed to us because it starts with f. */ - break; - - default: diff --git a/packages/toolchain/lang/gcc/patches/gcc-4.5.1-disable_multilib_i386_linux64.patch b/packages/toolchain/lang/gcc/patches/gcc-4.5.1-disable_multilib_i386_linux64.patch deleted file mode 100644 index a616fa3ec2..0000000000 --- a/packages/toolchain/lang/gcc/patches/gcc-4.5.1-disable_multilib_i386_linux64.patch +++ /dev/null @@ -1,25 +0,0 @@ -diff -Naur gcc-4.5-20100610-old/gcc/config/i386/t-linux64 gcc-4.5-20100610-new/gcc/config/i386/t-linux64 ---- gcc-4.5-20100610-old/gcc/config/i386/t-linux64 2010-06-11 09:31:52.000000000 -0700 -+++ gcc-4.5-20100610-new/gcc/config/i386/t-linux64 2010-06-11 09:39:52.000000000 -0700 -@@ -23,13 +23,13 @@ - # it doesn't tell anything about the 32bit libraries on those systems. Set - # MULTILIB_OSDIRNAMES according to what is found on the target. - --MULTILIB_OPTIONS = m64/m32 --MULTILIB_DIRNAMES = 64 32 --MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib) -+#MULTILIB_OPTIONS = m64/m32 -+#MULTILIB_DIRNAMES = 64 32 -+#MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib) - --LIBGCC = stmp-multilib --INSTALL_LIBGCC = install-multilib -+#LIBGCC = stmp-multilib -+#INSTALL_LIBGCC = install-multilib - --EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o \ -- crtbeginT.o crtprec32.o crtprec64.o crtprec80.o \ -- crtfastmath.o -+#EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o \ -+# crtbeginT.o crtprec32.o crtprec64.o crtprec80.o \ -+# crtfastmath.o diff --git a/packages/toolchain/lang/gcc/patches/gcc-4.5.1-dynamic_linker.patch b/packages/toolchain/lang/gcc/patches/gcc-4.5.1-dynamic_linker.patch deleted file mode 100644 index 05925a915a..0000000000 --- a/packages/toolchain/lang/gcc/patches/gcc-4.5.1-dynamic_linker.patch +++ /dev/null @@ -1,132 +0,0 @@ -diff -Naur gcc-4.5-20100610-old/gcc/config/i386/linux64.h gcc-4.5-20100610-new/gcc/config/i386/linux64.h ---- gcc-4.5-20100610-old/gcc/config/i386/linux64.h 2010-06-11 09:40:14.000000000 -0700 -+++ gcc-4.5-20100610-new/gcc/config/i386/linux64.h 2010-06-11 09:41:13.000000000 -0700 -@@ -59,7 +59,7 @@ - done. */ - - #define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2" --#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux-x86-64.so.2" -+#define GLIBC_DYNAMIC_LINKER64 "/lib/ld-linux-x86-64.so.2" - - #if TARGET_64BIT_DEFAULT - #define SPEC_32 "m32" -diff -Naur gcc-4.5-20100610-old/gcc/config/mips/iris6.h gcc-4.5-20100610-new/gcc/config/mips/iris6.h ---- gcc-4.5-20100610-old/gcc/config/mips/iris6.h 2010-06-11 09:40:14.000000000 -0700 -+++ gcc-4.5-20100610-new/gcc/config/mips/iris6.h 2010-06-11 09:41:13.000000000 -0700 -@@ -88,27 +88,27 @@ - %{mabi=32:%{pg:gcrt1.o%s} \ - %{!pg:%{p:mcrt1.o%s libprof1.a%s}%{!p:crt1.o%s}}} \ - %{mabi=n32: \ -- %{mips4:%{pg:/usr/lib32/mips4/gcrt1.o%s} \ -- %{!pg:%{p:/usr/lib32/mips4/mcrt1.o%s /usr/lib32/mips4/libprof1.a%s} \ -- %{!p:/usr/lib32/mips4/crt1.o%s}}} \ -- %{!mips4:%{pg:/usr/lib32/mips3/gcrt1.o%s} \ -- %{!pg:%{p:/usr/lib32/mips3/mcrt1.o%s /usr/lib32/mips3/libprof1.a%s} \ -- %{!p:/usr/lib32/mips3/crt1.o%s}}}} \ -+ %{mips4:%{pg:/usr/lib/mips4/gcrt1.o%s} \ -+ %{!pg:%{p:/usr/lib/mips4/mcrt1.o%s /usr/lib/mips4/libprof1.a%s} \ -+ %{!p:/usr/lib/mips4/crt1.o%s}}} \ -+ %{!mips4:%{pg:/usr/lib/mips3/gcrt1.o%s} \ -+ %{!pg:%{p:/usr/lib/mips3/mcrt1.o%s /usr/lib/mips3/libprof1.a%s} \ -+ %{!p:/usr/lib/mips3/crt1.o%s}}}} \ - %{mabi=64: \ -- %{mips4:%{pg:/usr/lib64/mips4/gcrt1.o} \ -- %{!pg:%{p:/usr/lib64/mips4/mcrt1.o /usr/lib64/mips4/libprof1.a} \ -- %{!p:/usr/lib64/mips4/crt1.o}}} \ -- %{!mips4:%{pg:/usr/lib64/mips3/gcrt1.o} \ -- %{!pg:%{p:/usr/lib64/mips3/mcrt1.o /usr/lib64/mips3/libprof1.a} \ -- %{!p:/usr/lib64/mips3/crt1.o}}}}} \ -+ %{mips4:%{pg:/usr/lib/mips4/gcrt1.o} \ -+ %{!pg:%{p:/usr/lib/mips4/mcrt1.o /usr/lib/mips4/libprof1.a} \ -+ %{!p:/usr/lib/mips4/crt1.o}}} \ -+ %{!mips4:%{pg:/usr/lib/mips3/gcrt1.o} \ -+ %{!pg:%{p:/usr/lib/mips3/mcrt1.o /usr/lib/mips3/libprof1.a} \ -+ %{!p:/usr/lib/mips3/crt1.o}}}}} \ - irix-crti.o%s crtbegin.o%s" - - #undef LIB_SPEC - #define LIB_SPEC \ -- "%{mabi=n32: %{mips4:-L/usr/lib32/mips4} %{!mips4:-L/usr/lib32/mips3} \ -- -L/usr/lib32} \ -- %{mabi=64: %{mips4:-L/usr/lib64/mips4} %{!mips4:-L/usr/lib64/mips3} \ -- -L/usr/lib64} \ -+ "%{mabi=n32: %{mips4:-L/usr/lib/mips4} %{!mips4:-L/usr/lib/mips3} \ -+ -L/usr/lib} \ -+ %{mabi=64: %{mips4:-L/usr/lib/mips4} %{!mips4:-L/usr/lib/mips3} \ -+ -L/usr/lib} \ - %{!shared:" \ - SUBTARGET_DONT_WARN_UNUSED_SPEC \ - " %{pthread:-lpthread} %{p:libprof1.a%s}%{pg:libprof1.a%s} -lc " \ -@@ -125,10 +125,10 @@ - "crtend.o%s irix-crtn.o%s \ - %{!shared: \ - %{mabi=32:crtn.o%s}\ -- %{mabi=n32:%{mips4:/usr/lib32/mips4/crtn.o%s}\ -- %{!mips4:/usr/lib32/mips3/crtn.o%s}}\ -- %{mabi=64:%{mips4:/usr/lib64/mips4/crtn.o%s}\ -- %{!mips4:/usr/lib64/mips3/crtn.o%s}}}" -+ %{mabi=n32:%{mips4:/usr/lib/mips4/crtn.o%s}\ -+ %{!mips4:/usr/lib/mips3/crtn.o%s}}\ -+ %{mabi=64:%{mips4:/usr/lib/mips4/crtn.o%s}\ -+ %{!mips4:/usr/lib/mips3/crtn.o%s}}}" - - #define MIPS_TFMODE_FORMAT mips_extended_format - -diff -Naur gcc-4.5-20100610-old/gcc/config/mips/linux64.h gcc-4.5-20100610-new/gcc/config/mips/linux64.h ---- gcc-4.5-20100610-old/gcc/config/mips/linux64.h 2010-06-11 09:40:14.000000000 -0700 -+++ gcc-4.5-20100610-new/gcc/config/mips/linux64.h 2010-06-11 09:41:13.000000000 -0700 -@@ -36,9 +36,9 @@ - %{profile:-lc_p} %{!profile:-lc}}" - - #define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1" --#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld.so.1" --#define GLIBC_DYNAMIC_LINKERN32 "/lib32/ld.so.1" --#define UCLIBC_DYNAMIC_LINKERN32 "/lib32/ld-uClibc.so.0" -+#define GLIBC_DYNAMIC_LINKER64 "/lib/ld.so.1" -+#define GLIBC_DYNAMIC_LINKERN32 "/lib/ld.so.1" -+#define UCLIBC_DYNAMIC_LINKERN32 "/lib/ld-uClibc.so.0" - #define LINUX_DYNAMIC_LINKERN32 \ - CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKERN32, UCLIBC_DYNAMIC_LINKERN32) - -diff -Naur gcc-4.5-20100610-old/gcc/config/rs6000/linux64.h gcc-4.5-20100610-new/gcc/config/rs6000/linux64.h ---- gcc-4.5-20100610-old/gcc/config/rs6000/linux64.h 2010-06-11 09:40:14.000000000 -0700 -+++ gcc-4.5-20100610-new/gcc/config/rs6000/linux64.h 2010-06-11 09:41:13.000000000 -0700 -@@ -349,7 +349,7 @@ - #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)" - - #define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1" --#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld64.so.1" -+#define GLIBC_DYNAMIC_LINKER64 "/lib/ld64.so.1" - #define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0" - #define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0" - #if UCLIBC_DEFAULT -diff -Naur gcc-4.5-20100610-old/gcc/config/sparc/linux64.h gcc-4.5-20100610-new/gcc/config/sparc/linux64.h ---- gcc-4.5-20100610-old/gcc/config/sparc/linux64.h 2010-06-11 09:40:14.000000000 -0700 -+++ gcc-4.5-20100610-new/gcc/config/sparc/linux64.h 2010-06-11 09:41:13.000000000 -0700 -@@ -110,7 +110,7 @@ - /* If ELF is the default format, we should not use /lib/elf. */ - - #define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2" --#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux.so.2" -+#define GLIBC_DYNAMIC_LINKER64 "/lib/ld-linux.so.2" - - #ifdef SPARC_BI_ARCH - -@@ -130,7 +130,7 @@ - %{static:-static}}} \ - " - --#define LINK_ARCH64_SPEC "-m elf64_sparc -Y P,%R/usr/lib64 %{shared:-shared} \ -+#define LINK_ARCH64_SPEC "-m elf64_sparc -Y P,%R/usr/lib %{shared:-shared} \ - %{!shared: \ - %{!ibcs: \ - %{!static: \ -@@ -211,7 +211,7 @@ - #else /* !SPARC_BI_ARCH */ - - #undef LINK_SPEC --#define LINK_SPEC "-m elf64_sparc -Y P,%R/usr/lib64 %{shared:-shared} \ -+#define LINK_SPEC "-m elf64_sparc -Y P,%R/usr/lib %{shared:-shared} \ - %{!shared: \ - %{!ibcs: \ - %{!static: \ diff --git a/packages/toolchain/lang/gcc/patches/gcc-4.5.1-libstdc++-v3_config.patch b/packages/toolchain/lang/gcc/patches/gcc-4.5.1-libstdc++-v3_config.patch deleted file mode 100644 index b7c6a701e1..0000000000 --- a/packages/toolchain/lang/gcc/patches/gcc-4.5.1-libstdc++-v3_config.patch +++ /dev/null @@ -1,95 +0,0 @@ -diff -Naur gcc-4.5-20100610-old/libstdc++-v3/config.h.in gcc-4.5-20100610-new/libstdc++-v3/config.h.in ---- gcc-4.5-20100610-old/libstdc++-v3/config.h.in 2010-06-11 09:40:55.000000000 -0700 -+++ gcc-4.5-20100610-new/libstdc++-v3/config.h.in 2010-06-11 09:41:44.000000000 -0700 -@@ -115,7 +115,7 @@ - #undef HAVE_FABSL - - /* Define to 1 if you have the header file. */ --#undef HAVE_FENV_H -+#define HAVE_FENV_H 1 - - /* Define to 1 if you have the `finite' function. */ - #undef HAVE_FINITE -@@ -170,7 +170,7 @@ - #undef HAVE_HYPOTL - - /* Define if you have the iconv() function. */ --#undef HAVE_ICONV -+#define HAVE_ICONV 1 - - /* Define to 1 if you have the header file. */ - #undef HAVE_IEEEFP_H -@@ -209,7 +209,7 @@ - #undef HAVE_ISWBLANK - - /* Define if LC_MESSAGES is available in . */ --#undef HAVE_LC_MESSAGES -+#define HAVE_LC_MESSAGES 1 - - /* Define to 1 if you have the `ldexpf' function. */ - #undef HAVE_LDEXPF -@@ -290,7 +290,7 @@ - #undef HAVE_QFPCLASS - - /* Define to 1 if you have the `setenv' function. */ --#undef HAVE_SETENV -+#define HAVE_SETENV 1 - - /* Define to 1 if you have the `sincos' function. */ - #undef HAVE_SINCOS -@@ -329,7 +329,7 @@ - #undef HAVE_STDLIB_H - - /* Define if strerror_l is available in . */ --#undef HAVE_STRERROR_L -+#define HAVE_STRERROR_L 1 - - /* Define if strerror_r is available in . */ - #undef HAVE_STRERROR_R -@@ -356,7 +356,7 @@ - #undef HAVE_SYS_IOCTL_H - - /* Define to 1 if you have the header file. */ --#undef HAVE_SYS_IPC_H -+#define HAVE_SYS_IPC_H 1 - - /* Define to 1 if you have the header file. */ - #undef HAVE_SYS_ISA_DEFS_H -@@ -368,16 +368,16 @@ - #undef HAVE_SYS_PARAM_H - - /* Define to 1 if you have the header file. */ --#undef HAVE_SYS_RESOURCE_H -+#define HAVE_SYS_RESOURCE_H 1 - - /* Define to 1 if you have the header file. */ --#undef HAVE_SYS_SEM_H -+#define HAVE_SYS_SEM_H 1 - - /* Define to 1 if you have the header file. */ - #undef HAVE_SYS_STAT_H - - /* Define to 1 if you have the header file. */ --#undef HAVE_SYS_TIME_H -+#define HAVE_SYS_TIME_H 1 - - /* Define to 1 if you have the header file. */ - #undef HAVE_SYS_TYPES_H -@@ -407,7 +407,7 @@ - #undef HAVE_TGMATH_H - - /* Define to 1 if the target supports thread-local storage. */ --#undef HAVE_TLS -+#define HAVE_TLS 1 - - /* Define to 1 if you have the header file. */ - #undef HAVE_UNISTD_H -@@ -620,7 +620,7 @@ - #undef HAVE__TANL - - /* Define as const if the declaration of iconv() needs const. */ --#undef ICONV_CONST -+#define ICONV_CONST 1 - - /* Define to the sub-directory in which libtool stores uninstalled libraries. - */ diff --git a/packages/toolchain/lang/gcc/patches/gcc-4.5.1-ppl-0.11-0.1.patch b/packages/toolchain/lang/gcc/patches/gcc-4.5.1-ppl-0.11-0.1.patch deleted file mode 100644 index 946e23454b..0000000000 --- a/packages/toolchain/lang/gcc/patches/gcc-4.5.1-ppl-0.11-0.1.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff -Naur gcc-4.5.1/configure gcc-4.5.1.patch/configure ---- gcc-4.5.1/configure 2010-06-24 23:06:37.000000000 +0200 -+++ gcc-4.5.1.patch/configure 2010-09-02 17:12:08.807742278 +0200 -@@ -5781,7 +5781,7 @@ - - # Check for PPL - ppl_major_version=0 --ppl_minor_version=10 -+ppl_minor_version=11 - ppllibs=" -lppl_c -lppl -lgmpxx" - pplinc= - -diff -Naur gcc-4.5.1/configure.ac gcc-4.5.1.patch/configure.ac ---- gcc-4.5.1/configure.ac 2010-06-24 23:06:37.000000000 +0200 -+++ gcc-4.5.1.patch/configure.ac 2010-09-02 17:12:22.748618664 +0200 -@@ -1511,7 +1511,7 @@ - - # Check for PPL - ppl_major_version=0 --ppl_minor_version=10 -+ppl_minor_version=11 - ppllibs=" -lppl_c -lppl -lgmpxx" - pplinc= - From de5eb5b0f03df7f09d1a6ce1d03b3cc411e81764 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 07:45:37 +0100 Subject: [PATCH 837/850] gcc: update to gcc-4.5-20101125 Signed-off-by: Stephan Raue --- packages/toolchain/lang/gcc/meta | 2 +- ...x_undefined_references_with_lto-0.1.patch} | 20 ------------------- ...ch => gcc-4.5-20101125-bfd_and_gold.patch} | 0 ...01125-disable_multilib_i386_linux64.patch} | 0 ... => gcc-4.5-20101125-dynamic_linker.patch} | 0 ...cc-4.5-20101125-libstdc++-v3_config.patch} | 0 ...ch => gcc-4.5-20101125-ppl-0.11-0.1.patch} | 0 7 files changed, 1 insertion(+), 21 deletions(-) rename packages/toolchain/lang/gcc/patches/{gcc-4.5-20101118-050_fix_undefined_references_with_lto-0.1.patch => gcc-4.5-20101125-050_fix_undefined_references_with_lto-0.1.patch} (85%) rename packages/toolchain/lang/gcc/patches/{gcc-4.5-20101118-bfd_and_gold.patch => gcc-4.5-20101125-bfd_and_gold.patch} (100%) rename packages/toolchain/lang/gcc/patches/{gcc-4.5-20101118-disable_multilib_i386_linux64.patch => gcc-4.5-20101125-disable_multilib_i386_linux64.patch} (100%) rename packages/toolchain/lang/gcc/patches/{gcc-4.5-20101118-dynamic_linker.patch => gcc-4.5-20101125-dynamic_linker.patch} (100%) rename packages/toolchain/lang/gcc/patches/{gcc-4.5-20101118-libstdc++-v3_config.patch => gcc-4.5-20101125-libstdc++-v3_config.patch} (100%) rename packages/toolchain/lang/gcc/patches/{gcc-4.5-20101118-ppl-0.11-0.1.patch => gcc-4.5-20101125-ppl-0.11-0.1.patch} (100%) diff --git a/packages/toolchain/lang/gcc/meta b/packages/toolchain/lang/gcc/meta index 9e8f6afe56..60423732b6 100644 --- a/packages/toolchain/lang/gcc/meta +++ b/packages/toolchain/lang/gcc/meta @@ -1,5 +1,5 @@ PKG_NAME="gcc" -PKG_VERSION="4.5-20101118" +PKG_VERSION="4.5-20101125" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-050_fix_undefined_references_with_lto-0.1.patch b/packages/toolchain/lang/gcc/patches/gcc-4.5-20101125-050_fix_undefined_references_with_lto-0.1.patch similarity index 85% rename from packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-050_fix_undefined_references_with_lto-0.1.patch rename to packages/toolchain/lang/gcc/patches/gcc-4.5-20101125-050_fix_undefined_references_with_lto-0.1.patch index 5852d03ce9..62f5b8ae52 100644 --- a/packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-050_fix_undefined_references_with_lto-0.1.patch +++ b/packages/toolchain/lang/gcc/patches/gcc-4.5-20101125-050_fix_undefined_references_with_lto-0.1.patch @@ -1,24 +1,4 @@ diff -Naur gcc-4.5-20101118/gcc/ChangeLog gcc-4.5-20101118.patch/gcc/ChangeLog ---- gcc-4.5-20101118/gcc/ChangeLog 2010-11-17 11:46:36.000000000 +0100 -+++ gcc-4.5-20101118.patch/gcc/ChangeLog 2010-11-26 03:06:24.441101626 +0100 -@@ -1,3 +1,17 @@ -+2010-11-23 Dave Korn -+ -+ PR driver/42690 -+ * gcc.c (LINK_COMMAND_SPEC): Remove hard-coded pass-through plugin -+ options, replace by call of pass-through-libs spec function to process -+ link_gcc_c_sequence spec. -+ (lto_libgcc_spec): Delete variable. -+ (static_specs[]): Remove related entry. -+ (static_spec_functions[]): Add new entry for pass-through-libs. -+ (main): Don't generate deleted lto_libgcc_spec. -+ (pass_through_libs_spec_func): New function to implement the new -+ pass-through-libs spec function. -+ * doc/invoke.texi (pass-through-libs): Document new spec function. -+ - 2010-11-17 Richard Guenther - - PR tree-optimization/46498 diff -Naur gcc-4.5-20101118/gcc/doc/invoke.texi gcc-4.5-20101118.patch/gcc/doc/invoke.texi --- gcc-4.5-20101118/gcc/doc/invoke.texi 2010-09-08 19:36:40.000000000 +0200 +++ gcc-4.5-20101118.patch/gcc/doc/invoke.texi 2010-11-26 03:05:14.029157093 +0100 diff --git a/packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-bfd_and_gold.patch b/packages/toolchain/lang/gcc/patches/gcc-4.5-20101125-bfd_and_gold.patch similarity index 100% rename from packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-bfd_and_gold.patch rename to packages/toolchain/lang/gcc/patches/gcc-4.5-20101125-bfd_and_gold.patch diff --git a/packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-disable_multilib_i386_linux64.patch b/packages/toolchain/lang/gcc/patches/gcc-4.5-20101125-disable_multilib_i386_linux64.patch similarity index 100% rename from packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-disable_multilib_i386_linux64.patch rename to packages/toolchain/lang/gcc/patches/gcc-4.5-20101125-disable_multilib_i386_linux64.patch diff --git a/packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-dynamic_linker.patch b/packages/toolchain/lang/gcc/patches/gcc-4.5-20101125-dynamic_linker.patch similarity index 100% rename from packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-dynamic_linker.patch rename to packages/toolchain/lang/gcc/patches/gcc-4.5-20101125-dynamic_linker.patch diff --git a/packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-libstdc++-v3_config.patch b/packages/toolchain/lang/gcc/patches/gcc-4.5-20101125-libstdc++-v3_config.patch similarity index 100% rename from packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-libstdc++-v3_config.patch rename to packages/toolchain/lang/gcc/patches/gcc-4.5-20101125-libstdc++-v3_config.patch diff --git a/packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-ppl-0.11-0.1.patch b/packages/toolchain/lang/gcc/patches/gcc-4.5-20101125-ppl-0.11-0.1.patch similarity index 100% rename from packages/toolchain/lang/gcc/patches/gcc-4.5-20101118-ppl-0.11-0.1.patch rename to packages/toolchain/lang/gcc/patches/gcc-4.5-20101125-ppl-0.11-0.1.patch From 5f5fabf28cec64555533f92b2ac7c2a5d60da9fc Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 07:46:00 +0100 Subject: [PATCH 838/850] htop: fails to build with GOLD linker Signed-off-by: Stephan Raue --- packages/debug/htop/build | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/debug/htop/build b/packages/debug/htop/build index de26216428..01a7b87f32 100755 --- a/packages/debug/htop/build +++ b/packages/debug/htop/build @@ -2,6 +2,9 @@ . config/options $1 +# htop fails to build with GOLD linker + strip_gold + cd $PKG_BUILD ac_cv_func_malloc_0_nonnull=yes \ ac_cv_func_realloc_0_nonnull=yes \ From 5fddbcb36953c38bfe2add255ca9779adb52aae9 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 07:46:13 +0100 Subject: [PATCH 839/850] nano: fails to build with GOLD linker Signed-off-by: Stephan Raue --- packages/debug/nano/build | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/debug/nano/build b/packages/debug/nano/build index 20a4f0aeb0..b762113633 100755 --- a/packages/debug/nano/build +++ b/packages/debug/nano/build @@ -2,6 +2,9 @@ . config/options $1 +# nano fails to build with GOLD linker + strip_gold + cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ From d939dbdc22470bac43d65f06132ce14a045e9b1c Mon Sep 17 00:00:00 2001 From: Wintemrute Date: Fri, 19 Nov 2010 19:24:16 +0100 Subject: [PATCH 840/850] Fixing typo --- config/issue | 2 +- projects/ATV/options | 2 +- projects/ION/options | 2 +- projects/generic/options | 2 +- projects/intel/options | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/config/issue b/config/issue index f072d5948f..7b7a66e92a 100644 --- a/config/issue +++ b/config/issue @@ -1 +1 @@ -Welcome to OpenELEC - the powerfull Mediacenter4you +Welcome to OpenELEC - the powerful Mediacenter4you diff --git a/projects/ATV/options b/projects/ATV/options index 17a7153039..10528b908e 100644 --- a/projects/ATV/options +++ b/projects/ATV/options @@ -1,6 +1,6 @@ # Welcome Message for e.g. SSH Server (up to 5 Lines) GREATING0="#######################################################" - GREATING1="# Welcome to OpenELEC - the powerfull Mediacenter4you #" + GREATING1="# Welcome to OpenELEC - the powerful Mediacenter4you #" GREATING2="# .......... visit http://www.openelec.tv ........... #" GREATING3="#######################################################" GREATING4="" diff --git a/projects/ION/options b/projects/ION/options index d35e3f1215..ba359d64e9 100644 --- a/projects/ION/options +++ b/projects/ION/options @@ -1,6 +1,6 @@ # Welcome Message for e.g. SSH Server (up to 5 Lines) GREATING0="#######################################################" - GREATING1="# Welcome to OpenELEC - the powerfull Mediacenter4you #" + GREATING1="# Welcome to OpenELEC - the powerful Mediacenter4you #" GREATING2="# .......... visit http://www.openelec.tv ........... #" GREATING3="#######################################################" GREATING4="" diff --git a/projects/generic/options b/projects/generic/options index 2c0b268c0a..ab1118ddeb 100644 --- a/projects/generic/options +++ b/projects/generic/options @@ -1,6 +1,6 @@ # Welcome Message for e.g. SSH Server (up to 5 Lines) GREATING0="#######################################################" - GREATING1="# Welcome to OpenELEC - the powerfull Mediacenter4you #" + GREATING1="# Welcome to OpenELEC - the powerful Mediacenter4you #" GREATING2="# .......... visit http://www.openelec.tv ........... #" GREATING3="#######################################################" GREATING4="" diff --git a/projects/intel/options b/projects/intel/options index 9446bc5f01..2a260d052c 100644 --- a/projects/intel/options +++ b/projects/intel/options @@ -1,6 +1,6 @@ # Welcome Message for e.g. SSH Server (up to 5 Lines) GREATING0="#######################################################" - GREATING1="# Welcome to OpenELEC - the powerfull Mediacenter4you #" + GREATING1="# Welcome to OpenELEC - the powerful Mediacenter4you #" GREATING2="# .......... visit http://www.openelec.tv ........... #" GREATING3="#######################################################" GREATING4="" From 7a408d81eba68150e9eee6f674c0df612b1506cc Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 12:08:35 +0100 Subject: [PATCH 841/850] cairo: fails to build with graphite support, add some more configure options, add OpenGL support Signed-off-by: Stephan Raue --- packages/graphics/cairo/build | 62 +++++++++++++++++++++++++++++++---- packages/graphics/cairo/meta | 4 +-- 2 files changed, 58 insertions(+), 8 deletions(-) diff --git a/packages/graphics/cairo/build b/packages/graphics/cairo/build index 5d8d8b0c54..af4011dca8 100755 --- a/packages/graphics/cairo/build +++ b/packages/graphics/cairo/build @@ -2,23 +2,73 @@ . config/options $1 +# cairo fails to build with graphite support +# see also http://bugs.gentoo.org/336157 + CFLAGS=`echo $CFLAGS | sed -e "s|-ftree-loop-distribution||"` + CFLAGS=`echo $CFLAGS | sed -e "s|-floop-interchange||"` + CFLAGS=`echo $CFLAGS | sed -e "s|-floop-strip-mine||"` + CFLAGS=`echo $CFLAGS | sed -e "s|-floop-block||"` + CFLAGS=`echo $CFLAGS | sed -e "s|-fgraphite-identity||"` + cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ - --disable-static \ + --x-includes="$SYSROOT_PREFIX/usr/include" \ + --x-libraries="$SYSROOT_PREFIX/usr/lib" \ + --disable-silent-rules \ --enable-shared \ + --disable-static \ + --disable-gtk-doc \ + --enable-largefile \ + --enable-atomic \ + --disable-gcov \ + --disable-valgrind \ + --enable-xlib \ + --enable-xlib-xrender \ + --disable-xcb \ + --disable-xlib-xcb \ + --disable-xcb-shm \ + --disable-qt \ + --disable-quartz \ + --disable-quartz-font \ + --disable-quartz-image \ + --disable-win32 \ + --disable-win32-font \ + --disable-skia \ + --disable-os2 \ + --disable-beos \ + --disable-drm \ + --disable-drm-xr \ + --disable-gallium \ + --disable-xcb-drm \ --enable-png \ + --enable-gl \ + --disable-directfb \ + --disable-vg \ + --disable-egl \ + --enable-glx \ + --disable-wgl \ + --disable-script \ + --enable-ft \ + --enable-fc \ --enable-ps \ --enable-pdf \ --enable-svg \ - --enable-xlib \ - --disable-xcb \ - --disable-gl \ - --disable-drm \ - --disable-gtk-doc \ + --disable-test-surfaces \ + --disable-tee \ + --disable-xml \ + --enable-pthread \ + --disable-gobject \ + --disable-full-testing \ + --disable-trace \ + --enable-interpreter \ + --disable-symbol-lookup \ + --enable-some-floating-point \ + --with-gnu-ld \ + --with-x make $MAKEINSTALL diff --git a/packages/graphics/cairo/meta b/packages/graphics/cairo/meta index b06188565a..40009b8522 100644 --- a/packages/graphics/cairo/meta +++ b/packages/graphics/cairo/meta @@ -5,8 +5,8 @@ PKG_ARCH="any" PKG_LICENSE="LGPL" PKG_SITE="http://cairographics.org/" PKG_URL="http://cairographics.org/releases/$PKG_NAME-$PKG_VERSION.tar.gz" -PKG_DEPENDS="zlib freetype fontconfig libpng pixman libXrender libX11" -PKG_BUILD_DEPENDS="toolchain zlib freetype fontconfig libpng pixman libXrender libX11" +PKG_DEPENDS="zlib freetype fontconfig libpng pixman libXrender libX11 Mesa" +PKG_BUILD_DEPENDS="toolchain zlib freetype fontconfig libpng pixman libXrender libX11 Mesa" PKG_PRIORITY="optional" PKG_SECTION="graphics" PKG_SHORTDESC="cairo: Multi-platform 2D graphics library" From 931c3d52f3259ec99b51a9c3e45ddf56773acd99 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 12:09:38 +0100 Subject: [PATCH 842/850] xerces-c: fails to build with LTO support Signed-off-by: Stephan Raue --- packages/textproc/xerces-c/build | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/textproc/xerces-c/build b/packages/textproc/xerces-c/build index 0232603e9d..22dc76fcb1 100755 --- a/packages/textproc/xerces-c/build +++ b/packages/textproc/xerces-c/build @@ -2,6 +2,9 @@ . config/options $1 +# xerces_c fails to build with LTO support + strip_lto + cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ From 1b0c5feba7657377db683938e6f25ef986394fdf Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 12:10:28 +0100 Subject: [PATCH 843/850] pango: fails to build with linker plugin support, cleanup Signed-off-by: Stephan Raue --- packages/x11/toolkits/pango/build | 9 ++------- packages/x11/toolkits/pango/install | 7 ------- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/packages/x11/toolkits/pango/build b/packages/x11/toolkits/pango/build index 8d14c00282..cf458d138d 100755 --- a/packages/x11/toolkits/pango/build +++ b/packages/x11/toolkits/pango/build @@ -2,13 +2,8 @@ . config/options $1 -$SCRIPTS/build toolchain -$SCRIPTS/build glib -$SCRIPTS/build cairo -$SCRIPTS/build freetype -$SCRIPTS/build fontconfig -$SCRIPTS/build libX11 -$SCRIPTS/build libXft +# pango fails to build with linker plugin (segfault) + strip_linker_plugin cd $PKG_BUILD ./configure --host=$TARGET_NAME \ diff --git a/packages/x11/toolkits/pango/install b/packages/x11/toolkits/pango/install index 265ecd4004..985d64f649 100755 --- a/packages/x11/toolkits/pango/install +++ b/packages/x11/toolkits/pango/install @@ -2,13 +2,6 @@ . config/options $1 -$SCRIPTS/install glib -$SCRIPTS/install cairo -$SCRIPTS/install freetype -$SCRIPTS/install fontconfig -$SCRIPTS/install libX11 -$SCRIPTS/install libXft - MODULE_VERSION=`pkg-config pango --variable=pango_module_version` mkdir -p $INSTALL/usr/lib From 10d8cfba029ecd4f10bc25e2d4df70760fed6a66 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 19:50:27 +0100 Subject: [PATCH 844/850] xbmc-dharma: update to xbmc-dharma-35492 Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc-dharma/meta | 2 +- ...xbmc-dharma-35492-002-arm_remove_forced_python2.5-0.1.patch} | 0 ... => xbmc-dharma-35492-201-let_select_XBMCProjectM-0.1.patch} | 0 ....1.patch => xbmc-dharma-35492-202-let_select_RSXS-0.1.patch} | 0 ...atch => xbmc-dharma-35492-301-correct_lzo_include-0.1.patch} | 0 ...> xbmc-dharma-35492-302-dont_hardcode_usr_include-0.1.patch} | 0 ...=> xbmc-dharma-35492-303-WiiRemote_crosscompiling-0.1.patch} | 0 ....patch => xbmc-dharma-35492-303-fix_libdvd_xFLAGS-0.1.patch} | 0 ...=> xbmc-dharma-35492-401-we_dont_need_libXinerama-0.1.patch} | 0 ...ch => xbmc-dharma-35492-402-enable_yasm_in_ffmpeg-0.1.patch} | 0 ...sh-0.1.patch => xbmc-dharma-35492-451-full_splash-0.1.patch} | 0 ...patch => xbmc-dharma-35492-452-change_lcd_content-0.1.patch} | 0 ...=> xbmc-dharma-35492-452-ps3_remote_be_more_quiet-0.1.patch} | 0 ...c-dharma-35492-462-add_remote_irtrans_mediacenter-0.1.patch} | 0 ...atch => xbmc-dharma-35492-463-add_remote_devinput-0.1.patch} | 0 ...-dharma-35492-901-advancedsettings_alwaysextractflags.patch} | 0 ...92-902-advancedsettings_videolibrary.flattenmoviesets.patch} | 0 17 files changed, 1 insertion(+), 1 deletion(-) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35419-002-arm_remove_forced_python2.5-0.1.patch => xbmc-dharma-35492-002-arm_remove_forced_python2.5-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35419-201-let_select_XBMCProjectM-0.1.patch => xbmc-dharma-35492-201-let_select_XBMCProjectM-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35419-202-let_select_RSXS-0.1.patch => xbmc-dharma-35492-202-let_select_RSXS-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35419-301-correct_lzo_include-0.1.patch => xbmc-dharma-35492-301-correct_lzo_include-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35419-302-dont_hardcode_usr_include-0.1.patch => xbmc-dharma-35492-302-dont_hardcode_usr_include-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35419-303-WiiRemote_crosscompiling-0.1.patch => xbmc-dharma-35492-303-WiiRemote_crosscompiling-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35419-303-fix_libdvd_xFLAGS-0.1.patch => xbmc-dharma-35492-303-fix_libdvd_xFLAGS-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35419-401-we_dont_need_libXinerama-0.1.patch => xbmc-dharma-35492-401-we_dont_need_libXinerama-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35419-402-enable_yasm_in_ffmpeg-0.1.patch => xbmc-dharma-35492-402-enable_yasm_in_ffmpeg-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35419-451-full_splash-0.1.patch => xbmc-dharma-35492-451-full_splash-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35419-452-change_lcd_content-0.1.patch => xbmc-dharma-35492-452-change_lcd_content-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35419-452-ps3_remote_be_more_quiet-0.1.patch => xbmc-dharma-35492-452-ps3_remote_be_more_quiet-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35419-462-add_remote_irtrans_mediacenter-0.1.patch => xbmc-dharma-35492-462-add_remote_irtrans_mediacenter-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35419-463-add_remote_devinput-0.1.patch => xbmc-dharma-35492-463-add_remote_devinput-0.1.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35419-901-advancedsettings_alwaysextractflags.patch => xbmc-dharma-35492-901-advancedsettings_alwaysextractflags.patch} (100%) rename packages/mediacenter/xbmc-dharma/patches/{xbmc-dharma-35419-902-advancedsettings_videolibrary.flattenmoviesets.patch => xbmc-dharma-35492-902-advancedsettings_videolibrary.flattenmoviesets.patch} (100%) diff --git a/packages/mediacenter/xbmc-dharma/meta b/packages/mediacenter/xbmc-dharma/meta index 40ebcce35c..0eded258ee 100644 --- a/packages/mediacenter/xbmc-dharma/meta +++ b/packages/mediacenter/xbmc-dharma/meta @@ -1,5 +1,5 @@ PKG_NAME="xbmc-dharma" -PKG_VERSION="35419" +PKG_VERSION="35492" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-002-arm_remove_forced_python2.5-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-002-arm_remove_forced_python2.5-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-002-arm_remove_forced_python2.5-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-002-arm_remove_forced_python2.5-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-201-let_select_XBMCProjectM-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-201-let_select_XBMCProjectM-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-201-let_select_XBMCProjectM-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-201-let_select_XBMCProjectM-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-202-let_select_RSXS-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-202-let_select_RSXS-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-202-let_select_RSXS-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-202-let_select_RSXS-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-301-correct_lzo_include-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-301-correct_lzo_include-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-301-correct_lzo_include-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-301-correct_lzo_include-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-302-dont_hardcode_usr_include-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-302-dont_hardcode_usr_include-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-302-dont_hardcode_usr_include-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-302-dont_hardcode_usr_include-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-303-WiiRemote_crosscompiling-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-303-WiiRemote_crosscompiling-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-303-WiiRemote_crosscompiling-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-303-WiiRemote_crosscompiling-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-303-fix_libdvd_xFLAGS-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-303-fix_libdvd_xFLAGS-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-303-fix_libdvd_xFLAGS-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-303-fix_libdvd_xFLAGS-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-401-we_dont_need_libXinerama-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-401-we_dont_need_libXinerama-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-401-we_dont_need_libXinerama-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-401-we_dont_need_libXinerama-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-402-enable_yasm_in_ffmpeg-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-402-enable_yasm_in_ffmpeg-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-402-enable_yasm_in_ffmpeg-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-402-enable_yasm_in_ffmpeg-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-451-full_splash-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-451-full_splash-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-451-full_splash-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-451-full_splash-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-452-change_lcd_content-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-452-change_lcd_content-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-452-change_lcd_content-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-452-change_lcd_content-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-452-ps3_remote_be_more_quiet-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-452-ps3_remote_be_more_quiet-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-452-ps3_remote_be_more_quiet-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-452-ps3_remote_be_more_quiet-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-462-add_remote_irtrans_mediacenter-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-462-add_remote_irtrans_mediacenter-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-462-add_remote_irtrans_mediacenter-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-462-add_remote_irtrans_mediacenter-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-463-add_remote_devinput-0.1.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-463-add_remote_devinput-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-463-add_remote_devinput-0.1.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-463-add_remote_devinput-0.1.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-901-advancedsettings_alwaysextractflags.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-901-advancedsettings_alwaysextractflags.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-901-advancedsettings_alwaysextractflags.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-901-advancedsettings_alwaysextractflags.patch diff --git a/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-902-advancedsettings_videolibrary.flattenmoviesets.patch b/packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-902-advancedsettings_videolibrary.flattenmoviesets.patch similarity index 100% rename from packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35419-902-advancedsettings_videolibrary.flattenmoviesets.patch rename to packages/mediacenter/xbmc-dharma/patches/xbmc-dharma-35492-902-advancedsettings_videolibrary.flattenmoviesets.patch From 19a0e1e5360280f4c413442c686dd5d03bda9df0 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 27 Nov 2010 19:50:44 +0100 Subject: [PATCH 845/850] xbmc-dharma-theme-Confluence: update to xbmc-dharma-theme-Confluence-35492 Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc-dharma-theme-Confluence/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mediacenter/xbmc-dharma-theme-Confluence/meta b/packages/mediacenter/xbmc-dharma-theme-Confluence/meta index e13170df28..a2a33483ed 100644 --- a/packages/mediacenter/xbmc-dharma-theme-Confluence/meta +++ b/packages/mediacenter/xbmc-dharma-theme-Confluence/meta @@ -1,5 +1,5 @@ PKG_NAME="xbmc-dharma-theme-Confluence" -PKG_VERSION="35419" +PKG_VERSION="35492" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From 0006f62633208112615945196a4cca0be4ad14b3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 28 Nov 2010 15:08:12 +0100 Subject: [PATCH 846/850] config/functions: -fuse-linker-plugin is not used in C*FLAGS Signed-off-by: Stephan Raue --- config/functions | 2 -- 1 file changed, 2 deletions(-) diff --git a/config/functions b/config/functions index 14481f6770..949d768384 100644 --- a/config/functions +++ b/config/functions @@ -149,7 +149,5 @@ strip_gold() { strip_linker_plugin() { # strip out usage from linker plugin - CFLAGS=`echo $CFLAGS | sed -e "s|-fuse-linker-plugin||"` - CXXFLAGS=`echo $CXXFLAGS | sed -e "s|-fuse-linker-plugin||"` LDFLAGS=`echo $LDFLAGS | sed -e "s|-fuse-linker-plugin||"` } From d8a3ea4c1b9852051b285619a685c540ca9dcca6 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 28 Nov 2010 15:11:08 +0100 Subject: [PATCH 847/850] config/path: split *FLAGS optimization to an seperate file 'config/optimize', cleanup, add -fPIC to LDFLAGS (for host and target), thanks to Wintemrute Signed-off-by: Stephan Raue --- config/optimize | 28 +++++++++++++++++++++++ config/path | 59 +++++++++++++++++++------------------------------ 2 files changed, 51 insertions(+), 36 deletions(-) create mode 100644 config/optimize diff --git a/config/optimize b/config/optimize new file mode 100644 index 0000000000..206a7ef1d9 --- /dev/null +++ b/config/optimize @@ -0,0 +1,28 @@ +if [ "$OPTIMIZATIONS" = speed ];then + GCC_OPTIM="-O4" + LD_OPTIM="" +fi + +if [ "$OPTIMIZATIONS" = normal ];then + GCC_OPTIM="-O2" + LD_OPTIM="" +fi + +if [ "$OPTIMIZATIONS" = size ];then + GCC_OPTIM="-Os" + LD_OPTIM="" +fi + +GCC_OPTIM="$GCC_OPTIM -ffast-math" +GCC_OPTIM="$GCC_OPTIM -ftree-loop-distribution" +GCC_OPTIM="$GCC_OPTIM -floop-interchange" +GCC_OPTIM="$GCC_OPTIM -floop-strip-mine" +GCC_OPTIM="$GCC_OPTIM -floop-block" +GCC_OPTIM="$GCC_OPTIM -fgraphite-identity" +GCC_OPTIM="$GCC_OPTIM -fexcess-precision=fast" +GCC_OPTIM="$GCC_OPTIM -flto" + +LD_OPTIM="$LD_OPTIM -fuse-linker-plugin" +LD_OPTIM="$LD_OPTIM -fuse-ld=gold" +LD_OPTIM="$LD_OPTIM -Wl,--as-needed" + diff --git a/config/path b/config/path index 2998c38ef3..fd951c0f07 100644 --- a/config/path +++ b/config/path @@ -101,27 +101,7 @@ XORG_PATH_DRIVERS=/usr/lib/xorg/modules/drivers TOOLCHAIN_LANGUAGES=c [ "$TOOLCHAIN_CXX" = yes ] && TOOLCHAIN_LANGUAGES=${TOOLCHAIN_LANGUAGES},c++ -if [ "$OPTIMIZATIONS" = speed ];then - GCC_OPTIM="-O3 -ffast-math $PROJECT_CFLAGS" - GCC_OPTIM="$GCC_OPTIM -ftree-loop-distribution" - GCC_OPTIM="$GCC_OPTIM -floop-interchange" - GCC_OPTIM="$GCC_OPTIM -floop-strip-mine" - GCC_OPTIM="$GCC_OPTIM -floop-block" - GCC_OPTIM="$GCC_OPTIM -fgraphite-identity" -fi - -if [ "$OPTIMIZATIONS" = normal ];then - GCC_OPTIM="-O2 -ffast-math $PROJECT_CFLAGS" -fi - -if [ "$OPTIMIZATIONS" = size ];then - GCC_OPTIM="-Os -ffast-math $PROJECT_CFLAGS" - GCC_OPTIM="$GCC_OPTIM -ftree-loop-distribution" - GCC_OPTIM="$GCC_OPTIM -floop-interchange" - GCC_OPTIM="$GCC_OPTIM -floop-strip-mine" - GCC_OPTIM="$GCC_OPTIM -floop-block" - GCC_OPTIM="$GCC_OPTIM -fgraphite-identity" -fi +. config/optimize TARGET_CC=${TARGET_PREFIX}gcc TARGET_CXX=${TARGET_PREFIX}g++ @@ -132,33 +112,37 @@ TARGET_NM=${TARGET_PREFIX}nm TARGET_RANLIB=${TARGET_PREFIX}ranlib TARGET_OBJCOPY=${TARGET_PREFIX}objcopy TARGET_STRIP=${TARGET_PREFIX}strip + TARGET_CPPFLAGS= -TARGET_CFLAGS="$GCC_OPTIM -Wall -pipe" +TARGET_CFLAGS="-Wall -pipe $GCC_OPTIM $PROJECT_CFLAGS" TARGET_CXXFLAGS="$TARGET_CFLAGS" -TARGET_LDFLAGS="" -TARGET_PKG_CONFIG_PATH="" -TARGET_PKG_CONFIG_LIBDIR="$SYSROOT_PREFIX/usr/lib/pkgconfig:$SYSROOT_PREFIX/usr/share/pkgconfig" -TARGET_PKG_CONFIG_SYSROOT_DIR="$SYSROOT_PREFIX" +TARGET_LDFLAGS="$GCC_OPTIM $LD_OPTIM" case $TARGET_ARCH in i386) - TARGET_CFLAGS="$TARGET_CFLAGS -march=$TARGET_CPU -m32 -fexcess-precision=fast" - TARGET_CXXFLAGS="$TARGET_CXXFLAGS -march=$TARGET_CPU -m32 -fexcess-precision=fast" + TARGET_CFLAGS="$TARGET_CFLAGS -march=$TARGET_CPU -m32" + TARGET_CXXFLAGS="$TARGET_CXXFLAGS -march=$TARGET_CPU -m32" + TARGET_LDFLAGS="$TARGET_LDFLAGS -march=$TARGET_CPU -m32" ;; x86_64) - TARGET_CFLAGS="$TARGET_CFLAGS -fPIC -march=$TARGET_CPU -m64 -fexcess-precision=fast" - TARGET_CXXFLAGS="$TARGET_CXXFLAGS -fPIC -march=$TARGET_CPU -m64 -fexcess-precision=fast" + TARGET_CFLAGS="$TARGET_CFLAGS -fPIC -march=$TARGET_CPU -m64" + TARGET_CXXFLAGS="$TARGET_CXXFLAGS -fPIC -march=$TARGET_CPU -m64" + TARGET_LDFLAGS="$TARGET_LDFLAGS -fPIC -march=$TARGET_CPU -m64" ;; esac +TARGET_PKG_CONFIG_PATH="" +TARGET_PKG_CONFIG_LIBDIR="$SYSROOT_PREFIX/usr/lib/pkgconfig:$SYSROOT_PREFIX/usr/share/pkgconfig" +TARGET_PKG_CONFIG_SYSROOT_DIR="$SYSROOT_PREFIX" + if [ "$DEBUG" = yes ]; then TARGET_CFLAGS="$TARGET_CFLAGS -ggdb" TARGET_CXXFLAGS="$TARGET_CXXFLAGS -ggdb" TARGET_LDFLAGS="$TARGET_LDFLAGS -ggdb" else - TARGET_CFLAGS="$TARGET_CFLAGS -flto -fomit-frame-pointer" - TARGET_CXXFLAGS="$TARGET_CXXFLAGS -flto -fomit-frame-pointer" - TARGET_LDFLAGS="$TARGET_LDFLAGS -s -fuse-linker-plugin -fuse-ld=gold -flto -Wl,--as-needed" + TARGET_CFLAGS="$TARGET_CFLAGS-fomit-frame-pointer" + TARGET_CXXFLAGS="$TARGET_CXXFLAGS -fomit-frame-pointer" + TARGET_LDFLAGS="$TARGET_LDFLAGS -s" fi HOST_AWK=gawk @@ -171,22 +155,25 @@ HOST_NM=nm HOST_RANLIB=ranlib HOST_OBJCOPY=objcopy HOST_STRIP=strip + HOST_CPPFLAGS="" HOST_CFLAGS="-O2 -Wall -pipe -I$ROOT/$TOOLCHAIN/include" HOST_CXXFLAGS="$HOST_CFLAGS" HOST_LDFLAGS="-Wl,-rpath,$ROOT/$TOOLCHAIN/lib -L$ROOT/$TOOLCHAIN/lib" -HOST_PKG_CONFIG_PATH="" -HOST_PKG_CONFIG_LIBDIR="$ROOT/$TOOLCHAIN/lib/pkgconfig:$ROOT/$TOOLCHAIN/share/pkgconfig" -HOST_PKG_CONFIG_SYSROOT_DIR="" # use -fPIC when necessary case "`uname -m`" in x86_64|ppc64|arm|armeb|armel) HOST_CFLAGS="$HOST_CFLAGS -fPIC" HOST_CXXFLAGS="$HOST_CXXFLAGS -fPIC" + HOST_LDFLAGS="$HOST_LDFLAGS -fPIC" ;; esac +HOST_PKG_CONFIG_PATH="" +HOST_PKG_CONFIG_LIBDIR="$ROOT/$TOOLCHAIN/lib/pkgconfig:$ROOT/$TOOLCHAIN/share/pkgconfig" +HOST_PKG_CONFIG_SYSROOT_DIR="" + export CCACHE_DIR=$ROOT/$BUILD/.ccache export MAKEFLAGS=-j$CONCURRENCY_MAKE_LEVEL export PKG_CONFIG=$ROOT/$TOOLCHAIN/bin/pkg-config From a444e6e95c710b7e6aafcc95411922b13b376fd3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 28 Nov 2010 15:12:58 +0100 Subject: [PATCH 848/850] Python: typo, use $CFLAGS instead $TARGET_CFLAGS for $OPT Signed-off-by: Stephan Raue --- packages/lang/Python/build | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/lang/Python/build b/packages/lang/Python/build index ad490b7b88..651a802ad3 100755 --- a/packages/lang/Python/build +++ b/packages/lang/Python/build @@ -39,8 +39,8 @@ ac_cv_file_dev_ptc=no \ ac_cv_file_dev_ptmx=yes \ ac_cv_func_lchflags_works=no \ ac_cv_func_chflags_works=no \ -ac_cv_func_printf_zd=yes -OPT="$TARGET_CFLAGS -fno-strict-aliasing" \ +ac_cv_func_printf_zd=yes \ +OPT="$CFLAGS -fno-strict-aliasing" \ LDFLAGS="$LDFLAGS -lexpat" \ ../configure --host=$TARGET_NAME \ --build=$HOST_NAME \ From 81882a0db8ef95d2d08e74ab3990c4a4032523db Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 28 Nov 2010 15:24:57 +0100 Subject: [PATCH 849/850] config/path: typo Signed-off-by: Stephan Raue --- config/path | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/path b/config/path index fd951c0f07..bbfa2a486a 100644 --- a/config/path +++ b/config/path @@ -140,7 +140,7 @@ if [ "$DEBUG" = yes ]; then TARGET_CXXFLAGS="$TARGET_CXXFLAGS -ggdb" TARGET_LDFLAGS="$TARGET_LDFLAGS -ggdb" else - TARGET_CFLAGS="$TARGET_CFLAGS-fomit-frame-pointer" + TARGET_CFLAGS="$TARGET_CFLAGS -fomit-frame-pointer" TARGET_CXXFLAGS="$TARGET_CXXFLAGS -fomit-frame-pointer" TARGET_LDFLAGS="$TARGET_LDFLAGS -s" fi From 372d2bb6e1b53fd37f1b7343ee6ab0fc21f748b3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 28 Nov 2010 17:33:30 +0100 Subject: [PATCH 850/850] Mesa: fix stripping out *FLAGS options Signed-off-by: Stephan Raue --- packages/graphics/Mesa/build | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/graphics/Mesa/build b/packages/graphics/Mesa/build index c3831c2afd..480aa8ebc2 100755 --- a/packages/graphics/Mesa/build +++ b/packages/graphics/Mesa/build @@ -10,8 +10,8 @@ get_graphicdrivers strip_lto # Mesa fails to build with LTO optimization # dont use strip or ggdb because of use from mklib - LDFLAGS=`echo $LDFLAGS | sed -e "s|-s||"` - LDFLAGS=`echo $LDFLAGS | sed -e "s|-ggdb||"` + LDFLAGS=`echo $LDFLAGS | sed -e "s|-s | |"` + LDFLAGS=`echo $LDFLAGS | sed -e "s|-ggdb | |"` MESA_CONFIG=" --disable-gallium --disable-gallium-nouveau --disable-gallium-i915 --disable-gallium-i965" MESA_CONFIG="$MESA_CONFIG --disable-gallium-radeon --disable-gallium-r600 --disable-gallium-svga --disable-gallium-swrast"

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