wok-tiny rev 1

Add kernel
author Pascal Bellard <pascal.bellard@slitaz.org>
date Tue Feb 01 09:37:33 2011 +0100 (2011-02-01)
parents c241da0f26a5
children 78eec5d0bbfd
files kernel-isa/receipt kernel-lguest/receipt kernel-modular/receipt kernel-modular/stuff/001-squashfs-decompressors-add-xz-decompressor-module.patch kernel-modular/stuff/002-squashfs-decompressors-add-boot-time-xz-support.patch kernel-modular/stuff/003-squashfs-x86-support-xz-compressed-kernel.patch kernel-modular/stuff/004-squashfs-add-xz-compression-support.patch kernel-modular/stuff/005-squashfs-add-xz-compression-configuration-option.patch kernel-modular/stuff/aufs2-2.6.36-fix.patch kernel-modular/stuff/aufs2-base.patch kernel-modular/stuff/aufs2-kbuild.patch kernel-modular/stuff/aufs2-module-2.6.36.patch kernel-modular/stuff/aufs2-standalone.patch kernel-modular/stuff/bootloader.sh kernel-modular/stuff/check_modules.sh kernel-modular/stuff/gztazmod.sh kernel-modular/stuff/linux-2.6.37-slitaz.config-i486-isa kernel-modular/stuff/linux-2.6.37-slitaz.config-i486-lguest kernel-modular/stuff/linux-2.6.37-slitaz.config-i486-modular kernel-modular/stuff/linux-diff-2.6.37.u kernel-modular/stuff/linux-freeinitrd-2.6.37.u kernel-modular/stuff/linux-header-2.6.37.u kernel-modular/stuff/linux-squashfs-lzma-2.6.34.u kernel-modular/stuff/linux-unlzma-2.6.37.u kernel-modular/stuff/list_modules.sh kernel-modular/stuff/modules-2.6.37.list
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/kernel-isa/receipt	Tue Feb 01 09:37:33 2011 +0100
     1.3 @@ -0,0 +1,19 @@
     1.4 +# SliTaz package receipt.
     1.5 +
     1.6 +PACKAGE="kernel-isa"
     1.7 +VERSION="2.6.37"
     1.8 +CATEGORY="base-system"
     1.9 +SHORT_DESC="Kernel i386 with ppp, ne2k-isa, 3c509, ide and ext3"
    1.10 +MAINTAINER="devel@slitaz.org"
    1.11 +WEB_SITE="http://www.kernel.org/"
    1.12 +WANTED="kernel-modular"
    1.13 +
    1.14 +# Rules to gen a SliTaz package suitable for Tazpkg.
    1.15 +genpkg_rules()
    1.16 +{
    1.17 +    mkdir $fs/boot
    1.18 +    cp -a $WOK/kernel-modular/linux-$VERSION/$PACKAGE $fs/boot/bzImage
    1.19 +    cp -a $WOK/kernel-modular/linux-$VERSION/System.map-${PACKAGE#kernel-} $fs/boot/System.map
    1.20 +    cp -a $WOK/kernel-modular/linux-$VERSION/config-${PACKAGE#kernel-} $fs/boot/config
    1.21 +}
    1.22 +
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/kernel-lguest/receipt	Tue Feb 01 09:37:33 2011 +0100
     2.3 @@ -0,0 +1,18 @@
     2.4 +# SliTaz package receipt.
     2.5 +
     2.6 +PACKAGE="kernel-lguest"
     2.7 +VERSION="2.6.37"
     2.8 +CATEGORY="base-system"
     2.9 +SHORT_DESC="Kernel i686 with ext3 and virtual drivers for ethernet and disk"
    2.10 +MAINTAINER="devel@slitaz.org"
    2.11 +WEB_SITE="http://www.kernel.org/"
    2.12 +WANTED="kernel-modular"
    2.13 +
    2.14 +# Rules to gen a SliTaz package suitable for Tazpkg.
    2.15 +genpkg_rules()
    2.16 +{
    2.17 +    mkdir $fs/boot
    2.18 +    cp -a $WOK/kernel-modular/linux-$VERSION/$PACKAGE $fs/boot/bzImage
    2.19 +    cp -a $WOK/kernel-modular/linux-$VERSION/System.map-${PACKAGE#kernel-} $fs/boot/System.map
    2.20 +    cp -a $WOK/kernel-modular/linux-$VERSION/config-${PACKAGE#kernel-} $fs/boot/config
    2.21 +}
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/kernel-modular/receipt	Tue Feb 01 09:37:33 2011 +0100
     3.3 @@ -0,0 +1,169 @@
     3.4 +# SliTaz package receipt.
     3.5 +
     3.6 +PACKAGE="kernel-modular"
     3.7 +SOURCE="linux"
     3.8 +VERSION="2.6.37"
     3.9 +CATEGORY="base-system"
    3.10 +SHORT_DESC="The Linux kernel and modules."
    3.11 +DEPENDS="depmod"
    3.12 +BUILD_DEPENDS="slitaz-toolchain perl git lzma"
    3.13 +[ -n "$TARGET" ] &&
    3.14 +BUILD_DEPENDS="$BUILD_DEPENDS uclibc-cross-compiler-$TARGET" ||
    3.15 +TARGET="i486"
    3.16 +MAINTAINER="devel@slitaz.org"
    3.17 +TARBALL="$SOURCE-$VERSION.tar.bz2"
    3.18 +WEB_SITE="http://www.kernel.org/"
    3.19 +WGET_URL="http://www.eu.kernel.org/pub/linux/kernel/v${VERSION:0:3}/$TARBALL"
    3.20 +CONFIG_FILES="/lib/modules/$VERSION-slitaz/modules.dep"
    3.21 +
    3.22 +# Rules to configure and make the package.
    3.23 +compile_rules()
    3.24 +{
    3.25 +	if [ ! -s $WOK/busybox/busybox*/rootfs.cpio ]; then
    3.26 +		tazwok cook busybox
    3.27 +	fi
    3.28 +	cp $WOK/busybox/busybox*/rootfs.cpio $src
    3.29 +
    3.30 +	# this is code to help update the kernel version faster
    3.31 +	#for i in $(grep -l 'WANTED="linux"' $WOK/*/receipt)
    3.32 +	#do
    3.33 +	#	sed -i 's|VERSION="OLDVERSION"|VERSION="NEWVERSION"|g' $i
    3.34 +	#done
    3.35 +	local _AUFSVER=`grep  ^VERSION= $WOK/aufs/receipt | cut -d "=" -f2 | sed -e 's/"//g'`
    3.36 +	local AUFSDIR="aufs-${_AUFSVER}"
    3.37 +	TARBALL=$SOURCES_REPOSITORY/$AUFSDIR.tar.lzma
    3.38 +	if [ -f $TARBALL ]; then
    3.39 +		unlzma -c $TARBALL | tar xf -
    3.40 +		cd $AUFSDIR && git checkout origin/aufs2.1-37
    3.41 +		cd $WOK/$PACKAGE
    3.42 +	else
    3.43 +		# Aufs2 from git repository
    3.44 +		git clone git://aufs.git.sourceforge.net/gitroot/aufs/aufs2-standalone.git $AUFSDIR
    3.45 +		tar cf - $AUFSDIR | lzma e $TARBALL -si
    3.46 +		cd $AUFSDIR && git checkout origin/aufs2.1-37
    3.47 +		cd $WOK/$PACKAGE
    3.48 +	fi
    3.49 +	cp -a $AUFSDIR/Documentation $AUFSDIR/fs $AUFSDIR/include $src
    3.50 +	cp -a $AUFSDIR/*.patch $WOK/$PACKAGE/stuff
    3.51 +	# We need the real GNU patch
    3.52 +	[ -L /usr/bin/patch ] && tazpkg get-install patch --forced
    3.53 +	cd $src
    3.54 +	# SliTaz db
    3.55 +	[ -d slitaz ] && rm -rf slitaz 2> /dev/null
    3.56 +	mkdir slitaz
    3.57 +	echo "$WGET_URL" > slitaz/url
    3.58 +	cp ../stuff/gztazmod.sh ../stuff/list_modules.sh slitaz
    3.59 +	cp ../stuff/bootloader.sh slitaz
    3.60 +	# Apply patches
    3.61 +	while read patch_file; do
    3.62 +		echo "$patch_file" >> slitaz/patches
    3.63 +		cp ../stuff/$patch_file slitaz
    3.64 +		if [ -f done.$patch_file ]; then
    3.65 +			echo "Skipping $patch_file"
    3.66 +			continue
    3.67 +		fi
    3.68 +		echo "Apply $patch_file"
    3.69 +		patch -p1 < slitaz/$patch_file || exit 1
    3.70 +		touch done.$patch_file
    3.71 +	done <<EOT
    3.72 +$SOURCE-diff-$VERSION.u
    3.73 +$SOURCE-unlzma-$VERSION.u
    3.74 +$SOURCE-header-$VERSION.u
    3.75 +$SOURCE-freeinitrd-$VERSION.u
    3.76 +aufs2-base.patch
    3.77 +aufs2-standalone.patch
    3.78 +001-squashfs-decompressors-add-xz-decompressor-module.patch
    3.79 +002-squashfs-decompressors-add-boot-time-xz-support.patch
    3.80 +003-squashfs-x86-support-xz-compressed-kernel.patch
    3.81 +004-squashfs-add-xz-compression-support.patch
    3.82 +005-squashfs-add-xz-compression-configuration-option.patch
    3.83 +EOT
    3.84 +	make mrproper
    3.85 +	cd Documentation/lguest
    3.86 +####	make lguest || return 1
    3.87 +	cd ../..
    3.88 +
    3.89 +	# Build bzImage without modules first
    3.90 +	for i in isa lguest ; do
    3.91 +		cp -f ../stuff/$SOURCE-$VERSION-slitaz.config-$TARGET-$i .config
    3.92 +		# We can't keep every driver in staging 
    3.93 +		sed -i -e 's/^CONFIG_RTL8192/#&/' \
    3.94 +		       -e 's/^CONFIG_R8187SE/#&/' \
    3.95 +		       -e 's/^CONFIG_RT2870/#&/' .config
    3.96 +		yes '' | make oldconfig
    3.97 +		make -j 4 bzImage || return 1
    3.98 +		mv arch/x86/boot/bzImage kernel-$i
    3.99 +		mv System.map System.map-$i
   3.100 +		mv .config config-$i
   3.101 +	done
   3.102 +
   3.103 +	# Build bzImage with modules
   3.104 +	cp -f ../stuff/$SOURCE-$VERSION-slitaz.config-$TARGET-modular .config
   3.105 +	make oldconfig
   3.106 +	ln .config slitaz/config
   3.107 +	make -j 4 bzImage &&
   3.108 +	make -j 4 modules &&
   3.109 +	make INSTALL_MOD_PATH=$PWD/_pkg modules_install &&
   3.110 +	make INSTALL_HDR_PATH=$PWD/_pkg/usr headers_install &&
   3.111 +	[ -s arch/x86/boot/bzImage ] || return 1
   3.112 +	mkdir -p $PWD/_pkg/boot 2> /dev/null
   3.113 +	cp arch/x86/boot/bzImage kernel-modular
   3.114 +	cp System.map System.map-modular
   3.115 +	cp .config config-modular
   3.116 +	mv arch/x86/boot/bzImage $PWD/_pkg/boot/vmlinuz-$VERSION-slitaz
   3.117 +	# Compress all modules.
   3.118 +	$WOK/$PACKAGE/stuff/gztazmod.sh $PWD/_pkg/lib/modules/$VERSION-slitaz
   3.119 +	ln System.map System.map-modules
   3.120 +	ln Module.symvers Module.symvers-modules
   3.121 +}
   3.122 +
   3.123 +# Rules to gen a SliTaz package suitable for Tazpkg.
   3.124 +genpkg_rules()
   3.125 +{
   3.126 +    mkdir $fs/boot
   3.127 +    cp -a $_pkg/../$PACKAGE $fs/boot/bzImage
   3.128 +    cp -a $_pkg/../System.map-${PACKAGE#kernel-} $fs/boot/System.map
   3.129 +    cp -a $_pkg/../config-${PACKAGE#kernel-} $fs/boot/config
   3.130 +    # Compress all modules.
   3.131 +    #./stuff/gztazmod.sh $_pkg/lib/modules/$VERSION-slitaz
   3.132 +}
   3.133 +
   3.134 +# Pre and post install commands for Tazpkg.
   3.135 +post_install()
   3.136 +{
   3.137 +    echo "Processing post-install commands..."
   3.138 +    chroot "$1/" depmod -a $VERSION-slitaz
   3.139 +    # GRUB stuff.
   3.140 +    if [ -f "$1/boot/grub/menu.lst" ]; then
   3.141 +    	root_dev=`cat $1/boot/grub/menu.lst | grep root= | sed 's/.*root=\([^ ]*\).*/\1/' | head -n 1`
   3.142 +		grub_dev=`cat $1/boot/grub/menu.lst | grep "root (" | head -n 1`
   3.143 +		# Add new kernel entry in case of upgrade for installed system.
   3.144 +		if ! grep -q $SOURCE-$VERSION-slitaz $1/boot/grub/menu.lst; then
   3.145 +    		cat >> $1/boot/grub/menu.lst << EOT
   3.146 +
   3.147 +title SliTaz GNU/Linux (Kernel $VERSION-slitaz)
   3.148 +$grub_dev
   3.149 +kernel /boot/vmlinuz-$VERSION-slitaz root=$root_dev
   3.150 +EOT
   3.151 +		fi
   3.152 +		# Display information message.
   3.153 +    	cat <<EOT
   3.154 +----
   3.155 +GRUB is installed, these tree lines must be in your /boot/grub/menu.lst:
   3.156 +
   3.157 +title  SliTaz GNU/Linux (Kernel $VERSION-slitaz)
   3.158 +$grub_dev
   3.159 +kernel /boot/vmlinuz-$VERSION-slitaz root=$root_dev
   3.160 +----
   3.161 +EOT
   3.162 +	fi
   3.163 +}
   3.164 +
   3.165 +clean_wok()
   3.166 +{
   3.167 +	#rm -rf aufs2
   3.168 +	rm stuff/aufs2-base*
   3.169 +	rm stuff/aufs2-standalone*
   3.170 +	rm stuff/aufs2-kbuild*
   3.171 +	rm -rf stuff/tmp
   3.172 +}
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/kernel-modular/stuff/001-squashfs-decompressors-add-xz-decompressor-module.patch	Tue Feb 01 09:37:33 2011 +0100
     4.3 @@ -0,0 +1,3934 @@
     4.4 +From: Lasse Collin <lasse.collin@tukaani.org>
     4.5 +Date: Thu, 2 Dec 2010 19:14:19 +0000 (+0200)
     4.6 +Subject: Decompressors: Add XZ decompressor module
     4.7 +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fpkl%2Fsquashfs-xz.git;a=commitdiff_plain;h=3dbc3fe7878e53b43064a12d4ab31ca4c18ce85f
     4.8 +
     4.9 +Decompressors: Add XZ decompressor module
    4.10 +
    4.11 +In userspace, the .lzma format has become mostly a legacy
    4.12 +file format that got superseded by the .xz format. Similarly,
    4.13 +LZMA Utils was superseded by XZ Utils.
    4.14 +
    4.15 +These patches add support for XZ decompression into
    4.16 +the kernel. Most of the code is as is from XZ Embedded
    4.17 +<http://tukaani.org/xz/embedded.html>. It was written for
    4.18 +the Linux kernel but is usable in other projects too.
    4.19 +
    4.20 +Advantages of XZ over the current LZMA code in the kernel:
    4.21 +  - Nice API that can be used by other kernel modules; it's
    4.22 +    not limited to kernel, initramfs, and initrd decompression.
    4.23 +  - Integrity check support (CRC32)
    4.24 +  - BCJ filters improve compression of executable code on
    4.25 +    certain architectures. These together with LZMA2 can
    4.26 +    produce a few percent smaller kernel or Squashfs images
    4.27 +    than plain LZMA without making the decompression slower.
    4.28 +
    4.29 +This patch: Add the main decompression code (xz_dec), testing
    4.30 +module (xz_dec_test), wrapper script (xz_wrap.sh) for the xz
    4.31 +command line tool, and documentation. The xz_dec module is
    4.32 +enough to have a usable XZ decompressor e.g. for Squashfs.
    4.33 +
    4.34 +Signed-off-by: Lasse Collin <lasse.collin@tukaani.org>
    4.35 +---
    4.36 +
    4.37 +diff --git a/Documentation/xz.txt b/Documentation/xz.txt
    4.38 +new file mode 100644
    4.39 +index 0000000..68329ac
    4.40 +--- /dev/null
    4.41 ++++ b/Documentation/xz.txt
    4.42 +@@ -0,0 +1,122 @@
    4.43 ++
    4.44 ++XZ data compression in Linux
    4.45 ++============================
    4.46 ++
    4.47 ++Introduction
    4.48 ++
    4.49 ++    XZ is a general purpose data compression format with high compression
    4.50 ++    ratio and relatively fast decompression. The primary compression
    4.51 ++    algorithm (filter) is LZMA2. Additional filters can be used to improve
    4.52 ++    compression ratio even further. E.g. Branch/Call/Jump (BCJ) filters
    4.53 ++    improve compression ratio of executable data.
    4.54 ++
    4.55 ++    The XZ decompressor in Linux is called XZ Embedded. It supports
    4.56 ++    the LZMA2 filter and optionally also BCJ filters. CRC32 is supported
    4.57 ++    for integrity checking. The home page of XZ Embedded is at
    4.58 ++    <http://tukaani.org/xz/embedded.html>, where you can find the
    4.59 ++    latest version and also information about using the code outside
    4.60 ++    the Linux kernel.
    4.61 ++
    4.62 ++    For userspace, XZ Utils provide a zlib-like compression library
    4.63 ++    and a gzip-like command line tool. XZ Utils can be downloaded from
    4.64 ++    <http://tukaani.org/xz/>.
    4.65 ++
    4.66 ++XZ related components in the kernel
    4.67 ++
    4.68 ++    The xz_dec module provides XZ decompressor with single-call (buffer
    4.69 ++    to buffer) and multi-call (stateful) APIs. The usage of the xz_dec
    4.70 ++    module is documented in include/linux/xz.h.
    4.71 ++
    4.72 ++    The xz_dec_test module is for testing xz_dec. xz_dec_test is not
    4.73 ++    useful unless you are hacking the XZ decompressor. xz_dec_test
    4.74 ++    allocates a char device major dynamically to which one can write
    4.75 ++    .xz files from userspace. The decompressed output is thrown away.
    4.76 ++    Keep an eye on dmesg to see diagnostics printed by xz_dec_test.
    4.77 ++    See the xz_dec_test source code for the details.
    4.78 ++
    4.79 ++    For decompressing the kernel image, initramfs, and initrd, there
    4.80 ++    is a wrapper function in lib/decompress_unxz.c. Its API is the
    4.81 ++    same as in other decompress_*.c files, which is defined in
    4.82 ++    include/linux/decompress/generic.h.
    4.83 ++
    4.84 ++    scripts/xz_wrap.sh is a wrapper for the xz command line tool found
    4.85 ++    from XZ Utils. The wrapper sets compression options to values suitable
    4.86 ++    for compressing the kernel image.
    4.87 ++
    4.88 ++    For kernel makefiles, two commands are provided for use with
    4.89 ++    $(call if_needed). The kernel image should be compressed with
    4.90 ++    $(call if_needed,xzkern) which will use a BCJ filter and a big LZMA2
    4.91 ++    dictionary. It will also append a four-byte trailer containing the
    4.92 ++    uncompressed size of the file, which is needed by the boot code.
    4.93 ++    Other things should be compressed with $(call if_needed,xzmisc)
    4.94 ++    which will use no BCJ filter and 1 MiB LZMA2 dictionary.
    4.95 ++
    4.96 ++Notes on compression options
    4.97 ++
    4.98 ++    Since the XZ Embedded supports only streams with no integrity check or
    4.99 ++    CRC32, make sure that you don't use some other integrity check type
   4.100 ++    when encoding files that are supposed to be decoded by the kernel. With
   4.101 ++    liblzma, you need to use either LZMA_CHECK_NONE or LZMA_CHECK_CRC32
   4.102 ++    when encoding. With the xz command line tool, use --check=none or
   4.103 ++    --check=crc32.
   4.104 ++
   4.105 ++    Using CRC32 is strongly recommended unless there is some other layer
   4.106 ++    which will verify the integrity of the uncompressed data anyway.
   4.107 ++    Double checking the integrity would probably be waste of CPU cycles.
   4.108 ++    Note that the headers will always have a CRC32 which will be validated
   4.109 ++    by the decoder; you can only change the integrity check type (or
   4.110 ++    disable it) for the actual uncompressed data.
   4.111 ++
   4.112 ++    In userspace, LZMA2 is typically used with dictionary sizes of several
   4.113 ++    megabytes. The decoder needs to have the dictionary in RAM, thus big
   4.114 ++    dictionaries cannot be used for files that are intended to be decoded
   4.115 ++    by the kernel. 1 MiB is probably the maximum reasonable dictionary
   4.116 ++    size for in-kernel use (maybe more is OK for initramfs). The presets
   4.117 ++    in XZ Utils may not be optimal when creating files for the kernel,
   4.118 ++    so don't hesitate to use custom settings. Example:
   4.119 ++
   4.120 ++        xz --check=crc32 --lzma2=dict=512KiB inputfile
   4.121 ++
   4.122 ++    An exception to above dictionary size limitation is when the decoder
   4.123 ++    is used in single-call mode. Decompressing the kernel itself is an
   4.124 ++    example of this situation. In single-call mode, the memory usage
   4.125 ++    doesn't depend on the dictionary size, and it is perfectly fine to
   4.126 ++    use a big dictionary: for maximum compression, the dictionary should
   4.127 ++    be at least as big as the uncompressed data itself.
   4.128 ++
   4.129 ++Future plans
   4.130 ++
   4.131 ++    Creating a limited XZ encoder may be considered if people think it is
   4.132 ++    useful. LZMA2 is slower to compress than e.g. Deflate or LZO even at
   4.133 ++    the fastest settings, so it isn't clear if LZMA2 encoder is wanted
   4.134 ++    into the kernel.
   4.135 ++
   4.136 ++    Support for limited random-access reading is planned for the
   4.137 ++    decompression code. I don't know if it could have any use in the
   4.138 ++    kernel, but I know that it would be useful in some embedded projects
   4.139 ++    outside the Linux kernel.
   4.140 ++
   4.141 ++Conformance to the .xz file format specification
   4.142 ++
   4.143 ++    There are a couple of corner cases where things have been simplified
   4.144 ++    at expense of detecting errors as early as possible. These should not
   4.145 ++    matter in practice all, since they don't cause security issues. But
   4.146 ++    it is good to know this if testing the code e.g. with the test files
   4.147 ++    from XZ Utils.
   4.148 ++
   4.149 ++Reporting bugs
   4.150 ++
   4.151 ++    Before reporting a bug, please check that it's not fixed already
   4.152 ++    at upstream. See <http://tukaani.org/xz/embedded.html> to get the
   4.153 ++    latest code.
   4.154 ++
   4.155 ++    Report bugs to <lasse.collin@tukaani.org> or visit #tukaani on
   4.156 ++    Freenode and talk to Larhzu. I don't actively read LKML or other
   4.157 ++    kernel-related mailing lists, so if there's something I should know,
   4.158 ++    you should email to me personally or use IRC.
   4.159 ++
   4.160 ++    Don't bother Igor Pavlov with questions about the XZ implementation
   4.161 ++    in the kernel or about XZ Utils. While these two implementations
   4.162 ++    include essential code that is directly based on Igor Pavlov's code,
   4.163 ++    these implementations aren't maintained nor supported by him.
   4.164 ++
   4.165 +diff --git a/include/linux/xz.h b/include/linux/xz.h
   4.166 +new file mode 100644
   4.167 +index 0000000..64cffa6
   4.168 +--- /dev/null
   4.169 ++++ b/include/linux/xz.h
   4.170 +@@ -0,0 +1,264 @@
   4.171 ++/*
   4.172 ++ * XZ decompressor
   4.173 ++ *
   4.174 ++ * Authors: Lasse Collin <lasse.collin@tukaani.org>
   4.175 ++ *          Igor Pavlov <http://7-zip.org/>
   4.176 ++ *
   4.177 ++ * This file has been put into the public domain.
   4.178 ++ * You can do whatever you want with this file.
   4.179 ++ */
   4.180 ++
   4.181 ++#ifndef XZ_H
   4.182 ++#define XZ_H
   4.183 ++
   4.184 ++#ifdef __KERNEL__
   4.185 ++#	include <linux/stddef.h>
   4.186 ++#	include <linux/types.h>
   4.187 ++#else
   4.188 ++#	include <stddef.h>
   4.189 ++#	include <stdint.h>
   4.190 ++#endif
   4.191 ++
   4.192 ++/* In Linux, this is used to make extern functions static when needed. */
   4.193 ++#ifndef XZ_EXTERN
   4.194 ++#	define XZ_EXTERN extern
   4.195 ++#endif
   4.196 ++
   4.197 ++/**
   4.198 ++ * enum xz_mode - Operation mode
   4.199 ++ *
   4.200 ++ * @XZ_SINGLE:              Single-call mode. This uses less RAM than
   4.201 ++ *                          than multi-call modes, because the LZMA2
   4.202 ++ *                          dictionary doesn't need to be allocated as
   4.203 ++ *                          part of the decoder state. All required data
   4.204 ++ *                          structures are allocated at initialization,
   4.205 ++ *                          so xz_dec_run() cannot return XZ_MEM_ERROR.
   4.206 ++ * @XZ_PREALLOC:            Multi-call mode with preallocated LZMA2
   4.207 ++ *                          dictionary buffer. All data structures are
   4.208 ++ *                          allocated at initialization, so xz_dec_run()
   4.209 ++ *                          cannot return XZ_MEM_ERROR.
   4.210 ++ * @XZ_DYNALLOC:            Multi-call mode. The LZMA2 dictionary is
   4.211 ++ *                          allocated once the required size has been
   4.212 ++ *                          parsed from the stream headers. If the
   4.213 ++ *                          allocation fails, xz_dec_run() will return
   4.214 ++ *                          XZ_MEM_ERROR.
   4.215 ++ *
   4.216 ++ * It is possible to enable support only for a subset of the above
   4.217 ++ * modes at compile time by defining XZ_DEC_SINGLE, XZ_DEC_PREALLOC,
   4.218 ++ * or XZ_DEC_DYNALLOC. The xz_dec kernel module is always compiled
   4.219 ++ * with support for all operation modes, but the preboot code may
   4.220 ++ * be built with fewer features to minimize code size.
   4.221 ++ */
   4.222 ++enum xz_mode {
   4.223 ++	XZ_SINGLE,
   4.224 ++	XZ_PREALLOC,
   4.225 ++	XZ_DYNALLOC
   4.226 ++};
   4.227 ++
   4.228 ++/**
   4.229 ++ * enum xz_ret - Return codes
   4.230 ++ * @XZ_OK:                  Everything is OK so far. More input or more
   4.231 ++ *                          output space is required to continue. This
   4.232 ++ *                          return code is possible only in multi-call mode
   4.233 ++ *                          (XZ_PREALLOC or XZ_DYNALLOC).
   4.234 ++ * @XZ_STREAM_END:          Operation finished successfully.
   4.235 ++ * @XZ_UNSUPPORTED_CHECK:   Integrity check type is not supported. Decoding
   4.236 ++ *                          is still possible in multi-call mode by simply
   4.237 ++ *                          calling xz_dec_run() again.
   4.238 ++ *                          Note that this return value is used only if
   4.239 ++ *                          XZ_DEC_ANY_CHECK was defined at build time,
   4.240 ++ *                          which is not used in the kernel. Unsupported
   4.241 ++ *                          check types return XZ_OPTIONS_ERROR if
   4.242 ++ *                          XZ_DEC_ANY_CHECK was not defined at build time.
   4.243 ++ * @XZ_MEM_ERROR:           Allocating memory failed. This return code is
   4.244 ++ *                          possible only if the decoder was initialized
   4.245 ++ *                          with XZ_DYNALLOC. The amount of memory that was
   4.246 ++ *                          tried to be allocated was no more than the
   4.247 ++ *                          dict_max argument given to xz_dec_init().
   4.248 ++ * @XZ_MEMLIMIT_ERROR:      A bigger LZMA2 dictionary would be needed than
   4.249 ++ *                          allowed by the dict_max argument given to
   4.250 ++ *                          xz_dec_init(). This return value is possible
   4.251 ++ *                          only in multi-call mode (XZ_PREALLOC or
   4.252 ++ *                          XZ_DYNALLOC); the single-call mode (XZ_SINGLE)
   4.253 ++ *                          ignores the dict_max argument.
   4.254 ++ * @XZ_FORMAT_ERROR:        File format was not recognized (wrong magic
   4.255 ++ *                          bytes).
   4.256 ++ * @XZ_OPTIONS_ERROR:       This implementation doesn't support the requested
   4.257 ++ *                          compression options. In the decoder this means
   4.258 ++ *                          that the header CRC32 matches, but the header
   4.259 ++ *                          itself specifies something that we don't support.
   4.260 ++ * @XZ_DATA_ERROR:          Compressed data is corrupt.
   4.261 ++ * @XZ_BUF_ERROR:           Cannot make any progress. Details are slightly
   4.262 ++ *                          different between multi-call and single-call
   4.263 ++ *                          mode; more information below.
   4.264 ++ *
   4.265 ++ * In multi-call mode, XZ_BUF_ERROR is returned when two consecutive calls
   4.266 ++ * to XZ code cannot consume any input and cannot produce any new output.
   4.267 ++ * This happens when there is no new input available, or the output buffer
   4.268 ++ * is full while at least one output byte is still pending. Assuming your
   4.269 ++ * code is not buggy, you can get this error only when decoding a compressed
   4.270 ++ * stream that is truncated or otherwise corrupt.
   4.271 ++ *
   4.272 ++ * In single-call mode, XZ_BUF_ERROR is returned only when the output buffer
   4.273 ++ * is too small or the compressed input is corrupt in a way that makes the
   4.274 ++ * decoder produce more output than the caller expected. When it is
   4.275 ++ * (relatively) clear that the compressed input is truncated, XZ_DATA_ERROR
   4.276 ++ * is used instead of XZ_BUF_ERROR.
   4.277 ++ */
   4.278 ++enum xz_ret {
   4.279 ++	XZ_OK,
   4.280 ++	XZ_STREAM_END,
   4.281 ++	XZ_UNSUPPORTED_CHECK,
   4.282 ++	XZ_MEM_ERROR,
   4.283 ++	XZ_MEMLIMIT_ERROR,
   4.284 ++	XZ_FORMAT_ERROR,
   4.285 ++	XZ_OPTIONS_ERROR,
   4.286 ++	XZ_DATA_ERROR,
   4.287 ++	XZ_BUF_ERROR
   4.288 ++};
   4.289 ++
   4.290 ++/**
   4.291 ++ * struct xz_buf - Passing input and output buffers to XZ code
   4.292 ++ * @in:         Beginning of the input buffer. This may be NULL if and only
   4.293 ++ *              if in_pos is equal to in_size.
   4.294 ++ * @in_pos:     Current position in the input buffer. This must not exceed
   4.295 ++ *              in_size.
   4.296 ++ * @in_size:    Size of the input buffer
   4.297 ++ * @out:        Beginning of the output buffer. This may be NULL if and only
   4.298 ++ *              if out_pos is equal to out_size.
   4.299 ++ * @out_pos:    Current position in the output buffer. This must not exceed
   4.300 ++ *              out_size.
   4.301 ++ * @out_size:   Size of the output buffer
   4.302 ++ *
   4.303 ++ * Only the contents of the output buffer from out[out_pos] onward, and
   4.304 ++ * the variables in_pos and out_pos are modified by the XZ code.
   4.305 ++ */
   4.306 ++struct xz_buf {
   4.307 ++	const uint8_t *in;
   4.308 ++	size_t in_pos;
   4.309 ++	size_t in_size;
   4.310 ++
   4.311 ++	uint8_t *out;
   4.312 ++	size_t out_pos;
   4.313 ++	size_t out_size;
   4.314 ++};
   4.315 ++
   4.316 ++/**
   4.317 ++ * struct xz_dec - Opaque type to hold the XZ decoder state
   4.318 ++ */
   4.319 ++struct xz_dec;
   4.320 ++
   4.321 ++/**
   4.322 ++ * xz_dec_init() - Allocate and initialize a XZ decoder state
   4.323 ++ * @mode:       Operation mode
   4.324 ++ * @dict_max:   Maximum size of the LZMA2 dictionary (history buffer) for
   4.325 ++ *              multi-call decoding. This is ignored in single-call mode
   4.326 ++ *              (mode == XZ_SINGLE). LZMA2 dictionary is always 2^n bytes
   4.327 ++ *              or 2^n + 2^(n-1) bytes (the latter sizes are less common
   4.328 ++ *              in practice), so other values for dict_max don't make sense.
   4.329 ++ *              In the kernel, dictionary sizes of 64 KiB, 128 KiB, 256 KiB,
   4.330 ++ *              512 KiB, and 1 MiB are probably the only reasonable values,
   4.331 ++ *              except for kernel and initramfs images where a bigger
   4.332 ++ *              dictionary can be fine and useful.
   4.333 ++ *
   4.334 ++ * Single-call mode (XZ_SINGLE): xz_dec_run() decodes the whole stream at
   4.335 ++ * once. The caller must provide enough output space or the decoding will
   4.336 ++ * fail. The output space is used as the dictionary buffer, which is why
   4.337 ++ * there is no need to allocate the dictionary as part of the decoder's
   4.338 ++ * internal state.
   4.339 ++ *
   4.340 ++ * Because the output buffer is used as the workspace, streams encoded using
   4.341 ++ * a big dictionary are not a problem in single-call mode. It is enough that
   4.342 ++ * the output buffer is big enough to hold the actual uncompressed data; it
   4.343 ++ * can be smaller than the dictionary size stored in the stream headers.
   4.344 ++ *
   4.345 ++ * Multi-call mode with preallocated dictionary (XZ_PREALLOC): dict_max bytes
   4.346 ++ * of memory is preallocated for the LZMA2 dictionary. This way there is no
   4.347 ++ * risk that xz_dec_run() could run out of memory, since xz_dec_run() will
   4.348 ++ * never allocate any memory. Instead, if the preallocated dictionary is too
   4.349 ++ * small for decoding the given input stream, xz_dec_run() will return
   4.350 ++ * XZ_MEMLIMIT_ERROR. Thus, it is important to know what kind of data will be
   4.351 ++ * decoded to avoid allocating excessive amount of memory for the dictionary.
   4.352 ++ *
   4.353 ++ * Multi-call mode with dynamically allocated dictionary (XZ_DYNALLOC):
   4.354 ++ * dict_max specifies the maximum allowed dictionary size that xz_dec_run()
   4.355 ++ * may allocate once it has parsed the dictionary size from the stream
   4.356 ++ * headers. This way excessive allocations can be avoided while still
   4.357 ++ * limiting the maximum memory usage to a sane value to prevent running the
   4.358 ++ * system out of memory when decompressing streams from untrusted sources.
   4.359 ++ *
   4.360 ++ * On success, xz_dec_init() returns a pointer to struct xz_dec, which is
   4.361 ++ * ready to be used with xz_dec_run(). If memory allocation fails,
   4.362 ++ * xz_dec_init() returns NULL.
   4.363 ++ */
   4.364 ++XZ_EXTERN struct xz_dec *xz_dec_init(enum xz_mode mode, uint32_t dict_max);
   4.365 ++
   4.366 ++/**
   4.367 ++ * xz_dec_run() - Run the XZ decoder
   4.368 ++ * @s:          Decoder state allocated using xz_dec_init()
   4.369 ++ * @b:          Input and output buffers
   4.370 ++ *
   4.371 ++ * The possible return values depend on build options and operation mode.
   4.372 ++ * See enum xz_ret for details.
   4.373 ++ *
   4.374 ++ * Note that if an error occurs in single-call mode (return value is not
   4.375 ++ * XZ_STREAM_END), b->in_pos and b->out_pos are not modified and the
   4.376 ++ * contents of the output buffer from b->out[b->out_pos] onward are
   4.377 ++ * undefined. This is true even after XZ_BUF_ERROR, because with some filter
   4.378 ++ * chains, there may be a second pass over the output buffer, and this pass
   4.379 ++ * cannot be properly done if the output buffer is truncated. Thus, you
   4.380 ++ * cannot give the single-call decoder a too small buffer and then expect to
   4.381 ++ * get that amount valid data from the beginning of the stream. You must use
   4.382 ++ * the multi-call decoder if you don't want to uncompress the whole stream.
   4.383 ++ */
   4.384 ++XZ_EXTERN enum xz_ret xz_dec_run(struct xz_dec *s, struct xz_buf *b);
   4.385 ++
   4.386 ++/**
   4.387 ++ * xz_dec_reset() - Reset an already allocated decoder state
   4.388 ++ * @s:          Decoder state allocated using xz_dec_init()
   4.389 ++ *
   4.390 ++ * This function can be used to reset the multi-call decoder state without
   4.391 ++ * freeing and reallocating memory with xz_dec_end() and xz_dec_init().
   4.392 ++ *
   4.393 ++ * In single-call mode, xz_dec_reset() is always called in the beginning of
   4.394 ++ * xz_dec_run(). Thus, explicit call to xz_dec_reset() is useful only in
   4.395 ++ * multi-call mode.
   4.396 ++ */
   4.397 ++XZ_EXTERN void xz_dec_reset(struct xz_dec *s);
   4.398 ++
   4.399 ++/**
   4.400 ++ * xz_dec_end() - Free the memory allocated for the decoder state
   4.401 ++ * @s:          Decoder state allocated using xz_dec_init(). If s is NULL,
   4.402 ++ *              this function does nothing.
   4.403 ++ */
   4.404 ++XZ_EXTERN void xz_dec_end(struct xz_dec *s);
   4.405 ++
   4.406 ++/*
   4.407 ++ * Standalone build (userspace build or in-kernel build for boot time use)
   4.408 ++ * needs a CRC32 implementation. For normal in-kernel use, kernel's own
   4.409 ++ * CRC32 module is used instead, and users of this module don't need to
   4.410 ++ * care about the functions below.
   4.411 ++ */
   4.412 ++#ifndef XZ_INTERNAL_CRC32
   4.413 ++#	ifdef __KERNEL__
   4.414 ++#		define XZ_INTERNAL_CRC32 0
   4.415 ++#	else
   4.416 ++#		define XZ_INTERNAL_CRC32 1
   4.417 ++#	endif
   4.418 ++#endif
   4.419 ++
   4.420 ++#if XZ_INTERNAL_CRC32
   4.421 ++/*
   4.422 ++ * This must be called before any other xz_* function to initialize
   4.423 ++ * the CRC32 lookup table.
   4.424 ++ */
   4.425 ++XZ_EXTERN void xz_crc32_init(void);
   4.426 ++
   4.427 ++/*
   4.428 ++ * Update CRC32 value using the polynomial from IEEE-802.3. To start a new
   4.429 ++ * calculation, the third argument must be zero. To continue the calculation,
   4.430 ++ * the previously returned value is passed as the third argument.
   4.431 ++ */
   4.432 ++XZ_EXTERN uint32_t xz_crc32(const uint8_t *buf, size_t size, uint32_t crc);
   4.433 ++#endif
   4.434 ++#endif
   4.435 +diff --git a/lib/Kconfig b/lib/Kconfig
   4.436 +index fa9bf2c..6090314 100644
   4.437 +--- a/lib/Kconfig
   4.438 ++++ b/lib/Kconfig
   4.439 +@@ -106,6 +106,8 @@ config LZO_COMPRESS
   4.440 + config LZO_DECOMPRESS
   4.441 + 	tristate
   4.442 + 
   4.443 ++source "lib/xz/Kconfig"
   4.444 ++
   4.445 + #
   4.446 + # These all provide a common interface (hence the apparent duplication with
   4.447 + # ZLIB_INFLATE; DECOMPRESS_GZIP is just a wrapper.)
   4.448 +diff --git a/lib/Makefile b/lib/Makefile
   4.449 +index e6a3763..f2f98dd 100644
   4.450 +--- a/lib/Makefile
   4.451 ++++ b/lib/Makefile
   4.452 +@@ -69,6 +69,7 @@ obj-$(CONFIG_ZLIB_DEFLATE) += zlib_deflate/
   4.453 + obj-$(CONFIG_REED_SOLOMON) += reed_solomon/
   4.454 + obj-$(CONFIG_LZO_COMPRESS) += lzo/
   4.455 + obj-$(CONFIG_LZO_DECOMPRESS) += lzo/
   4.456 ++obj-$(CONFIG_XZ_DEC) += xz/
   4.457 + obj-$(CONFIG_RAID6_PQ) += raid6/
   4.458 + 
   4.459 + lib-$(CONFIG_DECOMPRESS_GZIP) += decompress_inflate.o
   4.460 +diff --git a/lib/xz/Kconfig b/lib/xz/Kconfig
   4.461 +new file mode 100644
   4.462 +index 0000000..e3b6e18
   4.463 +--- /dev/null
   4.464 ++++ b/lib/xz/Kconfig
   4.465 +@@ -0,0 +1,59 @@
   4.466 ++config XZ_DEC
   4.467 ++	tristate "XZ decompression support"
   4.468 ++	select CRC32
   4.469 ++	help
   4.470 ++	  LZMA2 compression algorithm and BCJ filters are supported using
   4.471 ++	  the .xz file format as the container. For integrity checking,
   4.472 ++	  CRC32 is supported. See Documentation/xz.txt for more information.
   4.473 ++
   4.474 ++config XZ_DEC_X86
   4.475 ++	bool "x86 BCJ filter decoder" if EMBEDDED
   4.476 ++	default y
   4.477 ++	depends on XZ_DEC
   4.478 ++	select XZ_DEC_BCJ
   4.479 ++
   4.480 ++config XZ_DEC_POWERPC
   4.481 ++	bool "PowerPC BCJ filter decoder" if EMBEDDED
   4.482 ++	default y
   4.483 ++	depends on XZ_DEC
   4.484 ++	select XZ_DEC_BCJ
   4.485 ++
   4.486 ++config XZ_DEC_IA64
   4.487 ++	bool "IA-64 BCJ filter decoder" if EMBEDDED
   4.488 ++	default y
   4.489 ++	depends on XZ_DEC
   4.490 ++	select XZ_DEC_BCJ
   4.491 ++
   4.492 ++config XZ_DEC_ARM
   4.493 ++	bool "ARM BCJ filter decoder" if EMBEDDED
   4.494 ++	default y
   4.495 ++	depends on XZ_DEC
   4.496 ++	select XZ_DEC_BCJ
   4.497 ++
   4.498 ++config XZ_DEC_ARMTHUMB
   4.499 ++	bool "ARM-Thumb BCJ filter decoder" if EMBEDDED
   4.500 ++	default y
   4.501 ++	depends on XZ_DEC
   4.502 ++	select XZ_DEC_BCJ
   4.503 ++
   4.504 ++config XZ_DEC_SPARC
   4.505 ++	bool "SPARC BCJ filter decoder" if EMBEDDED
   4.506 ++	default y
   4.507 ++	depends on XZ_DEC
   4.508 ++	select XZ_DEC_BCJ
   4.509 ++
   4.510 ++config XZ_DEC_BCJ
   4.511 ++	bool
   4.512 ++	default n
   4.513 ++
   4.514 ++config XZ_DEC_TEST
   4.515 ++	tristate "XZ decompressor tester"
   4.516 ++	default n
   4.517 ++	depends on XZ_DEC
   4.518 ++	help
   4.519 ++	  This allows passing .xz files to the in-kernel XZ decoder via
   4.520 ++	  a character special file. It calculates CRC32 of the decompressed
   4.521 ++	  data and writes diagnostics to the system log.
   4.522 ++
   4.523 ++	  Unless you are developing the XZ decoder, you don't need this
   4.524 ++	  and should say N.
   4.525 +diff --git a/lib/xz/Makefile b/lib/xz/Makefile
   4.526 +new file mode 100644
   4.527 +index 0000000..a7fa769
   4.528 +--- /dev/null
   4.529 ++++ b/lib/xz/Makefile
   4.530 +@@ -0,0 +1,5 @@
   4.531 ++obj-$(CONFIG_XZ_DEC) += xz_dec.o
   4.532 ++xz_dec-y := xz_dec_syms.o xz_dec_stream.o xz_dec_lzma2.o
   4.533 ++xz_dec-$(CONFIG_XZ_DEC_BCJ) += xz_dec_bcj.o
   4.534 ++
   4.535 ++obj-$(CONFIG_XZ_DEC_TEST) += xz_dec_test.o
   4.536 +diff --git a/lib/xz/xz_crc32.c b/lib/xz/xz_crc32.c
   4.537 +new file mode 100644
   4.538 +index 0000000..34532d1
   4.539 +--- /dev/null
   4.540 ++++ b/lib/xz/xz_crc32.c
   4.541 +@@ -0,0 +1,59 @@
   4.542 ++/*
   4.543 ++ * CRC32 using the polynomial from IEEE-802.3
   4.544 ++ *
   4.545 ++ * Authors: Lasse Collin <lasse.collin@tukaani.org>
   4.546 ++ *          Igor Pavlov <http://7-zip.org/>
   4.547 ++ *
   4.548 ++ * This file has been put into the public domain.
   4.549 ++ * You can do whatever you want with this file.
   4.550 ++ */
   4.551 ++
   4.552 ++/*
   4.553 ++ * This is not the fastest implementation, but it is pretty compact.
   4.554 ++ * The fastest versions of xz_crc32() on modern CPUs without hardware
   4.555 ++ * accelerated CRC instruction are 3-5 times as fast as this version,
   4.556 ++ * but they are bigger and use more memory for the lookup table.
   4.557 ++ */
   4.558 ++
   4.559 ++#include "xz_private.h"
   4.560 ++
   4.561 ++/*
   4.562 ++ * STATIC_RW_DATA is used in the pre-boot environment on some architectures.
   4.563 ++ * See <linux/decompress/mm.h> for details.
   4.564 ++ */
   4.565 ++#ifndef STATIC_RW_DATA
   4.566 ++#	define STATIC_RW_DATA static
   4.567 ++#endif
   4.568 ++
   4.569 ++STATIC_RW_DATA uint32_t xz_crc32_table[256];
   4.570 ++
   4.571 ++XZ_EXTERN void xz_crc32_init(void)
   4.572 ++{
   4.573 ++	const uint32_t poly = 0xEDB88320;
   4.574 ++
   4.575 ++	uint32_t i;
   4.576 ++	uint32_t j;
   4.577 ++	uint32_t r;
   4.578 ++
   4.579 ++	for (i = 0; i < 256; ++i) {
   4.580 ++		r = i;
   4.581 ++		for (j = 0; j < 8; ++j)
   4.582 ++			r = (r >> 1) ^ (poly & ~((r & 1) - 1));
   4.583 ++
   4.584 ++		xz_crc32_table[i] = r;
   4.585 ++	}
   4.586 ++
   4.587 ++	return;
   4.588 ++}
   4.589 ++
   4.590 ++XZ_EXTERN uint32_t xz_crc32(const uint8_t *buf, size_t size, uint32_t crc)
   4.591 ++{
   4.592 ++	crc = ~crc;
   4.593 ++
   4.594 ++	while (size != 0) {
   4.595 ++		crc = xz_crc32_table[*buf++ ^ (crc & 0xFF)] ^ (crc >> 8);
   4.596 ++		--size;
   4.597 ++	}
   4.598 ++
   4.599 ++	return ~crc;
   4.600 ++}
   4.601 +diff --git a/lib/xz/xz_dec_bcj.c b/lib/xz/xz_dec_bcj.c
   4.602 +new file mode 100644
   4.603 +index 0000000..e51e255
   4.604 +--- /dev/null
   4.605 ++++ b/lib/xz/xz_dec_bcj.c
   4.606 +@@ -0,0 +1,561 @@
   4.607 ++/*
   4.608 ++ * Branch/Call/Jump (BCJ) filter decoders
   4.609 ++ *
   4.610 ++ * Authors: Lasse Collin <lasse.collin@tukaani.org>
   4.611 ++ *          Igor Pavlov <http://7-zip.org/>
   4.612 ++ *
   4.613 ++ * This file has been put into the public domain.
   4.614 ++ * You can do whatever you want with this file.
   4.615 ++ */
   4.616 ++
   4.617 ++#include "xz_private.h"
   4.618 ++
   4.619 ++/*
   4.620 ++ * The rest of the file is inside this ifdef. It makes things a little more
   4.621 ++ * convenient when building without support for any BCJ filters.
   4.622 ++ */
   4.623 ++#ifdef XZ_DEC_BCJ
   4.624 ++
   4.625 ++struct xz_dec_bcj {
   4.626 ++	/* Type of the BCJ filter being used */
   4.627 ++	enum {
   4.628 ++		BCJ_X86 = 4,        /* x86 or x86-64 */
   4.629 ++		BCJ_POWERPC = 5,    /* Big endian only */
   4.630 ++		BCJ_IA64 = 6,       /* Big or little endian */
   4.631 ++		BCJ_ARM = 7,        /* Little endian only */
   4.632 ++		BCJ_ARMTHUMB = 8,   /* Little endian only */
   4.633 ++		BCJ_SPARC = 9       /* Big or little endian */
   4.634 ++	} type;
   4.635 ++
   4.636 ++	/*
   4.637 ++	 * Return value of the next filter in the chain. We need to preserve
   4.638 ++	 * this information across calls, because we must not call the next
   4.639 ++	 * filter anymore once it has returned XZ_STREAM_END.
   4.640 ++	 */
   4.641 ++	enum xz_ret ret;
   4.642 ++
   4.643 ++	/* True if we are operating in single-call mode. */
   4.644 ++	bool single_call;
   4.645 ++
   4.646 ++	/*
   4.647 ++	 * Absolute position relative to the beginning of the uncompressed
   4.648 ++	 * data (in a single .xz Block). We care only about the lowest 32
   4.649 ++	 * bits so this doesn't need to be uint64_t even with big files.
   4.650 ++	 */
   4.651 ++	uint32_t pos;
   4.652 ++
   4.653 ++	/* x86 filter state */
   4.654 ++	uint32_t x86_prev_mask;
   4.655 ++
   4.656 ++	/* Temporary space to hold the variables from struct xz_buf */
   4.657 ++	uint8_t *out;
   4.658 ++	size_t out_pos;
   4.659 ++	size_t out_size;
   4.660 ++
   4.661 ++	struct {
   4.662 ++		/* Amount of already filtered data in the beginning of buf */
   4.663 ++		size_t filtered;
   4.664 ++
   4.665 ++		/* Total amount of data currently stored in buf  */
   4.666 ++		size_t size;
   4.667 ++
   4.668 ++		/*
   4.669 ++		 * Buffer to hold a mix of filtered and unfiltered data. This
   4.670 ++		 * needs to be big enough to hold Alignment + 2 * Look-ahead:
   4.671 ++		 *
   4.672 ++		 * Type         Alignment   Look-ahead
   4.673 ++		 * x86              1           4
   4.674 ++		 * PowerPC          4           0
   4.675 ++		 * IA-64           16           0
   4.676 ++		 * ARM              4           0
   4.677 ++		 * ARM-Thumb        2           2
   4.678 ++		 * SPARC            4           0
   4.679 ++		 */
   4.680 ++		uint8_t buf[16];
   4.681 ++	} temp;
   4.682 ++};
   4.683 ++
   4.684 ++#ifdef XZ_DEC_X86
   4.685 ++/*
   4.686 ++ * This is used to test the most significant byte of a memory address
   4.687 ++ * in an x86 instruction.
   4.688 ++ */
   4.689 ++static inline int bcj_x86_test_msbyte(uint8_t b)
   4.690 ++{
   4.691 ++	return b == 0x00 || b == 0xFF;
   4.692 ++}
   4.693 ++
   4.694 ++static size_t bcj_x86(struct xz_dec_bcj *s, uint8_t *buf, size_t size)
   4.695 ++{
   4.696 ++	static const bool mask_to_allowed_status[8]
   4.697 ++		= { true, true, true, false, true, false, false, false };
   4.698 ++
   4.699 ++	static const uint8_t mask_to_bit_num[8] = { 0, 1, 2, 2, 3, 3, 3, 3 };
   4.700 ++
   4.701 ++	size_t i;
   4.702 ++	size_t prev_pos = (size_t)-1;
   4.703 ++	uint32_t prev_mask = s->x86_prev_mask;
   4.704 ++	uint32_t src;
   4.705 ++	uint32_t dest;
   4.706 ++	uint32_t j;
   4.707 ++	uint8_t b;
   4.708 ++
   4.709 ++	if (size <= 4)
   4.710 ++		return 0;
   4.711 ++
   4.712 ++	size -= 4;
   4.713 ++	for (i = 0; i < size; ++i) {
   4.714 ++		if ((buf[i] & 0xFE) != 0xE8)
   4.715 ++			continue;
   4.716 ++
   4.717 ++		prev_pos = i - prev_pos;
   4.718 ++		if (prev_pos > 3) {
   4.719 ++			prev_mask = 0;
   4.720 ++		} else {
   4.721 ++			prev_mask = (prev_mask << (prev_pos - 1)) & 7;
   4.722 ++			if (prev_mask != 0) {
   4.723 ++				b = buf[i + 4 - mask_to_bit_num[prev_mask]];
   4.724 ++				if (!mask_to_allowed_status[prev_mask]
   4.725 ++						|| bcj_x86_test_msbyte(b)) {
   4.726 ++					prev_pos = i;
   4.727 ++					prev_mask = (prev_mask << 1) | 1;
   4.728 ++					continue;
   4.729 ++				}
   4.730 ++			}
   4.731 ++		}
   4.732 ++
   4.733 ++		prev_pos = i;
   4.734 ++
   4.735 ++		if (bcj_x86_test_msbyte(buf[i + 4])) {
   4.736 ++			src = get_unaligned_le32(buf + i + 1);
   4.737 ++			while (true) {
   4.738 ++				dest = src - (s->pos + (uint32_t)i + 5);
   4.739 ++				if (prev_mask == 0)
   4.740 ++					break;
   4.741 ++
   4.742 ++				j = mask_to_bit_num[prev_mask] * 8;
   4.743 ++				b = (uint8_t)(dest >> (24 - j));
   4.744 ++				if (!bcj_x86_test_msbyte(b))
   4.745 ++					break;
   4.746 ++
   4.747 ++				src = dest ^ (((uint32_t)1 << (32 - j)) - 1);
   4.748 ++			}
   4.749 ++
   4.750 ++			dest &= 0x01FFFFFF;
   4.751 ++			dest |= (uint32_t)0 - (dest & 0x01000000);
   4.752 ++			put_unaligned_le32(dest, buf + i + 1);
   4.753 ++			i += 4;
   4.754 ++		} else {
   4.755 ++			prev_mask = (prev_mask << 1) | 1;
   4.756 ++		}
   4.757 ++	}
   4.758 ++
   4.759 ++	prev_pos = i - prev_pos;
   4.760 ++	s->x86_prev_mask = prev_pos > 3 ? 0 : prev_mask << (prev_pos - 1);
   4.761 ++	return i;
   4.762 ++}
   4.763 ++#endif
   4.764 ++
   4.765 ++#ifdef XZ_DEC_POWERPC
   4.766 ++static size_t bcj_powerpc(struct xz_dec_bcj *s, uint8_t *buf, size_t size)
   4.767 ++{
   4.768 ++	size_t i;
   4.769 ++	uint32_t instr;
   4.770 ++
   4.771 ++	for (i = 0; i + 4 <= size; i += 4) {
   4.772 ++		instr = get_unaligned_be32(buf + i);
   4.773 ++		if ((instr & 0xFC000003) == 0x48000001) {
   4.774 ++			instr &= 0x03FFFFFC;
   4.775 ++			instr -= s->pos + (uint32_t)i;
   4.776 ++			instr &= 0x03FFFFFC;
   4.777 ++			instr |= 0x48000001;
   4.778 ++			put_unaligned_be32(instr, buf + i);
   4.779 ++		}
   4.780 ++	}
   4.781 ++
   4.782 ++	return i;
   4.783 ++}
   4.784 ++#endif
   4.785 ++
   4.786 ++#ifdef XZ_DEC_IA64
   4.787 ++static size_t bcj_ia64(struct xz_dec_bcj *s, uint8_t *buf, size_t size)
   4.788 ++{
   4.789 ++	static const uint8_t branch_table[32] = {
   4.790 ++		0, 0, 0, 0, 0, 0, 0, 0,
   4.791 ++		0, 0, 0, 0, 0, 0, 0, 0,
   4.792 ++		4, 4, 6, 6, 0, 0, 7, 7,
   4.793 ++		4, 4, 0, 0, 4, 4, 0, 0
   4.794 ++	};
   4.795 ++
   4.796 ++	/*
   4.797 ++	 * The local variables take a little bit stack space, but it's less
   4.798 ++	 * than what LZMA2 decoder takes, so it doesn't make sense to reduce
   4.799 ++	 * stack usage here without doing that for the LZMA2 decoder too.
   4.800 ++	 */
   4.801 ++
   4.802 ++	/* Loop counters */
   4.803 ++	size_t i;
   4.804 ++	size_t j;
   4.805 ++
   4.806 ++	/* Instruction slot (0, 1, or 2) in the 128-bit instruction word */
   4.807 ++	uint32_t slot;
   4.808 ++
   4.809 ++	/* Bitwise offset of the instruction indicated by slot */
   4.810 ++	uint32_t bit_pos;
   4.811 ++
   4.812 ++	/* bit_pos split into byte and bit parts */
   4.813 ++	uint32_t byte_pos;
   4.814 ++	uint32_t bit_res;
   4.815 ++
   4.816 ++	/* Address part of an instruction */
   4.817 ++	uint32_t addr;
   4.818 ++
   4.819 ++	/* Mask used to detect which instructions to convert */
   4.820 ++	uint32_t mask;
   4.821 ++
   4.822 ++	/* 41-bit instruction stored somewhere in the lowest 48 bits */
   4.823 ++	uint64_t instr;
   4.824 ++
   4.825 ++	/* Instruction normalized with bit_res for easier manipulation */
   4.826 ++	uint64_t norm;
   4.827 ++
   4.828 ++	for (i = 0; i + 16 <= size; i += 16) {
   4.829 ++		mask = branch_table[buf[i] & 0x1F];
   4.830 ++		for (slot = 0, bit_pos = 5; slot < 3; ++slot, bit_pos += 41) {
   4.831 ++			if (((mask >> slot) & 1) == 0)
   4.832 ++				continue;
   4.833 ++
   4.834 ++			byte_pos = bit_pos >> 3;
   4.835 ++			bit_res = bit_pos & 7;
   4.836 ++			instr = 0;
   4.837 ++			for (j = 0; j < 6; ++j)
   4.838 ++				instr |= (uint64_t)(buf[i + j + byte_pos])
   4.839 ++						<< (8 * j);
   4.840 ++
   4.841 ++			norm = instr >> bit_res;
   4.842 ++
   4.843 ++			if (((norm >> 37) & 0x0F) == 0x05
   4.844 ++					&& ((norm >> 9) & 0x07) == 0) {
   4.845 ++				addr = (norm >> 13) & 0x0FFFFF;
   4.846 ++				addr |= ((uint32_t)(norm >> 36) & 1) << 20;
   4.847 ++				addr <<= 4;
   4.848 ++				addr -= s->pos + (uint32_t)i;
   4.849 ++				addr >>= 4;
   4.850 ++
   4.851 ++				norm &= ~((uint64_t)0x8FFFFF << 13);
   4.852 ++				norm |= (uint64_t)(addr & 0x0FFFFF) << 13;
   4.853 ++				norm |= (uint64_t)(addr & 0x100000)
   4.854 ++						<< (36 - 20);
   4.855 ++
   4.856 ++				instr &= (1 << bit_res) - 1;
   4.857 ++				instr |= norm << bit_res;
   4.858 ++
   4.859 ++				for (j = 0; j < 6; j++)
   4.860 ++					buf[i + j + byte_pos]
   4.861 ++						= (uint8_t)(instr >> (8 * j));
   4.862 ++			}
   4.863 ++		}
   4.864 ++	}
   4.865 ++
   4.866 ++	return i;
   4.867 ++}
   4.868 ++#endif
   4.869 ++
   4.870 ++#ifdef XZ_DEC_ARM
   4.871 ++static size_t bcj_arm(struct xz_dec_bcj *s, uint8_t *buf, size_t size)
   4.872 ++{
   4.873 ++	size_t i;
   4.874 ++	uint32_t addr;
   4.875 ++
   4.876 ++	for (i = 0; i + 4 <= size; i += 4) {
   4.877 ++		if (buf[i + 3] == 0xEB) {
   4.878 ++			addr = (uint32_t)buf[i] | ((uint32_t)buf[i + 1] << 8)
   4.879 ++					| ((uint32_t)buf[i + 2] << 16);
   4.880 ++			addr <<= 2;
   4.881 ++			addr -= s->pos + (uint32_t)i + 8;
   4.882 ++			addr >>= 2;
   4.883 ++			buf[i] = (uint8_t)addr;
   4.884 ++			buf[i + 1] = (uint8_t)(addr >> 8);
   4.885 ++			buf[i + 2] = (uint8_t)(addr >> 16);
   4.886 ++		}
   4.887 ++	}
   4.888 ++
   4.889 ++	return i;
   4.890 ++}
   4.891 ++#endif
   4.892 ++
   4.893 ++#ifdef XZ_DEC_ARMTHUMB
   4.894 ++static size_t bcj_armthumb(struct xz_dec_bcj *s, uint8_t *buf, size_t size)
   4.895 ++{
   4.896 ++	size_t i;
   4.897 ++	uint32_t addr;
   4.898 ++
   4.899 ++	for (i = 0; i + 4 <= size; i += 2) {
   4.900 ++		if ((buf[i + 1] & 0xF8) == 0xF0
   4.901 ++				&& (buf[i + 3] & 0xF8) == 0xF8) {
   4.902 ++			addr = (((uint32_t)buf[i + 1] & 0x07) << 19)
   4.903 ++					| ((uint32_t)buf[i] << 11)
   4.904 ++					| (((uint32_t)buf[i + 3] & 0x07) << 8)
   4.905 ++					| (uint32_t)buf[i + 2];
   4.906 ++			addr <<= 1;
   4.907 ++			addr -= s->pos + (uint32_t)i + 4;
   4.908 ++			addr >>= 1;
   4.909 ++			buf[i + 1] = (uint8_t)(0xF0 | ((addr >> 19) & 0x07));
   4.910 ++			buf[i] = (uint8_t)(addr >> 11);
   4.911 ++			buf[i + 3] = (uint8_t)(0xF8 | ((addr >> 8) & 0x07));
   4.912 ++			buf[i + 2] = (uint8_t)addr;
   4.913 ++			i += 2;
   4.914 ++		}
   4.915 ++	}
   4.916 ++
   4.917 ++	return i;
   4.918 ++}
   4.919 ++#endif
   4.920 ++
   4.921 ++#ifdef XZ_DEC_SPARC
   4.922 ++static size_t bcj_sparc(struct xz_dec_bcj *s, uint8_t *buf, size_t size)
   4.923 ++{
   4.924 ++	size_t i;
   4.925 ++	uint32_t instr;
   4.926 ++
   4.927 ++	for (i = 0; i + 4 <= size; i += 4) {
   4.928 ++		instr = get_unaligned_be32(buf + i);
   4.929 ++		if ((instr >> 22) == 0x100 || (instr >> 22) == 0x1FF) {
   4.930 ++			instr <<= 2;
   4.931 ++			instr -= s->pos + (uint32_t)i;
   4.932 ++			instr >>= 2;
   4.933 ++			instr = ((uint32_t)0x40000000 - (instr & 0x400000))
   4.934 ++					| 0x40000000 | (instr & 0x3FFFFF);
   4.935 ++			put_unaligned_be32(instr, buf + i);
   4.936 ++		}
   4.937 ++	}
   4.938 ++
   4.939 ++	return i;
   4.940 ++}
   4.941 ++#endif
   4.942 ++
   4.943 ++/*
   4.944 ++ * Apply the selected BCJ filter. Update *pos and s->pos to match the amount
   4.945 ++ * of data that got filtered.
   4.946 ++ *
   4.947 ++ * NOTE: This is implemented as a switch statement to avoid using function
   4.948 ++ * pointers, which could be problematic in the kernel boot code, which must
   4.949 ++ * avoid pointers to static data (at least on x86).
   4.950 ++ */
   4.951 ++static void bcj_apply(struct xz_dec_bcj *s,
   4.952 ++		      uint8_t *buf, size_t *pos, size_t size)
   4.953 ++{
   4.954 ++	size_t filtered;
   4.955 ++
   4.956 ++	buf += *pos;
   4.957 ++	size -= *pos;
   4.958 ++
   4.959 ++	switch (s->type) {
   4.960 ++#ifdef XZ_DEC_X86
   4.961 ++	case BCJ_X86:
   4.962 ++		filtered = bcj_x86(s, buf, size);
   4.963 ++		break;
   4.964 ++#endif
   4.965 ++#ifdef XZ_DEC_POWERPC
   4.966 ++	case BCJ_POWERPC:
   4.967 ++		filtered = bcj_powerpc(s, buf, size);
   4.968 ++		break;
   4.969 ++#endif
   4.970 ++#ifdef XZ_DEC_IA64
   4.971 ++	case BCJ_IA64:
   4.972 ++		filtered = bcj_ia64(s, buf, size);
   4.973 ++		break;
   4.974 ++#endif
   4.975 ++#ifdef XZ_DEC_ARM
   4.976 ++	case BCJ_ARM:
   4.977 ++		filtered = bcj_arm(s, buf, size);
   4.978 ++		break;
   4.979 ++#endif
   4.980 ++#ifdef XZ_DEC_ARMTHUMB
   4.981 ++	case BCJ_ARMTHUMB:
   4.982 ++		filtered = bcj_armthumb(s, buf, size);
   4.983 ++		break;
   4.984 ++#endif
   4.985 ++#ifdef XZ_DEC_SPARC
   4.986 ++	case BCJ_SPARC:
   4.987 ++		filtered = bcj_sparc(s, buf, size);
   4.988 ++		break;
   4.989 ++#endif
   4.990 ++	default:
   4.991 ++		/* Never reached but silence compiler warnings. */
   4.992 ++		filtered = 0;
   4.993 ++		break;
   4.994 ++	}
   4.995 ++
   4.996 ++	*pos += filtered;
   4.997 ++	s->pos += filtered;
   4.998 ++}
   4.999 ++
  4.1000 ++/*
  4.1001 ++ * Flush pending filtered data from temp to the output buffer.
  4.1002 ++ * Move the remaining mixture of possibly filtered and unfiltered
  4.1003 ++ * data to the beginning of temp.
  4.1004 ++ */
  4.1005 ++static void bcj_flush(struct xz_dec_bcj *s, struct xz_buf *b)
  4.1006 ++{
  4.1007 ++	size_t copy_size;
  4.1008 ++
  4.1009 ++	copy_size = min_t(size_t, s->temp.filtered, b->out_size - b->out_pos);
  4.1010 ++	memcpy(b->out + b->out_pos, s->temp.buf, copy_size);
  4.1011 ++	b->out_pos += copy_size;
  4.1012 ++
  4.1013 ++	s->temp.filtered -= copy_size;
  4.1014 ++	s->temp.size -= copy_size;
  4.1015 ++	memmove(s->temp.buf, s->temp.buf + copy_size, s->temp.size);
  4.1016 ++}
  4.1017 ++
  4.1018 ++/*
  4.1019 ++ * The BCJ filter functions are primitive in sense that they process the
  4.1020 ++ * data in chunks of 1-16 bytes. To hide this issue, this function does
  4.1021 ++ * some buffering.
  4.1022 ++ */
  4.1023 ++XZ_EXTERN enum xz_ret xz_dec_bcj_run(struct xz_dec_bcj *s,
  4.1024 ++				     struct xz_dec_lzma2 *lzma2,
  4.1025 ++				     struct xz_buf *b)
  4.1026 ++{
  4.1027 ++	size_t out_start;
  4.1028 ++
  4.1029 ++	/*
  4.1030 ++	 * Flush pending already filtered data to the output buffer. Return
  4.1031 ++	 * immediatelly if we couldn't flush everything, or if the next
  4.1032 ++	 * filter in the chain had already returned XZ_STREAM_END.
  4.1033 ++	 */
  4.1034 ++	if (s->temp.filtered > 0) {
  4.1035 ++		bcj_flush(s, b);
  4.1036 ++		if (s->temp.filtered > 0)
  4.1037 ++			return XZ_OK;
  4.1038 ++
  4.1039 ++		if (s->ret == XZ_STREAM_END)
  4.1040 ++			return XZ_STREAM_END;
  4.1041 ++	}
  4.1042 ++
  4.1043 ++	/*
  4.1044 ++	 * If we have more output space than what is currently pending in
  4.1045 ++	 * temp, copy the unfiltered data from temp to the output buffer
  4.1046 ++	 * and try to fill the output buffer by decoding more data from the
  4.1047 ++	 * next filter in the chain. Apply the BCJ filter on the new data
  4.1048 ++	 * in the output buffer. If everything cannot be filtered, copy it
  4.1049 ++	 * to temp and rewind the output buffer position accordingly.
  4.1050 ++	 */
  4.1051 ++	if (s->temp.size < b->out_size - b->out_pos) {
  4.1052 ++		out_start = b->out_pos;
  4.1053 ++		memcpy(b->out + b->out_pos, s->temp.buf, s->temp.size);
  4.1054 ++		b->out_pos += s->temp.size;
  4.1055 ++
  4.1056 ++		s->ret = xz_dec_lzma2_run(lzma2, b);
  4.1057 ++		if (s->ret != XZ_STREAM_END
  4.1058 ++				&& (s->ret != XZ_OK || s->single_call))
  4.1059 ++			return s->ret;
  4.1060 ++
  4.1061 ++		bcj_apply(s, b->out, &out_start, b->out_pos);
  4.1062 ++
  4.1063 ++		/*
  4.1064 ++		 * As an exception, if the next filter returned XZ_STREAM_END,
  4.1065 ++		 * we can do that too, since the last few bytes that remain
  4.1066 ++		 * unfiltered are meant to remain unfiltered.
  4.1067 ++		 */
  4.1068 ++		if (s->ret == XZ_STREAM_END)
  4.1069 ++			return XZ_STREAM_END;
  4.1070 ++
  4.1071 ++		s->temp.size = b->out_pos - out_start;
  4.1072 ++		b->out_pos -= s->temp.size;
  4.1073 ++		memcpy(s->temp.buf, b->out + b->out_pos, s->temp.size);
  4.1074 ++	}
  4.1075 ++
  4.1076 ++	/*
  4.1077 ++	 * If we have unfiltered data in temp, try to fill by decoding more
  4.1078 ++	 * data from the next filter. Apply the BCJ filter on temp. Then we
  4.1079 ++	 * hopefully can fill the actual output buffer by copying filtered
  4.1080 ++	 * data from temp. A mix of filtered and unfiltered data may be left
  4.1081 ++	 * in temp; it will be taken care on the next call to this function.
  4.1082 ++	 */
  4.1083 ++	if (s->temp.size > 0) {
  4.1084 ++		/* Make b->out{,_pos,_size} temporarily point to s->temp. */
  4.1085 ++		s->out = b->out;
  4.1086 ++		s->out_pos = b->out_pos;
  4.1087 ++		s->out_size = b->out_size;
  4.1088 ++		b->out = s->temp.buf;
  4.1089 ++		b->out_pos = s->temp.size;
  4.1090 ++		b->out_size = sizeof(s->temp.buf);
  4.1091 ++
  4.1092 ++		s->ret = xz_dec_lzma2_run(lzma2, b);
  4.1093 ++
  4.1094 ++		s->temp.size = b->out_pos;
  4.1095 ++		b->out = s->out;
  4.1096 ++		b->out_pos = s->out_pos;
  4.1097 ++		b->out_size = s->out_size;
  4.1098 ++
  4.1099 ++		if (s->ret != XZ_OK && s->ret != XZ_STREAM_END)
  4.1100 ++			return s->ret;
  4.1101 ++
  4.1102 ++		bcj_apply(s, s->temp.buf, &s->temp.filtered, s->temp.size);
  4.1103 ++
  4.1104 ++		/*
  4.1105 ++		 * If the next filter returned XZ_STREAM_END, we mark that
  4.1106 ++		 * everything is filtered, since the last unfiltered bytes
  4.1107 ++		 * of the stream are meant to be left as is.
  4.1108 ++		 */
  4.1109 ++		if (s->ret == XZ_STREAM_END)
  4.1110 ++			s->temp.filtered = s->temp.size;
  4.1111 ++
  4.1112 ++		bcj_flush(s, b);
  4.1113 ++		if (s->temp.filtered > 0)
  4.1114 ++			return XZ_OK;
  4.1115 ++	}
  4.1116 ++
  4.1117 ++	return s->ret;
  4.1118 ++}
  4.1119 ++
  4.1120 ++XZ_EXTERN struct xz_dec_bcj *xz_dec_bcj_create(bool single_call)
  4.1121 ++{
  4.1122 ++	struct xz_dec_bcj *s = kmalloc(sizeof(*s), GFP_KERNEL);
  4.1123 ++	if (s != NULL)
  4.1124 ++		s->single_call = single_call;
  4.1125 ++
  4.1126 ++	return s;
  4.1127 ++}
  4.1128 ++
  4.1129 ++XZ_EXTERN enum xz_ret xz_dec_bcj_reset(struct xz_dec_bcj *s, uint8_t id)
  4.1130 ++{
  4.1131 ++	switch (id) {
  4.1132 ++#ifdef XZ_DEC_X86
  4.1133 ++	case BCJ_X86:
  4.1134 ++#endif
  4.1135 ++#ifdef XZ_DEC_POWERPC
  4.1136 ++	case BCJ_POWERPC:
  4.1137 ++#endif
  4.1138 ++#ifdef XZ_DEC_IA64
  4.1139 ++	case BCJ_IA64:
  4.1140 ++#endif
  4.1141 ++#ifdef XZ_DEC_ARM
  4.1142 ++	case BCJ_ARM:
  4.1143 ++#endif
  4.1144 ++#ifdef XZ_DEC_ARMTHUMB
  4.1145 ++	case BCJ_ARMTHUMB:
  4.1146 ++#endif
  4.1147 ++#ifdef XZ_DEC_SPARC
  4.1148 ++	case BCJ_SPARC:
  4.1149 ++#endif
  4.1150 ++		break;
  4.1151 ++
  4.1152 ++	default:
  4.1153 ++		/* Unsupported Filter ID */
  4.1154 ++		return XZ_OPTIONS_ERROR;
  4.1155 ++	}
  4.1156 ++
  4.1157 ++	s->type = id;
  4.1158 ++	s->ret = XZ_OK;
  4.1159 ++	s->pos = 0;
  4.1160 ++	s->x86_prev_mask = 0;
  4.1161 ++	s->temp.filtered = 0;
  4.1162 ++	s->temp.size = 0;
  4.1163 ++
  4.1164 ++	return XZ_OK;
  4.1165 ++}
  4.1166 ++
  4.1167 ++#endif
  4.1168 +diff --git a/lib/xz/xz_dec_lzma2.c b/lib/xz/xz_dec_lzma2.c
  4.1169 +new file mode 100644
  4.1170 +index 0000000..ea5fa4f
  4.1171 +--- /dev/null
  4.1172 ++++ b/lib/xz/xz_dec_lzma2.c
  4.1173 +@@ -0,0 +1,1171 @@
  4.1174 ++/*
  4.1175 ++ * LZMA2 decoder
  4.1176 ++ *
  4.1177 ++ * Authors: Lasse Collin <lasse.collin@tukaani.org>
  4.1178 ++ *          Igor Pavlov <http://7-zip.org/>
  4.1179 ++ *
  4.1180 ++ * This file has been put into the public domain.
  4.1181 ++ * You can do whatever you want with this file.
  4.1182 ++ */
  4.1183 ++
  4.1184 ++#include "xz_private.h"
  4.1185 ++#include "xz_lzma2.h"
  4.1186 ++
  4.1187 ++/*
  4.1188 ++ * Range decoder initialization eats the first five bytes of each LZMA chunk.
  4.1189 ++ */
  4.1190 ++#define RC_INIT_BYTES 5
  4.1191 ++
  4.1192 ++/*
  4.1193 ++ * Minimum number of usable input buffer to safely decode one LZMA symbol.
  4.1194 ++ * The worst case is that we decode 22 bits using probabilities and 26
  4.1195 ++ * direct bits. This may decode at maximum of 20 bytes of input. However,
  4.1196 ++ * lzma_main() does an extra normalization before returning, thus we
  4.1197 ++ * need to put 21 here.
  4.1198 ++ */
  4.1199 ++#define LZMA_IN_REQUIRED 21
  4.1200 ++
  4.1201 ++/*
  4.1202 ++ * Dictionary (history buffer)
  4.1203 ++ *
  4.1204 ++ * These are always true:
  4.1205 ++ *    start <= pos <= full <= end
  4.1206 ++ *    pos <= limit <= end
  4.1207 ++ *
  4.1208 ++ * In multi-call mode, also these are true:
  4.1209 ++ *    end == size
  4.1210 ++ *    size <= size_max
  4.1211 ++ *    allocated <= size
  4.1212 ++ *
  4.1213 ++ * Most of these variables are size_t to support single-call mode,
  4.1214 ++ * in which the dictionary variables address the actual output
  4.1215 ++ * buffer directly.
  4.1216 ++ */
  4.1217 ++struct dictionary {
  4.1218 ++	/* Beginning of the history buffer */
  4.1219 ++	uint8_t *buf;
  4.1220 ++
  4.1221 ++	/* Old position in buf (before decoding more data) */
  4.1222 ++	size_t start;
  4.1223 ++
  4.1224 ++	/* Position in buf */
  4.1225 ++	size_t pos;
  4.1226 ++
  4.1227 ++	/*
  4.1228 ++	 * How full dictionary is. This is used to detect corrupt input that
  4.1229 ++	 * would read beyond the beginning of the uncompressed stream.
  4.1230 ++	 */
  4.1231 ++	size_t full;
  4.1232 ++
  4.1233 ++	/* Write limit; we don't write to buf[limit] or later bytes. */
  4.1234 ++	size_t limit;
  4.1235 ++
  4.1236 ++	/*
  4.1237 ++	 * End of the dictionary buffer. In multi-call mode, this is
  4.1238 ++	 * the same as the dictionary size. In single-call mode, this
  4.1239 ++	 * indicates the size of the output buffer.
  4.1240 ++	 */
  4.1241 ++	size_t end;
  4.1242 ++
  4.1243 ++	/*
  4.1244 ++	 * Size of the dictionary as specified in Block Header. This is used
  4.1245 ++	 * together with "full" to detect corrupt input that would make us
  4.1246 ++	 * read beyond the beginning of the uncompressed stream.
  4.1247 ++	 */
  4.1248 ++	uint32_t size;
  4.1249 ++
  4.1250 ++	/*
  4.1251 ++	 * Maximum allowed dictionary size in multi-call mode.
  4.1252 ++	 * This is ignored in single-call mode.
  4.1253 ++	 */
  4.1254 ++	uint32_t size_max;
  4.1255 ++
  4.1256 ++	/*
  4.1257 ++	 * Amount of memory currently allocated for the dictionary.
  4.1258 ++	 * This is used only with XZ_DYNALLOC. (With XZ_PREALLOC,
  4.1259 ++	 * size_max is always the same as the allocated size.)
  4.1260 ++	 */
  4.1261 ++	uint32_t allocated;
  4.1262 ++
  4.1263 ++	/* Operation mode */
  4.1264 ++	enum xz_mode mode;
  4.1265 ++};
  4.1266 ++
  4.1267 ++/* Range decoder */
  4.1268 ++struct rc_dec {
  4.1269 ++	uint32_t range;
  4.1270 ++	uint32_t code;
  4.1271 ++
  4.1272 ++	/*
  4.1273 ++	 * Number of initializing bytes remaining to be read
  4.1274 ++	 * by rc_read_init().
  4.1275 ++	 */
  4.1276 ++	uint32_t init_bytes_left;
  4.1277 ++
  4.1278 ++	/*
  4.1279 ++	 * Buffer from which we read our input. It can be either
  4.1280 ++	 * temp.buf or the caller-provided input buffer.
  4.1281 ++	 */
  4.1282 ++	const uint8_t *in;
  4.1283 ++	size_t in_pos;
  4.1284 ++	size_t in_limit;
  4.1285 ++};
  4.1286 ++
  4.1287 ++/* Probabilities for a length decoder. */
  4.1288 ++struct lzma_len_dec {
  4.1289 ++	/* Probability of match length being at least 10 */
  4.1290 ++	uint16_t choice;
  4.1291 ++
  4.1292 ++	/* Probability of match length being at least 18 */
  4.1293 ++	uint16_t choice2;
  4.1294 ++
  4.1295 ++	/* Probabilities for match lengths 2-9 */
  4.1296 ++	uint16_t low[POS_STATES_MAX][LEN_LOW_SYMBOLS];
  4.1297 ++
  4.1298 ++	/* Probabilities for match lengths 10-17 */
  4.1299 ++	uint16_t mid[POS_STATES_MAX][LEN_MID_SYMBOLS];
  4.1300 ++
  4.1301 ++	/* Probabilities for match lengths 18-273 */
  4.1302 ++	uint16_t high[LEN_HIGH_SYMBOLS];
  4.1303 ++};
  4.1304 ++
  4.1305 ++struct lzma_dec {
  4.1306 ++	/* Distances of latest four matches */
  4.1307 ++	uint32_t rep0;
  4.1308 ++	uint32_t rep1;
  4.1309 ++	uint32_t rep2;
  4.1310 ++	uint32_t rep3;
  4.1311 ++
  4.1312 ++	/* Types of the most recently seen LZMA symbols */
  4.1313 ++	enum lzma_state state;
  4.1314 ++
  4.1315 ++	/*
  4.1316 ++	 * Length of a match. This is updated so that dict_repeat can
  4.1317 ++	 * be called again to finish repeating the whole match.
  4.1318 ++	 */
  4.1319 ++	uint32_t len;
  4.1320 ++
  4.1321 ++	/*
  4.1322 ++	 * LZMA properties or related bit masks (number of literal
  4.1323 ++	 * context bits, a mask dervied from the number of literal
  4.1324 ++	 * position bits, and a mask dervied from the number
  4.1325 ++	 * position bits)
  4.1326 ++	 */
  4.1327 ++	uint32_t lc;
  4.1328 ++	uint32_t literal_pos_mask; /* (1 << lp) - 1 */
  4.1329 ++	uint32_t pos_mask;         /* (1 << pb) - 1 */
  4.1330 ++
  4.1331 ++	/* If 1, it's a match. Otherwise it's a single 8-bit literal. */
  4.1332 ++	uint16_t is_match[STATES][POS_STATES_MAX];
  4.1333 ++
  4.1334 ++	/* If 1, it's a repeated match. The distance is one of rep0 .. rep3. */
  4.1335 ++	uint16_t is_rep[STATES];
  4.1336 ++
  4.1337 ++	/*
  4.1338 ++	 * If 0, distance of a repeated match is rep0.
  4.1339 ++	 * Otherwise check is_rep1.
  4.1340 ++	 */
  4.1341 ++	uint16_t is_rep0[STATES];
  4.1342 ++
  4.1343 ++	/*
  4.1344 ++	 * If 0, distance of a repeated match is rep1.
  4.1345 ++	 * Otherwise check is_rep2.
  4.1346 ++	 */
  4.1347 ++	uint16_t is_rep1[STATES];
  4.1348 ++
  4.1349 ++	/* If 0, distance of a repeated match is rep2. Otherwise it is rep3. */
  4.1350 ++	uint16_t is_rep2[STATES];
  4.1351 ++
  4.1352 ++	/*
  4.1353 ++	 * If 1, the repeated match has length of one byte. Otherwise
  4.1354 ++	 * the length is decoded from rep_len_decoder.
  4.1355 ++	 */
  4.1356 ++	uint16_t is_rep0_long[STATES][POS_STATES_MAX];
  4.1357 ++
  4.1358 ++	/*
  4.1359 ++	 * Probability tree for the highest two bits of the match
  4.1360 ++	 * distance. There is a separate probability tree for match
  4.1361 ++	 * lengths of 2 (i.e. MATCH_LEN_MIN), 3, 4, and [5, 273].
  4.1362 ++	 */
  4.1363 ++	uint16_t dist_slot[DIST_STATES][DIST_SLOTS];
  4.1364 ++
  4.1365 ++	/*
  4.1366 ++	 * Probility trees for additional bits for match distance
  4.1367 ++	 * when the distance is in the range [4, 127].
  4.1368 ++	 */
  4.1369 ++	uint16_t dist_special[FULL_DISTANCES - DIST_MODEL_END];
  4.1370 ++
  4.1371 ++	/*
  4.1372 ++	 * Probability tree for the lowest four bits of a match
  4.1373 ++	 * distance that is equal to or greater than 128.
  4.1374 ++	 */
  4.1375 ++	uint16_t dist_align[ALIGN_SIZE];
  4.1376 ++
  4.1377 ++	/* Length of a normal match */
  4.1378 ++	struct lzma_len_dec match_len_dec;
  4.1379 ++
  4.1380 ++	/* Length of a repeated match */
  4.1381 ++	struct lzma_len_dec rep_len_dec;
  4.1382 ++
  4.1383 ++	/* Probabilities of literals */
  4.1384 ++	uint16_t literal[LITERAL_CODERS_MAX][LITERAL_CODER_SIZE];
  4.1385 ++};
  4.1386 ++
  4.1387 ++struct lzma2_dec {
  4.1388 ++	/* Position in xz_dec_lzma2_run(). */
  4.1389 ++	enum lzma2_seq {
  4.1390 ++		SEQ_CONTROL,
  4.1391 ++		SEQ_UNCOMPRESSED_1,
  4.1392 ++		SEQ_UNCOMPRESSED_2,
  4.1393 ++		SEQ_COMPRESSED_0,
  4.1394 ++		SEQ_COMPRESSED_1,
  4.1395 ++		SEQ_PROPERTIES,
  4.1396 ++		SEQ_LZMA_PREPARE,
  4.1397 ++		SEQ_LZMA_RUN,
  4.1398 ++		SEQ_COPY
  4.1399 ++	} sequence;
  4.1400 ++
  4.1401 ++	/* Next position after decoding the compressed size of the chunk. */
  4.1402 ++	enum lzma2_seq next_sequence;
  4.1403 ++
  4.1404 ++	/* Uncompressed size of LZMA chunk (2 MiB at maximum) */
  4.1405 ++	uint32_t uncompressed;
  4.1406 ++
  4.1407 ++	/*
  4.1408 ++	 * Compressed size of LZMA chunk or compressed/uncompressed
  4.1409 ++	 * size of uncompressed chunk (64 KiB at maximum)
  4.1410 ++	 */
  4.1411 ++	uint32_t compressed;
  4.1412 ++
  4.1413 ++	/*
  4.1414 ++	 * True if dictionary reset is needed. This is false before
  4.1415 ++	 * the first chunk (LZMA or uncompressed).
  4.1416 ++	 */
  4.1417 ++	bool need_dict_reset;
  4.1418 ++
  4.1419 ++	/*
  4.1420 ++	 * True if new LZMA properties are needed. This is false
  4.1421 ++	 * before the first LZMA chunk.
  4.1422 ++	 */
  4.1423 ++	bool need_props;
  4.1424 ++};
  4.1425 ++
  4.1426 ++struct xz_dec_lzma2 {
  4.1427 ++	/*
  4.1428 ++	 * The order below is important on x86 to reduce code size and
  4.1429 ++	 * it shouldn't hurt on other platforms. Everything up to and
  4.1430 ++	 * including lzma.pos_mask are in the first 128 bytes on x86-32,
  4.1431 ++	 * which allows using smaller instructions to access those
  4.1432 ++	 * variables. On x86-64, fewer variables fit into the first 128
  4.1433 ++	 * bytes, but this is still the best order without sacrificing
  4.1434 ++	 * the readability by splitting the structures.
  4.1435 ++	 */
  4.1436 ++	struct rc_dec rc;
  4.1437 ++	struct dictionary dict;
  4.1438 ++	struct lzma2_dec lzma2;
  4.1439 ++	struct lzma_dec lzma;
  4.1440 ++
  4.1441 ++	/*
  4.1442 ++	 * Temporary buffer which holds small number of input bytes between
  4.1443 ++	 * decoder calls. See lzma2_lzma() for details.
  4.1444 ++	 */
  4.1445 ++	struct {
  4.1446 ++		uint32_t size;
  4.1447 ++		uint8_t buf[3 * LZMA_IN_REQUIRED];
  4.1448 ++	} temp;
  4.1449 ++};
  4.1450 ++
  4.1451 ++/**************
  4.1452 ++ * Dictionary *
  4.1453 ++ **************/
  4.1454 ++
  4.1455 ++/*
  4.1456 ++ * Reset the dictionary state. When in single-call mode, set up the beginning
  4.1457 ++ * of the dictionary to point to the actual output buffer.
  4.1458 ++ */
  4.1459 ++static void dict_reset(struct dictionary *dict, struct xz_buf *b)
  4.1460 ++{
  4.1461 ++	if (DEC_IS_SINGLE(dict->mode)) {
  4.1462 ++		dict->buf = b->out + b->out_pos;
  4.1463 ++		dict->end = b->out_size - b->out_pos;
  4.1464 ++	}
  4.1465 ++
  4.1466 ++	dict->start = 0;
  4.1467 ++	dict->pos = 0;
  4.1468 ++	dict->limit = 0;
  4.1469 ++	dict->full = 0;
  4.1470 ++}
  4.1471 ++
  4.1472 ++/* Set dictionary write limit */
  4.1473 ++static void dict_limit(struct dictionary *dict, size_t out_max)
  4.1474 ++{
  4.1475 ++	if (dict->end - dict->pos <= out_max)
  4.1476 ++		dict->limit = dict->end;
  4.1477 ++	else
  4.1478 ++		dict->limit = dict->pos + out_max;
  4.1479 ++}
  4.1480 ++
  4.1481 ++/* Return true if at least one byte can be written into the dictionary. */
  4.1482 ++static inline bool dict_has_space(const struct dictionary *dict)
  4.1483 ++{
  4.1484 ++	return dict->pos < dict->limit;
  4.1485 ++}
  4.1486 ++
  4.1487 ++/*
  4.1488 ++ * Get a byte from the dictionary at the given distance. The distance is
  4.1489 ++ * assumed to valid, or as a special case, zero when the dictionary is
  4.1490 ++ * still empty. This special case is needed for single-call decoding to
  4.1491 ++ * avoid writing a '\0' to the end of the destination buffer.
  4.1492 ++ */
  4.1493 ++static inline uint32_t dict_get(const struct dictionary *dict, uint32_t dist)
  4.1494 ++{
  4.1495 ++	size_t offset = dict->pos - dist - 1;
  4.1496 ++
  4.1497 ++	if (dist >= dict->pos)
  4.1498 ++		offset += dict->end;
  4.1499 ++
  4.1500 ++	return dict->full > 0 ? dict->buf[offset] : 0;
  4.1501 ++}
  4.1502 ++
  4.1503 ++/*
  4.1504 ++ * Put one byte into the dictionary. It is assumed that there is space for it.
  4.1505 ++ */
  4.1506 ++static inline void dict_put(struct dictionary *dict, uint8_t byte)
  4.1507 ++{
  4.1508 ++	dict->buf[dict->pos++] = byte;
  4.1509 ++
  4.1510 ++	if (dict->full < dict->pos)
  4.1511 ++		dict->full = dict->pos;
  4.1512 ++}
  4.1513 ++
  4.1514 ++/*
  4.1515 ++ * Repeat given number of bytes from the given distance. If the distance is
  4.1516 ++ * invalid, false is returned. On success, true is returned and *len is
  4.1517 ++ * updated to indicate how many bytes were left to be repeated.
  4.1518 ++ */
  4.1519 ++static bool dict_repeat(struct dictionary *dict, uint32_t *len, uint32_t dist)
  4.1520 ++{
  4.1521 ++	size_t back;
  4.1522 ++	uint32_t left;
  4.1523 ++
  4.1524 ++	if (dist >= dict->full || dist >= dict->size)
  4.1525 ++		return false;
  4.1526 ++
  4.1527 ++	left = min_t(size_t, dict->limit - dict->pos, *len);
  4.1528 ++	*len -= left;
  4.1529 ++
  4.1530 ++	back = dict->pos - dist - 1;
  4.1531 ++	if (dist >= dict->pos)
  4.1532 ++		back += dict->end;
  4.1533 ++
  4.1534 ++	do {
  4.1535 ++		dict->buf[dict->pos++] = dict->buf[back++];
  4.1536 ++		if (back == dict->end)
  4.1537 ++			back = 0;
  4.1538 ++	} while (--left > 0);
  4.1539 ++
  4.1540 ++	if (dict->full < dict->pos)
  4.1541 ++		dict->full = dict->pos;
  4.1542 ++
  4.1543 ++	return true;
  4.1544 ++}
  4.1545 ++
  4.1546 ++/* Copy uncompressed data as is from input to dictionary and output buffers. */
  4.1547 ++static void dict_uncompressed(struct dictionary *dict, struct xz_buf *b,
  4.1548 ++			      uint32_t *left)
  4.1549 ++{
  4.1550 ++	size_t copy_size;
  4.1551 ++
  4.1552 ++	while (*left > 0 && b->in_pos < b->in_size
  4.1553 ++			&& b->out_pos < b->out_size) {
  4.1554 ++		copy_size = min(b->in_size - b->in_pos,
  4.1555 ++				b->out_size - b->out_pos);
  4.1556 ++		if (copy_size > dict->end - dict->pos)
  4.1557 ++			copy_size = dict->end - dict->pos;
  4.1558 ++		if (copy_size > *left)
  4.1559 ++			copy_size = *left;
  4.1560 ++
  4.1561 ++		*left -= copy_size;
  4.1562 ++
  4.1563 ++		memcpy(dict->buf + dict->pos, b->in + b->in_pos, copy_size);
  4.1564 ++		dict->pos += copy_size;
  4.1565 ++
  4.1566 ++		if (dict->full < dict->pos)
  4.1567 ++			dict->full = dict->pos;
  4.1568 ++
  4.1569 ++		if (DEC_IS_MULTI(dict->mode)) {
  4.1570 ++			if (dict->pos == dict->end)
  4.1571 ++				dict->pos = 0;
  4.1572 ++
  4.1573 ++			memcpy(b->out + b->out_pos, b->in + b->in_pos,
  4.1574 ++					copy_size);
  4.1575 ++		}
  4.1576 ++
  4.1577 ++		dict->start = dict->pos;
  4.1578 ++
  4.1579 ++		b->out_pos += copy_size;
  4.1580 ++		b->in_pos += copy_size;
  4.1581 ++	}
  4.1582 ++}
  4.1583 ++
  4.1584 ++/*
  4.1585 ++ * Flush pending data from dictionary to b->out. It is assumed that there is
  4.1586 ++ * enough space in b->out. This is guaranteed because caller uses dict_limit()
  4.1587 ++ * before decoding data into the dictionary.
  4.1588 ++ */
  4.1589 ++static uint32_t dict_flush(struct dictionary *dict, struct xz_buf *b)
  4.1590 ++{
  4.1591 ++	size_t copy_size = dict->pos - dict->start;
  4.1592 ++
  4.1593 ++	if (DEC_IS_MULTI(dict->mode)) {
  4.1594 ++		if (dict->pos == dict->end)
  4.1595 ++			dict->pos = 0;
  4.1596 ++
  4.1597 ++		memcpy(b->out + b->out_pos, dict->buf + dict->start,
  4.1598 ++				copy_size);
  4.1599 ++	}
  4.1600 ++
  4.1601 ++	dict->start = dict->pos;
  4.1602 ++	b->out_pos += copy_size;
  4.1603 ++	return copy_size;
  4.1604 ++}
  4.1605 ++
  4.1606 ++/*****************
  4.1607 ++ * Range decoder *
  4.1608 ++ *****************/
  4.1609 ++
  4.1610 ++/* Reset the range decoder. */
  4.1611 ++static void rc_reset(struct rc_dec *rc)
  4.1612 ++{
  4.1613 ++	rc->range = (uint32_t)-1;
  4.1614 ++	rc->code = 0;
  4.1615 ++	rc->init_bytes_left = RC_INIT_BYTES;
  4.1616 ++}
  4.1617 ++
  4.1618 ++/*
  4.1619 ++ * Read the first five initial bytes into rc->code if they haven't been
  4.1620 ++ * read already. (Yes, the first byte gets completely ignored.)
  4.1621 ++ */
  4.1622 ++static bool rc_read_init(struct rc_dec *rc, struct xz_buf *b)
  4.1623 ++{
  4.1624 ++	while (rc->init_bytes_left > 0) {
  4.1625 ++		if (b->in_pos == b->in_size)
  4.1626 ++			return false;
  4.1627 ++
  4.1628 ++		rc->code = (rc->code << 8) + b->in[b->in_pos++];
  4.1629 ++		--rc->init_bytes_left;
  4.1630 ++	}
  4.1631 ++
  4.1632 ++	return true;
  4.1633 ++}
  4.1634 ++
  4.1635 ++/* Return true if there may not be enough input for the next decoding loop. */
  4.1636 ++static inline bool rc_limit_exceeded(const struct rc_dec *rc)
  4.1637 ++{
  4.1638 ++	return rc->in_pos > rc->in_limit;
  4.1639 ++}
  4.1640 ++
  4.1641 ++/*
  4.1642 ++ * Return true if it is possible (from point of view of range decoder) that
  4.1643 ++ * we have reached the end of the LZMA chunk.
  4.1644 ++ */
  4.1645 ++static inline bool rc_is_finished(const struct rc_dec *rc)
  4.1646 ++{
  4.1647 ++	return rc->code == 0;
  4.1648 ++}
  4.1649 ++
  4.1650 ++/* Read the next input byte if needed. */
  4.1651 ++static __always_inline void rc_normalize(struct rc_dec *rc)
  4.1652 ++{
  4.1653 ++	if (rc->range < RC_TOP_VALUE) {
  4.1654 ++		rc->range <<= RC_SHIFT_BITS;
  4.1655 ++		rc->code = (rc->code << RC_SHIFT_BITS) + rc->in[rc->in_pos++];
  4.1656 ++	}
  4.1657 ++}
  4.1658 ++
  4.1659 ++/*
  4.1660 ++ * Decode one bit. In some versions, this function has been splitted in three
  4.1661 ++ * functions so that the compiler is supposed to be able to more easily avoid
  4.1662 ++ * an extra branch. In this particular version of the LZMA decoder, this
  4.1663 ++ * doesn't seem to be a good idea (tested with GCC 3.3.6, 3.4.6, and 4.3.3
  4.1664 ++ * on x86). Using a non-splitted version results in nicer looking code too.
  4.1665 ++ *
  4.1666 ++ * NOTE: This must return an int. Do not make it return a bool or the speed
  4.1667 ++ * of the code generated by GCC 3.x decreases 10-15 %. (GCC 4.3 doesn't care,
  4.1668 ++ * and it generates 10-20 % faster code than GCC 3.x from this file anyway.)
  4.1669 ++ */
  4.1670 ++static __always_inline int rc_bit(struct rc_dec *rc, uint16_t *prob)
  4.1671 ++{
  4.1672 ++	uint32_t bound;
  4.1673 ++	int bit;
  4.1674 ++
  4.1675 ++	rc_normalize(rc);
  4.1676 ++	bound = (rc->range >> RC_BIT_MODEL_TOTAL_BITS) * *prob;
  4.1677 ++	if (rc->code < bound) {
  4.1678 ++		rc->range = bound;
  4.1679 ++		*prob += (RC_BIT_MODEL_TOTAL - *prob) >> RC_MOVE_BITS;
  4.1680 ++		bit = 0;
  4.1681 ++	} else {
  4.1682 ++		rc->range -= bound;
  4.1683 ++		rc->code -= bound;
  4.1684 ++		*prob -= *prob >> RC_MOVE_BITS;
  4.1685 ++		bit = 1;
  4.1686 ++	}
  4.1687 ++
  4.1688 ++	return bit;
  4.1689 ++}
  4.1690 ++
  4.1691 ++/* Decode a bittree starting from the most significant bit. */
  4.1692 ++static __always_inline uint32_t rc_bittree(struct rc_dec *rc,
  4.1693 ++					   uint16_t *probs, uint32_t limit)
  4.1694 ++{
  4.1695 ++	uint32_t symbol = 1;
  4.1696 ++
  4.1697 ++	do {
  4.1698 ++		if (rc_bit(rc, &probs[symbol]))
  4.1699 ++			symbol = (symbol << 1) + 1;
  4.1700 ++		else
  4.1701 ++			symbol <<= 1;
  4.1702 ++	} while (symbol < limit);
  4.1703 ++
  4.1704 ++	return symbol;
  4.1705 ++}
  4.1706 ++
  4.1707 ++/* Decode a bittree starting from the least significant bit. */
  4.1708 ++static __always_inline void rc_bittree_reverse(struct rc_dec *rc,
  4.1709 ++					       uint16_t *probs,
  4.1710 ++					       uint32_t *dest, uint32_t limit)
  4.1711 ++{
  4.1712 ++	uint32_t symbol = 1;
  4.1713 ++	uint32_t i = 0;
  4.1714 ++
  4.1715 ++	do {
  4.1716 ++		if (rc_bit(rc, &probs[symbol])) {
  4.1717 ++			symbol = (symbol << 1) + 1;
  4.1718 ++			*dest += 1 << i;
  4.1719 ++		} else {
  4.1720 ++			symbol <<= 1;
  4.1721 ++		}
  4.1722 ++	} while (++i < limit);
  4.1723 ++}
  4.1724 ++
  4.1725 ++/* Decode direct bits (fixed fifty-fifty probability) */
  4.1726 ++static inline void rc_direct(struct rc_dec *rc, uint32_t *dest, uint32_t limit)
  4.1727 ++{
  4.1728 ++	uint32_t mask;
  4.1729 ++
  4.1730 ++	do {
  4.1731 ++		rc_normalize(rc);
  4.1732 ++		rc->range >>= 1;
  4.1733 ++		rc->code -= rc->range;
  4.1734 ++		mask = (uint32_t)0 - (rc->code >> 31);
  4.1735 ++		rc->code += rc->range & mask;
  4.1736 ++		*dest = (*dest << 1) + (mask + 1);
  4.1737 ++	} while (--limit > 0);
  4.1738 ++}
  4.1739 ++
  4.1740 ++/********
  4.1741 ++ * LZMA *
  4.1742 ++ ********/
  4.1743 ++
  4.1744 ++/* Get pointer to literal coder probability array. */
  4.1745 ++static uint16_t *lzma_literal_probs(struct xz_dec_lzma2 *s)
  4.1746 ++{
  4.1747 ++	uint32_t prev_byte = dict_get(&s->dict, 0);
  4.1748 ++	uint32_t low = prev_byte >> (8 - s->lzma.lc);
  4.1749 ++	uint32_t high = (s->dict.pos & s->lzma.literal_pos_mask) << s->lzma.lc;
  4.1750 ++	return s->lzma.literal[low + high];
  4.1751 ++}
  4.1752 ++
  4.1753 ++/* Decode a literal (one 8-bit byte) */
  4.1754 ++static void lzma_literal(struct xz_dec_lzma2 *s)
  4.1755 ++{
  4.1756 ++	uint16_t *probs;
  4.1757 ++	uint32_t symbol;
  4.1758 ++	uint32_t match_byte;
  4.1759 ++	uint32_t match_bit;
  4.1760 ++	uint32_t offset;
  4.1761 ++	uint32_t i;
  4.1762 ++
  4.1763 ++	probs = lzma_literal_probs(s);
  4.1764 ++
  4.1765 ++	if (lzma_state_is_literal(s->lzma.state)) {
  4.1766 ++		symbol = rc_bittree(&s->rc, probs, 0x100);
  4.1767 ++	} else {
  4.1768 ++		symbol = 1;
  4.1769 ++		match_byte = dict_get(&s->dict, s->lzma.rep0) << 1;
  4.1770 ++		offset = 0x100;
  4.1771 ++
  4.1772 ++		do {
  4.1773 ++			match_bit = match_byte & offset;
  4.1774 ++			match_byte <<= 1;
  4.1775 ++			i = offset + match_bit + symbol;
  4.1776 ++
  4.1777 ++			if (rc_bit(&s->rc, &probs[i])) {
  4.1778 ++				symbol = (symbol << 1) + 1;
  4.1779 ++				offset &= match_bit;
  4.1780 ++			} else {
  4.1781 ++				symbol <<= 1;
  4.1782 ++				offset &= ~match_bit;
  4.1783 ++			}
  4.1784 ++		} while (symbol < 0x100);
  4.1785 ++	}
  4.1786 ++
  4.1787 ++	dict_put(&s->dict, (uint8_t)symbol);
  4.1788 ++	lzma_state_literal(&s->lzma.state);
  4.1789 ++}
  4.1790 ++
  4.1791 ++/* Decode the length of the match into s->lzma.len. */
  4.1792 ++static void lzma_len(struct xz_dec_lzma2 *s, struct lzma_len_dec *l,
  4.1793 ++		     uint32_t pos_state)
  4.1794 ++{
  4.1795 ++	uint16_t *probs;
  4.1796 ++	uint32_t limit;
  4.1797 ++
  4.1798 ++	if (!rc_bit(&s->rc, &l->choice)) {
  4.1799 ++		probs = l->low[pos_state];
  4.1800 ++		limit = LEN_LOW_SYMBOLS;
  4.1801 ++		s->lzma.len = MATCH_LEN_MIN;
  4.1802 ++	} else {
  4.1803 ++		if (!rc_bit(&s->rc, &l->choice2)) {
  4.1804 ++			probs = l->mid[pos_state];
  4.1805 ++			limit = LEN_MID_SYMBOLS;
  4.1806 ++			s->lzma.len = MATCH_LEN_MIN + LEN_LOW_SYMBOLS;
  4.1807 ++		} else {
  4.1808 ++			probs = l->high;
  4.1809 ++			limit = LEN_HIGH_SYMBOLS;
  4.1810 ++			s->lzma.len = MATCH_LEN_MIN + LEN_LOW_SYMBOLS
  4.1811 ++					+ LEN_MID_SYMBOLS;
  4.1812 ++		}
  4.1813 ++	}
  4.1814 ++
  4.1815 ++	s->lzma.len += rc_bittree(&s->rc, probs, limit) - limit;
  4.1816 ++}
  4.1817 ++
  4.1818 ++/* Decode a match. The distance will be stored in s->lzma.rep0. */
  4.1819 ++static void lzma_match(struct xz_dec_lzma2 *s, uint32_t pos_state)
  4.1820 ++{
  4.1821 ++	uint16_t *probs;
  4.1822 ++	uint32_t dist_slot;
  4.1823 ++	uint32_t limit;
  4.1824 ++
  4.1825 ++	lzma_state_match(&s->lzma.state);
  4.1826 ++
  4.1827 ++	s->lzma.rep3 = s->lzma.rep2;
  4.1828 ++	s->lzma.rep2 = s->lzma.rep1;
  4.1829 ++	s->lzma.rep1 = s->lzma.rep0;
  4.1830 ++
  4.1831 ++	lzma_len(s, &s->lzma.match_len_dec, pos_state);
  4.1832 ++
  4.1833 ++	probs = s->lzma.dist_slot[lzma_get_dist_state(s->lzma.len)];
  4.1834 ++	dist_slot = rc_bittree(&s->rc, probs, DIST_SLOTS) - DIST_SLOTS;
  4.1835 ++
  4.1836 ++	if (dist_slot < DIST_MODEL_START) {
  4.1837 ++		s->lzma.rep0 = dist_slot;
  4.1838 ++	} else {
  4.1839 ++		limit = (dist_slot >> 1) - 1;
  4.1840 ++		s->lzma.rep0 = 2 + (dist_slot & 1);
  4.1841 ++
  4.1842 ++		if (dist_slot < DIST_MODEL_END) {
  4.1843 ++			s->lzma.rep0 <<= limit;
  4.1844 ++			probs = s->lzma.dist_special + s->lzma.rep0
  4.1845 ++					- dist_slot - 1;
  4.1846 ++			rc_bittree_reverse(&s->rc, probs,
  4.1847 ++					&s->lzma.rep0, limit);
  4.1848 ++		} else {
  4.1849 ++			rc_direct(&s->rc, &s->lzma.rep0, limit - ALIGN_BITS);
  4.1850 ++			s->lzma.rep0 <<= ALIGN_BITS;
  4.1851 ++			rc_bittree_reverse(&s->rc, s->lzma.dist_align,
  4.1852 ++					&s->lzma.rep0, ALIGN_BITS);
  4.1853 ++		}
  4.1854 ++	}
  4.1855 ++}
  4.1856 ++
  4.1857 ++/*
  4.1858 ++ * Decode a repeated match. The distance is one of the four most recently
  4.1859 ++ * seen matches. The distance will be stored in s->lzma.rep0.
  4.1860 ++ */
  4.1861 ++static void lzma_rep_match(struct xz_dec_lzma2 *s, uint32_t pos_state)
  4.1862 ++{
  4.1863 ++	uint32_t tmp;
  4.1864 ++
  4.1865 ++	if (!rc_bit(&s->rc, &s->lzma.is_rep0[s->lzma.state])) {
  4.1866 ++		if (!rc_bit(&s->rc, &s->lzma.is_rep0_long[
  4.1867 ++				s->lzma.state][pos_state])) {
  4.1868 ++			lzma_state_short_rep(&s->lzma.state);
  4.1869 ++			s->lzma.len = 1;
  4.1870 ++			return;
  4.1871 ++		}
  4.1872 ++	} else {
  4.1873 ++		if (!rc_bit(&s->rc, &s->lzma.is_rep1[s->lzma.state])) {
  4.1874 ++			tmp = s->lzma.rep1;
  4.1875 ++		} else {
  4.1876 ++			if (!rc_bit(&s->rc, &s->lzma.is_rep2[s->lzma.state])) {
  4.1877 ++				tmp = s->lzma.rep2;
  4.1878 ++			} else {
  4.1879 ++				tmp = s->lzma.rep3;
  4.1880 ++				s->lzma.rep3 = s->lzma.rep2;
  4.1881 ++			}
  4.1882 ++
  4.1883 ++			s->lzma.rep2 = s->lzma.rep1;
  4.1884 ++		}
  4.1885 ++
  4.1886 ++		s->lzma.rep1 = s->lzma.rep0;
  4.1887 ++		s->lzma.rep0 = tmp;
  4.1888 ++	}
  4.1889 ++
  4.1890 ++	lzma_state_long_rep(&s->lzma.state);
  4.1891 ++	lzma_len(s, &s->lzma.rep_len_dec, pos_state);
  4.1892 ++}
  4.1893 ++
  4.1894 ++/* LZMA decoder core */
  4.1895 ++static bool lzma_main(struct xz_dec_lzma2 *s)
  4.1896 ++{
  4.1897 ++	uint32_t pos_state;
  4.1898 ++
  4.1899 ++	/*
  4.1900 ++	 * If the dictionary was reached during the previous call, try to
  4.1901 ++	 * finish the possibly pending repeat in the dictionary.
  4.1902 ++	 */
  4.1903 ++	if (dict_has_space(&s->dict) && s->lzma.len > 0)
  4.1904 ++		dict_repeat(&s->dict, &s->lzma.len, s->lzma.rep0);
  4.1905 ++
  4.1906 ++	/*
  4.1907 ++	 * Decode more LZMA symbols. One iteration may consume up to
  4.1908 ++	 * LZMA_IN_REQUIRED - 1 bytes.
  4.1909 ++	 */
  4.1910 ++	while (dict_has_space(&s->dict) && !rc_limit_exceeded(&s->rc)) {
  4.1911 ++		pos_state = s->dict.pos & s->lzma.pos_mask;
  4.1912 ++
  4.1913 ++		if (!rc_bit(&s->rc, &s->lzma.is_match[
  4.1914 ++				s->lzma.state][pos_state])) {
  4.1915 ++			lzma_literal(s);
  4.1916 ++		} else {
  4.1917 ++			if (rc_bit(&s->rc, &s->lzma.is_rep[s->lzma.state]))
  4.1918 ++				lzma_rep_match(s, pos_state);
  4.1919 ++			else
  4.1920 ++				lzma_match(s, pos_state);
  4.1921 ++
  4.1922 ++			if (!dict_repeat(&s->dict, &s->lzma.len, s->lzma.rep0))
  4.1923 ++				return false;
  4.1924 ++		}
  4.1925 ++	}
  4.1926 ++
  4.1927 ++	/*
  4.1928 ++	 * Having the range decoder always normalized when we are outside
  4.1929 ++	 * this function makes it easier to correctly handle end of the chunk.
  4.1930 ++	 */
  4.1931 ++	rc_normalize(&s->rc);
  4.1932 ++
  4.1933 ++	return true;
  4.1934 ++}
  4.1935 ++
  4.1936 ++/*
  4.1937 ++ * Reset the LZMA decoder and range decoder state. Dictionary is nore reset
  4.1938 ++ * here, because LZMA state may be reset without resetting the dictionary.
  4.1939 ++ */
  4.1940 ++static void lzma_reset(struct xz_dec_lzma2 *s)
  4.1941 ++{
  4.1942 ++	uint16_t *probs;
  4.1943 ++	size_t i;
  4.1944 ++
  4.1945 ++	s->lzma.state = STATE_LIT_LIT;
  4.1946 ++	s->lzma.rep0 = 0;
  4.1947 ++	s->lzma.rep1 = 0;
  4.1948 ++	s->lzma.rep2 = 0;
  4.1949 ++	s->lzma.rep3 = 0;
  4.1950 ++
  4.1951 ++	/*
  4.1952 ++	 * All probabilities are initialized to the same value. This hack
  4.1953 ++	 * makes the code smaller by avoiding a separate loop for each
  4.1954 ++	 * probability array.
  4.1955 ++	 *
  4.1956 ++	 * This could be optimized so that only that part of literal
  4.1957 ++	 * probabilities that are actually required. In the common case
  4.1958 ++	 * we would write 12 KiB less.
  4.1959 ++	 */
  4.1960 ++	probs = s->lzma.is_match[0];
  4.1961 ++	for (i = 0; i < PROBS_TOTAL; ++i)
  4.1962 ++		probs[i] = RC_BIT_MODEL_TOTAL / 2;
  4.1963 ++
  4.1964 ++	rc_reset(&s->rc);
  4.1965 ++}
  4.1966 ++
  4.1967 ++/*
  4.1968 ++ * Decode and validate LZMA properties (lc/lp/pb) and calculate the bit masks
  4.1969 ++ * from the decoded lp and pb values. On success, the LZMA decoder state is
  4.1970 ++ * reset and true is returned.
  4.1971 ++ */
  4.1972 ++static bool lzma_props(struct xz_dec_lzma2 *s, uint8_t props)
  4.1973 ++{
  4.1974 ++	if (props > (4 * 5 + 4) * 9 + 8)
  4.1975 ++		return false;
  4.1976 ++
  4.1977 ++	s->lzma.pos_mask = 0;
  4.1978 ++	while (props >= 9 * 5) {
  4.1979 ++		props -= 9 * 5;
  4.1980 ++		++s->lzma.pos_mask;
  4.1981 ++	}
  4.1982 ++
  4.1983 ++	s->lzma.pos_mask = (1 << s->lzma.pos_mask) - 1;
  4.1984 ++
  4.1985 ++	s->lzma.literal_pos_mask = 0;
  4.1986 ++	while (props >= 9) {
  4.1987 ++		props -= 9;
  4.1988 ++		++s->lzma.literal_pos_mask;
  4.1989 ++	}
  4.1990 ++
  4.1991 ++	s->lzma.lc = props;
  4.1992 ++
  4.1993 ++	if (s->lzma.lc + s->lzma.literal_pos_mask > 4)
  4.1994 ++		return false;
  4.1995 ++
  4.1996 ++	s->lzma.literal_pos_mask = (1 << s->lzma.literal_pos_mask) - 1;
  4.1997 ++
  4.1998 ++	lzma_reset(s);
  4.1999 ++
  4.2000 ++	return true;
  4.2001 ++}
  4.2002 ++
  4.2003 ++/*********
  4.2004 ++ * LZMA2 *
  4.2005 ++ *********/
  4.2006 ++
  4.2007 ++/*
  4.2008 ++ * The LZMA decoder assumes that if the input limit (s->rc.in_limit) hasn't
  4.2009 ++ * been exceeded, it is safe to read up to LZMA_IN_REQUIRED bytes. This
  4.2010 ++ * wrapper function takes care of making the LZMA decoder's assumption safe.
  4.2011 ++ *
  4.2012 ++ * As long as there is plenty of input left to be decoded in the current LZMA
  4.2013 ++ * chunk, we decode directly from the caller-supplied input buffer until
  4.2014 ++ * there's LZMA_IN_REQUIRED bytes left. Those remaining bytes are copied into
  4.2015 ++ * s->temp.buf, which (hopefully) gets filled on the next call to this
  4.2016 ++ * function. We decode a few bytes from the temporary buffer so that we can
  4.2017 ++ * continue decoding from the caller-supplied input buffer again.
  4.2018 ++ */
  4.2019 ++static bool lzma2_lzma(struct xz_dec_lzma2 *s, struct xz_buf *b)
  4.2020 ++{
  4.2021 ++	size_t in_avail;
  4.2022 ++	uint32_t tmp;
  4.2023 ++
  4.2024 ++	in_avail = b->in_size - b->in_pos;
  4.2025 ++	if (s->temp.size > 0 || s->lzma2.compressed == 0) {
  4.2026 ++		tmp = 2 * LZMA_IN_REQUIRED - s->temp.size;
  4.2027 ++		if (tmp > s->lzma2.compressed - s->temp.size)
  4.2028 ++			tmp = s->lzma2.compressed - s->temp.size;
  4.2029 ++		if (tmp > in_avail)
  4.2030 ++			tmp = in_avail;
  4.2031 ++
  4.2032 ++		memcpy(s->temp.buf + s->temp.size, b->in + b->in_pos, tmp);
  4.2033 ++
  4.2034 ++		if (s->temp.size + tmp == s->lzma2.compressed) {
  4.2035 ++			memzero(s->temp.buf + s->temp.size + tmp,
  4.2036 ++					sizeof(s->temp.buf)
  4.2037 ++						- s->temp.size - tmp);
  4.2038 ++			s->rc.in_limit = s->temp.size + tmp;
  4.2039 ++		} else if (s->temp.size + tmp < LZMA_IN_REQUIRED) {
  4.2040 ++			s->temp.size += tmp;
  4.2041 ++			b->in_pos += tmp;
  4.2042 ++			return true;
  4.2043 ++		} else {
  4.2044 ++			s->rc.in_limit = s->temp.size + tmp - LZMA_IN_REQUIRED;
  4.2045 ++		}
  4.2046 ++
  4.2047 ++		s->rc.in = s->temp.buf;
  4.2048 ++		s->rc.in_pos = 0;
  4.2049 ++
  4.2050 ++		if (!lzma_main(s) || s->rc.in_pos > s->temp.size + tmp)
  4.2051 ++			return false;
  4.2052 ++
  4.2053 ++		s->lzma2.compressed -= s->rc.in_pos;
  4.2054 ++
  4.2055 ++		if (s->rc.in_pos < s->temp.size) {
  4.2056 ++			s->temp.size -= s->rc.in_pos;
  4.2057 ++			memmove(s->temp.buf, s->temp.buf + s->rc.in_pos,
  4.2058 ++					s->temp.size);
  4.2059 ++			return true;
  4.2060 ++		}
  4.2061 ++
  4.2062 ++		b->in_pos += s->rc.in_pos - s->temp.size;
  4.2063 ++		s->temp.size = 0;
  4.2064 ++	}
  4.2065 ++
  4.2066 ++	in_avail = b->in_size - b->in_pos;
  4.2067 ++	if (in_avail >= LZMA_IN_REQUIRED) {
  4.2068 ++		s->rc.in = b->in;
  4.2069 ++		s->rc.in_pos = b->in_pos;
  4.2070 ++
  4.2071 ++		if (in_avail >= s->lzma2.compressed + LZMA_IN_REQUIRED)
  4.2072 ++			s->rc.in_limit = b->in_pos + s->lzma2.compressed;
  4.2073 ++		else
  4.2074 ++			s->rc.in_limit = b->in_size - LZMA_IN_REQUIRED;
  4.2075 ++
  4.2076 ++		if (!lzma_main(s))
  4.2077 ++			return false;
  4.2078 ++
  4.2079 ++		in_avail = s->rc.in_pos - b->in_pos;
  4.2080 ++		if (in_avail > s->lzma2.compressed)
  4.2081 ++			return false;
  4.2082 ++
  4.2083 ++		s->lzma2.compressed -= in_avail;
  4.2084 ++		b->in_pos = s->rc.in_pos;
  4.2085 ++	}
  4.2086 ++
  4.2087 ++	in_avail = b->in_size - b->in_pos;
  4.2088 ++	if (in_avail < LZMA_IN_REQUIRED) {
  4.2089 ++		if (in_avail > s->lzma2.compressed)
  4.2090 ++			in_avail = s->lzma2.compressed;
  4.2091 ++
  4.2092 ++		memcpy(s->temp.buf, b->in + b->in_pos, in_avail);
  4.2093 ++		s->temp.size = in_avail;
  4.2094 ++		b->in_pos += in_avail;
  4.2095 ++	}
  4.2096 ++
  4.2097 ++	return true;
  4.2098 ++}
  4.2099 ++
  4.2100 ++/*
  4.2101 ++ * Take care of the LZMA2 control layer, and forward the job of actual LZMA
  4.2102 ++ * decoding or copying of uncompressed chunks to other functions.
  4.2103 ++ */
  4.2104 ++XZ_EXTERN enum xz_ret xz_dec_lzma2_run(struct xz_dec_lzma2 *s,
  4.2105 ++				       struct xz_buf *b)
  4.2106 ++{
  4.2107 ++	uint32_t tmp;
  4.2108 ++
  4.2109 ++	while (b->in_pos < b->in_size || s->lzma2.sequence == SEQ_LZMA_RUN) {
  4.2110 ++		switch (s->lzma2.sequence) {
  4.2111 ++		case SEQ_CONTROL:
  4.2112 ++			/*
  4.2113 ++			 * LZMA2 control byte
  4.2114 ++			 *
  4.2115 ++			 * Exact values:
  4.2116 ++			 *   0x00   End marker
  4.2117 ++			 *   0x01   Dictionary reset followed by
  4.2118 ++			 *          an uncompressed chunk
  4.2119 ++			 *   0x02   Uncompressed chunk (no dictionary reset)
  4.2120 ++			 *
  4.2121 ++			 * Highest three bits (s->control & 0xE0):
  4.2122 ++			 *   0xE0   Dictionary reset, new properties and state
  4.2123 ++			 *          reset, followed by LZMA compressed chunk
  4.2124 ++			 *   0xC0   New properties and state reset, followed
  4.2125 ++			 *          by LZMA compressed chunk (no dictionary
  4.2126 ++			 *          reset)
  4.2127 ++			 *   0xA0   State reset using old properties,
  4.2128 ++			 *          followed by LZMA compressed chunk (no
  4.2129 ++			 *          dictionary reset)
  4.2130 ++			 *   0x80   LZMA chunk (no dictionary or state reset)
  4.2131 ++			 *
  4.2132 ++			 * For LZMA compressed chunks, the lowest five bits
  4.2133 ++			 * (s->control & 1F) are the highest bits of the
  4.2134 ++			 * uncompressed size (bits 16-20).
  4.2135 ++			 *
  4.2136 ++			 * A new LZMA2 stream must begin with a dictionary
  4.2137 ++			 * reset. The first LZMA chunk must set new
  4.2138 ++			 * properties and reset the LZMA state.
  4.2139 ++			 *
  4.2140 ++			 * Values that don't match anything described above
  4.2141 ++			 * are invalid and we return XZ_DATA_ERROR.
  4.2142 ++			 */
  4.2143 ++			tmp = b->in[b->in_pos++];
  4.2144 ++
  4.2145 ++			if (tmp >= 0xE0 || tmp == 0x01) {
  4.2146 ++				s->lzma2.need_props = true;
  4.2147 ++				s->lzma2.need_dict_reset = false;
  4.2148 ++				dict_reset(&s->dict, b);
  4.2149 ++			} else if (s->lzma2.need_dict_reset) {
  4.2150 ++				return XZ_DATA_ERROR;
  4.2151 ++			}
  4.2152 ++
  4.2153 ++			if (tmp >= 0x80) {
  4.2154 ++				s->lzma2.uncompressed = (tmp & 0x1F) << 16;
  4.2155 ++				s->lzma2.sequence = SEQ_UNCOMPRESSED_1;
  4.2156 ++
  4.2157 ++				if (tmp >= 0xC0) {
  4.2158 ++					/*
  4.2159 ++					 * When there are new properties,
  4.2160 ++					 * state reset is done at
  4.2161 ++					 * SEQ_PROPERTIES.
  4.2162 ++					 */
  4.2163 ++					s->lzma2.need_props = false;
  4.2164 ++					s->lzma2.next_sequence
  4.2165 ++							= SEQ_PROPERTIES;
  4.2166 ++
  4.2167 ++				} else if (s->lzma2.need_props) {
  4.2168 ++					return XZ_DATA_ERROR;
  4.2169 ++
  4.2170 ++				} else {
  4.2171 ++					s->lzma2.next_sequence
  4.2172 ++							= SEQ_LZMA_PREPARE;
  4.2173 ++					if (tmp >= 0xA0)
  4.2174 ++						lzma_reset(s);
  4.2175 ++				}
  4.2176 ++			} else {
  4.2177 ++				if (tmp == 0x00)
  4.2178 ++					return XZ_STREAM_END;
  4.2179 ++
  4.2180 ++				if (tmp > 0x02)
  4.2181 ++					return XZ_DATA_ERROR;
  4.2182 ++
  4.2183 ++				s->lzma2.sequence = SEQ_COMPRESSED_0;
  4.2184 ++				s->lzma2.next_sequence = SEQ_COPY;
  4.2185 ++			}
  4.2186 ++
  4.2187 ++			break;
  4.2188 ++
  4.2189 ++		case SEQ_UNCOMPRESSED_1:
  4.2190 ++			s->lzma2.uncompressed
  4.2191 ++					+= (uint32_t)b->in[b->in_pos++] << 8;
  4.2192 ++			s->lzma2.sequence = SEQ_UNCOMPRESSED_2;
  4.2193 ++			break;
  4.2194 ++
  4.2195 ++		case SEQ_UNCOMPRESSED_2:
  4.2196 ++			s->lzma2.uncompressed
  4.2197 ++					+= (uint32_t)b->in[b->in_pos++] + 1;
  4.2198 ++			s->lzma2.sequence = SEQ_COMPRESSED_0;
  4.2199 ++			break;
  4.2200 ++
  4.2201 ++		case SEQ_COMPRESSED_0:
  4.2202 ++			s->lzma2.compressed
  4.2203 ++					= (uint32_t)b->in[b->in_pos++] << 8;
  4.2204 ++			s->lzma2.sequence = SEQ_COMPRESSED_1;
  4.2205 ++			break;
  4.2206 ++
  4.2207 ++		case SEQ_COMPRESSED_1:
  4.2208 ++			s->lzma2.compressed
  4.2209 ++					+= (uint32_t)b->in[b->in_pos++] + 1;
  4.2210 ++			s->lzma2.sequence = s->lzma2.next_sequence;
  4.2211 ++			break;
  4.2212 ++
  4.2213 ++		case SEQ_PROPERTIES:
  4.2214 ++			if (!lzma_props(s, b->in[b->in_pos++]))
  4.2215 ++				return XZ_DATA_ERROR;
  4.2216 ++
  4.2217 ++			s->lzma2.sequence = SEQ_LZMA_PREPARE;
  4.2218 ++
  4.2219 ++		case SEQ_LZMA_PREPARE:
  4.2220 ++			if (s->lzma2.compressed < RC_INIT_BYTES)
  4.2221 ++				return XZ_DATA_ERROR;
  4.2222 ++
  4.2223 ++			if (!rc_read_init(&s->rc, b))
  4.2224 ++				return XZ_OK;
  4.2225 ++
  4.2226 ++			s->lzma2.compressed -= RC_INIT_BYTES;
  4.2227 ++			s->lzma2.sequence = SEQ_LZMA_RUN;
  4.2228 ++
  4.2229 ++		case SEQ_LZMA_RUN:
  4.2230 ++			/*
  4.2231 ++			 * Set dictionary limit to indicate how much we want
  4.2232 ++			 * to be encoded at maximum. Decode new data into the
  4.2233 ++			 * dictionary. Flush the new data from dictionary to
  4.2234 ++			 * b->out. Check if we finished decoding this chunk.
  4.2235 ++			 * In case the dictionary got full but we didn't fill
  4.2236 ++			 * the output buffer yet, we may run this loop
  4.2237 ++			 * multiple times without changing s->lzma2.sequence.
  4.2238 ++			 */
  4.2239 ++			dict_limit(&s->dict, min_t(size_t,
  4.2240 ++					b->out_size - b->out_pos,
  4.2241 ++					s->lzma2.uncompressed));
  4.2242 ++			if (!lzma2_lzma(s, b))
  4.2243 ++				return XZ_DATA_ERROR;
  4.2244 ++
  4.2245 ++			s->lzma2.uncompressed -= dict_flush(&s->dict, b);
  4.2246 ++
  4.2247 ++			if (s->lzma2.uncompressed == 0) {
  4.2248 ++				if (s->lzma2.compressed > 0 || s->lzma.len > 0
  4.2249 ++						|| !rc_is_finished(&s->rc))
  4.2250 ++					return XZ_DATA_ERROR;
  4.2251 ++
  4.2252 ++				rc_reset(&s->rc);
  4.2253 ++				s->lzma2.sequence = SEQ_CONTROL;
  4.2254 ++
  4.2255 ++			} else if (b->out_pos == b->out_size
  4.2256 ++					|| (b->in_pos == b->in_size
  4.2257 ++						&& s->temp.size
  4.2258 ++						< s->lzma2.compressed)) {
  4.2259 ++				return XZ_OK;
  4.2260 ++			}
  4.2261 ++
  4.2262 ++			break;
  4.2263 ++
  4.2264 ++		case SEQ_COPY:
  4.2265 ++			dict_uncompressed(&s->dict, b, &s->lzma2.compressed);
  4.2266 ++			if (s->lzma2.compressed > 0)
  4.2267 ++				return XZ_OK;
  4.2268 ++
  4.2269 ++			s->lzma2.sequence = SEQ_CONTROL;
  4.2270 ++			break;
  4.2271 ++		}
  4.2272 ++	}
  4.2273 ++
  4.2274 ++	return XZ_OK;
  4.2275 ++}
  4.2276 ++
  4.2277 ++XZ_EXTERN struct xz_dec_lzma2 *xz_dec_lzma2_create(enum xz_mode mode,
  4.2278 ++						   uint32_t dict_max)
  4.2279 ++{
  4.2280 ++	struct xz_dec_lzma2 *s = kmalloc(sizeof(*s), GFP_KERNEL);
  4.2281 ++	if (s == NULL)
  4.2282 ++		return NULL;
  4.2283 ++
  4.2284 ++	s->dict.mode = mode;
  4.2285 ++	s->dict.size_max = dict_max;
  4.2286 ++
  4.2287 ++	if (DEC_IS_PREALLOC(mode)) {
  4.2288 ++		s->dict.buf = vmalloc(dict_max);
  4.2289 ++		if (s->dict.buf == NULL) {
  4.2290 ++			kfree(s);
  4.2291 ++			return NULL;
  4.2292 ++		}
  4.2293 ++	} else if (DEC_IS_DYNALLOC(mode)) {
  4.2294 ++		s->dict.buf = NULL;
  4.2295 ++		s->dict.allocated = 0;
  4.2296 ++	}
  4.2297 ++
  4.2298 ++	return s;
  4.2299 ++}
  4.2300 ++
  4.2301 ++XZ_EXTERN enum xz_ret xz_dec_lzma2_reset(struct xz_dec_lzma2 *s, uint8_t props)
  4.2302 ++{
  4.2303 ++	/* This limits dictionary size to 3 GiB to keep parsing simpler. */
  4.2304 ++	if (props > 39)
  4.2305 ++		return XZ_OPTIONS_ERROR;
  4.2306 ++
  4.2307 ++	s->dict.size = 2 + (props & 1);
  4.2308 ++	s->dict.size <<= (props >> 1) + 11;
  4.2309 ++
  4.2310 ++	if (DEC_IS_MULTI(s->dict.mode)) {
  4.2311 ++		if (s->dict.size > s->dict.size_max)
  4.2312 ++			return XZ_MEMLIMIT_ERROR;
  4.2313 ++
  4.2314 ++		s->dict.end = s->dict.size;
  4.2315 ++
  4.2316 ++		if (DEC_IS_DYNALLOC(s->dict.mode)) {
  4.2317 ++			if (s->dict.allocated < s->dict.size) {
  4.2318 ++				vfree(s->dict.buf);
  4.2319 ++				s->dict.buf = vmalloc(s->dict.size);
  4.2320 ++				if (s->dict.buf == NULL) {
  4.2321 ++					s->dict.allocated = 0;
  4.2322 ++					return XZ_MEM_ERROR;
  4.2323 ++				}
  4.2324 ++			}
  4.2325 ++		}
  4.2326 ++	}
  4.2327 ++
  4.2328 ++	s->lzma.len = 0;
  4.2329 ++
  4.2330 ++	s->lzma2.sequence = SEQ_CONTROL;
  4.2331 ++	s->lzma2.need_dict_reset = true;
  4.2332 ++
  4.2333 ++	s->temp.size = 0;
  4.2334 ++
  4.2335 ++	return XZ_OK;
  4.2336 ++}
  4.2337 ++
  4.2338 ++XZ_EXTERN void xz_dec_lzma2_end(struct xz_dec_lzma2 *s)
  4.2339 ++{
  4.2340 ++	if (DEC_IS_MULTI(s->dict.mode))
  4.2341 ++		vfree(s->dict.buf);
  4.2342 ++
  4.2343 ++	kfree(s);
  4.2344 ++}
  4.2345 +diff --git a/lib/xz/xz_dec_stream.c b/lib/xz/xz_dec_stream.c
  4.2346 +new file mode 100644
  4.2347 +index 0000000..ac809b1
  4.2348 +--- /dev/null
  4.2349 ++++ b/lib/xz/xz_dec_stream.c
  4.2350 +@@ -0,0 +1,821 @@
  4.2351 ++/*
  4.2352 ++ * .xz Stream decoder
  4.2353 ++ *
  4.2354 ++ * Author: Lasse Collin <lasse.collin@tukaani.org>
  4.2355 ++ *
  4.2356 ++ * This file has been put into the public domain.
  4.2357 ++ * You can do whatever you want with this file.
  4.2358 ++ */
  4.2359 ++
  4.2360 ++#include "xz_private.h"
  4.2361 ++#include "xz_stream.h"
  4.2362 ++
  4.2363 ++/* Hash used to validate the Index field */
  4.2364 ++struct xz_dec_hash {
  4.2365 ++	vli_type unpadded;
  4.2366 ++	vli_type uncompressed;
  4.2367 ++	uint32_t crc32;
  4.2368 ++};
  4.2369 ++
  4.2370 ++struct xz_dec {
  4.2371 ++	/* Position in dec_main() */
  4.2372 ++	enum {
  4.2373 ++		SEQ_STREAM_HEADER,
  4.2374 ++		SEQ_BLOCK_START,
  4.2375 ++		SEQ_BLOCK_HEADER,
  4.2376 ++		SEQ_BLOCK_UNCOMPRESS,
  4.2377 ++		SEQ_BLOCK_PADDING,
  4.2378 ++		SEQ_BLOCK_CHECK,
  4.2379 ++		SEQ_INDEX,
  4.2380 ++		SEQ_INDEX_PADDING,
  4.2381 ++		SEQ_INDEX_CRC32,
  4.2382 ++		SEQ_STREAM_FOOTER
  4.2383 ++	} sequence;
  4.2384 ++
  4.2385 ++	/* Position in variable-length integers and Check fields */
  4.2386 ++	uint32_t pos;
  4.2387 ++
  4.2388 ++	/* Variable-length integer decoded by dec_vli() */
  4.2389 ++	vli_type vli;
  4.2390 ++
  4.2391 ++	/* Saved in_pos and out_pos */
  4.2392 ++	size_t in_start;
  4.2393 ++	size_t out_start;
  4.2394 ++
  4.2395 ++	/* CRC32 value in Block or Index */
  4.2396 ++	uint32_t crc32;
  4.2397 ++
  4.2398 ++	/* Type of the integrity check calculated from uncompressed data */
  4.2399 ++	enum xz_check check_type;
  4.2400 ++
  4.2401 ++	/* Operation mode */
  4.2402 ++	enum xz_mode mode;
  4.2403 ++
  4.2404 ++	/*
  4.2405 ++	 * True if the next call to xz_dec_run() is allowed to return
  4.2406 ++	 * XZ_BUF_ERROR.
  4.2407 ++	 */
  4.2408 ++	bool allow_buf_error;
  4.2409 ++
  4.2410 ++	/* Information stored in Block Header */
  4.2411 ++	struct {
  4.2412 ++		/*
  4.2413 ++		 * Value stored in the Compressed Size field, or
  4.2414 ++		 * VLI_UNKNOWN if Compressed Size is not present.
  4.2415 ++		 */
  4.2416 ++		vli_type compressed;
  4.2417 ++
  4.2418 ++		/*
  4.2419 ++		 * Value stored in the Uncompressed Size field, or
  4.2420 ++		 * VLI_UNKNOWN if Uncompressed Size is not present.
  4.2421 ++		 */
  4.2422 ++		vli_type uncompressed;
  4.2423 ++
  4.2424 ++		/* Size of the Block Header field */
  4.2425 ++		uint32_t size;
  4.2426 ++	} block_header;
  4.2427 ++
  4.2428 ++	/* Information collected when decoding Blocks */
  4.2429 ++	struct {
  4.2430 ++		/* Observed compressed size of the current Block */
  4.2431 ++		vli_type compressed;
  4.2432 ++
  4.2433 ++		/* Observed uncompressed size of the current Block */
  4.2434 ++		vli_type uncompressed;
  4.2435 ++
  4.2436 ++		/* Number of Blocks decoded so far */
  4.2437 ++		vli_type count;
  4.2438 ++
  4.2439 ++		/*
  4.2440 ++		 * Hash calculated from the Block sizes. This is used to
  4.2441 ++		 * validate the Index field.
  4.2442 ++		 */
  4.2443 ++		struct xz_dec_hash hash;
  4.2444 ++	} block;
  4.2445 ++
  4.2446 ++	/* Variables needed when verifying the Index field */
  4.2447 ++	struct {
  4.2448 ++		/* Position in dec_index() */
  4.2449 ++		enum {
  4.2450 ++			SEQ_INDEX_COUNT,
  4.2451 ++			SEQ_INDEX_UNPADDED,
  4.2452 ++			SEQ_INDEX_UNCOMPRESSED
  4.2453 ++		} sequence;
  4.2454 ++
  4.2455 ++		/* Size of the Index in bytes */
  4.2456 ++		vli_type size;
  4.2457 ++
  4.2458 ++		/* Number of Records (matches block.count in valid files) */
  4.2459 ++		vli_type count;
  4.2460 ++
  4.2461 ++		/*
  4.2462 ++		 * Hash calculated from the Records (matches block.hash in
  4.2463 ++		 * valid files).
  4.2464 ++		 */
  4.2465 ++		struct xz_dec_hash hash;
  4.2466 ++	} index;
  4.2467 ++
  4.2468 ++	/*
  4.2469 ++	 * Temporary buffer needed to hold Stream Header, Block Header,
  4.2470 ++	 * and Stream Footer. The Block Header is the biggest (1 KiB)
  4.2471 ++	 * so we reserve space according to that. buf[] has to be aligned
  4.2472 ++	 * to a multiple of four bytes; the size_t variables before it
  4.2473 ++	 * should guarantee this.
  4.2474 ++	 */
  4.2475 ++	struct {
  4.2476 ++		size_t pos;
  4.2477 ++		size_t size;
  4.2478 ++		uint8_t buf[1024];
  4.2479 ++	} temp;
  4.2480 ++
  4.2481 ++	struct xz_dec_lzma2 *lzma2;
  4.2482 ++
  4.2483 ++#ifdef XZ_DEC_BCJ
  4.2484 ++	struct xz_dec_bcj *bcj;
  4.2485 ++	bool bcj_active;
  4.2486 ++#endif
  4.2487 ++};
  4.2488 ++
  4.2489 ++#ifdef XZ_DEC_ANY_CHECK
  4.2490 ++/* Sizes of the Check field with different Check IDs */
  4.2491 ++static const uint8_t check_sizes[16] = {
  4.2492 ++	0,
  4.2493 ++	4, 4, 4,
  4.2494 ++	8, 8, 8,
  4.2495 ++	16, 16, 16,
  4.2496 ++	32, 32, 32,
  4.2497 ++	64, 64, 64
  4.2498 ++};
  4.2499 ++#endif
  4.2500 ++
  4.2501 ++/*
  4.2502 ++ * Fill s->temp by copying data starting from b->in[b->in_pos]. Caller
  4.2503 ++ * must have set s->temp.pos to indicate how much data we are supposed
  4.2504 ++ * to copy into s->temp.buf. Return true once s->temp.pos has reached
  4.2505 ++ * s->temp.size.
  4.2506 ++ */
  4.2507 ++static bool fill_temp(struct xz_dec *s, struct xz_buf *b)
  4.2508 ++{
  4.2509 ++	size_t copy_size = min_t(size_t,
  4.2510 ++			b->in_size - b->in_pos, s->temp.size - s->temp.pos);
  4.2511 ++
  4.2512 ++	memcpy(s->temp.buf + s->temp.pos, b->in + b->in_pos, copy_size);
  4.2513 ++	b->in_pos += copy_size;
  4.2514 ++	s->temp.pos += copy_size;
  4.2515 ++
  4.2516 ++	if (s->temp.pos == s->temp.size) {
  4.2517 ++		s->temp.pos = 0;
  4.2518 ++		return true;
  4.2519 ++	}
  4.2520 ++
  4.2521 ++	return false;
  4.2522 ++}
  4.2523 ++
  4.2524 ++/* Decode a variable-length integer (little-endian base-128 encoding) */
  4.2525 ++static enum xz_ret dec_vli(struct xz_dec *s, const uint8_t *in,
  4.2526 ++			   size_t *in_pos, size_t in_size)
  4.2527 ++{
  4.2528 ++	uint8_t byte;
  4.2529 ++
  4.2530 ++	if (s->pos == 0)
  4.2531 ++		s->vli = 0;
  4.2532 ++
  4.2533 ++	while (*in_pos < in_size) {
  4.2534 ++		byte = in[*in_pos];
  4.2535 ++		++*in_pos;
  4.2536 ++
  4.2537 ++		s->vli |= (vli_type)(byte & 0x7F) << s->pos;
  4.2538 ++
  4.2539 ++		if ((byte & 0x80) == 0) {
  4.2540 ++			/* Don't allow non-minimal encodings. */
  4.2541 ++			if (byte == 0 && s->pos != 0)
  4.2542 ++				return XZ_DATA_ERROR;
  4.2543 ++
  4.2544 ++			s->pos = 0;
  4.2545 ++			return XZ_STREAM_END;
  4.2546 ++		}
  4.2547 ++
  4.2548 ++		s->pos += 7;
  4.2549 ++		if (s->pos == 7 * VLI_BYTES_MAX)
  4.2550 ++			return XZ_DATA_ERROR;
  4.2551 ++	}
  4.2552 ++
  4.2553 ++	return XZ_OK;
  4.2554 ++}
  4.2555 ++
  4.2556 ++/*
  4.2557 ++ * Decode the Compressed Data field from a Block. Update and validate
  4.2558 ++ * the observed compressed and uncompressed sizes of the Block so that
  4.2559 ++ * they don't exceed the values possibly stored in the Block Header
  4.2560 ++ * (validation assumes that no integer overflow occurs, since vli_type
  4.2561 ++ * is normally uint64_t). Update the CRC32 if presence of the CRC32
  4.2562 ++ * field was indicated in Stream Header.
  4.2563 ++ *
  4.2564 ++ * Once the decoding is finished, validate that the observed sizes match
  4.2565 ++ * the sizes possibly stored in the Block Header. Update the hash and
  4.2566 ++ * Block count, which are later used to validate the Index field.
  4.2567 ++ */
  4.2568 ++static enum xz_ret dec_block(struct xz_dec *s, struct xz_buf *b)
  4.2569 ++{
  4.2570 ++	enum xz_ret ret;
  4.2571 ++
  4.2572 ++	s->in_start = b->in_pos;
  4.2573 ++	s->out_start = b->out_pos;
  4.2574 ++
  4.2575 ++#ifdef XZ_DEC_BCJ
  4.2576 ++	if (s->bcj_active)
  4.2577 ++		ret = xz_dec_bcj_run(s->bcj, s->lzma2, b);
  4.2578 ++	else
  4.2579 ++#endif
  4.2580 ++		ret = xz_dec_lzma2_run(s->lzma2, b);
  4.2581 ++
  4.2582 ++	s->block.compressed += b->in_pos - s->in_start;
  4.2583 ++	s->block.uncompressed += b->out_pos - s->out_start;
  4.2584 ++
  4.2585 ++	/*
  4.2586 ++	 * There is no need to separately check for VLI_UNKNOWN, since
  4.2587 ++	 * the observed sizes are always smaller than VLI_UNKNOWN.
  4.2588 ++	 */
  4.2589 ++	if (s->block.compressed > s->block_header.compressed
  4.2590 ++			|| s->block.uncompressed
  4.2591 ++				> s->block_header.uncompressed)
  4.2592 ++		return XZ_DATA_ERROR;
  4.2593 ++
  4.2594 ++	if (s->check_type == XZ_CHECK_CRC32)
  4.2595 ++		s->crc32 = xz_crc32(b->out + s->out_start,
  4.2596 ++				b->out_pos - s->out_start, s->crc32);
  4.2597 ++
  4.2598 ++	if (ret == XZ_STREAM_END) {
  4.2599 ++		if (s->block_header.compressed != VLI_UNKNOWN
  4.2600 ++				&& s->block_header.compressed
  4.2601 ++					!= s->block.compressed)
  4.2602 ++			return XZ_DATA_ERROR;
  4.2603 ++
  4.2604 ++		if (s->block_header.uncompressed != VLI_UNKNOWN
  4.2605 ++				&& s->block_header.uncompressed
  4.2606 ++					!= s->block.uncompressed)
  4.2607 ++			return XZ_DATA_ERROR;
  4.2608 ++
  4.2609 ++		s->block.hash.unpadded += s->block_header.size
  4.2610 ++				+ s->block.compressed;
  4.2611 ++
  4.2612 ++#ifdef XZ_DEC_ANY_CHECK
  4.2613 ++		s->block.hash.unpadded += check_sizes[s->check_type];
  4.2614 ++#else
  4.2615 ++		if (s->check_type == XZ_CHECK_CRC32)
  4.2616 ++			s->block.hash.unpadded += 4;
  4.2617 ++#endif
  4.2618 ++
  4.2619 ++		s->block.hash.uncompressed += s->block.uncompressed;
  4.2620 ++		s->block.hash.crc32 = xz_crc32(
  4.2621 ++				(const uint8_t *)&s->block.hash,
  4.2622 ++				sizeof(s->block.hash), s->block.hash.crc32);
  4.2623 ++
  4.2624 ++		++s->block.count;
  4.2625 ++	}
  4.2626 ++
  4.2627 ++	return ret;
  4.2628 ++}
  4.2629 ++
  4.2630 ++/* Update the Index size and the CRC32 value. */
  4.2631 ++static void index_update(struct xz_dec *s, const struct xz_buf *b)
  4.2632 ++{
  4.2633 ++	size_t in_used = b->in_pos - s->in_start;
  4.2634 ++	s->index.size += in_used;
  4.2635 ++	s->crc32 = xz_crc32(b->in + s->in_start, in_used, s->crc32);
  4.2636 ++}
  4.2637 ++
  4.2638 ++/*
  4.2639 ++ * Decode the Number of Records, Unpadded Size, and Uncompressed Size
  4.2640 ++ * fields from the Index field. That is, Index Padding and CRC32 are not
  4.2641 ++ * decoded by this function.
  4.2642 ++ *
  4.2643 ++ * This can return XZ_OK (more input needed), XZ_STREAM_END (everything
  4.2644 ++ * successfully decoded), or XZ_DATA_ERROR (input is corrupt).
  4.2645 ++ */
  4.2646 ++static enum xz_ret dec_index(struct xz_dec *s, struct xz_buf *b)
  4.2647 ++{
  4.2648 ++	enum xz_ret ret;
  4.2649 ++
  4.2650 ++	do {
  4.2651 ++		ret = dec_vli(s, b->in, &b->in_pos, b->in_size);
  4.2652 ++		if (ret != XZ_STREAM_END) {
  4.2653 ++			index_update(s, b);
  4.2654 ++			return ret;
  4.2655 ++		}
  4.2656 ++
  4.2657 ++		switch (s->index.sequence) {
  4.2658 ++		case SEQ_INDEX_COUNT:
  4.2659 ++			s->index.count = s->vli;
  4.2660 ++
  4.2661 ++			/*
  4.2662 ++			 * Validate that the Number of Records field
  4.2663 ++			 * indicates the same number of Records as
  4.2664 ++			 * there were Blocks in the Stream.
  4.2665 ++			 */
  4.2666 ++			if (s->index.count != s->block.count)
  4.2667 ++				return XZ_DATA_ERROR;
  4.2668 ++
  4.2669 ++			s->index.sequence = SEQ_INDEX_UNPADDED;
  4.2670 ++			break;
  4.2671 ++
  4.2672 ++		case SEQ_INDEX_UNPADDED:
  4.2673 ++			s->index.hash.unpadded += s->vli;
  4.2674 ++			s->index.sequence = SEQ_INDEX_UNCOMPRESSED;
  4.2675 ++			break;
  4.2676 ++
  4.2677 ++		case SEQ_INDEX_UNCOMPRESSED:
  4.2678 ++			s->index.hash.uncompressed += s->vli;
  4.2679 ++			s->index.hash.crc32 = xz_crc32(
  4.2680 ++					(const uint8_t *)&s->index.hash,
  4.2681 ++					sizeof(s->index.hash),
  4.2682 ++					s->index.hash.crc32);
  4.2683 ++			--s->index.count;
  4.2684 ++			s->index.sequence = SEQ_INDEX_UNPADDED;
  4.2685 ++			break;
  4.2686 ++		}
  4.2687 ++	} while (s->index.count > 0);
  4.2688 ++
  4.2689 ++	return XZ_STREAM_END;
  4.2690 ++}
  4.2691 ++
  4.2692 ++/*
  4.2693 ++ * Validate that the next four input bytes match the value of s->crc32.
  4.2694 ++ * s->pos must be zero when starting to validate the first byte.
  4.2695 ++ */
  4.2696 ++static enum xz_ret crc32_validate(struct xz_dec *s, struct xz_buf *b)
  4.2697 ++{
  4.2698 ++	do {
  4.2699 ++		if (b->in_pos == b->in_size)
  4.2700 ++			return XZ_OK;
  4.2701 ++
  4.2702 ++		if (((s->crc32 >> s->pos) & 0xFF) != b->in[b->in_pos++])
  4.2703 ++			return XZ_DATA_ERROR;
  4.2704 ++
  4.2705 ++		s->pos += 8;
  4.2706 ++
  4.2707 ++	} while (s->pos < 32);
  4.2708 ++
  4.2709 ++	s->crc32 = 0;
  4.2710 ++	s->pos = 0;
  4.2711 ++
  4.2712 ++	return XZ_STREAM_END;
  4.2713 ++}
  4.2714 ++
  4.2715 ++#ifdef XZ_DEC_ANY_CHECK
  4.2716 ++/*
  4.2717 ++ * Skip over the Check field when the Check ID is not supported.
  4.2718 ++ * Returns true once the whole Check field has been skipped over.
  4.2719 ++ */
  4.2720 ++static bool check_skip(struct xz_dec *s, struct xz_buf *b)
  4.2721 ++{
  4.2722 ++	while (s->pos < check_sizes[s->check_type]) {
  4.2723 ++		if (b->in_pos == b->in_size)
  4.2724 ++			return false;
  4.2725 ++
  4.2726 ++		++b->in_pos;
  4.2727 ++		++s->pos;
  4.2728 ++	}
  4.2729 ++
  4.2730 ++	s->pos = 0;
  4.2731 ++
  4.2732 ++	return true;
  4.2733 ++}
  4.2734 ++#endif
  4.2735 ++
  4.2736 ++/* Decode the Stream Header field (the first 12 bytes of the .xz Stream). */
  4.2737 ++static enum xz_ret dec_stream_header(struct xz_dec *s)
  4.2738 ++{
  4.2739 ++	if (!memeq(s->temp.buf, HEADER_MAGIC, HEADER_MAGIC_SIZE))
  4.2740 ++		return XZ_FORMAT_ERROR;
  4.2741 ++
  4.2742 ++	if (xz_crc32(s->temp.buf + HEADER_MAGIC_SIZE, 2, 0)
  4.2743 ++			!= get_le32(s->temp.buf + HEADER_MAGIC_SIZE + 2))
  4.2744 ++		return XZ_DATA_ERROR;
  4.2745 ++
  4.2746 ++	if (s->temp.buf[HEADER_MAGIC_SIZE] != 0)
  4.2747 ++		return XZ_OPTIONS_ERROR;
  4.2748 ++
  4.2749 ++	/*
  4.2750 ++	 * Of integrity checks, we support only none (Check ID = 0) and
  4.2751 ++	 * CRC32 (Check ID = 1). However, if XZ_DEC_ANY_CHECK is defined,
  4.2752 ++	 * we will accept other check types too, but then the check won't
  4.2753 ++	 * be verified and a warning (XZ_UNSUPPORTED_CHECK) will be given.
  4.2754 ++	 */
  4.2755 ++	s->check_type = s->temp.buf[HEADER_MAGIC_SIZE + 1];
  4.2756 ++
  4.2757 ++#ifdef XZ_DEC_ANY_CHECK
  4.2758 ++	if (s->check_type > XZ_CHECK_MAX)
  4.2759 ++		return XZ_OPTIONS_ERROR;
  4.2760 ++
  4.2761 ++	if (s->check_type > XZ_CHECK_CRC32)
  4.2762 ++		return XZ_UNSUPPORTED_CHECK;
  4.2763 ++#else
  4.2764 ++	if (s->check_type > XZ_CHECK_CRC32)
  4.2765 ++		return XZ_OPTIONS_ERROR;
  4.2766 ++#endif
  4.2767 ++
  4.2768 ++	return XZ_OK;
  4.2769 ++}
  4.2770 ++
  4.2771 ++/* Decode the Stream Footer field (the last 12 bytes of the .xz Stream) */
  4.2772 ++static enum xz_ret dec_stream_footer(struct xz_dec *s)
  4.2773 ++{
  4.2774 ++	if (!memeq(s->temp.buf + 10, FOOTER_MAGIC, FOOTER_MAGIC_SIZE))
  4.2775 ++		return XZ_DATA_ERROR;
  4.2776 ++
  4.2777 ++	if (xz_crc32(s->temp.buf + 4, 6, 0) != get_le32(s->temp.buf))
  4.2778 ++		return XZ_DATA_ERROR;
  4.2779 ++
  4.2780 ++	/*
  4.2781 ++	 * Validate Backward Size. Note that we never added the size of the
  4.2782 ++	 * Index CRC32 field to s->index.size, thus we use s->index.size / 4
  4.2783 ++	 * instead of s->index.size / 4 - 1.
  4.2784 ++	 */
  4.2785 ++	if ((s->index.size >> 2) != get_le32(s->temp.buf + 4))
  4.2786 ++		return XZ_DATA_ERROR;
  4.2787 ++
  4.2788 ++	if (s->temp.buf[8] != 0 || s->temp.buf[9] != s->check_type)
  4.2789 ++		return XZ_DATA_ERROR;
  4.2790 ++
  4.2791 ++	/*
  4.2792 ++	 * Use XZ_STREAM_END instead of XZ_OK to be more convenient
  4.2793 ++	 * for the caller.
  4.2794 ++	 */
  4.2795 ++	return XZ_STREAM_END;
  4.2796 ++}
  4.2797 ++
  4.2798 ++/* Decode the Block Header and initialize the filter chain. */
  4.2799 ++static enum xz_ret dec_block_header(struct xz_dec *s)
  4.2800 ++{
  4.2801 ++	enum xz_ret ret;
  4.2802 ++
  4.2803 ++	/*
  4.2804 ++	 * Validate the CRC32. We know that the temp buffer is at least
  4.2805 ++	 * eight bytes so this is safe.
  4.2806 ++	 */
  4.2807 ++	s->temp.size -= 4;
  4.2808 ++	if (xz_crc32(s->temp.buf, s->temp.size, 0)
  4.2809 ++			!= get_le32(s->temp.buf + s->temp.size))
  4.2810 ++		return XZ_DATA_ERROR;
  4.2811 ++
  4.2812 ++	s->temp.pos = 2;
  4.2813 ++
  4.2814 ++	/*
  4.2815 ++	 * Catch unsupported Block Flags. We support only one or two filters
  4.2816 ++	 * in the chain, so we catch that with the same test.
  4.2817 ++	 */
  4.2818 ++#ifdef XZ_DEC_BCJ
  4.2819 ++	if (s->temp.buf[1] & 0x3E)
  4.2820 ++#else
  4.2821 ++	if (s->temp.buf[1] & 0x3F)
  4.2822 ++#endif
  4.2823 ++		return XZ_OPTIONS_ERROR;
  4.2824 ++
  4.2825 ++	/* Compressed Size */
  4.2826 ++	if (s->temp.buf[1] & 0x40) {
  4.2827 ++		if (dec_vli(s, s->temp.buf, &s->temp.pos, s->temp.size)
  4.2828 ++					!= XZ_STREAM_END)
  4.2829 ++			return XZ_DATA_ERROR;
  4.2830 ++
  4.2831 ++		s->block_header.compressed = s->vli;
  4.2832 ++	} else {
  4.2833 ++		s->block_header.compressed = VLI_UNKNOWN;
  4.2834 ++	}
  4.2835 ++
  4.2836 ++	/* Uncompressed Size */
  4.2837 ++	if (s->temp.buf[1] & 0x80) {
  4.2838 ++		if (dec_vli(s, s->temp.buf, &s->temp.pos, s->temp.size)
  4.2839 ++				!= XZ_STREAM_END)
  4.2840 ++			return XZ_DATA_ERROR;
  4.2841 ++
  4.2842 ++		s->block_header.uncompressed = s->vli;
  4.2843 ++	} else {
  4.2844 ++		s->block_header.uncompressed = VLI_UNKNOWN;
  4.2845 ++	}
  4.2846 ++
  4.2847 ++#ifdef XZ_DEC_BCJ
  4.2848 ++	/* If there are two filters, the first one must be a BCJ filter. */
  4.2849 ++	s->bcj_active = s->temp.buf[1] & 0x01;
  4.2850 ++	if (s->bcj_active) {
  4.2851 ++		if (s->temp.size - s->temp.pos < 2)
  4.2852 ++			return XZ_OPTIONS_ERROR;
  4.2853 ++
  4.2854 ++		ret = xz_dec_bcj_reset(s->bcj, s->temp.buf[s->temp.pos++]);
  4.2855 ++		if (ret != XZ_OK)
  4.2856 ++			return ret;
  4.2857 ++
  4.2858 ++		/*
  4.2859 ++		 * We don't support custom start offset,
  4.2860 ++		 * so Size of Properties must be zero.
  4.2861 ++		 */
  4.2862 ++		if (s->temp.buf[s->temp.pos++] != 0x00)
  4.2863 ++			return XZ_OPTIONS_ERROR;
  4.2864 ++	}
  4.2865 ++#endif
  4.2866 ++
  4.2867 ++	/* Valid Filter Flags always take at least two bytes. */
  4.2868 ++	if (s->temp.size - s->temp.pos < 2)
  4.2869 ++		return XZ_DATA_ERROR;
  4.2870 ++
  4.2871 ++	/* Filter ID = LZMA2 */
  4.2872 ++	if (s->temp.buf[s->temp.pos++] != 0x21)
  4.2873 ++		return XZ_OPTIONS_ERROR;
  4.2874 ++
  4.2875 ++	/* Size of Properties = 1-byte Filter Properties */
  4.2876 ++	if (s->temp.buf[s->temp.pos++] != 0x01)
  4.2877 ++		return XZ_OPTIONS_ERROR;
  4.2878 ++
  4.2879 ++	/* Filter Properties contains LZMA2 dictionary size. */
  4.2880 ++	if (s->temp.size - s->temp.pos < 1)
  4.2881 ++		return XZ_DATA_ERROR;
  4.2882 ++
  4.2883 ++	ret = xz_dec_lzma2_reset(s->lzma2, s->temp.buf[s->temp.pos++]);
  4.2884 ++	if (ret != XZ_OK)
  4.2885 ++		return ret;
  4.2886 ++
  4.2887 ++	/* The rest must be Header Padding. */
  4.2888 ++	while (s->temp.pos < s->temp.size)
  4.2889 ++		if (s->temp.buf[s->temp.pos++] != 0x00)
  4.2890 ++			return XZ_OPTIONS_ERROR;
  4.2891 ++
  4.2892 ++	s->temp.pos = 0;
  4.2893 ++	s->block.compressed = 0;
  4.2894 ++	s->block.uncompressed = 0;
  4.2895 ++
  4.2896 ++	return XZ_OK;
  4.2897 ++}
  4.2898 ++
  4.2899 ++static enum xz_ret dec_main(struct xz_dec *s, struct xz_buf *b)
  4.2900 ++{
  4.2901 ++	enum xz_ret ret;
  4.2902 ++
  4.2903 ++	/*
  4.2904 ++	 * Store the start position for the case when we are in the middle
  4.2905 ++	 * of the Index field.
  4.2906 ++	 */
  4.2907 ++	s->in_start = b->in_pos;
  4.2908 ++
  4.2909 ++	while (true) {
  4.2910 ++		switch (s->sequence) {
  4.2911 ++		case SEQ_STREAM_HEADER:
  4.2912 ++			/*
  4.2913 ++			 * Stream Header is copied to s->temp, and then
  4.2914 ++			 * decoded from there. This way if the caller
  4.2915 ++			 * gives us only little input at a time, we can
  4.2916 ++			 * still keep the Stream Header decoding code
  4.2917 ++			 * simple. Similar approach is used in many places
  4.2918 ++			 * in this file.
  4.2919 ++			 */
  4.2920 ++			if (!fill_temp(s, b))
  4.2921 ++				return XZ_OK;
  4.2922 ++
  4.2923 ++			/*
  4.2924 ++			 * If dec_stream_header() returns
  4.2925 ++			 * XZ_UNSUPPORTED_CHECK, it is still possible
  4.2926 ++			 * to continue decoding if working in multi-call
  4.2927 ++			 * mode. Thus, update s->sequence before calling
  4.2928 ++			 * dec_stream_header().
  4.2929 ++			 */
  4.2930 ++			s->sequence = SEQ_BLOCK_START;
  4.2931 ++
  4.2932 ++			ret = dec_stream_header(s);
  4.2933 ++			if (ret != XZ_OK)
  4.2934 ++				return ret;
  4.2935 ++
  4.2936 ++		case SEQ_BLOCK_START:
  4.2937 ++			/* We need one byte of input to continue. */
  4.2938 ++			if (b->in_pos == b->in_size)
  4.2939 ++				return XZ_OK;
  4.2940 ++
  4.2941 ++			/* See if this is the beginning of the Index field. */
  4.2942 ++			if (b->in[b->in_pos] == 0) {
  4.2943 ++				s->in_start = b->in_pos++;
  4.2944 ++				s->sequence = SEQ_INDEX;
  4.2945 ++				break;
  4.2946 ++			}
  4.2947 ++
  4.2948 ++			/*
  4.2949 ++			 * Calculate the size of the Block Header and
  4.2950 ++			 * prepare to decode it.
  4.2951 ++			 */
  4.2952 ++			s->block_header.size
  4.2953 ++				= ((uint32_t)b->in[b->in_pos] + 1) * 4;
  4.2954 ++
  4.2955 ++			s->temp.size = s->block_header.size;
  4.2956 ++			s->temp.pos = 0;
  4.2957 ++			s->sequence = SEQ_BLOCK_HEADER;
  4.2958 ++
  4.2959 ++		case SEQ_BLOCK_HEADER:
  4.2960 ++			if (!fill_temp(s, b))
  4.2961 ++				return XZ_OK;
  4.2962 ++
  4.2963 ++			ret = dec_block_header(s);
  4.2964 ++			if (ret != XZ_OK)
  4.2965 ++				return ret;
  4.2966 ++
  4.2967 ++			s->sequence = SEQ_BLOCK_UNCOMPRESS;
  4.2968 ++
  4.2969 ++		case SEQ_BLOCK_UNCOMPRESS:
  4.2970 ++			ret = dec_block(s, b);
  4.2971 ++			if (ret != XZ_STREAM_END)
  4.2972 ++				return ret;
  4.2973 ++
  4.2974 ++			s->sequence = SEQ_BLOCK_PADDING;
  4.2975 ++
  4.2976 ++		case SEQ_BLOCK_PADDING:
  4.2977 ++			/*
  4.2978 ++			 * Size of Compressed Data + Block Padding
  4.2979 ++			 * must be a multiple of four. We don't need
  4.2980 ++			 * s->block.compressed for anything else
  4.2981 ++			 * anymore, so we use it here to test the size
  4.2982 ++			 * of the Block Padding field.
  4.2983 ++			 */
  4.2984 ++			while (s->block.compressed & 3) {
  4.2985 ++				if (b->in_pos == b->in_size)
  4.2986 ++					return XZ_OK;
  4.2987 ++
  4.2988 ++				if (b->in[b->in_pos++] != 0)
  4.2989 ++					return XZ_DATA_ERROR;
  4.2990 ++
  4.2991 ++				++s->block.compressed;
  4.2992 ++			}
  4.2993 ++
  4.2994 ++			s->sequence = SEQ_BLOCK_CHECK;
  4.2995 ++
  4.2996 ++		case SEQ_BLOCK_CHECK:
  4.2997 ++			if (s->check_type == XZ_CHECK_CRC32) {
  4.2998 ++				ret = crc32_validate(s, b);
  4.2999 ++				if (ret != XZ_STREAM_END)
  4.3000 ++					return ret;
  4.3001 ++			}
  4.3002 ++#ifdef XZ_DEC_ANY_CHECK
  4.3003 ++			else if (!check_skip(s, b)) {
  4.3004 ++				return XZ_OK;
  4.3005 ++			}
  4.3006 ++#endif
  4.3007 ++
  4.3008 ++			s->sequence = SEQ_BLOCK_START;
  4.3009 ++			break;
  4.3010 ++
  4.3011 ++		case SEQ_INDEX:
  4.3012 ++			ret = dec_index(s, b);
  4.3013 ++			if (ret != XZ_STREAM_END)
  4.3014 ++				return ret;
  4.3015 ++
  4.3016 ++			s->sequence = SEQ_INDEX_PADDING;
  4.3017 ++
  4.3018 ++		case SEQ_INDEX_PADDING:
  4.3019 ++			while ((s->index.size + (b->in_pos - s->in_start))
  4.3020 ++					& 3) {
  4.3021 ++				if (b->in_pos == b->in_size) {
  4.3022 ++					index_update(s, b);
  4.3023 ++					return XZ_OK;
  4.3024 ++				}
  4.3025 ++
  4.3026 ++				if (b->in[b->in_pos++] != 0)
  4.3027 ++					return XZ_DATA_ERROR;
  4.3028 ++			}
  4.3029 ++
  4.3030 ++			/* Finish the CRC32 value and Index size. */
  4.3031 ++			index_update(s, b);
  4.3032 ++
  4.3033 ++			/* Compare the hashes to validate the Index field. */
  4.3034 ++			if (!memeq(&s->block.hash, &s->index.hash,
  4.3035 ++					sizeof(s->block.hash)))
  4.3036 ++				return XZ_DATA_ERROR;
  4.3037 ++
  4.3038 ++			s->sequence = SEQ_INDEX_CRC32;
  4.3039 ++
  4.3040 ++		case SEQ_INDEX_CRC32:
  4.3041 ++			ret = crc32_validate(s, b);
  4.3042 ++			if (ret != XZ_STREAM_END)
  4.3043 ++				return ret;
  4.3044 ++
  4.3045 ++			s->temp.size = STREAM_HEADER_SIZE;
  4.3046 ++			s->sequence = SEQ_STREAM_FOOTER;
  4.3047 ++
  4.3048 ++		case SEQ_STREAM_FOOTER:
  4.3049 ++			if (!fill_temp(s, b))
  4.3050 ++				return XZ_OK;
  4.3051 ++
  4.3052 ++			return dec_stream_footer(s);
  4.3053 ++		}
  4.3054 ++	}
  4.3055 ++
  4.3056 ++	/* Never reached */
  4.3057 ++}
  4.3058 ++
  4.3059 ++/*
  4.3060 ++ * xz_dec_run() is a wrapper for dec_main() to handle some special cases in
  4.3061 ++ * multi-call and single-call decoding.
  4.3062 ++ *
  4.3063 ++ * In multi-call mode, we must return XZ_BUF_ERROR when it seems clear that we
  4.3064 ++ * are not going to make any progress anymore. This is to prevent the caller
  4.3065 ++ * from calling us infinitely when the input file is truncated or otherwise
  4.3066 ++ * corrupt. Since zlib-style API allows that the caller fills the input buffer
  4.3067 ++ * only when the decoder doesn't produce any new output, we have to be careful
  4.3068 ++ * to avoid returning XZ_BUF_ERROR too easily: XZ_BUF_ERROR is returned only
  4.3069 ++ * after the second consecutive call to xz_dec_run() that makes no progress.
  4.3070 ++ *
  4.3071 ++ * In single-call mode, if we couldn't decode everything and no error
  4.3072 ++ * occurred, either the input is truncated or the output buffer is too small.
  4.3073 ++ * Since we know that the last input byte never produces any output, we know
  4.3074 ++ * that if all the input was consumed and decoding wasn't finished, the file
  4.3075 ++ * must be corrupt. Otherwise the output buffer has to be too small or the
  4.3076 ++ * file is corrupt in a way that decoding it produces too big output.
  4.3077 ++ *
  4.3078 ++ * If single-call decoding fails, we reset b->in_pos and b->out_pos back to
  4.3079 ++ * their original values. This is because with some filter chains there won't
  4.3080 ++ * be any valid uncompressed data in the output buffer unless the decoding
  4.3081 ++ * actually succeeds (that's the price to pay of using the output buffer as
  4.3082 ++ * the workspace).
  4.3083 ++ */
  4.3084 ++XZ_EXTERN enum xz_ret xz_dec_run(struct xz_dec *s, struct xz_buf *b)
  4.3085 ++{
  4.3086 ++	size_t in_start;
  4.3087 ++	size_t out_start;
  4.3088 ++	enum xz_ret ret;
  4.3089 ++
  4.3090 ++	if (DEC_IS_SINGLE(s->mode))
  4.3091 ++		xz_dec_reset(s);
  4.3092 ++
  4.3093 ++	in_start = b->in_pos;
  4.3094 ++	out_start = b->out_pos;
  4.3095 ++	ret = dec_main(s, b);
  4.3096 ++
  4.3097 ++	if (DEC_IS_SINGLE(s->mode)) {
  4.3098 ++		if (ret == XZ_OK)
  4.3099 ++			ret = b->in_pos == b->in_size
  4.3100 ++					? XZ_DATA_ERROR : XZ_BUF_ERROR;
  4.3101 ++
  4.3102 ++		if (ret != XZ_STREAM_END) {
  4.3103 ++			b->in_pos = in_start;
  4.3104 ++			b->out_pos = out_start;
  4.3105 ++		}
  4.3106 ++
  4.3107 ++	} else if (ret == XZ_OK && in_start == b->in_pos
  4.3108 ++			&& out_start == b->out_pos) {
  4.3109 ++		if (s->allow_buf_error)
  4.3110 ++			ret = XZ_BUF_ERROR;
  4.3111 ++
  4.3112 ++		s->allow_buf_error = true;
  4.3113 ++	} else {
  4.3114 ++		s->allow_buf_error = false;
  4.3115 ++	}
  4.3116 ++
  4.3117 ++	return ret;
  4.3118 ++}
  4.3119 ++
  4.3120 ++XZ_EXTERN struct xz_dec *xz_dec_init(enum xz_mode mode, uint32_t dict_max)
  4.3121 ++{
  4.3122 ++	struct xz_dec *s = kmalloc(sizeof(*s), GFP_KERNEL);
  4.3123 ++	if (s == NULL)
  4.3124 ++		return NULL;
  4.3125 ++
  4.3126 ++	s->mode = mode;
  4.3127 ++
  4.3128 ++#ifdef XZ_DEC_BCJ
  4.3129 ++	s->bcj = xz_dec_bcj_create(DEC_IS_SINGLE(mode));
  4.3130 ++	if (s->bcj == NULL)
  4.3131 ++		goto error_bcj;
  4.3132 ++#endif
  4.3133 ++
  4.3134 ++	s->lzma2 = xz_dec_lzma2_create(mode, dict_max);
  4.3135 ++	if (s->lzma2 == NULL)
  4.3136 ++		goto error_lzma2;
  4.3137 ++
  4.3138 ++	xz_dec_reset(s);
  4.3139 ++	return s;
  4.3140 ++
  4.3141 ++error_lzma2:
  4.3142 ++#ifdef XZ_DEC_BCJ
  4.3143 ++	xz_dec_bcj_end(s->bcj);
  4.3144 ++error_bcj:
  4.3145 ++#endif
  4.3146 ++	kfree(s);
  4.3147 ++	return NULL;
  4.3148 ++}
  4.3149 ++
  4.3150 ++XZ_EXTERN void xz_dec_reset(struct xz_dec *s)
  4.3151 ++{
  4.3152 ++	s->sequence = SEQ_STREAM_HEADER;
  4.3153 ++	s->allow_buf_error = false;
  4.3154 ++	s->pos = 0;
  4.3155 ++	s->crc32 = 0;
  4.3156 ++	memzero(&s->block, sizeof(s->block));
  4.3157 ++	memzero(&s->index, sizeof(s->index));
  4.3158 ++	s->temp.pos = 0;
  4.3159 ++	s->temp.size = STREAM_HEADER_SIZE;
  4.3160 ++}
  4.3161 ++
  4.3162 ++XZ_EXTERN void xz_dec_end(struct xz_dec *s)
  4.3163 ++{
  4.3164 ++	if (s != NULL) {
  4.3165 ++		xz_dec_lzma2_end(s->lzma2);
  4.3166 ++#ifdef XZ_DEC_BCJ
  4.3167 ++		xz_dec_bcj_end(s->bcj);
  4.3168 ++#endif
  4.3169 ++		kfree(s);
  4.3170 ++	}
  4.3171 ++}
  4.3172 +diff --git a/lib/xz/xz_dec_syms.c b/lib/xz/xz_dec_syms.c
  4.3173 +new file mode 100644
  4.3174 +index 0000000..32eb3c0
  4.3175 +--- /dev/null
  4.3176 ++++ b/lib/xz/xz_dec_syms.c
  4.3177 +@@ -0,0 +1,26 @@
  4.3178 ++/*
  4.3179 ++ * XZ decoder module information
  4.3180 ++ *
  4.3181 ++ * Author: Lasse Collin <lasse.collin@tukaani.org>
  4.3182 ++ *
  4.3183 ++ * This file has been put into the public domain.
  4.3184 ++ * You can do whatever you want with this file.
  4.3185 ++ */
  4.3186 ++
  4.3187 ++#include <linux/module.h>
  4.3188 ++#include <linux/xz.h>
  4.3189 ++
  4.3190 ++EXPORT_SYMBOL(xz_dec_init);
  4.3191 ++EXPORT_SYMBOL(xz_dec_reset);
  4.3192 ++EXPORT_SYMBOL(xz_dec_run);
  4.3193 ++EXPORT_SYMBOL(xz_dec_end);
  4.3194 ++
  4.3195 ++MODULE_DESCRIPTION("XZ decompressor");
  4.3196 ++MODULE_VERSION("1.0");
  4.3197 ++MODULE_AUTHOR("Lasse Collin <lasse.collin@tukaani.org> and Igor Pavlov");
  4.3198 ++
  4.3199 ++/*
  4.3200 ++ * This code is in the public domain, but in Linux it's simplest to just
  4.3201 ++ * say it's GPL and consider the authors as the copyright holders.
  4.3202 ++ */
  4.3203 ++MODULE_LICENSE("GPL");
  4.3204 +diff --git a/lib/xz/xz_dec_test.c b/lib/xz/xz_dec_test.c
  4.3205 +new file mode 100644
  4.3206 +index 0000000..da28a19
  4.3207 +--- /dev/null
  4.3208 ++++ b/lib/xz/xz_dec_test.c
  4.3209 +@@ -0,0 +1,220 @@
  4.3210 ++/*
  4.3211 ++ * XZ decoder tester
  4.3212 ++ *
  4.3213 ++ * Author: Lasse Collin <lasse.collin@tukaani.org>
  4.3214 ++ *
  4.3215 ++ * This file has been put into the public domain.
  4.3216 ++ * You can do whatever you want with this file.
  4.3217 ++ */
  4.3218 ++
  4.3219 ++#include <linux/kernel.h>
  4.3220 ++#include <linux/module.h>
  4.3221 ++#include <linux/fs.h>
  4.3222 ++#include <linux/uaccess.h>
  4.3223 ++#include <linux/crc32.h>
  4.3224 ++#include <linux/xz.h>
  4.3225 ++
  4.3226 ++/* Maximum supported dictionary size */
  4.3227 ++#define DICT_MAX (1 << 20)
  4.3228 ++
  4.3229 ++/* Device name to pass to register_chrdev(). */
  4.3230 ++#define DEVICE_NAME "xz_dec_test"
  4.3231 ++
  4.3232 ++/* Dynamically allocated device major number */
  4.3233 ++static int device_major;
  4.3234 ++
  4.3235 ++/*
  4.3236 ++ * We reuse the same decoder state, and thus can decode only one
  4.3237 ++ * file at a time.
  4.3238 ++ */
  4.3239 ++static bool device_is_open;
  4.3240 ++
  4.3241 ++/* XZ decoder state */
  4.3242 ++static struct xz_dec *state;
  4.3243 ++
  4.3244 ++/*
  4.3245 ++ * Return value of xz_dec_run(). We need to avoid calling xz_dec_run() after
  4.3246 ++ * it has returned XZ_STREAM_END, so we make this static.
  4.3247 ++ */
  4.3248 ++static enum xz_ret ret;
  4.3249 ++
  4.3250 ++/*
  4.3251 ++ * Input and output buffers. The input buffer is used as a temporary safe
  4.3252 ++ * place for the data coming from the userspace.
  4.3253 ++ */
  4.3254 ++static uint8_t buffer_in[1024];
  4.3255 ++static uint8_t buffer_out[1024];
  4.3256 ++
  4.3257 ++/*
  4.3258 ++ * Structure to pass the input and output buffers to the XZ decoder.
  4.3259 ++ * A few of the fields are never modified so we initialize them here.
  4.3260 ++ */
  4.3261 ++static struct xz_buf buffers = {
  4.3262 ++	.in = buffer_in,
  4.3263 ++	.out = buffer_out,
  4.3264 ++	.out_size = sizeof(buffer_out)
  4.3265 ++};
  4.3266 ++
  4.3267 ++/*
  4.3268 ++ * CRC32 of uncompressed data. This is used to give the user a simple way
  4.3269 ++ * to check that the decoder produces correct output.
  4.3270 ++ */
  4.3271 ++static uint32_t crc;
  4.3272 ++
  4.3273 ++static int xz_dec_test_open(struct inode *i, struct file *f)
  4.3274 ++{
  4.3275 ++	if (device_is_open)
  4.3276 ++		return -EBUSY;
  4.3277 ++
  4.3278 ++	device_is_open = true;
  4.3279 ++
  4.3280 ++	xz_dec_reset(state);
  4.3281 ++	ret = XZ_OK;
  4.3282 ++	crc = 0xFFFFFFFF;
  4.3283 ++
  4.3284 ++	buffers.in_pos = 0;
  4.3285 ++	buffers.in_size = 0;
  4.3286 ++	buffers.out_pos = 0;
  4.3287 ++
  4.3288 ++	printk(KERN_INFO DEVICE_NAME ": opened\n");
  4.3289 ++	return 0;
  4.3290 ++}
  4.3291 ++
  4.3292 ++static int xz_dec_test_release(struct inode *i, struct file *f)
  4.3293 ++{
  4.3294 ++	device_is_open = false;
  4.3295 ++
  4.3296 ++	if (ret == XZ_OK)
  4.3297 ++		printk(KERN_INFO DEVICE_NAME ": input was truncated\n");
  4.3298 ++
  4.3299 ++	printk(KERN_INFO DEVICE_NAME ": closed\n");
  4.3300 ++	return 0;
  4.3301 ++}
  4.3302 ++
  4.3303 ++/*
  4.3304 ++ * Decode the data given to us from the userspace. CRC32 of the uncompressed
  4.3305 ++ * data is calculated and is printed at the end of successful decoding. The
  4.3306 ++ * uncompressed data isn't stored anywhere for further use.
  4.3307 ++ *
  4.3308 ++ * The .xz file must have exactly one Stream and no Stream Padding. The data
  4.3309 ++ * after the first Stream is considered to be garbage.
  4.3310 ++ */
  4.3311 ++static ssize_t xz_dec_test_write(struct file *file, const char __user *buf,
  4.3312 ++				 size_t size, loff_t *pos)
  4.3313 ++{
  4.3314 ++	size_t remaining;
  4.3315 ++
  4.3316 ++	if (ret != XZ_OK) {
  4.3317 ++		if (size > 0)
  4.3318 ++			printk(KERN_INFO DEVICE_NAME ": %zu bytes of "
  4.3319 ++					"garbage at the end of the file\n",
  4.3320 ++					size);
  4.3321 ++
  4.3322 ++		return -ENOSPC;
  4.3323 ++	}
  4.3324 ++
  4.3325 ++	printk(KERN_INFO DEVICE_NAME ": decoding %zu bytes of input\n",
  4.3326 ++			size);
  4.3327 ++
  4.3328 ++	remaining = size;
  4.3329 ++	while ((remaining > 0 || buffers.out_pos == buffers.out_size)
  4.3330 ++			&& ret == XZ_OK) {
  4.3331 ++		if (buffers.in_pos == buffers.in_size) {
  4.3332 ++			buffers.in_pos = 0;
  4.3333 ++			buffers.in_size = min(remaining, sizeof(buffer_in));
  4.3334 ++			if (copy_from_user(buffer_in, buf, buffers.in_size))
  4.3335 ++				return -EFAULT;
  4.3336 ++
  4.3337 ++			buf += buffers.in_size;
  4.3338 ++			remaining -= buffers.in_size;
  4.3339 ++		}
  4.3340 ++
  4.3341 ++		buffers.out_pos = 0;
  4.3342 ++		ret = xz_dec_run(state, &buffers);
  4.3343 ++		crc = crc32(crc, buffer_out, buffers.out_pos);
  4.3344 ++	}
  4.3345 ++
  4.3346 ++	switch (ret) {
  4.3347 ++	case XZ_OK:
  4.3348 ++		printk(KERN_INFO DEVICE_NAME ": XZ_OK\n");
  4.3349 ++		return size;
  4.3350 ++
  4.3351 ++	case XZ_STREAM_END:
  4.3352 ++		printk(KERN_INFO DEVICE_NAME ": XZ_STREAM_END, "
  4.3353 ++				"CRC32 = 0x%08X\n", ~crc);
  4.3354 ++		return size - remaining - (buffers.in_size - buffers.in_pos);
  4.3355 ++
  4.3356 ++	case XZ_MEMLIMIT_ERROR:
  4.3357 ++		printk(KERN_INFO DEVICE_NAME ": XZ_MEMLIMIT_ERROR\n");
  4.3358 ++		break;
  4.3359 ++
  4.3360 ++	case XZ_FORMAT_ERROR:
  4.3361 ++		printk(KERN_INFO DEVICE_NAME ": XZ_FORMAT_ERROR\n");
  4.3362 ++		break;
  4.3363 ++
  4.3364 ++	case XZ_OPTIONS_ERROR:
  4.3365 ++		printk(KERN_INFO DEVICE_NAME ": XZ_OPTIONS_ERROR\n");
  4.3366 ++		break;
  4.3367 ++
  4.3368 ++	case XZ_DATA_ERROR:
  4.3369 ++		printk(KERN_INFO DEVICE_NAME ": XZ_DATA_ERROR\n");
  4.3370 ++		break;
  4.3371 ++
  4.3372 ++	case XZ_BUF_ERROR:
  4.3373 ++		printk(KERN_INFO DEVICE_NAME ": XZ_BUF_ERROR\n");
  4.3374 ++		break;
  4.3375 ++
  4.3376 ++	default:
  4.3377 ++		printk(KERN_INFO DEVICE_NAME ": Bug detected!\n");
  4.3378 ++		break;
  4.3379 ++	}
  4.3380 ++
  4.3381 ++	return -EIO;
  4.3382 ++}
  4.3383 ++
  4.3384 ++/* Allocate the XZ decoder state and register the character device. */
  4.3385 ++static int __init xz_dec_test_init(void)
  4.3386 ++{
  4.3387 ++	static const struct file_operations fileops = {
  4.3388 ++		.owner = THIS_MODULE,
  4.3389 ++		.open = &xz_dec_test_open,
  4.3390 ++		.release = &xz_dec_test_release,
  4.3391 ++		.write = &xz_dec_test_write
  4.3392 ++	};
  4.3393 ++
  4.3394 ++	state = xz_dec_init(XZ_PREALLOC, DICT_MAX);
  4.3395 ++	if (state == NULL)
  4.3396 ++		return -ENOMEM;
  4.3397 ++
  4.3398 ++	device_major = register_chrdev(0, DEVICE_NAME, &fileops);
  4.3399 ++	if (device_major < 0) {
  4.3400 ++		xz_dec_end(state);
  4.3401 ++		return device_major;
  4.3402 ++	}
  4.3403 ++
  4.3404 ++	printk(KERN_INFO DEVICE_NAME ": module loaded\n");
  4.3405 ++	printk(KERN_INFO DEVICE_NAME ": Create a device node with "
  4.3406 ++			"'mknod " DEVICE_NAME " c %d 0' and write .xz files "
  4.3407 ++			"to it.\n", device_major);
  4.3408 ++	return 0;
  4.3409 ++}
  4.3410 ++
  4.3411 ++static void __exit xz_dec_test_exit(void)
  4.3412 ++{
  4.3413 ++	unregister_chrdev(device_major, DEVICE_NAME);
  4.3414 ++	xz_dec_end(state);
  4.3415 ++	printk(KERN_INFO DEVICE_NAME ": module unloaded\n");
  4.3416 ++}
  4.3417 ++
  4.3418 ++module_init(xz_dec_test_init);
  4.3419 ++module_exit(xz_dec_test_exit);
  4.3420 ++
  4.3421 ++MODULE_DESCRIPTION("XZ decompressor tester");
  4.3422 ++MODULE_VERSION("1.0");
  4.3423 ++MODULE_AUTHOR("Lasse Collin <lasse.collin@tukaani.org>");
  4.3424 ++
  4.3425 ++/*
  4.3426 ++ * This code is in the public domain, but in Linux it's simplest to just
  4.3427 ++ * say it's GPL and consider the authors as the copyright holders.
  4.3428 ++ */
  4.3429 ++MODULE_LICENSE("GPL");
  4.3430 +diff --git a/lib/xz/xz_lzma2.h b/lib/xz/xz_lzma2.h
  4.3431 +new file mode 100644
  4.3432 +index 0000000..071d67b
  4.3433 +--- /dev/null
  4.3434 ++++ b/lib/xz/xz_lzma2.h
  4.3435 +@@ -0,0 +1,204 @@
  4.3436 ++/*
  4.3437 ++ * LZMA2 definitions
  4.3438 ++ *
  4.3439 ++ * Authors: Lasse Collin <lasse.collin@tukaani.org>
  4.3440 ++ *          Igor Pavlov <http://7-zip.org/>
  4.3441 ++ *
  4.3442 ++ * This file has been put into the public domain.
  4.3443 ++ * You can do whatever you want with this file.
  4.3444 ++ */
  4.3445 ++
  4.3446 ++#ifndef XZ_LZMA2_H
  4.3447 ++#define XZ_LZMA2_H
  4.3448 ++
  4.3449 ++/* Range coder constants */
  4.3450 ++#define RC_SHIFT_BITS 8
  4.3451 ++#define RC_TOP_BITS 24
  4.3452 ++#define RC_TOP_VALUE (1 << RC_TOP_BITS)
  4.3453 ++#define RC_BIT_MODEL_TOTAL_BITS 11
  4.3454 ++#define RC_BIT_MODEL_TOTAL (1 << RC_BIT_MODEL_TOTAL_BITS)
  4.3455 ++#define RC_MOVE_BITS 5
  4.3456 ++
  4.3457 ++/*
  4.3458 ++ * Maximum number of position states. A position state is the lowest pb
  4.3459 ++ * number of bits of the current uncompressed offset. In some places there
  4.3460 ++ * are different sets of probabilities for different position states.
  4.3461 ++ */
  4.3462 ++#define POS_STATES_MAX (1 << 4)
  4.3463 ++
  4.3464 ++/*
  4.3465 ++ * This enum is used to track which LZMA symbols have occurred most recently
  4.3466 ++ * and in which order. This information is used to predict the next symbol.
  4.3467 ++ *
  4.3468 ++ * Symbols:
  4.3469 ++ *  - Literal: One 8-bit byte
  4.3470 ++ *  - Match: Repeat a chunk of data at some distance
  4.3471 ++ *  - Long repeat: Multi-byte match at a recently seen distance
  4.3472 ++ *  - Short repeat: One-byte repeat at a recently seen distance
  4.3473 ++ *
  4.3474 ++ * The symbol names are in from STATE_oldest_older_previous. REP means
  4.3475 ++ * either short or long repeated match, and NONLIT means any non-literal.
  4.3476 ++ */
  4.3477 ++enum lzma_state {
  4.3478 ++	STATE_LIT_LIT,
  4.3479 ++	STATE_MATCH_LIT_LIT,
  4.3480 ++	STATE_REP_LIT_LIT,
  4.3481 ++	STATE_SHORTREP_LIT_LIT,
  4.3482 ++	STATE_MATCH_LIT,
  4.3483 ++	STATE_REP_LIT,
  4.3484 ++	STATE_SHORTREP_LIT,
  4.3485 ++	STATE_LIT_MATCH,
  4.3486 ++	STATE_LIT_LONGREP,
  4.3487 ++	STATE_LIT_SHORTREP,
  4.3488 ++	STATE_NONLIT_MATCH,
  4.3489 ++	STATE_NONLIT_REP
  4.3490 ++};
  4.3491 ++
  4.3492 ++/* Total number of states */
  4.3493 ++#define STATES 12
  4.3494 ++
  4.3495 ++/* The lowest 7 states indicate that the previous state was a literal. */
  4.3496 ++#define LIT_STATES 7
  4.3497 ++
  4.3498 ++/* Indicate that the latest symbol was a literal. */
  4.3499 ++static inline void lzma_state_literal(enum lzma_state *state)
  4.3500 ++{
  4.3501 ++	if (*state <= STATE_SHORTREP_LIT_LIT)
  4.3502 ++		*state = STATE_LIT_LIT;
  4.3503 ++	else if (*state <= STATE_LIT_SHORTREP)
  4.3504 ++		*state -= 3;
  4.3505 ++	else
  4.3506 ++		*state -= 6;
  4.3507 ++}
  4.3508 ++
  4.3509 ++/* Indicate that the latest symbol was a match. */
  4.3510 ++static inline void lzma_state_match(enum lzma_state *state)
  4.3511 ++{
  4.3512 ++	*state = *state < LIT_STATES ? STATE_LIT_MATCH : STATE_NONLIT_MATCH;
  4.3513 ++}
  4.3514 ++
  4.3515 ++/* Indicate that the latest state was a long repeated match. */
  4.3516 ++static inline void lzma_state_long_rep(enum lzma_state *state)
  4.3517 ++{
  4.3518 ++	*state = *state < LIT_STATES ? STATE_LIT_LONGREP : STATE_NONLIT_REP;
  4.3519 ++}
  4.3520 ++
  4.3521 ++/* Indicate that the latest symbol was a short match. */
  4.3522 ++static inline void lzma_state_short_rep(enum lzma_state *state)
  4.3523 ++{
  4.3524 ++	*state = *state < LIT_STATES ? STATE_LIT_SHORTREP : STATE_NONLIT_REP;
  4.3525 ++}
  4.3526 ++
  4.3527 ++/* Test if the previous symbol was a literal. */
  4.3528 ++static inline bool lzma_state_is_literal(enum lzma_state state)
  4.3529 ++{
  4.3530 ++	return state < LIT_STATES;
  4.3531 ++}
  4.3532 ++
  4.3533 ++/* Each literal coder is divided in three sections:
  4.3534 ++ *   - 0x001-0x0FF: Without match byte
  4.3535 ++ *   - 0x101-0x1FF: With match byte; match bit is 0
  4.3536 ++ *   - 0x201-0x2FF: With match byte; match bit is 1
  4.3537 ++ *
  4.3538 ++ * Match byte is used when the previous LZMA symbol was something else than
  4.3539 ++ * a literal (that is, it was some kind of match).
  4.3540 ++ */
  4.3541 ++#define LITERAL_CODER_SIZE 0x300
  4.3542 ++
  4.3543 ++/* Maximum number of literal coders */
  4.3544 ++#define LITERAL_CODERS_MAX (1 << 4)
  4.3545 ++
  4.3546 ++/* Minimum length of a match is two bytes. */
  4.3547 ++#define MATCH_LEN_MIN 2
  4.3548 ++
  4.3549 ++/* Match length is encoded with 4, 5, or 10 bits.
  4.3550 ++ *
  4.3551 ++ * Length   Bits
  4.3552 ++ *  2-9      4 = Choice=0 + 3 bits
  4.3553 ++ * 10-17     5 = Choice=1 + Choice2=0 + 3 bits
  4.3554 ++ * 18-273   10 = Choice=1 + Choice2=1 + 8 bits
  4.3555 ++ */
  4.3556 ++#define LEN_LOW_BITS 3
  4.3557 ++#define LEN_LOW_SYMBOLS (1 << LEN_LOW_BITS)
  4.3558 ++#define LEN_MID_BITS 3
  4.3559 ++#define LEN_MID_SYMBOLS (1 << LEN_MID_BITS)
  4.3560 ++#define LEN_HIGH_BITS 8
  4.3561 ++#define LEN_HIGH_SYMBOLS (1 << LEN_HIGH_BITS)
  4.3562 ++#define LEN_SYMBOLS (LEN_LOW_SYMBOLS + LEN_MID_SYMBOLS + LEN_HIGH_SYMBOLS)
  4.3563 ++
  4.3564 ++/*
  4.3565 ++ * Maximum length of a match is 273 which is a result of the encoding
  4.3566 ++ * described above.
  4.3567 ++ */
  4.3568 ++#define MATCH_LEN_MAX (MATCH_LEN_MIN + LEN_SYMBOLS - 1)
  4.3569 ++
  4.3570 ++/*
  4.3571 ++ * Different sets of probabilities are used for match distances that have
  4.3572 ++ * very short match length: Lengths of 2, 3, and 4 bytes have a separate
  4.3573 ++ * set of probabilities for each length. The matches with longer length
  4.3574 ++ * use a shared set of probabilities.
  4.3575 ++ */
  4.3576 ++#define DIST_STATES 4
  4.3577 ++
  4.3578 ++/*
  4.3579 ++ * Get the index of the appropriate probability array for decoding
  4.3580 ++ * the distance slot.
  4.3581 ++ */
  4.3582 ++static inline uint32_t lzma_get_dist_state(uint32_t len)
  4.3583 ++{
  4.3584 ++	return len < DIST_STATES + MATCH_LEN_MIN
  4.3585 ++			? len - MATCH_LEN_MIN : DIST_STATES - 1;
  4.3586 ++}
  4.3587 ++
  4.3588 ++/*
  4.3589 ++ * The highest two bits of a 32-bit match distance are encoded using six bits.
  4.3590 ++ * This six-bit value is called a distance slot. This way encoding a 32-bit
  4.3591 ++ * value takes 6-36 bits, larger values taking more bits.
  4.3592 ++ */
  4.3593 ++#define DIST_SLOT_BITS 6
  4.3594 ++#define DIST_SLOTS (1 << DIST_SLOT_BITS)
  4.3595 ++
  4.3596 ++/* Match distances up to 127 are fully encoded using probabilities. Since
  4.3597 ++ * the highest two bits (distance slot) are always encoded using six bits,
  4.3598 ++ * the distances 0-3 don't need any additional bits to encode, since the
  4.3599 ++ * distance slot itself is the same as the actual distance. DIST_MODEL_START
  4.3600 ++ * indicates the first distance slot where at least one additional bit is
  4.3601 ++ * needed.
  4.3602 ++ */
  4.3603 ++#define DIST_MODEL_START 4
  4.3604 ++
  4.3605 ++/*
  4.3606 ++ * Match distances greater than 127 are encoded in three pieces:
  4.3607 ++ *   - distance slot: the highest two bits
  4.3608 ++ *   - direct bits: 2-26 bits below the highest two bits
  4.3609 ++ *   - alignment bits: four lowest bits
  4.3610 ++ *
  4.3611 ++ * Direct bits don't use any probabilities.
  4.3612 ++ *
  4.3613 ++ * The distance slot value of 14 is for distances 128-191.
  4.3614 ++ */
  4.3615 ++#define DIST_MODEL_END 14
  4.3616 ++
  4.3617 ++/* Distance slots that indicate a distance <= 127. */
  4.3618 ++#define FULL_DISTANCES_BITS (DIST_MODEL_END / 2)
  4.3619 ++#define FULL_DISTANCES (1 << FULL_DISTANCES_BITS)
  4.3620 ++
  4.3621 ++/*
  4.3622 ++ * For match distances greater than 127, only the highest two bits and the
  4.3623 ++ * lowest four bits (alignment) is encoded using probabilities.
  4.3624 ++ */
  4.3625 ++#define ALIGN_BITS 4
  4.3626 ++#define ALIGN_SIZE (1 << ALIGN_BITS)
  4.3627 ++#define ALIGN_MASK (ALIGN_SIZE - 1)
  4.3628 ++
  4.3629 ++/* Total number of all probability variables */
  4.3630 ++#define PROBS_TOTAL (1846 + LITERAL_CODERS_MAX * LITERAL_CODER_SIZE)
  4.3631 ++
  4.3632 ++/*
  4.3633 ++ * LZMA remembers the four most recent match distances. Reusing these
  4.3634 ++ * distances tends to take less space than re-encoding the actual
  4.3635 ++ * distance value.
  4.3636 ++ */
  4.3637 ++#define REPS 4
  4.3638 ++
  4.3639 ++#endif
  4.3640 +diff --git a/lib/xz/xz_private.h b/lib/xz/xz_private.h
  4.3641 +new file mode 100644
  4.3642 +index 0000000..a65633e
  4.3643 +--- /dev/null
  4.3644 ++++ b/lib/xz/xz_private.h
  4.3645 +@@ -0,0 +1,156 @@
  4.3646 ++/*
  4.3647 ++ * Private includes and definitions
  4.3648 ++ *
  4.3649 ++ * Author: Lasse Collin <lasse.collin@tukaani.org>
  4.3650 ++ *
  4.3651 ++ * This file has been put into the public domain.
  4.3652 ++ * You can do whatever you want with this file.
  4.3653 ++ */
  4.3654 ++
  4.3655 ++#ifndef XZ_PRIVATE_H
  4.3656 ++#define XZ_PRIVATE_H
  4.3657 ++
  4.3658 ++#ifdef __KERNEL__
  4.3659 ++#	include <linux/xz.h>
  4.3660 ++#	include <asm/byteorder.h>
  4.3661 ++#	include <asm/unaligned.h>
  4.3662 ++	/* XZ_PREBOOT may be defined only via decompress_unxz.c. */
  4.3663 ++#	ifndef XZ_PREBOOT
  4.3664 ++#		include <linux/slab.h>
  4.3665 ++#		include <linux/vmalloc.h>
  4.3666 ++#		include <linux/string.h>
  4.3667 ++#		ifdef CONFIG_XZ_DEC_X86
  4.3668 ++#			define XZ_DEC_X86
  4.3669 ++#		endif
  4.3670 ++#		ifdef CONFIG_XZ_DEC_POWERPC
  4.3671 ++#			define XZ_DEC_POWERPC
  4.3672 ++#		endif
  4.3673 ++#		ifdef CONFIG_XZ_DEC_IA64
  4.3674 ++#			define XZ_DEC_IA64
  4.3675 ++#		endif
  4.3676 ++#		ifdef CONFIG_XZ_DEC_ARM
  4.3677 ++#			define XZ_DEC_ARM
  4.3678 ++#		endif
  4.3679 ++#		ifdef CONFIG_XZ_DEC_ARMTHUMB
  4.3680 ++#			define XZ_DEC_ARMTHUMB
  4.3681 ++#		endif
  4.3682 ++#		ifdef CONFIG_XZ_DEC_SPARC
  4.3683 ++#			define XZ_DEC_SPARC
  4.3684 ++#		endif
  4.3685 ++#		define memeq(a, b, size) (memcmp(a, b, size) == 0)
  4.3686 ++#		define memzero(buf, size) memset(buf, 0, size)
  4.3687 ++#	endif
  4.3688 ++#	define get_le32(p) le32_to_cpup((const uint32_t *)(p))
  4.3689 ++#else
  4.3690 ++	/*
  4.3691 ++	 * For userspace builds, use a separate header to define the required
  4.3692 ++	 * macros and functions. This makes it easier to adapt the code into
  4.3693 ++	 * different environments and avoids clutter in the Linux kernel tree.
  4.3694 ++	 */
  4.3695 ++#	include "xz_config.h"
  4.3696 ++#endif
  4.3697 ++
  4.3698 ++/* If no specific decoding mode is requested, enable support for all modes. */
  4.3699 ++#if !defined(XZ_DEC_SINGLE) && !defined(XZ_DEC_PREALLOC) \
  4.3700 ++		&& !defined(XZ_DEC_DYNALLOC)
  4.3701 ++#	define XZ_DEC_SINGLE
  4.3702 ++#	define XZ_DEC_PREALLOC
  4.3703 ++#	define XZ_DEC_DYNALLOC
  4.3704 ++#endif
  4.3705 ++
  4.3706 ++/*
  4.3707 ++ * The DEC_IS_foo(mode) macros are used in "if" statements. If only some
  4.3708 ++ * of the supported modes are enabled, these macros will evaluate to true or
  4.3709 ++ * false at compile time and thus allow the compiler to omit unneeded code.
  4.3710 ++ */
  4.3711 ++#ifdef XZ_DEC_SINGLE
  4.3712 ++#	define DEC_IS_SINGLE(mode) ((mode) == XZ_SINGLE)
  4.3713 ++#else
  4.3714 ++#	define DEC_IS_SINGLE(mode) (false)
  4.3715 ++#endif
  4.3716 ++
  4.3717 ++#ifdef XZ_DEC_PREALLOC
  4.3718 ++#	define DEC_IS_PREALLOC(mode) ((mode) == XZ_PREALLOC)
  4.3719 ++#else
  4.3720 ++#	define DEC_IS_PREALLOC(mode) (false)
  4.3721 ++#endif
  4.3722 ++
  4.3723 ++#ifdef XZ_DEC_DYNALLOC
  4.3724 ++#	define DEC_IS_DYNALLOC(mode) ((mode) == XZ_DYNALLOC)
  4.3725 ++#else
  4.3726 ++#	define DEC_IS_DYNALLOC(mode) (false)
  4.3727 ++#endif
  4.3728 ++
  4.3729 ++#if !defined(XZ_DEC_SINGLE)
  4.3730 ++#	define DEC_IS_MULTI(mode) (true)
  4.3731 ++#elif defined(XZ_DEC_PREALLOC) || defined(XZ_DEC_DYNALLOC)
  4.3732 ++#	define DEC_IS_MULTI(mode) ((mode) != XZ_SINGLE)
  4.3733 ++#else
  4.3734 ++#	define DEC_IS_MULTI(mode) (false)
  4.3735 ++#endif
  4.3736 ++
  4.3737 ++/*
  4.3738 ++ * If any of the BCJ filter decoders are wanted, define XZ_DEC_BCJ.
  4.3739 ++ * XZ_DEC_BCJ is used to enable generic support for BCJ decoders.
  4.3740 ++ */
  4.3741 ++#ifndef XZ_DEC_BCJ
  4.3742 ++#	if defined(XZ_DEC_X86) || defined(XZ_DEC_POWERPC) \
  4.3743 ++			|| defined(XZ_DEC_IA64) || defined(XZ_DEC_ARM) \
  4.3744 ++			|| defined(XZ_DEC_ARM) || defined(XZ_DEC_ARMTHUMB) \
  4.3745 ++			|| defined(XZ_DEC_SPARC)
  4.3746 ++#		define XZ_DEC_BCJ
  4.3747 ++#	endif
  4.3748 ++#endif
  4.3749 ++
  4.3750 ++/*
  4.3751 ++ * Allocate memory for LZMA2 decoder. xz_dec_lzma2_reset() must be used
  4.3752 ++ * before calling xz_dec_lzma2_run().
  4.3753 ++ */
  4.3754 ++XZ_EXTERN struct xz_dec_lzma2 *xz_dec_lzma2_create(enum xz_mode mode,
  4.3755 ++						   uint32_t dict_max);
  4.3756 ++
  4.3757 ++/*
  4.3758 ++ * Decode the LZMA2 properties (one byte) and reset the decoder. Return
  4.3759 ++ * XZ_OK on success, XZ_MEMLIMIT_ERROR if the preallocated dictionary is not
  4.3760 ++ * big enough, and XZ_OPTIONS_ERROR if props indicates something that this
  4.3761 ++ * decoder doesn't support.
  4.3762 ++ */
  4.3763 ++XZ_EXTERN enum xz_ret xz_dec_lzma2_reset(struct xz_dec_lzma2 *s,
  4.3764 ++					 uint8_t props);
  4.3765 ++
  4.3766 ++/* Decode raw LZMA2 stream from b->in to b->out. */
  4.3767 ++XZ_EXTERN enum xz_ret xz_dec_lzma2_run(struct xz_dec_lzma2 *s,
  4.3768 ++				       struct xz_buf *b);
  4.3769 ++
  4.3770 ++/* Free the memory allocated for the LZMA2 decoder. */
  4.3771 ++XZ_EXTERN void xz_dec_lzma2_end(struct xz_dec_lzma2 *s);
  4.3772 ++
  4.3773 ++#ifdef XZ_DEC_BCJ
  4.3774 ++/*
  4.3775 ++ * Allocate memory for BCJ decoders. xz_dec_bcj_reset() must be used before
  4.3776 ++ * calling xz_dec_bcj_run().
  4.3777 ++ */
  4.3778 ++XZ_EXTERN struct xz_dec_bcj *xz_dec_bcj_create(bool single_call);
  4.3779 ++
  4.3780 ++/*
  4.3781 ++ * Decode the Filter ID of a BCJ filter. This implementation doesn't
  4.3782 ++ * support custom start offsets, so no decoding of Filter Properties
  4.3783 ++ * is needed. Returns XZ_OK if the given Filter ID is supported.
  4.3784 ++ * Otherwise XZ_OPTIONS_ERROR is returned.
  4.3785 ++ */
  4.3786 ++XZ_EXTERN enum xz_ret xz_dec_bcj_reset(struct xz_dec_bcj *s, uint8_t id);
  4.3787 ++
  4.3788 ++/*
  4.3789 ++ * Decode raw BCJ + LZMA2 stream. This must be used only if there actually is
  4.3790 ++ * a BCJ filter in the chain. If the chain has only LZMA2, xz_dec_lzma2_run()
  4.3791 ++ * must be called directly.
  4.3792 ++ */
  4.3793 ++XZ_EXTERN enum xz_ret xz_dec_bcj_run(struct xz_dec_bcj *s,
  4.3794 ++				     struct xz_dec_lzma2 *lzma2,
  4.3795 ++				     struct xz_buf *b);
  4.3796 ++
  4.3797 ++/* Free the memory allocated for the BCJ filters. */
  4.3798 ++#define xz_dec_bcj_end(s) kfree(s)
  4.3799 ++#endif
  4.3800 ++
  4.3801 ++#endif
  4.3802 +diff --git a/lib/xz/xz_stream.h b/lib/xz/xz_stream.h
  4.3803 +new file mode 100644
  4.3804 +index 0000000..66cb5a7
  4.3805 +--- /dev/null
  4.3806 ++++ b/lib/xz/xz_stream.h
  4.3807 +@@ -0,0 +1,62 @@
  4.3808 ++/*
  4.3809 ++ * Definitions for handling the .xz file format
  4.3810 ++ *
  4.3811 ++ * Author: Lasse Collin <lasse.collin@tukaani.org>
  4.3812 ++ *
  4.3813 ++ * This file has been put into the public domain.
  4.3814 ++ * You can do whatever you want with this file.
  4.3815 ++ */
  4.3816 ++
  4.3817 ++#ifndef XZ_STREAM_H
  4.3818 ++#define XZ_STREAM_H
  4.3819 ++
  4.3820 ++#if defined(__KERNEL__) && !XZ_INTERNAL_CRC32
  4.3821 ++#	include <linux/crc32.h>
  4.3822 ++#	undef crc32
  4.3823 ++#	define xz_crc32(buf, size, crc) \
  4.3824 ++		(~crc32_le(~(uint32_t)(crc), buf, size))
  4.3825 ++#endif
  4.3826 ++
  4.3827 ++/*
  4.3828 ++ * See the .xz file format specification at
  4.3829 ++ * http://tukaani.org/xz/xz-file-format.txt
  4.3830 ++ * to understand the container format.
  4.3831 ++ */
  4.3832 ++
  4.3833 ++#define STREAM_HEADER_SIZE 12
  4.3834 ++
  4.3835 ++#define HEADER_MAGIC "\3757zXZ"
  4.3836 ++#define HEADER_MAGIC_SIZE 6
  4.3837 ++
  4.3838 ++#define FOOTER_MAGIC "YZ"
  4.3839 ++#define FOOTER_MAGIC_SIZE 2
  4.3840 ++
  4.3841 ++/*
  4.3842 ++ * Variable-length integer can hold a 63-bit unsigned integer or a special
  4.3843 ++ * value indicating that the value is unknown.
  4.3844 ++ *
  4.3845 ++ * Experimental: vli_type can be defined to uint32_t to save a few bytes
  4.3846 ++ * in code size (no effect on speed). Doing so limits the uncompressed and
  4.3847 ++ * compressed size of the file to less than 256 MiB and may also weaken
  4.3848 ++ * error detection slightly.
  4.3849 ++ */
  4.3850 ++typedef uint64_t vli_type;
  4.3851 ++
  4.3852 ++#define VLI_MAX ((vli_type)-1 / 2)
  4.3853 ++#define VLI_UNKNOWN ((vli_type)-1)
  4.3854 ++
  4.3855 ++/* Maximum encoded size of a VLI */
  4.3856 ++#define VLI_BYTES_MAX (sizeof(vli_type) * 8 / 7)
  4.3857 ++
  4.3858 ++/* Integrity Check types */
  4.3859 ++enum xz_check {
  4.3860 ++	XZ_CHECK_NONE = 0,
  4.3861 ++	XZ_CHECK_CRC32 = 1,
  4.3862 ++	XZ_CHECK_CRC64 = 4,
  4.3863 ++	XZ_CHECK_SHA256 = 10
  4.3864 ++};
  4.3865 ++
  4.3866 ++/* Maximum possible Check ID */
  4.3867 ++#define XZ_CHECK_MAX 15
  4.3868 ++
  4.3869 ++#endif
  4.3870 +diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
  4.3871 +index 54fd1b7..b862007 100644
  4.3872 +--- a/scripts/Makefile.lib
  4.3873 ++++ b/scripts/Makefile.lib
  4.3874 +@@ -246,6 +246,34 @@ cmd_lzo = (cat $(filter-out FORCE,$^) | \
  4.3875 + 	lzop -9 && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
  4.3876 + 	(rm -f $@ ; false)
  4.3877 + 
  4.3878 ++# XZ
  4.3879 ++# ---------------------------------------------------------------------------
  4.3880 ++# Use xzkern to compress the kernel image and xzmisc to compress other things.
  4.3881 ++#
  4.3882 ++# xzkern uses a big LZMA2 dictionary since it doesn't increase memory usage
  4.3883 ++# of the kernel decompressor. A BCJ filter is used if it is available for
  4.3884 ++# the target architecture. xzkern also appends uncompressed size of the data
  4.3885 ++# using size_append. The .xz format has the size information available at
  4.3886 ++# the end of the file too, but it's in more complex format and it's good to
  4.3887 ++# avoid changing the part of the boot code that reads the uncompressed size.
  4.3888 ++# Note that the bytes added by size_append will make the xz tool think that
  4.3889 ++# the file is corrupt. This is expected.
  4.3890 ++#
  4.3891 ++# xzmisc doesn't use size_append, so it can be used to create normal .xz
  4.3892 ++# files. xzmisc uses smaller LZMA2 dictionary than xzkern, because a very
  4.3893 ++# big dictionary would increase the memory usage too much in the multi-call
  4.3894 ++# decompression mode. A BCJ filter isn't used either.
  4.3895 ++quiet_cmd_xzkern = XZKERN  $@
  4.3896 ++cmd_xzkern = (cat $(filter-out FORCE,$^) | \
  4.3897 ++	sh $(srctree)/scripts/xz_wrap.sh && \
  4.3898 ++	$(call size_append, $(filter-out FORCE,$^))) > $@ || \
  4.3899 ++	(rm -f $@ ; false)
  4.3900 ++
  4.3901 ++quiet_cmd_xzmisc = XZMISC  $@
  4.3902 ++cmd_xzmisc = (cat $(filter-out FORCE,$^) | \
  4.3903 ++	xz --check=crc32 --lzma2=dict=1MiB) > $@ || \
  4.3904 ++	(rm -f $@ ; false)
  4.3905 ++
  4.3906 + # misc stuff
  4.3907 + # ---------------------------------------------------------------------------
  4.3908 + quote:="
  4.3909 +diff --git a/scripts/xz_wrap.sh b/scripts/xz_wrap.sh
  4.3910 +new file mode 100644
  4.3911 +index 0000000..17a5798
  4.3912 +--- /dev/null
  4.3913 ++++ b/scripts/xz_wrap.sh
  4.3914 +@@ -0,0 +1,23 @@
  4.3915 ++#!/bin/sh
  4.3916 ++#
  4.3917 ++# This is a wrapper for xz to compress the kernel image using appropriate
  4.3918 ++# compression options depending on the architecture.
  4.3919 ++#
  4.3920 ++# Author: Lasse Collin <lasse.collin@tukaani.org>
  4.3921 ++#
  4.3922 ++# This file has been put into the public domain.
  4.3923 ++# You can do whatever you want with this file.
  4.3924 ++#
  4.3925 ++
  4.3926 ++BCJ=
  4.3927 ++LZMA2OPTS=
  4.3928 ++
  4.3929 ++case $ARCH in
  4.3930 ++	x86|x86_64)     BCJ=--x86 ;;
  4.3931 ++	powerpc)        BCJ=--powerpc ;;
  4.3932 ++	ia64)           BCJ=--ia64; LZMA2OPTS=pb=4 ;;
  4.3933 ++	arm)            BCJ=--arm ;;
  4.3934 ++	sparc)          BCJ=--sparc ;;
  4.3935 ++esac
  4.3936 ++
  4.3937 ++exec xz --check=crc32 $BCJ --lzma2=$LZMA2OPTS,dict=32MiB
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/kernel-modular/stuff/002-squashfs-decompressors-add-boot-time-xz-support.patch	Tue Feb 01 09:37:33 2011 +0100
     5.3 @@ -0,0 +1,638 @@
     5.4 +From: Lasse Collin <lasse.collin@tukaani.org>
     5.5 +Date: Thu, 2 Dec 2010 19:14:37 +0000 (+0200)
     5.6 +Subject: Decompressors: Add boot-time XZ support
     5.7 +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fpkl%2Fsquashfs-xz.git;a=commitdiff_plain;h=c64bc9a229b46db75d7761601dd8ca25385a7780
     5.8 +
     5.9 +Decompressors: Add boot-time XZ support
    5.10 +
    5.11 +This implements the API defined in <linux/decompress/generic.h>
    5.12 +which is used for kernel, initramfs, and initrd decompression.
    5.13 +This patch together with the first patch is enough for
    5.14 +XZ-compressed initramfs and initrd; XZ-compressed kernel will
    5.15 +need arch-specific changes.
    5.16 +
    5.17 +In contrast to other initramfs compression methods, support for
    5.18 +XZ-compressed initramfs is not enabled by default in usr/Kconfig.
    5.19 +This is primarily due to the Kconfig options of the xz_dec
    5.20 +module. It can be good to require that xz_dec is enabled
    5.21 +separately so the user can select only the BCJ filters he needs
    5.22 +when EMBEDDED=y.
    5.23 +
    5.24 +The buffering requirements described in decompress_unxz.c are
    5.25 +stricter than with gzip, so the relevant changes should be done
    5.26 +to the arch-specific code when adding support for XZ-compressed
    5.27 +kernel. Similarly, the heap size in arch-specific pre-boot code
    5.28 +may need to be increased (30 KiB is enough).
    5.29 +
    5.30 +The XZ decompressor needs memmove(), memeq() (memcmp() == 0),
    5.31 +and memzero() (memset(ptr, 0, size)), which aren't available in
    5.32 +all arch-specific pre-boot environments. I'm including simple
    5.33 +versions in decompress_unxz.c, but a cleaner solution would
    5.34 +naturally be nicer.
    5.35 +
    5.36 +Signed-off-by: Lasse Collin <lasse.collin@tukaani.org>
    5.37 +---
    5.38 +
    5.39 +diff --git a/include/linux/decompress/unxz.h b/include/linux/decompress/unxz.h
    5.40 +new file mode 100644
    5.41 +index 0000000..41728fc
    5.42 +--- /dev/null
    5.43 ++++ b/include/linux/decompress/unxz.h
    5.44 +@@ -0,0 +1,19 @@
    5.45 ++/*
    5.46 ++ * Wrapper for decompressing XZ-compressed kernel, initramfs, and initrd
    5.47 ++ *
    5.48 ++ * Author: Lasse Collin <lasse.collin@tukaani.org>
    5.49 ++ *
    5.50 ++ * This file has been put into the public domain.
    5.51 ++ * You can do whatever you want with this file.
    5.52 ++ */
    5.53 ++
    5.54 ++#ifndef DECOMPRESS_UNXZ_H
    5.55 ++#define DECOMPRESS_UNXZ_H
    5.56 ++
    5.57 ++int unxz(unsigned char *in, int in_size,
    5.58 ++	 int (*fill)(void *dest, unsigned int size),
    5.59 ++	 int (*flush)(void *src, unsigned int size),
    5.60 ++	 unsigned char *out, int *in_used,
    5.61 ++	 void (*error)(char *x));
    5.62 ++
    5.63 ++#endif
    5.64 +diff --git a/init/Kconfig b/init/Kconfig
    5.65 +index 2de5b1c..d9fbb0f 100644
    5.66 +--- a/init/Kconfig
    5.67 ++++ b/init/Kconfig
    5.68 +@@ -123,13 +123,16 @@ config HAVE_KERNEL_BZIP2
    5.69 + config HAVE_KERNEL_LZMA
    5.70 + 	bool
    5.71 + 
    5.72 ++config HAVE_KERNEL_XZ
    5.73 ++	bool
    5.74 ++
    5.75 + config HAVE_KERNEL_LZO
    5.76 + 	bool
    5.77 + 
    5.78 + choice
    5.79 + 	prompt "Kernel compression mode"
    5.80 + 	default KERNEL_GZIP
    5.81 +-	depends on HAVE_KERNEL_GZIP || HAVE_KERNEL_BZIP2 || HAVE_KERNEL_LZMA || HAVE_KERNEL_LZO
    5.82 ++	depends on HAVE_KERNEL_GZIP || HAVE_KERNEL_BZIP2 || HAVE_KERNEL_LZMA || HAVE_KERNEL_XZ || HAVE_KERNEL_LZO
    5.83 + 	help
    5.84 + 	  The linux kernel is a kind of self-extracting executable.
    5.85 + 	  Several compression algorithms are available, which differ
    5.86 +@@ -174,6 +177,21 @@ config KERNEL_LZMA
    5.87 + 	  two. Compression is slowest.	The kernel size is about 33%
    5.88 + 	  smaller with LZMA in comparison to gzip.
    5.89 + 
    5.90 ++config KERNEL_XZ
    5.91 ++	bool "XZ"
    5.92 ++	depends on HAVE_KERNEL_XZ
    5.93 ++	help
    5.94 ++	  XZ uses the LZMA2 algorithm and instruction set specific
    5.95 ++	  BCJ filters which can improve compression ratio of executable
    5.96 ++	  code. The size of the kernel is about 30% smaller with XZ in
    5.97 ++	  comparison to gzip. On architectures for which there is a BCJ
    5.98 ++	  filter (i386, x86_64, ARM, IA-64, PowerPC, and SPARC), XZ
    5.99 ++	  will create a few percent smaller kernel than plain LZMA.
   5.100 ++
   5.101 ++	  The speed is about the same as with LZMA: The decompression
   5.102 ++	  speed of XZ is better than that of bzip2 but worse than gzip
   5.103 ++	  and LZO. Compression is slow.
   5.104 ++
   5.105 + config KERNEL_LZO
   5.106 + 	bool "LZO"
   5.107 + 	depends on HAVE_KERNEL_LZO
   5.108 +diff --git a/lib/Kconfig b/lib/Kconfig
   5.109 +index 6090314..45960e1 100644
   5.110 +--- a/lib/Kconfig
   5.111 ++++ b/lib/Kconfig
   5.112 +@@ -122,6 +122,9 @@ config DECOMPRESS_BZIP2
   5.113 + config DECOMPRESS_LZMA
   5.114 + 	tristate
   5.115 + 
   5.116 ++config DECOMPRESS_XZ
   5.117 ++	tristate
   5.118 ++
   5.119 + config DECOMPRESS_LZO
   5.120 + 	select LZO_DECOMPRESS
   5.121 + 	tristate
   5.122 +diff --git a/lib/Makefile b/lib/Makefile
   5.123 +index f2f98dd..06e3d8a 100644
   5.124 +--- a/lib/Makefile
   5.125 ++++ b/lib/Makefile
   5.126 +@@ -75,6 +75,7 @@ obj-$(CONFIG_RAID6_PQ) += raid6/
   5.127 + lib-$(CONFIG_DECOMPRESS_GZIP) += decompress_inflate.o
   5.128 + lib-$(CONFIG_DECOMPRESS_BZIP2) += decompress_bunzip2.o
   5.129 + lib-$(CONFIG_DECOMPRESS_LZMA) += decompress_unlzma.o
   5.130 ++lib-$(CONFIG_DECOMPRESS_XZ) += decompress_unxz.o
   5.131 + lib-$(CONFIG_DECOMPRESS_LZO) += decompress_unlzo.o
   5.132 + 
   5.133 + obj-$(CONFIG_TEXTSEARCH) += textsearch.o
   5.134 +diff --git a/lib/decompress.c b/lib/decompress.c
   5.135 +index a760681..3d766b7 100644
   5.136 +--- a/lib/decompress.c
   5.137 ++++ b/lib/decompress.c
   5.138 +@@ -8,6 +8,7 @@
   5.139 + 
   5.140 + #include <linux/decompress/bunzip2.h>
   5.141 + #include <linux/decompress/unlzma.h>
   5.142 ++#include <linux/decompress/unxz.h>
   5.143 + #include <linux/decompress/inflate.h>
   5.144 + #include <linux/decompress/unlzo.h>
   5.145 + 
   5.146 +@@ -23,6 +24,9 @@
   5.147 + #ifndef CONFIG_DECOMPRESS_LZMA
   5.148 + # define unlzma NULL
   5.149 + #endif
   5.150 ++#ifndef CONFIG_DECOMPRESS_XZ
   5.151 ++# define unxz NULL
   5.152 ++#endif
   5.153 + #ifndef CONFIG_DECOMPRESS_LZO
   5.154 + # define unlzo NULL
   5.155 + #endif
   5.156 +@@ -36,6 +40,7 @@ static const struct compress_format {
   5.157 + 	{ {037, 0236}, "gzip", gunzip },
   5.158 + 	{ {0x42, 0x5a}, "bzip2", bunzip2 },
   5.159 + 	{ {0x5d, 0x00}, "lzma", unlzma },
   5.160 ++	{ {0xfd, 0x37}, "xz", unxz },
   5.161 + 	{ {0x89, 0x4c}, "lzo", unlzo },
   5.162 + 	{ {0, 0}, NULL, NULL }
   5.163 + };
   5.164 +diff --git a/lib/decompress_unxz.c b/lib/decompress_unxz.c
   5.165 +new file mode 100644
   5.166 +index 0000000..cecd23d
   5.167 +--- /dev/null
   5.168 ++++ b/lib/decompress_unxz.c
   5.169 +@@ -0,0 +1,397 @@
   5.170 ++/*
   5.171 ++ * Wrapper for decompressing XZ-compressed kernel, initramfs, and initrd
   5.172 ++ *
   5.173 ++ * Author: Lasse Collin <lasse.collin@tukaani.org>
   5.174 ++ *
   5.175 ++ * This file has been put into the public domain.
   5.176 ++ * You can do whatever you want with this file.
   5.177 ++ */
   5.178 ++
   5.179 ++/*
   5.180 ++ * Important notes about in-place decompression
   5.181 ++ *
   5.182 ++ * At least on x86, the kernel is decompressed in place: the compressed data
   5.183 ++ * is placed to the end of the output buffer, and the decompressor overwrites
   5.184 ++ * most of the compressed data. There must be enough safety margin to
   5.185 ++ * guarantee that the write position is always behind the read position.
   5.186 ++ *
   5.187 ++ * The safety margin for XZ with LZMA2 or BCJ+LZMA2 is calculated below.
   5.188 ++ * Note that the margin with XZ is bigger than with Deflate (gzip)!
   5.189 ++ *
   5.190 ++ * The worst case for in-place decompression is that the beginning of
   5.191 ++ * the file is compressed extremely well, and the rest of the file is
   5.192 ++ * uncompressible. Thus, we must look for worst-case expansion when the
   5.193 ++ * compressor is encoding uncompressible data.
   5.194 ++ *
   5.195 ++ * The structure of the .xz file in case of a compresed kernel is as follows.
   5.196 ++ * Sizes (as bytes) of the fields are in parenthesis.
   5.197 ++ *
   5.198 ++ *    Stream Header (12)
   5.199 ++ *    Block Header:
   5.200 ++ *      Block Header (8-12)
   5.201 ++ *      Compressed Data (N)
   5.202 ++ *      Block Padding (0-3)
   5.203 ++ *      CRC32 (4)
   5.204 ++ *    Index (8-20)
   5.205 ++ *    Stream Footer (12)
   5.206 ++ *
   5.207 ++ * Normally there is exactly one Block, but let's assume that there are
   5.208 ++ * 2-4 Blocks just in case. Because Stream Header and also Block Header
   5.209 ++ * of the first Block don't make the decompressor produce any uncompressed
   5.210 ++ * data, we can ignore them from our calculations. Block Headers of possible
   5.211 ++ * additional Blocks have to be taken into account still. With these
   5.212 ++ * assumptions, it is safe to assume that the total header overhead is
   5.213 ++ * less than 128 bytes.
   5.214 ++ *
   5.215 ++ * Compressed Data contains LZMA2 or BCJ+LZMA2 encoded data. Since BCJ
   5.216 ++ * doesn't change the size of the data, it is enough to calculate the
   5.217 ++ * safety margin for LZMA2.
   5.218 ++ *
   5.219 ++ * LZMA2 stores the data in chunks. Each chunk has a header whose size is
   5.220 ++ * a maximum of 6 bytes, but to get round 2^n numbers, let's assume that
   5.221 ++ * the maximum chunk header size is 8 bytes. After the chunk header, there
   5.222 ++ * may be up to 64 KiB of actual payload in the chunk. Often the payload is
   5.223 ++ * quite a bit smaller though; to be safe, let's assume that an average
   5.224 ++ * chunk has only 32 KiB of payload.
   5.225 ++ *
   5.226 ++ * The maximum uncompressed size of the payload is 2 MiB. The minimum
   5.227 ++ * uncompressed size of the payload is in practice never less than the
   5.228 ++ * payload size itself. The LZMA2 format would allow uncompressed size
   5.229 ++ * to be less than the payload size, but no sane compressor creates such
   5.230 ++ * files. LZMA2 supports storing uncompressible data in uncompressed form,
   5.231 ++ * so there's never a need to create payloads whose uncompressed size is
   5.232 ++ * smaller than the compressed size.
   5.233 ++ *
   5.234 ++ * The assumption, that the uncompressed size of the payload is never
   5.235 ++ * smaller than the payload itself, is valid only when talking about
   5.236 ++ * the payload as a whole. It is possible that the payload has parts where
   5.237 ++ * the decompressor consumes more input than it produces output. Calculating
   5.238 ++ * the worst case for this would be tricky. Instead of trying to do that,
   5.239 ++ * let's simply make sure that the decompressor never overwrites any bytes
   5.240 ++ * of the payload which it is currently reading.
   5.241 ++ *
   5.242 ++ * Now we have enough information to calculate the safety margin. We need
   5.243 ++ *   - 128 bytes for the .xz file format headers;
   5.244 ++ *   - 8 bytes per every 32 KiB of uncompressed size (one LZMA2 chunk header
   5.245 ++ *     per chunk, each chunk having average payload size of 32 KiB); and
   5.246 ++ *   - 64 KiB (biggest possible LZMA2 chunk payload size) to make sure that
   5.247 ++ *     the decompressor never overwrites anything from the LZMA2 chunk
   5.248 ++ *     payload it is currently reading.
   5.249 ++ *
   5.250 ++ * We get the following formula:
   5.251 ++ *
   5.252 ++ *    safety_margin = 128 + uncompressed_size * 8 / 32768 + 65536
   5.253 ++ *                  = 128 + (uncompressed_size >> 12) + 65536
   5.254 ++ *
   5.255 ++ * For comparision, according to arch/x86/boot/compressed/misc.c, the
   5.256 ++ * equivalent formula for Deflate is this:
   5.257 ++ *
   5.258 ++ *    safety_margin = 18 + (uncompressed_size >> 12) + 32768
   5.259 ++ *
   5.260 ++ * Thus, when updating Deflate-only in-place kernel decompressor to
   5.261 ++ * support XZ, the fixed overhead has to be increased from 18+32768 bytes
   5.262 ++ * to 128+65536 bytes.
   5.263 ++ */
   5.264 ++
   5.265 ++/*
   5.266 ++ * STATIC is defined to "static" if we are being built for kernel
   5.267 ++ * decompression (pre-boot code). <linux/decompress/mm.h> will define
   5.268 ++ * STATIC to empty if it wasn't already defined. Since we will need to
   5.269 ++ * know later if we are being used for kernel decompression, we define
   5.270 ++ * XZ_PREBOOT here.
   5.271 ++ */
   5.272 ++#ifdef STATIC
   5.273 ++#	define XZ_PREBOOT
   5.274 ++#endif
   5.275 ++#ifdef __KERNEL__
   5.276 ++#	include <linux/decompress/mm.h>
   5.277 ++#endif
   5.278 ++#define XZ_EXTERN STATIC
   5.279 ++
   5.280 ++#ifndef XZ_PREBOOT
   5.281 ++#	include <linux/slab.h>
   5.282 ++#	include <linux/xz.h>
   5.283 ++#else
   5.284 ++/*
   5.285 ++ * Use the internal CRC32 code instead of kernel's CRC32 module, which
   5.286 ++ * is not available in early phase of booting.
   5.287 ++ */
   5.288 ++#define XZ_INTERNAL_CRC32 1
   5.289 ++
   5.290 ++/*
   5.291 ++ * For boot time use, we enable only the BCJ filter of the current
   5.292 ++ * architecture or none if no BCJ filter is available for the architecture.
   5.293 ++ */
   5.294 ++#ifdef CONFIG_X86
   5.295 ++#	define XZ_DEC_X86
   5.296 ++#endif
   5.297 ++#ifdef CONFIG_PPC
   5.298 ++#	define XZ_DEC_POWERPC
   5.299 ++#endif
   5.300 ++#ifdef CONFIG_ARM
   5.301 ++#	define XZ_DEC_ARM
   5.302 ++#endif
   5.303 ++#ifdef CONFIG_IA64
   5.304 ++#	define XZ_DEC_IA64
   5.305 ++#endif
   5.306 ++#ifdef CONFIG_SPARC
   5.307 ++#	define XZ_DEC_SPARC
   5.308 ++#endif
   5.309 ++
   5.310 ++/*
   5.311 ++ * This will get the basic headers so that memeq() and others
   5.312 ++ * can be defined.
   5.313 ++ */
   5.314 ++#include "xz/xz_private.h"
   5.315 ++
   5.316 ++/*
   5.317 ++ * Replace the normal allocation functions with the versions from
   5.318 ++ * <linux/decompress/mm.h>. vfree() needs to support vfree(NULL)
   5.319 ++ * when XZ_DYNALLOC is used, but the pre-boot free() doesn't support it.
   5.320 ++ * Workaround it here because the other decompressors don't need it.
   5.321 ++ */
   5.322 ++#undef kmalloc
   5.323 ++#undef kfree
   5.324 ++#undef vmalloc
   5.325 ++#undef vfree
   5.326 ++#define kmalloc(size, flags) malloc(size)
   5.327 ++#define kfree(ptr) free(ptr)
   5.328 ++#define vmalloc(size) malloc(size)
   5.329 ++#define vfree(ptr) do { if (ptr != NULL) free(ptr); } while (0)
   5.330 ++
   5.331 ++/*
   5.332 ++ * FIXME: Not all basic memory functions are provided in architecture-specific
   5.333 ++ * files (yet). We define our own versions here for now, but this should be
   5.334 ++ * only a temporary solution.
   5.335 ++ *
   5.336 ++ * memeq and memzero are not used much and any remotely sane implementation
   5.337 ++ * is fast enough. memcpy/memmove speed matters in multi-call mode, but
   5.338 ++ * the kernel image is decompressed in single-call mode, in which only
   5.339 ++ * memcpy speed can matter and only if there is a lot of uncompressible data
   5.340 ++ * (LZMA2 stores uncompressible chunks in uncompressed form). Thus, the
   5.341 ++ * functions below should just be kept small; it's probably not worth
   5.342 ++ * optimizing for speed.
   5.343 ++ */
   5.344 ++
   5.345 ++#ifndef memeq
   5.346 ++static bool memeq(const void *a, const void *b, size_t size)
   5.347 ++{
   5.348 ++	const uint8_t *x = a;
   5.349 ++	const uint8_t *y = b;
   5.350 ++	size_t i;
   5.351 ++
   5.352 ++	for (i = 0; i < size; ++i)
   5.353 ++		if (x[i] != y[i])
   5.354 ++			return false;
   5.355 ++
   5.356 ++	return true;
   5.357 ++}
   5.358 ++#endif
   5.359 ++
   5.360 ++#ifndef memzero
   5.361 ++static void memzero(void *buf, size_t size)
   5.362 ++{
   5.363 ++	uint8_t *b = buf;
   5.364 ++	uint8_t *e = b + size;
   5.365 ++
   5.366 ++	while (b != e)
   5.367 ++		*b++ = '\0';
   5.368 ++}
   5.369 ++#endif
   5.370 ++
   5.371 ++#ifndef memmove
   5.372 ++/* Not static to avoid a conflict with the prototype in the Linux headers. */
   5.373 ++void *memmove(void *dest, const void *src, size_t size)
   5.374 ++{
   5.375 ++	uint8_t *d = dest;
   5.376 ++	const uint8_t *s = src;
   5.377 ++	size_t i;
   5.378 ++
   5.379 ++	if (d < s) {
   5.380 ++		for (i = 0; i < size; ++i)
   5.381 ++			d[i] = s[i];
   5.382 ++	} else if (d > s) {
   5.383 ++		i = size;
   5.384 ++		while (i-- > 0)
   5.385 ++			d[i] = s[i];
   5.386 ++	}
   5.387 ++
   5.388 ++	return dest;
   5.389 ++}
   5.390 ++#endif
   5.391 ++
   5.392 ++/*
   5.393 ++ * Since we need memmove anyway, would use it as memcpy too.
   5.394 ++ * Commented out for now to avoid breaking things.
   5.395 ++ */
   5.396 ++/*
   5.397 ++#ifndef memcpy
   5.398 ++#	define memcpy memmove
   5.399 ++#endif
   5.400 ++*/
   5.401 ++
   5.402 ++#include "xz/xz_crc32.c"
   5.403 ++#include "xz/xz_dec_stream.c"
   5.404 ++#include "xz/xz_dec_lzma2.c"
   5.405 ++#include "xz/xz_dec_bcj.c"
   5.406 ++
   5.407 ++#endif /* XZ_PREBOOT */
   5.408 ++
   5.409 ++/* Size of the input and output buffers in multi-call mode */
   5.410 ++#define XZ_IOBUF_SIZE 4096
   5.411 ++
   5.412 ++/*
   5.413 ++ * This function implements the API defined in <linux/decompress/generic.h>.
   5.414 ++ *
   5.415 ++ * This wrapper will automatically choose single-call or multi-call mode
   5.416 ++ * of the native XZ decoder API. The single-call mode can be used only when
   5.417 ++ * both input and output buffers are available as a single chunk, i.e. when
   5.418 ++ * fill() and flush() won't be used.
   5.419 ++ */
   5.420 ++STATIC int INIT unxz(unsigned char *in, int in_size,
   5.421 ++		     int (*fill)(void *dest, unsigned int size),
   5.422 ++		     int (*flush)(void *src, unsigned int size),
   5.423 ++		     unsigned char *out, int *in_used,
   5.424 ++		     void (*error)(char *x))
   5.425 ++{
   5.426 ++	struct xz_buf b;
   5.427 ++	struct xz_dec *s;
   5.428 ++	enum xz_ret ret;
   5.429 ++	bool must_free_in = false;
   5.430 ++
   5.431 ++#if XZ_INTERNAL_CRC32
   5.432 ++	xz_crc32_init();
   5.433 ++#endif
   5.434 ++
   5.435 ++	if (in_used != NULL)
   5.436 ++		*in_used = 0;
   5.437 ++
   5.438 ++	if (fill == NULL && flush == NULL)
   5.439 ++		s = xz_dec_init(XZ_SINGLE, 0);
   5.440 ++	else
   5.441 ++		s = xz_dec_init(XZ_DYNALLOC, (uint32_t)-1);
   5.442 ++
   5.443 ++	if (s == NULL)
   5.444 ++		goto error_alloc_state;
   5.445 ++
   5.446 ++	if (flush == NULL) {
   5.447 ++		b.out = out;
   5.448 ++		b.out_size = (size_t)-1;
   5.449 ++	} else {
   5.450 ++		b.out_size = XZ_IOBUF_SIZE;
   5.451 ++		b.out = malloc(XZ_IOBUF_SIZE);
   5.452 ++		if (b.out == NULL)
   5.453 ++			goto error_alloc_out;
   5.454 ++	}
   5.455 ++
   5.456 ++	if (in == NULL) {
   5.457 ++		must_free_in = true;
   5.458 ++		in = malloc(XZ_IOBUF_SIZE);
   5.459 ++		if (in == NULL)
   5.460 ++			goto error_alloc_in;
   5.461 ++	}
   5.462 ++
   5.463 ++	b.in = in;
   5.464 ++	b.in_pos = 0;
   5.465 ++	b.in_size = in_size;
   5.466 ++	b.out_pos = 0;
   5.467 ++
   5.468 ++	if (fill == NULL && flush == NULL) {
   5.469 ++		ret = xz_dec_run(s, &b);
   5.470 ++	} else {
   5.471 ++		do {
   5.472 ++			if (b.in_pos == b.in_size && fill != NULL) {
   5.473 ++				if (in_used != NULL)
   5.474 ++					*in_used += b.in_pos;
   5.475 ++
   5.476 ++				b.in_pos = 0;
   5.477 ++
   5.478 ++				in_size = fill(in, XZ_IOBUF_SIZE);
   5.479 ++				if (in_size < 0) {
   5.480 ++					/*
   5.481 ++					 * This isn't an optimal error code
   5.482 ++					 * but it probably isn't worth making
   5.483 ++					 * a new one either.
   5.484 ++					 */
   5.485 ++					ret = XZ_BUF_ERROR;
   5.486 ++					break;
   5.487 ++				}
   5.488 ++
   5.489 ++				b.in_size = in_size;
   5.490 ++			}
   5.491 ++
   5.492 ++			ret = xz_dec_run(s, &b);
   5.493 ++
   5.494 ++			if (flush != NULL && (b.out_pos == b.out_size
   5.495 ++					|| (ret != XZ_OK && b.out_pos > 0))) {
   5.496 ++				/*
   5.497 ++				 * Setting ret here may hide an error
   5.498 ++				 * returned by xz_dec_run(), but probably
   5.499 ++				 * it's not too bad.
   5.500 ++				 */
   5.501 ++				if (flush(b.out, b.out_pos) != (int)b.out_pos)
   5.502 ++					ret = XZ_BUF_ERROR;
   5.503 ++
   5.504 ++				b.out_pos = 0;
   5.505 ++			}
   5.506 ++		} while (ret == XZ_OK);
   5.507 ++
   5.508 ++		if (must_free_in)
   5.509 ++			free(in);
   5.510 ++
   5.511 ++		if (flush != NULL)
   5.512 ++			free(b.out);
   5.513 ++	}
   5.514 ++
   5.515 ++	if (in_used != NULL)
   5.516 ++		*in_used += b.in_pos;
   5.517 ++
   5.518 ++	xz_dec_end(s);
   5.519 ++
   5.520 ++	switch (ret) {
   5.521 ++	case XZ_STREAM_END:
   5.522 ++		return 0;
   5.523 ++
   5.524 ++	case XZ_MEM_ERROR:
   5.525 ++		/* This can occur only in multi-call mode. */
   5.526 ++		error("XZ decompressor ran out of memory");
   5.527 ++		break;
   5.528 ++
   5.529 ++	case XZ_FORMAT_ERROR:
   5.530 ++		error("Input is not in the XZ format (wrong magic bytes)");
   5.531 ++		break;
   5.532 ++
   5.533 ++	case XZ_OPTIONS_ERROR:
   5.534 ++		error("Input was encoded with settings that are not "
   5.535 ++				"supported by this XZ decoder");
   5.536 ++		break;
   5.537 ++
   5.538 ++	case XZ_DATA_ERROR:
   5.539 ++	case XZ_BUF_ERROR:
   5.540 ++		error("XZ-compressed data is corrupt");
   5.541 ++		break;
   5.542 ++
   5.543 ++	default:
   5.544 ++		error("Bug in the XZ decompressor");
   5.545 ++		break;
   5.546 ++	}
   5.547 ++
   5.548 ++	return -1;
   5.549 ++
   5.550 ++error_alloc_in:
   5.551 ++	if (flush != NULL)
   5.552 ++		free(b.out);
   5.553 ++
   5.554 ++error_alloc_out:
   5.555 ++	xz_dec_end(s);
   5.556 ++
   5.557 ++error_alloc_state:
   5.558 ++	error("XZ decompressor ran out of memory");
   5.559 ++	return -1;
   5.560 ++}
   5.561 ++
   5.562 ++/*
   5.563 ++ * This macro is used by architecture-specific files to decompress
   5.564 ++ * the kernel image.
   5.565 ++ */
   5.566 ++#define decompress unxz
   5.567 +diff --git a/scripts/gen_initramfs_list.sh b/scripts/gen_initramfs_list.sh
   5.568 +index 5958fff..55caecd 100644
   5.569 +--- a/scripts/gen_initramfs_list.sh
   5.570 ++++ b/scripts/gen_initramfs_list.sh
   5.571 +@@ -243,6 +243,8 @@ case "$arg" in
   5.572 + 		echo "$output_file" | grep -q "\.gz$" && compr="gzip -9 -f"
   5.573 + 		echo "$output_file" | grep -q "\.bz2$" && compr="bzip2 -9 -f"
   5.574 + 		echo "$output_file" | grep -q "\.lzma$" && compr="lzma -9 -f"
   5.575 ++		echo "$output_file" | grep -q "\.xz$" && \
   5.576 ++				compr="xz --check=crc32 --lzma2=dict=1MiB"
   5.577 + 		echo "$output_file" | grep -q "\.lzo$" && compr="lzop -9 -f"
   5.578 + 		echo "$output_file" | grep -q "\.cpio$" && compr="cat"
   5.579 + 		shift
   5.580 +diff --git a/usr/Kconfig b/usr/Kconfig
   5.581 +index e2721f5..9f51a29 100644
   5.582 +--- a/usr/Kconfig
   5.583 ++++ b/usr/Kconfig
   5.584 +@@ -72,6 +72,18 @@ config RD_LZMA
   5.585 + 	  Support loading of a LZMA encoded initial ramdisk or cpio buffer
   5.586 + 	  If unsure, say N.
   5.587 + 
   5.588 ++config RD_XZ
   5.589 ++	bool "Support initial ramdisks compressed using XZ"
   5.590 ++	depends on BLK_DEV_INITRD && XZ_DEC=y
   5.591 ++	select DECOMPRESS_XZ
   5.592 ++	help
   5.593 ++	  Support loading of a XZ encoded initial ramdisk or cpio buffer.
   5.594 ++
   5.595 ++	  If this option is inactive, say Y to "XZ decompression support"
   5.596 ++	  under "Library routines" first.
   5.597 ++
   5.598 ++	  If unsure, say N.
   5.599 ++
   5.600 + config RD_LZO
   5.601 + 	bool "Support initial ramdisks compressed using LZO" if EMBEDDED
   5.602 + 	default !EMBEDDED
   5.603 +@@ -139,6 +151,15 @@ config INITRAMFS_COMPRESSION_LZMA
   5.604 + 	  three. Compression is slowest. The initramfs size is about 33%
   5.605 + 	  smaller with LZMA in comparison to gzip.
   5.606 + 
   5.607 ++config INITRAMFS_COMPRESSION_XZ
   5.608 ++	bool "XZ"
   5.609 ++	depends on RD_XZ
   5.610 ++	help
   5.611 ++	  XZ uses the LZMA2 algorithm. The initramfs size is about 30%
   5.612 ++	  smaller with XZ in comparison to gzip. Decompression speed
   5.613 ++	  is better than that of bzip2 but worse than gzip and LZO.
   5.614 ++	  Compression is slow.
   5.615 ++
   5.616 + config INITRAMFS_COMPRESSION_LZO
   5.617 + 	bool "LZO"
   5.618 + 	depends on RD_LZO
   5.619 +diff --git a/usr/Makefile b/usr/Makefile
   5.620 +index 6b4b6da..5845a13 100644
   5.621 +--- a/usr/Makefile
   5.622 ++++ b/usr/Makefile
   5.623 +@@ -15,6 +15,9 @@ suffix_$(CONFIG_INITRAMFS_COMPRESSION_BZIP2)  = .bz2
   5.624 + # Lzma
   5.625 + suffix_$(CONFIG_INITRAMFS_COMPRESSION_LZMA)   = .lzma
   5.626 + 
   5.627 ++# XZ
   5.628 ++suffix_$(CONFIG_INITRAMFS_COMPRESSION_XZ)     = .xz
   5.629 ++
   5.630 + # Lzo
   5.631 + suffix_$(CONFIG_INITRAMFS_COMPRESSION_LZO)   = .lzo
   5.632 + 
   5.633 +@@ -48,7 +51,7 @@ endif
   5.634 + quiet_cmd_initfs = GEN     $@
   5.635 +       cmd_initfs = $(initramfs) -o $@ $(ramfs-args) $(ramfs-input)
   5.636 + 
   5.637 +-targets := initramfs_data.cpio.gz initramfs_data.cpio.bz2 initramfs_data.cpio.lzma initramfs_data.cpio.lzo initramfs_data.cpio
   5.638 ++targets := initramfs_data.cpio.gz initramfs_data.cpio.bz2 initramfs_data.cpio.lzma initramfs_data.cpio.xz initramfs_data.cpio.lzo initramfs_data.cpio
   5.639 + # do not try to update files included in initramfs
   5.640 + $(deps_initramfs): ;
   5.641 + 
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/kernel-modular/stuff/003-squashfs-x86-support-xz-compressed-kernel.patch	Tue Feb 01 09:37:33 2011 +0100
     6.3 @@ -0,0 +1,128 @@
     6.4 +From: Lasse Collin <lasse.collin@tukaani.org>
     6.5 +Date: Thu, 2 Dec 2010 19:14:57 +0000 (+0200)
     6.6 +Subject: x86: Support XZ-compressed kernel
     6.7 +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fpkl%2Fsquashfs-xz.git;a=commitdiff_plain;h=d4ad78414e5312126127b1f88cdaf8584af3eef1
     6.8 +
     6.9 +x86: Support XZ-compressed kernel
    6.10 +
    6.11 +This integrates the XZ decompression code to the x86
    6.12 +pre-boot code.
    6.13 +
    6.14 +mkpiggy.c is updated to reserve about 32 KiB more buffer safety
    6.15 +margin for kernel decompression. It is done unconditionally for
    6.16 +all decompressors to keep the code simpler.
    6.17 +
    6.18 +The XZ decompressor needs around 30 KiB of heap, so the heap size
    6.19 +is increased to 32 KiB on both x86-32 and x86-64.
    6.20 +
    6.21 +Documentation/x86/boot.txt is updated to list the XZ magic number.
    6.22 +
    6.23 +With the x86 BCJ filter in XZ, XZ-compressed x86 kernel tends to be
    6.24 +a few percent smaller than the equivalent LZMA-compressed kernel.
    6.25 +
    6.26 +Signed-off-by: Lasse Collin <lasse.collin@tukaani.org>
    6.27 +---
    6.28 +
    6.29 +diff --git a/Documentation/x86/boot.txt b/Documentation/x86/boot.txt
    6.30 +index 30b43e1..3988cde 100644
    6.31 +--- a/Documentation/x86/boot.txt
    6.32 ++++ b/Documentation/x86/boot.txt
    6.33 +@@ -621,9 +621,9 @@ Protocol:	2.08+
    6.34 +   The payload may be compressed. The format of both the compressed and
    6.35 +   uncompressed data should be determined using the standard magic
    6.36 +   numbers.  The currently supported compression formats are gzip
    6.37 +-  (magic numbers 1F 8B or 1F 9E), bzip2 (magic number 42 5A) and LZMA
    6.38 +-  (magic number 5D 00).  The uncompressed payload is currently always ELF
    6.39 +-  (magic number 7F 45 4C 46).
    6.40 ++  (magic numbers 1F 8B or 1F 9E), bzip2 (magic number 42 5A), LZMA
    6.41 ++  (magic number 5D 00), and XZ (magic number FD 37).  The uncompressed
    6.42 ++  payload is currently always ELF (magic number 7F 45 4C 46).
    6.43 +   
    6.44 + Field name:	payload_length
    6.45 + Type:		read
    6.46 +diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
    6.47 +index cea0cd9..f3db0d7 100644
    6.48 +--- a/arch/x86/Kconfig
    6.49 ++++ b/arch/x86/Kconfig
    6.50 +@@ -51,6 +51,7 @@ config X86
    6.51 + 	select HAVE_KERNEL_GZIP
    6.52 + 	select HAVE_KERNEL_BZIP2
    6.53 + 	select HAVE_KERNEL_LZMA
    6.54 ++	select HAVE_KERNEL_XZ
    6.55 + 	select HAVE_KERNEL_LZO
    6.56 + 	select HAVE_HW_BREAKPOINT
    6.57 + 	select HAVE_MIXED_BREAKPOINTS_REGS
    6.58 +diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile
    6.59 +index 0c22955..09664ef 100644
    6.60 +--- a/arch/x86/boot/compressed/Makefile
    6.61 ++++ b/arch/x86/boot/compressed/Makefile
    6.62 +@@ -4,7 +4,7 @@
    6.63 + # create a compressed vmlinux image from the original vmlinux
    6.64 + #
    6.65 + 
    6.66 +-targets := vmlinux.lds vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma vmlinux.bin.lzo head_$(BITS).o misc.o string.o cmdline.o early_serial_console.o piggy.o
    6.67 ++targets := vmlinux.lds vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma vmlinux.bin.xz vmlinux.bin.lzo head_$(BITS).o misc.o string.o cmdline.o early_serial_console.o piggy.o
    6.68 + 
    6.69 + KBUILD_CFLAGS := -m$(BITS) -D__KERNEL__ $(LINUX_INCLUDE) -O2
    6.70 + KBUILD_CFLAGS += -fno-strict-aliasing -fPIC
    6.71 +@@ -49,12 +49,15 @@ $(obj)/vmlinux.bin.bz2: $(vmlinux.bin.all-y) FORCE
    6.72 + 	$(call if_changed,bzip2)
    6.73 + $(obj)/vmlinux.bin.lzma: $(vmlinux.bin.all-y) FORCE
    6.74 + 	$(call if_changed,lzma)
    6.75 ++$(obj)/vmlinux.bin.xz: $(vmlinux.bin.all-y) FORCE
    6.76 ++	$(call if_changed,xzkern)
    6.77 + $(obj)/vmlinux.bin.lzo: $(vmlinux.bin.all-y) FORCE
    6.78 + 	$(call if_changed,lzo)
    6.79 + 
    6.80 + suffix-$(CONFIG_KERNEL_GZIP)	:= gz
    6.81 + suffix-$(CONFIG_KERNEL_BZIP2)	:= bz2
    6.82 + suffix-$(CONFIG_KERNEL_LZMA)	:= lzma
    6.83 ++suffix-$(CONFIG_KERNEL_XZ)	:= xz
    6.84 + suffix-$(CONFIG_KERNEL_LZO) 	:= lzo
    6.85 + 
    6.86 + quiet_cmd_mkpiggy = MKPIGGY $@
    6.87 +diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c
    6.88 +index 8f7bef8..6d4cab7 100644
    6.89 +--- a/arch/x86/boot/compressed/misc.c
    6.90 ++++ b/arch/x86/boot/compressed/misc.c
    6.91 +@@ -139,6 +139,10 @@ static int lines, cols;
    6.92 + #include "../../../../lib/decompress_unlzma.c"
    6.93 + #endif
    6.94 + 
    6.95 ++#ifdef CONFIG_KERNEL_XZ
    6.96 ++#include "../../../../lib/decompress_unxz.c"
    6.97 ++#endif
    6.98 ++
    6.99 + #ifdef CONFIG_KERNEL_LZO
   6.100 + #include "../../../../lib/decompress_unlzo.c"
   6.101 + #endif
   6.102 +diff --git a/arch/x86/boot/compressed/mkpiggy.c b/arch/x86/boot/compressed/mkpiggy.c
   6.103 +index 5c22812..646aa78 100644
   6.104 +--- a/arch/x86/boot/compressed/mkpiggy.c
   6.105 ++++ b/arch/x86/boot/compressed/mkpiggy.c
   6.106 +@@ -74,7 +74,7 @@ int main(int argc, char *argv[])
   6.107 + 
   6.108 + 	offs = (olen > ilen) ? olen - ilen : 0;
   6.109 + 	offs += olen >> 12;	/* Add 8 bytes for each 32K block */
   6.110 +-	offs += 32*1024 + 18;	/* Add 32K + 18 bytes slack */
   6.111 ++	offs += 64*1024 + 128;	/* Add 64K + 128 bytes slack */
   6.112 + 	offs = (offs+4095) & ~4095; /* Round to a 4K boundary */
   6.113 + 
   6.114 + 	printf(".section \".rodata..compressed\",\"a\",@progbits\n");
   6.115 +diff --git a/arch/x86/include/asm/boot.h b/arch/x86/include/asm/boot.h
   6.116 +index 3b62ab5..5e1a2ee 100644
   6.117 +--- a/arch/x86/include/asm/boot.h
   6.118 ++++ b/arch/x86/include/asm/boot.h
   6.119 +@@ -32,11 +32,7 @@
   6.120 + #define BOOT_HEAP_SIZE             0x400000
   6.121 + #else /* !CONFIG_KERNEL_BZIP2 */
   6.122 + 
   6.123 +-#ifdef CONFIG_X86_64
   6.124 +-#define BOOT_HEAP_SIZE	0x7000
   6.125 +-#else
   6.126 +-#define BOOT_HEAP_SIZE	0x4000
   6.127 +-#endif
   6.128 ++#define BOOT_HEAP_SIZE	0x8000
   6.129 + 
   6.130 + #endif /* !CONFIG_KERNEL_BZIP2 */
   6.131 + 
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/kernel-modular/stuff/004-squashfs-add-xz-compression-support.patch	Tue Feb 01 09:37:33 2011 +0100
     7.3 @@ -0,0 +1,183 @@
     7.4 +From: Phillip Lougher <phillip@lougher.demon.co.uk>
     7.5 +Date: Thu, 9 Dec 2010 02:02:29 +0000 (+0000)
     7.6 +Subject: Squashfs: add XZ compression support
     7.7 +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fpkl%2Fsquashfs-xz.git;a=commitdiff_plain;h=d3e6969b9ff1f3a3c6bf3da71433c77046aa80e4
     7.8 +
     7.9 +Squashfs: add XZ compression support
    7.10 +
    7.11 +Add XZ decompressor wrapper code.
    7.12 +
    7.13 +Signed-off-by: Phillip Lougher <phillip@lougher.demon.co.uk>
    7.14 +---
    7.15 +
    7.16 +diff --git a/fs/squashfs/squashfs_fs.h b/fs/squashfs/squashfs_fs.h
    7.17 +index c5137fc..39533fe 100644
    7.18 +--- a/fs/squashfs/squashfs_fs.h
    7.19 ++++ b/fs/squashfs/squashfs_fs.h
    7.20 +@@ -238,6 +238,7 @@ struct meta_index {
    7.21 + #define ZLIB_COMPRESSION	1
    7.22 + #define LZMA_COMPRESSION	2
    7.23 + #define LZO_COMPRESSION		3
    7.24 ++#define XZ_COMPRESSION		4
    7.25 + 
    7.26 + struct squashfs_super_block {
    7.27 + 	__le32			s_magic;
    7.28 +diff --git a/fs/squashfs/xz_wrapper.c b/fs/squashfs/xz_wrapper.c
    7.29 +new file mode 100644
    7.30 +index 0000000..053fe35
    7.31 +--- /dev/null
    7.32 ++++ b/fs/squashfs/xz_wrapper.c
    7.33 +@@ -0,0 +1,153 @@
    7.34 ++/*
    7.35 ++ * Squashfs - a compressed read only filesystem for Linux
    7.36 ++ *
    7.37 ++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
    7.38 ++ * Phillip Lougher <phillip@lougher.demon.co.uk>
    7.39 ++ *
    7.40 ++ * This program is free software; you can redistribute it and/or
    7.41 ++ * modify it under the terms of the GNU General Public License
    7.42 ++ * as published by the Free Software Foundation; either version 2,
    7.43 ++ * or (at your option) any later version.
    7.44 ++ *
    7.45 ++ * This program is distributed in the hope that it will be useful,
    7.46 ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
    7.47 ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    7.48 ++ * GNU General Public License for more details.
    7.49 ++ *
    7.50 ++ * You should have received a copy of the GNU General Public License
    7.51 ++ * along with this program; if not, write to the Free Software
    7.52 ++ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
    7.53 ++ *
    7.54 ++ * xz_wrapper.c
    7.55 ++ */
    7.56 ++
    7.57 ++
    7.58 ++#include <linux/mutex.h>
    7.59 ++#include <linux/buffer_head.h>
    7.60 ++#include <linux/slab.h>
    7.61 ++#include <linux/xz.h>
    7.62 ++
    7.63 ++#include "squashfs_fs.h"
    7.64 ++#include "squashfs_fs_sb.h"
    7.65 ++#include "squashfs_fs_i.h"
    7.66 ++#include "squashfs.h"
    7.67 ++#include "decompressor.h"
    7.68 ++
    7.69 ++struct squashfs_xz {
    7.70 ++	struct xz_dec *state;
    7.71 ++	struct xz_buf buf;
    7.72 ++};
    7.73 ++
    7.74 ++static void *squashfs_xz_init(struct squashfs_sb_info *msblk)
    7.75 ++{
    7.76 ++        int block_size = max_t(int, msblk->block_size, SQUASHFS_METADATA_SIZE);
    7.77 ++
    7.78 ++        struct squashfs_xz *stream = kmalloc(sizeof(*stream), GFP_KERNEL);
    7.79 ++        if (stream == NULL)
    7.80 ++                goto failed;
    7.81 ++	stream->state = xz_dec_init(XZ_PREALLOC, block_size);
    7.82 ++	if (stream->state == NULL)
    7.83 ++		goto failed;
    7.84 ++
    7.85 ++	return stream;
    7.86 ++
    7.87 ++failed:
    7.88 ++	ERROR("Failed to allocate xz workspace\n");
    7.89 ++	kfree(stream);
    7.90 ++	return NULL;
    7.91 ++}
    7.92 ++
    7.93 ++
    7.94 ++static void squashfs_xz_free(void *strm)
    7.95 ++{
    7.96 ++	struct squashfs_xz *stream = strm;
    7.97 ++
    7.98 ++	if (stream) {
    7.99 ++		xz_dec_end(stream->state);
   7.100 ++		kfree(stream);
   7.101 ++	}
   7.102 ++}
   7.103 ++
   7.104 ++
   7.105 ++static int squashfs_xz_uncompress(struct squashfs_sb_info *msblk, void **buffer,
   7.106 ++	struct buffer_head **bh, int b, int offset, int length, int srclength,
   7.107 ++	int pages)
   7.108 ++{
   7.109 ++	enum xz_ret xz_err;
   7.110 ++	int avail, total = 0, k = 0, page = 0;
   7.111 ++	struct squashfs_xz *stream = msblk->stream;
   7.112 ++
   7.113 ++	mutex_lock(&msblk->read_data_mutex);
   7.114 ++
   7.115 ++	xz_dec_reset(stream->state);
   7.116 ++	stream->buf.in_pos = 0;
   7.117 ++	stream->buf.in_size = 0;
   7.118 ++	stream->buf.out_pos = 0;
   7.119 ++	stream->buf.out_size = PAGE_CACHE_SIZE;
   7.120 ++	stream->buf.out = buffer[page++];
   7.121 ++
   7.122 ++	do {
   7.123 ++		if (stream->buf.in_pos == stream->buf.in_size && k < b) {
   7.124 ++			avail = min(length, msblk->devblksize - offset);
   7.125 ++			length -= avail;
   7.126 ++			wait_on_buffer(bh[k]);
   7.127 ++			if (!buffer_uptodate(bh[k]))
   7.128 ++				goto release_mutex;
   7.129 ++
   7.130 ++			if (avail == 0) {
   7.131 ++				offset = 0;
   7.132 ++				put_bh(bh[k++]);
   7.133 ++				continue;
   7.134 ++			}
   7.135 ++
   7.136 ++			stream->buf.in = bh[k]->b_data + offset;
   7.137 ++			stream->buf.in_size = avail;
   7.138 ++			stream->buf.in_pos = 0;
   7.139 ++			offset = 0;
   7.140 ++		}
   7.141 ++
   7.142 ++		if (stream->buf.out_pos == stream->buf.out_size
   7.143 ++							&& page < pages) {
   7.144 ++			stream->buf.out = buffer[page++];
   7.145 ++			stream->buf.out_pos = 0;
   7.146 ++			total += PAGE_CACHE_SIZE;
   7.147 ++		}
   7.148 ++
   7.149 ++		xz_err = xz_dec_run(stream->state, &stream->buf);
   7.150 ++
   7.151 ++		if (stream->buf.in_pos == stream->buf.in_size && k < b)
   7.152 ++			put_bh(bh[k++]);
   7.153 ++	} while (xz_err == XZ_OK);
   7.154 ++
   7.155 ++	if (xz_err != XZ_STREAM_END) {
   7.156 ++		ERROR("xz_dec_run error, data probably corrupt\n");
   7.157 ++		goto release_mutex;
   7.158 ++	}
   7.159 ++
   7.160 ++	if (k < b) {
   7.161 ++		ERROR("xz_uncompress error, input remaining\n");
   7.162 ++		goto release_mutex;
   7.163 ++	}
   7.164 ++
   7.165 ++	total += stream->buf.out_pos;
   7.166 ++	mutex_unlock(&msblk->read_data_mutex);
   7.167 ++	return total;
   7.168 ++
   7.169 ++release_mutex:
   7.170 ++	mutex_unlock(&msblk->read_data_mutex);
   7.171 ++
   7.172 ++	for (; k < b; k++)
   7.173 ++		put_bh(bh[k]);
   7.174 ++
   7.175 ++	return -EIO;
   7.176 ++}
   7.177 ++
   7.178 ++const struct squashfs_decompressor squashfs_xz_comp_ops = {
   7.179 ++	.init = squashfs_xz_init,
   7.180 ++	.free = squashfs_xz_free,
   7.181 ++	.decompress = squashfs_xz_uncompress,
   7.182 ++	.id = XZ_COMPRESSION,
   7.183 ++	.name = "xz",
   7.184 ++	.supported = 1
   7.185 ++};
   7.186 ++
     8.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.2 +++ b/kernel-modular/stuff/005-squashfs-add-xz-compression-configuration-option.patch	Tue Feb 01 09:37:33 2011 +0100
     8.3 @@ -0,0 +1,86 @@
     8.4 +From: Phillip Lougher <phillip@lougher.demon.co.uk>
     8.5 +Date: Thu, 9 Dec 2010 02:08:31 +0000 (+0000)
     8.6 +Subject: Squashfs: Add XZ compression configuration option
     8.7 +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fpkl%2Fsquashfs-xz.git;a=commitdiff_plain;h=e23d468968e608de27328888240de27d7582ad52
     8.8 +
     8.9 +Squashfs: Add XZ compression configuration option
    8.10 +
    8.11 +Signed-off-by: Phillip Lougher <phillip@lougher.demon.co.uk>
    8.12 +---
    8.13 +
    8.14 +diff --git a/fs/squashfs/Kconfig b/fs/squashfs/Kconfig
    8.15 +index e5f63da..e96d99a 100644
    8.16 +--- a/fs/squashfs/Kconfig
    8.17 ++++ b/fs/squashfs/Kconfig
    8.18 +@@ -53,6 +53,22 @@ config SQUASHFS_LZO
    8.19 + 
    8.20 + 	  If unsure, say N.
    8.21 + 
    8.22 ++config SQUASHFS_XZ
    8.23 ++	bool "Include support for XZ compressed file systems"
    8.24 ++	depends on SQUASHFS
    8.25 ++	default n
    8.26 ++	select XZ_DEC
    8.27 ++	help
    8.28 ++	  Saying Y here includes support for reading Squashfs file systems
    8.29 ++	  compressed with XZ compresssion.  XZ gives better compression than
    8.30 ++	  the default zlib compression, at the expense of greater CPU and
    8.31 ++	  memory overhead.
    8.32 ++
    8.33 ++	  XZ is not the standard compression used in Squashfs and so most
    8.34 ++	  file systems will be readable without selecting this option.
    8.35 ++
    8.36 ++	  If unsure, say N.
    8.37 ++
    8.38 + config SQUASHFS_EMBEDDED
    8.39 + 	bool "Additional option for memory-constrained systems"
    8.40 + 	depends on SQUASHFS
    8.41 +diff --git a/fs/squashfs/Makefile b/fs/squashfs/Makefile
    8.42 +index 7672bac..cecf2be 100644
    8.43 +--- a/fs/squashfs/Makefile
    8.44 ++++ b/fs/squashfs/Makefile
    8.45 +@@ -7,3 +7,4 @@ squashfs-y += block.o cache.o dir.o export.o file.o fragment.o id.o inode.o
    8.46 + squashfs-y += namei.o super.o symlink.o zlib_wrapper.o decompressor.o
    8.47 + squashfs-$(CONFIG_SQUASHFS_XATTR) += xattr.o xattr_id.o
    8.48 + squashfs-$(CONFIG_SQUASHFS_LZO) += lzo_wrapper.o
    8.49 ++squashfs-$(CONFIG_SQUASHFS_XZ) += xz_wrapper.o
    8.50 +diff --git a/fs/squashfs/decompressor.c b/fs/squashfs/decompressor.c
    8.51 +index 24af9ce..ac333b8 100644
    8.52 +--- a/fs/squashfs/decompressor.c
    8.53 ++++ b/fs/squashfs/decompressor.c
    8.54 +@@ -46,6 +46,12 @@ static const struct squashfs_decompressor squashfs_lzo_unsupported_comp_ops = {
    8.55 + };
    8.56 + #endif
    8.57 + 
    8.58 ++#ifndef CONFIG_SQUASHFS_XZ
    8.59 ++static const struct squashfs_decompressor squashfs_xz_unsupported_comp_ops = {
    8.60 ++	NULL, NULL, NULL, XZ_COMPRESSION, "xz", 0
    8.61 ++};
    8.62 ++#endif
    8.63 ++
    8.64 + static const struct squashfs_decompressor squashfs_unknown_comp_ops = {
    8.65 + 	NULL, NULL, NULL, 0, "unknown", 0
    8.66 + };
    8.67 +@@ -58,6 +64,11 @@ static const struct squashfs_decompressor *decompressor[] = {
    8.68 + #else
    8.69 + 	&squashfs_lzo_unsupported_comp_ops,
    8.70 + #endif
    8.71 ++#ifdef CONFIG_SQUASHFS_XZ
    8.72 ++	&squashfs_xz_comp_ops,
    8.73 ++#else
    8.74 ++	&squashfs_xz_unsupported_comp_ops,
    8.75 ++#endif
    8.76 + 	&squashfs_unknown_comp_ops
    8.77 + };
    8.78 + 
    8.79 +diff --git a/fs/squashfs/squashfs.h b/fs/squashfs/squashfs.h
    8.80 +index 5d45569..1096e2e 100644
    8.81 +--- a/fs/squashfs/squashfs.h
    8.82 ++++ b/fs/squashfs/squashfs.h
    8.83 +@@ -107,3 +107,6 @@ extern const struct squashfs_decompressor squashfs_zlib_comp_ops;
    8.84 + 
    8.85 + /* lzo_wrapper.c */
    8.86 + extern const struct squashfs_decompressor squashfs_lzo_comp_ops;
    8.87 ++
    8.88 ++/* xz_wrapper.c */
    8.89 ++extern const struct squashfs_decompressor squashfs_xz_comp_ops;
     9.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.2 +++ b/kernel-modular/stuff/aufs2-2.6.36-fix.patch	Tue Feb 01 09:37:33 2011 +0100
     9.3 @@ -0,0 +1,130 @@
     9.4 +diff --git a/fs/file_table.c b/fs/file_table.c
     9.5 +index a04bdd8..fbf8908 100644
     9.6 +--- a/fs/file_table.c
     9.7 ++++ b/fs/file_table.c
     9.8 +@@ -20,7 +20,6 @@
     9.9 + #include <linux/cdev.h>
    9.10 + #include <linux/fsnotify.h>
    9.11 + #include <linux/sysctl.h>
    9.12 +-#include <linux/lglock.h>
    9.13 + #include <linux/percpu_counter.h>
    9.14 + #include <linux/percpu.h>
    9.15 + #include <linux/ima.h>
    9.16 +@@ -34,7 +33,6 @@ struct files_stat_struct files_stat = {
    9.17 + 	.max_files = NR_FILE
    9.18 + };
    9.19 + 
    9.20 +-DECLARE_LGLOCK(files_lglock);
    9.21 + DEFINE_LGLOCK(files_lglock);
    9.22 + 
    9.23 + /* SLAB cache for file structures */
    9.24 +@@ -394,37 +392,6 @@ void file_sb_list_del(struct file *file)
    9.25 + 	}
    9.26 + }
    9.27 + 
    9.28 +-#ifdef CONFIG_SMP
    9.29 +-
    9.30 +-/*
    9.31 +- * These macros iterate all files on all CPUs for a given superblock.
    9.32 +- * files_lglock must be held globally.
    9.33 +- */
    9.34 +-#define do_file_list_for_each_entry(__sb, __file)		\
    9.35 +-{								\
    9.36 +-	int i;							\
    9.37 +-	for_each_possible_cpu(i) {				\
    9.38 +-		struct list_head *list;				\
    9.39 +-		list = per_cpu_ptr((__sb)->s_files, i);		\
    9.40 +-		list_for_each_entry((__file), list, f_u.fu_list)
    9.41 +-
    9.42 +-#define while_file_list_for_each_entry				\
    9.43 +-	}							\
    9.44 +-}
    9.45 +-
    9.46 +-#else
    9.47 +-
    9.48 +-#define do_file_list_for_each_entry(__sb, __file)		\
    9.49 +-{								\
    9.50 +-	struct list_head *list;					\
    9.51 +-	list = &(sb)->s_files;					\
    9.52 +-	list_for_each_entry((__file), list, f_u.fu_list)
    9.53 +-
    9.54 +-#define while_file_list_for_each_entry				\
    9.55 +-}
    9.56 +-
    9.57 +-#endif
    9.58 +-
    9.59 + int fs_may_remount_ro(struct super_block *sb)
    9.60 + {
    9.61 + 	struct file *file;
    9.62 +diff --git a/fs/statfs.c b/fs/statfs.c
    9.63 +index 30ea8c8..9025c98 100644
    9.64 +--- a/fs/statfs.c
    9.65 ++++ b/fs/statfs.c
    9.66 +@@ -61,6 +61,7 @@ int statfs_by_dentry(struct dentry *dentry, struct kstatfs *buf)
    9.67 + 		buf->f_frsize = buf->f_bsize;
    9.68 + 	return retval;
    9.69 + }
    9.70 ++EXPORT_SYMBOL(statfs_by_dentry);
    9.71 + 
    9.72 + int vfs_statfs(struct path *path, struct kstatfs *buf)
    9.73 + {
    9.74 +diff --git a/include/linux/fs.h b/include/linux/fs.h
    9.75 +index 63d069b..741d296 100644
    9.76 +--- a/include/linux/fs.h
    9.77 ++++ b/include/linux/fs.h
    9.78 +@@ -9,6 +9,7 @@
    9.79 + #include <linux/limits.h>
    9.80 + #include <linux/ioctl.h>
    9.81 + #include <linux/blk_types.h>
    9.82 ++#include <linux/lglock.h>
    9.83 + 
    9.84 + /*
    9.85 +  * It's silly to have NR_OPEN bigger than NR_FILE, but you can change
    9.86 +@@ -1814,6 +1815,7 @@ extern struct vfsmount *collect_mounts(struct path *);
    9.87 + extern void drop_collected_mounts(struct vfsmount *);
    9.88 + extern int iterate_mounts(int (*)(struct vfsmount *, void *), void *,
    9.89 + 			  struct vfsmount *);
    9.90 ++extern int statfs_by_dentry(struct dentry *dentry, struct kstatfs *buf);
    9.91 + extern int vfs_statfs(struct path *, struct kstatfs *);
    9.92 + extern int statfs_by_dentry(struct dentry *, struct kstatfs *);
    9.93 + extern int freeze_super(struct super_block *super);
    9.94 +@@ -2481,5 +2483,39 @@ int __init get_filesystem_list(char *buf);
    9.95 + #define OPEN_FMODE(flag) ((__force fmode_t)(((flag + 1) & O_ACCMODE) | \
    9.96 + 					    (flag & FMODE_NONOTIFY)))
    9.97 + 
    9.98 ++
    9.99 ++DECLARE_LGLOCK(files_lglock);
   9.100 ++
   9.101 ++#ifdef CONFIG_SMP
   9.102 ++
   9.103 ++/*
   9.104 ++ * These macros iterate all files on all CPUs for a given superblock.
   9.105 ++ * files_lglock must be held globally.
   9.106 ++ */
   9.107 ++#define do_file_list_for_each_entry(__sb, __file)		\
   9.108 ++{								\
   9.109 ++	int i;							\
   9.110 ++	for_each_possible_cpu(i) {				\
   9.111 ++		struct list_head *list;				\
   9.112 ++		list = per_cpu_ptr((__sb)->s_files, i);		\
   9.113 ++		list_for_each_entry((__file), list, f_u.fu_list)
   9.114 ++
   9.115 ++#define while_file_list_for_each_entry				\
   9.116 ++	}							\
   9.117 ++}
   9.118 ++
   9.119 ++#else
   9.120 ++
   9.121 ++#define do_file_list_for_each_entry(__sb, __file)		\
   9.122 ++{								\
   9.123 ++	struct list_head *list;					\
   9.124 ++	list = &(sb)->s_files;					\
   9.125 ++	list_for_each_entry((__file), list, f_u.fu_list)
   9.126 ++
   9.127 ++#define while_file_list_for_each_entry				\
   9.128 ++}
   9.129 ++
   9.130 ++#endif
   9.131 ++
   9.132 + #endif /* __KERNEL__ */
   9.133 + #endif /* _LINUX_FS_H */
    10.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.2 +++ b/kernel-modular/stuff/aufs2-base.patch	Tue Feb 01 09:37:33 2011 +0100
    10.3 @@ -0,0 +1,78 @@
    10.4 +aufs2.1 base patch for linux-2.6.37
    10.5 +
    10.6 +diff --git a/fs/namei.c b/fs/namei.c
    10.7 +index 4ff7ca5..a8c583f 100644
    10.8 +--- a/fs/namei.c
    10.9 ++++ b/fs/namei.c
   10.10 +@@ -1161,12 +1161,12 @@ out:
   10.11 +  * needs parent already locked. Doesn't follow mounts.
   10.12 +  * SMP-safe.
   10.13 +  */
   10.14 +-static struct dentry *lookup_hash(struct nameidata *nd)
   10.15 ++struct dentry *lookup_hash(struct nameidata *nd)
   10.16 + {
   10.17 + 	return __lookup_hash(&nd->last, nd->path.dentry, nd);
   10.18 + }
   10.19 + 
   10.20 +-static int __lookup_one_len(const char *name, struct qstr *this,
   10.21 ++int __lookup_one_len(const char *name, struct qstr *this,
   10.22 + 		struct dentry *base, int len)
   10.23 + {
   10.24 + 	unsigned long hash;
   10.25 +diff --git a/fs/splice.c b/fs/splice.c
   10.26 +index ce2f025..ff0ae69 100644
   10.27 +--- a/fs/splice.c
   10.28 ++++ b/fs/splice.c
   10.29 +@@ -1092,8 +1092,8 @@ EXPORT_SYMBOL(generic_splice_sendpage);
   10.30 + /*
   10.31 +  * Attempt to initiate a splice from pipe to file.
   10.32 +  */
   10.33 +-static long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
   10.34 +-			   loff_t *ppos, size_t len, unsigned int flags)
   10.35 ++long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
   10.36 ++		    loff_t *ppos, size_t len, unsigned int flags)
   10.37 + {
   10.38 + 	ssize_t (*splice_write)(struct pipe_inode_info *, struct file *,
   10.39 + 				loff_t *, size_t, unsigned int);
   10.40 +@@ -1120,9 +1120,9 @@ static long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
   10.41 + /*
   10.42 +  * Attempt to initiate a splice from a file to a pipe.
   10.43 +  */
   10.44 +-static long do_splice_to(struct file *in, loff_t *ppos,
   10.45 +-			 struct pipe_inode_info *pipe, size_t len,
   10.46 +-			 unsigned int flags)
   10.47 ++long do_splice_to(struct file *in, loff_t *ppos,
   10.48 ++		  struct pipe_inode_info *pipe, size_t len,
   10.49 ++		  unsigned int flags)
   10.50 + {
   10.51 + 	ssize_t (*splice_read)(struct file *, loff_t *,
   10.52 + 			       struct pipe_inode_info *, size_t, unsigned int);
   10.53 +diff --git a/include/linux/namei.h b/include/linux/namei.h
   10.54 +index 05b441d..91bc74e 100644
   10.55 +--- a/include/linux/namei.h
   10.56 ++++ b/include/linux/namei.h
   10.57 +@@ -73,6 +73,9 @@ extern int vfs_path_lookup(struct dentry *, struct vfsmount *,
   10.58 + extern struct file *lookup_instantiate_filp(struct nameidata *nd, struct dentry *dentry,
   10.59 + 		int (*open)(struct inode *, struct file *));
   10.60 + 
   10.61 ++extern struct dentry *lookup_hash(struct nameidata *nd);
   10.62 ++extern int __lookup_one_len(const char *name, struct qstr *this,
   10.63 ++			    struct dentry *base, int len);
   10.64 + extern struct dentry *lookup_one_len(const char *, struct dentry *, int);
   10.65 + 
   10.66 + extern int follow_down(struct path *);
   10.67 +diff --git a/include/linux/splice.h b/include/linux/splice.h
   10.68 +index 997c3b4..be9a153 100644
   10.69 +--- a/include/linux/splice.h
   10.70 ++++ b/include/linux/splice.h
   10.71 +@@ -89,4 +89,10 @@ extern int splice_grow_spd(struct pipe_inode_info *, struct splice_pipe_desc *);
   10.72 + extern void splice_shrink_spd(struct pipe_inode_info *,
   10.73 + 				struct splice_pipe_desc *);
   10.74 + 
   10.75 ++extern long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
   10.76 ++			   loff_t *ppos, size_t len, unsigned int flags);
   10.77 ++extern long do_splice_to(struct file *in, loff_t *ppos,
   10.78 ++			 struct pipe_inode_info *pipe, size_t len,
   10.79 ++			 unsigned int flags);
   10.80 ++
   10.81 + #endif
    11.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    11.2 +++ b/kernel-modular/stuff/aufs2-kbuild.patch	Tue Feb 01 09:37:33 2011 +0100
    11.3 @@ -0,0 +1,35 @@
    11.4 +aufs2.1 kbuild patch for linux-2.6.37
    11.5 +
    11.6 +diff --git a/fs/Kconfig b/fs/Kconfig
    11.7 +index 771f457..bb1a52f 100644
    11.8 +--- a/fs/Kconfig
    11.9 ++++ b/fs/Kconfig
   11.10 +@@ -191,6 +191,7 @@ source "fs/romfs/Kconfig"
   11.11 + source "fs/sysv/Kconfig"
   11.12 + source "fs/ufs/Kconfig"
   11.13 + source "fs/exofs/Kconfig"
   11.14 ++source "fs/aufs/Kconfig"
   11.15 + 
   11.16 + endif # MISC_FILESYSTEMS
   11.17 + 
   11.18 +diff --git a/fs/Makefile b/fs/Makefile
   11.19 +index a7f7cef..95dd4d3 100644
   11.20 +--- a/fs/Makefile
   11.21 ++++ b/fs/Makefile
   11.22 +@@ -121,3 +121,4 @@ obj-$(CONFIG_BTRFS_FS)		+= btrfs/
   11.23 + obj-$(CONFIG_GFS2_FS)           += gfs2/
   11.24 + obj-$(CONFIG_EXOFS_FS)          += exofs/
   11.25 + obj-$(CONFIG_CEPH_FS)		+= ceph/
   11.26 ++obj-$(CONFIG_AUFS_FS)           += aufs/
   11.27 +diff --git a/include/linux/Kbuild b/include/linux/Kbuild
   11.28 +index 97319a8..7ebb4b4 100644
   11.29 +--- a/include/linux/Kbuild
   11.30 ++++ b/include/linux/Kbuild
   11.31 +@@ -60,6 +60,7 @@ header-y += atmppp.h
   11.32 + header-y += atmsap.h
   11.33 + header-y += atmsvc.h
   11.34 + header-y += audit.h
   11.35 ++header-y += aufs_type.h
   11.36 + header-y += auto_fs.h
   11.37 + header-y += auto_fs4.h
   11.38 + header-y += auxvec.h
    12.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    12.2 +++ b/kernel-modular/stuff/aufs2-module-2.6.36.patch	Tue Feb 01 09:37:33 2011 +0100
    12.3 @@ -0,0 +1,47 @@
    12.4 +diff --git a/ubuntu/aufs/branch.c b/ubuntu/aufs/branch.c
    12.5 +index cd4463c..ff6b158 100644
    12.6 +--- a/fs/aufs/branch.c
    12.7 ++++ b/fs/aufs/branch.c
    12.8 +@@ -22,6 +22,8 @@
    12.9 + 
   12.10 + #include <linux/file.h>
   12.11 + #include <linux/statfs.h>
   12.12 ++#include <linux/lglock.h>
   12.13 ++#include <linux/percpu.h>
   12.14 + #include "aufs.h"
   12.15 + 
   12.16 + /*
   12.17 +@@ -851,7 +853,8 @@ static int au_br_mod_files_ro(struct super_block *sb, aufs_bindex_t bindex)
   12.18 + 		goto out;
   12.19 + 
   12.20 + 	/* no need file_list_lock() since sbinfo is locked? defered? */
   12.21 +-	list_for_each_entry(file, &sb->s_files, f_u.fu_list) {
   12.22 ++        lg_global_lock(files_lglock);
   12.23 ++	do_file_list_for_each_entry(sb, file) {
   12.24 + 		if (special_file(file->f_dentry->d_inode->i_mode))
   12.25 + 			continue;
   12.26 + 
   12.27 +@@ -861,6 +864,7 @@ static int au_br_mod_files_ro(struct super_block *sb, aufs_bindex_t bindex)
   12.28 + 			err = -EBUSY;
   12.29 + 			FiMustNoWaiters(file);
   12.30 + 			fi_read_unlock(file);
   12.31 ++			lg_global_unlock(files_lglock);
   12.32 + 			goto out_free;
   12.33 + 		}
   12.34 + 
   12.35 +@@ -889,10 +893,13 @@ static int au_br_mod_files_ro(struct super_block *sb, aufs_bindex_t bindex)
   12.36 + 			if (p) {
   12.37 + 				a = p;
   12.38 + 				a[n++] = hf;
   12.39 +-			} else
   12.40 ++			} else {
   12.41 ++				lg_global_unlock(files_lglock);
   12.42 + 				goto out_free;
   12.43 ++			}
   12.44 + 		}
   12.45 +-	}
   12.46 ++	} while_file_list_for_each_entry;
   12.47 ++	lg_global_unlock(files_lglock);
   12.48 + 
   12.49 + 	err = 0;
   12.50 + 	if (n)
    13.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    13.2 +++ b/kernel-modular/stuff/aufs2-standalone.patch	Tue Feb 01 09:37:33 2011 +0100
    13.3 @@ -0,0 +1,289 @@
    13.4 +aufs2.1 standalone patch for linux-2.6.37
    13.5 +
    13.6 +diff --git a/fs/file_table.c b/fs/file_table.c
    13.7 +index c3dee38..f529e4d 100644
    13.8 +--- a/fs/file_table.c
    13.9 ++++ b/fs/file_table.c
   13.10 +@@ -393,6 +393,8 @@ void file_sb_list_del(struct file *file)
   13.11 + 	}
   13.12 + }
   13.13 + 
   13.14 ++EXPORT_SYMBOL(file_sb_list_del);
   13.15 ++
   13.16 + #ifdef CONFIG_SMP
   13.17 + 
   13.18 + /*
   13.19 +diff --git a/fs/inode.c b/fs/inode.c
   13.20 +index ae2727a..2c8071a 100644
   13.21 +--- a/fs/inode.c
   13.22 ++++ b/fs/inode.c
   13.23 +@@ -82,6 +82,7 @@ static struct hlist_head *inode_hashtable __read_mostly;
   13.24 +  * the i_state of an inode while it is in use..
   13.25 +  */
   13.26 + DEFINE_SPINLOCK(inode_lock);
   13.27 ++EXPORT_SYMBOL(inode_lock);
   13.28 + 
   13.29 + /*
   13.30 +  * iprune_sem provides exclusion between the kswapd or try_to_free_pages
   13.31 +diff --git a/fs/namei.c b/fs/namei.c
   13.32 +index a8c583f..b020c45 100644
   13.33 +--- a/fs/namei.c
   13.34 ++++ b/fs/namei.c
   13.35 +@@ -347,6 +347,7 @@ int deny_write_access(struct file * file)
   13.36 + 
   13.37 + 	return 0;
   13.38 + }
   13.39 ++EXPORT_SYMBOL(deny_write_access);
   13.40 + 
   13.41 + /**
   13.42 +  * path_get - get a reference to a path
   13.43 +@@ -1165,6 +1166,7 @@ struct dentry *lookup_hash(struct nameidata *nd)
   13.44 + {
   13.45 + 	return __lookup_hash(&nd->last, nd->path.dentry, nd);
   13.46 + }
   13.47 ++EXPORT_SYMBOL(lookup_hash);
   13.48 + 
   13.49 + int __lookup_one_len(const char *name, struct qstr *this,
   13.50 + 		struct dentry *base, int len)
   13.51 +@@ -1187,6 +1189,7 @@ int __lookup_one_len(const char *name, struct qstr *this,
   13.52 + 	this->hash = end_name_hash(hash);
   13.53 + 	return 0;
   13.54 + }
   13.55 ++EXPORT_SYMBOL(__lookup_one_len);
   13.56 + 
   13.57 + /**
   13.58 +  * lookup_one_len - filesystem helper to lookup single pathname component
   13.59 +diff --git a/fs/namespace.c b/fs/namespace.c
   13.60 +index 3dbfc07..3998762 100644
   13.61 +--- a/fs/namespace.c
   13.62 ++++ b/fs/namespace.c
   13.63 +@@ -1321,6 +1321,7 @@ int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg,
   13.64 + 	}
   13.65 + 	return 0;
   13.66 + }
   13.67 ++EXPORT_SYMBOL(iterate_mounts);
   13.68 + 
   13.69 + static void cleanup_group_ids(struct vfsmount *mnt, struct vfsmount *end)
   13.70 + {
   13.71 +diff --git a/fs/notify/group.c b/fs/notify/group.c
   13.72 +index d309f38..f0e9568 100644
   13.73 +--- a/fs/notify/group.c
   13.74 ++++ b/fs/notify/group.c
   13.75 +@@ -22,6 +22,7 @@
   13.76 + #include <linux/srcu.h>
   13.77 + #include <linux/rculist.h>
   13.78 + #include <linux/wait.h>
   13.79 ++#include <linux/module.h>
   13.80 + 
   13.81 + #include <linux/fsnotify_backend.h>
   13.82 + #include "fsnotify.h"
   13.83 +@@ -70,6 +71,7 @@ void fsnotify_put_group(struct fsnotify_group *group)
   13.84 + 	if (atomic_dec_and_test(&group->refcnt))
   13.85 + 		fsnotify_destroy_group(group);
   13.86 + }
   13.87 ++EXPORT_SYMBOL(fsnotify_put_group);
   13.88 + 
   13.89 + /*
   13.90 +  * Create a new fsnotify_group and hold a reference for the group returned.
   13.91 +@@ -102,3 +104,4 @@ struct fsnotify_group *fsnotify_alloc_group(const struct fsnotify_ops *ops)
   13.92 + 
   13.93 + 	return group;
   13.94 + }
   13.95 ++EXPORT_SYMBOL(fsnotify_alloc_group);
   13.96 +diff --git a/fs/notify/mark.c b/fs/notify/mark.c
   13.97 +index 325185e..adede09 100644
   13.98 +--- a/fs/notify/mark.c
   13.99 ++++ b/fs/notify/mark.c
  13.100 +@@ -113,6 +113,7 @@ void fsnotify_put_mark(struct fsnotify_mark *mark)
  13.101 + 	if (atomic_dec_and_test(&mark->refcnt))
  13.102 + 		mark->free_mark(mark);
  13.103 + }
  13.104 ++EXPORT_SYMBOL(fsnotify_put_mark);
  13.105 + 
  13.106 + /*
  13.107 +  * Any time a mark is getting freed we end up here.
  13.108 +@@ -190,6 +191,7 @@ void fsnotify_destroy_mark(struct fsnotify_mark *mark)
  13.109 + 	if (unlikely(atomic_dec_and_test(&group->num_marks)))
  13.110 + 		fsnotify_final_destroy_group(group);
  13.111 + }
  13.112 ++EXPORT_SYMBOL(fsnotify_destroy_mark);
  13.113 + 
  13.114 + void fsnotify_set_mark_mask_locked(struct fsnotify_mark *mark, __u32 mask)
  13.115 + {
  13.116 +@@ -277,6 +279,7 @@ err:
  13.117 + 
  13.118 + 	return ret;
  13.119 + }
  13.120 ++EXPORT_SYMBOL(fsnotify_add_mark);
  13.121 + 
  13.122 + /*
  13.123 +  * clear any marks in a group in which mark->flags & flags is true
  13.124 +@@ -332,6 +335,7 @@ void fsnotify_init_mark(struct fsnotify_mark *mark,
  13.125 + 	atomic_set(&mark->refcnt, 1);
  13.126 + 	mark->free_mark = free_mark;
  13.127 + }
  13.128 ++EXPORT_SYMBOL(fsnotify_init_mark);
  13.129 + 
  13.130 + static int fsnotify_mark_destroy(void *ignored)
  13.131 + {
  13.132 +diff --git a/fs/open.c b/fs/open.c
  13.133 +index 4197b9e..912817a 100644
  13.134 +--- a/fs/open.c
  13.135 ++++ b/fs/open.c
  13.136 +@@ -60,6 +60,7 @@ int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
  13.137 + 	mutex_unlock(&dentry->d_inode->i_mutex);
  13.138 + 	return ret;
  13.139 + }
  13.140 ++EXPORT_SYMBOL(do_truncate);
  13.141 + 
  13.142 + static long do_sys_truncate(const char __user *pathname, loff_t length)
  13.143 + {
  13.144 +diff --git a/fs/splice.c b/fs/splice.c
  13.145 +index ff0ae69..1c9e9b0 100644
  13.146 +--- a/fs/splice.c
  13.147 ++++ b/fs/splice.c
  13.148 +@@ -1116,6 +1116,7 @@ long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
  13.149 + 
  13.150 + 	return splice_write(pipe, out, ppos, len, flags);
  13.151 + }
  13.152 ++EXPORT_SYMBOL(do_splice_from);
  13.153 + 
  13.154 + /*
  13.155 +  * Attempt to initiate a splice from a file to a pipe.
  13.156 +@@ -1142,6 +1143,7 @@ long do_splice_to(struct file *in, loff_t *ppos,
  13.157 + 
  13.158 + 	return splice_read(in, ppos, pipe, len, flags);
  13.159 + }
  13.160 ++EXPORT_SYMBOL(do_splice_to);
  13.161 + 
  13.162 + /**
  13.163 +  * splice_direct_to_actor - splices data directly between two non-pipes
  13.164 +diff --git a/security/commoncap.c b/security/commoncap.c
  13.165 +index 64c2ed9..e58b5d8 100644
  13.166 +--- a/security/commoncap.c
  13.167 ++++ b/security/commoncap.c
  13.168 +@@ -929,3 +929,4 @@ int cap_file_mmap(struct file *file, unsigned long reqprot,
  13.169 + 	}
  13.170 + 	return ret;
  13.171 + }
  13.172 ++EXPORT_SYMBOL(cap_file_mmap);
  13.173 +diff --git a/security/device_cgroup.c b/security/device_cgroup.c
  13.174 +index 8d9c48f..29108aa 100644
  13.175 +--- a/security/device_cgroup.c
  13.176 ++++ b/security/device_cgroup.c
  13.177 +@@ -515,6 +515,7 @@ found:
  13.178 + 
  13.179 + 	return -EPERM;
  13.180 + }
  13.181 ++EXPORT_SYMBOL(devcgroup_inode_permission);
  13.182 + 
  13.183 + int devcgroup_inode_mknod(int mode, dev_t dev)
  13.184 + {
  13.185 +diff --git a/security/security.c b/security/security.c
  13.186 +index 1b798d3..3b7d2ca 100644
  13.187 +--- a/security/security.c
  13.188 ++++ b/security/security.c
  13.189 +@@ -360,6 +360,7 @@ int security_path_mkdir(struct path *dir, struct dentry *dentry, int mode)
  13.190 + 		return 0;
  13.191 + 	return security_ops->path_mkdir(dir, dentry, mode);
  13.192 + }
  13.193 ++EXPORT_SYMBOL(security_path_mkdir);
  13.194 + 
  13.195 + int security_path_rmdir(struct path *dir, struct dentry *dentry)
  13.196 + {
  13.197 +@@ -367,6 +368,7 @@ int security_path_rmdir(struct path *dir, struct dentry *dentry)
  13.198 + 		return 0;
  13.199 + 	return security_ops->path_rmdir(dir, dentry);
  13.200 + }
  13.201 ++EXPORT_SYMBOL(security_path_rmdir);
  13.202 + 
  13.203 + int security_path_unlink(struct path *dir, struct dentry *dentry)
  13.204 + {
  13.205 +@@ -374,6 +376,7 @@ int security_path_unlink(struct path *dir, struct dentry *dentry)
  13.206 + 		return 0;
  13.207 + 	return security_ops->path_unlink(dir, dentry);
  13.208 + }
  13.209 ++EXPORT_SYMBOL(security_path_unlink);
  13.210 + 
  13.211 + int security_path_symlink(struct path *dir, struct dentry *dentry,
  13.212 + 			  const char *old_name)
  13.213 +@@ -382,6 +385,7 @@ int security_path_symlink(struct path *dir, struct dentry *dentry,
  13.214 + 		return 0;
  13.215 + 	return security_ops->path_symlink(dir, dentry, old_name);
  13.216 + }
  13.217 ++EXPORT_SYMBOL(security_path_symlink);
  13.218 + 
  13.219 + int security_path_link(struct dentry *old_dentry, struct path *new_dir,
  13.220 + 		       struct dentry *new_dentry)
  13.221 +@@ -390,6 +394,7 @@ int security_path_link(struct dentry *old_dentry, struct path *new_dir,
  13.222 + 		return 0;
  13.223 + 	return security_ops->path_link(old_dentry, new_dir, new_dentry);
  13.224 + }
  13.225 ++EXPORT_SYMBOL(security_path_link);
  13.226 + 
  13.227 + int security_path_rename(struct path *old_dir, struct dentry *old_dentry,
  13.228 + 			 struct path *new_dir, struct dentry *new_dentry)
  13.229 +@@ -400,6 +405,7 @@ int security_path_rename(struct path *old_dir, struct dentry *old_dentry,
  13.230 + 	return security_ops->path_rename(old_dir, old_dentry, new_dir,
  13.231 + 					 new_dentry);
  13.232 + }
  13.233 ++EXPORT_SYMBOL(security_path_rename);
  13.234 + 
  13.235 + int security_path_truncate(struct path *path)
  13.236 + {
  13.237 +@@ -407,6 +413,7 @@ int security_path_truncate(struct path *path)
  13.238 + 		return 0;
  13.239 + 	return security_ops->path_truncate(path);
  13.240 + }
  13.241 ++EXPORT_SYMBOL(security_path_truncate);
  13.242 + 
  13.243 + int security_path_chmod(struct dentry *dentry, struct vfsmount *mnt,
  13.244 + 			mode_t mode)
  13.245 +@@ -415,6 +422,7 @@ int security_path_chmod(struct dentry *dentry, struct vfsmount *mnt,
  13.246 + 		return 0;
  13.247 + 	return security_ops->path_chmod(dentry, mnt, mode);
  13.248 + }
  13.249 ++EXPORT_SYMBOL(security_path_chmod);
  13.250 + 
  13.251 + int security_path_chown(struct path *path, uid_t uid, gid_t gid)
  13.252 + {
  13.253 +@@ -422,6 +430,7 @@ int security_path_chown(struct path *path, uid_t uid, gid_t gid)
  13.254 + 		return 0;
  13.255 + 	return security_ops->path_chown(path, uid, gid);
  13.256 + }
  13.257 ++EXPORT_SYMBOL(security_path_chown);
  13.258 + 
  13.259 + int security_path_chroot(struct path *path)
  13.260 + {
  13.261 +@@ -498,6 +507,7 @@ int security_inode_readlink(struct dentry *dentry)
  13.262 + 		return 0;
  13.263 + 	return security_ops->inode_readlink(dentry);
  13.264 + }
  13.265 ++EXPORT_SYMBOL(security_inode_readlink);
  13.266 + 
  13.267 + int security_inode_follow_link(struct dentry *dentry, struct nameidata *nd)
  13.268 + {
  13.269 +@@ -512,6 +522,7 @@ int security_inode_permission(struct inode *inode, int mask)
  13.270 + 		return 0;
  13.271 + 	return security_ops->inode_permission(inode, mask);
  13.272 + }
  13.273 ++EXPORT_SYMBOL(security_inode_permission);
  13.274 + 
  13.275 + int security_inode_setattr(struct dentry *dentry, struct iattr *attr)
  13.276 + {
  13.277 +@@ -611,6 +622,7 @@ int security_file_permission(struct file *file, int mask)
  13.278 + 
  13.279 + 	return fsnotify_perm(file, mask);
  13.280 + }
  13.281 ++EXPORT_SYMBOL(security_file_permission);
  13.282 + 
  13.283 + int security_file_alloc(struct file *file)
  13.284 + {
  13.285 +@@ -638,6 +650,7 @@ int security_file_mmap(struct file *file, unsigned long reqprot,
  13.286 + 		return ret;
  13.287 + 	return ima_file_mmap(file, prot);
  13.288 + }
  13.289 ++EXPORT_SYMBOL(security_file_mmap);
  13.290 + 
  13.291 + int security_file_mprotect(struct vm_area_struct *vma, unsigned long reqprot,
  13.292 + 			    unsigned long prot)
    14.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    14.2 +++ b/kernel-modular/stuff/bootloader.sh	Tue Feb 01 09:37:33 2011 +0100
    14.3 @@ -0,0 +1,218 @@
    14.4 +#!/bin/sh
    14.5 +#
    14.6 +# This script creates a floppy image set from a linux bzImage and can merge
    14.7 +# a cmdline and/or one or more initramfs.
    14.8 +# The total size can not exceed 15M because INT 15H function 87H limitations.
    14.9 +#
   14.10 +# (C) 2009 Pascal Bellard - GNU General Public License v3.
   14.11 +
   14.12 +usage()
   14.13 +{
   14.14 +cat <<EOT
   14.15 +Usage: $0 bzImage [--prefix image_prefix] [--cmdline 'args']
   14.16 +       [--rdev device] [--video mode] [--flags rootflags] [--tracks cnt]
   14.17 +       [--format 1440|1680|1920|2880 ] [--initrd initrdfile]...
   14.18 +
   14.19 +Default values: --format 1440 --tracks 80 --prefix floppy.
   14.20 +
   14.21 +Example:
   14.22 +$0 /boot/vmlinuz-2.6.30.6 --rdev /dev/ram0 --video -3 --cmdline 'rw lang=fr_FR kmap=fr-latin1 laptop autologin' --initrd /boot/rootfs.gz --initrd ./myconfig.gz
   14.23 +EOT
   14.24 +exit 1
   14.25 +}
   14.26 +
   14.27 +KERNEL=""
   14.28 +INITRD=""
   14.29 +CMDLINE=""
   14.30 +PREFIX="floppy."
   14.31 +FORMAT="1440"
   14.32 +RDEV=""
   14.33 +VIDEO=""
   14.34 +FLAGS=""
   14.35 +TRACKS=""
   14.36 +DEBUG=""
   14.37 +while [ -n "$1" ]; do
   14.38 +	case "$1" in
   14.39 +	--c*|-c*)  CMDLINE="$2"; shift;;
   14.40 +	--i*|-i*)  INITRD="$INITRD $2"; shift;;
   14.41 +	--p*|-p*)  PREFIX="$2"; shift;;
   14.42 +	--fo*|-f*) FORMAT="$2"; shift;;
   14.43 +	--fl*)     FLAGS="$2"; shift;;	# 1 read-only, 0 read-write
   14.44 +	--r*|-r*)  RDEV="$2"; shift;;	# /dev/???
   14.45 +	--v*|-v*)  VIDEO="$2"; shift;;	# -3 .. n
   14.46 +	--t*|-t*)  TRACKS="$2"; shift;; # likely 81 .. 84
   14.47 +	--debug)   DEBUG="1";;
   14.48 +	*) KERNEL="$1";;
   14.49 +	esac
   14.50 +	shift
   14.51 +done
   14.52 +[ -n "$KERNEL" -a -f "$KERNEL" ] || usage
   14.53 +if [ -n "$TRACKS" ]; then
   14.54 +	if [ $(( $FORMAT % $TRACKS )) -ne 0 ]; then
   14.55 +		echo "Invalid track count for format $FORMAT."
   14.56 +		usage
   14.57 +	fi
   14.58 +fi
   14.59 +
   14.60 +# write a 16 bits data
   14.61 +# usage: store16 offset data16 file
   14.62 +store16()
   14.63 +{
   14.64 +	echo $(( $2 + 0x10000 )) | \
   14.65 +		awk '{ printf "\\\\x%02X\\\\x%02X",$1%256,($1/256)%256 }' | \
   14.66 +		xargs echo -en | \
   14.67 +	dd bs=2 conv=notrunc of=$3 seek=$(( $1 / 2 )) 2> /dev/null
   14.68 +	[ -n "$DEBUG" ] && printf "store16(%04X) = %04X\n" $1 $2 1>&2
   14.69 +}
   14.70 +
   14.71 +# write a 32 bits data
   14.72 +# usage: storelong offset data32 file
   14.73 +storelong()
   14.74 +{
   14.75 +	echo $2 | awk '{ printf "\\\\x%02X\\\\x%02X\\\\x%02X\\\\x%02X",
   14.76 +		 $1%256,($1/256)%256,($1/256/256)%256,($1/256/256/256)%256 }' | \
   14.77 +		xargs echo -en | \
   14.78 +		dd bs=4 conv=notrunc of=$3 seek=$(( $1 / 4 )) 2> /dev/null
   14.79 +	[ -n "$DEBUG" ] && printf "storelong(%04X) = %08X\n" $1 $2 1>&2
   14.80 +}
   14.81 +
   14.82 +# read a 32 bits data
   14.83 +# usage: getlong offset file
   14.84 +getlong()
   14.85 +{
   14.86 +	dd if=$2 bs=1 skip=$(( $1 )) count=4 2> /dev/null | \
   14.87 +		hexdump -e '"" 1/4 "%d" "\n"'
   14.88 +}
   14.89 +
   14.90 +floppyset()
   14.91 +{
   14.92 +	# bzImage offsets
   14.93 +	CylinderCount=496
   14.94 +	SetupSzOfs=497
   14.95 +	FlagsOfs=498
   14.96 +	SyssizeOfs=500
   14.97 +	VideoModeOfs=506
   14.98 +	RootDevOfs=508
   14.99 +	CodeAdrOfs=0x214
  14.100 +	RamfsAdrOfs=0x218
  14.101 +	RamfsLenOfs=0x21C
  14.102 +	ArgPtrOfs=0x228
  14.103 +
  14.104 +	# boot+setup address
  14.105 +	SetupBase=0x90000
  14.106 +
  14.107 +	stacktop=0x9E00
  14.108 +
  14.109 +	bs=/tmp/bs$$
  14.110 +
  14.111 +	# Get and patch boot sector
  14.112 +	# See  http://hg.slitaz.org/wok/raw-file/711d076b277c/linux/stuff/linux-header-2.6.34.u
  14.113 +	dd if=$KERNEL bs=512 count=1 of=$bs 2> /dev/null
  14.114 +	uudecode <<EOT | dd of=$bs conv=notrunc 2> /dev/null
  14.115 +begin-base64 644 -
  14.116 +/L+6nWgAkAcGF4n8McC5HQDzq1sfD6mg8X1ABlfFd3ixBvOlZWaPR3gGH8ZF
  14.117 ++D/6l1hB6DQBvgACA3QO6HYBWwseKAJ0LFNH6AoBXuhmAbAgzRCwCM0QTuhl
  14.118 +ATwIdAOIBK05NigCdPDoPgE8CnXgiHz+ieb/TBD/TBi/9AGBTRz/gMdFMACc
  14.119 +sBCxBUi0k4lEHLABiUQUmGaY0+BIZgMFZtPoaAAQB7+AACn4nHMCAccx21BW
  14.120 +6J4AXrkAgLSH/kQczRVYnXfcoRoCvxwCsQk4RBxyuJPNE+oAACCQsEYoyL7b
  14.121 +AejSAF3rI4D5E3IEOMF3a4D+AnIEOOZ3bGCB/QAGdCoGUlFTlrQCULEGtQTB
  14.122 +xQSwDyHoBJAnFEAn6IwA/s117LAgzRDitOiWAJjNE2FSUCjIdwKwAZg5+HIC
  14.123 +ifhQtALNE5VeWFpyoJVBjuGAxwJPdFFOdfSM4ZU4wXVFiMj+xrEBOOZ1O4j0
  14.124 +/sW2AID9UHIwOi7wAXIqtQBgvt4B/kQMU+gxAFvoOAB1FlKYzRO4AQLNE1rQ
  14.125 +1Dpk/nXqRgjkdeVh64sWB7AxLAO0DrsHAM0QPA1088OwDejv/6wIwHX4w79s
  14.126 +BLFbZQINuA0BZToNdArNFnT0mM0Wju9Hw1g6AEluc2VydCBkaXNrIDEuBw0A
  14.127 +AA==
  14.128 +====
  14.129 +EOT
  14.130 +
  14.131 +	# Get setup
  14.132 +	setupsz=$(getlong $SetupSzOfs $bs)
  14.133 +	setupszb=$(( $setupsz & 255 ))
  14.134 +	dd if=$KERNEL bs=512 skip=1 count=$setupszb 2> /dev/null >> $bs
  14.135 +
  14.136 +	if [ -n "$TRACKS" ]; then
  14.137 +		[ -n "$DEBUG" ] && echo -n "--tracks " 1>&2
  14.138 +		n=$(getlong $CylinderCount $bs)
  14.139 +		store16 $CylinderCount $(( ($n & -256) + $TRACKS )) $bs
  14.140 +	fi
  14.141 +	if [ -n "$FLAGS" ]; then
  14.142 +		[ -n "$DEBUG" ] && echo -n "--flags " 1>&2
  14.143 +		store16 $FlagsOfs $FLAGS $bs
  14.144 +	fi
  14.145 +	if [ -n "$VIDEO" ]; then
  14.146 +		[ -n "$DEBUG" ] && echo -n "--video " 1>&2
  14.147 +		store16 $VideoModeOfs $VIDEO $bs
  14.148 +	fi
  14.149 +	if [ -n "$RDEV" ]; then
  14.150 +		[ -n "$DEBUG" ] && echo -n "--rdev " 1>&2
  14.151 +		n=$(stat -c '0x%02t%02T' $RDEV 2> /dev/null)
  14.152 +		[ -n "$n" ] || n=$RDEV
  14.153 +		store16 $RootDevOfs $n $bs
  14.154 +	fi
  14.155 +
  14.156 +	# Store cmdline after setup
  14.157 +	if [ -n "$CMDLINE" ]; then
  14.158 +		[ -n "$DEBUG" ] && echo -n "--cmdline '$CMDLINE' " 1>&2
  14.159 +		echo -n "$CMDLINE" | dd bs=512 count=1 conv=sync 2> /dev/null >> $bs
  14.160 +		storelong $ArgPtrOfs $(( $SetupBase + $stacktop )) $bs
  14.161 +	fi
  14.162 +
  14.163 +	# Compute initramfs size
  14.164 +	initrdlen=0
  14.165 +	padding=0
  14.166 +	for i in $( echo $INITRD | sed 's/,/ /' ); do
  14.167 +		[ -s "$i" ] || continue
  14.168 +		[ -n "$DEBUG" ] && echo "--initrd $i " 1>&2
  14.169 +		initrdlen=$(( $initrdlen + $padding ))
  14.170 +		padding=$(stat -c %s $i)
  14.171 +		initrdlen=$(( $initrdlen + $padding ))
  14.172 +		padding=$(( 4096 - ($padding & 4095) ))
  14.173 +		[ $padding -eq 4096 ] && padding=0
  14.174 +	done
  14.175 +	Ksize=$(( $(getlong $SyssizeOfs $bs)*16 ))
  14.176 +	Kpad=$(( (($Ksize+4095)/4096)*4096 - Ksize ))
  14.177 +	if [ $initrdlen -ne 0 ]; then
  14.178 +		[ -n "$DEBUG" ] && echo "initrdlen = $initrdlen " 1>&2
  14.179 +		Kbase=$(getlong $CodeAdrOfs $bs)
  14.180 +		storelong $RamfsAdrOfs \
  14.181 +			$(( (0x1000000 - $initrdlen) & 0xFFFF0000 )) $bs
  14.182 +		storelong $RamfsLenOfs $(( ($initrdlen + 3) & -4 )) $bs
  14.183 +	fi
  14.184 +
  14.185 +	# Output boot sector + setup + cmdline
  14.186 +	dd if=$bs 2> /dev/null
  14.187 +
  14.188 +	# Output kernel code
  14.189 +	dd if=$KERNEL bs=512 skip=$(( $setupszb + 1 )) 2> /dev/null
  14.190 +
  14.191 +	# Pad to next sector
  14.192 +	Kpad=$(( 512 - ($(stat -c %s $KERNEL) & 511) ))
  14.193 +	[ $Kpad -eq 512 ] || dd if=/dev/zero bs=1 count=$Kpad 2> /dev/null
  14.194 +
  14.195 +	# Output initramfs
  14.196 +	padding=0
  14.197 +	for i in $( echo $INITRD | sed 's/,/ /' ); do
  14.198 +		[ -s "$i" ] || continue
  14.199 +		[ $padding -ne 0 ] && dd if=/dev/zero bs=1 count=$padding 2> /dev/null
  14.200 +		dd if=$i 2> /dev/null
  14.201 +		padding=$(( 4 - ($(stat -c %s $i) & 3) ))
  14.202 +		[ $padding -eq 4 ] && padding=0
  14.203 +	done
  14.204 +
  14.205 +	# Cleanup
  14.206 +	rm -f $bs
  14.207 +}
  14.208 +
  14.209 +if [ "$FORMAT" == "0" ]; then # unsplitted
  14.210 +	floppyset > $PREFIX
  14.211 +	exit
  14.212 +fi
  14.213 +floppyset | split -b ${FORMAT}k /dev/stdin floppy$$
  14.214 +i=1
  14.215 +ls floppy$$* | while read file ; do
  14.216 +	output=$PREFIX$(printf "%03d" $i)
  14.217 +	cat $file /dev/zero | dd bs=1k count=$FORMAT conv=sync of=$output 2> /dev/null
  14.218 +	echo $output
  14.219 +	rm -f $file
  14.220 +	i=$(( $i + 1 ))
  14.221 +done
    15.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    15.2 +++ b/kernel-modular/stuff/check_modules.sh	Tue Feb 01 09:37:33 2011 +0100
    15.3 @@ -0,0 +1,51 @@
    15.4 +#!/bin/sh
    15.5 +# Echo any module in kernel .config that's not added to one of linux-* pkgs
    15.6 +# (c) SliTaz - GNU General Public License.
    15.7 +# 20090618 <jozee@slitaz.org> 
    15.8 +# 20100528 <pankso@slitaz.org>
    15.9 +#
   15.10 +. /etc/tazwok.conf
   15.11 +VERSION=`grep  ^VERSION= $WOK/linux/receipt | cut -d "=" -f2 | sed -e 's/"//g'`
   15.12 +src="$WOK/linux/linux-$VERSION"
   15.13 +
   15.14 +cd $src
   15.15 +mkdir -p ../stuff/tmp
   15.16 +rm -f ../stuff/tmp/*
   15.17 +
   15.18 +echo -e "\nChecking for modules selected in .config but not in linux-* pkgs"
   15.19 +echo "======================================================================"
   15.20 +
   15.21 +# create a packaged modules list
   15.22 +cat ../stuff/modules-"$VERSION".list >> ../stuff/tmp/pkgs-modules-"$VERSION".list 
   15.23 +
   15.24 +for i in $(cd $WOK; ls -d linux-*)
   15.25 +do
   15.26 +	tazpath="taz/$i-$VERSION"
   15.27 +	for j in $(cat $WOK/$i/$tazpath/files.list | grep ".ko.gz")
   15.28 +	do
   15.29 +		basename $j >> ../stuff/tmp/pkgs-modules-"$VERSION".list	
   15.30 +	done 	
   15.31 +done
   15.32 +# get the original list in .config
   15.33 +for i in $(find $_pkg -iname "*.ko.gz") 
   15.34 +do
   15.35 +	basename $i >> ../stuff/tmp/originial-"$VERSION".list
   15.36 +done
   15.37 +# compare original .config and pkged modules
   15.38 +for i in $(cat ../stuff/tmp/originial-$VERSION.list)   
   15.39 +do		
   15.40 +	if ! grep -qs "$i" ../stuff/tmp/pkgs-modules-"$VERSION".list ; then 
   15.41 +		modpath=`find $_pkg -iname "$i"`
   15.42 +		echo "Orphan module: $i"
   15.43 +		echo "$i : $modpath" >> ../stuff/tmp/unpackaged-modules-"$VERSION".list
   15.44 +	fi
   15.45 +done
   15.46 +if [ -f ../stuff/tmp/unpackaged-modules-"$VERSION".list ]; then
   15.47 +	echo "======================================================================"
   15.48 +	echo -e "Check linux/stuff/tmp/unpackaged-modules-$VERSION.list for mod path\n"
   15.49 +else
   15.50 +	echo -e "\nAll modules are packaged\n"
   15.51 +	echo "======================================================================"
   15.52 +	echo ""
   15.53 +	rm -rf ../stuff/tmp
   15.54 +fi
    16.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    16.2 +++ b/kernel-modular/stuff/gztazmod.sh	Tue Feb 01 09:37:33 2011 +0100
    16.3 @@ -0,0 +1,67 @@
    16.4 +#!/bin/sh
    16.5 +# gztazmod.sh: Compress Linux kernel modules for SliTaz GNU/Linux.
    16.6 +# 2007/10/04 <pankso@slitaz.org> - GNU General Public License.
    16.7 +#
    16.8 +
    16.9 +# We do our work in the kernel version modules directory.
   16.10 +if [ -z "$1" ] ; then
   16.11 +  echo ""
   16.12 +  echo -e "\033[1musage:\033[0m `basename $0` path/to/kernel-version"
   16.13 +  echo ""
   16.14 +  exit 1
   16.15 +fi
   16.16 +
   16.17 +if [ ! -r "$1" ] ; then
   16.18 +  echo ""
   16.19 +  echo -e "Error : $1 does not exist."
   16.20 +  echo ""
   16.21 +  exit 1
   16.22 +fi
   16.23 +
   16.24 +cd $1
   16.25 +
   16.26 +# Status functions.
   16.27 +status()
   16.28 +{
   16.29 +	local CHECK=$?
   16.30 +	echo -en "\\033[70G[ "
   16.31 +	if [ $CHECK = 0 ]; then
   16.32 +		echo -en "\\033[1;33mOK"
   16.33 +	else
   16.34 +		echo -en "\\033[1;31mFailed"
   16.35 +	fi
   16.36 +	echo -e "\\033[0;39m ]"
   16.37 +}
   16.38 +
   16.39 +# Script start.
   16.40 +echo ""
   16.41 +echo "Starting gztazmod.sh to build compressed kernel modules... "
   16.42 +echo ""
   16.43 +
   16.44 +# Find all modules.
   16.45 +echo -n "Searching all modules to compress them... "
   16.46 +find . -name "*.ko" -exec lzma e '{}' '{}'.gz \; 2> /dev/null
   16.47 +status
   16.48 +find . -name "*.ko" -exec rm '{}' \;
   16.49 +
   16.50 +# Build a new temporary modules.dep.
   16.51 +echo -n "Building tmp.dep... "
   16.52 +sed 's/\.ko.gz/.ko/g' modules.dep > tmp.dep
   16.53 +sed -i 's/\.ko.gz/.ko/g' tmp.dep
   16.54 +sed -i 's/\.ko/.ko.gz/g' tmp.dep
   16.55 +status
   16.56 +
   16.57 +# Destroy original modules.dep
   16.58 +echo -n "Destroying modules.dep... "
   16.59 +rm modules.dep
   16.60 +status
   16.61 +
   16.62 +# Remove tmp.dep to modules.dep.
   16.63 +echo -n "Removing tmp.dep to modules.dep... "
   16.64 +mv tmp.dep modules.dep
   16.65 +status
   16.66 +
   16.67 +# Script end.
   16.68 +echo ""
   16.69 +echo "Kernel modules `basename $1` are ready."
   16.70 +echo ""
    17.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    17.2 +++ b/kernel-modular/stuff/linux-2.6.37-slitaz.config-i486-isa	Tue Feb 01 09:37:33 2011 +0100
    17.3 @@ -0,0 +1,923 @@
    17.4 +#
    17.5 +# Automatically generated make config: don't edit
    17.6 +# Linux/i386 2.6.37 Kernel Configuration
    17.7 +# Sun Jan 30 23:08:13 2011
    17.8 +#
    17.9 +# CONFIG_64BIT is not set
   17.10 +CONFIG_X86_32=y
   17.11 +# CONFIG_X86_64 is not set
   17.12 +CONFIG_X86=y
   17.13 +CONFIG_INSTRUCTION_DECODER=y
   17.14 +CONFIG_OUTPUT_FORMAT="elf32-i386"
   17.15 +CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"
   17.16 +CONFIG_GENERIC_CMOS_UPDATE=y
   17.17 +CONFIG_CLOCKSOURCE_WATCHDOG=y
   17.18 +CONFIG_GENERIC_CLOCKEVENTS=y
   17.19 +CONFIG_LOCKDEP_SUPPORT=y
   17.20 +CONFIG_STACKTRACE_SUPPORT=y
   17.21 +CONFIG_HAVE_LATENCYTOP_SUPPORT=y
   17.22 +CONFIG_MMU=y
   17.23 +CONFIG_ZONE_DMA=y
   17.24 +# CONFIG_NEED_DMA_MAP_STATE is not set
   17.25 +CONFIG_NEED_SG_DMA_LENGTH=y
   17.26 +CONFIG_GENERIC_ISA_DMA=y
   17.27 +CONFIG_GENERIC_IOMAP=y
   17.28 +CONFIG_GENERIC_HWEIGHT=y
   17.29 +CONFIG_ARCH_MAY_HAVE_PC_FDC=y
   17.30 +CONFIG_RWSEM_GENERIC_SPINLOCK=y
   17.31 +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
   17.32 +CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
   17.33 +CONFIG_GENERIC_CALIBRATE_DELAY=y
   17.34 +# CONFIG_GENERIC_TIME_VSYSCALL is not set
   17.35 +CONFIG_ARCH_HAS_CPU_RELAX=y
   17.36 +CONFIG_ARCH_HAS_DEFAULT_IDLE=y
   17.37 +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
   17.38 +CONFIG_HAVE_SETUP_PER_CPU_AREA=y
   17.39 +CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
   17.40 +CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
   17.41 +# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set
   17.42 +CONFIG_ARCH_HIBERNATION_POSSIBLE=y
   17.43 +CONFIG_ARCH_SUSPEND_POSSIBLE=y
   17.44 +# CONFIG_ZONE_DMA32 is not set
   17.45 +CONFIG_ARCH_POPULATES_NODE_MAP=y
   17.46 +# CONFIG_AUDIT_ARCH is not set
   17.47 +CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
   17.48 +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
   17.49 +CONFIG_X86_32_LAZY_GS=y
   17.50 +CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-ecx -fcall-saved-edx"
   17.51 +CONFIG_KTIME_SCALAR=y
   17.52 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
   17.53 +CONFIG_CONSTRUCTORS=y
   17.54 +CONFIG_HAVE_IRQ_WORK=y
   17.55 +CONFIG_IRQ_WORK=y
   17.56 +
   17.57 +#
   17.58 +# General setup
   17.59 +#
   17.60 +CONFIG_EXPERIMENTAL=y
   17.61 +CONFIG_BROKEN_ON_SMP=y
   17.62 +CONFIG_INIT_ENV_ARG_LIMIT=32
   17.63 +CONFIG_CROSS_COMPILE=""
   17.64 +CONFIG_LOCALVERSION="-slitaz"
   17.65 +# CONFIG_LOCALVERSION_AUTO is not set
   17.66 +CONFIG_HAVE_KERNEL_GZIP=y
   17.67 +CONFIG_HAVE_KERNEL_BZIP2=y
   17.68 +CONFIG_HAVE_KERNEL_LZMA=y
   17.69 +CONFIG_HAVE_KERNEL_XZ=y
   17.70 +CONFIG_HAVE_KERNEL_LZO=y
   17.71 +# CONFIG_KERNEL_GZIP is not set
   17.72 +# CONFIG_KERNEL_BZIP2 is not set
   17.73 +CONFIG_KERNEL_LZMA=y
   17.74 +# CONFIG_KERNEL_XZ is not set
   17.75 +# CONFIG_KERNEL_LZO is not set
   17.76 +# CONFIG_SWAP is not set
   17.77 +CONFIG_SYSVIPC=y
   17.78 +CONFIG_SYSVIPC_SYSCTL=y
   17.79 +# CONFIG_POSIX_MQUEUE is not set
   17.80 +# CONFIG_BSD_PROCESS_ACCT is not set
   17.81 +# CONFIG_TASKSTATS is not set
   17.82 +# CONFIG_AUDIT is not set
   17.83 +CONFIG_HAVE_GENERIC_HARDIRQS=y
   17.84 +
   17.85 +#
   17.86 +# IRQ subsystem
   17.87 +#
   17.88 +CONFIG_GENERIC_HARDIRQS=y
   17.89 +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
   17.90 +# CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED is not set
   17.91 +CONFIG_HAVE_SPARSE_IRQ=y
   17.92 +CONFIG_GENERIC_IRQ_PROBE=y
   17.93 +# CONFIG_GENERIC_PENDING_IRQ is not set
   17.94 +# CONFIG_AUTO_IRQ_AFFINITY is not set
   17.95 +# CONFIG_IRQ_PER_CPU is not set
   17.96 +# CONFIG_HARDIRQS_SW_RESEND is not set
   17.97 +# CONFIG_SPARSE_IRQ is not set
   17.98 +
   17.99 +#
  17.100 +# RCU Subsystem
  17.101 +#
  17.102 +CONFIG_TINY_RCU=y
  17.103 +# CONFIG_PREEMPT_RCU is not set
  17.104 +# CONFIG_TREE_RCU_TRACE is not set
  17.105 +CONFIG_IKCONFIG=y
  17.106 +CONFIG_IKCONFIG_PROC=y
  17.107 +CONFIG_LOG_BUF_SHIFT=12
  17.108 +CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
  17.109 +# CONFIG_NAMESPACES is not set
  17.110 +# CONFIG_RELAY is not set
  17.111 +CONFIG_BLK_DEV_INITRD=y
  17.112 +CONFIG_INITRAMFS_SOURCE="rootfs.cpio"
  17.113 +CONFIG_INITRAMFS_ROOT_UID=0
  17.114 +CONFIG_INITRAMFS_ROOT_GID=0
  17.115 +CONFIG_RD_GZIP=y
  17.116 +# CONFIG_RD_BZIP2 is not set
  17.117 +CONFIG_RD_LZMA=y
  17.118 +# CONFIG_RD_LZO is not set
  17.119 +CONFIG_INITRAMFS_COMPRESSION_NONE=y
  17.120 +# CONFIG_INITRAMFS_COMPRESSION_GZIP is not set
  17.121 +# CONFIG_INITRAMFS_COMPRESSION_LZMA is not set
  17.122 +CONFIG_CC_OPTIMIZE_FOR_SIZE=y
  17.123 +CONFIG_SYSCTL=y
  17.124 +CONFIG_ANON_INODES=y
  17.125 +CONFIG_EMBEDDED=y
  17.126 +# CONFIG_UID16 is not set
  17.127 +# CONFIG_SYSCTL_SYSCALL is not set
  17.128 +# CONFIG_KALLSYMS is not set
  17.129 +# CONFIG_HOTPLUG is not set
  17.130 +CONFIG_PRINTK=y
  17.131 +# CONFIG_BUG is not set
  17.132 +# CONFIG_ELF_CORE is not set
  17.133 +CONFIG_PCSPKR_PLATFORM=y
  17.134 +# CONFIG_BASE_FULL is not set
  17.135 +CONFIG_FUTEX=y
  17.136 +# CONFIG_EPOLL is not set
  17.137 +# CONFIG_SIGNALFD is not set
  17.138 +# CONFIG_TIMERFD is not set
  17.139 +# CONFIG_EVENTFD is not set
  17.140 +# CONFIG_SHMEM is not set
  17.141 +# CONFIG_AIO is not set
  17.142 +CONFIG_HAVE_PERF_EVENTS=y
  17.143 +
  17.144 +#
  17.145 +# Kernel Performance Events And Counters
  17.146 +#
  17.147 +CONFIG_PERF_EVENTS=y
  17.148 +# CONFIG_PERF_COUNTERS is not set
  17.149 +# CONFIG_VM_EVENT_COUNTERS is not set
  17.150 +CONFIG_COMPAT_BRK=y
  17.151 +# CONFIG_SLAB is not set
  17.152 +# CONFIG_SLUB is not set
  17.153 +CONFIG_SLOB=y
  17.154 +# CONFIG_PROFILING is not set
  17.155 +CONFIG_HAVE_OPROFILE=y
  17.156 +# CONFIG_JUMP_LABEL is not set
  17.157 +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
  17.158 +CONFIG_HAVE_IOREMAP_PROT=y
  17.159 +CONFIG_HAVE_KPROBES=y
  17.160 +CONFIG_HAVE_KRETPROBES=y
  17.161 +CONFIG_HAVE_OPTPROBES=y
  17.162 +CONFIG_HAVE_ARCH_TRACEHOOK=y
  17.163 +CONFIG_HAVE_DMA_ATTRS=y
  17.164 +CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
  17.165 +CONFIG_HAVE_DMA_API_DEBUG=y
  17.166 +CONFIG_HAVE_HW_BREAKPOINT=y
  17.167 +CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y
  17.168 +CONFIG_HAVE_USER_RETURN_NOTIFIER=y
  17.169 +CONFIG_HAVE_PERF_EVENTS_NMI=y
  17.170 +CONFIG_HAVE_ARCH_JUMP_LABEL=y
  17.171 +
  17.172 +#
  17.173 +# GCOV-based kernel profiling
  17.174 +#
  17.175 +CONFIG_HAVE_GENERIC_DMA_COHERENT=y
  17.176 +CONFIG_RT_MUTEXES=y
  17.177 +CONFIG_BASE_SMALL=1
  17.178 +# CONFIG_MODULES is not set
  17.179 +CONFIG_BLOCK=y
  17.180 +# CONFIG_LBDAF is not set
  17.181 +# CONFIG_BLK_DEV_BSG is not set
  17.182 +# CONFIG_BLK_DEV_INTEGRITY is not set
  17.183 +
  17.184 +#
  17.185 +# IO Schedulers
  17.186 +#
  17.187 +CONFIG_IOSCHED_NOOP=y
  17.188 +# CONFIG_IOSCHED_DEADLINE is not set
  17.189 +# CONFIG_IOSCHED_CFQ is not set
  17.190 +CONFIG_DEFAULT_NOOP=y
  17.191 +CONFIG_DEFAULT_IOSCHED="noop"
  17.192 +# CONFIG_INLINE_SPIN_TRYLOCK is not set
  17.193 +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
  17.194 +# CONFIG_INLINE_SPIN_LOCK is not set
  17.195 +# CONFIG_INLINE_SPIN_LOCK_BH is not set
  17.196 +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
  17.197 +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
  17.198 +CONFIG_INLINE_SPIN_UNLOCK=y
  17.199 +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
  17.200 +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
  17.201 +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
  17.202 +# CONFIG_INLINE_READ_TRYLOCK is not set
  17.203 +# CONFIG_INLINE_READ_LOCK is not set
  17.204 +# CONFIG_INLINE_READ_LOCK_BH is not set
  17.205 +# CONFIG_INLINE_READ_LOCK_IRQ is not set
  17.206 +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
  17.207 +CONFIG_INLINE_READ_UNLOCK=y
  17.208 +# CONFIG_INLINE_READ_UNLOCK_BH is not set
  17.209 +CONFIG_INLINE_READ_UNLOCK_IRQ=y
  17.210 +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
  17.211 +# CONFIG_INLINE_WRITE_TRYLOCK is not set
  17.212 +# CONFIG_INLINE_WRITE_LOCK is not set
  17.213 +# CONFIG_INLINE_WRITE_LOCK_BH is not set
  17.214 +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
  17.215 +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
  17.216 +CONFIG_INLINE_WRITE_UNLOCK=y
  17.217 +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
  17.218 +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
  17.219 +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
  17.220 +# CONFIG_MUTEX_SPIN_ON_OWNER is not set
  17.221 +# CONFIG_FREEZER is not set
  17.222 +
  17.223 +#
  17.224 +# Processor type and features
  17.225 +#
  17.226 +# CONFIG_NO_HZ is not set
  17.227 +# CONFIG_HIGH_RES_TIMERS is not set
  17.228 +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
  17.229 +# CONFIG_SMP is not set
  17.230 +# CONFIG_X86_EXTENDED_PLATFORM is not set
  17.231 +CONFIG_SCHED_OMIT_FRAME_POINTER=y
  17.232 +# CONFIG_PARAVIRT_GUEST is not set
  17.233 +CONFIG_NO_BOOTMEM=y
  17.234 +# CONFIG_MEMTEST is not set
  17.235 +CONFIG_M386=y
  17.236 +# CONFIG_M486 is not set
  17.237 +# CONFIG_M586 is not set
  17.238 +# CONFIG_M586TSC is not set
  17.239 +# CONFIG_M586MMX is not set
  17.240 +# CONFIG_M686 is not set
  17.241 +# CONFIG_MPENTIUMII is not set
  17.242 +# CONFIG_MPENTIUMIII is not set
  17.243 +# CONFIG_MPENTIUMM is not set
  17.244 +# CONFIG_MPENTIUM4 is not set
  17.245 +# CONFIG_MK6 is not set
  17.246 +# CONFIG_MK7 is not set
  17.247 +# CONFIG_MK8 is not set
  17.248 +# CONFIG_MCRUSOE is not set
  17.249 +# CONFIG_MEFFICEON is not set
  17.250 +# CONFIG_MWINCHIPC6 is not set
  17.251 +# CONFIG_MWINCHIP3D is not set
  17.252 +# CONFIG_MGEODEGX1 is not set
  17.253 +# CONFIG_MGEODE_LX is not set
  17.254 +# CONFIG_MCYRIXIII is not set
  17.255 +# CONFIG_MVIAC3_2 is not set
  17.256 +# CONFIG_MVIAC7 is not set
  17.257 +# CONFIG_MCORE2 is not set
  17.258 +# CONFIG_MATOM is not set
  17.259 +# CONFIG_X86_GENERIC is not set
  17.260 +CONFIG_X86_CPU=y
  17.261 +CONFIG_X86_INTERNODE_CACHE_SHIFT=4
  17.262 +# CONFIG_X86_CMPXCHG is not set
  17.263 +CONFIG_X86_L1_CACHE_SHIFT=4
  17.264 +# CONFIG_X86_PPRO_FENCE is not set
  17.265 +CONFIG_X86_F00F_BUG=y
  17.266 +CONFIG_X86_INVD_BUG=y
  17.267 +CONFIG_X86_MINIMUM_CPU_FAMILY=3
  17.268 +# CONFIG_PROCESSOR_SELECT is not set
  17.269 +CONFIG_CPU_SUP_INTEL=y
  17.270 +CONFIG_CPU_SUP_CYRIX_32=y
  17.271 +CONFIG_CPU_SUP_AMD=y
  17.272 +CONFIG_CPU_SUP_CENTAUR=y
  17.273 +CONFIG_CPU_SUP_TRANSMETA_32=y
  17.274 +CONFIG_CPU_SUP_UMC_32=y
  17.275 +# CONFIG_HPET_TIMER is not set
  17.276 +# CONFIG_DMI is not set
  17.277 +# CONFIG_IOMMU_HELPER is not set
  17.278 +# CONFIG_IOMMU_API is not set
  17.279 +CONFIG_NR_CPUS=1
  17.280 +# CONFIG_IRQ_TIME_ACCOUNTING is not set
  17.281 +CONFIG_PREEMPT_NONE=y
  17.282 +# CONFIG_PREEMPT_VOLUNTARY is not set
  17.283 +# CONFIG_PREEMPT is not set
  17.284 +# CONFIG_X86_UP_APIC is not set
  17.285 +# CONFIG_X86_MCE is not set
  17.286 +# CONFIG_VM86 is not set
  17.287 +# CONFIG_TOSHIBA is not set
  17.288 +# CONFIG_I8K is not set
  17.289 +# CONFIG_X86_REBOOTFIXUPS is not set
  17.290 +# CONFIG_MICROCODE is not set
  17.291 +# CONFIG_X86_MSR is not set
  17.292 +# CONFIG_X86_CPUID is not set
  17.293 +CONFIG_NOHIGHMEM=y
  17.294 +# CONFIG_HIGHMEM4G is not set
  17.295 +CONFIG_VMSPLIT_3G=y
  17.296 +# CONFIG_VMSPLIT_3G_OPT is not set
  17.297 +# CONFIG_VMSPLIT_2G is not set
  17.298 +# CONFIG_VMSPLIT_2G_OPT is not set
  17.299 +# CONFIG_VMSPLIT_1G is not set
  17.300 +CONFIG_PAGE_OFFSET=0xC0000000
  17.301 +# CONFIG_X86_PAE is not set
  17.302 +# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
  17.303 +# CONFIG_ARCH_DMA_ADDR_T_64BIT is not set
  17.304 +CONFIG_ARCH_FLATMEM_ENABLE=y
  17.305 +CONFIG_ARCH_SPARSEMEM_ENABLE=y
  17.306 +CONFIG_ARCH_SELECT_MEMORY_MODEL=y
  17.307 +CONFIG_ILLEGAL_POINTER_VALUE=0
  17.308 +CONFIG_SELECT_MEMORY_MODEL=y
  17.309 +CONFIG_FLATMEM_MANUAL=y
  17.310 +# CONFIG_SPARSEMEM_MANUAL is not set
  17.311 +CONFIG_FLATMEM=y
  17.312 +CONFIG_FLAT_NODE_MEM_MAP=y
  17.313 +CONFIG_SPARSEMEM_STATIC=y
  17.314 +CONFIG_HAVE_MEMBLOCK=y
  17.315 +CONFIG_PAGEFLAGS_EXTENDED=y
  17.316 +CONFIG_SPLIT_PTLOCK_CPUS=4
  17.317 +# CONFIG_PHYS_ADDR_T_64BIT is not set
  17.318 +CONFIG_ZONE_DMA_FLAG=1
  17.319 +CONFIG_BOUNCE=y
  17.320 +CONFIG_VIRT_TO_BUS=y
  17.321 +# CONFIG_KSM is not set
  17.322 +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
  17.323 +CONFIG_NEED_PER_CPU_KM=y
  17.324 +# CONFIG_X86_CHECK_BIOS_CORRUPTION is not set
  17.325 +CONFIG_X86_RESERVE_LOW=64
  17.326 +CONFIG_MATH_EMULATION=y
  17.327 +# CONFIG_MTRR is not set
  17.328 +# CONFIG_SECCOMP is not set
  17.329 +# CONFIG_CC_STACKPROTECTOR is not set
  17.330 +CONFIG_HZ_100=y
  17.331 +# CONFIG_HZ_250 is not set
  17.332 +# CONFIG_HZ_300 is not set
  17.333 +# CONFIG_HZ_1000 is not set
  17.334 +CONFIG_HZ=100
  17.335 +# CONFIG_SCHED_HRTICK is not set
  17.336 +# CONFIG_KEXEC is not set
  17.337 +CONFIG_PHYSICAL_START=0x100000
  17.338 +# CONFIG_RELOCATABLE is not set
  17.339 +CONFIG_PHYSICAL_ALIGN=0x100000
  17.340 +# CONFIG_COMPAT_VDSO is not set
  17.341 +# CONFIG_CMDLINE_BOOL is not set
  17.342 +
  17.343 +#
  17.344 +# Power management and ACPI options
  17.345 +#
  17.346 +# CONFIG_PM is not set
  17.347 +# CONFIG_SFI is not set
  17.348 +
  17.349 +#
  17.350 +# CPU Frequency scaling
  17.351 +#
  17.352 +# CONFIG_CPU_FREQ is not set
  17.353 +# CONFIG_CPU_IDLE is not set
  17.354 +
  17.355 +#
  17.356 +# Bus options (PCI etc.)
  17.357 +#
  17.358 +# CONFIG_PCI is not set
  17.359 +# CONFIG_ARCH_SUPPORTS_MSI is not set
  17.360 +CONFIG_ISA_DMA_API=y
  17.361 +CONFIG_ISA=y
  17.362 +# CONFIG_EISA is not set
  17.363 +# CONFIG_MCA is not set
  17.364 +# CONFIG_SCx200 is not set
  17.365 +# CONFIG_OLPC is not set
  17.366 +# CONFIG_OLPC_OPENFIRMWARE is not set
  17.367 +
  17.368 +#
  17.369 +# Executable file formats / Emulations
  17.370 +#
  17.371 +CONFIG_BINFMT_ELF=y
  17.372 +CONFIG_HAVE_AOUT=y
  17.373 +# CONFIG_BINFMT_AOUT is not set
  17.374 +# CONFIG_BINFMT_MISC is not set
  17.375 +CONFIG_HAVE_ATOMIC_IOMAP=y
  17.376 +CONFIG_HAVE_TEXT_POKE_SMP=y
  17.377 +CONFIG_NET=y
  17.378 +
  17.379 +#
  17.380 +# Networking options
  17.381 +#
  17.382 +CONFIG_PACKET=y
  17.383 +CONFIG_UNIX=y
  17.384 +# CONFIG_NET_KEY is not set
  17.385 +CONFIG_INET=y
  17.386 +# CONFIG_IP_MULTICAST is not set
  17.387 +# CONFIG_IP_ADVANCED_ROUTER is not set
  17.388 +CONFIG_IP_FIB_HASH=y
  17.389 +# CONFIG_IP_PNP is not set
  17.390 +# CONFIG_NET_IPIP is not set
  17.391 +# CONFIG_NET_IPGRE_DEMUX is not set
  17.392 +# CONFIG_ARPD is not set
  17.393 +# CONFIG_SYN_COOKIES is not set
  17.394 +# CONFIG_INET_AH is not set
  17.395 +# CONFIG_INET_ESP is not set
  17.396 +# CONFIG_INET_IPCOMP is not set
  17.397 +# CONFIG_INET_XFRM_TUNNEL is not set
  17.398 +# CONFIG_INET_TUNNEL is not set
  17.399 +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
  17.400 +# CONFIG_INET_XFRM_MODE_TUNNEL is not set
  17.401 +# CONFIG_INET_XFRM_MODE_BEET is not set
  17.402 +# CONFIG_INET_LRO is not set
  17.403 +# CONFIG_INET_DIAG is not set
  17.404 +# CONFIG_TCP_CONG_ADVANCED is not set
  17.405 +CONFIG_TCP_CONG_CUBIC=y
  17.406 +CONFIG_DEFAULT_TCP_CONG="cubic"
  17.407 +# CONFIG_TCP_MD5SIG is not set
  17.408 +# CONFIG_IPV6 is not set
  17.409 +# CONFIG_NETWORK_SECMARK is not set
  17.410 +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
  17.411 +# CONFIG_NETFILTER is not set
  17.412 +# CONFIG_IP_DCCP is not set
  17.413 +# CONFIG_IP_SCTP is not set
  17.414 +# CONFIG_RDS is not set
  17.415 +# CONFIG_TIPC is not set
  17.416 +# CONFIG_ATM is not set
  17.417 +# CONFIG_L2TP is not set
  17.418 +# CONFIG_BRIDGE is not set
  17.419 +# CONFIG_NET_DSA is not set
  17.420 +# CONFIG_VLAN_8021Q is not set
  17.421 +# CONFIG_DECNET is not set
  17.422 +# CONFIG_LLC2 is not set
  17.423 +# CONFIG_IPX is not set
  17.424 +# CONFIG_ATALK is not set
  17.425 +# CONFIG_X25 is not set
  17.426 +# CONFIG_LAPB is not set
  17.427 +# CONFIG_ECONET is not set
  17.428 +# CONFIG_WAN_ROUTER is not set
  17.429 +# CONFIG_PHONET is not set
  17.430 +# CONFIG_IEEE802154 is not set
  17.431 +# CONFIG_NET_SCHED is not set
  17.432 +# CONFIG_DCB is not set
  17.433 +
  17.434 +#
  17.435 +# Network testing
  17.436 +#
  17.437 +# CONFIG_NET_PKTGEN is not set
  17.438 +# CONFIG_HAMRADIO is not set
  17.439 +# CONFIG_CAN is not set
  17.440 +# CONFIG_IRDA is not set
  17.441 +# CONFIG_BT is not set
  17.442 +# CONFIG_AF_RXRPC is not set
  17.443 +# CONFIG_WIRELESS is not set
  17.444 +# CONFIG_WIMAX is not set
  17.445 +# CONFIG_RFKILL is not set
  17.446 +# CONFIG_NET_9P is not set
  17.447 +# CONFIG_CAIF is not set
  17.448 +# CONFIG_CEPH_LIB is not set
  17.449 +
  17.450 +#
  17.451 +# Device Drivers
  17.452 +#
  17.453 +
  17.454 +#
  17.455 +# Generic Driver Options
  17.456 +#
  17.457 +CONFIG_STANDALONE=y
  17.458 +CONFIG_PREVENT_FIRMWARE_BUILD=y
  17.459 +CONFIG_FW_LOADER=y
  17.460 +CONFIG_FIRMWARE_IN_KERNEL=y
  17.461 +CONFIG_EXTRA_FIRMWARE=""
  17.462 +# CONFIG_SYS_HYPERVISOR is not set
  17.463 +# CONFIG_CONNECTOR is not set
  17.464 +# CONFIG_MTD is not set
  17.465 +# CONFIG_PARPORT is not set
  17.466 +# CONFIG_PNP is not set
  17.467 +CONFIG_BLK_DEV=y
  17.468 +CONFIG_BLK_DEV_FD=y
  17.469 +# CONFIG_BLK_DEV_XD is not set
  17.470 +# CONFIG_BLK_DEV_COW_COMMON is not set
  17.471 +# CONFIG_BLK_DEV_LOOP is not set
  17.472 +
  17.473 +#
  17.474 +# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
  17.475 +#
  17.476 +# CONFIG_BLK_DEV_NBD is not set
  17.477 +# CONFIG_BLK_DEV_RAM is not set
  17.478 +# CONFIG_CDROM_PKTCDVD is not set
  17.479 +# CONFIG_ATA_OVER_ETH is not set
  17.480 +# CONFIG_BLK_DEV_HD is not set
  17.481 +# CONFIG_BLK_DEV_RBD is not set
  17.482 +# CONFIG_MISC_DEVICES is not set
  17.483 +CONFIG_HAVE_IDE=y
  17.484 +CONFIG_IDE=y
  17.485 +
  17.486 +#
  17.487 +# Please see Documentation/ide/ide.txt for help/info on IDE drives
  17.488 +#
  17.489 +# CONFIG_BLK_DEV_IDE_SATA is not set
  17.490 +# CONFIG_IDE_GD is not set
  17.491 +# CONFIG_BLK_DEV_IDECD is not set
  17.492 +# CONFIG_BLK_DEV_IDETAPE is not set
  17.493 +# CONFIG_IDE_TASK_IOCTL is not set
  17.494 +# CONFIG_IDE_PROC_FS is not set
  17.495 +
  17.496 +#
  17.497 +# IDE chipset support/bugfixes
  17.498 +#
  17.499 +CONFIG_IDE_GENERIC=y
  17.500 +# CONFIG_BLK_DEV_PLATFORM is not set
  17.501 +# CONFIG_BLK_DEV_CMD640 is not set
  17.502 +
  17.503 +#
  17.504 +# Other IDE chipsets support
  17.505 +#
  17.506 +
  17.507 +#
  17.508 +# Note: most of these also require special kernel boot parameters
  17.509 +#
  17.510 +# CONFIG_BLK_DEV_4DRIVES is not set
  17.511 +# CONFIG_BLK_DEV_ALI14XX is not set
  17.512 +# CONFIG_BLK_DEV_DTC2278 is not set
  17.513 +# CONFIG_BLK_DEV_HT6560B is not set
  17.514 +# CONFIG_BLK_DEV_QD65XX is not set
  17.515 +# CONFIG_BLK_DEV_UMC8672 is not set
  17.516 +# CONFIG_BLK_DEV_IDEDMA is not set
  17.517 +
  17.518 +#
  17.519 +# SCSI device support
  17.520 +#
  17.521 +CONFIG_SCSI_MOD=y
  17.522 +# CONFIG_RAID_ATTRS is not set
  17.523 +# CONFIG_SCSI is not set
  17.524 +# CONFIG_SCSI_DMA is not set
  17.525 +# CONFIG_SCSI_NETLINK is not set
  17.526 +# CONFIG_ATA is not set
  17.527 +# CONFIG_MD is not set
  17.528 +# CONFIG_MACINTOSH_DRIVERS is not set
  17.529 +CONFIG_NETDEVICES=y
  17.530 +# CONFIG_DUMMY is not set
  17.531 +# CONFIG_BONDING is not set
  17.532 +# CONFIG_MACVLAN is not set
  17.533 +# CONFIG_EQUALIZER is not set
  17.534 +# CONFIG_TUN is not set
  17.535 +# CONFIG_VETH is not set
  17.536 +# CONFIG_ARCNET is not set
  17.537 +# CONFIG_MII is not set
  17.538 +# CONFIG_PHYLIB is not set
  17.539 +CONFIG_NET_ETHERNET=y
  17.540 +CONFIG_NET_VENDOR_3COM=y
  17.541 +# CONFIG_EL1 is not set
  17.542 +# CONFIG_EL2 is not set
  17.543 +# CONFIG_ELPLUS is not set
  17.544 +# CONFIG_EL16 is not set
  17.545 +CONFIG_EL3=y
  17.546 +# CONFIG_3C515 is not set
  17.547 +# CONFIG_LANCE is not set
  17.548 +# CONFIG_NET_VENDOR_SMC is not set
  17.549 +# CONFIG_ETHOC is not set
  17.550 +# CONFIG_NET_VENDOR_RACAL is not set
  17.551 +# CONFIG_DNET is not set
  17.552 +# CONFIG_AT1700 is not set
  17.553 +# CONFIG_DEPCA is not set
  17.554 +# CONFIG_HP100 is not set
  17.555 +CONFIG_NET_ISA=y
  17.556 +# CONFIG_E2100 is not set
  17.557 +# CONFIG_EWRK3 is not set
  17.558 +# CONFIG_EEXPRESS is not set
  17.559 +# CONFIG_EEXPRESS_PRO is not set
  17.560 +# CONFIG_HPLAN_PLUS is not set
  17.561 +# CONFIG_HPLAN is not set
  17.562 +# CONFIG_LP486E is not set
  17.563 +# CONFIG_ETH16I is not set
  17.564 +CONFIG_NE2000=y
  17.565 +# CONFIG_ZNET is not set
  17.566 +# CONFIG_SEEQ8005 is not set
  17.567 +# CONFIG_IBM_NEW_EMAC_ZMII is not set
  17.568 +# CONFIG_IBM_NEW_EMAC_RGMII is not set
  17.569 +# CONFIG_IBM_NEW_EMAC_TAH is not set
  17.570 +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
  17.571 +# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
  17.572 +# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
  17.573 +# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
  17.574 +# CONFIG_NET_PCI is not set
  17.575 +# CONFIG_B44 is not set
  17.576 +# CONFIG_CS89x0 is not set
  17.577 +# CONFIG_KS8851_MLL is not set
  17.578 +# CONFIG_NETDEV_1000 is not set
  17.579 +# CONFIG_NETDEV_10000 is not set
  17.580 +# CONFIG_TR is not set
  17.581 +# CONFIG_WLAN is not set
  17.582 +
  17.583 +#
  17.584 +# Enable WiMAX (Networking options) to see the WiMAX drivers
  17.585 +#
  17.586 +# CONFIG_WAN is not set
  17.587 +
  17.588 +#
  17.589 +# CAIF transport drivers
  17.590 +#
  17.591 +CONFIG_PPP=y
  17.592 +# CONFIG_PPP_MULTILINK is not set
  17.593 +# CONFIG_PPP_FILTER is not set
  17.594 +CONFIG_PPP_ASYNC=y
  17.595 +# CONFIG_PPP_SYNC_TTY is not set
  17.596 +CONFIG_PPP_DEFLATE=y
  17.597 +# CONFIG_PPP_BSDCOMP is not set
  17.598 +# CONFIG_PPP_MPPE is not set
  17.599 +CONFIG_PPPOE=y
  17.600 +# CONFIG_SLIP is not set
  17.601 +CONFIG_SLHC=y
  17.602 +# CONFIG_NETCONSOLE is not set
  17.603 +# CONFIG_NETPOLL is not set
  17.604 +# CONFIG_NET_POLL_CONTROLLER is not set
  17.605 +# CONFIG_ISDN is not set
  17.606 +# CONFIG_PHONE is not set
  17.607 +
  17.608 +#
  17.609 +# Input device support
  17.610 +#
  17.611 +CONFIG_INPUT=y
  17.612 +# CONFIG_INPUT_FF_MEMLESS is not set
  17.613 +# CONFIG_INPUT_POLLDEV is not set
  17.614 +# CONFIG_INPUT_SPARSEKMAP is not set
  17.615 +
  17.616 +#
  17.617 +# Userland interfaces
  17.618 +#
  17.619 +# CONFIG_INPUT_MOUSEDEV is not set
  17.620 +# CONFIG_INPUT_JOYDEV is not set
  17.621 +# CONFIG_INPUT_EVDEV is not set
  17.622 +# CONFIG_INPUT_EVBUG is not set
  17.623 +
  17.624 +#
  17.625 +# Input Device Drivers
  17.626 +#
  17.627 +CONFIG_INPUT_KEYBOARD=y
  17.628 +CONFIG_KEYBOARD_ATKBD=y
  17.629 +# CONFIG_KEYBOARD_LKKBD is not set
  17.630 +# CONFIG_KEYBOARD_NEWTON is not set
  17.631 +# CONFIG_KEYBOARD_OPENCORES is not set
  17.632 +# CONFIG_KEYBOARD_STOWAWAY is not set
  17.633 +# CONFIG_KEYBOARD_SUNKBD is not set
  17.634 +# CONFIG_KEYBOARD_XTKBD is not set
  17.635 +# CONFIG_INPUT_MOUSE is not set
  17.636 +# CONFIG_INPUT_JOYSTICK is not set
  17.637 +# CONFIG_INPUT_TABLET is not set
  17.638 +# CONFIG_INPUT_TOUCHSCREEN is not set
  17.639 +# CONFIG_INPUT_MISC is not set
  17.640 +
  17.641 +#
  17.642 +# Hardware I/O ports
  17.643 +#
  17.644 +CONFIG_SERIO=y
  17.645 +CONFIG_SERIO_I8042=y
  17.646 +# CONFIG_SERIO_SERPORT is not set
  17.647 +# CONFIG_SERIO_CT82C710 is not set
  17.648 +CONFIG_SERIO_LIBPS2=y
  17.649 +# CONFIG_SERIO_RAW is not set
  17.650 +# CONFIG_SERIO_ALTERA_PS2 is not set
  17.651 +# CONFIG_SERIO_PS2MULT is not set
  17.652 +# CONFIG_GAMEPORT is not set
  17.653 +
  17.654 +#
  17.655 +# Character devices
  17.656 +#
  17.657 +CONFIG_VT=y
  17.658 +CONFIG_CONSOLE_TRANSLATIONS=y
  17.659 +CONFIG_VT_CONSOLE=y
  17.660 +CONFIG_HW_CONSOLE=y
  17.661 +# CONFIG_VT_HW_CONSOLE_BINDING is not set
  17.662 +# CONFIG_DEVKMEM is not set
  17.663 +# CONFIG_SERIAL_NONSTANDARD is not set
  17.664 +# CONFIG_N_GSM is not set
  17.665 +
  17.666 +#
  17.667 +# Serial drivers
  17.668 +#
  17.669 +CONFIG_SERIAL_8250=y
  17.670 +# CONFIG_SERIAL_8250_CONSOLE is not set
  17.671 +CONFIG_FIX_EARLYCON_MEM=y
  17.672 +CONFIG_SERIAL_8250_NR_UARTS=2
  17.673 +CONFIG_SERIAL_8250_RUNTIME_UARTS=2
  17.674 +# CONFIG_SERIAL_8250_EXTENDED is not set
  17.675 +
  17.676 +#
  17.677 +# Non-8250 serial port support
  17.678 +#
  17.679 +CONFIG_SERIAL_CORE=y
  17.680 +# CONFIG_SERIAL_TIMBERDALE is not set
  17.681 +# CONFIG_SERIAL_ALTERA_JTAGUART is not set
  17.682 +# CONFIG_SERIAL_ALTERA_UART is not set
  17.683 +CONFIG_UNIX98_PTYS=y
  17.684 +# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
  17.685 +# CONFIG_LEGACY_PTYS is not set
  17.686 +# CONFIG_TTY_PRINTK is not set
  17.687 +# CONFIG_IPMI_HANDLER is not set
  17.688 +# CONFIG_HW_RANDOM is not set
  17.689 +# CONFIG_NVRAM is not set
  17.690 +# CONFIG_RTC is not set
  17.691 +# CONFIG_GEN_RTC is not set
  17.692 +# CONFIG_DTLK is not set
  17.693 +# CONFIG_R3964 is not set
  17.694 +# CONFIG_MWAVE is not set
  17.695 +# CONFIG_PC8736x_GPIO is not set
  17.696 +# CONFIG_NSC_GPIO is not set
  17.697 +# CONFIG_CS5535_GPIO is not set
  17.698 +# CONFIG_RAW_DRIVER is not set
  17.699 +# CONFIG_HANGCHECK_TIMER is not set
  17.700 +# CONFIG_TCG_TPM is not set
  17.701 +# CONFIG_TELCLOCK is not set
  17.702 +CONFIG_DEVPORT=y
  17.703 +# CONFIG_RAMOOPS is not set
  17.704 +# CONFIG_I2C is not set
  17.705 +# CONFIG_SPI is not set
  17.706 +
  17.707 +#
  17.708 +# PPS support
  17.709 +#
  17.710 +# CONFIG_PPS is not set
  17.711 +CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
  17.712 +# CONFIG_GPIOLIB is not set
  17.713 +# CONFIG_W1 is not set
  17.714 +# CONFIG_POWER_SUPPLY is not set
  17.715 +# CONFIG_HWMON is not set
  17.716 +# CONFIG_THERMAL is not set
  17.717 +# CONFIG_WATCHDOG is not set
  17.718 +CONFIG_SSB_POSSIBLE=y
  17.719 +
  17.720 +#
  17.721 +# Sonics Silicon Backplane
  17.722 +#
  17.723 +# CONFIG_SSB is not set
  17.724 +# CONFIG_MFD_SUPPORT is not set
  17.725 +# CONFIG_REGULATOR is not set
  17.726 +# CONFIG_MEDIA_SUPPORT is not set
  17.727 +
  17.728 +#
  17.729 +# Graphics support
  17.730 +#
  17.731 +# CONFIG_DRM is not set
  17.732 +# CONFIG_VGASTATE is not set
  17.733 +# CONFIG_VIDEO_OUTPUT_CONTROL is not set
  17.734 +# CONFIG_FB is not set
  17.735 +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
  17.736 +
  17.737 +#
  17.738 +# Display device support
  17.739 +#
  17.740 +# CONFIG_DISPLAY_SUPPORT is not set
  17.741 +
  17.742 +#
  17.743 +# Console display driver support
  17.744 +#
  17.745 +CONFIG_VGA_CONSOLE=y
  17.746 +# CONFIG_VGACON_SOFT_SCROLLBACK is not set
  17.747 +# CONFIG_MDA_CONSOLE is not set
  17.748 +CONFIG_DUMMY_CONSOLE=y
  17.749 +# CONFIG_SOUND is not set
  17.750 +# CONFIG_HID_SUPPORT is not set
  17.751 +# CONFIG_USB_SUPPORT is not set
  17.752 +# CONFIG_MMC is not set
  17.753 +# CONFIG_MEMSTICK is not set
  17.754 +# CONFIG_NEW_LEDS is not set
  17.755 +# CONFIG_ACCESSIBILITY is not set
  17.756 +# CONFIG_EDAC is not set
  17.757 +# CONFIG_RTC_CLASS is not set
  17.758 +# CONFIG_DMADEVICES is not set
  17.759 +# CONFIG_AUXDISPLAY is not set
  17.760 +# CONFIG_UIO is not set
  17.761 +# CONFIG_STAGING is not set
  17.762 +# CONFIG_X86_PLATFORM_DEVICES is not set
  17.763 +
  17.764 +#
  17.765 +# Firmware Drivers
  17.766 +#
  17.767 +# CONFIG_EDD is not set
  17.768 +# CONFIG_FIRMWARE_MEMMAP is not set
  17.769 +# CONFIG_DELL_RBU is not set
  17.770 +# CONFIG_DCDBAS is not set
  17.771 +# CONFIG_ISCSI_IBFT_FIND is not set
  17.772 +
  17.773 +#
  17.774 +# File systems
  17.775 +#
  17.776 +# CONFIG_EXT2_FS is not set
  17.777 +CONFIG_EXT3_FS=y
  17.778 +# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
  17.779 +# CONFIG_EXT3_FS_XATTR is not set
  17.780 +# CONFIG_EXT4_FS is not set
  17.781 +CONFIG_JBD=y
  17.782 +# CONFIG_REISERFS_FS is not set
  17.783 +# CONFIG_JFS_FS is not set
  17.784 +# CONFIG_FS_POSIX_ACL is not set
  17.785 +# CONFIG_XFS_FS is not set
  17.786 +# CONFIG_BTRFS_FS is not set
  17.787 +# CONFIG_NILFS2_FS is not set
  17.788 +# CONFIG_FILE_LOCKING is not set
  17.789 +# CONFIG_FSNOTIFY is not set
  17.790 +# CONFIG_DNOTIFY is not set
  17.791 +# CONFIG_INOTIFY_USER is not set
  17.792 +# CONFIG_FANOTIFY is not set
  17.793 +# CONFIG_QUOTA is not set
  17.794 +# CONFIG_QUOTACTL is not set
  17.795 +# CONFIG_AUTOFS4_FS is not set
  17.796 +# CONFIG_FUSE_FS is not set
  17.797 +
  17.798 +#
  17.799 +# Caches
  17.800 +#
  17.801 +# CONFIG_FSCACHE is not set
  17.802 +
  17.803 +#
  17.804 +# CD-ROM/DVD Filesystems
  17.805 +#
  17.806 +# CONFIG_ISO9660_FS is not set
  17.807 +# CONFIG_UDF_FS is not set
  17.808 +
  17.809 +#
  17.810 +# DOS/FAT/NT Filesystems
  17.811 +#
  17.812 +# CONFIG_MSDOS_FS is not set
  17.813 +# CONFIG_VFAT_FS is not set
  17.814 +# CONFIG_NTFS_FS is not set
  17.815 +
  17.816 +#
  17.817 +# Pseudo filesystems
  17.818 +#
  17.819 +CONFIG_PROC_FS=y
  17.820 +# CONFIG_PROC_KCORE is not set
  17.821 +CONFIG_PROC_SYSCTL=y
  17.822 +# CONFIG_PROC_PAGE_MONITOR is not set
  17.823 +# CONFIG_SYSFS is not set
  17.824 +# CONFIG_HUGETLBFS is not set
  17.825 +# CONFIG_HUGETLB_PAGE is not set
  17.826 +# CONFIG_MISC_FILESYSTEMS is not set
  17.827 +# CONFIG_NETWORK_FILESYSTEMS is not set
  17.828 +
  17.829 +#
  17.830 +# Partition Types
  17.831 +#
  17.832 +# CONFIG_PARTITION_ADVANCED is not set
  17.833 +CONFIG_MSDOS_PARTITION=y
  17.834 +# CONFIG_NLS is not set
  17.835 +
  17.836 +#
  17.837 +# Kernel hacking
  17.838 +#
  17.839 +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
  17.840 +# CONFIG_PRINTK_TIME is not set
  17.841 +# CONFIG_ENABLE_WARN_DEPRECATED is not set
  17.842 +# CONFIG_ENABLE_MUST_CHECK is not set
  17.843 +CONFIG_FRAME_WARN=1024
  17.844 +# CONFIG_MAGIC_SYSRQ is not set
  17.845 +# CONFIG_STRIP_ASM_SYMS is not set
  17.846 +# CONFIG_UNUSED_SYMBOLS is not set
  17.847 +# CONFIG_DEBUG_FS is not set
  17.848 +# CONFIG_HEADERS_CHECK is not set
  17.849 +# CONFIG_DEBUG_KERNEL is not set
  17.850 +# CONFIG_HARDLOCKUP_DETECTOR is not set
  17.851 +CONFIG_BKL=y
  17.852 +# CONFIG_SPARSE_RCU_POINTER is not set
  17.853 +# CONFIG_DEBUG_MEMORY_INIT is not set
  17.854 +CONFIG_ARCH_WANT_FRAME_POINTERS=y
  17.855 +# CONFIG_FRAME_POINTER is not set
  17.856 +# CONFIG_SYSCTL_SYSCALL_CHECK is not set
  17.857 +CONFIG_USER_STACKTRACE_SUPPORT=y
  17.858 +CONFIG_HAVE_FUNCTION_TRACER=y
  17.859 +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
  17.860 +CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y
  17.861 +CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
  17.862 +CONFIG_HAVE_DYNAMIC_FTRACE=y
  17.863 +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
  17.864 +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
  17.865 +CONFIG_HAVE_C_RECORDMCOUNT=y
  17.866 +CONFIG_TRACING_SUPPORT=y
  17.867 +# CONFIG_FTRACE is not set
  17.868 +# CONFIG_DMA_API_DEBUG is not set
  17.869 +# CONFIG_ATOMIC64_SELFTEST is not set
  17.870 +# CONFIG_SAMPLES is not set
  17.871 +CONFIG_HAVE_ARCH_KGDB=y
  17.872 +CONFIG_HAVE_ARCH_KMEMCHECK=y
  17.873 +# CONFIG_STRICT_DEVMEM is not set
  17.874 +# CONFIG_X86_VERBOSE_BOOTUP is not set
  17.875 +# CONFIG_EARLY_PRINTK is not set
  17.876 +# CONFIG_DOUBLEFAULT is not set
  17.877 +# CONFIG_IOMMU_STRESS is not set
  17.878 +CONFIG_HAVE_MMIOTRACE_SUPPORT=y
  17.879 +CONFIG_IO_DELAY_TYPE_0X80=0
  17.880 +CONFIG_IO_DELAY_TYPE_0XED=1
  17.881 +CONFIG_IO_DELAY_TYPE_UDELAY=2
  17.882 +CONFIG_IO_DELAY_TYPE_NONE=3
  17.883 +CONFIG_IO_DELAY_0X80=y
  17.884 +# CONFIG_IO_DELAY_0XED is not set
  17.885 +# CONFIG_IO_DELAY_UDELAY is not set
  17.886 +# CONFIG_IO_DELAY_NONE is not set
  17.887 +CONFIG_DEFAULT_IO_DELAY_TYPE=0
  17.888 +CONFIG_OPTIMIZE_INLINING=y
  17.889 +
  17.890 +#
  17.891 +# Security options
  17.892 +#
  17.893 +# CONFIG_KEYS is not set
  17.894 +# CONFIG_SECURITY_DMESG_RESTRICT is not set
  17.895 +# CONFIG_SECURITYFS is not set
  17.896 +CONFIG_DEFAULT_SECURITY_DAC=y
  17.897 +CONFIG_DEFAULT_SECURITY=""
  17.898 +# CONFIG_CRYPTO is not set
  17.899 +CONFIG_HAVE_KVM=y
  17.900 +# CONFIG_VIRTUALIZATION is not set
  17.901 +# CONFIG_BINARY_PRINTF is not set
  17.902 +
  17.903 +#
  17.904 +# Library routines
  17.905 +#
  17.906 +CONFIG_BITREVERSE=y
  17.907 +CONFIG_GENERIC_FIND_FIRST_BIT=y
  17.908 +CONFIG_GENERIC_FIND_NEXT_BIT=y
  17.909 +CONFIG_GENERIC_FIND_LAST_BIT=y
  17.910 +CONFIG_CRC_CCITT=y
  17.911 +# CONFIG_CRC16 is not set
  17.912 +# CONFIG_CRC_T10DIF is not set
  17.913 +# CONFIG_CRC_ITU_T is not set
  17.914 +CONFIG_CRC32=y
  17.915 +# CONFIG_CRC7 is not set
  17.916 +# CONFIG_LIBCRC32C is not set
  17.917 +CONFIG_ZLIB_INFLATE=y
  17.918 +CONFIG_ZLIB_DEFLATE=y
  17.919 +# CONFIG_XZ_DEC is not set
  17.920 +# CONFIG_XZ_DEC_BCJ is not set
  17.921 +CONFIG_DECOMPRESS_GZIP=y
  17.922 +CONFIG_DECOMPRESS_LZMA=y
  17.923 +CONFIG_HAS_IOMEM=y
  17.924 +CONFIG_HAS_IOPORT=y
  17.925 +CONFIG_HAS_DMA=y
  17.926 +CONFIG_NLATTR=y
    18.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    18.2 +++ b/kernel-modular/stuff/linux-2.6.37-slitaz.config-i486-lguest	Tue Feb 01 09:37:33 2011 +0100
    18.3 @@ -0,0 +1,858 @@
    18.4 +#
    18.5 +# Automatically generated make config: don't edit
    18.6 +# Linux/i386 2.6.37 Kernel Configuration
    18.7 +# Sun Jan 30 23:06:32 2011
    18.8 +#
    18.9 +# CONFIG_64BIT is not set
   18.10 +CONFIG_X86_32=y
   18.11 +# CONFIG_X86_64 is not set
   18.12 +CONFIG_X86=y
   18.13 +CONFIG_INSTRUCTION_DECODER=y
   18.14 +CONFIG_OUTPUT_FORMAT="elf32-i386"
   18.15 +CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"
   18.16 +CONFIG_GENERIC_CMOS_UPDATE=y
   18.17 +CONFIG_CLOCKSOURCE_WATCHDOG=y
   18.18 +CONFIG_GENERIC_CLOCKEVENTS=y
   18.19 +CONFIG_LOCKDEP_SUPPORT=y
   18.20 +CONFIG_STACKTRACE_SUPPORT=y
   18.21 +CONFIG_HAVE_LATENCYTOP_SUPPORT=y
   18.22 +CONFIG_MMU=y
   18.23 +CONFIG_ZONE_DMA=y
   18.24 +# CONFIG_NEED_DMA_MAP_STATE is not set
   18.25 +CONFIG_NEED_SG_DMA_LENGTH=y
   18.26 +CONFIG_GENERIC_ISA_DMA=y
   18.27 +CONFIG_GENERIC_IOMAP=y
   18.28 +CONFIG_GENERIC_HWEIGHT=y
   18.29 +CONFIG_ARCH_MAY_HAVE_PC_FDC=y
   18.30 +# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
   18.31 +CONFIG_RWSEM_XCHGADD_ALGORITHM=y
   18.32 +CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
   18.33 +CONFIG_GENERIC_CALIBRATE_DELAY=y
   18.34 +# CONFIG_GENERIC_TIME_VSYSCALL is not set
   18.35 +CONFIG_ARCH_HAS_CPU_RELAX=y
   18.36 +CONFIG_ARCH_HAS_DEFAULT_IDLE=y
   18.37 +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
   18.38 +CONFIG_HAVE_SETUP_PER_CPU_AREA=y
   18.39 +CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
   18.40 +CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
   18.41 +# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set
   18.42 +CONFIG_ARCH_HIBERNATION_POSSIBLE=y
   18.43 +CONFIG_ARCH_SUSPEND_POSSIBLE=y
   18.44 +# CONFIG_ZONE_DMA32 is not set
   18.45 +CONFIG_ARCH_POPULATES_NODE_MAP=y
   18.46 +# CONFIG_AUDIT_ARCH is not set
   18.47 +CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
   18.48 +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
   18.49 +CONFIG_X86_32_LAZY_GS=y
   18.50 +CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-ecx -fcall-saved-edx"
   18.51 +CONFIG_KTIME_SCALAR=y
   18.52 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
   18.53 +CONFIG_CONSTRUCTORS=y
   18.54 +CONFIG_HAVE_IRQ_WORK=y
   18.55 +CONFIG_IRQ_WORK=y
   18.56 +
   18.57 +#
   18.58 +# General setup
   18.59 +#
   18.60 +CONFIG_EXPERIMENTAL=y
   18.61 +CONFIG_BROKEN_ON_SMP=y
   18.62 +CONFIG_INIT_ENV_ARG_LIMIT=32
   18.63 +CONFIG_CROSS_COMPILE=""
   18.64 +CONFIG_LOCALVERSION="-slitaz"
   18.65 +# CONFIG_LOCALVERSION_AUTO is not set
   18.66 +CONFIG_HAVE_KERNEL_GZIP=y
   18.67 +CONFIG_HAVE_KERNEL_BZIP2=y
   18.68 +CONFIG_HAVE_KERNEL_LZMA=y
   18.69 +CONFIG_HAVE_KERNEL_XZ=y
   18.70 +CONFIG_HAVE_KERNEL_LZO=y
   18.71 +# CONFIG_KERNEL_GZIP is not set
   18.72 +# CONFIG_KERNEL_BZIP2 is not set
   18.73 +CONFIG_KERNEL_LZMA=y
   18.74 +# CONFIG_KERNEL_XZ is not set
   18.75 +# CONFIG_KERNEL_LZO is not set
   18.76 +# CONFIG_SWAP is not set
   18.77 +CONFIG_SYSVIPC=y
   18.78 +CONFIG_SYSVIPC_SYSCTL=y
   18.79 +# CONFIG_POSIX_MQUEUE is not set
   18.80 +# CONFIG_BSD_PROCESS_ACCT is not set
   18.81 +# CONFIG_TASKSTATS is not set
   18.82 +# CONFIG_AUDIT is not set
   18.83 +CONFIG_HAVE_GENERIC_HARDIRQS=y
   18.84 +
   18.85 +#
   18.86 +# IRQ subsystem
   18.87 +#
   18.88 +CONFIG_GENERIC_HARDIRQS=y
   18.89 +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
   18.90 +# CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED is not set
   18.91 +CONFIG_HAVE_SPARSE_IRQ=y
   18.92 +CONFIG_GENERIC_IRQ_PROBE=y
   18.93 +# CONFIG_GENERIC_PENDING_IRQ is not set
   18.94 +# CONFIG_AUTO_IRQ_AFFINITY is not set
   18.95 +# CONFIG_IRQ_PER_CPU is not set
   18.96 +# CONFIG_HARDIRQS_SW_RESEND is not set
   18.97 +# CONFIG_SPARSE_IRQ is not set
   18.98 +
   18.99 +#
  18.100 +# RCU Subsystem
  18.101 +#
  18.102 +CONFIG_TINY_RCU=y
  18.103 +# CONFIG_PREEMPT_RCU is not set
  18.104 +# CONFIG_TREE_RCU_TRACE is not set
  18.105 +CONFIG_IKCONFIG=y
  18.106 +CONFIG_IKCONFIG_PROC=y
  18.107 +CONFIG_LOG_BUF_SHIFT=12
  18.108 +CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
  18.109 +# CONFIG_NAMESPACES is not set
  18.110 +# CONFIG_RELAY is not set
  18.111 +CONFIG_BLK_DEV_INITRD=y
  18.112 +CONFIG_INITRAMFS_SOURCE="rootfs.cpio"
  18.113 +CONFIG_INITRAMFS_ROOT_UID=0
  18.114 +CONFIG_INITRAMFS_ROOT_GID=0
  18.115 +CONFIG_RD_GZIP=y
  18.116 +# CONFIG_RD_BZIP2 is not set
  18.117 +CONFIG_RD_LZMA=y
  18.118 +# CONFIG_RD_LZO is not set
  18.119 +CONFIG_INITRAMFS_COMPRESSION_NONE=y
  18.120 +# CONFIG_INITRAMFS_COMPRESSION_GZIP is not set
  18.121 +# CONFIG_INITRAMFS_COMPRESSION_LZMA is not set
  18.122 +CONFIG_CC_OPTIMIZE_FOR_SIZE=y
  18.123 +CONFIG_SYSCTL=y
  18.124 +CONFIG_ANON_INODES=y
  18.125 +CONFIG_EMBEDDED=y
  18.126 +# CONFIG_UID16 is not set
  18.127 +# CONFIG_SYSCTL_SYSCALL is not set
  18.128 +# CONFIG_KALLSYMS is not set
  18.129 +# CONFIG_HOTPLUG is not set
  18.130 +CONFIG_PRINTK=y
  18.131 +# CONFIG_BUG is not set
  18.132 +# CONFIG_ELF_CORE is not set
  18.133 +CONFIG_PCSPKR_PLATFORM=y
  18.134 +# CONFIG_BASE_FULL is not set
  18.135 +CONFIG_FUTEX=y
  18.136 +# CONFIG_EPOLL is not set
  18.137 +# CONFIG_SIGNALFD is not set
  18.138 +# CONFIG_TIMERFD is not set
  18.139 +# CONFIG_EVENTFD is not set
  18.140 +# CONFIG_SHMEM is not set
  18.141 +# CONFIG_AIO is not set
  18.142 +CONFIG_HAVE_PERF_EVENTS=y
  18.143 +
  18.144 +#
  18.145 +# Kernel Performance Events And Counters
  18.146 +#
  18.147 +CONFIG_PERF_EVENTS=y
  18.148 +# CONFIG_PERF_COUNTERS is not set
  18.149 +# CONFIG_VM_EVENT_COUNTERS is not set
  18.150 +CONFIG_COMPAT_BRK=y
  18.151 +# CONFIG_SLAB is not set
  18.152 +# CONFIG_SLUB is not set
  18.153 +CONFIG_SLOB=y
  18.154 +# CONFIG_PROFILING is not set
  18.155 +CONFIG_HAVE_OPROFILE=y
  18.156 +# CONFIG_JUMP_LABEL is not set
  18.157 +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
  18.158 +CONFIG_HAVE_IOREMAP_PROT=y
  18.159 +CONFIG_HAVE_KPROBES=y
  18.160 +CONFIG_HAVE_KRETPROBES=y
  18.161 +CONFIG_HAVE_OPTPROBES=y
  18.162 +CONFIG_HAVE_ARCH_TRACEHOOK=y
  18.163 +CONFIG_HAVE_DMA_ATTRS=y
  18.164 +CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
  18.165 +CONFIG_HAVE_DMA_API_DEBUG=y
  18.166 +CONFIG_HAVE_HW_BREAKPOINT=y
  18.167 +CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y
  18.168 +CONFIG_HAVE_USER_RETURN_NOTIFIER=y
  18.169 +CONFIG_HAVE_PERF_EVENTS_NMI=y
  18.170 +CONFIG_HAVE_ARCH_JUMP_LABEL=y
  18.171 +
  18.172 +#
  18.173 +# GCOV-based kernel profiling
  18.174 +#
  18.175 +CONFIG_HAVE_GENERIC_DMA_COHERENT=y
  18.176 +CONFIG_RT_MUTEXES=y
  18.177 +CONFIG_BASE_SMALL=1
  18.178 +# CONFIG_MODULES is not set
  18.179 +CONFIG_BLOCK=y
  18.180 +# CONFIG_LBDAF is not set
  18.181 +# CONFIG_BLK_DEV_BSG is not set
  18.182 +# CONFIG_BLK_DEV_INTEGRITY is not set
  18.183 +
  18.184 +#
  18.185 +# IO Schedulers
  18.186 +#
  18.187 +CONFIG_IOSCHED_NOOP=y
  18.188 +# CONFIG_IOSCHED_DEADLINE is not set
  18.189 +# CONFIG_IOSCHED_CFQ is not set
  18.190 +CONFIG_DEFAULT_NOOP=y
  18.191 +CONFIG_DEFAULT_IOSCHED="noop"
  18.192 +# CONFIG_INLINE_SPIN_TRYLOCK is not set
  18.193 +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
  18.194 +# CONFIG_INLINE_SPIN_LOCK is not set
  18.195 +# CONFIG_INLINE_SPIN_LOCK_BH is not set
  18.196 +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
  18.197 +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
  18.198 +CONFIG_INLINE_SPIN_UNLOCK=y
  18.199 +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
  18.200 +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
  18.201 +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
  18.202 +# CONFIG_INLINE_READ_TRYLOCK is not set
  18.203 +# CONFIG_INLINE_READ_LOCK is not set
  18.204 +# CONFIG_INLINE_READ_LOCK_BH is not set
  18.205 +# CONFIG_INLINE_READ_LOCK_IRQ is not set
  18.206 +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
  18.207 +CONFIG_INLINE_READ_UNLOCK=y
  18.208 +# CONFIG_INLINE_READ_UNLOCK_BH is not set
  18.209 +CONFIG_INLINE_READ_UNLOCK_IRQ=y
  18.210 +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
  18.211 +# CONFIG_INLINE_WRITE_TRYLOCK is not set
  18.212 +# CONFIG_INLINE_WRITE_LOCK is not set
  18.213 +# CONFIG_INLINE_WRITE_LOCK_BH is not set
  18.214 +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
  18.215 +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
  18.216 +CONFIG_INLINE_WRITE_UNLOCK=y
  18.217 +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
  18.218 +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
  18.219 +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
  18.220 +# CONFIG_MUTEX_SPIN_ON_OWNER is not set
  18.221 +# CONFIG_FREEZER is not set
  18.222 +
  18.223 +#
  18.224 +# Processor type and features
  18.225 +#
  18.226 +CONFIG_TICK_ONESHOT=y
  18.227 +CONFIG_NO_HZ=y
  18.228 +# CONFIG_HIGH_RES_TIMERS is not set
  18.229 +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
  18.230 +# CONFIG_SMP is not set
  18.231 +# CONFIG_X86_EXTENDED_PLATFORM is not set
  18.232 +CONFIG_SCHED_OMIT_FRAME_POINTER=y
  18.233 +CONFIG_PARAVIRT_GUEST=y
  18.234 +# CONFIG_XEN_PRIVILEGED_GUEST is not set
  18.235 +CONFIG_KVM_CLOCK=y
  18.236 +CONFIG_KVM_GUEST=y
  18.237 +CONFIG_LGUEST_GUEST=y
  18.238 +CONFIG_PARAVIRT=y
  18.239 +CONFIG_PARAVIRT_CLOCK=y
  18.240 +CONFIG_NO_BOOTMEM=y
  18.241 +# CONFIG_MEMTEST is not set
  18.242 +# CONFIG_M386 is not set
  18.243 +# CONFIG_M486 is not set
  18.244 +# CONFIG_M586 is not set
  18.245 +# CONFIG_M586TSC is not set
  18.246 +# CONFIG_M586MMX is not set
  18.247 +# CONFIG_M686 is not set
  18.248 +# CONFIG_MPENTIUMII is not set
  18.249 +CONFIG_MPENTIUMIII=y
  18.250 +# CONFIG_MPENTIUMM is not set
  18.251 +# CONFIG_MPENTIUM4 is not set
  18.252 +# CONFIG_MK6 is not set
  18.253 +# CONFIG_MK7 is not set
  18.254 +# CONFIG_MK8 is not set
  18.255 +# CONFIG_MCRUSOE is not set
  18.256 +# CONFIG_MEFFICEON is not set
  18.257 +# CONFIG_MWINCHIPC6 is not set
  18.258 +# CONFIG_MWINCHIP3D is not set
  18.259 +# CONFIG_MGEODEGX1 is not set
  18.260 +# CONFIG_MGEODE_LX is not set
  18.261 +# CONFIG_MCYRIXIII is not set
  18.262 +# CONFIG_MVIAC3_2 is not set
  18.263 +# CONFIG_MVIAC7 is not set
  18.264 +# CONFIG_MCORE2 is not set
  18.265 +# CONFIG_MATOM is not set
  18.266 +CONFIG_X86_GENERIC=y
  18.267 +CONFIG_X86_CPU=y
  18.268 +CONFIG_X86_INTERNODE_CACHE_SHIFT=6
  18.269 +CONFIG_X86_CMPXCHG=y
  18.270 +CONFIG_X86_L1_CACHE_SHIFT=6
  18.271 +CONFIG_X86_XADD=y
  18.272 +CONFIG_X86_WP_WORKS_OK=y
  18.273 +CONFIG_X86_INVLPG=y
  18.274 +CONFIG_X86_BSWAP=y
  18.275 +CONFIG_X86_POPAD_OK=y
  18.276 +CONFIG_X86_INTEL_USERCOPY=y
  18.277 +CONFIG_X86_USE_PPRO_CHECKSUM=y
  18.278 +CONFIG_X86_TSC=y
  18.279 +CONFIG_X86_CMPXCHG64=y
  18.280 +CONFIG_X86_CMOV=y
  18.281 +CONFIG_X86_MINIMUM_CPU_FAMILY=5
  18.282 +CONFIG_X86_DEBUGCTLMSR=y
  18.283 +# CONFIG_PROCESSOR_SELECT is not set
  18.284 +CONFIG_CPU_SUP_INTEL=y
  18.285 +CONFIG_CPU_SUP_CYRIX_32=y
  18.286 +CONFIG_CPU_SUP_AMD=y
  18.287 +CONFIG_CPU_SUP_CENTAUR=y
  18.288 +CONFIG_CPU_SUP_TRANSMETA_32=y
  18.289 +CONFIG_CPU_SUP_UMC_32=y
  18.290 +# CONFIG_HPET_TIMER is not set
  18.291 +# CONFIG_DMI is not set
  18.292 +# CONFIG_IOMMU_HELPER is not set
  18.293 +# CONFIG_IOMMU_API is not set
  18.294 +CONFIG_NR_CPUS=1
  18.295 +# CONFIG_IRQ_TIME_ACCOUNTING is not set
  18.296 +CONFIG_PREEMPT_NONE=y
  18.297 +# CONFIG_PREEMPT_VOLUNTARY is not set
  18.298 +# CONFIG_PREEMPT is not set
  18.299 +# CONFIG_X86_UP_APIC is not set
  18.300 +# CONFIG_X86_MCE is not set
  18.301 +# CONFIG_VM86 is not set
  18.302 +# CONFIG_TOSHIBA is not set
  18.303 +# CONFIG_I8K is not set
  18.304 +# CONFIG_X86_REBOOTFIXUPS is not set
  18.305 +# CONFIG_MICROCODE is not set
  18.306 +# CONFIG_X86_MSR is not set
  18.307 +# CONFIG_X86_CPUID is not set
  18.308 +CONFIG_NOHIGHMEM=y
  18.309 +# CONFIG_HIGHMEM4G is not set
  18.310 +# CONFIG_HIGHMEM64G is not set
  18.311 +CONFIG_VMSPLIT_3G=y
  18.312 +# CONFIG_VMSPLIT_3G_OPT is not set
  18.313 +# CONFIG_VMSPLIT_2G is not set
  18.314 +# CONFIG_VMSPLIT_2G_OPT is not set
  18.315 +# CONFIG_VMSPLIT_1G is not set
  18.316 +CONFIG_PAGE_OFFSET=0xC0000000
  18.317 +# CONFIG_X86_PAE is not set
  18.318 +# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
  18.319 +# CONFIG_ARCH_DMA_ADDR_T_64BIT is not set
  18.320 +CONFIG_ARCH_FLATMEM_ENABLE=y
  18.321 +CONFIG_ARCH_SPARSEMEM_ENABLE=y
  18.322 +CONFIG_ARCH_SELECT_MEMORY_MODEL=y
  18.323 +CONFIG_ILLEGAL_POINTER_VALUE=0
  18.324 +CONFIG_SELECT_MEMORY_MODEL=y
  18.325 +CONFIG_FLATMEM_MANUAL=y
  18.326 +# CONFIG_SPARSEMEM_MANUAL is not set
  18.327 +CONFIG_FLATMEM=y
  18.328 +CONFIG_FLAT_NODE_MEM_MAP=y
  18.329 +CONFIG_SPARSEMEM_STATIC=y
  18.330 +CONFIG_HAVE_MEMBLOCK=y
  18.331 +CONFIG_PAGEFLAGS_EXTENDED=y
  18.332 +CONFIG_SPLIT_PTLOCK_CPUS=4
  18.333 +# CONFIG_PHYS_ADDR_T_64BIT is not set
  18.334 +CONFIG_ZONE_DMA_FLAG=1
  18.335 +CONFIG_BOUNCE=y
  18.336 +CONFIG_VIRT_TO_BUS=y
  18.337 +# CONFIG_KSM is not set
  18.338 +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
  18.339 +CONFIG_NEED_PER_CPU_KM=y
  18.340 +# CONFIG_X86_CHECK_BIOS_CORRUPTION is not set
  18.341 +CONFIG_X86_RESERVE_LOW=64
  18.342 +# CONFIG_MATH_EMULATION is not set
  18.343 +# CONFIG_MTRR is not set
  18.344 +# CONFIG_SECCOMP is not set
  18.345 +# CONFIG_CC_STACKPROTECTOR is not set
  18.346 +CONFIG_HZ_100=y
  18.347 +# CONFIG_HZ_250 is not set
  18.348 +# CONFIG_HZ_300 is not set
  18.349 +# CONFIG_HZ_1000 is not set
  18.350 +CONFIG_HZ=100
  18.351 +# CONFIG_SCHED_HRTICK is not set
  18.352 +# CONFIG_KEXEC is not set
  18.353 +CONFIG_PHYSICAL_START=0x100000
  18.354 +# CONFIG_RELOCATABLE is not set
  18.355 +CONFIG_PHYSICAL_ALIGN=0x100000
  18.356 +# CONFIG_COMPAT_VDSO is not set
  18.357 +# CONFIG_CMDLINE_BOOL is not set
  18.358 +
  18.359 +#
  18.360 +# Power management and ACPI options
  18.361 +#
  18.362 +# CONFIG_PM is not set
  18.363 +# CONFIG_SFI is not set
  18.364 +
  18.365 +#
  18.366 +# CPU Frequency scaling
  18.367 +#
  18.368 +# CONFIG_CPU_FREQ is not set
  18.369 +# CONFIG_CPU_IDLE is not set
  18.370 +
  18.371 +#
  18.372 +# Bus options (PCI etc.)
  18.373 +#
  18.374 +# CONFIG_PCI is not set
  18.375 +# CONFIG_ARCH_SUPPORTS_MSI is not set
  18.376 +CONFIG_ISA_DMA_API=y
  18.377 +# CONFIG_ISA is not set
  18.378 +# CONFIG_MCA is not set
  18.379 +# CONFIG_SCx200 is not set
  18.380 +# CONFIG_OLPC is not set
  18.381 +# CONFIG_OLPC_OPENFIRMWARE is not set
  18.382 +
  18.383 +#
  18.384 +# Executable file formats / Emulations
  18.385 +#
  18.386 +CONFIG_BINFMT_ELF=y
  18.387 +CONFIG_HAVE_AOUT=y
  18.388 +# CONFIG_BINFMT_AOUT is not set
  18.389 +# CONFIG_BINFMT_MISC is not set
  18.390 +CONFIG_HAVE_ATOMIC_IOMAP=y
  18.391 +CONFIG_HAVE_TEXT_POKE_SMP=y
  18.392 +CONFIG_NET=y
  18.393 +
  18.394 +#
  18.395 +# Networking options
  18.396 +#
  18.397 +CONFIG_PACKET=y
  18.398 +CONFIG_UNIX=y
  18.399 +# CONFIG_NET_KEY is not set
  18.400 +CONFIG_INET=y
  18.401 +# CONFIG_IP_MULTICAST is not set
  18.402 +# CONFIG_IP_ADVANCED_ROUTER is not set
  18.403 +CONFIG_IP_FIB_HASH=y
  18.404 +# CONFIG_IP_PNP is not set
  18.405 +# CONFIG_NET_IPIP is not set
  18.406 +# CONFIG_NET_IPGRE_DEMUX is not set
  18.407 +# CONFIG_ARPD is not set
  18.408 +# CONFIG_SYN_COOKIES is not set
  18.409 +# CONFIG_INET_AH is not set
  18.410 +# CONFIG_INET_ESP is not set
  18.411 +# CONFIG_INET_IPCOMP is not set
  18.412 +# CONFIG_INET_XFRM_TUNNEL is not set
  18.413 +# CONFIG_INET_TUNNEL is not set
  18.414 +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
  18.415 +# CONFIG_INET_XFRM_MODE_TUNNEL is not set
  18.416 +# CONFIG_INET_XFRM_MODE_BEET is not set
  18.417 +# CONFIG_INET_LRO is not set
  18.418 +# CONFIG_INET_DIAG is not set
  18.419 +# CONFIG_TCP_CONG_ADVANCED is not set
  18.420 +CONFIG_TCP_CONG_CUBIC=y
  18.421 +CONFIG_DEFAULT_TCP_CONG="cubic"
  18.422 +# CONFIG_TCP_MD5SIG is not set
  18.423 +# CONFIG_IPV6 is not set
  18.424 +# CONFIG_NETWORK_SECMARK is not set
  18.425 +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
  18.426 +# CONFIG_NETFILTER is not set
  18.427 +# CONFIG_IP_DCCP is not set
  18.428 +# CONFIG_IP_SCTP is not set
  18.429 +# CONFIG_RDS is not set
  18.430 +# CONFIG_TIPC is not set
  18.431 +# CONFIG_ATM is not set
  18.432 +# CONFIG_L2TP is not set
  18.433 +# CONFIG_BRIDGE is not set
  18.434 +# CONFIG_NET_DSA is not set
  18.435 +# CONFIG_VLAN_8021Q is not set
  18.436 +# CONFIG_DECNET is not set
  18.437 +# CONFIG_LLC2 is not set
  18.438 +# CONFIG_IPX is not set
  18.439 +# CONFIG_ATALK is not set
  18.440 +# CONFIG_X25 is not set
  18.441 +# CONFIG_LAPB is not set
  18.442 +# CONFIG_ECONET is not set
  18.443 +# CONFIG_WAN_ROUTER is not set
  18.444 +# CONFIG_PHONET is not set
  18.445 +# CONFIG_IEEE802154 is not set
  18.446 +# CONFIG_NET_SCHED is not set
  18.447 +# CONFIG_DCB is not set
  18.448 +
  18.449 +#
  18.450 +# Network testing
  18.451 +#
  18.452 +# CONFIG_NET_PKTGEN is not set
  18.453 +# CONFIG_HAMRADIO is not set
  18.454 +# CONFIG_CAN is not set
  18.455 +# CONFIG_IRDA is not set
  18.456 +# CONFIG_BT is not set
  18.457 +# CONFIG_AF_RXRPC is not set
  18.458 +# CONFIG_WIRELESS is not set
  18.459 +# CONFIG_WIMAX is not set
  18.460 +# CONFIG_RFKILL is not set
  18.461 +# CONFIG_NET_9P is not set
  18.462 +# CONFIG_CAIF is not set
  18.463 +# CONFIG_CEPH_LIB is not set
  18.464 +
  18.465 +#
  18.466 +# Device Drivers
  18.467 +#
  18.468 +
  18.469 +#
  18.470 +# Generic Driver Options
  18.471 +#
  18.472 +CONFIG_STANDALONE=y
  18.473 +CONFIG_PREVENT_FIRMWARE_BUILD=y
  18.474 +CONFIG_FW_LOADER=y
  18.475 +CONFIG_FIRMWARE_IN_KERNEL=y
  18.476 +CONFIG_EXTRA_FIRMWARE=""
  18.477 +# CONFIG_SYS_HYPERVISOR is not set
  18.478 +# CONFIG_CONNECTOR is not set
  18.479 +# CONFIG_MTD is not set
  18.480 +# CONFIG_PARPORT is not set
  18.481 +CONFIG_BLK_DEV=y
  18.482 +# CONFIG_BLK_DEV_FD is not set
  18.483 +# CONFIG_BLK_DEV_COW_COMMON is not set
  18.484 +CONFIG_BLK_DEV_LOOP=y
  18.485 +# CONFIG_BLK_DEV_CRYPTOLOOP is not set
  18.486 +
  18.487 +#
  18.488 +# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
  18.489 +#
  18.490 +# CONFIG_BLK_DEV_NBD is not set
  18.491 +# CONFIG_BLK_DEV_RAM is not set
  18.492 +# CONFIG_CDROM_PKTCDVD is not set
  18.493 +# CONFIG_ATA_OVER_ETH is not set
  18.494 +CONFIG_VIRTIO_BLK=y
  18.495 +# CONFIG_BLK_DEV_HD is not set
  18.496 +# CONFIG_BLK_DEV_RBD is not set
  18.497 +# CONFIG_MISC_DEVICES is not set
  18.498 +CONFIG_HAVE_IDE=y
  18.499 +# CONFIG_IDE is not set
  18.500 +
  18.501 +#
  18.502 +# SCSI device support
  18.503 +#
  18.504 +CONFIG_SCSI_MOD=y
  18.505 +# CONFIG_RAID_ATTRS is not set
  18.506 +# CONFIG_SCSI is not set
  18.507 +# CONFIG_SCSI_DMA is not set
  18.508 +# CONFIG_SCSI_NETLINK is not set
  18.509 +# CONFIG_ATA is not set
  18.510 +# CONFIG_MD is not set
  18.511 +# CONFIG_MACINTOSH_DRIVERS is not set
  18.512 +CONFIG_NETDEVICES=y
  18.513 +# CONFIG_DUMMY is not set
  18.514 +# CONFIG_BONDING is not set
  18.515 +# CONFIG_MACVLAN is not set
  18.516 +# CONFIG_EQUALIZER is not set
  18.517 +# CONFIG_TUN is not set
  18.518 +# CONFIG_VETH is not set
  18.519 +# CONFIG_MII is not set
  18.520 +# CONFIG_PHYLIB is not set
  18.521 +# CONFIG_NET_ETHERNET is not set
  18.522 +# CONFIG_NETDEV_1000 is not set
  18.523 +# CONFIG_NETDEV_10000 is not set
  18.524 +# CONFIG_WLAN is not set
  18.525 +
  18.526 +#
  18.527 +# Enable WiMAX (Networking options) to see the WiMAX drivers
  18.528 +#
  18.529 +# CONFIG_WAN is not set
  18.530 +
  18.531 +#
  18.532 +# CAIF transport drivers
  18.533 +#
  18.534 +# CONFIG_PPP is not set
  18.535 +# CONFIG_SLIP is not set
  18.536 +# CONFIG_NETCONSOLE is not set
  18.537 +# CONFIG_NETPOLL is not set
  18.538 +# CONFIG_NET_POLL_CONTROLLER is not set
  18.539 +CONFIG_VIRTIO_NET=y
  18.540 +# CONFIG_ISDN is not set
  18.541 +# CONFIG_PHONE is not set
  18.542 +
  18.543 +#
  18.544 +# Input device support
  18.545 +#
  18.546 +CONFIG_INPUT=y
  18.547 +# CONFIG_INPUT_FF_MEMLESS is not set
  18.548 +# CONFIG_INPUT_POLLDEV is not set
  18.549 +# CONFIG_INPUT_SPARSEKMAP is not set
  18.550 +
  18.551 +#
  18.552 +# Userland interfaces
  18.553 +#
  18.554 +# CONFIG_INPUT_MOUSEDEV is not set
  18.555 +# CONFIG_INPUT_JOYDEV is not set
  18.556 +# CONFIG_INPUT_EVDEV is not set
  18.557 +# CONFIG_INPUT_EVBUG is not set
  18.558 +
  18.559 +#
  18.560 +# Input Device Drivers
  18.561 +#
  18.562 +CONFIG_INPUT_KEYBOARD=y
  18.563 +CONFIG_KEYBOARD_ATKBD=y
  18.564 +# CONFIG_KEYBOARD_LKKBD is not set
  18.565 +# CONFIG_KEYBOARD_NEWTON is not set
  18.566 +# CONFIG_KEYBOARD_OPENCORES is not set
  18.567 +# CONFIG_KEYBOARD_STOWAWAY is not set
  18.568 +# CONFIG_KEYBOARD_SUNKBD is not set
  18.569 +# CONFIG_KEYBOARD_XTKBD is not set
  18.570 +# CONFIG_INPUT_MOUSE is not set
  18.571 +# CONFIG_INPUT_JOYSTICK is not set
  18.572 +# CONFIG_INPUT_TABLET is not set
  18.573 +# CONFIG_INPUT_TOUCHSCREEN is not set
  18.574 +# CONFIG_INPUT_MISC is not set
  18.575 +
  18.576 +#
  18.577 +# Hardware I/O ports
  18.578 +#
  18.579 +CONFIG_SERIO=y
  18.580 +CONFIG_SERIO_I8042=y
  18.581 +# CONFIG_SERIO_SERPORT is not set
  18.582 +# CONFIG_SERIO_CT82C710 is not set
  18.583 +CONFIG_SERIO_LIBPS2=y
  18.584 +# CONFIG_SERIO_RAW is not set
  18.585 +# CONFIG_SERIO_ALTERA_PS2 is not set
  18.586 +# CONFIG_SERIO_PS2MULT is not set
  18.587 +# CONFIG_GAMEPORT is not set
  18.588 +
  18.589 +#
  18.590 +# Character devices
  18.591 +#
  18.592 +CONFIG_VT=y
  18.593 +CONFIG_CONSOLE_TRANSLATIONS=y
  18.594 +CONFIG_VT_CONSOLE=y
  18.595 +CONFIG_HW_CONSOLE=y
  18.596 +# CONFIG_VT_HW_CONSOLE_BINDING is not set
  18.597 +# CONFIG_DEVKMEM is not set
  18.598 +# CONFIG_SERIAL_NONSTANDARD is not set
  18.599 +# CONFIG_N_GSM is not set
  18.600 +
  18.601 +#
  18.602 +# Serial drivers
  18.603 +#
  18.604 +CONFIG_SERIAL_8250=y
  18.605 +# CONFIG_SERIAL_8250_CONSOLE is not set
  18.606 +CONFIG_FIX_EARLYCON_MEM=y
  18.607 +CONFIG_SERIAL_8250_NR_UARTS=2
  18.608 +CONFIG_SERIAL_8250_RUNTIME_UARTS=2
  18.609 +# CONFIG_SERIAL_8250_EXTENDED is not set
  18.610 +
  18.611 +#
  18.612 +# Non-8250 serial port support
  18.613 +#
  18.614 +CONFIG_SERIAL_CORE=y
  18.615 +# CONFIG_SERIAL_TIMBERDALE is not set
  18.616 +# CONFIG_SERIAL_ALTERA_JTAGUART is not set
  18.617 +# CONFIG_SERIAL_ALTERA_UART is not set
  18.618 +CONFIG_UNIX98_PTYS=y
  18.619 +# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
  18.620 +# CONFIG_LEGACY_PTYS is not set
  18.621 +# CONFIG_TTY_PRINTK is not set
  18.622 +CONFIG_HVC_DRIVER=y
  18.623 +CONFIG_VIRTIO_CONSOLE=y
  18.624 +# CONFIG_IPMI_HANDLER is not set
  18.625 +# CONFIG_HW_RANDOM is not set
  18.626 +# CONFIG_NVRAM is not set
  18.627 +# CONFIG_RTC is not set
  18.628 +# CONFIG_GEN_RTC is not set
  18.629 +# CONFIG_R3964 is not set
  18.630 +# CONFIG_MWAVE is not set
  18.631 +# CONFIG_PC8736x_GPIO is not set
  18.632 +# CONFIG_NSC_GPIO is not set
  18.633 +# CONFIG_CS5535_GPIO is not set
  18.634 +# CONFIG_RAW_DRIVER is not set
  18.635 +# CONFIG_HANGCHECK_TIMER is not set
  18.636 +# CONFIG_TCG_TPM is not set
  18.637 +# CONFIG_TELCLOCK is not set
  18.638 +# CONFIG_RAMOOPS is not set
  18.639 +# CONFIG_I2C is not set
  18.640 +# CONFIG_SPI is not set
  18.641 +
  18.642 +#
  18.643 +# PPS support
  18.644 +#
  18.645 +# CONFIG_PPS is not set
  18.646 +CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
  18.647 +# CONFIG_GPIOLIB is not set
  18.648 +# CONFIG_W1 is not set
  18.649 +# CONFIG_POWER_SUPPLY is not set
  18.650 +# CONFIG_HWMON is not set
  18.651 +# CONFIG_THERMAL is not set
  18.652 +# CONFIG_WATCHDOG is not set
  18.653 +CONFIG_SSB_POSSIBLE=y
  18.654 +
  18.655 +#
  18.656 +# Sonics Silicon Backplane
  18.657 +#
  18.658 +# CONFIG_SSB is not set
  18.659 +# CONFIG_MFD_SUPPORT is not set
  18.660 +# CONFIG_REGULATOR is not set
  18.661 +# CONFIG_MEDIA_SUPPORT is not set
  18.662 +
  18.663 +#
  18.664 +# Graphics support
  18.665 +#
  18.666 +# CONFIG_DRM is not set
  18.667 +# CONFIG_VGASTATE is not set
  18.668 +# CONFIG_VIDEO_OUTPUT_CONTROL is not set
  18.669 +# CONFIG_FB is not set
  18.670 +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
  18.671 +
  18.672 +#
  18.673 +# Display device support
  18.674 +#
  18.675 +# CONFIG_DISPLAY_SUPPORT is not set
  18.676 +
  18.677 +#
  18.678 +# Console display driver support
  18.679 +#
  18.680 +CONFIG_VGA_CONSOLE=y
  18.681 +# CONFIG_VGACON_SOFT_SCROLLBACK is not set
  18.682 +CONFIG_DUMMY_CONSOLE=y
  18.683 +# CONFIG_SOUND is not set
  18.684 +# CONFIG_HID_SUPPORT is not set
  18.685 +# CONFIG_USB_SUPPORT is not set
  18.686 +# CONFIG_MMC is not set
  18.687 +# CONFIG_MEMSTICK is not set
  18.688 +# CONFIG_NEW_LEDS is not set
  18.689 +# CONFIG_ACCESSIBILITY is not set
  18.690 +# CONFIG_EDAC is not set
  18.691 +# CONFIG_RTC_CLASS is not set
  18.692 +# CONFIG_DMADEVICES is not set
  18.693 +# CONFIG_AUXDISPLAY is not set
  18.694 +# CONFIG_UIO is not set
  18.695 +# CONFIG_STAGING is not set
  18.696 +# CONFIG_X86_PLATFORM_DEVICES is not set
  18.697 +
  18.698 +#
  18.699 +# Firmware Drivers
  18.700 +#
  18.701 +# CONFIG_EDD is not set
  18.702 +# CONFIG_FIRMWARE_MEMMAP is not set
  18.703 +# CONFIG_DELL_RBU is not set
  18.704 +# CONFIG_DCDBAS is not set
  18.705 +# CONFIG_ISCSI_IBFT_FIND is not set
  18.706 +
  18.707 +#
  18.708 +# File systems
  18.709 +#
  18.710 +# CONFIG_EXT2_FS is not set
  18.711 +CONFIG_EXT3_FS=y
  18.712 +# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
  18.713 +# CONFIG_EXT3_FS_XATTR is not set
  18.714 +# CONFIG_EXT4_FS is not set
  18.715 +CONFIG_JBD=y
  18.716 +# CONFIG_REISERFS_FS is not set
  18.717 +# CONFIG_JFS_FS is not set
  18.718 +# CONFIG_FS_POSIX_ACL is not set
  18.719 +# CONFIG_XFS_FS is not set
  18.720 +# CONFIG_BTRFS_FS is not set
  18.721 +# CONFIG_NILFS2_FS is not set
  18.722 +# CONFIG_FILE_LOCKING is not set
  18.723 +# CONFIG_FSNOTIFY is not set
  18.724 +# CONFIG_DNOTIFY is not set
  18.725 +# CONFIG_INOTIFY_USER is not set
  18.726 +# CONFIG_FANOTIFY is not set
  18.727 +# CONFIG_QUOTA is not set
  18.728 +# CONFIG_QUOTACTL is not set
  18.729 +# CONFIG_AUTOFS4_FS is not set
  18.730 +# CONFIG_FUSE_FS is not set
  18.731 +
  18.732 +#
  18.733 +# Caches
  18.734 +#
  18.735 +# CONFIG_FSCACHE is not set
  18.736 +
  18.737 +#
  18.738 +# CD-ROM/DVD Filesystems
  18.739 +#
  18.740 +# CONFIG_ISO9660_FS is not set
  18.741 +# CONFIG_UDF_FS is not set
  18.742 +
  18.743 +#
  18.744 +# DOS/FAT/NT Filesystems
  18.745 +#
  18.746 +# CONFIG_MSDOS_FS is not set
  18.747 +# CONFIG_VFAT_FS is not set
  18.748 +# CONFIG_NTFS_FS is not set
  18.749 +
  18.750 +#
  18.751 +# Pseudo filesystems
  18.752 +#
  18.753 +CONFIG_PROC_FS=y
  18.754 +# CONFIG_PROC_KCORE is not set
  18.755 +CONFIG_PROC_SYSCTL=y
  18.756 +# CONFIG_PROC_PAGE_MONITOR is not set
  18.757 +# CONFIG_SYSFS is not set
  18.758 +# CONFIG_HUGETLBFS is not set
  18.759 +# CONFIG_HUGETLB_PAGE is not set
  18.760 +# CONFIG_MISC_FILESYSTEMS is not set
  18.761 +# CONFIG_NETWORK_FILESYSTEMS is not set
  18.762 +
  18.763 +#
  18.764 +# Partition Types
  18.765 +#
  18.766 +# CONFIG_PARTITION_ADVANCED is not set
  18.767 +CONFIG_MSDOS_PARTITION=y
  18.768 +# CONFIG_NLS is not set
  18.769 +
  18.770 +#
  18.771 +# Kernel hacking
  18.772 +#
  18.773 +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
  18.774 +# CONFIG_PRINTK_TIME is not set
  18.775 +# CONFIG_ENABLE_WARN_DEPRECATED is not set
  18.776 +# CONFIG_ENABLE_MUST_CHECK is not set
  18.777 +CONFIG_FRAME_WARN=1024
  18.778 +# CONFIG_MAGIC_SYSRQ is not set
  18.779 +# CONFIG_STRIP_ASM_SYMS is not set
  18.780 +# CONFIG_UNUSED_SYMBOLS is not set
  18.781 +# CONFIG_DEBUG_FS is not set
  18.782 +# CONFIG_HEADERS_CHECK is not set
  18.783 +# CONFIG_DEBUG_KERNEL is not set
  18.784 +# CONFIG_HARDLOCKUP_DETECTOR is not set
  18.785 +CONFIG_BKL=y
  18.786 +# CONFIG_SPARSE_RCU_POINTER is not set
  18.787 +# CONFIG_DEBUG_MEMORY_INIT is not set
  18.788 +CONFIG_ARCH_WANT_FRAME_POINTERS=y
  18.789 +# CONFIG_FRAME_POINTER is not set
  18.790 +# CONFIG_SYSCTL_SYSCALL_CHECK is not set
  18.791 +CONFIG_USER_STACKTRACE_SUPPORT=y
  18.792 +CONFIG_HAVE_FUNCTION_TRACER=y
  18.793 +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
  18.794 +CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y
  18.795 +CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
  18.796 +CONFIG_HAVE_DYNAMIC_FTRACE=y
  18.797 +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
  18.798 +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
  18.799 +CONFIG_HAVE_C_RECORDMCOUNT=y
  18.800 +CONFIG_TRACING_SUPPORT=y
  18.801 +# CONFIG_FTRACE is not set
  18.802 +# CONFIG_DMA_API_DEBUG is not set
  18.803 +# CONFIG_ATOMIC64_SELFTEST is not set
  18.804 +# CONFIG_SAMPLES is not set
  18.805 +CONFIG_HAVE_ARCH_KGDB=y
  18.806 +CONFIG_HAVE_ARCH_KMEMCHECK=y
  18.807 +# CONFIG_STRICT_DEVMEM is not set
  18.808 +# CONFIG_X86_VERBOSE_BOOTUP is not set
  18.809 +# CONFIG_EARLY_PRINTK is not set
  18.810 +# CONFIG_DOUBLEFAULT is not set
  18.811 +# CONFIG_IOMMU_STRESS is not set
  18.812 +CONFIG_HAVE_MMIOTRACE_SUPPORT=y
  18.813 +CONFIG_IO_DELAY_TYPE_0X80=0
  18.814 +CONFIG_IO_DELAY_TYPE_0XED=1
  18.815 +CONFIG_IO_DELAY_TYPE_UDELAY=2
  18.816 +CONFIG_IO_DELAY_TYPE_NONE=3
  18.817 +CONFIG_IO_DELAY_0X80=y
  18.818 +# CONFIG_IO_DELAY_0XED is not set
  18.819 +# CONFIG_IO_DELAY_UDELAY is not set
  18.820 +# CONFIG_IO_DELAY_NONE is not set
  18.821 +CONFIG_DEFAULT_IO_DELAY_TYPE=0
  18.822 +CONFIG_OPTIMIZE_INLINING=y
  18.823 +
  18.824 +#
  18.825 +# Security options
  18.826 +#
  18.827 +# CONFIG_KEYS is not set
  18.828 +# CONFIG_SECURITY_DMESG_RESTRICT is not set
  18.829 +# CONFIG_SECURITYFS is not set
  18.830 +CONFIG_DEFAULT_SECURITY_DAC=y
  18.831 +CONFIG_DEFAULT_SECURITY=""
  18.832 +# CONFIG_CRYPTO is not set
  18.833 +CONFIG_HAVE_KVM=y
  18.834 +# CONFIG_VIRTUALIZATION is not set
  18.835 +CONFIG_VIRTIO=y
  18.836 +CONFIG_VIRTIO_RING=y
  18.837 +# CONFIG_BINARY_PRINTF is not set
  18.838 +
  18.839 +#
  18.840 +# Library routines
  18.841 +#
  18.842 +CONFIG_BITREVERSE=y
  18.843 +CONFIG_GENERIC_FIND_FIRST_BIT=y
  18.844 +CONFIG_GENERIC_FIND_NEXT_BIT=y
  18.845 +CONFIG_GENERIC_FIND_LAST_BIT=y
  18.846 +CONFIG_CRC_CCITT=y
  18.847 +# CONFIG_CRC16 is not set
  18.848 +# CONFIG_CRC_T10DIF is not set
  18.849 +# CONFIG_CRC_ITU_T is not set
  18.850 +CONFIG_CRC32=y
  18.851 +# CONFIG_CRC7 is not set
  18.852 +# CONFIG_LIBCRC32C is not set
  18.853 +CONFIG_ZLIB_INFLATE=y
  18.854 +# CONFIG_XZ_DEC is not set
  18.855 +# CONFIG_XZ_DEC_BCJ is not set
  18.856 +CONFIG_DECOMPRESS_GZIP=y
  18.857 +CONFIG_DECOMPRESS_LZMA=y
  18.858 +CONFIG_HAS_IOMEM=y
  18.859 +CONFIG_HAS_IOPORT=y
  18.860 +CONFIG_HAS_DMA=y
  18.861 +CONFIG_NLATTR=y
    19.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    19.2 +++ b/kernel-modular/stuff/linux-2.6.37-slitaz.config-i486-modular	Tue Feb 01 09:37:33 2011 +0100
    19.3 @@ -0,0 +1,4737 @@
    19.4 +#
    19.5 +# Automatically generated make config: don't edit
    19.6 +# Linux/i386 2.6.37 Kernel Configuration
    19.7 +# Mon Jan 31 15:19:41 2011
    19.8 +#
    19.9 +# CONFIG_64BIT is not set
   19.10 +CONFIG_X86_32=y
   19.11 +# CONFIG_X86_64 is not set
   19.12 +CONFIG_X86=y
   19.13 +CONFIG_INSTRUCTION_DECODER=y
   19.14 +CONFIG_OUTPUT_FORMAT="elf32-i386"
   19.15 +CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"
   19.16 +CONFIG_GENERIC_CMOS_UPDATE=y
   19.17 +CONFIG_CLOCKSOURCE_WATCHDOG=y
   19.18 +CONFIG_GENERIC_CLOCKEVENTS=y
   19.19 +CONFIG_LOCKDEP_SUPPORT=y
   19.20 +CONFIG_STACKTRACE_SUPPORT=y
   19.21 +CONFIG_HAVE_LATENCYTOP_SUPPORT=y
   19.22 +CONFIG_MMU=y
   19.23 +CONFIG_ZONE_DMA=y
   19.24 +# CONFIG_NEED_DMA_MAP_STATE is not set
   19.25 +CONFIG_NEED_SG_DMA_LENGTH=y
   19.26 +CONFIG_GENERIC_ISA_DMA=y
   19.27 +CONFIG_GENERIC_IOMAP=y
   19.28 +CONFIG_GENERIC_HWEIGHT=y
   19.29 +CONFIG_GENERIC_GPIO=y
   19.30 +CONFIG_ARCH_MAY_HAVE_PC_FDC=y
   19.31 +CONFIG_RWSEM_GENERIC_SPINLOCK=y
   19.32 +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
   19.33 +CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
   19.34 +CONFIG_GENERIC_CALIBRATE_DELAY=y
   19.35 +# CONFIG_GENERIC_TIME_VSYSCALL is not set
   19.36 +CONFIG_ARCH_HAS_CPU_RELAX=y
   19.37 +CONFIG_ARCH_HAS_DEFAULT_IDLE=y
   19.38 +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
   19.39 +CONFIG_HAVE_SETUP_PER_CPU_AREA=y
   19.40 +CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
   19.41 +CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
   19.42 +# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set
   19.43 +CONFIG_ARCH_HIBERNATION_POSSIBLE=y
   19.44 +CONFIG_ARCH_SUSPEND_POSSIBLE=y
   19.45 +# CONFIG_ZONE_DMA32 is not set
   19.46 +CONFIG_ARCH_POPULATES_NODE_MAP=y
   19.47 +# CONFIG_AUDIT_ARCH is not set
   19.48 +CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
   19.49 +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
   19.50 +CONFIG_X86_32_LAZY_GS=y
   19.51 +CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-ecx -fcall-saved-edx"
   19.52 +CONFIG_KTIME_SCALAR=y
   19.53 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
   19.54 +CONFIG_CONSTRUCTORS=y
   19.55 +CONFIG_HAVE_IRQ_WORK=y
   19.56 +CONFIG_IRQ_WORK=y
   19.57 +
   19.58 +#
   19.59 +# General setup
   19.60 +#
   19.61 +CONFIG_EXPERIMENTAL=y
   19.62 +CONFIG_BROKEN_ON_SMP=y
   19.63 +CONFIG_INIT_ENV_ARG_LIMIT=32
   19.64 +CONFIG_CROSS_COMPILE=""
   19.65 +CONFIG_LOCALVERSION="-slitaz"
   19.66 +# CONFIG_LOCALVERSION_AUTO is not set
   19.67 +CONFIG_HAVE_KERNEL_GZIP=y
   19.68 +CONFIG_HAVE_KERNEL_BZIP2=y
   19.69 +CONFIG_HAVE_KERNEL_LZMA=y
   19.70 +CONFIG_HAVE_KERNEL_XZ=y
   19.71 +CONFIG_HAVE_KERNEL_LZO=y
   19.72 +# CONFIG_KERNEL_GZIP is not set
   19.73 +# CONFIG_KERNEL_BZIP2 is not set
   19.74 +CONFIG_KERNEL_LZMA=y
   19.75 +# CONFIG_KERNEL_XZ is not set
   19.76 +# CONFIG_KERNEL_LZO is not set
   19.77 +# CONFIG_SWAP is not set
   19.78 +CONFIG_SYSVIPC=y
   19.79 +CONFIG_SYSVIPC_SYSCTL=y
   19.80 +# CONFIG_POSIX_MQUEUE is not set
   19.81 +# CONFIG_BSD_PROCESS_ACCT is not set
   19.82 +# CONFIG_TASKSTATS is not set
   19.83 +# CONFIG_AUDIT is not set
   19.84 +CONFIG_HAVE_GENERIC_HARDIRQS=y
   19.85 +
   19.86 +#
   19.87 +# IRQ subsystem
   19.88 +#
   19.89 +CONFIG_GENERIC_HARDIRQS=y
   19.90 +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
   19.91 +# CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED is not set
   19.92 +CONFIG_HAVE_SPARSE_IRQ=y
   19.93 +CONFIG_GENERIC_IRQ_PROBE=y
   19.94 +# CONFIG_GENERIC_PENDING_IRQ is not set
   19.95 +# CONFIG_AUTO_IRQ_AFFINITY is not set
   19.96 +# CONFIG_IRQ_PER_CPU is not set
   19.97 +# CONFIG_HARDIRQS_SW_RESEND is not set
   19.98 +# CONFIG_SPARSE_IRQ is not set
   19.99 +
  19.100 +#
  19.101 +# RCU Subsystem
  19.102 +#
  19.103 +CONFIG_TINY_RCU=y
  19.104 +# CONFIG_PREEMPT_RCU is not set
  19.105 +# CONFIG_TREE_RCU_TRACE is not set
  19.106 +CONFIG_IKCONFIG=y
  19.107 +CONFIG_IKCONFIG_PROC=y
  19.108 +CONFIG_LOG_BUF_SHIFT=12
  19.109 +CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
  19.110 +# CONFIG_CGROUPS is not set
  19.111 +# CONFIG_NAMESPACES is not set
  19.112 +# CONFIG_SYSFS_DEPRECATED is not set
  19.113 +# CONFIG_RELAY is not set
  19.114 +CONFIG_BLK_DEV_INITRD=y
  19.115 +CONFIG_INITRAMFS_SOURCE="rootfs.cpio"
  19.116 +CONFIG_INITRAMFS_ROOT_UID=0
  19.117 +CONFIG_INITRAMFS_ROOT_GID=0
  19.118 +CONFIG_RD_GZIP=y
  19.119 +# CONFIG_RD_BZIP2 is not set
  19.120 +CONFIG_RD_LZMA=y
  19.121 +# CONFIG_RD_LZO is not set
  19.122 +CONFIG_INITRAMFS_COMPRESSION_NONE=y
  19.123 +# CONFIG_INITRAMFS_COMPRESSION_GZIP is not set
  19.124 +# CONFIG_INITRAMFS_COMPRESSION_LZMA is not set
  19.125 +CONFIG_CC_OPTIMIZE_FOR_SIZE=y
  19.126 +CONFIG_SYSCTL=y
  19.127 +CONFIG_ANON_INODES=y
  19.128 +CONFIG_EMBEDDED=y
  19.129 +# CONFIG_UID16 is not set
  19.130 +# CONFIG_SYSCTL_SYSCALL is not set
  19.131 +# CONFIG_KALLSYMS is not set
  19.132 +# CONFIG_HOTPLUG is not set
  19.133 +CONFIG_PRINTK=y
  19.134 +# CONFIG_BUG is not set
  19.135 +# CONFIG_ELF_CORE is not set
  19.136 +CONFIG_PCSPKR_PLATFORM=y
  19.137 +# CONFIG_BASE_FULL is not set
  19.138 +CONFIG_FUTEX=y
  19.139 +# CONFIG_EPOLL is not set
  19.140 +# CONFIG_SIGNALFD is not set
  19.141 +# CONFIG_TIMERFD is not set
  19.142 +CONFIG_EVENTFD=y
  19.143 +# CONFIG_SHMEM is not set
  19.144 +# CONFIG_AIO is not set
  19.145 +CONFIG_HAVE_PERF_EVENTS=y
  19.146 +
  19.147 +#
  19.148 +# Kernel Performance Events And Counters
  19.149 +#
  19.150 +CONFIG_PERF_EVENTS=y
  19.151 +# CONFIG_PERF_COUNTERS is not set
  19.152 +# CONFIG_VM_EVENT_COUNTERS is not set
  19.153 +CONFIG_PCI_QUIRKS=y
  19.154 +CONFIG_COMPAT_BRK=y
  19.155 +# CONFIG_SLAB is not set
  19.156 +# CONFIG_SLUB is not set
  19.157 +CONFIG_SLOB=y
  19.158 +# CONFIG_PROFILING is not set
  19.159 +CONFIG_HAVE_OPROFILE=y
  19.160 +# CONFIG_KPROBES is not set
  19.161 +# CONFIG_JUMP_LABEL is not set
  19.162 +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
  19.163 +CONFIG_USER_RETURN_NOTIFIER=y
  19.164 +CONFIG_HAVE_IOREMAP_PROT=y
  19.165 +CONFIG_HAVE_KPROBES=y
  19.166 +CONFIG_HAVE_KRETPROBES=y
  19.167 +CONFIG_HAVE_OPTPROBES=y
  19.168 +CONFIG_HAVE_ARCH_TRACEHOOK=y
  19.169 +CONFIG_HAVE_DMA_ATTRS=y
  19.170 +CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
  19.171 +CONFIG_HAVE_DMA_API_DEBUG=y
  19.172 +CONFIG_HAVE_HW_BREAKPOINT=y
  19.173 +CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y
  19.174 +CONFIG_HAVE_USER_RETURN_NOTIFIER=y
  19.175 +CONFIG_HAVE_PERF_EVENTS_NMI=y
  19.176 +CONFIG_HAVE_ARCH_JUMP_LABEL=y
  19.177 +
  19.178 +#
  19.179 +# GCOV-based kernel profiling
  19.180 +#
  19.181 +CONFIG_HAVE_GENERIC_DMA_COHERENT=y
  19.182 +CONFIG_RT_MUTEXES=y
  19.183 +CONFIG_BASE_SMALL=1
  19.184 +CONFIG_MODULES=y
  19.185 +# CONFIG_MODULE_FORCE_LOAD is not set
  19.186 +CONFIG_MODULE_UNLOAD=y
  19.187 +# CONFIG_MODULE_FORCE_UNLOAD is not set
  19.188 +# CONFIG_MODVERSIONS is not set
  19.189 +# CONFIG_MODULE_SRCVERSION_ALL is not set
  19.190 +CONFIG_BLOCK=y
  19.191 +# CONFIG_LBDAF is not set
  19.192 +CONFIG_BLK_DEV_BSG=y
  19.193 +# CONFIG_BLK_DEV_INTEGRITY is not set
  19.194 +
  19.195 +#
  19.196 +# IO Schedulers
  19.197 +#
  19.198 +CONFIG_IOSCHED_NOOP=y
  19.199 +# CONFIG_IOSCHED_DEADLINE is not set
  19.200 +# CONFIG_IOSCHED_CFQ is not set
  19.201 +CONFIG_DEFAULT_NOOP=y
  19.202 +CONFIG_DEFAULT_IOSCHED="noop"
  19.203 +CONFIG_PREEMPT_NOTIFIERS=y
  19.204 +# CONFIG_INLINE_SPIN_TRYLOCK is not set
  19.205 +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
  19.206 +# CONFIG_INLINE_SPIN_LOCK is not set
  19.207 +# CONFIG_INLINE_SPIN_LOCK_BH is not set
  19.208 +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
  19.209 +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
  19.210 +CONFIG_INLINE_SPIN_UNLOCK=y
  19.211 +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
  19.212 +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
  19.213 +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
  19.214 +# CONFIG_INLINE_READ_TRYLOCK is not set
  19.215 +# CONFIG_INLINE_READ_LOCK is not set
  19.216 +# CONFIG_INLINE_READ_LOCK_BH is not set
  19.217 +# CONFIG_INLINE_READ_LOCK_IRQ is not set
  19.218 +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
  19.219 +CONFIG_INLINE_READ_UNLOCK=y
  19.220 +# CONFIG_INLINE_READ_UNLOCK_BH is not set
  19.221 +CONFIG_INLINE_READ_UNLOCK_IRQ=y
  19.222 +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
  19.223 +# CONFIG_INLINE_WRITE_TRYLOCK is not set
  19.224 +# CONFIG_INLINE_WRITE_LOCK is not set
  19.225 +# CONFIG_INLINE_WRITE_LOCK_BH is not set
  19.226 +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
  19.227 +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
  19.228 +CONFIG_INLINE_WRITE_UNLOCK=y
  19.229 +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
  19.230 +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
  19.231 +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
  19.232 +# CONFIG_MUTEX_SPIN_ON_OWNER is not set
  19.233 +# CONFIG_FREEZER is not set
  19.234 +
  19.235 +#
  19.236 +# Processor type and features
  19.237 +#
  19.238 +# CONFIG_NO_HZ is not set
  19.239 +# CONFIG_HIGH_RES_TIMERS is not set
  19.240 +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
  19.241 +# CONFIG_SMP is not set
  19.242 +# CONFIG_X86_EXTENDED_PLATFORM is not set
  19.243 +CONFIG_SCHED_OMIT_FRAME_POINTER=y
  19.244 +# CONFIG_PARAVIRT_GUEST is not set
  19.245 +CONFIG_NO_BOOTMEM=y
  19.246 +# CONFIG_MEMTEST is not set
  19.247 +CONFIG_M386=y
  19.248 +# CONFIG_M486 is not set
  19.249 +# CONFIG_M586 is not set
  19.250 +# CONFIG_M586TSC is not set
  19.251 +# CONFIG_M586MMX is not set
  19.252 +# CONFIG_M686 is not set
  19.253 +# CONFIG_MPENTIUMII is not set
  19.254 +# CONFIG_MPENTIUMIII is not set
  19.255 +# CONFIG_MPENTIUMM is not set
  19.256 +# CONFIG_MPENTIUM4 is not set
  19.257 +# CONFIG_MK6 is not set
  19.258 +# CONFIG_MK7 is not set
  19.259 +# CONFIG_MK8 is not set
  19.260 +# CONFIG_MCRUSOE is not set
  19.261 +# CONFIG_MEFFICEON is not set
  19.262 +# CONFIG_MWINCHIPC6 is not set
  19.263 +# CONFIG_MWINCHIP3D is not set
  19.264 +# CONFIG_MGEODEGX1 is not set
  19.265 +# CONFIG_MGEODE_LX is not set
  19.266 +# CONFIG_MCYRIXIII is not set
  19.267 +# CONFIG_MVIAC3_2 is not set
  19.268 +# CONFIG_MVIAC7 is not set
  19.269 +# CONFIG_MCORE2 is not set
  19.270 +# CONFIG_MATOM is not set
  19.271 +# CONFIG_X86_GENERIC is not set
  19.272 +CONFIG_X86_CPU=y
  19.273 +CONFIG_X86_INTERNODE_CACHE_SHIFT=4
  19.274 +# CONFIG_X86_CMPXCHG is not set
  19.275 +CONFIG_X86_L1_CACHE_SHIFT=4
  19.276 +# CONFIG_X86_PPRO_FENCE is not set
  19.277 +CONFIG_X86_F00F_BUG=y
  19.278 +CONFIG_X86_INVD_BUG=y
  19.279 +CONFIG_X86_MINIMUM_CPU_FAMILY=3
  19.280 +# CONFIG_PROCESSOR_SELECT is not set
  19.281 +CONFIG_CPU_SUP_INTEL=y
  19.282 +CONFIG_CPU_SUP_CYRIX_32=y
  19.283 +CONFIG_CPU_SUP_AMD=y
  19.284 +CONFIG_CPU_SUP_CENTAUR=y
  19.285 +CONFIG_CPU_SUP_TRANSMETA_32=y
  19.286 +CONFIG_CPU_SUP_UMC_32=y
  19.287 +# CONFIG_HPET_TIMER is not set
  19.288 +# CONFIG_DMI is not set
  19.289 +# CONFIG_IOMMU_HELPER is not set
  19.290 +# CONFIG_IOMMU_API is not set
  19.291 +CONFIG_NR_CPUS=1
  19.292 +# CONFIG_IRQ_TIME_ACCOUNTING is not set
  19.293 +CONFIG_PREEMPT_NONE=y
  19.294 +# CONFIG_PREEMPT_VOLUNTARY is not set
  19.295 +# CONFIG_PREEMPT is not set
  19.296 +# CONFIG_X86_UP_APIC is not set
  19.297 +# CONFIG_X86_MCE is not set
  19.298 +# CONFIG_VM86 is not set
  19.299 +# CONFIG_TOSHIBA is not set
  19.300 +# CONFIG_I8K is not set
  19.301 +# CONFIG_X86_REBOOTFIXUPS is not set
  19.302 +# CONFIG_MICROCODE is not set
  19.303 +# CONFIG_X86_MSR is not set
  19.304 +# CONFIG_X86_CPUID is not set
  19.305 +CONFIG_NOHIGHMEM=y
  19.306 +# CONFIG_HIGHMEM4G is not set
  19.307 +CONFIG_VMSPLIT_3G=y
  19.308 +# CONFIG_VMSPLIT_3G_OPT is not set
  19.309 +# CONFIG_VMSPLIT_2G is not set
  19.310 +# CONFIG_VMSPLIT_2G_OPT is not set
  19.311 +# CONFIG_VMSPLIT_1G is not set
  19.312 +CONFIG_PAGE_OFFSET=0xC0000000
  19.313 +# CONFIG_X86_PAE is not set
  19.314 +# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
  19.315 +# CONFIG_ARCH_DMA_ADDR_T_64BIT is not set
  19.316 +CONFIG_ARCH_FLATMEM_ENABLE=y
  19.317 +CONFIG_ARCH_SPARSEMEM_ENABLE=y
  19.318 +CONFIG_ARCH_SELECT_MEMORY_MODEL=y
  19.319 +CONFIG_ILLEGAL_POINTER_VALUE=0
  19.320 +CONFIG_SELECT_MEMORY_MODEL=y
  19.321 +CONFIG_FLATMEM_MANUAL=y
  19.322 +# CONFIG_SPARSEMEM_MANUAL is not set
  19.323 +CONFIG_FLATMEM=y
  19.324 +CONFIG_FLAT_NODE_MEM_MAP=y
  19.325 +CONFIG_SPARSEMEM_STATIC=y
  19.326 +CONFIG_HAVE_MEMBLOCK=y
  19.327 +CONFIG_PAGEFLAGS_EXTENDED=y
  19.328 +CONFIG_SPLIT_PTLOCK_CPUS=4
  19.329 +# CONFIG_PHYS_ADDR_T_64BIT is not set
  19.330 +CONFIG_ZONE_DMA_FLAG=1
  19.331 +CONFIG_BOUNCE=y
  19.332 +CONFIG_VIRT_TO_BUS=y
  19.333 +CONFIG_MMU_NOTIFIER=y
  19.334 +# CONFIG_KSM is not set
  19.335 +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
  19.336 +CONFIG_NEED_PER_CPU_KM=y
  19.337 +# CONFIG_X86_CHECK_BIOS_CORRUPTION is not set
  19.338 +CONFIG_X86_RESERVE_LOW=64
  19.339 +CONFIG_MATH_EMULATION=y
  19.340 +# CONFIG_MTRR is not set
  19.341 +# CONFIG_SECCOMP is not set
  19.342 +# CONFIG_CC_STACKPROTECTOR is not set
  19.343 +CONFIG_HZ_100=y
  19.344 +# CONFIG_HZ_250 is not set
  19.345 +# CONFIG_HZ_300 is not set
  19.346 +# CONFIG_HZ_1000 is not set
  19.347 +CONFIG_HZ=100
  19.348 +# CONFIG_SCHED_HRTICK is not set
  19.349 +# CONFIG_KEXEC is not set
  19.350 +CONFIG_PHYSICAL_START=0x100000
  19.351 +# CONFIG_RELOCATABLE is not set
  19.352 +CONFIG_PHYSICAL_ALIGN=0x100000
  19.353 +# CONFIG_COMPAT_VDSO is not set
  19.354 +# CONFIG_CMDLINE_BOOL is not set
  19.355 +
  19.356 +#
  19.357 +# Power management and ACPI options
  19.358 +#
  19.359 +# CONFIG_PM is not set
  19.360 +# CONFIG_SFI is not set
  19.361 +
  19.362 +#
  19.363 +# CPU Frequency scaling
  19.364 +#
  19.365 +# CONFIG_CPU_FREQ is not set
  19.366 +# CONFIG_CPU_IDLE is not set
  19.367 +
  19.368 +#
  19.369 +# Bus options (PCI etc.)
  19.370 +#
  19.371 +CONFIG_PCI=y
  19.372 +# CONFIG_PCI_GOBIOS is not set
  19.373 +# CONFIG_PCI_GOMMCONFIG is not set
  19.374 +# CONFIG_PCI_GODIRECT is not set
  19.375 +CONFIG_PCI_GOANY=y
  19.376 +CONFIG_PCI_BIOS=y
  19.377 +CONFIG_PCI_DIRECT=y
  19.378 +CONFIG_PCI_DOMAINS=y
  19.379 +# CONFIG_PCI_CNB20LE_QUIRK is not set
  19.380 +# CONFIG_PCIEPORTBUS is not set
  19.381 +# CONFIG_ARCH_SUPPORTS_MSI is not set
  19.382 +# CONFIG_PCI_STUB is not set
  19.383 +# CONFIG_PCI_IOV is not set
  19.384 +CONFIG_ISA_DMA_API=y
  19.385 +CONFIG_ISA=y
  19.386 +# CONFIG_EISA is not set
  19.387 +# CONFIG_MCA is not set
  19.388 +# CONFIG_SCx200 is not set
  19.389 +# CONFIG_OLPC is not set
  19.390 +# CONFIG_OLPC_OPENFIRMWARE is not set
  19.391 +CONFIG_AMD_NB=y
  19.392 +
  19.393 +#
  19.394 +# Executable file formats / Emulations
  19.395 +#
  19.396 +CONFIG_BINFMT_ELF=y
  19.397 +CONFIG_HAVE_AOUT=y
  19.398 +CONFIG_BINFMT_AOUT=m
  19.399 +CONFIG_BINFMT_MISC=m
  19.400 +CONFIG_HAVE_ATOMIC_IOMAP=y
  19.401 +CONFIG_HAVE_TEXT_POKE_SMP=y
  19.402 +CONFIG_NET=y
  19.403 +
  19.404 +#
  19.405 +# Networking options
  19.406 +#
  19.407 +CONFIG_PACKET=y
  19.408 +CONFIG_UNIX=y
  19.409 +CONFIG_XFRM=y
  19.410 +# CONFIG_XFRM_USER is not set
  19.411 +# CONFIG_XFRM_SUB_POLICY is not set
  19.412 +# CONFIG_XFRM_MIGRATE is not set
  19.413 +# CONFIG_XFRM_STATISTICS is not set
  19.414 +CONFIG_XFRM_IPCOMP=m
  19.415 +# CONFIG_NET_KEY is not set
  19.416 +CONFIG_INET=y
  19.417 +# CONFIG_IP_MULTICAST is not set
  19.418 +# CONFIG_IP_ADVANCED_ROUTER is not set
  19.419 +CONFIG_IP_FIB_HASH=y
  19.420 +# CONFIG_IP_PNP is not set
  19.421 +CONFIG_NET_IPIP=m
  19.422 +# CONFIG_NET_IPGRE_DEMUX is not set
  19.423 +# CONFIG_ARPD is not set
  19.424 +# CONFIG_SYN_COOKIES is not set
  19.425 +CONFIG_INET_AH=m
  19.426 +CONFIG_INET_ESP=m
  19.427 +CONFIG_INET_IPCOMP=m
  19.428 +CONFIG_INET_XFRM_TUNNEL=m
  19.429 +CONFIG_INET_TUNNEL=m
  19.430 +CONFIG_INET_XFRM_MODE_TRANSPORT=m
  19.431 +CONFIG_INET_XFRM_MODE_TUNNEL=m
  19.432 +CONFIG_INET_XFRM_MODE_BEET=m
  19.433 +CONFIG_INET_LRO=y
  19.434 +# CONFIG_INET_DIAG is not set
  19.435 +# CONFIG_TCP_CONG_ADVANCED is not set
  19.436 +CONFIG_TCP_CONG_CUBIC=y
  19.437 +CONFIG_DEFAULT_TCP_CONG="cubic"
  19.438 +# CONFIG_TCP_MD5SIG is not set
  19.439 +CONFIG_IPV6=m
  19.440 +# CONFIG_IPV6_PRIVACY is not set
  19.441 +# CONFIG_IPV6_ROUTER_PREF is not set
  19.442 +# CONFIG_IPV6_OPTIMISTIC_DAD is not set
  19.443 +CONFIG_INET6_AH=m
  19.444 +CONFIG_INET6_ESP=m
  19.445 +CONFIG_INET6_IPCOMP=m
  19.446 +# CONFIG_IPV6_MIP6 is not set
  19.447 +CONFIG_INET6_XFRM_TUNNEL=m
  19.448 +CONFIG_INET6_TUNNEL=m
  19.449 +CONFIG_INET6_XFRM_MODE_TRANSPORT=m
  19.450 +CONFIG_INET6_XFRM_MODE_TUNNEL=m
  19.451 +CONFIG_INET6_XFRM_MODE_BEET=m
  19.452 +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
  19.453 +CONFIG_IPV6_SIT=m
  19.454 +# CONFIG_IPV6_SIT_6RD is not set
  19.455 +CONFIG_IPV6_NDISC_NODETYPE=y
  19.456 +CONFIG_IPV6_TUNNEL=m
  19.457 +# CONFIG_IPV6_MULTIPLE_TABLES is not set
  19.458 +# CONFIG_IPV6_MROUTE is not set
  19.459 +# CONFIG_NETWORK_SECMARK is not set
  19.460 +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
  19.461 +CONFIG_NETFILTER=y
  19.462 +# CONFIG_NETFILTER_DEBUG is not set
  19.463 +CONFIG_NETFILTER_ADVANCED=y
  19.464 +CONFIG_BRIDGE_NETFILTER=y
  19.465 +
  19.466 +#
  19.467 +# Core Netfilter Configuration
  19.468 +#
  19.469 +CONFIG_NETFILTER_NETLINK=m
  19.470 +CONFIG_NETFILTER_NETLINK_QUEUE=m
  19.471 +CONFIG_NETFILTER_NETLINK_LOG=m
  19.472 +CONFIG_NF_CONNTRACK=m
  19.473 +CONFIG_NF_CONNTRACK_MARK=y
  19.474 +CONFIG_NF_CONNTRACK_EVENTS=y
  19.475 +CONFIG_NF_CT_PROTO_DCCP=m
  19.476 +CONFIG_NF_CT_PROTO_GRE=m
  19.477 +CONFIG_NF_CT_PROTO_SCTP=m
  19.478 +CONFIG_NF_CT_PROTO_UDPLITE=m
  19.479 +CONFIG_NF_CONNTRACK_AMANDA=m
  19.480 +CONFIG_NF_CONNTRACK_FTP=m
  19.481 +CONFIG_NF_CONNTRACK_H323=m
  19.482 +CONFIG_NF_CONNTRACK_IRC=m
  19.483 +CONFIG_NF_CONNTRACK_NETBIOS_NS=m
  19.484 +CONFIG_NF_CONNTRACK_PPTP=m
  19.485 +CONFIG_NF_CONNTRACK_SANE=m
  19.486 +CONFIG_NF_CONNTRACK_SIP=m
  19.487 +CONFIG_NF_CONNTRACK_TFTP=m
  19.488 +CONFIG_NF_CT_NETLINK=m
  19.489 +# CONFIG_NETFILTER_TPROXY is not set
  19.490 +CONFIG_NETFILTER_XTABLES=m
  19.491 +
  19.492 +#
  19.493 +# Xtables combined modules
  19.494 +#
  19.495 +CONFIG_NETFILTER_XT_MARK=m
  19.496 +CONFIG_NETFILTER_XT_CONNMARK=m
  19.497 +
  19.498 +#
  19.499 +# Xtables targets
  19.500 +#
  19.501 +# CONFIG_NETFILTER_XT_TARGET_CHECKSUM is not set
  19.502 +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
  19.503 +CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
  19.504 +# CONFIG_NETFILTER_XT_TARGET_CT is not set
  19.505 +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
  19.506 +CONFIG_NETFILTER_XT_TARGET_HL=m
  19.507 +# CONFIG_NETFILTER_XT_TARGET_IDLETIMER is not set
  19.508 +# CONFIG_NETFILTER_XT_TARGET_LED is not set
  19.509 +CONFIG_NETFILTER_XT_TARGET_MARK=m
  19.510 +CONFIG_NETFILTER_XT_TARGET_NFLOG=m
  19.511 +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
  19.512 +# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
  19.513 +CONFIG_NETFILTER_XT_TARGET_RATEEST=m
  19.514 +# CONFIG_NETFILTER_XT_TARGET_TEE is not set
  19.515 +# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
  19.516 +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
  19.517 +# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
  19.518 +
  19.519 +#
  19.520 +# Xtables matches
  19.521 +#
  19.522 +CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
  19.523 +CONFIG_NETFILTER_XT_MATCH_COMMENT=m
  19.524 +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
  19.525 +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
  19.526 +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
  19.527 +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
  19.528 +# CONFIG_NETFILTER_XT_MATCH_CPU is not set
  19.529 +CONFIG_NETFILTER_XT_MATCH_DCCP=m
  19.530 +CONFIG_NETFILTER_XT_MATCH_DSCP=m
  19.531 +CONFIG_NETFILTER_XT_MATCH_ESP=m
  19.532 +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
  19.533 +CONFIG_NETFILTER_XT_MATCH_HELPER=m
  19.534 +CONFIG_NETFILTER_XT_MATCH_HL=m
  19.535 +CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
  19.536 +# CONFIG_NETFILTER_XT_MATCH_IPVS is not set
  19.537 +CONFIG_NETFILTER_XT_MATCH_LENGTH=m
  19.538 +CONFIG_NETFILTER_XT_MATCH_LIMIT=m
  19.539 +CONFIG_NETFILTER_XT_MATCH_MAC=m
  19.540 +CONFIG_NETFILTER_XT_MATCH_MARK=m
  19.541 +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
  19.542 +CONFIG_NETFILTER_XT_MATCH_OSF=m
  19.543 +CONFIG_NETFILTER_XT_MATCH_OWNER=m
  19.544 +CONFIG_NETFILTER_XT_MATCH_POLICY=m
  19.545 +# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set
  19.546 +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
  19.547 +CONFIG_NETFILTER_XT_MATCH_QUOTA=m
  19.548 +CONFIG_NETFILTER_XT_MATCH_RATEEST=m
  19.549 +CONFIG_NETFILTER_XT_MATCH_REALM=m
  19.550 +CONFIG_NETFILTER_XT_MATCH_RECENT=m
  19.551 +CONFIG_NETFILTER_XT_MATCH_SCTP=m
  19.552 +CONFIG_NETFILTER_XT_MATCH_STATE=m
  19.553 +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
  19.554 +CONFIG_NETFILTER_XT_MATCH_STRING=m
  19.555 +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
  19.556 +CONFIG_NETFILTER_XT_MATCH_TIME=m
  19.557 +CONFIG_NETFILTER_XT_MATCH_U32=m
  19.558 +CONFIG_IP_VS=m
  19.559 +CONFIG_IP_VS_IPV6=y
  19.560 +# CONFIG_IP_VS_DEBUG is not set
  19.561 +CONFIG_IP_VS_TAB_BITS=12
  19.562 +
  19.563 +#
  19.564 +# IPVS transport protocol load balancing support
  19.565 +#
  19.566 +CONFIG_IP_VS_PROTO_TCP=y
  19.567 +CONFIG_IP_VS_PROTO_UDP=y
  19.568 +CONFIG_IP_VS_PROTO_AH_ESP=y
  19.569 +CONFIG_IP_VS_PROTO_ESP=y
  19.570 +CONFIG_IP_VS_PROTO_AH=y
  19.571 +CONFIG_IP_VS_PROTO_SCTP=y
  19.572 +
  19.573 +#
  19.574 +# IPVS scheduler
  19.575 +#
  19.576 +CONFIG_IP_VS_RR=m
  19.577 +CONFIG_IP_VS_WRR=m
  19.578 +CONFIG_IP_VS_LC=m
  19.579 +CONFIG_IP_VS_WLC=m
  19.580 +CONFIG_IP_VS_LBLC=m
  19.581 +CONFIG_IP_VS_LBLCR=m
  19.582 +CONFIG_IP_VS_DH=m
  19.583 +CONFIG_IP_VS_SH=m
  19.584 +CONFIG_IP_VS_SED=m
  19.585 +CONFIG_IP_VS_NQ=m
  19.586 +
  19.587 +#
  19.588 +# IPVS application helper
  19.589 +#
  19.590 +CONFIG_IP_VS_FTP=m
  19.591 +CONFIG_IP_VS_NFCT=y
  19.592 +# CONFIG_IP_VS_PE_SIP is not set
  19.593 +
  19.594 +#
  19.595 +# IP: Netfilter Configuration
  19.596 +#
  19.597 +CONFIG_NF_DEFRAG_IPV4=m
  19.598 +CONFIG_NF_CONNTRACK_IPV4=m
  19.599 +CONFIG_NF_CONNTRACK_PROC_COMPAT=y
  19.600 +CONFIG_IP_NF_QUEUE=m
  19.601 +CONFIG_IP_NF_IPTABLES=m
  19.602 +CONFIG_IP_NF_MATCH_ADDRTYPE=m
  19.603 +CONFIG_IP_NF_MATCH_AH=m
  19.604 +CONFIG_IP_NF_MATCH_ECN=m
  19.605 +CONFIG_IP_NF_MATCH_TTL=m
  19.606 +CONFIG_IP_NF_FILTER=m
  19.607 +CONFIG_IP_NF_TARGET_REJECT=m
  19.608 +CONFIG_IP_NF_TARGET_LOG=m
  19.609 +CONFIG_IP_NF_TARGET_ULOG=m
  19.610 +CONFIG_NF_NAT=m
  19.611 +CONFIG_NF_NAT_NEEDED=y
  19.612 +CONFIG_IP_NF_TARGET_MASQUERADE=m
  19.613 +CONFIG_IP_NF_TARGET_NETMAP=m
  19.614 +CONFIG_IP_NF_TARGET_REDIRECT=m
  19.615 +CONFIG_NF_NAT_SNMP_BASIC=m
  19.616 +CONFIG_NF_NAT_PROTO_DCCP=m
  19.617 +CONFIG_NF_NAT_PROTO_GRE=m
  19.618 +CONFIG_NF_NAT_PROTO_UDPLITE=m
  19.619 +CONFIG_NF_NAT_PROTO_SCTP=m
  19.620 +CONFIG_NF_NAT_FTP=m
  19.621 +CONFIG_NF_NAT_IRC=m
  19.622 +CONFIG_NF_NAT_TFTP=m
  19.623 +CONFIG_NF_NAT_AMANDA=m
  19.624 +CONFIG_NF_NAT_PPTP=m
  19.625 +CONFIG_NF_NAT_H323=m
  19.626 +CONFIG_NF_NAT_SIP=m
  19.627 +CONFIG_IP_NF_MANGLE=m
  19.628 +CONFIG_IP_NF_TARGET_CLUSTERIP=m
  19.629 +CONFIG_IP_NF_TARGET_ECN=m
  19.630 +CONFIG_IP_NF_TARGET_TTL=m
  19.631 +CONFIG_IP_NF_RAW=m
  19.632 +CONFIG_IP_NF_ARPTABLES=m
  19.633 +CONFIG_IP_NF_ARPFILTER=m
  19.634 +CONFIG_IP_NF_ARP_MANGLE=m
  19.635 +
  19.636 +#
  19.637 +# IPv6: Netfilter Configuration
  19.638 +#
  19.639 +CONFIG_NF_DEFRAG_IPV6=m
  19.640 +CONFIG_NF_CONNTRACK_IPV6=m
  19.641 +CONFIG_IP6_NF_QUEUE=m
  19.642 +CONFIG_IP6_NF_IPTABLES=m
  19.643 +CONFIG_IP6_NF_MATCH_AH=m
  19.644 +CONFIG_IP6_NF_MATCH_EUI64=m
  19.645 +CONFIG_IP6_NF_MATCH_FRAG=m
  19.646 +CONFIG_IP6_NF_MATCH_OPTS=m
  19.647 +CONFIG_IP6_NF_MATCH_HL=m
  19.648 +CONFIG_IP6_NF_MATCH_IPV6HEADER=m
  19.649 +CONFIG_IP6_NF_MATCH_MH=m
  19.650 +CONFIG_IP6_NF_MATCH_RT=m
  19.651 +CONFIG_IP6_NF_TARGET_HL=m
  19.652 +CONFIG_IP6_NF_TARGET_LOG=m
  19.653 +CONFIG_IP6_NF_FILTER=m
  19.654 +CONFIG_IP6_NF_TARGET_REJECT=m
  19.655 +CONFIG_IP6_NF_MANGLE=m
  19.656 +CONFIG_IP6_NF_RAW=m
  19.657 +# CONFIG_BRIDGE_NF_EBTABLES is not set
  19.658 +# CONFIG_IP_DCCP is not set
  19.659 +CONFIG_IP_SCTP=m
  19.660 +# CONFIG_SCTP_DBG_MSG is not set
  19.661 +# CONFIG_SCTP_DBG_OBJCNT is not set
  19.662 +# CONFIG_SCTP_HMAC_NONE is not set
  19.663 +# CONFIG_SCTP_HMAC_SHA1 is not set
  19.664 +CONFIG_SCTP_HMAC_MD5=y
  19.665 +# CONFIG_RDS is not set
  19.666 +# CONFIG_TIPC is not set
  19.667 +# CONFIG_ATM is not set
  19.668 +# CONFIG_L2TP is not set
  19.669 +CONFIG_STP=m
  19.670 +CONFIG_BRIDGE=m
  19.671 +CONFIG_BRIDGE_IGMP_SNOOPING=y
  19.672 +# CONFIG_NET_DSA is not set
  19.673 +CONFIG_VLAN_8021Q=m
  19.674 +# CONFIG_VLAN_8021Q_GVRP is not set
  19.675 +# CONFIG_DECNET is not set
  19.676 +CONFIG_LLC=m
  19.677 +# CONFIG_LLC2 is not set
  19.678 +CONFIG_IPX=m
  19.679 +# CONFIG_IPX_INTERN is not set
  19.680 +CONFIG_ATALK=m
  19.681 +CONFIG_DEV_APPLETALK=m
  19.682 +# CONFIG_LTPC is not set
  19.683 +# CONFIG_COPS is not set
  19.684 +CONFIG_IPDDP=m
  19.685 +CONFIG_IPDDP_ENCAP=y
  19.686 +CONFIG_IPDDP_DECAP=y
  19.687 +# CONFIG_X25 is not set
  19.688 +# CONFIG_LAPB is not set
  19.689 +# CONFIG_ECONET is not set
  19.690 +# CONFIG_WAN_ROUTER is not set
  19.691 +CONFIG_PHONET=m
  19.692 +# CONFIG_PHONET_PIPECTRLR is not set
  19.693 +# CONFIG_IEEE802154 is not set
  19.694 +CONFIG_NET_SCHED=y
  19.695 +
  19.696 +#
  19.697 +# Queueing/Scheduling
  19.698 +#
  19.699 +CONFIG_NET_SCH_CBQ=m
  19.700 +CONFIG_NET_SCH_HTB=m
  19.701 +CONFIG_NET_SCH_HFSC=m
  19.702 +CONFIG_NET_SCH_PRIO=m
  19.703 +CONFIG_NET_SCH_MULTIQ=m
  19.704 +CONFIG_NET_SCH_RED=m
  19.705 +CONFIG_NET_SCH_SFQ=m
  19.706 +CONFIG_NET_SCH_TEQL=m
  19.707 +CONFIG_NET_SCH_TBF=m
  19.708 +CONFIG_NET_SCH_GRED=m
  19.709 +CONFIG_NET_SCH_DSMARK=m
  19.710 +CONFIG_NET_SCH_NETEM=m
  19.711 +CONFIG_NET_SCH_DRR=m
  19.712 +# CONFIG_NET_SCH_INGRESS is not set
  19.713 +
  19.714 +#
  19.715 +# Classification
  19.716 +#
  19.717 +CONFIG_NET_CLS=y
  19.718 +CONFIG_NET_CLS_BASIC=m
  19.719 +CONFIG_NET_CLS_TCINDEX=m
  19.720 +CONFIG_NET_CLS_ROUTE4=m
  19.721 +CONFIG_NET_CLS_ROUTE=y
  19.722 +CONFIG_NET_CLS_FW=m
  19.723 +CONFIG_NET_CLS_U32=m
  19.724 +CONFIG_CLS_U32_PERF=y
  19.725 +CONFIG_CLS_U32_MARK=y
  19.726 +CONFIG_NET_CLS_RSVP=m
  19.727 +CONFIG_NET_CLS_RSVP6=m
  19.728 +CONFIG_NET_CLS_FLOW=m
  19.729 +CONFIG_NET_EMATCH=y
  19.730 +CONFIG_NET_EMATCH_STACK=32
  19.731 +CONFIG_NET_EMATCH_CMP=m
  19.732 +CONFIG_NET_EMATCH_NBYTE=m
  19.733 +CONFIG_NET_EMATCH_U32=m
  19.734 +CONFIG_NET_EMATCH_META=m
  19.735 +CONFIG_NET_EMATCH_TEXT=m
  19.736 +CONFIG_NET_CLS_ACT=y
  19.737 +CONFIG_NET_ACT_POLICE=m
  19.738 +CONFIG_NET_ACT_GACT=m
  19.739 +# CONFIG_GACT_PROB is not set
  19.740 +CONFIG_NET_ACT_MIRRED=m
  19.741 +CONFIG_NET_ACT_IPT=m
  19.742 +CONFIG_NET_ACT_NAT=m
  19.743 +CONFIG_NET_ACT_PEDIT=m
  19.744 +CONFIG_NET_ACT_SIMP=m
  19.745 +CONFIG_NET_ACT_SKBEDIT=m
  19.746 +# CONFIG_NET_ACT_CSUM is not set
  19.747 +CONFIG_NET_CLS_IND=y
  19.748 +CONFIG_NET_SCH_FIFO=y
  19.749 +# CONFIG_DCB is not set
  19.750 +CONFIG_DNS_RESOLVER=m
  19.751 +
  19.752 +#
  19.753 +# Network testing
  19.754 +#
  19.755 +# CONFIG_NET_PKTGEN is not set
  19.756 +# CONFIG_HAMRADIO is not set
  19.757 +# CONFIG_CAN is not set
  19.758 +CONFIG_IRDA=m
  19.759 +
  19.760 +#
  19.761 +# IrDA protocols
  19.762 +#
  19.763 +CONFIG_IRLAN=m
  19.764 +CONFIG_IRNET=m
  19.765 +CONFIG_IRCOMM=m
  19.766 +CONFIG_IRDA_ULTRA=y
  19.767 +
  19.768 +#
  19.769 +# IrDA options
  19.770 +#
  19.771 +CONFIG_IRDA_CACHE_LAST_LSAP=y
  19.772 +CONFIG_IRDA_FAST_RR=y
  19.773 +# CONFIG_IRDA_DEBUG is not set
  19.774 +
  19.775 +#
  19.776 +# Infrared-port device drivers
  19.777 +#
  19.778 +
  19.779 +#
  19.780 +# SIR device drivers
  19.781 +#
  19.782 +CONFIG_IRTTY_SIR=m
  19.783 +
  19.784 +#
  19.785 +# Dongle support
  19.786 +#
  19.787 +CONFIG_DONGLE=y
  19.788 +CONFIG_ESI_DONGLE=m
  19.789 +CONFIG_ACTISYS_DONGLE=m
  19.790 +CONFIG_TEKRAM_DONGLE=m
  19.791 +CONFIG_TOIM3232_DONGLE=m
  19.792 +CONFIG_LITELINK_DONGLE=m
  19.793 +CONFIG_MA600_DONGLE=m
  19.794 +CONFIG_GIRBIL_DONGLE=m
  19.795 +CONFIG_MCP2120_DONGLE=m
  19.796 +CONFIG_OLD_BELKIN_DONGLE=m
  19.797 +CONFIG_ACT200L_DONGLE=m
  19.798 +# CONFIG_KINGSUN_DONGLE is not set
  19.799 +# CONFIG_KSDAZZLE_DONGLE is not set
  19.800 +# CONFIG_KS959_DONGLE is not set
  19.801 +
  19.802 +#
  19.803 +# FIR device drivers
  19.804 +#
  19.805 +# CONFIG_USB_IRDA is not set
  19.806 +# CONFIG_SIGMATEL_FIR is not set
  19.807 +CONFIG_NSC_FIR=m
  19.808 +CONFIG_WINBOND_FIR=m
  19.809 +CONFIG_TOSHIBA_FIR=m
  19.810 +CONFIG_SMC_IRCC_FIR=m
  19.811 +CONFIG_ALI_FIR=m
  19.812 +CONFIG_VLSI_FIR=m
  19.813 +CONFIG_VIA_FIR=m
  19.814 +# CONFIG_MCS_FIR is not set
  19.815 +CONFIG_BT=m
  19.816 +CONFIG_BT_L2CAP=m
  19.817 +CONFIG_BT_SCO=m
  19.818 +CONFIG_BT_RFCOMM=m
  19.819 +CONFIG_BT_RFCOMM_TTY=y
  19.820 +CONFIG_BT_BNEP=m
  19.821 +CONFIG_BT_BNEP_MC_FILTER=y
  19.822 +CONFIG_BT_BNEP_PROTO_FILTER=y
  19.823 +# CONFIG_BT_CMTP is not set
  19.824 +CONFIG_BT_HIDP=m
  19.825 +
  19.826 +#
  19.827 +# Bluetooth device drivers
  19.828 +#
  19.829 +# CONFIG_BT_HCIBTUSB is not set
  19.830 +# CONFIG_BT_HCIBTSDIO is not set
  19.831 +CONFIG_BT_HCIUART=m
  19.832 +CONFIG_BT_HCIUART_H4=y
  19.833 +CONFIG_BT_HCIUART_BCSP=y
  19.834 +# CONFIG_BT_HCIUART_ATH3K is not set
  19.835 +CONFIG_BT_HCIUART_LL=y
  19.836 +# CONFIG_BT_HCIBCM203X is not set
  19.837 +# CONFIG_BT_HCIBPA10X is not set
  19.838 +# CONFIG_BT_HCIBFUSB is not set
  19.839 +CONFIG_BT_HCIVHCI=m
  19.840 +CONFIG_BT_MRVL=m
  19.841 +# CONFIG_BT_MRVL_SDIO is not set
  19.842 +CONFIG_AF_RXRPC=m
  19.843 +# CONFIG_AF_RXRPC_DEBUG is not set
  19.844 +# CONFIG_RXKAD is not set
  19.845 +CONFIG_WIRELESS=y
  19.846 +CONFIG_WIRELESS_EXT=y
  19.847 +CONFIG_WEXT_CORE=y
  19.848 +CONFIG_WEXT_PROC=y
  19.849 +CONFIG_WEXT_SPY=y
  19.850 +CONFIG_WEXT_PRIV=y
  19.851 +CONFIG_CFG80211=m
  19.852 +# CONFIG_NL80211_TESTMODE is not set
  19.853 +# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
  19.854 +# CONFIG_CFG80211_REG_DEBUG is not set
  19.855 +CONFIG_CFG80211_DEFAULT_PS=y
  19.856 +# CONFIG_CFG80211_INTERNAL_REGDB is not set
  19.857 +CONFIG_CFG80211_WEXT=y
  19.858 +CONFIG_WIRELESS_EXT_SYSFS=y
  19.859 +CONFIG_LIB80211=m
  19.860 +CONFIG_LIB80211_CRYPT_WEP=m
  19.861 +CONFIG_LIB80211_CRYPT_CCMP=m
  19.862 +CONFIG_LIB80211_CRYPT_TKIP=m
  19.863 +# CONFIG_LIB80211_DEBUG is not set
  19.864 +CONFIG_MAC80211=m
  19.865 +CONFIG_MAC80211_HAS_RC=y
  19.866 +CONFIG_MAC80211_RC_PID=y
  19.867 +CONFIG_MAC80211_RC_MINSTREL=y
  19.868 +CONFIG_MAC80211_RC_MINSTREL_HT=y
  19.869 +# CONFIG_MAC80211_RC_DEFAULT_PID is not set
  19.870 +CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
  19.871 +CONFIG_MAC80211_RC_DEFAULT="minstrel_ht"
  19.872 +CONFIG_MAC80211_MESH=y
  19.873 +CONFIG_MAC80211_LEDS=y
  19.874 +# CONFIG_MAC80211_DEBUG_MENU is not set
  19.875 +CONFIG_WIMAX=m
  19.876 +CONFIG_WIMAX_DEBUG_LEVEL=8
  19.877 +CONFIG_RFKILL=m
  19.878 +CONFIG_RFKILL_LEDS=y
  19.879 +CONFIG_RFKILL_INPUT=y
  19.880 +# CONFIG_NET_9P is not set
  19.881 +# CONFIG_CAIF is not set
  19.882 +CONFIG_CEPH_LIB=m
  19.883 +# CONFIG_CEPH_LIB_PRETTYDEBUG is not set
  19.884 +
  19.885 +#
  19.886 +# Device Drivers
  19.887 +#
  19.888 +
  19.889 +#
  19.890 +# Generic Driver Options
  19.891 +#
  19.892 +CONFIG_STANDALONE=y
  19.893 +CONFIG_PREVENT_FIRMWARE_BUILD=y
  19.894 +CONFIG_FW_LOADER=m
  19.895 +CONFIG_FIRMWARE_IN_KERNEL=y
  19.896 +CONFIG_EXTRA_FIRMWARE=""
  19.897 +# CONFIG_SYS_HYPERVISOR is not set
  19.898 +CONFIG_CONNECTOR=m
  19.899 +CONFIG_MTD=m
  19.900 +# CONFIG_MTD_DEBUG is not set
  19.901 +# CONFIG_MTD_TESTS is not set
  19.902 +CONFIG_MTD_CONCAT=m
  19.903 +CONFIG_MTD_PARTITIONS=y
  19.904 +# CONFIG_MTD_REDBOOT_PARTS is not set
  19.905 +# CONFIG_MTD_AR7_PARTS is not set
  19.906 +
  19.907 +#
  19.908 +# User Modules And Translation Layers
  19.909 +#
  19.910 +CONFIG_MTD_CHAR=m
  19.911 +CONFIG_HAVE_MTD_OTP=y
  19.912 +CONFIG_MTD_BLKDEVS=m
  19.913 +CONFIG_MTD_BLOCK=m
  19.914 +CONFIG_MTD_BLOCK_RO=m
  19.915 +CONFIG_FTL=m
  19.916 +CONFIG_NFTL=m
  19.917 +CONFIG_NFTL_RW=y
  19.918 +CONFIG_INFTL=m
  19.919 +CONFIG_RFD_FTL=m
  19.920 +CONFIG_SSFDC=m
  19.921 +# CONFIG_SM_FTL is not set
  19.922 +CONFIG_MTD_OOPS=m
  19.923 +
  19.924 +#
  19.925 +# RAM/ROM/Flash chip drivers
  19.926 +#
  19.927 +CONFIG_MTD_CFI=m
  19.928 +CONFIG_MTD_JEDECPROBE=m
  19.929 +CONFIG_MTD_GEN_PROBE=m
  19.930 +# CONFIG_MTD_CFI_ADV_OPTIONS is not set
  19.931 +CONFIG_MTD_MAP_BANK_WIDTH_1=y
  19.932 +CONFIG_MTD_MAP_BANK_WIDTH_2=y
  19.933 +CONFIG_MTD_MAP_BANK_WIDTH_4=y
  19.934 +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
  19.935 +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
  19.936 +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
  19.937 +CONFIG_MTD_CFI_I1=y
  19.938 +CONFIG_MTD_CFI_I2=y
  19.939 +# CONFIG_MTD_CFI_I4 is not set
  19.940 +# CONFIG_MTD_CFI_I8 is not set
  19.941 +CONFIG_MTD_CFI_INTELEXT=m
  19.942 +CONFIG_MTD_CFI_AMDSTD=m
  19.943 +CONFIG_MTD_CFI_STAA=m
  19.944 +CONFIG_MTD_CFI_UTIL=m
  19.945 +CONFIG_MTD_RAM=m
  19.946 +CONFIG_MTD_ROM=m
  19.947 +CONFIG_MTD_ABSENT=m
  19.948 +
  19.949 +#
  19.950 +# Mapping drivers for chip access
  19.951 +#
  19.952 +CONFIG_MTD_COMPLEX_MAPPINGS=y
  19.953 +CONFIG_MTD_PHYSMAP=m
  19.954 +CONFIG_MTD_PHYSMAP_COMPAT=y
  19.955 +CONFIG_MTD_PHYSMAP_START=0x8000000
  19.956 +CONFIG_MTD_PHYSMAP_LEN=0
  19.957 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2
  19.958 +CONFIG_MTD_SC520CDP=m
  19.959 +CONFIG_MTD_NETSC520=m
  19.960 +CONFIG_MTD_TS5500=m
  19.961 +CONFIG_MTD_SBC_GXX=m
  19.962 +CONFIG_MTD_AMD76XROM=m
  19.963 +CONFIG_MTD_ICHXROM=m
  19.964 +CONFIG_MTD_ESB2ROM=m
  19.965 +CONFIG_MTD_CK804XROM=m
  19.966 +CONFIG_MTD_SCB2_FLASH=m
  19.967 +CONFIG_MTD_NETtel=m
  19.968 +CONFIG_MTD_L440GX=m
  19.969 +CONFIG_MTD_PCI=m
  19.970 +# CONFIG_MTD_GPIO_ADDR is not set
  19.971 +CONFIG_MTD_INTEL_VR_NOR=m
  19.972 +CONFIG_MTD_PLATRAM=m
  19.973 +
  19.974 +#
  19.975 +# Self-contained MTD device drivers
  19.976 +#
  19.977 +CONFIG_MTD_PMC551=m
  19.978 +# CONFIG_MTD_PMC551_BUGFIX is not set
  19.979 +# CONFIG_MTD_PMC551_DEBUG is not set
  19.980 +# CONFIG_MTD_DATAFLASH is not set
  19.981 +# CONFIG_MTD_M25P80 is not set
  19.982 +# CONFIG_MTD_SST25L is not set
  19.983 +CONFIG_MTD_SLRAM=m
  19.984 +CONFIG_MTD_PHRAM=m
  19.985 +CONFIG_MTD_MTDRAM=m
  19.986 +CONFIG_MTDRAM_TOTAL_SIZE=4096
  19.987 +CONFIG_MTDRAM_ERASE_SIZE=128
  19.988 +CONFIG_MTD_BLOCK2MTD=m
  19.989 +
  19.990 +#
  19.991 +# Disk-On-Chip Device Drivers
  19.992 +#
  19.993 +CONFIG_MTD_DOC2000=m
  19.994 +CONFIG_MTD_DOC2001=m
  19.995 +CONFIG_MTD_DOC2001PLUS=m
  19.996 +CONFIG_MTD_DOCPROBE=m
  19.997 +CONFIG_MTD_DOCECC=m
  19.998 +# CONFIG_MTD_DOCPROBE_ADVANCED is not set
  19.999 +CONFIG_MTD_DOCPROBE_ADDRESS=0
 19.1000 +CONFIG_MTD_NAND_ECC=m
 19.1001 +# CONFIG_MTD_NAND_ECC_SMC is not set
 19.1002 +CONFIG_MTD_NAND=m
 19.1003 +# CONFIG_MTD_NAND_VERIFY_WRITE is not set
 19.1004 +# CONFIG_MTD_SM_COMMON is not set
 19.1005 +# CONFIG_MTD_NAND_MUSEUM_IDS is not set
 19.1006 +# CONFIG_MTD_NAND_DENALI is not set
 19.1007 +CONFIG_MTD_NAND_IDS=m
 19.1008 +# CONFIG_MTD_NAND_RICOH is not set
 19.1009 +CONFIG_MTD_NAND_DISKONCHIP=m
 19.1010 +# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
 19.1011 +CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
 19.1012 +# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set
 19.1013 +CONFIG_MTD_NAND_CAFE=m
 19.1014 +CONFIG_MTD_NAND_CS553X=m
 19.1015 +CONFIG_MTD_NAND_NANDSIM=m
 19.1016 +CONFIG_MTD_NAND_PLATFORM=m
 19.1017 +# CONFIG_MTD_ALAUDA is not set
 19.1018 +CONFIG_MTD_ONENAND=m
 19.1019 +CONFIG_MTD_ONENAND_VERIFY_WRITE=y
 19.1020 +CONFIG_MTD_ONENAND_GENERIC=m
 19.1021 +CONFIG_MTD_ONENAND_OTP=y
 19.1022 +CONFIG_MTD_ONENAND_2X_PROGRAM=y
 19.1023 +CONFIG_MTD_ONENAND_SIM=m
 19.1024 +
 19.1025 +#
 19.1026 +# LPDDR flash memory drivers
 19.1027 +#
 19.1028 +CONFIG_MTD_LPDDR=m
 19.1029 +CONFIG_MTD_QINFO_PROBE=m
 19.1030 +CONFIG_MTD_UBI=m
 19.1031 +CONFIG_MTD_UBI_WL_THRESHOLD=4096
 19.1032 +CONFIG_MTD_UBI_BEB_RESERVE=1
 19.1033 +CONFIG_MTD_UBI_GLUEBI=m
 19.1034 +
 19.1035 +#
 19.1036 +# UBI debugging options
 19.1037 +#
 19.1038 +# CONFIG_MTD_UBI_DEBUG is not set
 19.1039 +CONFIG_PARPORT=m
 19.1040 +CONFIG_PARPORT_PC=m
 19.1041 +CONFIG_PARPORT_SERIAL=m
 19.1042 +CONFIG_PARPORT_PC_FIFO=y
 19.1043 +CONFIG_PARPORT_PC_SUPERIO=y
 19.1044 +# CONFIG_PARPORT_GSC is not set
 19.1045 +CONFIG_PARPORT_AX88796=m
 19.1046 +CONFIG_PARPORT_1284=y
 19.1047 +CONFIG_PARPORT_NOT_PC=y
 19.1048 +CONFIG_PNP=y
 19.1049 +CONFIG_PNP_DEBUG_MESSAGES=y
 19.1050 +
 19.1051 +#
 19.1052 +# Protocols
 19.1053 +#
 19.1054 +CONFIG_ISAPNP=y
 19.1055 +# CONFIG_PNPBIOS is not set
 19.1056 +# CONFIG_PNPACPI is not set
 19.1057 +CONFIG_BLK_DEV=y
 19.1058 +CONFIG_BLK_DEV_FD=m
 19.1059 +# CONFIG_BLK_DEV_XD is not set
 19.1060 +CONFIG_PARIDE=m
 19.1061 +
 19.1062 +#
 19.1063 +# Parallel IDE high-level drivers
 19.1064 +#
 19.1065 +CONFIG_PARIDE_PD=m
 19.1066 +CONFIG_PARIDE_PCD=m
 19.1067 +CONFIG_PARIDE_PF=m
 19.1068 +CONFIG_PARIDE_PT=m
 19.1069 +CONFIG_PARIDE_PG=m
 19.1070 +
 19.1071 +#
 19.1072 +# Parallel IDE protocol modules
 19.1073 +#
 19.1074 +CONFIG_PARIDE_ATEN=m
 19.1075 +CONFIG_PARIDE_BPCK=m
 19.1076 +CONFIG_PARIDE_BPCK6=m
 19.1077 +CONFIG_PARIDE_COMM=m
 19.1078 +CONFIG_PARIDE_DSTR=m
 19.1079 +CONFIG_PARIDE_FIT2=m
 19.1080 +CONFIG_PARIDE_FIT3=m
 19.1081 +CONFIG_PARIDE_EPAT=m
 19.1082 +CONFIG_PARIDE_EPATC8=y
 19.1083 +CONFIG_PARIDE_EPIA=m
 19.1084 +CONFIG_PARIDE_FRIQ=m
 19.1085 +CONFIG_PARIDE_FRPW=m
 19.1086 +CONFIG_PARIDE_KBIC=m
 19.1087 +CONFIG_PARIDE_KTTI=m
 19.1088 +CONFIG_PARIDE_ON20=m
 19.1089 +CONFIG_PARIDE_ON26=m
 19.1090 +CONFIG_BLK_CPQ_DA=m
 19.1091 +CONFIG_BLK_CPQ_CISS_DA=m
 19.1092 +CONFIG_CISS_SCSI_TAPE=y
 19.1093 +CONFIG_BLK_DEV_DAC960=m
 19.1094 +CONFIG_BLK_DEV_UMEM=m
 19.1095 +# CONFIG_BLK_DEV_COW_COMMON is not set
 19.1096 +CONFIG_BLK_DEV_LOOP=m
 19.1097 +CONFIG_BLK_DEV_CRYPTOLOOP=m
 19.1098 +CONFIG_BLK_DEV_DRBD=m
 19.1099 +# CONFIG_DRBD_FAULT_INJECTION is not set
 19.1100 +CONFIG_BLK_DEV_NBD=m
 19.1101 +# CONFIG_BLK_DEV_OSD is not set
 19.1102 +CONFIG_BLK_DEV_SX8=m
 19.1103 +CONFIG_BLK_DEV_UB=m
 19.1104 +CONFIG_BLK_DEV_RAM=m
 19.1105 +CONFIG_BLK_DEV_RAM_COUNT=16
 19.1106 +CONFIG_BLK_DEV_RAM_SIZE=4096
 19.1107 +CONFIG_BLK_DEV_XIP=y
 19.1108 +CONFIG_CDROM_PKTCDVD=m
 19.1109 +CONFIG_CDROM_PKTCDVD_BUFFERS=8
 19.1110 +# CONFIG_CDROM_PKTCDVD_WCACHE is not set
 19.1111 +CONFIG_ATA_OVER_ETH=m
 19.1112 +# CONFIG_VIRTIO_BLK is not set
 19.1113 +# CONFIG_BLK_DEV_HD is not set
 19.1114 +# CONFIG_BLK_DEV_RBD is not set
 19.1115 +CONFIG_MISC_DEVICES=y
 19.1116 +# CONFIG_AD525X_DPOT is not set
 19.1117 +CONFIG_IBM_ASM=m
 19.1118 +CONFIG_PHANTOM=m
 19.1119 +CONFIG_SGI_IOC4=m
 19.1120 +CONFIG_TIFM_CORE=m
 19.1121 +CONFIG_TIFM_7XX1=m
 19.1122 +CONFIG_ICS932S401=m
 19.1123 +CONFIG_ENCLOSURE_SERVICES=m
 19.1124 +CONFIG_CS5535_MFGPT=m
 19.1125 +CONFIG_CS5535_MFGPT_DEFAULT_IRQ=7
 19.1126 +CONFIG_CS5535_CLOCK_EVENT_SRC=m
 19.1127 +CONFIG_HP_ILO=m
 19.1128 +# CONFIG_APDS9802ALS is not set
 19.1129 +# CONFIG_ISL29003 is not set
 19.1130 +# CONFIG_ISL29020 is not set
 19.1131 +# CONFIG_SENSORS_TSL2550 is not set
 19.1132 +# CONFIG_SENSORS_BH1780 is not set
 19.1133 +# CONFIG_SENSORS_BH1770 is not set
 19.1134 +# CONFIG_SENSORS_APDS990X is not set
 19.1135 +# CONFIG_HMC6352 is not set
 19.1136 +CONFIG_DS1682=m
 19.1137 +# CONFIG_TI_DAC7512 is not set
 19.1138 +CONFIG_VMWARE_BALLOON=m
 19.1139 +# CONFIG_BMP085 is not set
 19.1140 +# CONFIG_PCH_PHUB is not set
 19.1141 +CONFIG_C2PORT=m
 19.1142 +CONFIG_C2PORT_DURAMAR_2150=m
 19.1143 +
 19.1144 +#
 19.1145 +# EEPROM support
 19.1146 +#
 19.1147 +# CONFIG_EEPROM_AT24 is not set
 19.1148 +# CONFIG_EEPROM_AT25 is not set
 19.1149 +# CONFIG_EEPROM_LEGACY is not set
 19.1150 +# CONFIG_EEPROM_MAX6875 is not set
 19.1151 +CONFIG_EEPROM_93CX6=m
 19.1152 +CONFIG_CB710_CORE=m
 19.1153 +# CONFIG_CB710_DEBUG is not set
 19.1154 +CONFIG_CB710_DEBUG_ASSUMPTIONS=y
 19.1155 +# CONFIG_IWMC3200TOP is not set
 19.1156 +
 19.1157 +#
 19.1158 +# Texas Instruments shared transport line discipline
 19.1159 +#
 19.1160 +# CONFIG_TI_ST is not set
 19.1161 +CONFIG_HAVE_IDE=y
 19.1162 +# CONFIG_IDE is not set
 19.1163 +
 19.1164 +#
 19.1165 +# SCSI device support
 19.1166 +#
 19.1167 +CONFIG_SCSI_MOD=m
 19.1168 +CONFIG_RAID_ATTRS=m
 19.1169 +CONFIG_SCSI=m
 19.1170 +CONFIG_SCSI_DMA=y
 19.1171 +CONFIG_SCSI_TGT=m
 19.1172 +CONFIG_SCSI_NETLINK=y
 19.1173 +CONFIG_SCSI_PROC_FS=y
 19.1174 +
 19.1175 +#
 19.1176 +# SCSI support type (disk, tape, CD-ROM)
 19.1177 +#
 19.1178 +CONFIG_BLK_DEV_SD=m
 19.1179 +CONFIG_CHR_DEV_ST=m
 19.1180 +CONFIG_CHR_DEV_OSST=m
 19.1181 +CONFIG_BLK_DEV_SR=m
 19.1182 +CONFIG_BLK_DEV_SR_VENDOR=y
 19.1183 +CONFIG_CHR_DEV_SG=m
 19.1184 +CONFIG_CHR_DEV_SCH=m
 19.1185 +CONFIG_SCSI_ENCLOSURE=m
 19.1186 +CONFIG_SCSI_MULTI_LUN=y
 19.1187 +# CONFIG_SCSI_CONSTANTS is not set
 19.1188 +# CONFIG_SCSI_LOGGING is not set
 19.1189 +CONFIG_SCSI_SCAN_ASYNC=y
 19.1190 +CONFIG_SCSI_WAIT_SCAN=m
 19.1191 +
 19.1192 +#
 19.1193 +# SCSI Transports
 19.1194 +#
 19.1195 +CONFIG_SCSI_SPI_ATTRS=m
 19.1196 +CONFIG_SCSI_FC_ATTRS=m
 19.1197 +CONFIG_SCSI_FC_TGT_ATTRS=y
 19.1198 +CONFIG_SCSI_ISCSI_ATTRS=m
 19.1199 +CONFIG_SCSI_SAS_ATTRS=m
 19.1200 +CONFIG_SCSI_SAS_LIBSAS=m
 19.1201 +CONFIG_SCSI_SAS_ATA=y
 19.1202 +CONFIG_SCSI_SAS_HOST_SMP=y
 19.1203 +CONFIG_SCSI_SAS_LIBSAS_DEBUG=y
 19.1204 +CONFIG_SCSI_SRP_ATTRS=m
 19.1205 +CONFIG_SCSI_SRP_TGT_ATTRS=y
 19.1206 +CONFIG_SCSI_LOWLEVEL=y
 19.1207 +CONFIG_ISCSI_TCP=m
 19.1208 +CONFIG_ISCSI_BOOT_SYSFS=m
 19.1209 +CONFIG_SCSI_CXGB3_ISCSI=m
 19.1210 +# CONFIG_SCSI_CXGB4_ISCSI is not set
 19.1211 +CONFIG_SCSI_BNX2_ISCSI=m
 19.1212 +CONFIG_BE2ISCSI=m
 19.1213 +CONFIG_BLK_DEV_3W_XXXX_RAID=m
 19.1214 +CONFIG_SCSI_HPSA=m
 19.1215 +CONFIG_SCSI_3W_9XXX=m
 19.1216 +CONFIG_SCSI_3W_SAS=m
 19.1217 +CONFIG_SCSI_7000FASST=m
 19.1218 +CONFIG_SCSI_ACARD=m
 19.1219 +CONFIG_SCSI_AHA152X=m
 19.1220 +CONFIG_SCSI_AHA1542=m
 19.1221 +CONFIG_SCSI_AACRAID=m
 19.1222 +CONFIG_SCSI_AIC7XXX=m
 19.1223 +CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
 19.1224 +CONFIG_AIC7XXX_RESET_DELAY_MS=5000
 19.1225 +CONFIG_AIC7XXX_DEBUG_ENABLE=y
 19.1226 +CONFIG_AIC7XXX_DEBUG_MASK=0
 19.1227 +CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
 19.1228 +# CONFIG_SCSI_AIC7XXX_OLD is not set
 19.1229 +CONFIG_SCSI_AIC79XX=m
 19.1230 +CONFIG_AIC79XX_CMDS_PER_DEVICE=32
 19.1231 +CONFIG_AIC79XX_RESET_DELAY_MS=5000
 19.1232 +CONFIG_AIC79XX_DEBUG_ENABLE=y
 19.1233 +CONFIG_AIC79XX_DEBUG_MASK=0
 19.1234 +CONFIG_AIC79XX_REG_PRETTY_PRINT=y
 19.1235 +CONFIG_SCSI_AIC94XX=m
 19.1236 +CONFIG_AIC94XX_DEBUG=y
 19.1237 +CONFIG_SCSI_MVSAS=m
 19.1238 +CONFIG_SCSI_MVSAS_DEBUG=y
 19.1239 +CONFIG_SCSI_DPT_I2O=m
 19.1240 +CONFIG_SCSI_ADVANSYS=m
 19.1241 +CONFIG_SCSI_IN2000=m
 19.1242 +CONFIG_SCSI_ARCMSR=m
 19.1243 +CONFIG_MEGARAID_NEWGEN=y
 19.1244 +CONFIG_MEGARAID_MM=m
 19.1245 +CONFIG_MEGARAID_MAILBOX=m
 19.1246 +CONFIG_MEGARAID_LEGACY=m
 19.1247 +CONFIG_MEGARAID_SAS=m
 19.1248 +CONFIG_SCSI_MPT2SAS=m
 19.1249 +CONFIG_SCSI_MPT2SAS_MAX_SGE=128
 19.1250 +CONFIG_SCSI_MPT2SAS_LOGGING=y
 19.1251 +CONFIG_SCSI_HPTIOP=m
 19.1252 +CONFIG_SCSI_BUSLOGIC=m
 19.1253 +CONFIG_SCSI_FLASHPOINT=y
 19.1254 +CONFIG_VMWARE_PVSCSI=m
 19.1255 +CONFIG_LIBFC=m
 19.1256 +CONFIG_LIBFCOE=m
 19.1257 +CONFIG_FCOE=m
 19.1258 +CONFIG_FCOE_FNIC=m
 19.1259 +CONFIG_SCSI_DMX3191D=m
 19.1260 +CONFIG_SCSI_DTC3280=m
 19.1261 +CONFIG_SCSI_EATA=m
 19.1262 +CONFIG_SCSI_EATA_TAGGED_QUEUE=y
 19.1263 +CONFIG_SCSI_EATA_LINKED_COMMANDS=y
 19.1264 +CONFIG_SCSI_EATA_MAX_TAGS=16
 19.1265 +CONFIG_SCSI_FUTURE_DOMAIN=m
 19.1266 +CONFIG_SCSI_GDTH=m
 19.1267 +CONFIG_SCSI_GENERIC_NCR5380=m
 19.1268 +CONFIG_SCSI_GENERIC_NCR5380_MMIO=m
 19.1269 +CONFIG_SCSI_GENERIC_NCR53C400=y
 19.1270 +CONFIG_SCSI_IPS=m
 19.1271 +CONFIG_SCSI_INITIO=m
 19.1272 +CONFIG_SCSI_INIA100=m
 19.1273 +CONFIG_SCSI_PPA=m
 19.1274 +CONFIG_SCSI_IMM=m
 19.1275 +CONFIG_SCSI_IZIP_EPP16=y
 19.1276 +CONFIG_SCSI_IZIP_SLOW_CTR=y
 19.1277 +CONFIG_SCSI_NCR53C406A=m
 19.1278 +CONFIG_SCSI_STEX=m
 19.1279 +CONFIG_SCSI_SYM53C8XX_2=m
 19.1280 +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
 19.1281 +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
 19.1282 +CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
 19.1283 +CONFIG_SCSI_SYM53C8XX_MMIO=y
 19.1284 +# CONFIG_SCSI_IPR is not set
 19.1285 +CONFIG_SCSI_PAS16=m
 19.1286 +CONFIG_SCSI_QLOGIC_FAS=m
 19.1287 +CONFIG_SCSI_QLOGIC_1280=m
 19.1288 +CONFIG_SCSI_QLA_FC=m
 19.1289 +CONFIG_SCSI_QLA_ISCSI=m
 19.1290 +CONFIG_SCSI_LPFC=m
 19.1291 +CONFIG_SCSI_SYM53C416=m
 19.1292 +CONFIG_SCSI_DC395x=m
 19.1293 +CONFIG_SCSI_DC390T=m
 19.1294 +CONFIG_SCSI_T128=m
 19.1295 +CONFIG_SCSI_U14_34F=m
 19.1296 +CONFIG_SCSI_U14_34F_TAGGED_QUEUE=y
 19.1297 +CONFIG_SCSI_U14_34F_LINKED_COMMANDS=y
 19.1298 +CONFIG_SCSI_U14_34F_MAX_TAGS=8
 19.1299 +CONFIG_SCSI_ULTRASTOR=m
 19.1300 +CONFIG_SCSI_NSP32=m
 19.1301 +CONFIG_SCSI_DEBUG=m
 19.1302 +CONFIG_SCSI_PMCRAID=m
 19.1303 +CONFIG_SCSI_PM8001=m
 19.1304 +CONFIG_SCSI_SRP=m
 19.1305 +CONFIG_SCSI_BFA_FC=m
 19.1306 +CONFIG_SCSI_DH=m
 19.1307 +CONFIG_SCSI_DH_RDAC=m
 19.1308 +CONFIG_SCSI_DH_HP_SW=m
 19.1309 +CONFIG_SCSI_DH_EMC=m
 19.1310 +CONFIG_SCSI_DH_ALUA=m
 19.1311 +CONFIG_SCSI_OSD_INITIATOR=m
 19.1312 +CONFIG_SCSI_OSD_ULD=m
 19.1313 +CONFIG_SCSI_OSD_DPRINT_SENSE=1
 19.1314 +CONFIG_SCSI_OSD_DEBUG=y
 19.1315 +CONFIG_ATA=m
 19.1316 +# CONFIG_ATA_NONSTANDARD is not set
 19.1317 +CONFIG_ATA_VERBOSE_ERROR=y
 19.1318 +CONFIG_SATA_PMP=y
 19.1319 +
 19.1320 +#
 19.1321 +# Controllers with non-SFF native interface
 19.1322 +#
 19.1323 +CONFIG_SATA_AHCI=m
 19.1324 +# CONFIG_SATA_AHCI_PLATFORM is not set
 19.1325 +CONFIG_SATA_INIC162X=m
 19.1326 +CONFIG_SATA_SIL24=m
 19.1327 +CONFIG_ATA_SFF=y
 19.1328 +
 19.1329 +#
 19.1330 +# SFF controllers with custom DMA interface
 19.1331 +#
 19.1332 +CONFIG_PDC_ADMA=m
 19.1333 +CONFIG_SATA_QSTOR=m
 19.1334 +CONFIG_SATA_SX4=m
 19.1335 +CONFIG_ATA_BMDMA=y
 19.1336 +
 19.1337 +#
 19.1338 +# SATA SFF controllers with BMDMA
 19.1339 +#
 19.1340 +CONFIG_ATA_PIIX=m
 19.1341 +CONFIG_SATA_MV=m
 19.1342 +CONFIG_SATA_NV=m
 19.1343 +CONFIG_SATA_PROMISE=m
 19.1344 +CONFIG_SATA_SIL=m
 19.1345 +CONFIG_SATA_SIS=m
 19.1346 +CONFIG_SATA_SVW=m
 19.1347 +CONFIG_SATA_ULI=m
 19.1348 +CONFIG_SATA_VIA=m
 19.1349 +CONFIG_SATA_VITESSE=m
 19.1350 +
 19.1351 +#
 19.1352 +# PATA SFF controllers with BMDMA
 19.1353 +#
 19.1354 +CONFIG_PATA_ALI=m
 19.1355 +CONFIG_PATA_AMD=m
 19.1356 +CONFIG_PATA_ARTOP=m
 19.1357 +CONFIG_PATA_ATIIXP=m
 19.1358 +CONFIG_PATA_ATP867X=m
 19.1359 +CONFIG_PATA_CMD64X=m
 19.1360 +CONFIG_PATA_CS5520=m
 19.1361 +CONFIG_PATA_CS5530=m
 19.1362 +CONFIG_PATA_CS5535=m
 19.1363 +CONFIG_PATA_CS5536=m
 19.1364 +CONFIG_PATA_CYPRESS=m
 19.1365 +CONFIG_PATA_EFAR=m
 19.1366 +CONFIG_PATA_HPT366=m
 19.1367 +CONFIG_PATA_HPT37X=m
 19.1368 +CONFIG_PATA_HPT3X2N=m
 19.1369 +CONFIG_PATA_HPT3X3=m
 19.1370 +CONFIG_PATA_HPT3X3_DMA=y
 19.1371 +CONFIG_PATA_IT8213=m
 19.1372 +CONFIG_PATA_IT821X=m
 19.1373 +CONFIG_PATA_JMICRON=m
 19.1374 +CONFIG_PATA_MARVELL=m
 19.1375 +CONFIG_PATA_NETCELL=m
 19.1376 +CONFIG_PATA_NINJA32=m
 19.1377 +CONFIG_PATA_NS87415=m
 19.1378 +CONFIG_PATA_OLDPIIX=m
 19.1379 +CONFIG_PATA_OPTIDMA=m
 19.1380 +CONFIG_PATA_PDC2027X=m
 19.1381 +CONFIG_PATA_PDC_OLD=m
 19.1382 +CONFIG_PATA_RADISYS=m
 19.1383 +CONFIG_PATA_RDC=m
 19.1384 +CONFIG_PATA_SC1200=m
 19.1385 +CONFIG_PATA_SCH=m
 19.1386 +CONFIG_PATA_SERVERWORKS=m
 19.1387 +CONFIG_PATA_SIL680=m
 19.1388 +CONFIG_PATA_SIS=m
 19.1389 +CONFIG_PATA_TOSHIBA=m
 19.1390 +CONFIG_PATA_TRIFLEX=m
 19.1391 +CONFIG_PATA_VIA=m
 19.1392 +CONFIG_PATA_WINBOND=m
 19.1393 +
 19.1394 +#
 19.1395 +# PIO-only SFF controllers
 19.1396 +#
 19.1397 +CONFIG_PATA_CMD640_PCI=m
 19.1398 +CONFIG_PATA_ISAPNP=m
 19.1399 +CONFIG_PATA_MPIIX=m
 19.1400 +CONFIG_PATA_NS87410=m
 19.1401 +CONFIG_PATA_OPTI=m
 19.1402 +CONFIG_PATA_PLATFORM=m
 19.1403 +CONFIG_PATA_QDI=m
 19.1404 +CONFIG_PATA_RZ1000=m
 19.1405 +CONFIG_PATA_WINBOND_VLB=m
 19.1406 +
 19.1407 +#
 19.1408 +# Generic fallback / legacy drivers
 19.1409 +#
 19.1410 +CONFIG_ATA_GENERIC=m
 19.1411 +CONFIG_PATA_LEGACY=m
 19.1412 +CONFIG_MD=y
 19.1413 +CONFIG_BLK_DEV_MD=m
 19.1414 +CONFIG_MD_LINEAR=m
 19.1415 +CONFIG_MD_RAID0=m
 19.1416 +CONFIG_MD_RAID1=m
 19.1417 +CONFIG_MD_RAID10=m
 19.1418 +CONFIG_MD_RAID456=m
 19.1419 +CONFIG_MD_MULTIPATH=m
 19.1420 +CONFIG_MD_FAULTY=m
 19.1421 +CONFIG_BLK_DEV_DM=m
 19.1422 +# CONFIG_DM_DEBUG is not set
 19.1423 +CONFIG_DM_CRYPT=m
 19.1424 +CONFIG_DM_SNAPSHOT=m
 19.1425 +CONFIG_DM_MIRROR=m
 19.1426 +CONFIG_DM_LOG_USERSPACE=m
 19.1427 +CONFIG_DM_ZERO=m
 19.1428 +CONFIG_DM_MULTIPATH=m
 19.1429 +CONFIG_DM_MULTIPATH_QL=m
 19.1430 +CONFIG_DM_MULTIPATH_ST=m
 19.1431 +CONFIG_DM_DELAY=m
 19.1432 +CONFIG_DM_UEVENT=y
 19.1433 +CONFIG_FUSION=y
 19.1434 +CONFIG_FUSION_SPI=m
 19.1435 +CONFIG_FUSION_FC=m
 19.1436 +CONFIG_FUSION_SAS=m
 19.1437 +CONFIG_FUSION_MAX_SGE=128
 19.1438 +CONFIG_FUSION_CTL=m
 19.1439 +CONFIG_FUSION_LAN=m
 19.1440 +CONFIG_FUSION_LOGGING=y
 19.1441 +
 19.1442 +#
 19.1443 +# IEEE 1394 (FireWire) support
 19.1444 +#
 19.1445 +CONFIG_FIREWIRE=m
 19.1446 +CONFIG_FIREWIRE_OHCI=m
 19.1447 +CONFIG_FIREWIRE_OHCI_DEBUG=y
 19.1448 +CONFIG_FIREWIRE_SBP2=m
 19.1449 +CONFIG_FIREWIRE_NET=m
 19.1450 +# CONFIG_FIREWIRE_NOSY is not set
 19.1451 +CONFIG_I2O=m
 19.1452 +CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
 19.1453 +CONFIG_I2O_EXT_ADAPTEC=y
 19.1454 +CONFIG_I2O_CONFIG=m
 19.1455 +# CONFIG_I2O_CONFIG_OLD_IOCTL is not set
 19.1456 +CONFIG_I2O_BUS=m
 19.1457 +CONFIG_I2O_BLOCK=m
 19.1458 +CONFIG_I2O_SCSI=m
 19.1459 +CONFIG_I2O_PROC=m
 19.1460 +CONFIG_MACINTOSH_DRIVERS=y
 19.1461 +CONFIG_MAC_EMUMOUSEBTN=m
 19.1462 +CONFIG_NETDEVICES=y
 19.1463 +CONFIG_IFB=m
 19.1464 +CONFIG_DUMMY=m
 19.1465 +CONFIG_BONDING=m
 19.1466 +CONFIG_MACVLAN=m
 19.1467 +CONFIG_MACVTAP=m
 19.1468 +CONFIG_EQUALIZER=m
 19.1469 +CONFIG_TUN=m
 19.1470 +CONFIG_VETH=m
 19.1471 +CONFIG_NET_SB1000=m
 19.1472 +CONFIG_ARCNET=m
 19.1473 +CONFIG_ARCNET_1201=m
 19.1474 +CONFIG_ARCNET_1051=m
 19.1475 +CONFIG_ARCNET_RAW=m
 19.1476 +CONFIG_ARCNET_CAP=m
 19.1477 +CONFIG_ARCNET_COM90xx=m
 19.1478 +CONFIG_ARCNET_COM90xxIO=m
 19.1479 +CONFIG_ARCNET_RIM_I=m
 19.1480 +CONFIG_ARCNET_COM20020=m
 19.1481 +CONFIG_ARCNET_COM20020_ISA=m
 19.1482 +CONFIG_ARCNET_COM20020_PCI=m
 19.1483 +CONFIG_MII=m
 19.1484 +CONFIG_PHYLIB=m
 19.1485 +
 19.1486 +#
 19.1487 +# MII PHY device drivers
 19.1488 +#
 19.1489 +CONFIG_MARVELL_PHY=m
 19.1490 +CONFIG_DAVICOM_PHY=m
 19.1491 +CONFIG_QSEMI_PHY=m
 19.1492 +CONFIG_LXT_PHY=m
 19.1493 +CONFIG_CICADA_PHY=m
 19.1494 +CONFIG_VITESSE_PHY=m
 19.1495 +CONFIG_SMSC_PHY=m
 19.1496 +CONFIG_BROADCOM_PHY=m
 19.1497 +# CONFIG_BCM63XX_PHY is not set
 19.1498 +CONFIG_ICPLUS_PHY=m
 19.1499 +CONFIG_REALTEK_PHY=m
 19.1500 +CONFIG_NATIONAL_PHY=m
 19.1501 +CONFIG_STE10XP=m
 19.1502 +CONFIG_LSI_ET1011C_PHY=m
 19.1503 +CONFIG_MICREL_PHY=m
 19.1504 +CONFIG_MDIO_BITBANG=m
 19.1505 +CONFIG_MDIO_GPIO=m
 19.1506 +CONFIG_NET_ETHERNET=y
 19.1507 +CONFIG_HAPPYMEAL=m
 19.1508 +CONFIG_SUNGEM=m
 19.1509 +CONFIG_CASSINI=m
 19.1510 +CONFIG_NET_VENDOR_3COM=y
 19.1511 +CONFIG_EL1=m
 19.1512 +CONFIG_EL2=m
 19.1513 +CONFIG_ELPLUS=m
 19.1514 +CONFIG_EL16=m
 19.1515 +CONFIG_EL3=m
 19.1516 +CONFIG_3C515=m
 19.1517 +CONFIG_VORTEX=m
 19.1518 +CONFIG_TYPHOON=m
 19.1519 +CONFIG_LANCE=m
 19.1520 +CONFIG_NET_VENDOR_SMC=y
 19.1521 +CONFIG_WD80x3=m
 19.1522 +CONFIG_ULTRA=m
 19.1523 +CONFIG_SMC9194=m
 19.1524 +CONFIG_ENC28J60=m
 19.1525 +CONFIG_ENC28J60_WRITEVERIFY=y
 19.1526 +CONFIG_ETHOC=m
 19.1527 +CONFIG_NET_VENDOR_RACAL=y
 19.1528 +CONFIG_NI5010=m
 19.1529 +CONFIG_NI52=m
 19.1530 +CONFIG_NI65=m
 19.1531 +CONFIG_DNET=m
 19.1532 +CONFIG_NET_TULIP=y
 19.1533 +CONFIG_DE2104X=m
 19.1534 +CONFIG_DE2104X_DSL=0
 19.1535 +CONFIG_TULIP=m
 19.1536 +# CONFIG_TULIP_MWI is not set
 19.1537 +# CONFIG_TULIP_MMIO is not set
 19.1538 +# CONFIG_TULIP_NAPI is not set
 19.1539 +CONFIG_DE4X5=m
 19.1540 +CONFIG_WINBOND_840=m
 19.1541 +CONFIG_DM9102=m
 19.1542 +CONFIG_ULI526X=m
 19.1543 +CONFIG_AT1700=m
 19.1544 +CONFIG_DEPCA=m
 19.1545 +CONFIG_HP100=m
 19.1546 +CONFIG_NET_ISA=y
 19.1547 +CONFIG_E2100=m
 19.1548 +CONFIG_EWRK3=m
 19.1549 +CONFIG_EEXPRESS=m
 19.1550 +CONFIG_EEXPRESS_PRO=m
 19.1551 +CONFIG_HPLAN_PLUS=m
 19.1552 +CONFIG_HPLAN=m
 19.1553 +CONFIG_LP486E=m
 19.1554 +CONFIG_ETH16I=m
 19.1555 +CONFIG_NE2000=m
 19.1556 +CONFIG_ZNET=m
 19.1557 +CONFIG_SEEQ8005=m
 19.1558 +# CONFIG_IBM_NEW_EMAC_ZMII is not set
 19.1559 +# CONFIG_IBM_NEW_EMAC_RGMII is not set
 19.1560 +# CONFIG_IBM_NEW_EMAC_TAH is not set
 19.1561 +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
 19.1562 +# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
 19.1563 +# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
 19.1564 +# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
 19.1565 +CONFIG_NET_PCI=y
 19.1566 +CONFIG_PCNET32=m
 19.1567 +CONFIG_AMD8111_ETH=m
 19.1568 +CONFIG_ADAPTEC_STARFIRE=m
 19.1569 +CONFIG_AC3200=m
 19.1570 +CONFIG_KSZ884X_PCI=m
 19.1571 +CONFIG_APRICOT=m
 19.1572 +CONFIG_B44=m
 19.1573 +CONFIG_B44_PCI_AUTOSELECT=y
 19.1574 +CONFIG_B44_PCICORE_AUTOSELECT=y
 19.1575 +CONFIG_B44_PCI=y
 19.1576 +CONFIG_FORCEDETH=m
 19.1577 +CONFIG_CS89x0=m
 19.1578 +CONFIG_E100=m
 19.1579 +CONFIG_FEALNX=m
 19.1580 +CONFIG_NATSEMI=m
 19.1581 +CONFIG_NE2K_PCI=m
 19.1582 +CONFIG_8139CP=m
 19.1583 +CONFIG_8139TOO=m
 19.1584 +CONFIG_8139TOO_PIO=y
 19.1585 +# CONFIG_8139TOO_TUNE_TWISTER is not set
 19.1586 +# CONFIG_8139TOO_8129 is not set
 19.1587 +# CONFIG_8139_OLD_RX_RESET is not set
 19.1588 +CONFIG_R6040=m
 19.1589 +CONFIG_SIS900=m
 19.1590 +CONFIG_EPIC100=m
 19.1591 +CONFIG_SMSC9420=m
 19.1592 +CONFIG_SUNDANCE=m
 19.1593 +# CONFIG_SUNDANCE_MMIO is not set
 19.1594 +CONFIG_TLAN=m
 19.1595 +CONFIG_KS8842=m
 19.1596 +CONFIG_KS8851=m
 19.1597 +CONFIG_KS8851_MLL=m
 19.1598 +CONFIG_VIA_RHINE=m
 19.1599 +# CONFIG_VIA_RHINE_MMIO is not set
 19.1600 +CONFIG_SC92031=m
 19.1601 +CONFIG_NET_POCKET=y
 19.1602 +CONFIG_ATP=m
 19.1603 +CONFIG_DE600=m
 19.1604 +CONFIG_DE620=m
 19.1605 +CONFIG_ATL2=m
 19.1606 +CONFIG_NETDEV_1000=y
 19.1607 +CONFIG_ACENIC=m
 19.1608 +# CONFIG_ACENIC_OMIT_TIGON_I is not set
 19.1609 +CONFIG_DL2K=m
 19.1610 +CONFIG_E1000=m
 19.1611 +CONFIG_E1000E=m
 19.1612 +CONFIG_IP1000=m
 19.1613 +CONFIG_IGB=m
 19.1614 +CONFIG_IGB_DCA=y
 19.1615 +CONFIG_IGBVF=m
 19.1616 +CONFIG_NS83820=m
 19.1617 +CONFIG_HAMACHI=m
 19.1618 +CONFIG_YELLOWFIN=m
 19.1619 +CONFIG_R8169=m
 19.1620 +CONFIG_R8169_VLAN=y
 19.1621 +CONFIG_SIS190=m
 19.1622 +CONFIG_SKGE=m
 19.1623 +CONFIG_SKY2=m
 19.1624 +CONFIG_VIA_VELOCITY=m
 19.1625 +CONFIG_TIGON3=m
 19.1626 +CONFIG_BNX2=m
 19.1627 +CONFIG_CNIC=m
 19.1628 +CONFIG_QLA3XXX=m
 19.1629 +CONFIG_ATL1=m
 19.1630 +CONFIG_ATL1E=m
 19.1631 +CONFIG_ATL1C=m
 19.1632 +CONFIG_JME=m
 19.1633 +# CONFIG_STMMAC_ETH is not set
 19.1634 +# CONFIG_PCH_GBE is not set
 19.1635 +CONFIG_NETDEV_10000=y
 19.1636 +CONFIG_MDIO=m
 19.1637 +CONFIG_CHELSIO_T1=m
 19.1638 +CONFIG_CHELSIO_T1_1G=y
 19.1639 +CONFIG_CHELSIO_T3_DEPENDS=y
 19.1640 +CONFIG_CHELSIO_T3=m
 19.1641 +CONFIG_CHELSIO_T4_DEPENDS=y
 19.1642 +CONFIG_CHELSIO_T4=m
 19.1643 +CONFIG_CHELSIO_T4VF_DEPENDS=y
 19.1644 +# CONFIG_CHELSIO_T4VF is not set
 19.1645 +CONFIG_ENIC=m
 19.1646 +CONFIG_IXGBE=m
 19.1647 +CONFIG_IXGBE_DCA=y
 19.1648 +CONFIG_IXGB=m
 19.1649 +CONFIG_S2IO=m
 19.1650 +CONFIG_VXGE=m
 19.1651 +CONFIG_VXGE_DEBUG_TRACE_ALL=y
 19.1652 +CONFIG_MYRI10GE=m
 19.1653 +CONFIG_MYRI10GE_DCA=y
 19.1654 +CONFIG_NETXEN_NIC=m
 19.1655 +CONFIG_NIU=m
 19.1656 +CONFIG_MLX4_EN=m
 19.1657 +CONFIG_MLX4_CORE=m
 19.1658 +CONFIG_MLX4_DEBUG=y
 19.1659 +CONFIG_TEHUTI=m
 19.1660 +CONFIG_BNX2X=m
 19.1661 +CONFIG_QLCNIC=m
 19.1662 +CONFIG_QLGE=m
 19.1663 +# CONFIG_BNA is not set
 19.1664 +CONFIG_SFC=m
 19.1665 +CONFIG_SFC_MTD=y
 19.1666 +CONFIG_BE2NET=m
 19.1667 +CONFIG_TR=m
 19.1668 +CONFIG_IBMTR=m
 19.1669 +CONFIG_IBMOL=m
 19.1670 +CONFIG_IBMLS=m
 19.1671 +CONFIG_3C359=m
 19.1672 +CONFIG_TMS380TR=m
 19.1673 +CONFIG_TMSPCI=m
 19.1674 +CONFIG_SKISA=m
 19.1675 +CONFIG_PROTEON=m
 19.1676 +CONFIG_ABYSS=m
 19.1677 +CONFIG_SMCTR=m
 19.1678 +CONFIG_WLAN=y
 19.1679 +CONFIG_LIBERTAS_THINFIRM=m
 19.1680 +# CONFIG_LIBERTAS_THINFIRM_DEBUG is not set
 19.1681 +CONFIG_LIBERTAS_THINFIRM_USB=m
 19.1682 +CONFIG_AIRO=m
 19.1683 +CONFIG_ATMEL=m
 19.1684 +CONFIG_PCI_ATMEL=m
 19.1685 +CONFIG_AT76C50X_USB=m
 19.1686 +CONFIG_PRISM54=m
 19.1687 +CONFIG_USB_ZD1201=m
 19.1688 +CONFIG_USB_NET_RNDIS_WLAN=m
 19.1689 +CONFIG_RTL8180=m
 19.1690 +CONFIG_RTL8187=m
 19.1691 +CONFIG_RTL8187_LEDS=y
 19.1692 +CONFIG_ADM8211=m
 19.1693 +CONFIG_MAC80211_HWSIM=m
 19.1694 +CONFIG_MWL8K=m
 19.1695 +CONFIG_ATH_COMMON=m
 19.1696 +# CONFIG_ATH_DEBUG is not set
 19.1697 +# CONFIG_ATH5K is not set
 19.1698 +# CONFIG_ATH9K is not set
 19.1699 +# CONFIG_ATH9K_HTC is not set
 19.1700 +# CONFIG_AR9170_USB is not set
 19.1701 +# CONFIG_CARL9170 is not set
 19.1702 +CONFIG_B43=m
 19.1703 +CONFIG_B43_PCI_AUTOSELECT=y
 19.1704 +CONFIG_B43_PCICORE_AUTOSELECT=y
 19.1705 +# CONFIG_B43_SDIO is not set
 19.1706 +CONFIG_B43_PIO=y
 19.1707 +CONFIG_B43_PHY_LP=y
 19.1708 +CONFIG_B43_LEDS=y
 19.1709 +CONFIG_B43_HWRNG=y
 19.1710 +# CONFIG_B43_DEBUG is not set
 19.1711 +CONFIG_B43LEGACY=m
 19.1712 +CONFIG_B43LEGACY_PCI_AUTOSELECT=y
 19.1713 +CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
 19.1714 +CONFIG_B43LEGACY_LEDS=y
 19.1715 +CONFIG_B43LEGACY_HWRNG=y
 19.1716 +CONFIG_B43LEGACY_DEBUG=y
 19.1717 +CONFIG_B43LEGACY_DMA=y
 19.1718 +CONFIG_B43LEGACY_PIO=y
 19.1719 +CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
 19.1720 +# CONFIG_B43LEGACY_DMA_MODE is not set
 19.1721 +# CONFIG_B43LEGACY_PIO_MODE is not set
 19.1722 +CONFIG_HOSTAP=m
 19.1723 +CONFIG_HOSTAP_FIRMWARE=y
 19.1724 +CONFIG_HOSTAP_FIRMWARE_NVRAM=y
 19.1725 +CONFIG_HOSTAP_PLX=m
 19.1726 +CONFIG_HOSTAP_PCI=m
 19.1727 +CONFIG_IPW2100=m
 19.1728 +CONFIG_IPW2100_MONITOR=y
 19.1729 +# CONFIG_IPW2100_DEBUG is not set
 19.1730 +CONFIG_IPW2200=m
 19.1731 +CONFIG_IPW2200_MONITOR=y
 19.1732 +CONFIG_IPW2200_RADIOTAP=y
 19.1733 +CONFIG_IPW2200_PROMISCUOUS=y
 19.1734 +CONFIG_IPW2200_QOS=y
 19.1735 +# CONFIG_IPW2200_DEBUG is not set
 19.1736 +CONFIG_LIBIPW=m
 19.1737 +# CONFIG_LIBIPW_DEBUG is not set
 19.1738 +CONFIG_IWLWIFI=m
 19.1739 +
 19.1740 +#
 19.1741 +# Debugging Options
 19.1742 +#
 19.1743 +# CONFIG_IWLWIFI_DEBUG is not set
 19.1744 +CONFIG_IWLAGN=m
 19.1745 +CONFIG_IWL4965=y
 19.1746 +CONFIG_IWL5000=y
 19.1747 +CONFIG_IWL3945=m
 19.1748 +# CONFIG_IWM is not set
 19.1749 +CONFIG_LIBERTAS=m
 19.1750 +CONFIG_LIBERTAS_USB=m
 19.1751 +# CONFIG_LIBERTAS_SDIO is not set
 19.1752 +CONFIG_LIBERTAS_SPI=m
 19.1753 +# CONFIG_LIBERTAS_DEBUG is not set
 19.1754 +CONFIG_LIBERTAS_MESH=y
 19.1755 +CONFIG_HERMES=m
 19.1756 +# CONFIG_HERMES_PRISM is not set
 19.1757 +CONFIG_HERMES_CACHE_FW_ON_INIT=y
 19.1758 +CONFIG_PLX_HERMES=m
 19.1759 +CONFIG_TMD_HERMES=m
 19.1760 +CONFIG_NORTEL_HERMES=m
 19.1761 +# CONFIG_ORINOCO_USB is not set
 19.1762 +CONFIG_P54_COMMON=m
 19.1763 +CONFIG_P54_USB=m
 19.1764 +CONFIG_P54_PCI=m
 19.1765 +CONFIG_P54_SPI=m
 19.1766 +# CONFIG_P54_SPI_DEFAULT_EEPROM is not set
 19.1767 +CONFIG_P54_LEDS=y
 19.1768 +CONFIG_RT2X00=m
 19.1769 +CONFIG_RT2400PCI=m
 19.1770 +CONFIG_RT2500PCI=m
 19.1771 +CONFIG_RT61PCI=m
 19.1772 +CONFIG_RT2800PCI_PCI=y
 19.1773 +CONFIG_RT2800PCI=m
 19.1774 +CONFIG_RT2800PCI_RT30XX=y
 19.1775 +CONFIG_RT2800PCI_RT35XX=y
 19.1776 +# CONFIG_RT2500USB is not set
 19.1777 +# CONFIG_RT73USB is not set
 19.1778 +# CONFIG_RT2800USB is not set
 19.1779 +CONFIG_RT2800_LIB=m
 19.1780 +CONFIG_RT2X00_LIB_PCI=m
 19.1781 +CONFIG_RT2X00_LIB=m
 19.1782 +CONFIG_RT2X00_LIB_HT=y
 19.1783 +CONFIG_RT2X00_LIB_FIRMWARE=y
 19.1784 +CONFIG_RT2X00_LIB_CRYPTO=y
 19.1785 +CONFIG_RT2X00_LIB_LEDS=y
 19.1786 +# CONFIG_RT2X00_DEBUG is not set
 19.1787 +CONFIG_WL1251=m
 19.1788 +CONFIG_WL1251_SPI=m
 19.1789 +# CONFIG_WL1251_SDIO is not set
 19.1790 +CONFIG_WL12XX=m
 19.1791 +CONFIG_WL1271=m
 19.1792 +# CONFIG_WL1271_SPI is not set
 19.1793 +# CONFIG_WL1271_SDIO is not set
 19.1794 +CONFIG_ZD1211RW=m
 19.1795 +# CONFIG_ZD1211RW_DEBUG is not set
 19.1796 +
 19.1797 +#
 19.1798 +# WiMAX Wireless Broadband devices
 19.1799 +#
 19.1800 +CONFIG_WIMAX_I2400M=m
 19.1801 +CONFIG_WIMAX_I2400M_USB=m
 19.1802 +# CONFIG_WIMAX_I2400M_SDIO is not set
 19.1803 +CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8
 19.1804 +
 19.1805 +#
 19.1806 +# USB Network Adapters
 19.1807 +#
 19.1808 +CONFIG_USB_CATC=m
 19.1809 +CONFIG_USB_KAWETH=m
 19.1810 +CONFIG_USB_PEGASUS=m
 19.1811 +CONFIG_USB_RTL8150=m
 19.1812 +CONFIG_USB_USBNET=m
 19.1813 +CONFIG_USB_NET_AX8817X=m
 19.1814 +CONFIG_USB_NET_CDCETHER=m
 19.1815 +CONFIG_USB_NET_CDC_EEM=m
 19.1816 +CONFIG_USB_NET_DM9601=m
 19.1817 +CONFIG_USB_NET_SMSC75XX=m
 19.1818 +CONFIG_USB_NET_SMSC95XX=m
 19.1819 +CONFIG_USB_NET_GL620A=m
 19.1820 +CONFIG_USB_NET_NET1080=m
 19.1821 +CONFIG_USB_NET_PLUSB=m
 19.1822 +CONFIG_USB_NET_MCS7830=m
 19.1823 +CONFIG_USB_NET_RNDIS_HOST=m
 19.1824 +CONFIG_USB_NET_CDC_SUBSET=m
 19.1825 +CONFIG_USB_ALI_M5632=y
 19.1826 +CONFIG_USB_AN2720=y
 19.1827 +CONFIG_USB_BELKIN=y
 19.1828 +CONFIG_USB_ARMLINUX=y
 19.1829 +CONFIG_USB_EPSON2888=y
 19.1830 +CONFIG_USB_KC2190=y
 19.1831 +CONFIG_USB_NET_ZAURUS=m
 19.1832 +# CONFIG_USB_NET_CX82310_ETH is not set
 19.1833 +CONFIG_USB_HSO=m
 19.1834 +CONFIG_USB_NET_INT51X1=m
 19.1835 +CONFIG_USB_CDC_PHONET=m
 19.1836 +CONFIG_USB_IPHETH=m
 19.1837 +CONFIG_USB_SIERRA_NET=m
 19.1838 +CONFIG_WAN=y
 19.1839 +CONFIG_HOSTESS_SV11=m
 19.1840 +CONFIG_COSA=m
 19.1841 +CONFIG_LANMEDIA=m
 19.1842 +CONFIG_SEALEVEL_4021=m
 19.1843 +CONFIG_HDLC=m
 19.1844 +CONFIG_HDLC_RAW=m
 19.1845 +CONFIG_HDLC_RAW_ETH=m
 19.1846 +CONFIG_HDLC_CISCO=m
 19.1847 +CONFIG_HDLC_FR=m
 19.1848 +CONFIG_HDLC_PPP=m
 19.1849 +
 19.1850 +#
 19.1851 +# X.25/LAPB support is disabled
 19.1852 +#
 19.1853 +CONFIG_PCI200SYN=m
 19.1854 +CONFIG_WANXL=m
 19.1855 +CONFIG_PC300TOO=m
 19.1856 +CONFIG_N2=m
 19.1857 +CONFIG_C101=m
 19.1858 +CONFIG_FARSYNC=m
 19.1859 +CONFIG_DSCC4=m
 19.1860 +CONFIG_DSCC4_PCISYNC=y
 19.1861 +CONFIG_DSCC4_PCI_RST=y
 19.1862 +CONFIG_DLCI=m
 19.1863 +CONFIG_DLCI_MAX=8
 19.1864 +CONFIG_SDLA=m
 19.1865 +CONFIG_SBNI=m
 19.1866 +CONFIG_SBNI_MULTILINE=y
 19.1867 +
 19.1868 +#
 19.1869 +# CAIF transport drivers
 19.1870 +#
 19.1871 +CONFIG_FDDI=m
 19.1872 +CONFIG_DEFXX=m
 19.1873 +# CONFIG_DEFXX_MMIO is not set
 19.1874 +CONFIG_SKFP=m
 19.1875 +CONFIG_HIPPI=y
 19.1876 +CONFIG_ROADRUNNER=m
 19.1877 +CONFIG_ROADRUNNER_LARGE_RINGS=y
 19.1878 +CONFIG_PLIP=m
 19.1879 +CONFIG_PPP=m
 19.1880 +CONFIG_PPP_MULTILINK=y
 19.1881 +CONFIG_PPP_FILTER=y
 19.1882 +CONFIG_PPP_ASYNC=m
 19.1883 +CONFIG_PPP_SYNC_TTY=m
 19.1884 +CONFIG_PPP_DEFLATE=m
 19.1885 +CONFIG_PPP_BSDCOMP=m
 19.1886 +CONFIG_PPP_MPPE=m
 19.1887 +CONFIG_PPPOE=m
 19.1888 +CONFIG_SLIP=m
 19.1889 +CONFIG_SLIP_COMPRESSED=y
 19.1890 +CONFIG_SLHC=m
 19.1891 +CONFIG_SLIP_SMART=y
 19.1892 +CONFIG_SLIP_MODE_SLIP6=y
 19.1893 +CONFIG_NET_FC=y
 19.1894 +# CONFIG_NETCONSOLE is not set
 19.1895 +# CONFIG_NETPOLL is not set
 19.1896 +# CONFIG_NET_POLL_CONTROLLER is not set
 19.1897 +# CONFIG_VIRTIO_NET is not set
 19.1898 +CONFIG_VMXNET3=m
 19.1899 +CONFIG_ISDN=y
 19.1900 +CONFIG_ISDN_I4L=m
 19.1901 +# CONFIG_ISDN_PPP is not set
 19.1902 +# CONFIG_ISDN_AUDIO is not set
 19.1903 +
 19.1904 +#
 19.1905 +# ISDN feature submodules
 19.1906 +#
 19.1907 +# CONFIG_ISDN_DRV_LOOP is not set
 19.1908 +# CONFIG_ISDN_DIVERSION is not set
 19.1909 +
 19.1910 +#
 19.1911 +# ISDN4Linux hardware drivers
 19.1912 +#
 19.1913 +
 19.1914 +#
 19.1915 +# Passive cards
 19.1916 +#
 19.1917 +# CONFIG_ISDN_DRV_HISAX is not set
 19.1918 +
 19.1919 +#
 19.1920 +# Active cards
 19.1921 +#
 19.1922 +# CONFIG_ISDN_DRV_ICN is not set
 19.1923 +# CONFIG_ISDN_DRV_PCBIT is not set
 19.1924 +# CONFIG_ISDN_DRV_SC is not set
 19.1925 +# CONFIG_ISDN_DRV_ACT2000 is not set
 19.1926 +CONFIG_ISDN_CAPI=m
 19.1927 +CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
 19.1928 +CONFIG_CAPI_TRACE=y
 19.1929 +CONFIG_ISDN_CAPI_MIDDLEWARE=y
 19.1930 +CONFIG_ISDN_CAPI_CAPI20=m
 19.1931 +CONFIG_ISDN_CAPI_CAPIFS_BOOL=y
 19.1932 +CONFIG_ISDN_CAPI_CAPIFS=m
 19.1933 +CONFIG_ISDN_CAPI_CAPIDRV=m
 19.1934 +
 19.1935 +#
 19.1936 +# CAPI hardware drivers
 19.1937 +#
 19.1938 +CONFIG_CAPI_AVM=y
 19.1939 +CONFIG_ISDN_DRV_AVMB1_B1ISA=m
 19.1940 +CONFIG_ISDN_DRV_AVMB1_B1PCI=m
 19.1941 +CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y
 19.1942 +CONFIG_ISDN_DRV_AVMB1_T1ISA=m
 19.1943 +CONFIG_ISDN_DRV_AVMB1_T1PCI=m
 19.1944 +CONFIG_ISDN_DRV_AVMB1_C4=m
 19.1945 +CONFIG_CAPI_EICON=y
 19.1946 +CONFIG_ISDN_DIVAS=m
 19.1947 +CONFIG_ISDN_DIVAS_BRIPCI=y
 19.1948 +CONFIG_ISDN_DIVAS_PRIPCI=y
 19.1949 +CONFIG_ISDN_DIVAS_DIVACAPI=m
 19.1950 +CONFIG_ISDN_DIVAS_USERIDI=m
 19.1951 +CONFIG_ISDN_DIVAS_MAINT=m
 19.1952 +CONFIG_ISDN_DRV_GIGASET=m
 19.1953 +CONFIG_GIGASET_CAPI=y
 19.1954 +# CONFIG_GIGASET_I4L is not set
 19.1955 +# CONFIG_GIGASET_DUMMYLL is not set
 19.1956 +CONFIG_GIGASET_BASE=m
 19.1957 +CONFIG_GIGASET_M105=m
 19.1958 +CONFIG_GIGASET_M101=m
 19.1959 +# CONFIG_GIGASET_DEBUG is not set
 19.1960 +CONFIG_HYSDN=m
 19.1961 +CONFIG_HYSDN_CAPI=y
 19.1962 +CONFIG_MISDN=m
 19.1963 +CONFIG_MISDN_DSP=m
 19.1964 +CONFIG_MISDN_L1OIP=m
 19.1965 +
 19.1966 +#
 19.1967 +# mISDN hardware drivers
 19.1968 +#
 19.1969 +CONFIG_MISDN_HFCPCI=m
 19.1970 +CONFIG_MISDN_HFCMULTI=m
 19.1971 +CONFIG_MISDN_HFCUSB=m
 19.1972 +CONFIG_MISDN_AVMFRITZ=m
 19.1973 +CONFIG_MISDN_SPEEDFAX=m
 19.1974 +CONFIG_MISDN_INFINEON=m
 19.1975 +CONFIG_MISDN_W6692=m
 19.1976 +CONFIG_MISDN_NETJET=m
 19.1977 +CONFIG_MISDN_IPAC=m
 19.1978 +CONFIG_MISDN_ISAR=m
 19.1979 +CONFIG_ISDN_HDLC=m
 19.1980 +CONFIG_PHONE=m
 19.1981 +CONFIG_PHONE_IXJ=m
 19.1982 +
 19.1983 +#
 19.1984 +# Input device support
 19.1985 +#
 19.1986 +CONFIG_INPUT=y
 19.1987 +CONFIG_INPUT_FF_MEMLESS=m
 19.1988 +CONFIG_INPUT_POLLDEV=m
 19.1989 +CONFIG_INPUT_SPARSEKMAP=m
 19.1990 +
 19.1991 +#
 19.1992 +# Userland interfaces
 19.1993 +#
 19.1994 +CONFIG_INPUT_MOUSEDEV=m
 19.1995 +CONFIG_INPUT_MOUSEDEV_PSAUX=y
 19.1996 +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
 19.1997 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
 19.1998 +CONFIG_INPUT_JOYDEV=m
 19.1999 +CONFIG_INPUT_EVDEV=m
 19.2000 +CONFIG_INPUT_EVBUG=m
 19.2001 +
 19.2002 +#
 19.2003 +# Input Device Drivers
 19.2004 +#
 19.2005 +CONFIG_INPUT_KEYBOARD=y
 19.2006 +CONFIG_KEYBOARD_ADP5588=m
 19.2007 +CONFIG_KEYBOARD_ATKBD=y
 19.2008 +# CONFIG_KEYBOARD_QT2160 is not set
 19.2009 +CONFIG_KEYBOARD_LKKBD=m
 19.2010 +CONFIG_KEYBOARD_GPIO=m
 19.2011 +# CONFIG_KEYBOARD_GPIO_POLLED is not set
 19.2012 +# CONFIG_KEYBOARD_TCA6416 is not set
 19.2013 +CONFIG_KEYBOARD_MATRIX=m
 19.2014 +CONFIG_KEYBOARD_LM8323=m
 19.2015 +CONFIG_KEYBOARD_MAX7359=m
 19.2016 +# CONFIG_KEYBOARD_MCS is not set
 19.2017 +CONFIG_KEYBOARD_NEWTON=m
 19.2018 +CONFIG_KEYBOARD_OPENCORES=m
 19.2019 +CONFIG_KEYBOARD_STOWAWAY=m
 19.2020 +CONFIG_KEYBOARD_SUNKBD=m
 19.2021 +CONFIG_KEYBOARD_XTKBD=m
 19.2022 +CONFIG_INPUT_MOUSE=y
 19.2023 +CONFIG_MOUSE_PS2=m
 19.2024 +CONFIG_MOUSE_PS2_ALPS=y
 19.2025 +CONFIG_MOUSE_PS2_LOGIPS2PP=y
 19.2026 +CONFIG_MOUSE_PS2_SYNAPTICS=y
 19.2027 +CONFIG_MOUSE_PS2_TRACKPOINT=y
 19.2028 +CONFIG_MOUSE_PS2_ELANTECH=y
 19.2029 +CONFIG_MOUSE_PS2_SENTELIC=y
 19.2030 +CONFIG_MOUSE_PS2_TOUCHKIT=y
 19.2031 +CONFIG_MOUSE_SERIAL=m
 19.2032 +CONFIG_MOUSE_APPLETOUCH=m
 19.2033 +CONFIG_MOUSE_BCM5974=m
 19.2034 +CONFIG_MOUSE_INPORT=m
 19.2035 +CONFIG_MOUSE_ATIXL=y
 19.2036 +CONFIG_MOUSE_LOGIBM=m
 19.2037 +CONFIG_MOUSE_PC110PAD=m
 19.2038 +CONFIG_MOUSE_VSXXXAA=m
 19.2039 +CONFIG_MOUSE_GPIO=m
 19.2040 +CONFIG_MOUSE_SYNAPTICS_I2C=m
 19.2041 +CONFIG_INPUT_JOYSTICK=y
 19.2042 +CONFIG_JOYSTICK_ANALOG=m
 19.2043 +CONFIG_JOYSTICK_A3D=m
 19.2044 +CONFIG_JOYSTICK_ADI=m
 19.2045 +CONFIG_JOYSTICK_COBRA=m
 19.2046 +CONFIG_JOYSTICK_GF2K=m
 19.2047 +CONFIG_JOYSTICK_GRIP=m
 19.2048 +CONFIG_JOYSTICK_GRIP_MP=m
 19.2049 +CONFIG_JOYSTICK_GUILLEMOT=m
 19.2050 +CONFIG_JOYSTICK_INTERACT=m
 19.2051 +CONFIG_JOYSTICK_SIDEWINDER=m
 19.2052 +CONFIG_JOYSTICK_TMDC=m
 19.2053 +CONFIG_JOYSTICK_IFORCE=m
 19.2054 +CONFIG_JOYSTICK_IFORCE_USB=y
 19.2055 +CONFIG_JOYSTICK_IFORCE_232=y
 19.2056 +CONFIG_JOYSTICK_WARRIOR=m
 19.2057 +CONFIG_JOYSTICK_MAGELLAN=m
 19.2058 +CONFIG_JOYSTICK_SPACEORB=m
 19.2059 +CONFIG_JOYSTICK_SPACEBALL=m
 19.2060 +CONFIG_JOYSTICK_STINGER=m
 19.2061 +CONFIG_JOYSTICK_TWIDJOY=m
 19.2062 +CONFIG_JOYSTICK_ZHENHUA=m
 19.2063 +CONFIG_JOYSTICK_DB9=m
 19.2064 +CONFIG_JOYSTICK_GAMECON=m
 19.2065 +CONFIG_JOYSTICK_TURBOGRAFX=m
 19.2066 +CONFIG_JOYSTICK_JOYDUMP=m
 19.2067 +CONFIG_JOYSTICK_XPAD=m
 19.2068 +CONFIG_JOYSTICK_XPAD_FF=y
 19.2069 +CONFIG_JOYSTICK_XPAD_LEDS=y
 19.2070 +CONFIG_INPUT_TABLET=y
 19.2071 +CONFIG_TABLET_USB_ACECAD=m
 19.2072 +CONFIG_TABLET_USB_AIPTEK=m
 19.2073 +CONFIG_TABLET_USB_GTCO=m
 19.2074 +# CONFIG_TABLET_USB_HANWANG is not set
 19.2075 +CONFIG_TABLET_USB_KBTAB=m
 19.2076 +CONFIG_TABLET_USB_WACOM=m
 19.2077 +CONFIG_INPUT_TOUCHSCREEN=y
 19.2078 +CONFIG_TOUCHSCREEN_ADS7846=m
 19.2079 +CONFIG_TOUCHSCREEN_AD7877=m
 19.2080 +CONFIG_TOUCHSCREEN_AD7879=m
 19.2081 +CONFIG_TOUCHSCREEN_AD7879_I2C=m
 19.2082 +# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
 19.2083 +# CONFIG_TOUCHSCREEN_BU21013 is not set
 19.2084 +# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set
 19.2085 +CONFIG_TOUCHSCREEN_DYNAPRO=m
 19.2086 +# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
 19.2087 +CONFIG_TOUCHSCREEN_EETI=m
 19.2088 +CONFIG_TOUCHSCREEN_FUJITSU=m
 19.2089 +CONFIG_TOUCHSCREEN_GUNZE=m
 19.2090 +CONFIG_TOUCHSCREEN_ELO=m
 19.2091 +CONFIG_TOUCHSCREEN_WACOM_W8001=m
 19.2092 +CONFIG_TOUCHSCREEN_MCS5000=m
 19.2093 +CONFIG_TOUCHSCREEN_MTOUCH=m
 19.2094 +CONFIG_TOUCHSCREEN_INEXIO=m
 19.2095 +CONFIG_TOUCHSCREEN_MK712=m
 19.2096 +CONFIG_TOUCHSCREEN_HTCPEN=m
 19.2097 +CONFIG_TOUCHSCREEN_PENMOUNT=m
 19.2098 +# CONFIG_TOUCHSCREEN_QT602240 is not set
 19.2099 +CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
 19.2100 +CONFIG_TOUCHSCREEN_TOUCHWIN=m
 19.2101 +# CONFIG_TOUCHSCREEN_UCB1400 is not set
 19.2102 +CONFIG_TOUCHSCREEN_WM97XX=m
 19.2103 +CONFIG_TOUCHSCREEN_WM9705=y
 19.2104 +CONFIG_TOUCHSCREEN_WM9712=y
 19.2105 +CONFIG_TOUCHSCREEN_WM9713=y
 19.2106 +CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
 19.2107 +CONFIG_TOUCHSCREEN_USB_EGALAX=y
 19.2108 +CONFIG_TOUCHSCREEN_USB_PANJIT=y
 19.2109 +CONFIG_TOUCHSCREEN_USB_3M=y
 19.2110 +CONFIG_TOUCHSCREEN_USB_ITM=y
 19.2111 +CONFIG_TOUCHSCREEN_USB_ETURBO=y
 19.2112 +CONFIG_TOUCHSCREEN_USB_GUNZE=y
 19.2113 +CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y
 19.2114 +CONFIG_TOUCHSCREEN_USB_IRTOUCH=y
 19.2115 +CONFIG_TOUCHSCREEN_USB_IDEALTEK=y
 19.2116 +CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
 19.2117 +CONFIG_TOUCHSCREEN_USB_GOTOP=y
 19.2118 +CONFIG_TOUCHSCREEN_USB_JASTEC=y
 19.2119 +CONFIG_TOUCHSCREEN_USB_E2I=y
 19.2120 +CONFIG_TOUCHSCREEN_USB_ZYTRONIC=y
 19.2121 +CONFIG_TOUCHSCREEN_USB_ETT_TC45USB=y
 19.2122 +CONFIG_TOUCHSCREEN_USB_NEXIO=y
 19.2123 +CONFIG_TOUCHSCREEN_TOUCHIT213=m
 19.2124 +CONFIG_TOUCHSCREEN_TSC2007=m
 19.2125 +CONFIG_TOUCHSCREEN_PCAP=m
 19.2126 +# CONFIG_TOUCHSCREEN_TPS6507X is not set
 19.2127 +CONFIG_INPUT_MISC=y
 19.2128 +# CONFIG_INPUT_AD714X is not set
 19.2129 +CONFIG_INPUT_PCSPKR=m
 19.2130 +CONFIG_INPUT_APANEL=m
 19.2131 +CONFIG_INPUT_WISTRON_BTNS=m
 19.2132 +CONFIG_INPUT_ATI_REMOTE=m
 19.2133 +CONFIG_INPUT_ATI_REMOTE2=m
 19.2134 +CONFIG_INPUT_KEYSPAN_REMOTE=m
 19.2135 +CONFIG_INPUT_POWERMATE=m
 19.2136 +CONFIG_INPUT_YEALINK=m
 19.2137 +CONFIG_INPUT_CM109=m
 19.2138 +CONFIG_INPUT_UINPUT=m
 19.2139 +CONFIG_INPUT_WINBOND_CIR=m
 19.2140 +CONFIG_INPUT_PCF50633_PMU=m
 19.2141 +# CONFIG_INPUT_PCF8574 is not set
 19.2142 +CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
 19.2143 +CONFIG_INPUT_PCAP=m
 19.2144 +# CONFIG_INPUT_ADXL34X is not set
 19.2145 +
 19.2146 +#
 19.2147 +# Hardware I/O ports
 19.2148 +#
 19.2149 +CONFIG_SERIO=y
 19.2150 +CONFIG_SERIO_I8042=y
 19.2151 +CONFIG_SERIO_SERPORT=m
 19.2152 +CONFIG_SERIO_CT82C710=m
 19.2153 +CONFIG_SERIO_PARKBD=m
 19.2154 +CONFIG_SERIO_PCIPS2=m
 19.2155 +CONFIG_SERIO_LIBPS2=y
 19.2156 +CONFIG_SERIO_RAW=m
 19.2157 +CONFIG_SERIO_ALTERA_PS2=m
 19.2158 +# CONFIG_SERIO_PS2MULT is not set
 19.2159 +CONFIG_GAMEPORT=m
 19.2160 +CONFIG_GAMEPORT_NS558=m
 19.2161 +CONFIG_GAMEPORT_L4=m
 19.2162 +CONFIG_GAMEPORT_EMU10K1=m
 19.2163 +CONFIG_GAMEPORT_FM801=m
 19.2164 +
 19.2165 +#
 19.2166 +# Character devices
 19.2167 +#
 19.2168 +CONFIG_VT=y
 19.2169 +CONFIG_CONSOLE_TRANSLATIONS=y
 19.2170 +CONFIG_VT_CONSOLE=y
 19.2171 +CONFIG_HW_CONSOLE=y
 19.2172 +# CONFIG_VT_HW_CONSOLE_BINDING is not set
 19.2173 +# CONFIG_DEVKMEM is not set
 19.2174 +# CONFIG_SERIAL_NONSTANDARD is not set
 19.2175 +# CONFIG_N_GSM is not set
 19.2176 +CONFIG_NOZOMI=m
 19.2177 +
 19.2178 +#
 19.2179 +# Serial drivers
 19.2180 +#
 19.2181 +CONFIG_SERIAL_8250=m
 19.2182 +CONFIG_FIX_EARLYCON_MEM=y
 19.2183 +CONFIG_SERIAL_8250_PCI=m
 19.2184 +CONFIG_SERIAL_8250_PNP=m
 19.2185 +CONFIG_SERIAL_8250_NR_UARTS=2
 19.2186 +CONFIG_SERIAL_8250_RUNTIME_UARTS=2
 19.2187 +CONFIG_SERIAL_8250_EXTENDED=y
 19.2188 +CONFIG_SERIAL_8250_MANY_PORTS=y
 19.2189 +CONFIG_SERIAL_8250_FOURPORT=m
 19.2190 +CONFIG_SERIAL_8250_ACCENT=m
 19.2191 +CONFIG_SERIAL_8250_BOCA=m
 19.2192 +CONFIG_SERIAL_8250_EXAR_ST16C554=m
 19.2193 +CONFIG_SERIAL_8250_HUB6=m
 19.2194 +CONFIG_SERIAL_8250_SHARE_IRQ=y
 19.2195 +CONFIG_SERIAL_8250_DETECT_IRQ=y
 19.2196 +CONFIG_SERIAL_8250_RSA=y
 19.2197 +
 19.2198 +#
 19.2199 +# Non-8250 serial port support
 19.2200 +#
 19.2201 +CONFIG_SERIAL_MAX3100=m
 19.2202 +# CONFIG_SERIAL_MAX3107 is not set
 19.2203 +# CONFIG_SERIAL_MRST_MAX3110 is not set
 19.2204 +# CONFIG_SERIAL_MFD_HSU is not set
 19.2205 +CONFIG_SERIAL_UARTLITE=m
 19.2206 +CONFIG_SERIAL_CORE=m
 19.2207 +CONFIG_SERIAL_JSM=m
 19.2208 +CONFIG_SERIAL_TIMBERDALE=m
 19.2209 +# CONFIG_SERIAL_ALTERA_JTAGUART is not set
 19.2210 +# CONFIG_SERIAL_ALTERA_UART is not set
 19.2211 +CONFIG_UNIX98_PTYS=y
 19.2212 +# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
 19.2213 +# CONFIG_LEGACY_PTYS is not set
 19.2214 +# CONFIG_TTY_PRINTK is not set
 19.2215 +CONFIG_PRINTER=m
 19.2216 +CONFIG_LP_CONSOLE=y
 19.2217 +CONFIG_PPDEV=m
 19.2218 +CONFIG_HVC_DRIVER=y
 19.2219 +# CONFIG_VIRTIO_CONSOLE is not set
 19.2220 +CONFIG_IPMI_HANDLER=m
 19.2221 +# CONFIG_IPMI_PANIC_EVENT is not set
 19.2222 +CONFIG_IPMI_DEVICE_INTERFACE=m
 19.2223 +CONFIG_IPMI_SI=m
 19.2224 +CONFIG_IPMI_WATCHDOG=m
 19.2225 +CONFIG_IPMI_POWEROFF=m
 19.2226 +CONFIG_HW_RANDOM=m
 19.2227 +CONFIG_HW_RANDOM_TIMERIOMEM=m
 19.2228 +CONFIG_HW_RANDOM_INTEL=m
 19.2229 +CONFIG_HW_RANDOM_AMD=m
 19.2230 +CONFIG_HW_RANDOM_GEODE=m
 19.2231 +CONFIG_HW_RANDOM_VIA=m
 19.2232 +# CONFIG_HW_RANDOM_VIRTIO is not set
 19.2233 +CONFIG_NVRAM=m
 19.2234 +CONFIG_DTLK=m
 19.2235 +CONFIG_R3964=m
 19.2236 +CONFIG_APPLICOM=m
 19.2237 +CONFIG_SONYPI=m
 19.2238 +CONFIG_MWAVE=m
 19.2239 +CONFIG_PC8736x_GPIO=m
 19.2240 +CONFIG_NSC_GPIO=m
 19.2241 +CONFIG_CS5535_GPIO=m
 19.2242 +CONFIG_RAW_DRIVER=m
 19.2243 +CONFIG_MAX_RAW_DEVS=256
 19.2244 +CONFIG_HANGCHECK_TIMER=m
 19.2245 +CONFIG_TCG_TPM=m
 19.2246 +CONFIG_TCG_TIS=m
 19.2247 +CONFIG_TCG_NSC=m
 19.2248 +CONFIG_TCG_ATMEL=m
 19.2249 +CONFIG_TCG_INFINEON=m
 19.2250 +CONFIG_TELCLOCK=m
 19.2251 +CONFIG_DEVPORT=y
 19.2252 +# CONFIG_RAMOOPS is not set
 19.2253 +CONFIG_I2C=m
 19.2254 +CONFIG_I2C_BOARDINFO=y
 19.2255 +CONFIG_I2C_COMPAT=y
 19.2256 +CONFIG_I2C_CHARDEV=m
 19.2257 +# CONFIG_I2C_MUX is not set
 19.2258 +CONFIG_I2C_HELPER_AUTO=y
 19.2259 +CONFIG_I2C_SMBUS=m
 19.2260 +CONFIG_I2C_ALGOBIT=m
 19.2261 +CONFIG_I2C_ALGOPCF=m
 19.2262 +CONFIG_I2C_ALGOPCA=m
 19.2263 +
 19.2264 +#
 19.2265 +# I2C Hardware Bus support
 19.2266 +#
 19.2267 +
 19.2268 +#
 19.2269 +# PC SMBus host controller drivers
 19.2270 +#
 19.2271 +CONFIG_I2C_ALI1535=m
 19.2272 +CONFIG_I2C_ALI1563=m
 19.2273 +CONFIG_I2C_ALI15X3=m
 19.2274 +CONFIG_I2C_AMD756=m
 19.2275 +CONFIG_I2C_AMD756_S4882=m
 19.2276 +CONFIG_I2C_AMD8111=m
 19.2277 +CONFIG_I2C_I801=m
 19.2278 +CONFIG_I2C_ISCH=m
 19.2279 +CONFIG_I2C_PIIX4=m
 19.2280 +CONFIG_I2C_NFORCE2=m
 19.2281 +CONFIG_I2C_NFORCE2_S4985=m
 19.2282 +CONFIG_I2C_SIS5595=m
 19.2283 +CONFIG_I2C_SIS630=m
 19.2284 +CONFIG_I2C_SIS96X=m
 19.2285 +CONFIG_I2C_VIA=m
 19.2286 +CONFIG_I2C_VIAPRO=m
 19.2287 +
 19.2288 +#
 19.2289 +# I2C system bus drivers (mostly embedded / system-on-chip)
 19.2290 +#
 19.2291 +# CONFIG_I2C_GPIO is not set
 19.2292 +# CONFIG_I2C_INTEL_MID is not set
 19.2293 +CONFIG_I2C_OCORES=m
 19.2294 +CONFIG_I2C_PCA_PLATFORM=m
 19.2295 +CONFIG_I2C_SIMTEC=m
 19.2296 +CONFIG_I2C_XILINX=m
 19.2297 +
 19.2298 +#
 19.2299 +# External I2C/SMBus adapter drivers
 19.2300 +#
 19.2301 +CONFIG_I2C_PARPORT=m
 19.2302 +# CONFIG_I2C_PARPORT_LIGHT is not set
 19.2303 +CONFIG_I2C_TAOS_EVM=m
 19.2304 +# CONFIG_I2C_TINY_USB is not set
 19.2305 +
 19.2306 +#
 19.2307 +# Other I2C/SMBus bus drivers
 19.2308 +#
 19.2309 +CONFIG_I2C_ELEKTOR=m
 19.2310 +CONFIG_I2C_PCA_ISA=m
 19.2311 +CONFIG_I2C_STUB=m
 19.2312 +CONFIG_SCx200_ACB=m
 19.2313 +# CONFIG_I2C_DEBUG_CORE is not set
 19.2314 +# CONFIG_I2C_DEBUG_ALGO is not set
 19.2315 +# CONFIG_I2C_DEBUG_BUS is not set
 19.2316 +CONFIG_SPI=y
 19.2317 +CONFIG_SPI_MASTER=y
 19.2318 +
 19.2319 +#
 19.2320 +# SPI Master Controller Drivers
 19.2321 +#
 19.2322 +CONFIG_SPI_BITBANG=m
 19.2323 +CONFIG_SPI_BUTTERFLY=m
 19.2324 +# CONFIG_SPI_GPIO is not set
 19.2325 +CONFIG_SPI_LM70_LLP=m
 19.2326 +# CONFIG_SPI_TOPCLIFF_PCH is not set
 19.2327 +CONFIG_SPI_XILINX=m
 19.2328 +CONFIG_SPI_XILINX_PLTFM=m
 19.2329 +CONFIG_SPI_DESIGNWARE=m
 19.2330 +CONFIG_SPI_DW_PCI=m
 19.2331 +
 19.2332 +#
 19.2333 +# SPI Protocol Masters
 19.2334 +#
 19.2335 +CONFIG_SPI_SPIDEV=m
 19.2336 +# CONFIG_SPI_TLE62X0 is not set
 19.2337 +
 19.2338 +#
 19.2339 +# PPS support
 19.2340 +#
 19.2341 +CONFIG_PPS=m
 19.2342 +# CONFIG_PPS_DEBUG is not set
 19.2343 +
 19.2344 +#
 19.2345 +# PPS clients support
 19.2346 +#
 19.2347 +CONFIG_PPS_CLIENT_KTIMER=m
 19.2348 +CONFIG_PPS_CLIENT_LDISC=m
 19.2349 +CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
 19.2350 +CONFIG_GPIOLIB=y
 19.2351 +# CONFIG_GPIO_SYSFS is not set
 19.2352 +CONFIG_GPIO_MAX730X=m
 19.2353 +
 19.2354 +#
 19.2355 +# Memory mapped GPIO expanders:
 19.2356 +#
 19.2357 +# CONFIG_GPIO_BASIC_MMIO is not set
 19.2358 +CONFIG_GPIO_IT8761E=m
 19.2359 +CONFIG_GPIO_SCH=m
 19.2360 +# CONFIG_GPIO_VX855 is not set
 19.2361 +
 19.2362 +#
 19.2363 +# I2C GPIO expanders:
 19.2364 +#
 19.2365 +CONFIG_GPIO_MAX7300=m
 19.2366 +CONFIG_GPIO_MAX732X=m
 19.2367 +CONFIG_GPIO_PCA953X=m
 19.2368 +CONFIG_GPIO_PCF857X=m
 19.2369 +CONFIG_GPIO_ADP5588=m
 19.2370 +
 19.2371 +#
 19.2372 +# PCI GPIO expanders:
 19.2373 +#
 19.2374 +CONFIG_GPIO_CS5535=m
 19.2375 +CONFIG_GPIO_LANGWELL=y
 19.2376 +# CONFIG_GPIO_PCH is not set
 19.2377 +CONFIG_GPIO_TIMBERDALE=y
 19.2378 +# CONFIG_GPIO_RDC321X is not set
 19.2379 +
 19.2380 +#
 19.2381 +# SPI GPIO expanders:
 19.2382 +#
 19.2383 +CONFIG_GPIO_MAX7301=m
 19.2384 +CONFIG_GPIO_MCP23S08=m
 19.2385 +CONFIG_GPIO_MC33880=m
 19.2386 +# CONFIG_GPIO_74X164 is not set
 19.2387 +
 19.2388 +#
 19.2389 +# AC97 GPIO expanders:
 19.2390 +#
 19.2391 +# CONFIG_GPIO_UCB1400 is not set
 19.2392 +
 19.2393 +#
 19.2394 +# MODULbus GPIO expanders:
 19.2395 +#
 19.2396 +CONFIG_W1=m
 19.2397 +CONFIG_W1_CON=y
 19.2398 +
 19.2399 +#
 19.2400 +# 1-wire Bus Masters
 19.2401 +#
 19.2402 +CONFIG_W1_MASTER_MATROX=m
 19.2403 +CONFIG_W1_MASTER_DS2490=m
 19.2404 +CONFIG_W1_MASTER_DS2482=m
 19.2405 +CONFIG_W1_MASTER_GPIO=m
 19.2406 +
 19.2407 +#
 19.2408 +# 1-wire Slaves
 19.2409 +#
 19.2410 +CONFIG_W1_SLAVE_THERM=m
 19.2411 +CONFIG_W1_SLAVE_SMEM=m
 19.2412 +CONFIG_W1_SLAVE_DS2431=m
 19.2413 +CONFIG_W1_SLAVE_DS2433=m
 19.2414 +CONFIG_W1_SLAVE_DS2433_CRC=y
 19.2415 +CONFIG_W1_SLAVE_DS2760=m
 19.2416 +CONFIG_W1_SLAVE_BQ27000=m
 19.2417 +CONFIG_POWER_SUPPLY=m
 19.2418 +# CONFIG_POWER_SUPPLY_DEBUG is not set
 19.2419 +CONFIG_PDA_POWER=m
 19.2420 +# CONFIG_TEST_POWER is not set
 19.2421 +CONFIG_BATTERY_DS2760=m
 19.2422 +CONFIG_BATTERY_DS2782=m
 19.2423 +# CONFIG_BATTERY_BQ20Z75 is not set
 19.2424 +CONFIG_BATTERY_BQ27x00=m
 19.2425 +CONFIG_BATTERY_MAX17040=m
 19.2426 +CONFIG_CHARGER_PCF50633=m
 19.2427 +# CONFIG_CHARGER_ISP1704 is not set
 19.2428 +CONFIG_HWMON=m
 19.2429 +CONFIG_HWMON_VID=m
 19.2430 +# CONFIG_HWMON_DEBUG_CHIP is not set
 19.2431 +
 19.2432 +#
 19.2433 +# Native drivers
 19.2434 +#
 19.2435 +CONFIG_SENSORS_ABITUGURU=m
 19.2436 +CONFIG_SENSORS_ABITUGURU3=m
 19.2437 +CONFIG_SENSORS_AD7414=m
 19.2438 +CONFIG_SENSORS_AD7418=m
 19.2439 +CONFIG_SENSORS_ADCXX=m
 19.2440 +CONFIG_SENSORS_ADM1021=m
 19.2441 +CONFIG_SENSORS_ADM1025=m
 19.2442 +CONFIG_SENSORS_ADM1026=m
 19.2443 +CONFIG_SENSORS_ADM1029=m
 19.2444 +CONFIG_SENSORS_ADM1031=m
 19.2445 +CONFIG_SENSORS_ADM9240=m
 19.2446 +CONFIG_SENSORS_ADT7411=m
 19.2447 +CONFIG_SENSORS_ADT7462=m
 19.2448 +CONFIG_SENSORS_ADT7470=m
 19.2449 +CONFIG_SENSORS_ADT7475=m
 19.2450 +CONFIG_SENSORS_ASC7621=m
 19.2451 +CONFIG_SENSORS_K8TEMP=m
 19.2452 +CONFIG_SENSORS_K10TEMP=m
 19.2453 +CONFIG_SENSORS_ASB100=m
 19.2454 +CONFIG_SENSORS_ATXP1=m
 19.2455 +CONFIG_SENSORS_DS1621=m
 19.2456 +CONFIG_SENSORS_I5K_AMB=m
 19.2457 +CONFIG_SENSORS_F71805F=m
 19.2458 +CONFIG_SENSORS_F71882FG=m
 19.2459 +CONFIG_SENSORS_F75375S=m
 19.2460 +CONFIG_SENSORS_FSCHMD=m
 19.2461 +CONFIG_SENSORS_G760A=m
 19.2462 +CONFIG_SENSORS_GL518SM=m
 19.2463 +CONFIG_SENSORS_GL520SM=m
 19.2464 +# CONFIG_SENSORS_GPIO_FAN is not set
 19.2465 +CONFIG_SENSORS_CORETEMP=m
 19.2466 +# CONFIG_SENSORS_PKGTEMP is not set
 19.2467 +CONFIG_SENSORS_IBMAEM=m
 19.2468 +CONFIG_SENSORS_IBMPEX=m
 19.2469 +CONFIG_SENSORS_IT87=m
 19.2470 +# CONFIG_SENSORS_JC42 is not set
 19.2471 +CONFIG_SENSORS_LM63=m
 19.2472 +CONFIG_SENSORS_LM70=m
 19.2473 +CONFIG_SENSORS_LM73=m
 19.2474 +CONFIG_SENSORS_LM75=m
 19.2475 +CONFIG_SENSORS_LM77=m
 19.2476 +CONFIG_SENSORS_LM78=m
 19.2477 +CONFIG_SENSORS_LM80=m
 19.2478 +CONFIG_SENSORS_LM83=m
 19.2479 +CONFIG_SENSORS_LM85=m
 19.2480 +CONFIG_SENSORS_LM87=m
 19.2481 +CONFIG_SENSORS_LM90=m
 19.2482 +CONFIG_SENSORS_LM92=m
 19.2483 +CONFIG_SENSORS_LM93=m
 19.2484 +CONFIG_SENSORS_LTC4215=m
 19.2485 +CONFIG_SENSORS_LTC4245=m
 19.2486 +# CONFIG_SENSORS_LTC4261 is not set
 19.2487 +CONFIG_SENSORS_LM95241=m
 19.2488 +CONFIG_SENSORS_MAX1111=m
 19.2489 +CONFIG_SENSORS_MAX1619=m
 19.2490 +CONFIG_SENSORS_MAX6650=m
 19.2491 +CONFIG_SENSORS_PC87360=m
 19.2492 +CONFIG_SENSORS_PC87427=m
 19.2493 +CONFIG_SENSORS_PCF8591=m
 19.2494 +CONFIG_SENSORS_SHT15=m
 19.2495 +CONFIG_SENSORS_SIS5595=m
 19.2496 +# CONFIG_SENSORS_SMM665 is not set
 19.2497 +CONFIG_SENSORS_DME1737=m
 19.2498 +# CONFIG_SENSORS_EMC1403 is not set
 19.2499 +# CONFIG_SENSORS_EMC2103 is not set
 19.2500 +CONFIG_SENSORS_SMSC47M1=m
 19.2501 +CONFIG_SENSORS_SMSC47M192=m
 19.2502 +CONFIG_SENSORS_SMSC47B397=m
 19.2503 +CONFIG_SENSORS_ADS7828=m
 19.2504 +# CONFIG_SENSORS_ADS7871 is not set
 19.2505 +CONFIG_SENSORS_AMC6821=m
 19.2506 +CONFIG_SENSORS_THMC50=m
 19.2507 +# CONFIG_SENSORS_TMP102 is not set
 19.2508 +CONFIG_SENSORS_TMP401=m
 19.2509 +CONFIG_SENSORS_TMP421=m
 19.2510 +CONFIG_SENSORS_VIA_CPUTEMP=m
 19.2511 +CONFIG_SENSORS_VIA686A=m
 19.2512 +CONFIG_SENSORS_VT1211=m
 19.2513 +CONFIG_SENSORS_VT8231=m
 19.2514 +CONFIG_SENSORS_W83781D=m
 19.2515 +CONFIG_SENSORS_W83791D=m
 19.2516 +CONFIG_SENSORS_W83792D=m
 19.2517 +CONFIG_SENSORS_W83793=m
 19.2518 +# CONFIG_SENSORS_W83795 is not set
 19.2519 +CONFIG_SENSORS_W83L785TS=m
 19.2520 +CONFIG_SENSORS_W83L786NG=m
 19.2521 +CONFIG_SENSORS_W83627HF=m
 19.2522 +CONFIG_SENSORS_W83627EHF=m
 19.2523 +CONFIG_SENSORS_LIS3_SPI=m
 19.2524 +CONFIG_SENSORS_LIS3_I2C=m
 19.2525 +CONFIG_SENSORS_APPLESMC=m
 19.2526 +CONFIG_THERMAL=m
 19.2527 +CONFIG_THERMAL_HWMON=y
 19.2528 +CONFIG_WATCHDOG=y
 19.2529 +# CONFIG_WATCHDOG_NOWAYOUT is not set
 19.2530 +
 19.2531 +#
 19.2532 +# Watchdog Device Drivers
 19.2533 +#
 19.2534 +CONFIG_SOFT_WATCHDOG=m
 19.2535 +CONFIG_ACQUIRE_WDT=m
 19.2536 +CONFIG_ADVANTECH_WDT=m
 19.2537 +CONFIG_ALIM1535_WDT=m
 19.2538 +CONFIG_ALIM7101_WDT=m
 19.2539 +# CONFIG_F71808E_WDT is not set
 19.2540 +CONFIG_GEODE_WDT=m
 19.2541 +CONFIG_SC520_WDT=m
 19.2542 +CONFIG_SBC_FITPC2_WATCHDOG=m
 19.2543 +CONFIG_EUROTECH_WDT=m
 19.2544 +CONFIG_IB700_WDT=m
 19.2545 +CONFIG_IBMASR=m
 19.2546 +CONFIG_WAFER_WDT=m
 19.2547 +CONFIG_I6300ESB_WDT=m
 19.2548 +CONFIG_ITCO_WDT=m
 19.2549 +CONFIG_ITCO_VENDOR_SUPPORT=y
 19.2550 +CONFIG_IT8712F_WDT=m
 19.2551 +CONFIG_IT87_WDT=m
 19.2552 +CONFIG_HP_WATCHDOG=m
 19.2553 +# CONFIG_HPWDT_NMI_DECODING is not set
 19.2554 +CONFIG_SC1200_WDT=m
 19.2555 +CONFIG_PC87413_WDT=m
 19.2556 +CONFIG_60XX_WDT=m
 19.2557 +CONFIG_SBC8360_WDT=m
 19.2558 +CONFIG_SBC7240_WDT=m
 19.2559 +CONFIG_CPU5_WDT=m
 19.2560 +CONFIG_SMSC_SCH311X_WDT=m
 19.2561 +CONFIG_SMSC37B787_WDT=m
 19.2562 +CONFIG_W83627HF_WDT=m
 19.2563 +CONFIG_W83697HF_WDT=m
 19.2564 +CONFIG_W83697UG_WDT=m
 19.2565 +CONFIG_W83877F_WDT=m
 19.2566 +CONFIG_W83977F_WDT=m
 19.2567 +CONFIG_MACHZ_WDT=m
 19.2568 +CONFIG_SBC_EPX_C3_WATCHDOG=m
 19.2569 +
 19.2570 +#
 19.2571 +# ISA-based Watchdog Cards
 19.2572 +#
 19.2573 +CONFIG_PCWATCHDOG=m
 19.2574 +CONFIG_MIXCOMWD=m
 19.2575 +CONFIG_WDT=m
 19.2576 +
 19.2577 +#
 19.2578 +# PCI-based Watchdog Cards
 19.2579 +#
 19.2580 +CONFIG_PCIPCWATCHDOG=m
 19.2581 +CONFIG_WDTPCI=m
 19.2582 +
 19.2583 +#
 19.2584 +# USB-based Watchdog Cards
 19.2585 +#
 19.2586 +CONFIG_USBPCWATCHDOG=m
 19.2587 +CONFIG_SSB_POSSIBLE=y
 19.2588 +
 19.2589 +#
 19.2590 +# Sonics Silicon Backplane
 19.2591 +#
 19.2592 +CONFIG_SSB=m
 19.2593 +CONFIG_SSB_SPROM=y
 19.2594 +CONFIG_SSB_BLOCKIO=y
 19.2595 +CONFIG_SSB_PCIHOST_POSSIBLE=y
 19.2596 +CONFIG_SSB_PCIHOST=y
 19.2597 +CONFIG_SSB_B43_PCI_BRIDGE=y
 19.2598 +CONFIG_SSB_SDIOHOST_POSSIBLE=y
 19.2599 +# CONFIG_SSB_SDIOHOST is not set
 19.2600 +# CONFIG_SSB_SILENT is not set
 19.2601 +# CONFIG_SSB_DEBUG is not set
 19.2602 +CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
 19.2603 +CONFIG_SSB_DRIVER_PCICORE=y
 19.2604 +CONFIG_MFD_SUPPORT=y
 19.2605 +CONFIG_MFD_CORE=m
 19.2606 +CONFIG_MFD_SM501=m
 19.2607 +CONFIG_MFD_SM501_GPIO=y
 19.2608 +CONFIG_HTC_PASIC3=m
 19.2609 +CONFIG_UCB1400_CORE=m
 19.2610 +CONFIG_TPS65010=m
 19.2611 +# CONFIG_TPS6507X is not set
 19.2612 +# CONFIG_MFD_TMIO is not set
 19.2613 +CONFIG_MFD_WM8400=m
 19.2614 +# CONFIG_MFD_WM831X_SPI is not set
 19.2615 +CONFIG_MFD_PCF50633=m
 19.2616 +# CONFIG_MFD_MC13XXX is not set
 19.2617 +CONFIG_PCF50633_ADC=m
 19.2618 +CONFIG_PCF50633_GPIO=m
 19.2619 +# CONFIG_ABX500_CORE is not set
 19.2620 +CONFIG_EZX_PCAP=y
 19.2621 +CONFIG_MFD_TIMBERDALE=m
 19.2622 +CONFIG_LPC_SCH=m
 19.2623 +# CONFIG_MFD_RDC321X is not set
 19.2624 +# CONFIG_MFD_JANZ_CMODIO is not set
 19.2625 +# CONFIG_MFD_VX855 is not set
 19.2626 +CONFIG_REGULATOR=y
 19.2627 +# CONFIG_REGULATOR_DEBUG is not set
 19.2628 +# CONFIG_REGULATOR_DUMMY is not set
 19.2629 +CONFIG_REGULATOR_FIXED_VOLTAGE=m
 19.2630 +CONFIG_REGULATOR_VIRTUAL_CONSUMER=m
 19.2631 +CONFIG_REGULATOR_USERSPACE_CONSUMER=m
 19.2632 +CONFIG_REGULATOR_BQ24022=m
 19.2633 +CONFIG_REGULATOR_MAX1586=m
 19.2634 +CONFIG_REGULATOR_MAX8649=m
 19.2635 +CONFIG_REGULATOR_MAX8660=m
 19.2636 +# CONFIG_REGULATOR_MAX8952 is not set
 19.2637 +CONFIG_REGULATOR_WM8400=m
 19.2638 +CONFIG_REGULATOR_PCF50633=m
 19.2639 +CONFIG_REGULATOR_LP3971=m
 19.2640 +# CONFIG_REGULATOR_LP3972 is not set
 19.2641 +CONFIG_REGULATOR_PCAP=m
 19.2642 +CONFIG_REGULATOR_TPS65023=m
 19.2643 +CONFIG_REGULATOR_TPS6507X=m
 19.2644 +# CONFIG_REGULATOR_ISL6271A is not set
 19.2645 +# CONFIG_REGULATOR_AD5398 is not set
 19.2646 +CONFIG_MEDIA_SUPPORT=m
 19.2647 +
 19.2648 +#
 19.2649 +# Multimedia core support
 19.2650 +#
 19.2651 +CONFIG_VIDEO_DEV=m
 19.2652 +CONFIG_VIDEO_V4L2_COMMON=m
 19.2653 +CONFIG_VIDEO_ALLOW_V4L1=y
 19.2654 +CONFIG_VIDEO_V4L1_COMPAT=y
 19.2655 +CONFIG_DVB_CORE=m
 19.2656 +CONFIG_VIDEO_MEDIA=m
 19.2657 +
 19.2658 +#
 19.2659 +# Multimedia drivers
 19.2660 +#
 19.2661 +CONFIG_VIDEO_SAA7146=m
 19.2662 +CONFIG_VIDEO_SAA7146_VV=m
 19.2663 +CONFIG_IR_CORE=m
 19.2664 +CONFIG_VIDEO_IR=m
 19.2665 +CONFIG_LIRC=m
 19.2666 +CONFIG_RC_MAP=m
 19.2667 +CONFIG_IR_NEC_DECODER=m
 19.2668 +CONFIG_IR_RC5_DECODER=m
 19.2669 +CONFIG_IR_RC6_DECODER=m
 19.2670 +CONFIG_IR_JVC_DECODER=m
 19.2671 +CONFIG_IR_SONY_DECODER=m
 19.2672 +CONFIG_IR_RC5_SZ_DECODER=m
 19.2673 +CONFIG_IR_LIRC_CODEC=m
 19.2674 +# CONFIG_IR_ENE is not set
 19.2675 +# CONFIG_IR_IMON is not set
 19.2676 +# CONFIG_IR_MCEUSB is not set
 19.2677 +# CONFIG_IR_NUVOTON is not set
 19.2678 +# CONFIG_IR_STREAMZAP is not set
 19.2679 +CONFIG_MEDIA_ATTACH=y
 19.2680 +CONFIG_MEDIA_TUNER=m
 19.2681 +CONFIG_MEDIA_TUNER_CUSTOMISE=y
 19.2682 +
 19.2683 +#
 19.2684 +# Customize TV tuners
 19.2685 +#
 19.2686 +CONFIG_MEDIA_TUNER_SIMPLE=m
 19.2687 +CONFIG_MEDIA_TUNER_TDA8290=m
 19.2688 +CONFIG_MEDIA_TUNER_TDA827X=m
 19.2689 +CONFIG_MEDIA_TUNER_TDA18271=m
 19.2690 +CONFIG_MEDIA_TUNER_TDA9887=m
 19.2691 +CONFIG_MEDIA_TUNER_TEA5761=m
 19.2692 +CONFIG_MEDIA_TUNER_TEA5767=m
 19.2693 +CONFIG_MEDIA_TUNER_MT20XX=m
 19.2694 +CONFIG_MEDIA_TUNER_MT2060=m
 19.2695 +CONFIG_MEDIA_TUNER_MT2266=m
 19.2696 +CONFIG_MEDIA_TUNER_MT2131=m
 19.2697 +CONFIG_MEDIA_TUNER_QT1010=m
 19.2698 +CONFIG_MEDIA_TUNER_XC2028=m
 19.2699 +CONFIG_MEDIA_TUNER_XC5000=m
 19.2700 +CONFIG_MEDIA_TUNER_MXL5005S=m
 19.2701 +CONFIG_MEDIA_TUNER_MXL5007T=m
 19.2702 +CONFIG_MEDIA_TUNER_MC44S803=m
 19.2703 +CONFIG_MEDIA_TUNER_MAX2165=m
 19.2704 +CONFIG_MEDIA_TUNER_TDA18218=m
 19.2705 +CONFIG_VIDEO_V4L2=m
 19.2706 +CONFIG_VIDEO_V4L1=m
 19.2707 +CONFIG_VIDEOBUF_GEN=m
 19.2708 +CONFIG_VIDEOBUF_DMA_SG=m
 19.2709 +CONFIG_VIDEOBUF_VMALLOC=m
 19.2710 +CONFIG_VIDEOBUF_DVB=m
 19.2711 +CONFIG_VIDEO_BTCX=m
 19.2712 +CONFIG_VIDEO_TVEEPROM=m
 19.2713 +CONFIG_VIDEO_TUNER=m
 19.2714 +CONFIG_VIDEO_CAPTURE_DRIVERS=y
 19.2715 +# CONFIG_VIDEO_ADV_DEBUG is not set
 19.2716 +# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
 19.2717 +CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
 19.2718 +CONFIG_VIDEO_IR_I2C=m
 19.2719 +
 19.2720 +#
 19.2721 +# Audio decoders
 19.2722 +#
 19.2723 +CONFIG_VIDEO_TVAUDIO=m
 19.2724 +CONFIG_VIDEO_TDA7432=m
 19.2725 +CONFIG_VIDEO_TDA9840=m
 19.2726 +CONFIG_VIDEO_TEA6415C=m
 19.2727 +CONFIG_VIDEO_TEA6420=m
 19.2728 +CONFIG_VIDEO_MSP3400=m
 19.2729 +CONFIG_VIDEO_CS5345=m
 19.2730 +CONFIG_VIDEO_CS53L32A=m
 19.2731 +CONFIG_VIDEO_M52790=m
 19.2732 +CONFIG_VIDEO_WM8775=m
 19.2733 +CONFIG_VIDEO_WM8739=m
 19.2734 +CONFIG_VIDEO_VP27SMPX=m
 19.2735 +
 19.2736 +#
 19.2737 +# RDS decoders
 19.2738 +#
 19.2739 +CONFIG_VIDEO_SAA6588=m
 19.2740 +
 19.2741 +#
 19.2742 +# Video decoders
 19.2743 +#
 19.2744 +CONFIG_VIDEO_BT819=m
 19.2745 +CONFIG_VIDEO_BT856=m
 19.2746 +CONFIG_VIDEO_BT866=m
 19.2747 +CONFIG_VIDEO_KS0127=m
 19.2748 +CONFIG_VIDEO_OV7670=m
 19.2749 +CONFIG_VIDEO_SAA7110=m
 19.2750 +CONFIG_VIDEO_SAA711X=m
 19.2751 +CONFIG_VIDEO_SAA717X=m
 19.2752 +CONFIG_VIDEO_VPX3220=m
 19.2753 +
 19.2754 +#
 19.2755 +# Video and audio decoders
 19.2756 +#
 19.2757 +CONFIG_VIDEO_CX25840=m
 19.2758 +
 19.2759 +#
 19.2760 +# MPEG video encoders
 19.2761 +#
 19.2762 +CONFIG_VIDEO_CX2341X=m
 19.2763 +
 19.2764 +#
 19.2765 +# Video encoders
 19.2766 +#
 19.2767 +CONFIG_VIDEO_SAA7127=m
 19.2768 +CONFIG_VIDEO_SAA7185=m
 19.2769 +CONFIG_VIDEO_ADV7170=m
 19.2770 +CONFIG_VIDEO_ADV7175=m
 19.2771 +
 19.2772 +#
 19.2773 +# Video improvement chips
 19.2774 +#
 19.2775 +CONFIG_VIDEO_UPD64031A=m
 19.2776 +CONFIG_VIDEO_UPD64083=m
 19.2777 +CONFIG_VIDEO_VIVI=m
 19.2778 +CONFIG_VIDEO_BT848=m
 19.2779 +CONFIG_VIDEO_BT848_DVB=y
 19.2780 +CONFIG_VIDEO_PMS=m
 19.2781 +CONFIG_VIDEO_BWQCAM=m
 19.2782 +CONFIG_VIDEO_CQCAM=m
 19.2783 +CONFIG_VIDEO_W9966=m
 19.2784 +# CONFIG_VIDEO_CPIA2 is not set
 19.2785 +CONFIG_VIDEO_ZORAN=m
 19.2786 +CONFIG_VIDEO_ZORAN_DC30=m
 19.2787 +CONFIG_VIDEO_ZORAN_ZR36060=m
 19.2788 +CONFIG_VIDEO_ZORAN_BUZ=m
 19.2789 +CONFIG_VIDEO_ZORAN_DC10=m
 19.2790 +CONFIG_VIDEO_ZORAN_LML33=m
 19.2791 +CONFIG_VIDEO_ZORAN_LML33R10=m
 19.2792 +CONFIG_VIDEO_ZORAN_AVS6EYES=m
 19.2793 +CONFIG_VIDEO_SAA7134=m
 19.2794 +# CONFIG_VIDEO_SAA7134_ALSA is not set
 19.2795 +CONFIG_VIDEO_SAA7134_RC=y
 19.2796 +CONFIG_VIDEO_SAA7134_DVB=m
 19.2797 +CONFIG_VIDEO_MXB=m
 19.2798 +CONFIG_VIDEO_HEXIUM_ORION=m
 19.2799 +CONFIG_VIDEO_HEXIUM_GEMINI=m
 19.2800 +CONFIG_VIDEO_CX88=m
 19.2801 +# CONFIG_VIDEO_CX88_ALSA is not set
 19.2802 +CONFIG_VIDEO_CX88_BLACKBIRD=m
 19.2803 +CONFIG_VIDEO_CX88_DVB=m
 19.2804 +CONFIG_VIDEO_CX88_MPEG=m
 19.2805 +CONFIG_VIDEO_CX88_VP3054=m
 19.2806 +CONFIG_VIDEO_CX23885=m
 19.2807 +# CONFIG_VIDEO_AU0828 is not set
 19.2808 +CONFIG_VIDEO_IVTV=m
 19.2809 +# CONFIG_VIDEO_FB_IVTV is not set
 19.2810 +CONFIG_VIDEO_CX18=m
 19.2811 +# CONFIG_VIDEO_CX18_ALSA is not set
 19.2812 +CONFIG_VIDEO_SAA7164=m
 19.2813 +CONFIG_VIDEO_CAFE_CCIC=m
 19.2814 +# CONFIG_VIDEO_SR030PC30 is not set
 19.2815 +# CONFIG_VIDEO_VIA_CAMERA is not set
 19.2816 +CONFIG_SOC_CAMERA=m
 19.2817 +# CONFIG_SOC_CAMERA_IMX074 is not set
 19.2818 +# CONFIG_SOC_CAMERA_MT9M001 is not set
 19.2819 +# CONFIG_SOC_CAMERA_MT9M111 is not set
 19.2820 +# CONFIG_SOC_CAMERA_MT9T031 is not set
 19.2821 +# CONFIG_SOC_CAMERA_MT9T112 is not set
 19.2822 +# CONFIG_SOC_CAMERA_MT9V022 is not set
 19.2823 +# CONFIG_SOC_CAMERA_RJ54N1 is not set
 19.2824 +# CONFIG_SOC_CAMERA_TW9910 is not set
 19.2825 +# CONFIG_SOC_CAMERA_PLATFORM is not set
 19.2826 +# CONFIG_SOC_CAMERA_OV6650 is not set
 19.2827 +# CONFIG_SOC_CAMERA_OV772X is not set
 19.2828 +# CONFIG_SOC_CAMERA_OV9640 is not set
 19.2829 +CONFIG_V4L_USB_DRIVERS=y
 19.2830 +# CONFIG_USB_VIDEO_CLASS is not set
 19.2831 +CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
 19.2832 +CONFIG_USB_GSPCA=m
 19.2833 +# CONFIG_USB_M5602 is not set
 19.2834 +# CONFIG_USB_STV06XX is not set
 19.2835 +# CONFIG_USB_GL860 is not set
 19.2836 +# CONFIG_USB_GSPCA_BENQ is not set
 19.2837 +# CONFIG_USB_GSPCA_CONEX is not set
 19.2838 +# CONFIG_USB_GSPCA_CPIA1 is not set
 19.2839 +# CONFIG_USB_GSPCA_ETOMS is not set
 19.2840 +# CONFIG_USB_GSPCA_FINEPIX is not set
 19.2841 +# CONFIG_USB_GSPCA_JEILINJ is not set
 19.2842 +# CONFIG_USB_GSPCA_KONICA is not set
 19.2843 +# CONFIG_USB_GSPCA_MARS is not set
 19.2844 +# CONFIG_USB_GSPCA_MR97310A is not set
 19.2845 +# CONFIG_USB_GSPCA_OV519 is not set
 19.2846 +# CONFIG_USB_GSPCA_OV534 is not set
 19.2847 +# CONFIG_USB_GSPCA_OV534_9 is not set
 19.2848 +# CONFIG_USB_GSPCA_PAC207 is not set
 19.2849 +# CONFIG_USB_GSPCA_PAC7302 is not set
 19.2850 +# CONFIG_USB_GSPCA_PAC7311 is not set
 19.2851 +# CONFIG_USB_GSPCA_SN9C2028 is not set
 19.2852 +# CONFIG_USB_GSPCA_SN9C20X is not set
 19.2853 +# CONFIG_USB_GSPCA_SONIXB is not set
 19.2854 +# CONFIG_USB_GSPCA_SONIXJ is not set
 19.2855 +# CONFIG_USB_GSPCA_SPCA500 is not set
 19.2856 +# CONFIG_USB_GSPCA_SPCA501 is not set
 19.2857 +# CONFIG_USB_GSPCA_SPCA505 is not set
 19.2858 +# CONFIG_USB_GSPCA_SPCA506 is not set
 19.2859 +# CONFIG_USB_GSPCA_SPCA508 is not set
 19.2860 +# CONFIG_USB_GSPCA_SPCA561 is not set
 19.2861 +# CONFIG_USB_GSPCA_SPCA1528 is not set
 19.2862 +# CONFIG_USB_GSPCA_SQ905 is not set
 19.2863 +# CONFIG_USB_GSPCA_SQ905C is not set
 19.2864 +# CONFIG_USB_GSPCA_SQ930X is not set
 19.2865 +# CONFIG_USB_GSPCA_STK014 is not set
 19.2866 +# CONFIG_USB_GSPCA_STV0680 is not set
 19.2867 +# CONFIG_USB_GSPCA_SUNPLUS is not set
 19.2868 +# CONFIG_USB_GSPCA_T613 is not set
 19.2869 +# CONFIG_USB_GSPCA_TV8532 is not set
 19.2870 +# CONFIG_USB_GSPCA_VC032X is not set
 19.2871 +# CONFIG_USB_GSPCA_XIRLINK_CIT is not set
 19.2872 +# CONFIG_USB_GSPCA_ZC3XX is not set
 19.2873 +# CONFIG_VIDEO_PVRUSB2 is not set
 19.2874 +# CONFIG_VIDEO_HDPVR is not set
 19.2875 +# CONFIG_VIDEO_EM28XX is not set
 19.2876 +# CONFIG_VIDEO_TLG2300 is not set
 19.2877 +# CONFIG_VIDEO_CX231XX is not set
 19.2878 +# CONFIG_VIDEO_USBVISION is not set
 19.2879 +# CONFIG_USB_VICAM is not set
 19.2880 +# CONFIG_USB_IBMCAM is not set
 19.2881 +# CONFIG_USB_KONICAWC is not set
 19.2882 +# CONFIG_USB_ET61X251 is not set
 19.2883 +# CONFIG_USB_SE401 is not set
 19.2884 +# CONFIG_USB_SN9C102 is not set
 19.2885 +# CONFIG_USB_PWC is not set
 19.2886 +# CONFIG_USB_ZR364XX is not set
 19.2887 +# CONFIG_USB_STKWEBCAM is not set
 19.2888 +# CONFIG_USB_S2255 is not set
 19.2889 +# CONFIG_V4L_MEM2MEM_DRIVERS is not set
 19.2890 +CONFIG_RADIO_ADAPTERS=y
 19.2891 +CONFIG_RADIO_CADET=m
 19.2892 +CONFIG_RADIO_RTRACK=m
 19.2893 +CONFIG_RADIO_RTRACK2=m
 19.2894 +CONFIG_RADIO_AZTECH=m
 19.2895 +CONFIG_RADIO_GEMTEK=m
 19.2896 +CONFIG_RADIO_GEMTEK_PCI=m
 19.2897 +CONFIG_RADIO_MAXIRADIO=m
 19.2898 +CONFIG_RADIO_MAESTRO=m
 19.2899 +# CONFIG_RADIO_MIROPCM20 is not set
 19.2900 +CONFIG_RADIO_SF16FMI=m
 19.2901 +CONFIG_RADIO_SF16FMR2=m
 19.2902 +CONFIG_RADIO_TERRATEC=m
 19.2903 +CONFIG_RADIO_TRUST=m
 19.2904 +CONFIG_RADIO_TYPHOON=m
 19.2905 +CONFIG_RADIO_ZOLTRIX=m
 19.2906 +CONFIG_I2C_SI4713=m
 19.2907 +CONFIG_RADIO_SI4713=m
 19.2908 +# CONFIG_USB_DSBR is not set
 19.2909 +CONFIG_RADIO_SI470X=y
 19.2910 +# CONFIG_USB_SI470X is not set
 19.2911 +CONFIG_I2C_SI470X=m
 19.2912 +# CONFIG_USB_MR800 is not set
 19.2913 +CONFIG_RADIO_TEA5764=m
 19.2914 +CONFIG_RADIO_SAA7706H=m
 19.2915 +CONFIG_RADIO_TEF6862=m
 19.2916 +CONFIG_RADIO_TIMBERDALE=m
 19.2917 +CONFIG_DVB_MAX_ADAPTERS=8
 19.2918 +CONFIG_DVB_DYNAMIC_MINORS=y
 19.2919 +CONFIG_DVB_CAPTURE_DRIVERS=y
 19.2920 +
 19.2921 +#
 19.2922 +# Supported SAA7146 based PCI Adapters
 19.2923 +#
 19.2924 +CONFIG_TTPCI_EEPROM=m
 19.2925 +CONFIG_DVB_AV7110=m
 19.2926 +CONFIG_DVB_AV7110_OSD=y
 19.2927 +CONFIG_DVB_BUDGET_CORE=m
 19.2928 +CONFIG_DVB_BUDGET=m
 19.2929 +CONFIG_DVB_BUDGET_CI=m
 19.2930 +CONFIG_DVB_BUDGET_AV=m
 19.2931 +CONFIG_DVB_BUDGET_PATCH=m
 19.2932 +
 19.2933 +#
 19.2934 +# Supported USB Adapters
 19.2935 +#
 19.2936 +# CONFIG_DVB_USB is not set
 19.2937 +# CONFIG_DVB_TTUSB_BUDGET is not set
 19.2938 +# CONFIG_DVB_TTUSB_DEC is not set
 19.2939 +CONFIG_SMS_SIANO_MDTV=m
 19.2940 +
 19.2941 +#
 19.2942 +# Siano module components
 19.2943 +#
 19.2944 +# CONFIG_SMS_USB_DRV is not set
 19.2945 +# CONFIG_SMS_SDIO_DRV is not set
 19.2946 +
 19.2947 +#
 19.2948 +# Supported FlexCopII (B2C2) Adapters
 19.2949 +#
 19.2950 +CONFIG_DVB_B2C2_FLEXCOP=m
 19.2951 +CONFIG_DVB_B2C2_FLEXCOP_PCI=m
 19.2952 +# CONFIG_DVB_B2C2_FLEXCOP_USB is not set
 19.2953 +# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
 19.2954 +
 19.2955 +#
 19.2956 +# Supported BT878 Adapters
 19.2957 +#
 19.2958 +CONFIG_DVB_BT8XX=m
 19.2959 +
 19.2960 +#
 19.2961 +# Supported Pluto2 Adapters
 19.2962 +#
 19.2963 +CONFIG_DVB_PLUTO2=m
 19.2964 +
 19.2965 +#
 19.2966 +# Supported SDMC DM1105 Adapters
 19.2967 +#
 19.2968 +CONFIG_DVB_DM1105=m
 19.2969 +CONFIG_DVB_FIREDTV=m
 19.2970 +CONFIG_DVB_FIREDTV_FIREWIRE=y
 19.2971 +# CONFIG_DVB_FIREDTV_IEEE1394 is not set
 19.2972 +CONFIG_DVB_FIREDTV_INPUT=y
 19.2973 +
 19.2974 +#
 19.2975 +# Supported Earthsoft PT1 Adapters
 19.2976 +#
 19.2977 +CONFIG_DVB_PT1=m
 19.2978 +
 19.2979 +#
 19.2980 +# Supported Mantis Adapters
 19.2981 +#
 19.2982 +CONFIG_MANTIS_CORE=m
 19.2983 +CONFIG_DVB_MANTIS=m
 19.2984 +CONFIG_DVB_HOPPER=m
 19.2985 +
 19.2986 +#
 19.2987 +# Supported nGene Adapters
 19.2988 +#
 19.2989 +CONFIG_DVB_NGENE=m
 19.2990 +
 19.2991 +#
 19.2992 +# Supported DVB Frontends
 19.2993 +#
 19.2994 +# CONFIG_DVB_FE_CUSTOMISE is not set
 19.2995 +
 19.2996 +#
 19.2997 +# Multistandard (satellite) frontends
 19.2998 +#
 19.2999 +CONFIG_DVB_STB0899=m
 19.3000 +CONFIG_DVB_STB6100=m
 19.3001 +CONFIG_DVB_STV090x=m
 19.3002 +CONFIG_DVB_STV6110x=m
 19.3003 +
 19.3004 +#
 19.3005 +# DVB-S (satellite) frontends
 19.3006 +#
 19.3007 +CONFIG_DVB_CX24110=m
 19.3008 +CONFIG_DVB_CX24123=m
 19.3009 +CONFIG_DVB_MT312=m
 19.3010 +CONFIG_DVB_ZL10036=m
 19.3011 +CONFIG_DVB_ZL10039=m
 19.3012 +CONFIG_DVB_S5H1420=m
 19.3013 +CONFIG_DVB_STV0288=m
 19.3014 +CONFIG_DVB_STB6000=m
 19.3015 +CONFIG_DVB_STV0299=m
 19.3016 +CONFIG_DVB_STV6110=m
 19.3017 +CONFIG_DVB_STV0900=m
 19.3018 +CONFIG_DVB_TDA8083=m
 19.3019 +CONFIG_DVB_TDA10086=m
 19.3020 +CONFIG_DVB_TDA8261=m
 19.3021 +CONFIG_DVB_VES1X93=m
 19.3022 +CONFIG_DVB_TUNER_ITD1000=m
 19.3023 +CONFIG_DVB_TUNER_CX24113=m
 19.3024 +CONFIG_DVB_TDA826X=m
 19.3025 +CONFIG_DVB_TUA6100=m
 19.3026 +CONFIG_DVB_CX24116=m
 19.3027 +CONFIG_DVB_SI21XX=m
 19.3028 +CONFIG_DVB_DS3000=m
 19.3029 +CONFIG_DVB_MB86A16=m
 19.3030 +
 19.3031 +#
 19.3032 +# DVB-T (terrestrial) frontends
 19.3033 +#
 19.3034 +CONFIG_DVB_SP8870=m
 19.3035 +CONFIG_DVB_SP887X=m
 19.3036 +CONFIG_DVB_CX22702=m
 19.3037 +CONFIG_DVB_L64781=m
 19.3038 +CONFIG_DVB_TDA1004X=m
 19.3039 +CONFIG_DVB_NXT6000=m
 19.3040 +CONFIG_DVB_MT352=m
 19.3041 +CONFIG_DVB_ZL10353=m
 19.3042 +CONFIG_DVB_DIB7000P=m
 19.3043 +CONFIG_DVB_TDA10048=m
 19.3044 +
 19.3045 +#
 19.3046 +# DVB-C (cable) frontends
 19.3047 +#
 19.3048 +CONFIG_DVB_VES1820=m
 19.3049 +CONFIG_DVB_TDA10021=m
 19.3050 +CONFIG_DVB_TDA10023=m
 19.3051 +CONFIG_DVB_STV0297=m
 19.3052 +
 19.3053 +#
 19.3054 +# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
 19.3055 +#
 19.3056 +CONFIG_DVB_NXT200X=m
 19.3057 +CONFIG_DVB_OR51211=m
 19.3058 +CONFIG_DVB_OR51132=m
 19.3059 +CONFIG_DVB_BCM3510=m
 19.3060 +CONFIG_DVB_LGDT330X=m
 19.3061 +CONFIG_DVB_LGDT3305=m
 19.3062 +CONFIG_DVB_S5H1409=m
 19.3063 +CONFIG_DVB_S5H1411=m
 19.3064 +
 19.3065 +#
 19.3066 +# ISDB-T (terrestrial) frontends
 19.3067 +#
 19.3068 +
 19.3069 +#
 19.3070 +# Digital terrestrial only tuners/PLL
 19.3071 +#
 19.3072 +CONFIG_DVB_PLL=m
 19.3073 +
 19.3074 +#
 19.3075 +# SEC control devices for DVB-S
 19.3076 +#
 19.3077 +CONFIG_DVB_LNBP21=m
 19.3078 +CONFIG_DVB_ISL6405=m
 19.3079 +CONFIG_DVB_ISL6421=m
 19.3080 +CONFIG_DVB_ISL6423=m
 19.3081 +CONFIG_DVB_TDA665x=m
 19.3082 +
 19.3083 +#
 19.3084 +# Tools to develop new frontends
 19.3085 +#
 19.3086 +# CONFIG_DVB_DUMMY_FE is not set
 19.3087 +CONFIG_DAB=y
 19.3088 +CONFIG_USB_DABUSB=m
 19.3089 +
 19.3090 +#
 19.3091 +# Graphics support
 19.3092 +#
 19.3093 +CONFIG_AGP=m
 19.3094 +CONFIG_AGP_ALI=m
 19.3095 +CONFIG_AGP_ATI=m
 19.3096 +CONFIG_AGP_AMD=m
 19.3097 +CONFIG_AGP_AMD64=m
 19.3098 +CONFIG_AGP_INTEL=m
 19.3099 +CONFIG_AGP_NVIDIA=m
 19.3100 +CONFIG_AGP_SIS=m
 19.3101 +CONFIG_AGP_SWORKS=m
 19.3102 +CONFIG_AGP_VIA=m
 19.3103 +CONFIG_AGP_EFFICEON=m
 19.3104 +CONFIG_VGA_ARB=y
 19.3105 +CONFIG_VGA_ARB_MAX_GPUS=16
 19.3106 +CONFIG_DRM=m
 19.3107 +CONFIG_DRM_KMS_HELPER=m
 19.3108 +CONFIG_DRM_TTM=m
 19.3109 +# CONFIG_DRM_TDFX is not set
 19.3110 +# CONFIG_DRM_R128 is not set
 19.3111 +# CONFIG_DRM_RADEON is not set
 19.3112 +# CONFIG_DRM_I810 is not set
 19.3113 +# CONFIG_DRM_MGA is not set
 19.3114 +# CONFIG_DRM_SIS is not set
 19.3115 +# CONFIG_DRM_VIA is not set
 19.3116 +# CONFIG_DRM_SAVAGE is not set
 19.3117 +CONFIG_STUB_POULSBO=m
 19.3118 +CONFIG_VGASTATE=m
 19.3119 +CONFIG_VIDEO_OUTPUT_CONTROL=m
 19.3120 +CONFIG_FB=m
 19.3121 +CONFIG_FIRMWARE_EDID=y
 19.3122 +CONFIG_FB_DDC=m
 19.3123 +# CONFIG_FB_BOOT_VESA_SUPPORT is not set
 19.3124 +CONFIG_FB_CFB_FILLRECT=m
 19.3125 +CONFIG_FB_CFB_COPYAREA=m
 19.3126 +CONFIG_FB_CFB_IMAGEBLIT=m
 19.3127 +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
 19.3128 +CONFIG_FB_SYS_FILLRECT=m
 19.3129 +CONFIG_FB_SYS_COPYAREA=m
 19.3130 +CONFIG_FB_SYS_IMAGEBLIT=m
 19.3131 +CONFIG_FB_FOREIGN_ENDIAN=y
 19.3132 +CONFIG_FB_BOTH_ENDIAN=y
 19.3133 +# CONFIG_FB_BIG_ENDIAN is not set
 19.3134 +# CONFIG_FB_LITTLE_ENDIAN is not set
 19.3135 +CONFIG_FB_SYS_FOPS=m
 19.3136 +CONFIG_FB_DEFERRED_IO=y
 19.3137 +CONFIG_FB_HECUBA=m
 19.3138 +CONFIG_FB_SVGALIB=m
 19.3139 +# CONFIG_FB_MACMODES is not set
 19.3140 +CONFIG_FB_BACKLIGHT=y
 19.3141 +CONFIG_FB_MODE_HELPERS=y
 19.3142 +CONFIG_FB_TILEBLITTING=y
 19.3143 +
 19.3144 +#
 19.3145 +# Frame buffer hardware drivers
 19.3146 +#
 19.3147 +CONFIG_FB_CIRRUS=m
 19.3148 +CONFIG_FB_PM2=m
 19.3149 +CONFIG_FB_PM2_FIFO_DISCONNECT=y
 19.3150 +CONFIG_FB_CYBER2000=m
 19.3151 +CONFIG_FB_ARC=m
 19.3152 +CONFIG_FB_VGA16=m
 19.3153 +CONFIG_FB_UVESA=m
 19.3154 +CONFIG_FB_N411=m
 19.3155 +CONFIG_FB_HGA=m
 19.3156 +CONFIG_FB_HGA_ACCEL=y
 19.3157 +CONFIG_FB_S1D13XXX=m
 19.3158 +CONFIG_FB_NVIDIA=m
 19.3159 +CONFIG_FB_NVIDIA_I2C=y
 19.3160 +CONFIG_FB_NVIDIA_DEBUG=y
 19.3161 +CONFIG_FB_NVIDIA_BACKLIGHT=y
 19.3162 +CONFIG_FB_RIVA=m
 19.3163 +CONFIG_FB_RIVA_I2C=y
 19.3164 +# CONFIG_FB_RIVA_DEBUG is not set
 19.3165 +CONFIG_FB_RIVA_BACKLIGHT=y
 19.3166 +# CONFIG_FB_I810 is not set
 19.3167 +CONFIG_FB_LE80578=m
 19.3168 +CONFIG_FB_CARILLO_RANCH=m
 19.3169 +CONFIG_FB_INTEL=m
 19.3170 +# CONFIG_FB_INTEL_DEBUG is not set
 19.3171 +CONFIG_FB_INTEL_I2C=y
 19.3172 +CONFIG_FB_MATROX=m
 19.3173 +CONFIG_FB_MATROX_MILLENIUM=y
 19.3174 +CONFIG_FB_MATROX_MYSTIQUE=y
 19.3175 +CONFIG_FB_MATROX_G=y
 19.3176 +CONFIG_FB_MATROX_I2C=m
 19.3177 +CONFIG_FB_MATROX_MAVEN=m
 19.3178 +CONFIG_FB_RADEON=m
 19.3179 +CONFIG_FB_RADEON_I2C=y
 19.3180 +CONFIG_FB_RADEON_BACKLIGHT=y
 19.3181 +# CONFIG_FB_RADEON_DEBUG is not set
 19.3182 +CONFIG_FB_ATY128=m
 19.3183 +CONFIG_FB_ATY128_BACKLIGHT=y
 19.3184 +CONFIG_FB_ATY=m
 19.3185 +CONFIG_FB_ATY_CT=y
 19.3186 +CONFIG_FB_ATY_GENERIC_LCD=y
 19.3187 +CONFIG_FB_ATY_GX=y
 19.3188 +CONFIG_FB_ATY_BACKLIGHT=y
 19.3189 +CONFIG_FB_S3=m
 19.3190 +CONFIG_FB_SAVAGE=m
 19.3191 +CONFIG_FB_SAVAGE_I2C=y
 19.3192 +CONFIG_FB_SAVAGE_ACCEL=y
 19.3193 +CONFIG_FB_SIS=m
 19.3194 +CONFIG_FB_SIS_300=y
 19.3195 +CONFIG_FB_SIS_315=y
 19.3196 +CONFIG_FB_VIA=m
 19.3197 +# CONFIG_FB_VIA_DIRECT_PROCFS is not set
 19.3198 +CONFIG_FB_NEOMAGIC=m
 19.3199 +CONFIG_FB_KYRO=m
 19.3200 +CONFIG_FB_3DFX=m
 19.3201 +CONFIG_FB_3DFX_ACCEL=y
 19.3202 +CONFIG_FB_3DFX_I2C=y
 19.3203 +CONFIG_FB_VOODOO1=m
 19.3204 +CONFIG_FB_VT8623=m
 19.3205 +CONFIG_FB_TRIDENT=m
 19.3206 +CONFIG_FB_ARK=m
 19.3207 +CONFIG_FB_PM3=m
 19.3208 +CONFIG_FB_CARMINE=m
 19.3209 +CONFIG_FB_CARMINE_DRAM_EVAL=y
 19.3210 +# CONFIG_CARMINE_DRAM_CUSTOM is not set
 19.3211 +CONFIG_FB_GEODE=y
 19.3212 +CONFIG_FB_GEODE_LX=m
 19.3213 +CONFIG_FB_GEODE_GX=m
 19.3214 +CONFIG_FB_GEODE_GX1=m
 19.3215 +CONFIG_FB_TMIO=m
 19.3216 +CONFIG_FB_TMIO_ACCELL=y
 19.3217 +CONFIG_FB_SM501=m
 19.3218 +CONFIG_FB_VIRTUAL=m
 19.3219 +CONFIG_FB_METRONOME=m
 19.3220 +CONFIG_FB_MB862XX=m
 19.3221 +CONFIG_FB_MB862XX_PCI_GDC=y
 19.3222 +CONFIG_FB_BROADSHEET=m
 19.3223 +CONFIG_BACKLIGHT_LCD_SUPPORT=y
 19.3224 +CONFIG_LCD_CLASS_DEVICE=m
 19.3225 +CONFIG_LCD_L4F00242T03=m
 19.3226 +CONFIG_LCD_LMS283GF05=m
 19.3227 +CONFIG_LCD_LTV350QV=m
 19.3228 +CONFIG_LCD_ILI9320=m
 19.3229 +CONFIG_LCD_TDO24M=m
 19.3230 +CONFIG_LCD_VGG2432A4=m
 19.3231 +CONFIG_LCD_PLATFORM=m
 19.3232 +# CONFIG_LCD_S6E63M0 is not set
 19.3233 +CONFIG_BACKLIGHT_CLASS_DEVICE=m
 19.3234 +CONFIG_BACKLIGHT_GENERIC=m
 19.3235 +CONFIG_BACKLIGHT_PROGEAR=m
 19.3236 +CONFIG_BACKLIGHT_CARILLO_RANCH=m
 19.3237 +CONFIG_BACKLIGHT_MBP_NVIDIA=m
 19.3238 +CONFIG_BACKLIGHT_SAHARA=m
 19.3239 +# CONFIG_BACKLIGHT_ADP8860 is not set
 19.3240 +# CONFIG_BACKLIGHT_PCF50633 is not set
 19.3241 +
 19.3242 +#
 19.3243 +# Display device support
 19.3244 +#
 19.3245 +CONFIG_DISPLAY_SUPPORT=m
 19.3246 +
 19.3247 +#
 19.3248 +# Display hardware drivers
 19.3249 +#
 19.3250 +
 19.3251 +#
 19.3252 +# Console display driver support
 19.3253 +#
 19.3254 +CONFIG_VGA_CONSOLE=y
 19.3255 +# CONFIG_VGACON_SOFT_SCROLLBACK is not set
 19.3256 +CONFIG_MDA_CONSOLE=m
 19.3257 +CONFIG_DUMMY_CONSOLE=y
 19.3258 +CONFIG_FRAMEBUFFER_CONSOLE=m
 19.3259 +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
 19.3260 +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
 19.3261 +# CONFIG_FONTS is not set
 19.3262 +CONFIG_FONT_8x8=y
 19.3263 +CONFIG_FONT_8x16=y
 19.3264 +# CONFIG_LOGO is not set
 19.3265 +CONFIG_SOUND=m
 19.3266 +CONFIG_SOUND_OSS_CORE=y
 19.3267 +CONFIG_SOUND_OSS_CORE_PRECLAIM=y
 19.3268 +CONFIG_SND=m
 19.3269 +CONFIG_SND_TIMER=m
 19.3270 +CONFIG_SND_PCM=m
 19.3271 +CONFIG_SND_HWDEP=m
 19.3272 +CONFIG_SND_RAWMIDI=m
 19.3273 +CONFIG_SND_JACK=y
 19.3274 +CONFIG_SND_SEQUENCER=m
 19.3275 +CONFIG_SND_SEQ_DUMMY=m
 19.3276 +CONFIG_SND_OSSEMUL=y
 19.3277 +CONFIG_SND_MIXER_OSS=m
 19.3278 +CONFIG_SND_PCM_OSS=m
 19.3279 +CONFIG_SND_PCM_OSS_PLUGINS=y
 19.3280 +CONFIG_SND_SEQUENCER_OSS=y
 19.3281 +CONFIG_SND_DYNAMIC_MINORS=y
 19.3282 +CONFIG_SND_SUPPORT_OLD_API=y
 19.3283 +CONFIG_SND_VERBOSE_PROCFS=y
 19.3284 +# CONFIG_SND_VERBOSE_PRINTK is not set
 19.3285 +# CONFIG_SND_DEBUG is not set
 19.3286 +CONFIG_SND_VMASTER=y
 19.3287 +CONFIG_SND_DMA_SGBUF=y
 19.3288 +CONFIG_SND_RAWMIDI_SEQ=m
 19.3289 +CONFIG_SND_OPL3_LIB_SEQ=m
 19.3290 +CONFIG_SND_OPL4_LIB_SEQ=m
 19.3291 +CONFIG_SND_SBAWE_SEQ=m
 19.3292 +CONFIG_SND_EMU10K1_SEQ=m
 19.3293 +CONFIG_SND_MPU401_UART=m
 19.3294 +CONFIG_SND_OPL3_LIB=m
 19.3295 +CONFIG_SND_OPL4_LIB=m
 19.3296 +CONFIG_SND_VX_LIB=m
 19.3297 +CONFIG_SND_AC97_CODEC=m
 19.3298 +CONFIG_SND_DRIVERS=y
 19.3299 +CONFIG_SND_DUMMY=m
 19.3300 +# CONFIG_SND_ALOOP is not set
 19.3301 +CONFIG_SND_VIRMIDI=m
 19.3302 +CONFIG_SND_MTPAV=m
 19.3303 +CONFIG_SND_MTS64=m
 19.3304 +CONFIG_SND_SERIAL_U16550=m
 19.3305 +CONFIG_SND_MPU401=m
 19.3306 +CONFIG_SND_PORTMAN2X4=m
 19.3307 +# CONFIG_SND_AC97_POWER_SAVE is not set
 19.3308 +CONFIG_SND_WSS_LIB=m
 19.3309 +CONFIG_SND_SB_COMMON=m
 19.3310 +CONFIG_SND_SB8_DSP=m
 19.3311 +CONFIG_SND_SB16_DSP=m
 19.3312 +CONFIG_SND_ISA=y
 19.3313 +CONFIG_SND_ADLIB=m
 19.3314 +CONFIG_SND_AD1816A=m
 19.3315 +CONFIG_SND_AD1848=m
 19.3316 +CONFIG_SND_ALS100=m
 19.3317 +# CONFIG_SND_AZT1605 is not set
 19.3318 +# CONFIG_SND_AZT2316 is not set
 19.3319 +CONFIG_SND_AZT2320=m
 19.3320 +CONFIG_SND_CMI8330=m
 19.3321 +CONFIG_SND_CS4231=m
 19.3322 +CONFIG_SND_CS4236=m
 19.3323 +CONFIG_SND_ES1688=m
 19.3324 +CONFIG_SND_ES18XX=m
 19.3325 +CONFIG_SND_SC6000=m
 19.3326 +CONFIG_SND_GUSCLASSIC=m
 19.3327 +CONFIG_SND_GUSEXTREME=m
 19.3328 +CONFIG_SND_GUSMAX=m
 19.3329 +CONFIG_SND_INTERWAVE=m
 19.3330 +CONFIG_SND_INTERWAVE_STB=m
 19.3331 +CONFIG_SND_JAZZ16=m
 19.3332 +CONFIG_SND_OPL3SA2=m
 19.3333 +CONFIG_SND_OPTI92X_AD1848=m
 19.3334 +CONFIG_SND_OPTI92X_CS4231=m
 19.3335 +CONFIG_SND_OPTI93X=m
 19.3336 +CONFIG_SND_MIRO=m
 19.3337 +CONFIG_SND_SB8=m
 19.3338 +CONFIG_SND_SB16=m
 19.3339 +CONFIG_SND_SBAWE=m
 19.3340 +CONFIG_SND_SB16_CSP=y
 19.3341 +CONFIG_SND_SSCAPE=m
 19.3342 +CONFIG_SND_WAVEFRONT=m
 19.3343 +CONFIG_SND_MSND_PINNACLE=m
 19.3344 +CONFIG_SND_MSND_CLASSIC=m
 19.3345 +CONFIG_SND_PCI=y
 19.3346 +CONFIG_SND_AD1889=m
 19.3347 +CONFIG_SND_ALS300=m
 19.3348 +CONFIG_SND_ALS4000=m
 19.3349 +CONFIG_SND_ALI5451=m
 19.3350 +# CONFIG_SND_ASIHPI is not set
 19.3351 +CONFIG_SND_ATIIXP=m
 19.3352 +CONFIG_SND_ATIIXP_MODEM=m
 19.3353 +CONFIG_SND_AU8810=m
 19.3354 +CONFIG_SND_AU8820=m
 19.3355 +CONFIG_SND_AU8830=m
 19.3356 +CONFIG_SND_AW2=m
 19.3357 +CONFIG_SND_AZT3328=m
 19.3358 +CONFIG_SND_BT87X=m
 19.3359 +# CONFIG_SND_BT87X_OVERCLOCK is not set
 19.3360 +CONFIG_SND_CA0106=m
 19.3361 +CONFIG_SND_CMIPCI=m
 19.3362 +CONFIG_SND_OXYGEN_LIB=m
 19.3363 +CONFIG_SND_OXYGEN=m
 19.3364 +CONFIG_SND_CS4281=m
 19.3365 +CONFIG_SND_CS46XX=m
 19.3366 +CONFIG_SND_CS46XX_NEW_DSP=y
 19.3367 +CONFIG_SND_CS5530=m
 19.3368 +CONFIG_SND_CS5535AUDIO=m
 19.3369 +CONFIG_SND_CTXFI=m
 19.3370 +CONFIG_SND_DARLA20=m
 19.3371 +CONFIG_SND_GINA20=m
 19.3372 +CONFIG_SND_LAYLA20=m
 19.3373 +CONFIG_SND_DARLA24=m
 19.3374 +CONFIG_SND_GINA24=m
 19.3375 +CONFIG_SND_LAYLA24=m
 19.3376 +CONFIG_SND_MONA=m
 19.3377 +CONFIG_SND_MIA=m
 19.3378 +CONFIG_SND_ECHO3G=m
 19.3379 +CONFIG_SND_INDIGO=m
 19.3380 +CONFIG_SND_INDIGOIO=m
 19.3381 +CONFIG_SND_INDIGODJ=m
 19.3382 +CONFIG_SND_INDIGOIOX=m
 19.3383 +CONFIG_SND_INDIGODJX=m
 19.3384 +CONFIG_SND_EMU10K1=m
 19.3385 +CONFIG_SND_EMU10K1X=m
 19.3386 +CONFIG_SND_ENS1370=m
 19.3387 +CONFIG_SND_ENS1371=m
 19.3388 +CONFIG_SND_ES1938=m
 19.3389 +CONFIG_SND_ES1968=m
 19.3390 +# CONFIG_SND_ES1968_INPUT is not set
 19.3391 +CONFIG_SND_FM801=m
 19.3392 +# CONFIG_SND_FM801_TEA575X_BOOL is not set
 19.3393 +CONFIG_SND_HDA_INTEL=m
 19.3394 +# CONFIG_SND_HDA_HWDEP is not set
 19.3395 +# CONFIG_SND_HDA_INPUT_BEEP is not set
 19.3396 +# CONFIG_SND_HDA_INPUT_JACK is not set
 19.3397 +# CONFIG_SND_HDA_PATCH_LOADER is not set
 19.3398 +CONFIG_SND_HDA_CODEC_REALTEK=y
 19.3399 +CONFIG_SND_HDA_CODEC_ANALOG=y
 19.3400 +CONFIG_SND_HDA_CODEC_SIGMATEL=y
 19.3401 +CONFIG_SND_HDA_CODEC_VIA=y
 19.3402 +CONFIG_SND_HDA_CODEC_HDMI=y
 19.3403 +CONFIG_SND_HDA_CODEC_CIRRUS=y
 19.3404 +CONFIG_SND_HDA_CODEC_CONEXANT=y
 19.3405 +CONFIG_SND_HDA_CODEC_CA0110=y
 19.3406 +CONFIG_SND_HDA_CODEC_CMEDIA=y
 19.3407 +CONFIG_SND_HDA_CODEC_SI3054=y
 19.3408 +CONFIG_SND_HDA_GENERIC=y
 19.3409 +# CONFIG_SND_HDA_POWER_SAVE is not set
 19.3410 +CONFIG_SND_HDSP=m
 19.3411 +CONFIG_SND_HDSPM=m
 19.3412 +CONFIG_SND_HIFIER=m
 19.3413 +CONFIG_SND_ICE1712=m
 19.3414 +CONFIG_SND_ICE1724=m
 19.3415 +CONFIG_SND_INTEL8X0=m
 19.3416 +CONFIG_SND_INTEL8X0M=m
 19.3417 +CONFIG_SND_KORG1212=m
 19.3418 +CONFIG_SND_LX6464ES=m
 19.3419 +CONFIG_SND_MAESTRO3=m
 19.3420 +# CONFIG_SND_MAESTRO3_INPUT is not set
 19.3421 +CONFIG_SND_MIXART=m
 19.3422 +CONFIG_SND_NM256=m
 19.3423 +CONFIG_SND_PCXHR=m
 19.3424 +CONFIG_SND_RIPTIDE=m
 19.3425 +CONFIG_SND_RME32=m
 19.3426 +CONFIG_SND_RME96=m
 19.3427 +CONFIG_SND_RME9652=m
 19.3428 +CONFIG_SND_SIS7019=m
 19.3429 +CONFIG_SND_SONICVIBES=m
 19.3430 +CONFIG_SND_TRIDENT=m
 19.3431 +CONFIG_SND_VIA82XX=m
 19.3432 +CONFIG_SND_VIA82XX_MODEM=m
 19.3433 +CONFIG_SND_VIRTUOSO=m
 19.3434 +CONFIG_SND_VX222=m
 19.3435 +CONFIG_SND_YMFPCI=m
 19.3436 +CONFIG_SND_SPI=y
 19.3437 +CONFIG_SND_USB=y
 19.3438 +CONFIG_SND_USB_AUDIO=m
 19.3439 +CONFIG_SND_USB_UA101=m
 19.3440 +CONFIG_SND_USB_USX2Y=m
 19.3441 +CONFIG_SND_USB_CAIAQ=m
 19.3442 +CONFIG_SND_USB_CAIAQ_INPUT=y
 19.3443 +CONFIG_SND_USB_US122L=m
 19.3444 +CONFIG_SND_SOC=m
 19.3445 +CONFIG_SND_SOC_I2C_AND_SPI=m
 19.3446 +CONFIG_SND_SOC_ALL_CODECS=m
 19.3447 +CONFIG_SND_SOC_WM_HUBS=m
 19.3448 +CONFIG_SND_SOC_AD1836=m
 19.3449 +CONFIG_SND_SOC_AD193X=m
 19.3450 +CONFIG_SND_SOC_AD73311=m
 19.3451 +CONFIG_SND_SOC_ADS117X=m
 19.3452 +CONFIG_SND_SOC_AK4104=m
 19.3453 +CONFIG_SND_SOC_AK4535=m
 19.3454 +CONFIG_SND_SOC_AK4642=m
 19.3455 +CONFIG_SND_SOC_AK4671=m
 19.3456 +CONFIG_SND_SOC_CS42L51=m
 19.3457 +CONFIG_SND_SOC_CS4270=m
 19.3458 +CONFIG_SND_SOC_CX20442=m
 19.3459 +CONFIG_SND_SOC_L3=m
 19.3460 +CONFIG_SND_SOC_DA7210=m
 19.3461 +CONFIG_SND_SOC_MAX98088=m
 19.3462 +CONFIG_SND_SOC_PCM3008=m
 19.3463 +CONFIG_SND_SOC_SPDIF=m
 19.3464 +CONFIG_SND_SOC_SSM2602=m
 19.3465 +CONFIG_SND_SOC_TLV320AIC23=m
 19.3466 +CONFIG_SND_SOC_TLV320AIC26=m
 19.3467 +CONFIG_SND_SOC_TLV320AIC3X=m
 19.3468 +CONFIG_SND_SOC_TLV320DAC33=m
 19.3469 +CONFIG_SND_SOC_UDA134X=m
 19.3470 +CONFIG_SND_SOC_UDA1380=m
 19.3471 +CONFIG_SND_SOC_WM8400=m
 19.3472 +CONFIG_SND_SOC_WM8510=m
 19.3473 +CONFIG_SND_SOC_WM8523=m
 19.3474 +CONFIG_SND_SOC_WM8580=m
 19.3475 +CONFIG_SND_SOC_WM8711=m
 19.3476 +CONFIG_SND_SOC_WM8727=m
 19.3477 +CONFIG_SND_SOC_WM8728=m
 19.3478 +CONFIG_SND_SOC_WM8731=m
 19.3479 +CONFIG_SND_SOC_WM8741=m
 19.3480 +CONFIG_SND_SOC_WM8750=m
 19.3481 +CONFIG_SND_SOC_WM8753=m
 19.3482 +CONFIG_SND_SOC_WM8776=m
 19.3483 +CONFIG_SND_SOC_WM8804=m
 19.3484 +CONFIG_SND_SOC_WM8900=m
 19.3485 +CONFIG_SND_SOC_WM8903=m
 19.3486 +CONFIG_SND_SOC_WM8904=m
 19.3487 +CONFIG_SND_SOC_WM8940=m
 19.3488 +CONFIG_SND_SOC_WM8955=m
 19.3489 +CONFIG_SND_SOC_WM8960=m
 19.3490 +CONFIG_SND_SOC_WM8961=m
 19.3491 +CONFIG_SND_SOC_WM8962=m
 19.3492 +CONFIG_SND_SOC_WM8971=m
 19.3493 +CONFIG_SND_SOC_WM8974=m
 19.3494 +CONFIG_SND_SOC_WM8978=m
 19.3495 +CONFIG_SND_SOC_WM8985=m
 19.3496 +CONFIG_SND_SOC_WM8988=m
 19.3497 +CONFIG_SND_SOC_WM8990=m
 19.3498 +CONFIG_SND_SOC_WM8993=m
 19.3499 +CONFIG_SND_SOC_WM9081=m
 19.3500 +CONFIG_SND_SOC_MAX9877=m
 19.3501 +CONFIG_SND_SOC_TPA6130A2=m
 19.3502 +CONFIG_SND_SOC_WM2000=m
 19.3503 +CONFIG_SND_SOC_WM9090=m
 19.3504 +# CONFIG_SOUND_PRIME is not set
 19.3505 +CONFIG_AC97_BUS=m
 19.3506 +CONFIG_HID_SUPPORT=y
 19.3507 +CONFIG_HID=y
 19.3508 +CONFIG_HIDRAW=y
 19.3509 +
 19.3510 +#
 19.3511 +# USB Input Devices
 19.3512 +#
 19.3513 +CONFIG_USB_HID=m
 19.3514 +CONFIG_HID_PID=y
 19.3515 +CONFIG_USB_HIDDEV=y
 19.3516 +
 19.3517 +#
 19.3518 +# USB HID Boot Protocol drivers
 19.3519 +#
 19.3520 +CONFIG_USB_KBD=m
 19.3521 +CONFIG_USB_MOUSE=m
 19.3522 +
 19.3523 +#
 19.3524 +# Special HID drivers
 19.3525 +#
 19.3526 +CONFIG_HID_3M_PCT=m
 19.3527 +CONFIG_HID_A4TECH=m
 19.3528 +# CONFIG_HID_ACRUX_FF is not set
 19.3529 +CONFIG_HID_APPLE=m
 19.3530 +CONFIG_HID_BELKIN=m
 19.3531 +# CONFIG_HID_CANDO is not set
 19.3532 +CONFIG_HID_CHERRY=m
 19.3533 +CONFIG_HID_CHICONY=m
 19.3534 +# CONFIG_HID_PRODIKEYS is not set
 19.3535 +CONFIG_HID_CYPRESS=m
 19.3536 +CONFIG_HID_DRAGONRISE=m
 19.3537 +CONFIG_DRAGONRISE_FF=y
 19.3538 +# CONFIG_HID_EGALAX is not set
 19.3539 +# CONFIG_HID_ELECOM is not set
 19.3540 +CONFIG_HID_EZKEY=m
 19.3541 +CONFIG_HID_KYE=m
 19.3542 +# CONFIG_HID_UCLOGIC is not set
 19.3543 +# CONFIG_HID_WALTOP is not set
 19.3544 +CONFIG_HID_GYRATION=m
 19.3545 +CONFIG_HID_TWINHAN=m
 19.3546 +CONFIG_HID_KENSINGTON=m
 19.3547 +CONFIG_HID_LOGITECH=m
 19.3548 +CONFIG_LOGITECH_FF=y
 19.3549 +CONFIG_LOGIRUMBLEPAD2_FF=y
 19.3550 +CONFIG_LOGIG940_FF=y
 19.3551 +# CONFIG_LOGIWII_FF is not set
 19.3552 +CONFIG_HID_MAGICMOUSE=m
 19.3553 +CONFIG_HID_MICROSOFT=m
 19.3554 +CONFIG_HID_MOSART=m
 19.3555 +CONFIG_HID_MONTEREY=m
 19.3556 +CONFIG_HID_NTRIG=m
 19.3557 +CONFIG_HID_ORTEK=m
 19.3558 +CONFIG_HID_PANTHERLORD=m
 19.3559 +CONFIG_PANTHERLORD_FF=y
 19.3560 +CONFIG_HID_PETALYNX=m
 19.3561 +# CONFIG_HID_PICOLCD is not set
 19.3562 +CONFIG_HID_QUANTA=m
 19.3563 +# CONFIG_HID_ROCCAT is not set
 19.3564 +# CONFIG_HID_ROCCAT_KONE is not set
 19.3565 +# CONFIG_HID_ROCCAT_PYRA is not set
 19.3566 +CONFIG_HID_SAMSUNG=m
 19.3567 +CONFIG_HID_SONY=m
 19.3568 +CONFIG_HID_STANTUM=m
 19.3569 +CONFIG_HID_SUNPLUS=m
 19.3570 +CONFIG_HID_GREENASIA=m
 19.3571 +CONFIG_GREENASIA_FF=y
 19.3572 +CONFIG_HID_SMARTJOYPLUS=m
 19.3573 +CONFIG_SMARTJOYPLUS_FF=y
 19.3574 +CONFIG_HID_TOPSEED=m
 19.3575 +CONFIG_HID_THRUSTMASTER=m
 19.3576 +# CONFIG_THRUSTMASTER_FF is not set
 19.3577 +CONFIG_HID_WACOM=m
 19.3578 +# CONFIG_HID_WACOM_POWER_SUPPLY is not set
 19.3579 +CONFIG_HID_ZEROPLUS=m
 19.3580 +CONFIG_ZEROPLUS_FF=y
 19.3581 +# CONFIG_HID_ZYDACRON is not set
 19.3582 +CONFIG_USB_SUPPORT=y
 19.3583 +CONFIG_USB_ARCH_HAS_HCD=y
 19.3584 +CONFIG_USB_ARCH_HAS_OHCI=y
 19.3585 +CONFIG_USB_ARCH_HAS_EHCI=y
 19.3586 +CONFIG_USB=m
 19.3587 +# CONFIG_USB_DEBUG is not set
 19.3588 +# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
 19.3589 +
 19.3590 +#
 19.3591 +# Miscellaneous USB options
 19.3592 +#
 19.3593 +# CONFIG_USB_DEVICEFS is not set
 19.3594 +CONFIG_USB_DEVICE_CLASS=y
 19.3595 +CONFIG_USB_DYNAMIC_MINORS=y
 19.3596 +# CONFIG_USB_OTG_WHITELIST is not set
 19.3597 +# CONFIG_USB_OTG_BLACKLIST_HUB is not set
 19.3598 +CONFIG_USB_MON=m
 19.3599 +CONFIG_USB_WUSB=m
 19.3600 +CONFIG_USB_WUSB_CBAF=m
 19.3601 +# CONFIG_USB_WUSB_CBAF_DEBUG is not set
 19.3602 +
 19.3603 +#
 19.3604 +# USB Host Controller Drivers
 19.3605 +#
 19.3606 +CONFIG_USB_C67X00_HCD=m
 19.3607 +CONFIG_USB_XHCI_HCD=m
 19.3608 +CONFIG_USB_XHCI_HCD_DEBUGGING=y
 19.3609 +CONFIG_USB_EHCI_HCD=m
 19.3610 +CONFIG_USB_EHCI_ROOT_HUB_TT=y
 19.3611 +CONFIG_USB_EHCI_TT_NEWSCHED=y
 19.3612 +CONFIG_USB_OXU210HP_HCD=m
 19.3613 +CONFIG_USB_ISP116X_HCD=m
 19.3614 +CONFIG_USB_ISP1760_HCD=m
 19.3615 +CONFIG_USB_ISP1362_HCD=m
 19.3616 +CONFIG_USB_OHCI_HCD=m
 19.3617 +CONFIG_USB_OHCI_HCD_SSB=y
 19.3618 +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
 19.3619 +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
 19.3620 +CONFIG_USB_OHCI_LITTLE_ENDIAN=y
 19.3621 +CONFIG_USB_UHCI_HCD=m
 19.3622 +# CONFIG_USB_U132_HCD is not set
 19.3623 +CONFIG_USB_SL811_HCD=m
 19.3624 +CONFIG_USB_R8A66597_HCD=m
 19.3625 +CONFIG_USB_WHCI_HCD=m
 19.3626 +CONFIG_USB_HWA_HCD=m
 19.3627 +
 19.3628 +#
 19.3629 +# USB Device Class drivers
 19.3630 +#
 19.3631 +CONFIG_USB_ACM=m
 19.3632 +CONFIG_USB_PRINTER=m
 19.3633 +CONFIG_USB_WDM=m
 19.3634 +CONFIG_USB_TMC=m
 19.3635 +
 19.3636 +#
 19.3637 +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
 19.3638 +#
 19.3639 +
 19.3640 +#
 19.3641 +# also be needed; see USB_STORAGE Help for more info
 19.3642 +#
 19.3643 +CONFIG_USB_STORAGE=m
 19.3644 +# CONFIG_USB_STORAGE_DEBUG is not set
 19.3645 +CONFIG_USB_STORAGE_DATAFAB=m
 19.3646 +CONFIG_USB_STORAGE_FREECOM=m
 19.3647 +CONFIG_USB_STORAGE_ISD200=m
 19.3648 +CONFIG_USB_STORAGE_USBAT=m
 19.3649 +CONFIG_USB_STORAGE_SDDR09=m
 19.3650 +CONFIG_USB_STORAGE_SDDR55=m
 19.3651 +CONFIG_USB_STORAGE_JUMPSHOT=m
 19.3652 +CONFIG_USB_STORAGE_ALAUDA=m
 19.3653 +CONFIG_USB_STORAGE_ONETOUCH=m
 19.3654 +CONFIG_USB_STORAGE_KARMA=m
 19.3655 +CONFIG_USB_STORAGE_CYPRESS_ATACB=m
 19.3656 +# CONFIG_USB_UAS is not set
 19.3657 +# CONFIG_USB_LIBUSUAL is not set
 19.3658 +
 19.3659 +#
 19.3660 +# USB Imaging devices
 19.3661 +#
 19.3662 +CONFIG_USB_MDC800=m
 19.3663 +CONFIG_USB_MICROTEK=m
 19.3664 +
 19.3665 +#
 19.3666 +# USB port drivers
 19.3667 +#
 19.3668 +CONFIG_USB_USS720=m
 19.3669 +CONFIG_USB_SERIAL=m
 19.3670 +# CONFIG_USB_EZUSB is not set
 19.3671 +# CONFIG_USB_SERIAL_GENERIC is not set
 19.3672 +# CONFIG_USB_SERIAL_AIRCABLE is not set
 19.3673 +# CONFIG_USB_SERIAL_ARK3116 is not set
 19.3674 +# CONFIG_USB_SERIAL_BELKIN is not set
 19.3675 +# CONFIG_USB_SERIAL_CH341 is not set
 19.3676 +# CONFIG_USB_SERIAL_WHITEHEAT is not set
 19.3677 +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
 19.3678 +# CONFIG_USB_SERIAL_CP210X is not set
 19.3679 +# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
 19.3680 +# CONFIG_USB_SERIAL_EMPEG is not set
 19.3681 +# CONFIG_USB_SERIAL_FTDI_SIO is not set
 19.3682 +# CONFIG_USB_SERIAL_FUNSOFT is not set
 19.3683 +# CONFIG_USB_SERIAL_VISOR is not set
 19.3684 +# CONFIG_USB_SERIAL_IPAQ is not set
 19.3685 +# CONFIG_USB_SERIAL_IR is not set
 19.3686 +# CONFIG_USB_SERIAL_EDGEPORT is not set
 19.3687 +# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
 19.3688 +# CONFIG_USB_SERIAL_GARMIN is not set
 19.3689 +# CONFIG_USB_SERIAL_IPW is not set
 19.3690 +# CONFIG_USB_SERIAL_IUU is not set
 19.3691 +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
 19.3692 +# CONFIG_USB_SERIAL_KEYSPAN is not set
 19.3693 +# CONFIG_USB_SERIAL_KLSI is not set
 19.3694 +# CONFIG_USB_SERIAL_KOBIL_SCT is not set
 19.3695 +# CONFIG_USB_SERIAL_MCT_U232 is not set
 19.3696 +# CONFIG_USB_SERIAL_MOS7720 is not set
 19.3697 +# CONFIG_USB_SERIAL_MOS7840 is not set
 19.3698 +# CONFIG_USB_SERIAL_MOTOROLA is not set
 19.3699 +# CONFIG_USB_SERIAL_NAVMAN is not set
 19.3700 +# CONFIG_USB_SERIAL_PL2303 is not set
 19.3701 +# CONFIG_USB_SERIAL_OTI6858 is not set
 19.3702 +# CONFIG_USB_SERIAL_QCAUX is not set
 19.3703 +# CONFIG_USB_SERIAL_QUALCOMM is not set
 19.3704 +# CONFIG_USB_SERIAL_SPCP8X5 is not set
 19.3705 +# CONFIG_USB_SERIAL_HP4X is not set
 19.3706 +# CONFIG_USB_SERIAL_SAFE is not set
 19.3707 +# CONFIG_USB_SERIAL_SAMBA is not set
 19.3708 +# CONFIG_USB_SERIAL_SIEMENS_MPI is not set
 19.3709 +# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
 19.3710 +# CONFIG_USB_SERIAL_SYMBOL is not set
 19.3711 +# CONFIG_USB_SERIAL_TI is not set
 19.3712 +# CONFIG_USB_SERIAL_CYBERJACK is not set
 19.3713 +# CONFIG_USB_SERIAL_XIRCOM is not set
 19.3714 +# CONFIG_USB_SERIAL_OPTION is not set
 19.3715 +# CONFIG_USB_SERIAL_OMNINET is not set
 19.3716 +# CONFIG_USB_SERIAL_OPTICON is not set
 19.3717 +# CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set
 19.3718 +# CONFIG_USB_SERIAL_ZIO is not set
 19.3719 +# CONFIG_USB_SERIAL_SSU100 is not set
 19.3720 +# CONFIG_USB_SERIAL_DEBUG is not set
 19.3721 +
 19.3722 +#
 19.3723 +# USB Miscellaneous drivers
 19.3724 +#
 19.3725 +CONFIG_USB_EMI62=m
 19.3726 +CONFIG_USB_EMI26=m
 19.3727 +CONFIG_USB_ADUTUX=m
 19.3728 +CONFIG_USB_SEVSEG=m
 19.3729 +CONFIG_USB_RIO500=m
 19.3730 +CONFIG_USB_LEGOTOWER=m
 19.3731 +CONFIG_USB_LCD=m
 19.3732 +CONFIG_USB_LED=m
 19.3733 +CONFIG_USB_CYPRESS_CY7C63=m
 19.3734 +CONFIG_USB_CYTHERM=m
 19.3735 +CONFIG_USB_IDMOUSE=m
 19.3736 +CONFIG_USB_FTDI_ELAN=m
 19.3737 +CONFIG_USB_APPLEDISPLAY=m
 19.3738 +CONFIG_USB_SISUSBVGA=m
 19.3739 +CONFIG_USB_SISUSBVGA_CON=y
 19.3740 +CONFIG_USB_LD=m
 19.3741 +CONFIG_USB_TRANCEVIBRATOR=m
 19.3742 +CONFIG_USB_IOWARRIOR=m
 19.3743 +CONFIG_USB_TEST=m
 19.3744 +CONFIG_USB_ISIGHTFW=m
 19.3745 +# CONFIG_USB_YUREX is not set
 19.3746 +CONFIG_USB_GADGET=m
 19.3747 +# CONFIG_USB_GADGET_DEBUG_FILES is not set
 19.3748 +CONFIG_USB_GADGET_VBUS_DRAW=2
 19.3749 +CONFIG_USB_GADGET_SELECTED=y
 19.3750 +CONFIG_USB_GADGET_R8A66597=y
 19.3751 +CONFIG_USB_R8A66597=m
 19.3752 +# CONFIG_USB_GADGET_M66592 is not set
 19.3753 +# CONFIG_USB_GADGET_AMD5536UDC is not set
 19.3754 +# CONFIG_USB_GADGET_CI13XXX is not set
 19.3755 +# CONFIG_USB_GADGET_NET2280 is not set
 19.3756 +# CONFIG_USB_GADGET_GOKU is not set
 19.3757 +# CONFIG_USB_GADGET_LANGWELL is not set
 19.3758 +# CONFIG_USB_GADGET_DUMMY_HCD is not set
 19.3759 +CONFIG_USB_GADGET_DUALSPEED=y
 19.3760 +# CONFIG_USB_ZERO is not set
 19.3761 +# CONFIG_USB_AUDIO is not set
 19.3762 +# CONFIG_USB_ETH is not set
 19.3763 +# CONFIG_USB_GADGETFS is not set
 19.3764 +# CONFIG_USB_FUNCTIONFS is not set
 19.3765 +# CONFIG_USB_FILE_STORAGE is not set
 19.3766 +# CONFIG_USB_MASS_STORAGE is not set
 19.3767 +# CONFIG_USB_G_SERIAL is not set
 19.3768 +# CONFIG_USB_MIDI_GADGET is not set
 19.3769 +# CONFIG_USB_G_PRINTER is not set
 19.3770 +# CONFIG_USB_CDC_COMPOSITE is not set
 19.3771 +# CONFIG_USB_G_NOKIA is not set
 19.3772 +# CONFIG_USB_G_MULTI is not set
 19.3773 +# CONFIG_USB_G_HID is not set
 19.3774 +# CONFIG_USB_G_DBGP is not set
 19.3775 +# CONFIG_USB_G_WEBCAM is not set
 19.3776 +
 19.3777 +#
 19.3778 +# OTG and related infrastructure
 19.3779 +#
 19.3780 +CONFIG_USB_OTG_UTILS=y
 19.3781 +CONFIG_USB_GPIO_VBUS=m
 19.3782 +CONFIG_NOP_USB_XCEIV=m
 19.3783 +CONFIG_UWB=m
 19.3784 +CONFIG_UWB_HWA=m
 19.3785 +CONFIG_UWB_WHCI=m
 19.3786 +CONFIG_UWB_I1480U=m
 19.3787 +CONFIG_MMC=m
 19.3788 +# CONFIG_MMC_DEBUG is not set
 19.3789 +# CONFIG_MMC_UNSAFE_RESUME is not set
 19.3790 +
 19.3791 +#
 19.3792 +# MMC/SD/SDIO Card Drivers
 19.3793 +#
 19.3794 +CONFIG_MMC_BLOCK=m
 19.3795 +CONFIG_MMC_BLOCK_MINORS=8
 19.3796 +CONFIG_MMC_BLOCK_BOUNCE=y
 19.3797 +CONFIG_SDIO_UART=m
 19.3798 +CONFIG_MMC_TEST=m
 19.3799 +
 19.3800 +#
 19.3801 +# MMC/SD/SDIO Host Controller Drivers
 19.3802 +#
 19.3803 +CONFIG_MMC_SDHCI=m
 19.3804 +CONFIG_MMC_SDHCI_PCI=m
 19.3805 +CONFIG_MMC_RICOH_MMC=y
 19.3806 +CONFIG_MMC_SDHCI_PLTFM=m
 19.3807 +CONFIG_MMC_WBSD=m
 19.3808 +CONFIG_MMC_TIFM_SD=m
 19.3809 +CONFIG_MMC_SPI=m
 19.3810 +CONFIG_MMC_CB710=m
 19.3811 +CONFIG_MMC_VIA_SDMMC=m
 19.3812 +# CONFIG_MMC_USHC is not set
 19.3813 +CONFIG_MEMSTICK=m
 19.3814 +# CONFIG_MEMSTICK_DEBUG is not set
 19.3815 +
 19.3816 +#
 19.3817 +# MemoryStick drivers
 19.3818 +#
 19.3819 +# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
 19.3820 +CONFIG_MSPRO_BLOCK=m
 19.3821 +
 19.3822 +#
 19.3823 +# MemoryStick Host Controller Drivers
 19.3824 +#
 19.3825 +CONFIG_MEMSTICK_TIFM_MS=m
 19.3826 +CONFIG_MEMSTICK_JMICRON_38X=m
 19.3827 +CONFIG_NEW_LEDS=y
 19.3828 +CONFIG_LEDS_CLASS=y
 19.3829 +
 19.3830 +#
 19.3831 +# LED drivers
 19.3832 +#
 19.3833 +# CONFIG_LEDS_NET5501 is not set
 19.3834 +CONFIG_LEDS_ALIX2=m
 19.3835 +CONFIG_LEDS_PCA9532=m
 19.3836 +CONFIG_LEDS_GPIO=m
 19.3837 +CONFIG_LEDS_GPIO_PLATFORM=y
 19.3838 +CONFIG_LEDS_LP3944=m
 19.3839 +# CONFIG_LEDS_LP5521 is not set
 19.3840 +# CONFIG_LEDS_LP5523 is not set
 19.3841 +CONFIG_LEDS_PCA955X=m
 19.3842 +CONFIG_LEDS_DAC124S085=m
 19.3843 +CONFIG_LEDS_REGULATOR=m
 19.3844 +CONFIG_LEDS_BD2802=m
 19.3845 +CONFIG_LEDS_LT3593=m
 19.3846 +CONFIG_LEDS_TRIGGERS=y
 19.3847 +
 19.3848 +#
 19.3849 +# LED Triggers
 19.3850 +#
 19.3851 +CONFIG_LEDS_TRIGGER_TIMER=m
 19.3852 +CONFIG_LEDS_TRIGGER_HEARTBEAT=m
 19.3853 +CONFIG_LEDS_TRIGGER_BACKLIGHT=m
 19.3854 +CONFIG_LEDS_TRIGGER_GPIO=m
 19.3855 +CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
 19.3856 +
 19.3857 +#
 19.3858 +# iptables trigger is under Netfilter config (LED target)
 19.3859 +#
 19.3860 +CONFIG_ACCESSIBILITY=y
 19.3861 +CONFIG_INFINIBAND=m
 19.3862 +CONFIG_INFINIBAND_USER_MAD=m
 19.3863 +CONFIG_INFINIBAND_USER_ACCESS=m
 19.3864 +CONFIG_INFINIBAND_USER_MEM=y
 19.3865 +CONFIG_INFINIBAND_ADDR_TRANS=y
 19.3866 +CONFIG_INFINIBAND_MTHCA=m
 19.3867 +# CONFIG_INFINIBAND_MTHCA_DEBUG is not set
 19.3868 +CONFIG_INFINIBAND_AMSO1100=m
 19.3869 +# CONFIG_INFINIBAND_AMSO1100_DEBUG is not set
 19.3870 +CONFIG_INFINIBAND_CXGB3=m
 19.3871 +# CONFIG_INFINIBAND_CXGB3_DEBUG is not set
 19.3872 +# CONFIG_INFINIBAND_CXGB4 is not set
 19.3873 +CONFIG_MLX4_INFINIBAND=m
 19.3874 +CONFIG_INFINIBAND_NES=m
 19.3875 +# CONFIG_INFINIBAND_NES_DEBUG is not set
 19.3876 +CONFIG_INFINIBAND_IPOIB=m
 19.3877 +CONFIG_INFINIBAND_IPOIB_CM=y
 19.3878 +# CONFIG_INFINIBAND_IPOIB_DEBUG is not set
 19.3879 +CONFIG_INFINIBAND_SRP=m
 19.3880 +CONFIG_INFINIBAND_ISER=m
 19.3881 +CONFIG_EDAC=y
 19.3882 +
 19.3883 +#
 19.3884 +# Reporting subsystems
 19.3885 +#
 19.3886 +# CONFIG_EDAC_DEBUG is not set
 19.3887 +CONFIG_EDAC_MM_EDAC=m
 19.3888 +CONFIG_EDAC_AMD76X=m
 19.3889 +CONFIG_EDAC_E7XXX=m
 19.3890 +CONFIG_EDAC_I82875P=m
 19.3891 +CONFIG_EDAC_I82975X=m
 19.3892 +CONFIG_EDAC_I3000=m
 19.3893 +CONFIG_EDAC_I3200=m
 19.3894 +CONFIG_EDAC_X38=m
 19.3895 +CONFIG_EDAC_I5400=m
 19.3896 +# CONFIG_EDAC_I7CORE is not set
 19.3897 +CONFIG_EDAC_I82860=m
 19.3898 +CONFIG_EDAC_R82600=m
 19.3899 +CONFIG_EDAC_I5000=m
 19.3900 +CONFIG_EDAC_I5100=m
 19.3901 +# CONFIG_EDAC_I7300 is not set
 19.3902 +CONFIG_RTC_LIB=m
 19.3903 +CONFIG_RTC_CLASS=m
 19.3904 +
 19.3905 +#
 19.3906 +# RTC interfaces
 19.3907 +#
 19.3908 +CONFIG_RTC_INTF_SYSFS=y
 19.3909 +CONFIG_RTC_INTF_PROC=y
 19.3910 +CONFIG_RTC_INTF_DEV=y
 19.3911 +CONFIG_RTC_INTF_DEV_UIE_EMUL=y
 19.3912 +# CONFIG_RTC_DRV_TEST is not set
 19.3913 +
 19.3914 +#
 19.3915 +# I2C RTC drivers
 19.3916 +#
 19.3917 +CONFIG_RTC_DRV_DS1307=m
 19.3918 +CONFIG_RTC_DRV_DS1374=m
 19.3919 +CONFIG_RTC_DRV_DS1672=m
 19.3920 +# CONFIG_RTC_DRV_DS3232 is not set
 19.3921 +CONFIG_RTC_DRV_MAX6900=m
 19.3922 +CONFIG_RTC_DRV_RS5C372=m
 19.3923 +CONFIG_RTC_DRV_ISL1208=m
 19.3924 +# CONFIG_RTC_DRV_ISL12022 is not set
 19.3925 +CONFIG_RTC_DRV_X1205=m
 19.3926 +CONFIG_RTC_DRV_PCF8563=m
 19.3927 +CONFIG_RTC_DRV_PCF8583=m
 19.3928 +CONFIG_RTC_DRV_M41T80=m
 19.3929 +CONFIG_RTC_DRV_M41T80_WDT=y
 19.3930 +CONFIG_RTC_DRV_BQ32K=m
 19.3931 +CONFIG_RTC_DRV_S35390A=m
 19.3932 +CONFIG_RTC_DRV_FM3130=m
 19.3933 +CONFIG_RTC_DRV_RX8581=m
 19.3934 +CONFIG_RTC_DRV_RX8025=m
 19.3935 +
 19.3936 +#
 19.3937 +# SPI RTC drivers
 19.3938 +#
 19.3939 +CONFIG_RTC_DRV_M41T94=m
 19.3940 +CONFIG_RTC_DRV_DS1305=m
 19.3941 +CONFIG_RTC_DRV_DS1390=m
 19.3942 +CONFIG_RTC_DRV_MAX6902=m
 19.3943 +CONFIG_RTC_DRV_R9701=m
 19.3944 +CONFIG_RTC_DRV_RS5C348=m
 19.3945 +CONFIG_RTC_DRV_DS3234=m
 19.3946 +CONFIG_RTC_DRV_PCF2123=m
 19.3947 +
 19.3948 +#
 19.3949 +# Platform RTC drivers
 19.3950 +#
 19.3951 +CONFIG_RTC_DRV_CMOS=m
 19.3952 +CONFIG_RTC_DRV_DS1286=m
 19.3953 +CONFIG_RTC_DRV_DS1511=m
 19.3954 +CONFIG_RTC_DRV_DS1553=m
 19.3955 +CONFIG_RTC_DRV_DS1742=m
 19.3956 +CONFIG_RTC_DRV_STK17TA8=m
 19.3957 +CONFIG_RTC_DRV_M48T86=m
 19.3958 +CONFIG_RTC_DRV_M48T35=m
 19.3959 +CONFIG_RTC_DRV_M48T59=m
 19.3960 +CONFIG_RTC_DRV_MSM6242=m
 19.3961 +CONFIG_RTC_DRV_BQ4802=m
 19.3962 +CONFIG_RTC_DRV_RP5C01=m
 19.3963 +CONFIG_RTC_DRV_V3020=m
 19.3964 +CONFIG_RTC_DRV_PCF50633=m
 19.3965 +
 19.3966 +#
 19.3967 +# on-CPU RTC drivers
 19.3968 +#
 19.3969 +CONFIG_RTC_DRV_PCAP=m
 19.3970 +CONFIG_DMADEVICES=y
 19.3971 +# CONFIG_DMADEVICES_DEBUG is not set
 19.3972 +
 19.3973 +#
 19.3974 +# DMA Devices
 19.3975 +#
 19.3976 +# CONFIG_INTEL_MID_DMAC is not set
 19.3977 +CONFIG_INTEL_IOATDMA=m
 19.3978 +# CONFIG_TIMB_DMA is not set
 19.3979 +# CONFIG_PCH_DMA is not set
 19.3980 +CONFIG_DMA_ENGINE=y
 19.3981 +
 19.3982 +#
 19.3983 +# DMA Clients
 19.3984 +#
 19.3985 +CONFIG_NET_DMA=y
 19.3986 +CONFIG_ASYNC_TX_DMA=y
 19.3987 +# CONFIG_DMATEST is not set
 19.3988 +CONFIG_DCA=m
 19.3989 +CONFIG_AUXDISPLAY=y
 19.3990 +CONFIG_KS0108=m
 19.3991 +CONFIG_KS0108_PORT=0x378
 19.3992 +CONFIG_KS0108_DELAY=2
 19.3993 +CONFIG_CFAG12864B=m
 19.3994 +CONFIG_CFAG12864B_RATE=20
 19.3995 +CONFIG_UIO=m
 19.3996 +CONFIG_UIO_CIF=m
 19.3997 +CONFIG_UIO_PDRV=m
 19.3998 +CONFIG_UIO_PDRV_GENIRQ=m
 19.3999 +CONFIG_UIO_AEC=m
 19.4000 +CONFIG_UIO_SERCOS3=m
 19.4001 +CONFIG_UIO_PCI_GENERIC=m
 19.4002 +CONFIG_UIO_NETX=m
 19.4003 +CONFIG_STAGING=y
 19.4004 +# CONFIG_STAGING_EXCLUDE_BUILD is not set
 19.4005 +CONFIG_ET131X=m
 19.4006 +CONFIG_ET131X_DEBUG=y
 19.4007 +CONFIG_SLICOSS=m
 19.4008 +CONFIG_VIDEO_GO7007=m
 19.4009 +CONFIG_VIDEO_GO7007_USB=m
 19.4010 +CONFIG_VIDEO_GO7007_OV7640=m
 19.4011 +CONFIG_VIDEO_GO7007_SAA7113=m
 19.4012 +CONFIG_VIDEO_GO7007_SAA7115=m
 19.4013 +CONFIG_VIDEO_GO7007_TW9903=m
 19.4014 +CONFIG_VIDEO_GO7007_UDA1342=m
 19.4015 +CONFIG_VIDEO_GO7007_SONY_TUNER=m
 19.4016 +CONFIG_VIDEO_GO7007_TW2804=m
 19.4017 +CONFIG_VIDEO_CX25821=m
 19.4018 +CONFIG_VIDEO_CX25821_ALSA=m
 19.4019 +# CONFIG_VIDEO_TM6000 is not set
 19.4020 +CONFIG_VIDEO_CPIA=m
 19.4021 +CONFIG_VIDEO_CPIA_PP=m
 19.4022 +# CONFIG_VIDEO_CPIA_USB is not set
 19.4023 +CONFIG_VIDEO_STRADIS=m
 19.4024 +CONFIG_USB_IP_COMMON=m
 19.4025 +CONFIG_USB_IP_VHCI_HCD=m
 19.4026 +CONFIG_USB_IP_HOST=m
 19.4027 +# CONFIG_USB_IP_DEBUG_ENABLE is not set
 19.4028 +CONFIG_W35UND=m
 19.4029 +CONFIG_PRISM2_USB=m
 19.4030 +CONFIG_ECHO=m
 19.4031 +# CONFIG_BRCM80211 is not set
 19.4032 +CONFIG_RT2860=m
 19.4033 +CONFIG_RT2870=m
 19.4034 +CONFIG_COMEDI=m
 19.4035 +# CONFIG_COMEDI_DEBUG is not set
 19.4036 +# CONFIG_COMEDI_MISC_DRIVERS is not set
 19.4037 +# CONFIG_COMEDI_ISA_DRIVERS is not set
 19.4038 +CONFIG_COMEDI_PCI_DRIVERS=m
 19.4039 +# CONFIG_COMEDI_ADDI_APCI_035 is not set
 19.4040 +# CONFIG_COMEDI_ADDI_APCI_1032 is not set
 19.4041 +# CONFIG_COMEDI_ADDI_APCI_1500 is not set
 19.4042 +# CONFIG_COMEDI_ADDI_APCI_1516 is not set
 19.4043 +# CONFIG_COMEDI_ADDI_APCI_1564 is not set
 19.4044 +# CONFIG_COMEDI_ADDI_APCI_16XX is not set
 19.4045 +# CONFIG_COMEDI_ADDI_APCI_2016 is not set
 19.4046 +# CONFIG_COMEDI_ADDI_APCI_2032 is not set
 19.4047 +# CONFIG_COMEDI_ADDI_APCI_2200 is not set
 19.4048 +# CONFIG_COMEDI_ADDI_APCI_3001 is not set
 19.4049 +# CONFIG_COMEDI_ADDI_APCI_3120 is not set
 19.4050 +# CONFIG_COMEDI_ADDI_APCI_3501 is not set
 19.4051 +# CONFIG_COMEDI_ADDI_APCI_3XXX is not set
 19.4052 +# CONFIG_COMEDI_ADL_PCI6208 is not set
 19.4053 +# CONFIG_COMEDI_ADL_PCI7230 is not set
 19.4054 +# CONFIG_COMEDI_ADL_PCI7296 is not set
 19.4055 +# CONFIG_COMEDI_ADL_PCI7432 is not set
 19.4056 +# CONFIG_COMEDI_ADL_PCI8164 is not set
 19.4057 +# CONFIG_COMEDI_ADL_PCI9111 is not set
 19.4058 +# CONFIG_COMEDI_ADL_PCI9118 is not set
 19.4059 +# CONFIG_COMEDI_ADV_PCI1710 is not set
 19.4060 +# CONFIG_COMEDI_ADV_PCI1723 is not set
 19.4061 +# CONFIG_COMEDI_ADV_PCI_DIO is not set
 19.4062 +# CONFIG_COMEDI_AMPLC_DIO200 is not set
 19.4063 +# CONFIG_COMEDI_AMPLC_PC236 is not set
 19.4064 +# CONFIG_COMEDI_AMPLC_PC263 is not set
 19.4065 +# CONFIG_COMEDI_AMPLC_PCI224 is not set
 19.4066 +# CONFIG_COMEDI_AMPLC_PCI230 is not set
 19.4067 +# CONFIG_COMEDI_CONTEC_PCI_DIO is not set
 19.4068 +# CONFIG_COMEDI_DT3000 is not set
 19.4069 +# CONFIG_COMEDI_UNIOXX5 is not set
 19.4070 +# CONFIG_COMEDI_GSC_HPDI is not set
 19.4071 +# CONFIG_COMEDI_ICP_MULTI is not set
 19.4072 +# CONFIG_COMEDI_II_PCI20KC is not set
 19.4073 +# CONFIG_COMEDI_DAQBOARD2000 is not set
 19.4074 +# CONFIG_COMEDI_JR3_PCI is not set
 19.4075 +# CONFIG_COMEDI_KE_COUNTER is not set
 19.4076 +# CONFIG_COMEDI_CB_PCIDAS64 is not set
 19.4077 +# CONFIG_COMEDI_CB_PCIDAS is not set
 19.4078 +# CONFIG_COMEDI_CB_PCIDDA is not set
 19.4079 +# CONFIG_COMEDI_CB_PCIDIO is not set
 19.4080 +# CONFIG_COMEDI_CB_PCIMDAS is not set
 19.4081 +# CONFIG_COMEDI_CB_PCIMDDA is not set
 19.4082 +# CONFIG_COMEDI_ME4000 is not set
 19.4083 +# CONFIG_COMEDI_ME_DAQ is not set
 19.4084 +# CONFIG_COMEDI_RTD520 is not set
 19.4085 +# CONFIG_COMEDI_S526 is not set
 19.4086 +# CONFIG_COMEDI_S626 is not set
 19.4087 +# CONFIG_COMEDI_SSV_DNP is not set
 19.4088 +CONFIG_COMEDI_USB_DRIVERS=m
 19.4089 +# CONFIG_COMEDI_DT9812 is not set
 19.4090 +# CONFIG_COMEDI_USBDUX is not set
 19.4091 +# CONFIG_COMEDI_USBDUXFAST is not set
 19.4092 +# CONFIG_COMEDI_VMK80XX is not set
 19.4093 +# CONFIG_COMEDI_NI_COMMON is not set
 19.4094 +# CONFIG_COMEDI_8255 is not set
 19.4095 +# CONFIG_COMEDI_DAS08 is not set
 19.4096 +# CONFIG_COMEDI_FC is not set
 19.4097 +CONFIG_ASUS_OLED=m
 19.4098 +CONFIG_PANEL=m
 19.4099 +CONFIG_PANEL_PARPORT=0
 19.4100 +CONFIG_PANEL_PROFILE=5
 19.4101 +# CONFIG_PANEL_CHANGE_MESSAGE is not set
 19.4102 +CONFIG_R8187SE=m
 19.4103 +CONFIG_RTL8192U=m
 19.4104 +CONFIG_RTL8192E=m
 19.4105 +# CONFIG_R8712U is not set
 19.4106 +CONFIG_TRANZPORT=m
 19.4107 +CONFIG_POHMELFS=m
 19.4108 +# CONFIG_POHMELFS_DEBUG is not set
 19.4109 +# CONFIG_POHMELFS_CRYPTO is not set
 19.4110 +CONFIG_AUTOFS_FS=m
 19.4111 +CONFIG_IDE_PHISON=m
 19.4112 +# CONFIG_LINE6_USB is not set
 19.4113 +CONFIG_DRM_VMWGFX=m
 19.4114 +CONFIG_DRM_NOUVEAU=m
 19.4115 +CONFIG_DRM_NOUVEAU_BACKLIGHT=y
 19.4116 +
 19.4117 +#
 19.4118 +# I2C encoder or helper chips
 19.4119 +#
 19.4120 +CONFIG_DRM_I2C_CH7006=m
 19.4121 +CONFIG_DRM_I2C_SIL164=m
 19.4122 +CONFIG_USB_SERIAL_QUATECH2=m
 19.4123 +CONFIG_USB_SERIAL_QUATECH_USB2=m
 19.4124 +CONFIG_VT6655=m
 19.4125 +CONFIG_VT6656=m
 19.4126 +CONFIG_FB_UDL=m
 19.4127 +CONFIG_HYPERV=m
 19.4128 +CONFIG_HYPERV_STORAGE=m
 19.4129 +CONFIG_HYPERV_NET=m
 19.4130 +CONFIG_HYPERV_UTILS=m
 19.4131 +CONFIG_VME_BUS=m
 19.4132 +
 19.4133 +#
 19.4134 +# VME Bridge Drivers
 19.4135 +#
 19.4136 +CONFIG_VME_CA91CX42=m
 19.4137 +CONFIG_VME_TSI148=m
 19.4138 +
 19.4139 +#
 19.4140 +# VME Device Drivers
 19.4141 +#
 19.4142 +CONFIG_VME_USER=m
 19.4143 +
 19.4144 +#
 19.4145 +# VME Board Drivers
 19.4146 +#
 19.4147 +CONFIG_VMIVME_7805=m
 19.4148 +CONFIG_IIO=m
 19.4149 +CONFIG_IIO_RING_BUFFER=y
 19.4150 +CONFIG_IIO_SW_RING=m
 19.4151 +CONFIG_IIO_TRIGGER=y
 19.4152 +
 19.4153 +#
 19.4154 +# Accelerometers
 19.4155 +#
 19.4156 +# CONFIG_ADIS16209 is not set
 19.4157 +# CONFIG_ADIS16220 is not set
 19.4158 +# CONFIG_ADIS16240 is not set
 19.4159 +CONFIG_KXSD9=m
 19.4160 +CONFIG_LIS3L02DQ=m
 19.4161 +CONFIG_SCA3000=m
 19.4162 +
 19.4163 +#
 19.4164 +# Analog to digital convertors
 19.4165 +#
 19.4166 +CONFIG_MAX1363=m
 19.4167 +CONFIG_MAX1363_RING_BUFFER=y
 19.4168 +# CONFIG_AD799X is not set
 19.4169 +# CONFIG_AD7476 is not set
 19.4170 +
 19.4171 +#
 19.4172 +# Digital gyroscope sensors
 19.4173 +#
 19.4174 +# CONFIG_ADIS16260 is not set
 19.4175 +
 19.4176 +#
 19.4177 +# Inertial measurement units
 19.4178 +#
 19.4179 +# CONFIG_ADIS16300 is not set
 19.4180 +# CONFIG_ADIS16350 is not set
 19.4181 +# CONFIG_ADIS16400 is not set
 19.4182 +
 19.4183 +#
 19.4184 +# Light sensors
 19.4185 +#
 19.4186 +CONFIG_SENSORS_TSL2563=m
 19.4187 +# CONFIG_SENSORS_ISL29018 is not set
 19.4188 +
 19.4189 +#
 19.4190 +# Magnetometer sensors
 19.4191 +#
 19.4192 +# CONFIG_SENSORS_AK8975 is not set
 19.4193 +# CONFIG_SENSORS_HMC5843 is not set
 19.4194 +
 19.4195 +#
 19.4196 +# Triggers - standalone
 19.4197 +#
 19.4198 +CONFIG_IIO_PERIODIC_RTC_TRIGGER=m
 19.4199 +CONFIG_IIO_GPIO_TRIGGER=m
 19.4200 +# CONFIG_ZRAM is not set
 19.4201 +CONFIG_BATMAN_ADV=m
 19.4202 +# CONFIG_BATMAN_ADV_DEBUG is not set
 19.4203 +CONFIG_SAMSUNG_LAPTOP=m
 19.4204 +CONFIG_FB_SM7XX=m
 19.4205 +# CONFIG_VIDEO_DT3155 is not set
 19.4206 +CONFIG_CRYSTALHD=m
 19.4207 +# CONFIG_CXT1E1 is not set
 19.4208 +
 19.4209 +#
 19.4210 +# Texas Instruments shared transport line discipline
 19.4211 +#
 19.4212 +# CONFIG_ST_BT is not set
 19.4213 +# CONFIG_ADIS16255 is not set
 19.4214 +# CONFIG_FB_XGI is not set
 19.4215 +# CONFIG_LIRC_STAGING is not set
 19.4216 +CONFIG_SMB_FS=m
 19.4217 +CONFIG_SMB_NLS_DEFAULT=y
 19.4218 +CONFIG_SMB_NLS_REMOTE="cp437"
 19.4219 +# CONFIG_EASYCAP is not set
 19.4220 +# CONFIG_SOLO6X10 is not set
 19.4221 +CONFIG_MACH_NO_WESTBRIDGE=y
 19.4222 +# CONFIG_SBE_2T3E3 is not set
 19.4223 +# CONFIG_ATH6K_LEGACY is not set
 19.4224 +# CONFIG_USB_ENESTORAGE is not set
 19.4225 +# CONFIG_BCM_WIMAX is not set
 19.4226 +# CONFIG_FT1000 is not set
 19.4227 +
 19.4228 +#
 19.4229 +# Speakup console speech
 19.4230 +#
 19.4231 +# CONFIG_SPEAKUP is not set
 19.4232 +CONFIG_X86_PLATFORM_DEVICES=y
 19.4233 +CONFIG_SENSORS_HDAPS=m
 19.4234 +# CONFIG_IBM_RTL is not set
 19.4235 +
 19.4236 +#
 19.4237 +# Firmware Drivers
 19.4238 +#
 19.4239 +# CONFIG_EDD is not set
 19.4240 +# CONFIG_FIRMWARE_MEMMAP is not set
 19.4241 +# CONFIG_DELL_RBU is not set
 19.4242 +# CONFIG_DCDBAS is not set
 19.4243 +# CONFIG_ISCSI_IBFT_FIND is not set
 19.4244 +
 19.4245 +#
 19.4246 +# File systems
 19.4247 +#
 19.4248 +CONFIG_EXT2_FS=m
 19.4249 +CONFIG_EXT2_FS_XATTR=y
 19.4250 +CONFIG_EXT2_FS_POSIX_ACL=y
 19.4251 +CONFIG_EXT2_FS_SECURITY=y
 19.4252 +CONFIG_EXT2_FS_XIP=y
 19.4253 +CONFIG_EXT3_FS=m
 19.4254 +# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
 19.4255 +CONFIG_EXT3_FS_XATTR=y
 19.4256 +CONFIG_EXT3_FS_POSIX_ACL=y
 19.4257 +CONFIG_EXT3_FS_SECURITY=y
 19.4258 +CONFIG_EXT4_FS=m
 19.4259 +CONFIG_EXT4_FS_XATTR=y
 19.4260 +CONFIG_EXT4_FS_POSIX_ACL=y
 19.4261 +CONFIG_EXT4_FS_SECURITY=y
 19.4262 +# CONFIG_EXT4_DEBUG is not set
 19.4263 +CONFIG_FS_XIP=y
 19.4264 +CONFIG_JBD=m
 19.4265 +CONFIG_JBD2=m
 19.4266 +CONFIG_FS_MBCACHE=m
 19.4267 +CONFIG_REISERFS_FS=m
 19.4268 +# CONFIG_REISERFS_CHECK is not set
 19.4269 +# CONFIG_REISERFS_PROC_INFO is not set
 19.4270 +CONFIG_REISERFS_FS_XATTR=y
 19.4271 +CONFIG_REISERFS_FS_POSIX_ACL=y
 19.4272 +CONFIG_REISERFS_FS_SECURITY=y
 19.4273 +CONFIG_JFS_FS=m
 19.4274 +CONFIG_JFS_POSIX_ACL=y
 19.4275 +CONFIG_JFS_SECURITY=y
 19.4276 +# CONFIG_JFS_DEBUG is not set
 19.4277 +# CONFIG_JFS_STATISTICS is not set
 19.4278 +CONFIG_FS_POSIX_ACL=y
 19.4279 +CONFIG_XFS_FS=m
 19.4280 +CONFIG_XFS_QUOTA=y
 19.4281 +CONFIG_XFS_POSIX_ACL=y
 19.4282 +CONFIG_XFS_RT=y
 19.4283 +# CONFIG_XFS_DEBUG is not set
 19.4284 +# CONFIG_OCFS2_FS is not set
 19.4285 +CONFIG_BTRFS_FS=m
 19.4286 +CONFIG_BTRFS_FS_POSIX_ACL=y
 19.4287 +CONFIG_NILFS2_FS=m
 19.4288 +CONFIG_EXPORTFS=m
 19.4289 +CONFIG_FILE_LOCKING=y
 19.4290 +CONFIG_FSNOTIFY=y
 19.4291 +CONFIG_DNOTIFY=y
 19.4292 +CONFIG_INOTIFY_USER=y
 19.4293 +# CONFIG_FANOTIFY is not set
 19.4294 +CONFIG_QUOTA=y
 19.4295 +CONFIG_QUOTA_NETLINK_INTERFACE=y
 19.4296 +CONFIG_PRINT_QUOTA_WARNING=y
 19.4297 +CONFIG_QUOTA_DEBUG=y
 19.4298 +CONFIG_QUOTA_TREE=m
 19.4299 +# CONFIG_QFMT_V1 is not set
 19.4300 +CONFIG_QFMT_V2=m
 19.4301 +CONFIG_QUOTACTL=y
 19.4302 +CONFIG_AUTOFS4_FS=m
 19.4303 +CONFIG_FUSE_FS=m
 19.4304 +CONFIG_CUSE=m
 19.4305 +
 19.4306 +#
 19.4307 +# Caches
 19.4308 +#
 19.4309 +CONFIG_FSCACHE=m
 19.4310 +# CONFIG_FSCACHE_STATS is not set
 19.4311 +# CONFIG_FSCACHE_HISTOGRAM is not set
 19.4312 +# CONFIG_FSCACHE_DEBUG is not set
 19.4313 +# CONFIG_FSCACHE_OBJECT_LIST is not set
 19.4314 +CONFIG_CACHEFILES=m
 19.4315 +# CONFIG_CACHEFILES_DEBUG is not set
 19.4316 +CONFIG_CACHEFILES_HISTOGRAM=y
 19.4317 +
 19.4318 +#
 19.4319 +# CD-ROM/DVD Filesystems
 19.4320 +#
 19.4321 +CONFIG_ISO9660_FS=m
 19.4322 +CONFIG_JOLIET=y
 19.4323 +CONFIG_ZISOFS=y
 19.4324 +CONFIG_UDF_FS=m
 19.4325 +CONFIG_UDF_NLS=y
 19.4326 +
 19.4327 +#
 19.4328 +# DOS/FAT/NT Filesystems
 19.4329 +#
 19.4330 +CONFIG_FAT_FS=m
 19.4331 +CONFIG_MSDOS_FS=m
 19.4332 +CONFIG_VFAT_FS=m
 19.4333 +CONFIG_FAT_DEFAULT_CODEPAGE=437
 19.4334 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
 19.4335 +CONFIG_NTFS_FS=m
 19.4336 +# CONFIG_NTFS_DEBUG is not set
 19.4337 +# CONFIG_NTFS_RW is not set
 19.4338 +
 19.4339 +#
 19.4340 +# Pseudo filesystems
 19.4341 +#
 19.4342 +CONFIG_PROC_FS=y
 19.4343 +# CONFIG_PROC_KCORE is not set
 19.4344 +CONFIG_PROC_SYSCTL=y
 19.4345 +# CONFIG_PROC_PAGE_MONITOR is not set
 19.4346 +CONFIG_SYSFS=y
 19.4347 +# CONFIG_HUGETLBFS is not set
 19.4348 +# CONFIG_HUGETLB_PAGE is not set
 19.4349 +CONFIG_CONFIGFS_FS=m
 19.4350 +CONFIG_MISC_FILESYSTEMS=y
 19.4351 +CONFIG_ADFS_FS=m
 19.4352 +# CONFIG_ADFS_FS_RW is not set
 19.4353 +CONFIG_AFFS_FS=m
 19.4354 +# CONFIG_ECRYPT_FS is not set
 19.4355 +CONFIG_HFS_FS=m
 19.4356 +CONFIG_HFSPLUS_FS=m
 19.4357 +CONFIG_BEFS_FS=m
 19.4358 +# CONFIG_BEFS_DEBUG is not set
 19.4359 +CONFIG_BFS_FS=m
 19.4360 +CONFIG_EFS_FS=m
 19.4361 +CONFIG_JFFS2_FS=m
 19.4362 +CONFIG_JFFS2_FS_DEBUG=0
 19.4363 +CONFIG_JFFS2_FS_WRITEBUFFER=y
 19.4364 +CONFIG_JFFS2_FS_WBUF_VERIFY=y
 19.4365 +# CONFIG_JFFS2_SUMMARY is not set
 19.4366 +CONFIG_JFFS2_FS_XATTR=y
 19.4367 +# CONFIG_JFFS2_FS_POSIX_ACL is not set
 19.4368 +# CONFIG_JFFS2_FS_SECURITY is not set
 19.4369 +CONFIG_JFFS2_COMPRESSION_OPTIONS=y
 19.4370 +CONFIG_JFFS2_ZLIB=y
 19.4371 +CONFIG_JFFS2_LZO=y
 19.4372 +CONFIG_JFFS2_RTIME=y
 19.4373 +CONFIG_JFFS2_RUBIN=y
 19.4374 +# CONFIG_JFFS2_CMODE_NONE is not set
 19.4375 +CONFIG_JFFS2_CMODE_PRIORITY=y
 19.4376 +# CONFIG_JFFS2_CMODE_SIZE is not set
 19.4377 +# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
 19.4378 +CONFIG_UBIFS_FS=m
 19.4379 +CONFIG_UBIFS_FS_XATTR=y
 19.4380 +CONFIG_UBIFS_FS_ADVANCED_COMPR=y
 19.4381 +CONFIG_UBIFS_FS_LZO=y
 19.4382 +CONFIG_UBIFS_FS_ZLIB=y
 19.4383 +# CONFIG_UBIFS_FS_DEBUG is not set
 19.4384 +CONFIG_LOGFS=m
 19.4385 +CONFIG_CRAMFS=m
 19.4386 +CONFIG_SQUASHFS=m
 19.4387 +# CONFIG_SQUASHFS_XATTR is not set
 19.4388 +# CONFIG_SQUASHFS_LZO is not set
 19.4389 +# CONFIG_SQUASHFS_XZ is not set
 19.4390 +# CONFIG_SQUASHFS_EMBEDDED is not set
 19.4391 +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
 19.4392 +CONFIG_VXFS_FS=m
 19.4393 +CONFIG_MINIX_FS=m
 19.4394 +CONFIG_OMFS_FS=m
 19.4395 +CONFIG_HPFS_FS=m
 19.4396 +CONFIG_QNX4FS_FS=m
 19.4397 +CONFIG_ROMFS_FS=m
 19.4398 +CONFIG_ROMFS_BACKED_BY_BLOCK=y
 19.4399 +# CONFIG_ROMFS_BACKED_BY_MTD is not set
 19.4400 +# CONFIG_ROMFS_BACKED_BY_BOTH is not set
 19.4401 +CONFIG_ROMFS_ON_BLOCK=y
 19.4402 +CONFIG_SYSV_FS=m
 19.4403 +CONFIG_UFS_FS=m
 19.4404 +# CONFIG_UFS_FS_WRITE is not set
 19.4405 +# CONFIG_UFS_DEBUG is not set
 19.4406 +CONFIG_EXOFS_FS=m
 19.4407 +# CONFIG_EXOFS_DEBUG is not set
 19.4408 +CONFIG_NETWORK_FILESYSTEMS=y
 19.4409 +CONFIG_NFS_FS=m
 19.4410 +CONFIG_NFS_V3=y
 19.4411 +CONFIG_NFS_V3_ACL=y
 19.4412 +# CONFIG_NFS_V4 is not set
 19.4413 +CONFIG_NFS_FSCACHE=y
 19.4414 +CONFIG_NFSD=m
 19.4415 +CONFIG_NFSD_DEPRECATED=y
 19.4416 +CONFIG_NFSD_V2_ACL=y
 19.4417 +CONFIG_NFSD_V3=y
 19.4418 +CONFIG_NFSD_V3_ACL=y
 19.4419 +# CONFIG_NFSD_V4 is not set
 19.4420 +CONFIG_LOCKD=m
 19.4421 +CONFIG_LOCKD_V4=y
 19.4422 +CONFIG_NFS_ACL_SUPPORT=m
 19.4423 +CONFIG_NFS_COMMON=y
 19.4424 +CONFIG_SUNRPC=m
 19.4425 +CONFIG_SUNRPC_GSS=m
 19.4426 +CONFIG_SUNRPC_XPRT_RDMA=m
 19.4427 +CONFIG_RPCSEC_GSS_KRB5=m
 19.4428 +CONFIG_CEPH_FS=m
 19.4429 +CONFIG_CIFS=m
 19.4430 +CONFIG_CIFS_STATS=y
 19.4431 +CONFIG_CIFS_STATS2=y
 19.4432 +CONFIG_CIFS_WEAK_PW_HASH=y
 19.4433 +# CONFIG_CIFS_UPCALL is not set
 19.4434 +CONFIG_CIFS_XATTR=y
 19.4435 +CONFIG_CIFS_POSIX=y
 19.4436 +# CONFIG_CIFS_DEBUG2 is not set
 19.4437 +# CONFIG_CIFS_DFS_UPCALL is not set
 19.4438 +# CONFIG_CIFS_FSCACHE is not set
 19.4439 +# CONFIG_CIFS_ACL is not set
 19.4440 +CONFIG_CIFS_EXPERIMENTAL=y
 19.4441 +CONFIG_NCP_FS=m
 19.4442 +CONFIG_NCPFS_PACKET_SIGNING=y
 19.4443 +CONFIG_NCPFS_IOCTL_LOCKING=y
 19.4444 +CONFIG_NCPFS_STRONG=y
 19.4445 +CONFIG_NCPFS_NFS_NS=y
 19.4446 +CONFIG_NCPFS_OS2_NS=y
 19.4447 +CONFIG_NCPFS_SMALLDOS=y
 19.4448 +CONFIG_NCPFS_NLS=y
 19.4449 +CONFIG_NCPFS_EXTRAS=y
 19.4450 +CONFIG_CODA_FS=m
 19.4451 +CONFIG_AFS_FS=m
 19.4452 +# CONFIG_AFS_DEBUG is not set
 19.4453 +CONFIG_AFS_FSCACHE=y
 19.4454 +
 19.4455 +#
 19.4456 +# Partition Types
 19.4457 +#
 19.4458 +# CONFIG_PARTITION_ADVANCED is not set
 19.4459 +CONFIG_MSDOS_PARTITION=y
 19.4460 +CONFIG_NLS=m
 19.4461 +CONFIG_NLS_DEFAULT="iso8859-1"
 19.4462 +CONFIG_NLS_CODEPAGE_437=m
 19.4463 +CONFIG_NLS_CODEPAGE_737=m
 19.4464 +CONFIG_NLS_CODEPAGE_775=m
 19.4465 +CONFIG_NLS_CODEPAGE_850=m
 19.4466 +CONFIG_NLS_CODEPAGE_852=m
 19.4467 +CONFIG_NLS_CODEPAGE_855=m
 19.4468 +CONFIG_NLS_CODEPAGE_857=m
 19.4469 +CONFIG_NLS_CODEPAGE_860=m
 19.4470 +CONFIG_NLS_CODEPAGE_861=m
 19.4471 +CONFIG_NLS_CODEPAGE_862=m
 19.4472 +CONFIG_NLS_CODEPAGE_863=m
 19.4473 +CONFIG_NLS_CODEPAGE_864=m
 19.4474 +CONFIG_NLS_CODEPAGE_865=m
 19.4475 +CONFIG_NLS_CODEPAGE_866=m
 19.4476 +CONFIG_NLS_CODEPAGE_869=m
 19.4477 +CONFIG_NLS_CODEPAGE_936=m
 19.4478 +CONFIG_NLS_CODEPAGE_950=m
 19.4479 +CONFIG_NLS_CODEPAGE_932=m
 19.4480 +CONFIG_NLS_CODEPAGE_949=m
 19.4481 +CONFIG_NLS_CODEPAGE_874=m
 19.4482 +CONFIG_NLS_ISO8859_8=m
 19.4483 +CONFIG_NLS_CODEPAGE_1250=m
 19.4484 +CONFIG_NLS_CODEPAGE_1251=m
 19.4485 +CONFIG_NLS_ASCII=m
 19.4486 +CONFIG_NLS_ISO8859_1=m
 19.4487 +CONFIG_NLS_ISO8859_2=m
 19.4488 +CONFIG_NLS_ISO8859_3=m
 19.4489 +CONFIG_NLS_ISO8859_4=m
 19.4490 +CONFIG_NLS_ISO8859_5=m
 19.4491 +CONFIG_NLS_ISO8859_6=m
 19.4492 +CONFIG_NLS_ISO8859_7=m
 19.4493 +CONFIG_NLS_ISO8859_9=m
 19.4494 +CONFIG_NLS_ISO8859_13=m
 19.4495 +CONFIG_NLS_ISO8859_14=m
 19.4496 +CONFIG_NLS_ISO8859_15=m
 19.4497 +CONFIG_NLS_KOI8_R=m
 19.4498 +CONFIG_NLS_KOI8_U=m
 19.4499 +CONFIG_NLS_UTF8=m
 19.4500 +CONFIG_DLM=m
 19.4501 +# CONFIG_DLM_DEBUG is not set
 19.4502 +
 19.4503 +#
 19.4504 +# Kernel hacking
 19.4505 +#
 19.4506 +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
 19.4507 +# CONFIG_PRINTK_TIME is not set
 19.4508 +# CONFIG_ENABLE_WARN_DEPRECATED is not set
 19.4509 +# CONFIG_ENABLE_MUST_CHECK is not set
 19.4510 +CONFIG_FRAME_WARN=1024
 19.4511 +# CONFIG_MAGIC_SYSRQ is not set
 19.4512 +# CONFIG_STRIP_ASM_SYMS is not set
 19.4513 +# CONFIG_UNUSED_SYMBOLS is not set
 19.4514 +# CONFIG_DEBUG_FS is not set
 19.4515 +# CONFIG_HEADERS_CHECK is not set
 19.4516 +# CONFIG_DEBUG_KERNEL is not set
 19.4517 +# CONFIG_HARDLOCKUP_DETECTOR is not set
 19.4518 +CONFIG_BKL=y
 19.4519 +# CONFIG_SPARSE_RCU_POINTER is not set
 19.4520 +# CONFIG_DEBUG_MEMORY_INIT is not set
 19.4521 +CONFIG_ARCH_WANT_FRAME_POINTERS=y
 19.4522 +# CONFIG_FRAME_POINTER is not set
 19.4523 +# CONFIG_SYSCTL_SYSCALL_CHECK is not set
 19.4524 +CONFIG_USER_STACKTRACE_SUPPORT=y
 19.4525 +CONFIG_HAVE_FUNCTION_TRACER=y
 19.4526 +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
 19.4527 +CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y
 19.4528 +CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
 19.4529 +CONFIG_HAVE_DYNAMIC_FTRACE=y
 19.4530 +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
 19.4531 +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
 19.4532 +CONFIG_HAVE_C_RECORDMCOUNT=y
 19.4533 +CONFIG_TRACING_SUPPORT=y
 19.4534 +# CONFIG_FTRACE is not set
 19.4535 +# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
 19.4536 +# CONFIG_FIREWIRE_OHCI_REMOTE_DMA is not set
 19.4537 +# CONFIG_DMA_API_DEBUG is not set
 19.4538 +# CONFIG_ATOMIC64_SELFTEST is not set
 19.4539 +CONFIG_ASYNC_RAID6_TEST=m
 19.4540 +# CONFIG_SAMPLES is not set
 19.4541 +CONFIG_HAVE_ARCH_KGDB=y
 19.4542 +CONFIG_HAVE_ARCH_KMEMCHECK=y
 19.4543 +# CONFIG_STRICT_DEVMEM is not set
 19.4544 +# CONFIG_X86_VERBOSE_BOOTUP is not set
 19.4545 +# CONFIG_EARLY_PRINTK is not set
 19.4546 +# CONFIG_DOUBLEFAULT is not set
 19.4547 +# CONFIG_IOMMU_STRESS is not set
 19.4548 +CONFIG_HAVE_MMIOTRACE_SUPPORT=y
 19.4549 +CONFIG_IO_DELAY_TYPE_0X80=0
 19.4550 +CONFIG_IO_DELAY_TYPE_0XED=1
 19.4551 +CONFIG_IO_DELAY_TYPE_UDELAY=2
 19.4552 +CONFIG_IO_DELAY_TYPE_NONE=3
 19.4553 +CONFIG_IO_DELAY_0X80=y
 19.4554 +# CONFIG_IO_DELAY_0XED is not set
 19.4555 +# CONFIG_IO_DELAY_UDELAY is not set
 19.4556 +# CONFIG_IO_DELAY_NONE is not set
 19.4557 +CONFIG_DEFAULT_IO_DELAY_TYPE=0
 19.4558 +CONFIG_OPTIMIZE_INLINING=y
 19.4559 +
 19.4560 +#
 19.4561 +# Security options
 19.4562 +#
 19.4563 +CONFIG_KEYS=y
 19.4564 +# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
 19.4565 +# CONFIG_SECURITY_DMESG_RESTRICT is not set
 19.4566 +# CONFIG_SECURITY is not set
 19.4567 +CONFIG_SECURITYFS=y
 19.4568 +CONFIG_DEFAULT_SECURITY_DAC=y
 19.4569 +CONFIG_DEFAULT_SECURITY=""
 19.4570 +CONFIG_XOR_BLOCKS=m
 19.4571 +CONFIG_ASYNC_CORE=m
 19.4572 +CONFIG_ASYNC_MEMCPY=m
 19.4573 +CONFIG_ASYNC_XOR=m
 19.4574 +CONFIG_ASYNC_PQ=m
 19.4575 +CONFIG_ASYNC_RAID6_RECOV=m
 19.4576 +CONFIG_ASYNC_TX_DISABLE_PQ_VAL_DMA=y
 19.4577 +CONFIG_ASYNC_TX_DISABLE_XOR_VAL_DMA=y
 19.4578 +CONFIG_CRYPTO=y
 19.4579 +
 19.4580 +#
 19.4581 +# Crypto core or helper
 19.4582 +#
 19.4583 +CONFIG_CRYPTO_ALGAPI=m
 19.4584 +CONFIG_CRYPTO_ALGAPI2=m
 19.4585 +CONFIG_CRYPTO_AEAD=m
 19.4586 +CONFIG_CRYPTO_AEAD2=m
 19.4587 +CONFIG_CRYPTO_BLKCIPHER=m
 19.4588 +CONFIG_CRYPTO_BLKCIPHER2=m
 19.4589 +CONFIG_CRYPTO_HASH=m
 19.4590 +CONFIG_CRYPTO_HASH2=m
 19.4591 +CONFIG_CRYPTO_RNG=m
 19.4592 +CONFIG_CRYPTO_RNG2=m
 19.4593 +CONFIG_CRYPTO_PCOMP=m
 19.4594 +CONFIG_CRYPTO_PCOMP2=m
 19.4595 +CONFIG_CRYPTO_MANAGER=m
 19.4596 +CONFIG_CRYPTO_MANAGER2=m
 19.4597 +CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
 19.4598 +CONFIG_CRYPTO_GF128MUL=m
 19.4599 +CONFIG_CRYPTO_NULL=m
 19.4600 +CONFIG_CRYPTO_WORKQUEUE=m
 19.4601 +CONFIG_CRYPTO_CRYPTD=m
 19.4602 +CONFIG_CRYPTO_AUTHENC=m
 19.4603 +# CONFIG_CRYPTO_TEST is not set
 19.4604 +
 19.4605 +#
 19.4606 +# Authenticated Encryption with Associated Data
 19.4607 +#
 19.4608 +CONFIG_CRYPTO_CCM=m
 19.4609 +CONFIG_CRYPTO_GCM=m
 19.4610 +CONFIG_CRYPTO_SEQIV=m
 19.4611 +
 19.4612 +#
 19.4613 +# Block modes
 19.4614 +#
 19.4615 +CONFIG_CRYPTO_CBC=m
 19.4616 +CONFIG_CRYPTO_CTR=m
 19.4617 +CONFIG_CRYPTO_CTS=m
 19.4618 +CONFIG_CRYPTO_ECB=m
 19.4619 +CONFIG_CRYPTO_LRW=m
 19.4620 +CONFIG_CRYPTO_PCBC=m
 19.4621 +CONFIG_CRYPTO_XTS=m
 19.4622 +
 19.4623 +#
 19.4624 +# Hash modes
 19.4625 +#
 19.4626 +CONFIG_CRYPTO_HMAC=m
 19.4627 +CONFIG_CRYPTO_XCBC=m
 19.4628 +CONFIG_CRYPTO_VMAC=m
 19.4629 +
 19.4630 +#
 19.4631 +# Digest
 19.4632 +#
 19.4633 +CONFIG_CRYPTO_CRC32C=m
 19.4634 +CONFIG_CRYPTO_CRC32C_INTEL=m
 19.4635 +CONFIG_CRYPTO_GHASH=m
 19.4636 +CONFIG_CRYPTO_MD4=m
 19.4637 +CONFIG_CRYPTO_MD5=m
 19.4638 +CONFIG_CRYPTO_MICHAEL_MIC=m
 19.4639 +CONFIG_CRYPTO_RMD128=m
 19.4640 +CONFIG_CRYPTO_RMD160=m
 19.4641 +CONFIG_CRYPTO_RMD256=m
 19.4642 +CONFIG_CRYPTO_RMD320=m
 19.4643 +CONFIG_CRYPTO_SHA1=m
 19.4644 +CONFIG_CRYPTO_SHA256=m
 19.4645 +CONFIG_CRYPTO_SHA512=m
 19.4646 +CONFIG_CRYPTO_TGR192=m
 19.4647 +CONFIG_CRYPTO_WP512=m
 19.4648 +
 19.4649 +#
 19.4650 +# Ciphers
 19.4651 +#
 19.4652 +CONFIG_CRYPTO_AES=m
 19.4653 +CONFIG_CRYPTO_AES_586=m
 19.4654 +CONFIG_CRYPTO_ANUBIS=m
 19.4655 +CONFIG_CRYPTO_ARC4=m
 19.4656 +CONFIG_CRYPTO_BLOWFISH=m
 19.4657 +CONFIG_CRYPTO_CAMELLIA=m
 19.4658 +CONFIG_CRYPTO_CAST5=m
 19.4659 +CONFIG_CRYPTO_CAST6=m
 19.4660 +CONFIG_CRYPTO_DES=m
 19.4661 +CONFIG_CRYPTO_FCRYPT=m
 19.4662 +CONFIG_CRYPTO_KHAZAD=m
 19.4663 +CONFIG_CRYPTO_SALSA20=m
 19.4664 +CONFIG_CRYPTO_SALSA20_586=m
 19.4665 +CONFIG_CRYPTO_SEED=m
 19.4666 +CONFIG_CRYPTO_SERPENT=m
 19.4667 +CONFIG_CRYPTO_TEA=m
 19.4668 +CONFIG_CRYPTO_TWOFISH=m
 19.4669 +CONFIG_CRYPTO_TWOFISH_COMMON=m
 19.4670 +CONFIG_CRYPTO_TWOFISH_586=m
 19.4671 +
 19.4672 +#
 19.4673 +# Compression
 19.4674 +#
 19.4675 +CONFIG_CRYPTO_DEFLATE=m
 19.4676 +CONFIG_CRYPTO_ZLIB=m
 19.4677 +CONFIG_CRYPTO_LZO=m
 19.4678 +
 19.4679 +#
 19.4680 +# Random Number Generation
 19.4681 +#
 19.4682 +CONFIG_CRYPTO_ANSI_CPRNG=m
 19.4683 +CONFIG_CRYPTO_HW=y
 19.4684 +# CONFIG_CRYPTO_DEV_PADLOCK is not set
 19.4685 +# CONFIG_CRYPTO_DEV_GEODE is not set
 19.4686 +# CONFIG_CRYPTO_DEV_HIFN_795X is not set
 19.4687 +CONFIG_HAVE_KVM=y
 19.4688 +CONFIG_HAVE_KVM_IRQCHIP=y
 19.4689 +CONFIG_HAVE_KVM_EVENTFD=y
 19.4690 +CONFIG_KVM_APIC_ARCHITECTURE=y
 19.4691 +CONFIG_KVM_MMIO=y
 19.4692 +CONFIG_VIRTUALIZATION=y
 19.4693 +CONFIG_KVM=m
 19.4694 +CONFIG_KVM_INTEL=m
 19.4695 +CONFIG_KVM_AMD=m
 19.4696 +CONFIG_VHOST_NET=m
 19.4697 +CONFIG_LGUEST=m
 19.4698 +CONFIG_VIRTIO=m
 19.4699 +CONFIG_VIRTIO_RING=m
 19.4700 +CONFIG_VIRTIO_PCI=m
 19.4701 +CONFIG_VIRTIO_BALLOON=m
 19.4702 +# CONFIG_BINARY_PRINTF is not set
 19.4703 +
 19.4704 +#
 19.4705 +# Library routines
 19.4706 +#
 19.4707 +CONFIG_RAID6_PQ=m
 19.4708 +CONFIG_BITREVERSE=y
 19.4709 +CONFIG_GENERIC_FIND_FIRST_BIT=y
 19.4710 +CONFIG_GENERIC_FIND_NEXT_BIT=y
 19.4711 +CONFIG_GENERIC_FIND_LAST_BIT=y
 19.4712 +CONFIG_CRC_CCITT=y
 19.4713 +CONFIG_CRC16=m
 19.4714 +CONFIG_CRC_T10DIF=m
 19.4715 +CONFIG_CRC_ITU_T=m
 19.4716 +CONFIG_CRC32=y
 19.4717 +CONFIG_CRC7=m
 19.4718 +CONFIG_LIBCRC32C=m
 19.4719 +CONFIG_ZLIB_INFLATE=y
 19.4720 +CONFIG_ZLIB_DEFLATE=m
 19.4721 +CONFIG_LZO_COMPRESS=m
 19.4722 +CONFIG_LZO_DECOMPRESS=m
 19.4723 +# CONFIG_XZ_DEC is not set
 19.4724 +# CONFIG_XZ_DEC_BCJ is not set
 19.4725 +CONFIG_DECOMPRESS_GZIP=y
 19.4726 +CONFIG_DECOMPRESS_LZMA=y
 19.4727 +CONFIG_GENERIC_ALLOCATOR=y
 19.4728 +CONFIG_REED_SOLOMON=m
 19.4729 +CONFIG_REED_SOLOMON_DEC16=y
 19.4730 +CONFIG_TEXTSEARCH=y
 19.4731 +CONFIG_TEXTSEARCH_KMP=m
 19.4732 +CONFIG_TEXTSEARCH_BM=m
 19.4733 +CONFIG_TEXTSEARCH_FSM=m
 19.4734 +CONFIG_BTREE=y
 19.4735 +CONFIG_HAS_IOMEM=y
 19.4736 +CONFIG_HAS_IOPORT=y
 19.4737 +CONFIG_HAS_DMA=y
 19.4738 +CONFIG_CHECK_SIGNATURE=y
 19.4739 +CONFIG_NLATTR=y
 19.4740 +CONFIG_LRU_CACHE=m
    20.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    20.2 +++ b/kernel-modular/stuff/linux-diff-2.6.37.u	Tue Feb 01 09:37:33 2011 +0100
    20.3 @@ -0,0 +1,40 @@
    20.4 +--- linux-2.6.30.6/arch/x86/vdso/Makefile
    20.5 ++++ linux-2.6.30.6/arch/x86/vdso/Makefile
    20.6 +@@ -104,10 +104,12 @@
    20.7 + 	   $(foreach H,$(filter-out FORCE,$^),\
    20.8 + 		     if grep -q VDSO32_SYSENTER_RETURN $H; \
    20.9 + 		     then diff -u $(@D)/.tmp_$(@F) $H; \
   20.10 +-		     else sed /VDSO32_SYSENTER_RETURN/d $(@D)/.tmp_$(@F) | \
   20.11 +-			  diff -u - $H; fi &&) : ;\
   20.12 ++		     else sed /VDSO32_SYSENTER_RETURN/d $(@D)/.tmp_$(@F) > \
   20.13 ++		     	  $(@D)/.tmp_$(@F).$$ ; \
   20.14 ++			  diff -u $(@D)/.tmp_$(@F).$$ $H; fi &&) : ;\
   20.15 + 	then mv -f $(@D)/.tmp_$(@F) $@; \
   20.16 +-	else rm -f $(@D)/.tmp_$(@F); exit 1; \
   20.17 ++	else rm -f $(@D)/.tmp_$(@F)*; exit 1; \
   20.18 ++	rm -f $(@D)/.tmp_$(@F)*; \
   20.19 + 	fi
   20.20 + endef
   20.21 + 
   20.22 +
   20.23 +--- linux-2.6.34/scripts/Makefile.lib
   20.24 ++++ linux-2.6.34/scripts/Makefile.lib
   20.25 +@@ -204,7 +204,8 @@
   20.26 + # ---------------------------------------------------------------------------
   20.27 + 
   20.28 + quiet_cmd_gzip = GZIP    $@
   20.29 +-cmd_gzip = (cat $(filter-out FORCE,$^) | gzip -f -9 > $@) || \
   20.30 ++cmd_gzip = (cat $(filter-out FORCE,$^) | gzip -f -9 > $@) && \
   20.31 ++	( which advdef > /dev/null && advdef -z $@ ; true ) || \
   20.32 + 	(rm -f $@ ; false)
   20.33 + 
   20.34 +
   20.35 +@@ -238,7 +239,7 @@
   20.36 + 
   20.37 + quiet_cmd_lzma = LZMA    $@
   20.38 + cmd_lzma = (cat $(filter-out FORCE,$^) | \
   20.39 +-	lzma -9 && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
   20.40 ++	lzma e -si -so && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
   20.41 + 	(rm -f $@ ; false)
   20.42 + 
   20.43 + quiet_cmd_lzo = LZO    $@
    21.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    21.2 +++ b/kernel-modular/stuff/linux-freeinitrd-2.6.37.u	Tue Feb 01 09:37:33 2011 +0100
    21.3 @@ -0,0 +1,129 @@
    21.4 +--- linux-2.6.30.4/arch/x86/mm/init.c
    21.5 ++++ linux-2.6.30.4/arch/x86/mm/init.c
    21.6 +@@ -366,7 +366,7 @@
    21.7 + 	 */
    21.8 + 	set_memory_rw(begin, (end - begin) >> PAGE_SHIFT);
    21.9 + 
   21.10 +-	printk(KERN_INFO "Freeing %s: %luk freed\n", what, (end - begin) >> 10);
   21.11 ++	if (what) printk(KERN_INFO "Freeing %s: %luk freed\n", what, (end - begin) >> 10);
   21.12 + 
   21.13 + 	for (; addr < end; addr += PAGE_SIZE) {
   21.14 + 		ClearPageReserved(virt_to_page(addr));
   21.15 +
   21.16 +--- linux-2.6.30.4/init/initramfs.c
   21.17 ++++ linux-2.6.30.4/init/initramfs.c
   21.18 +@@ -374,6 +374,52 @@
   21.19 + 	[Reset]		= do_reset,
   21.20 + };
   21.21 + 
   21.22 ++#include <linux/initrd.h>
   21.23 ++#define INITRD_PAGE ((PAGE_SIZE > 64*1024) ? PAGE_SIZE : 64*1024)
   21.24 ++#define INITRD_DOT  (1024*1024)
   21.25 ++
   21.26 ++static void free_rootfs_mem(unsigned long start, unsigned long end)
   21.27 ++{
   21.28 ++	free_init_pages(NULL, start, end);
   21.29 ++}
   21.30 ++
   21.31 ++static void _free_initrd(unsigned long initrd_start, unsigned long initrd_end, 
   21.32 ++			 void (*free_initrd_mem)(unsigned long, unsigned long));
   21.33 ++
   21.34 ++static struct {
   21.35 ++	int offset, last, inptr, freed;
   21.36 ++	char *max;
   21.37 ++} fill;
   21.38 ++
   21.39 ++static void release_inbuf(unsigned n)
   21.40 ++{
   21.41 ++	if (n >= INITRD_PAGE) {
   21.42 ++		unsigned rem = n % INITRD_PAGE;
   21.43 ++		unsigned end = initrd_start + n - rem;
   21.44 ++		_free_initrd(initrd_start, end, free_rootfs_mem);
   21.45 ++		fill.freed += n - rem;
   21.46 ++		if (fill.freed >= INITRD_DOT) {
   21.47 ++			fill.freed -= INITRD_DOT;
   21.48 ++			printk(".");
   21.49 ++		}
   21.50 ++		initrd_start = end;
   21.51 ++		fill.offset = rem;
   21.52 ++	}
   21.53 ++}
   21.54 ++
   21.55 ++static int fill_buffer(void *buffer, unsigned size)
   21.56 ++{
   21.57 ++	int max =  fill.max - (char *) initrd_start - fill.offset;
   21.58 ++	if (max > size) max = size;
   21.59 ++	if (max > INITRD_PAGE) max = INITRD_PAGE;
   21.60 ++	memcpy(buffer, (void *)(initrd_start + fill.offset), max);
   21.61 ++	release_inbuf(fill.offset);
   21.62 ++	fill.offset += max;
   21.63 ++	fill.inptr += fill.last;
   21.64 ++	fill.last = max;
   21.65 ++	return max;
   21.66 ++}
   21.67 ++
   21.68 + static int __init write_buffer(char *buf, unsigned len)
   21.69 + {
   21.70 + 	count = len;
   21.71 +@@ -418,6 +463,7 @@
   21.72 + 	decompress_fn decompress;
   21.73 + 	const char *compress_name;
   21.74 + 	static __initdata char msg_buf[64];
   21.75 ++	int early_free_initrd = (buf == (char *) initrd_start);
   21.76 + 
   21.77 + 	header_buf = kmalloc(110, GFP_KERNEL);
   21.78 + 	symlink_buf = kmalloc(PATH_MAX + N_ALIGN(PATH_MAX) + 1, GFP_KERNEL);
   21.79 +@@ -431,11 +478,16 @@
   21.80 + 	message = NULL;
   21.81 + 	while (!message && len) {
   21.82 + 		loff_t saved_offset = this_header;
   21.83 ++		fill.offset = buf - (char *) initrd_start;
   21.84 ++		fill.max = buf + len;
   21.85 ++		fill.inptr = fill.last = fill.freed = 0;
   21.86 + 		if (*buf == '0' && !(this_header & 3)) {
   21.87 + 			state = Start;
   21.88 + 			written = write_buffer(buf, len);
   21.89 + 			buf += written;
   21.90 + 			len -= written;
   21.91 ++			if (early_free_initrd)
   21.92 ++				release_inbuf(buf - (char *) initrd_start);
   21.93 + 			continue;
   21.94 + 		}
   21.95 + 		if (!*buf) {
   21.96 +@@ -447,7 +497,12 @@
   21.97 + 		this_header = 0;
   21.98 + 		decompress = decompress_method(buf, len, &compress_name);
   21.99 + 		if (decompress) {
  21.100 +-			res = decompress(buf, len, NULL, flush_buffer, NULL,
  21.101 ++			if (early_free_initrd) {
  21.102 ++				res = decompress(NULL, 0, fill_buffer,
  21.103 ++					   flush_buffer, NULL, &my_inptr, error);
  21.104 ++				my_inptr += fill.inptr;
  21.105 ++			}
  21.106 ++			else res = decompress(buf, len, NULL, flush_buffer, NULL,
  21.107 + 				   &my_inptr, error);
  21.108 + 			if (res)
  21.109 + 				error("decompressor failed");
  21.110 +@@ -488,7 +546,8 @@
  21.111 + #include <linux/initrd.h>
  21.112 + #include <linux/kexec.h>
  21.113 + 
  21.114 +-static void __init free_initrd(void)
  21.115 ++static void _free_initrd(unsigned long initrd_start, unsigned long initrd_end, 
  21.116 ++			 void (*free_initrd_mem)(unsigned long, unsigned long))
  21.117 + {
  21.118 + #ifdef CONFIG_KEXEC
  21.119 + 	unsigned long crashk_start = (unsigned long)__va(crashk_res.start);
  21.120 +@@ -516,6 +574,12 @@
  21.121 + #endif
  21.122 + 		free_initrd_mem(initrd_start, initrd_end);
  21.123 + skip:
  21.124 ++	;
  21.125 ++}
  21.126 ++
  21.127 ++static void __init free_initrd(void)
  21.128 ++{
  21.129 ++	_free_initrd(initrd_start, initrd_end, free_initrd_mem);
  21.130 + 	initrd_start = 0;
  21.131 + 	initrd_end = 0;
  21.132 + }
    22.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    22.2 +++ b/kernel-modular/stuff/linux-header-2.6.37.u	Tue Feb 01 09:37:33 2011 +0100
    22.3 @@ -0,0 +1,469 @@
    22.4 +--- linux-2.6.30.6/arch/x86/boot/header.S
    22.5 ++++ linux-2.6.30.6/arch/x86/boot/header.S
    22.6 +@@ -6,7 +6,7 @@
    22.7 +  *	Based on bootsect.S and setup.S
    22.8 +  *	modified by more people than can be counted
    22.9 +  *
   22.10 +- *	Rewritten as a common file by H. Peter Anvin (Apr 2007)
   22.11 ++ *	Rewritten Pascal Bellard (Nov 2009)
   22.12 +  *
   22.13 +  * BIG FAT NOTE: We're in real mode using 64k segments.  Therefore segment
   22.14 +  * addresses must be multiplied by 16 to obtain their respective linear
   22.15 +@@ -27,6 +27,8 @@
   22.16 + 
   22.17 + BOOTSEG		= 0x07C0		/* original address of boot-sector */
   22.18 + SYSSEG		= 0x1000		/* historical load address >> 4 */
   22.19 ++INITSEG		= 0x9000		/* boot address >> 4 */
   22.20 ++SETUPSEG	= 0x9020		/* setup address >> 4 */
   22.21 + 
   22.22 + #ifndef SVGA_MODE
   22.23 + #define SVGA_MODE ASK_VGA
   22.24 +@@ -40,53 +42,412 @@
   22.25 + #define ROOT_RDONLY 1
   22.26 + #endif
   22.27 + 
   22.28 ++/* some extra features */
   22.29 ++#define	EDIT_CMDLINE		on hotkey
   22.30 ++#define SHOW_REGS		show int13 status & parameters
   22.31 ++
   22.32 + 	.code16
   22.33 + 	.section ".bstext", "ax"
   22.34 + 
   22.35 + 	.global bootsect_start
   22.36 + bootsect_start:
   22.37 ++	cld				# assume nothing
   22.38 ++stacktop	= 0x9E00		# in 0x8000 .. 0xA000
   22.39 ++zeroed		= 48+10			# gdt + zeroed registers
   22.40 ++	movw	$stacktop-12-zeroed, %di	# stacktop is an arbitrary value >=
   22.41 ++					# length of bootsect + length of
   22.42 ++					# setup + room for stack;
   22.43 ++					# 12 is disk parm size.
   22.44 ++	pushw	$INITSEG
   22.45 ++	popw	%es			# %es = INITSEG
   22.46 ++
   22.47 ++	pushw	%es
   22.48 ++	popw	%ss			# %ss and %es already contain INITSEG
   22.49 ++	movw	%di, %sp		# put stack at INITSEG:stacktop-...
   22.50 ++
   22.51 ++# Many BIOS's default disk parameter tables will not recognize
   22.52 ++# multi-sector reads beyond the maximum sector number specified
   22.53 ++# in the default diskette parameter tables - this may mean 7
   22.54 ++# sectors in some cases.
   22.55 ++#
   22.56 ++# Since single sector reads are slow and out of the question,
   22.57 ++# we must take care of this by creating new parameter tables
   22.58 ++# (for the first disk) in RAM.  We can set the maximum sector
   22.59 ++# count to 36 - the most we will encounter on an ED 2.88.  
   22.60 ++#
   22.61 ++# High doesn't hurt.  Low does.  Let's use the max: 63
   22.62 ++#
   22.63 ++# Segments are as follows: %es = %ss = INITSEG,
   22.64 ++
   22.65 ++	xorw	%ax, %ax		# %ax = 0
   22.66 ++	movw	$zeroed/2, %cx		# clear gdt + offset, %ds, limits
   22.67 ++	rep				# don't worry about cld
   22.68 ++	stosw				# already done above
   22.69 ++	popw	%bx			# offset = 0
   22.70 ++	popw	%ds			# %ds = 0
   22.71 ++	popw	%gs			# %gs = 0
   22.72 ++
   22.73 ++	movb	setup_sects+0x7C00, %al	# read bootsector + setup (%ds = 0)
   22.74 ++	incw	%ax
   22.75 ++
   22.76 ++	pushw	%es
   22.77 ++	pushw	%di			# %ds:%bx+0x78 is parameter table address
   22.78 ++	ldsw	0x78(%bx), %si		# %ds:%si is source
   22.79 ++	movb	$6, %cl			# copy 12 bytes
   22.80 ++	rep				# don't worry about cld
   22.81 ++	movsw				# already done above
   22.82 ++	popl	%gs:0x78(%bx)		# update parameter table address
   22.83 ++	pushw	%es
   22.84 ++	popw	%ds			# now %ds = %es = %ss = INITSEG
   22.85 ++	movb	$63, 0x4-12(%di)	# patch sector count, %di = stacktop
   22.86 ++	cli
   22.87 ++
   22.88 ++	xchg	%ax, %di		# sector count
   22.89 ++	popw	%ax			# limits = 0
   22.90 ++	incw	%cx			# cylinder 0, sector 1
   22.91 ++	call	read_first_sectors	# read setup
   22.92 ++
   22.93 ++offset_version	= 0xE
   22.94 ++	movw	$0x200,%si
   22.95 ++	addw	offset_version(%si),%si	# starting protocol 2.00, Kernel 1.3.73
   22.96 ++	call	putstr			# show which kernel we are loading
   22.97 ++
   22.98 ++# The cmdline can be entered and modifed at boot time.
   22.99 ++# Only characters before the cursor are passed to the kernel.
  22.100 ++	popw	%bx			# clear %bx
  22.101 ++	orw	cmd_line_ptr, %bx
  22.102 ++	jz	nocmdline
  22.103 ++	pushw	%bx
  22.104 ++	incw	%di
  22.105 ++	call	read_sectors
  22.106 ++	popw	%si
  22.107 ++	call	putstr
  22.108 ++#ifdef	EDIT_CMDLINE
  22.109 ++cmdlp:
  22.110 ++	movb	$0x20, %al		# clear end of line
  22.111 ++	int	$0x10			#  with Space
  22.112 ++	movb	$8, %al			#   and BackSpace
  22.113 ++	int	$0x10
  22.114 ++	decw	%si
  22.115 ++cmdget:
  22.116 ++	call	wait4key
  22.117 ++	cmpb	$8, %al			# BackSpace ?
  22.118 ++	je	cmdbs
  22.119 ++	movb	%al, (%si)		# store char
  22.120 ++	lodsw				# %si += 2
  22.121 ++cmdbs:
  22.122 ++#if 1
  22.123 ++	cmpw	%si,cmd_line_ptr
  22.124 ++	je	cmdget
  22.125 ++#endif
  22.126 ++	call	putc			# set %ah and %bx
  22.127 ++	cmpb	$10, %al		# Enter ?
  22.128 ++	jne	cmdlp
  22.129 ++	movb	%bh,-2(%si)		# set end of string and remove CR
  22.130 ++endcmdline:
  22.131 ++#endif
  22.132 ++nocmdline:
  22.133 + 
  22.134 +-	# Normalize the start address
  22.135 +-	ljmp	$BOOTSEG, $start2
  22.136 +-
  22.137 +-start2:
  22.138 +-	movw	%cs, %ax
  22.139 +-	movw	%ax, %ds
  22.140 +-	movw	%ax, %es
  22.141 +-	movw	%ax, %ss
  22.142 +-	xorw	%sp, %sp
  22.143 +-	sti
  22.144 +-	cld
  22.145 +-
  22.146 +-	movw	$bugger_off_msg, %si
  22.147 ++# This routine loads the system at address SYSSEG, making sure
  22.148 ++# no 64kB boundaries are crossed. We try to load it as fast as
  22.149 ++# possible, loading whole tracks whenever we can.
  22.150 ++
  22.151 ++ramdisk_image	=	0x0218
  22.152 ++ramdisk_size	=	0x021C
  22.153 ++	movw	%sp, %si		# for bootsect_gdt
  22.154 ++	decw	16(%si)			# bootsect_src = 64Kb
  22.155 ++	decw	24(%si)			# bootsect_dst = 64Kb
  22.156 ++	movw	$syssize, %di
  22.157 ++type_of_loader	=	0x210
  22.158 ++loadflags	=	0x211
  22.159 ++heap_end_ptr	=	0x224
  22.160 ++ksyssize	= 	500
  22.161 ++	orw	$0x80FF, type_of_loader-ksyssize(%di) # loader type = 0xFF
  22.162 ++	movw	$stacktop-0x200, heap_end_ptr-ksyssize(%di)
  22.163 ++	movb	$0x10, %al		# destination = 0x100000
  22.164 ++	movb	$5, %cl
  22.165 ++initrdlp:
  22.166 ++	decw	%ax
  22.167 ++	movb	$0x93,%ah
  22.168 ++	movw	%ax, 28(%si)		# bootsect_dst_base+2
  22.169 ++	movb	$(SYSSEG/4096), %al	# source = SYSSEG
  22.170 ++	movw	%ax, 20(%si)		# bootsect_src_base+2
  22.171 ++	cbw
  22.172 ++	cwde
  22.173 ++	shlw	%cl, %ax
  22.174 ++	decw	%ax
  22.175 ++	addl	(%di),%eax
  22.176 ++	shrl	%cl, %eax
  22.177 ++syslp:
  22.178 ++	pushw	$SYSSEG
  22.179 ++	popw	%es
  22.180 ++	movw	$128,%di		# 64Kb
  22.181 ++	subw	%di, %ax		# max 32M > int 15 limit
  22.182 ++	pushf
  22.183 ++	jnc	not_last
  22.184 ++	addw	%ax, %di
  22.185 ++not_last:
  22.186 ++	xorw	%bx, %bx		# clear %bx
  22.187 ++	pushw	%ax
  22.188 ++#if defined(SHOW_REGS)
  22.189 ++	pushw	%si
  22.190 ++	call	read_sectors
  22.191 ++	popw	%si
  22.192 ++#else
  22.193 ++	call	read_sectors
  22.194 ++#endif
  22.195 ++	movw	$0x8000, %cx		# full 64K
  22.196 ++	movb	$0x87, %ah
  22.197 ++	incb	28(%si)			# bootsect_dst_base+2
  22.198 ++	int	$0x15			# max 16M
  22.199 ++	popw	%ax
  22.200 ++	popf
  22.201 ++	ja	syslp
  22.202 ++	movw	ramdisk_image+2,%ax
  22.203 ++	movw	$ramdisk_size,%di
  22.204 ++	movb	$9, %cl
  22.205 ++	cmpb	%al,28(%si)
  22.206 ++	jb	initrdlp
  22.207 ++
  22.208 ++# This procedure turns off the floppy drive motor, so
  22.209 ++# that we enter the kernel in a known state, and
  22.210 ++# don't have to worry about it later.
  22.211 ++
  22.212 ++#if 1
  22.213 ++kill_motor:
  22.214 ++	xchgw	%ax, %bx		# reset FDC
  22.215 ++	int	$0x13
  22.216 ++#else
  22.217 ++kill_motor:
  22.218 ++	movw	$0x3f2, %dx
  22.219 ++	xchgw	%ax, %bx
  22.220 ++	outb	%al, %dx
  22.221 ++#endif
  22.222 + 
  22.223 +-msg_loop:
  22.224 +-	lodsb
  22.225 +-	andb	%al, %al
  22.226 +-	jz	bs_die
  22.227 +-	movb	$0xe, %ah
  22.228 +-	movw	$7, %bx
  22.229 ++# After that (everything loaded), we jump to the setup-routine
  22.230 ++# loaded directly after the bootblock:
  22.231 ++# Segments are as follows: %ds = %ss = INITSEG
  22.232 ++
  22.233 ++	ljmp	$SETUPSEG, $0
  22.234 ++
  22.235 ++# read_sectors reads %di sectors into %es:0 buffer.
  22.236 ++# %es:0 is updated to the next memory location.
  22.237 ++# First, sectors are read sector by sector until
  22.238 ++# sector per track count is known. Then they are
  22.239 ++# read track by track.
  22.240 ++# Assume no error on first track.
  22.241 ++
  22.242 ++#define FLOPPY_CYLINDERS	80	/* 80 cylinders minimum */
  22.243 ++#define FLOPPY_HEADS		2	/* 2 heads minimum */
  22.244 ++#define FLOPPY_SECTORS		18	/* 18 sectors minimum */
  22.245 ++
  22.246 ++#ifdef SHOW_REGS
  22.247 ++print_loop:
  22.248 ++	movb	$0x6 + 'A' - 1, %al
  22.249 ++	subb	%cl, %al
  22.250 ++	movw	$regs, %si		# caller %si is saved
  22.251 ++	call	putcs			# putc(%al) + putstr(%si)
  22.252 ++# it will print out all of the registers.
  22.253 ++	popw	%bp			# load word into %si
  22.254 ++	jmp	print_all		# print %bp (status)
  22.255 ++#endif
  22.256 ++check_limits:
  22.257 ++#ifndef SHOW_REGS
  22.258 ++	popw	%dx
  22.259 ++#endif
  22.260 ++	cmpb	$FLOPPY_SECTORS+1, %cl	# 18 sectors minimum
  22.261 ++	jb	check_head
  22.262 ++        cmpb    %al, %cl		# max sector known ?
  22.263 ++        ja	next_head		#   no -> store it
  22.264 ++check_head:
  22.265 ++	cmpb	$FLOPPY_HEADS, %dh	# 2 heads minimum
  22.266 ++	jb	check_cylinder
  22.267 ++        cmpb    %ah, %dh		# max head known ?
  22.268 ++        ja	next_cylinder		#   no -> store it
  22.269 ++check_cylinder:
  22.270 ++	pushaw
  22.271 ++#ifdef SHOW_REGS
  22.272 ++	cmpw	$0x600,%bp		# disk changed ?
  22.273 ++	je	reset_floppy
  22.274 ++	pushw	%es			# print %es (named EX)
  22.275 ++	pushw	%dx			# print %dx
  22.276 ++	pushw	%cx			# print %cx
  22.277 ++	pushw	%bx			# print %bx
  22.278 ++	xchgw	%ax, %si
  22.279 ++	movb	$2,%ah
  22.280 ++	pushw	%ax			# print %ax
  22.281 ++	movb	$6,%cl
  22.282 ++print_all:
  22.283 ++	movb	$4, %ch			# 4 hex digits
  22.284 ++print_digit:
  22.285 ++	rolw	$4, %bp			# rotate to use low 4 bits
  22.286 ++	movb	$0x0f, %al
  22.287 ++	andw	%bp, %ax		# %al = mask for nybble
  22.288 ++	addb	$0x90, %al		# convert %al to ascii hex
  22.289 ++	daa				# in only four instructions!
  22.290 ++	adcb	$0x40, %al
  22.291 ++	daa
  22.292 ++	call	putc			# set %ah and %bx
  22.293 ++	decb	%ch
  22.294 ++	jnz	print_digit
  22.295 ++	movb	$0x20, %al		# SPACE
  22.296 + 	int	$0x10
  22.297 +-	jmp	msg_loop
  22.298 +-
  22.299 +-bs_die:
  22.300 +-	# Allow the user to press a key, then reboot
  22.301 +-	xorw	%ax, %ax
  22.302 ++	loop	print_loop
  22.303 ++	call	wait
  22.304 ++	cbw				# %ah = 0
  22.305 ++reset_floppy:
  22.306 ++#else
  22.307 ++	cbw				# %ah = 0
  22.308 ++#endif
  22.309 ++        int     $0x13			# reset controler
  22.310 ++	popaw
  22.311 ++read_sectorslp:
  22.312 ++	pushw	%dx			# some bios break dx...
  22.313 ++        pushw   %ax			# limits
  22.314 ++	subb	%cl, %al		# sectors remaining in track
  22.315 ++	ja	tolastsect
  22.316 ++	movb	$1, %al			# 1 sector mini
  22.317 ++tolastsect:
  22.318 ++	cbw
  22.319 ++	cmpw	%di, %ax
  22.320 ++	jb	more1trk
  22.321 ++	movw	%di, %ax		# sectors to read
  22.322 ++more1trk:
  22.323 ++	pushw	%ax			# save context
  22.324 ++	movb	$2, %ah			# cmd: read chs
  22.325 ++        int     $0x13
  22.326 ++#ifdef SHOW_REGS
  22.327 ++	xchgw	%ax, %bp		# status
  22.328 ++#endif
  22.329 ++# ifdef SHOW_REGS
  22.330 ++	popw	%si			# save %ax
  22.331 ++        popw    %ax			# limits
  22.332 ++	popw	%dx
  22.333 ++# else
  22.334 ++	popw	%dx			# save %ax
  22.335 ++        popw    %ax			# limits
  22.336 ++# endif
  22.337 ++	jc	check_limits
  22.338 ++	xchgw	%ax, %bp
  22.339 ++# ifdef SHOW_REGS
  22.340 ++update_regs:
  22.341 ++	incw	%cx			# next sector
  22.342 ++	movw	%cx, %fs
  22.343 ++	addb	$2,%bh			# next location
  22.344 ++	decw	%di			# update sector counter
  22.345 ++	jz	putcdot
  22.346 ++	decw	%si
  22.347 ++	jnz	update_regs
  22.348 ++# else
  22.349 ++	addw	%dx,%cx			# next sector
  22.350 ++	addb	%dl,%bh
  22.351 ++	addb	%dl,%bh			# next location
  22.352 ++	subw	%dx,%di			# update sector counter
  22.353 ++	popw	%dx
  22.354 ++	jz	putcdot
  22.355 ++# endif
  22.356 ++read_sectors:
  22.357 ++	movw	%fs, %cx
  22.358 ++	xchgw	%ax, %bp
  22.359 ++        cmpb    %al,%cl			# reach sector limit ?
  22.360 ++        jne     bdendlp
  22.361 ++next_head:
  22.362 ++        movb    %cl,%al
  22.363 ++        incb    %dh			# next head
  22.364 ++        movb    $1,%cl			# first sector
  22.365 ++        cmpb    %ah, %dh		# reach head limit ?
  22.366 ++        jne     bdendlp
  22.367 ++next_cylinder:
  22.368 ++        movb    %dh,%ah
  22.369 ++# NOTE : support 256 cylinders max
  22.370 ++        incb    %ch			# next cylinder
  22.371 ++read_first_sectors:
  22.372 ++        movb    $0,%dh			# first head
  22.373 ++cylinder_count	= 496
  22.374 ++        cmpb    $FLOPPY_CYLINDERS,%ch	# reach cylinder limit ?
  22.375 ++        jb	bdendlp
  22.376 ++	cmpb	cylinder_count, %ch
  22.377 ++        jb	bdendlp
  22.378 ++next_floppy:
  22.379 ++	movb	$0,%ch			# first cylinder
  22.380 ++	pushaw
  22.381 ++	movw	$swap_floppy,%si
  22.382 ++	incb	12(%si)
  22.383 ++	pushw	%bx
  22.384 ++	call	putstr
  22.385 ++	popw	%bx
  22.386 ++waitfloppy:
  22.387 ++	call	wait
  22.388 ++	jne	waitfloppydone
  22.389 ++	pushw	%dx			# some bios break dx...
  22.390 ++	cbw
  22.391 ++	int	$0x13			# reset FDC
  22.392 ++	movw	$0x201,%ax
  22.393 ++#	cwd
  22.394 ++#	movw	$1,%cx
  22.395 ++	int	$0x13			# read first sector
  22.396 ++	popw	%dx
  22.397 ++	rclb	$1,%ah			# floppy changed 06=>0D no error 00
  22.398 ++	cmpb	-2(%si), %ah		# 0D then 00
  22.399 ++	jne	waitfloppy		# no => try again
  22.400 ++	incw	%si
  22.401 ++	orb	%ah,%ah			# was 00 ?
  22.402 ++	jne	waitfloppy
  22.403 ++waitfloppydone:
  22.404 ++	popaw
  22.405 ++bdendlp:
  22.406 ++        jmp	read_sectorslp
  22.407 ++
  22.408 ++putcdot:
  22.409 ++	pushw	%ss
  22.410 ++	popw	%es			# restore es
  22.411 ++	movb	$0x2e+3, %al 		# loading... message 2e = .
  22.412 ++putclf:
  22.413 ++	subb	$3, %al
  22.414 ++putc:
  22.415 ++	movb	$0xe, %ah
  22.416 ++	movw	$7, %bx			#   one dot each 64k
  22.417 ++ 	int	$0x10
  22.418 ++	cmp	$0xd, %al		# CR ?
  22.419 ++	je	putclf
  22.420 ++	ret
  22.421 ++
  22.422 ++putstr:
  22.423 ++	movb	$0xd, %al		# CR
  22.424 ++putcs:
  22.425 ++	call	putc
  22.426 ++	lodsb
  22.427 ++	orb	%al,%al			# end of string is \0
  22.428 ++	jnz	putcs
  22.429 ++	ret
  22.430 ++
  22.431 ++clock	= 0x46C
  22.432 ++wait:
  22.433 ++wait4key:
  22.434 ++	movw	$clock, %di
  22.435 ++#define DELAY 5
  22.436 ++	movb	$(DELAY*182)/10,%cl
  22.437 ++	addb	%gs:(%di),%cl
  22.438 ++waitkbd:
  22.439 ++	movw	$0x10D, %ax		# test keyboard, timeout => CR
  22.440 ++	cmpb	%gs:(%di),%cl
  22.441 ++	je	waitdone
  22.442 + 	int	$0x16
  22.443 +-	int	$0x19
  22.444 ++	jz	waitkbd
  22.445 ++	cbw
  22.446 ++	int	$0x16			# eat char
  22.447 ++	movw	%di, %gs		# disable timeout
  22.448 ++	incw	%di			# clear Z
  22.449 ++waitdone:
  22.450 ++	ret
  22.451 + 
  22.452 +-	# int 0x19 should never return.  In case it does anyway,
  22.453 +-	# invoke the BIOS reset code...
  22.454 +-	ljmp	$0xf000,$0xfff0
  22.455 +-
  22.456 +-	.section ".bsdata", "a"
  22.457 +-bugger_off_msg:
  22.458 +-	.ascii	"Direct booting from floppy is no longer supported.\r\n"
  22.459 +-	.ascii	"Please use a boot loader program instead.\r\n"
  22.460 +-	.ascii	"\n"
  22.461 +-	.ascii	"Remove disk and press any key to reboot . . .\r\n"
  22.462 +-	.byte	0
  22.463 ++#ifdef SHOW_REGS
  22.464 ++regs:		.asciz	"X:"
  22.465 ++#endif
  22.466 + 
  22.467 ++swap_floppy:	.ascii	"Insert disk 1"
  22.468 ++		.ascii	"."
  22.469 ++		.byte	7,13,0
  22.470 + 
  22.471 + 	# Kernel attributes; used by setup.  This is part 1 of the
  22.472 + 	# header, from the old boot sector.
    23.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    23.2 +++ b/kernel-modular/stuff/linux-squashfs-lzma-2.6.34.u	Tue Feb 01 09:37:33 2011 +0100
    23.3 @@ -0,0 +1,649 @@
    23.4 +--- linux-2.6.30.6/include/linux/decompress/bunzip2_mm.h
    23.5 ++++ linux-2.6.30.6/include/linux/decompress/bunzip2_mm.h
    23.6 +@@ -0,0 +1,13 @@
    23.7 ++#ifndef BUNZIP2_MM_H
    23.8 ++#define BUNZIP2_MM_H
    23.9 ++
   23.10 ++#ifdef STATIC
   23.11 ++/* Code active when included from pre-boot environment: */
   23.12 ++#define INIT
   23.13 ++#else
   23.14 ++/* Compile for initramfs/initrd code only */
   23.15 ++#define INIT __init
   23.16 ++static void(*error)(char *m);
   23.17 ++#endif
   23.18 ++
   23.19 ++#endif
   23.20 +
   23.21 +--- linux-2.6.30.6/include/linux/decompress/inflate_mm.h
   23.22 ++++ linux-2.6.30.6/include/linux/decompress/inflate_mm.h
   23.23 +@@ -0,0 +1,13 @@
   23.24 ++#ifndef INFLATE_MM_H
   23.25 ++#define INFLATE_MM_H
   23.26 ++
   23.27 ++#ifdef STATIC
   23.28 ++/* Code active when included from pre-boot environment: */
   23.29 ++#define INIT
   23.30 ++#else
   23.31 ++/* Compile for initramfs/initrd code only */
   23.32 ++#define INIT __init
   23.33 ++static void(*error)(char *m);
   23.34 ++#endif
   23.35 ++
   23.36 ++#endif
   23.37 +
   23.38 +#--- linux-2.6.30.6/include/linux/decompress/mm.h
   23.39 +#+++ linux-2.6.30.6/include/linux/decompress/mm.h
   23.40 +@@ -63,8 +63,6 @@
   23.41 + 
   23.42 + #define set_error_fn(x)
   23.43 + 
   23.44 +-#define INIT
   23.45 +-
   23.46 + #else /* STATIC */
   23.47 + 
   23.48 + /* Code active when compiled standalone for use when loading ramdisk: */
   23.49 +@@ -84,10 +82,8 @@
   23.50 + #define large_malloc(a) vmalloc(a)
   23.51 + #define large_free(a) vfree(a)
   23.52 + 
   23.53 +-static void(*error)(char *m);
   23.54 + #define set_error_fn(x) error = x;
   23.55 + 
   23.56 +-#define INIT __init
   23.57 + #define STATIC
   23.58 + 
   23.59 + #include <linux/init.h>
   23.60 +
   23.61 +--- linux-2.6.30.6/include/linux/decompress/unlzma_mm.h
   23.62 ++++ linux-2.6.30.6/include/linux/decompress/unlzma_mm.h
   23.63 +@@ -0,0 +1,20 @@
   23.64 ++#ifndef UNLZMA_MM_H
   23.65 ++#define UNLZMA_MM_H
   23.66 ++
   23.67 ++#ifdef STATIC
   23.68 ++
   23.69 ++/* Code active when included from pre-boot environment: */
   23.70 ++#define INIT
   23.71 ++
   23.72 ++#elif defined(CONFIG_DECOMPRESS_LZMA_NEEDED)
   23.73 ++
   23.74 ++/* Make it available to non initramfs/initrd code */
   23.75 ++#define INIT
   23.76 ++#include <linux/module.h>
   23.77 ++#else
   23.78 ++
   23.79 ++/* Compile for initramfs/initrd code only */
   23.80 ++#define INIT __init
   23.81 ++#endif
   23.82 ++
   23.83 ++#endif
   23.84 +
   23.85 +--- linux-2.6.30.6/lib/Kconfig
   23.86 ++++ linux-2.6.30.6/lib/Kconfig
   23.87 +@@ -117,6 +117,9 @@
   23.88 + config DECOMPRESS_LZMA
   23.89 + 	tristate
   23.90 + 
   23.91 ++config DECOMPRESS_LZMA_NEEDED
   23.92 ++	 boolean
   23.93 ++
   23.94 + config DECOMPRESS_LZO
   23.95 + 	select LZO_DECOMPRESS
   23.96 + 	tristate
   23.97 +
   23.98 +--- linux-2.6.30.6/lib/decompress_bunzip2.c
   23.99 ++++ linux-2.6.30.6/lib/decompress_bunzip2.c
  23.100 +@@ -52,6 +52,7 @@
  23.101 + #include <linux/slab.h>
  23.102 + #endif /* STATIC */
  23.103 + 
  23.104 ++#include <linux/decompress/bunzip2_mm.h>
  23.105 + #include <linux/decompress/mm.h>
  23.106 + 
  23.107 + #ifndef INT_MAX
  23.108 +
  23.109 +--- linux-2.6.30.6/lib/decompress_inflate.c
  23.110 ++++ linux-2.6.30.6/lib/decompress_inflate.c
  23.111 +@@ -23,6 +23,7 @@
  23.112 + 
  23.113 + #endif /* STATIC */
  23.114 + 
  23.115 ++#include <linux/decompress/inflate_mm.h>
  23.116 + #include <linux/decompress/mm.h>
  23.117 + 
  23.118 + #define GZIP_IOBUF_SIZE (16*1024)
  23.119 +
  23.120 +--- linux-2.6.30.6/lib/decompress_unlzma.c
  23.121 ++++ linux-2.6.30.6/lib/decompress_unlzma.c
  23.122 +@@ -36,6 +36,7 @@
  23.123 + #include <linux/slab.h>
  23.124 + #endif /* STATIC */
  23.125 + 
  23.126 ++#include <linux/decompress/unlzma_mm.h>
  23.127 + #include <linux/decompress/mm.h>
  23.128 + 
  23.129 + #define	MIN(a, b) (((a) < (b)) ? (a) : (b))
  23.130 +@@ -88,7 +89,7 @@
  23.131 + }
  23.132 + 
  23.133 + /* Called twice: once at startup and once in rc_normalize() */
  23.134 +-static void INIT rc_read(struct rc *rc)
  23.135 ++static void INIT rc_read(struct rc *rc, void(*error)(char *x))
  23.136 + {
  23.137 + 	rc->buffer_size = rc->fill((char *)rc->buffer, LZMA_IOBUF_SIZE);
  23.138 + 	if (rc->buffer_size <= 0)
  23.139 +@@ -115,13 +116,13 @@
  23.140 + 	rc->range = 0xFFFFFFFF;
  23.141 + }
  23.142 + 
  23.143 +-static inline void INIT rc_init_code(struct rc *rc)
  23.144 ++static inline void INIT rc_init_code(struct rc *rc, void(*error)(char *x))
  23.145 + {
  23.146 + 	int i;
  23.147 + 
  23.148 + 	for (i = 0; i < 5; i++) {
  23.149 + 		if (rc->ptr >= rc->buffer_end)
  23.150 +-			rc_read(rc);
  23.151 ++			rc_read(rc, error);
  23.152 + 		rc->code = (rc->code << 8) | *rc->ptr++;
  23.153 + 	}
  23.154 + }
  23.155 +@@ -134,32 +135,33 @@
  23.156 + }
  23.157 + 
  23.158 + /* Called twice, but one callsite is in inline'd rc_is_bit_0_helper() */
  23.159 +-static void INIT rc_do_normalize(struct rc *rc)
  23.160 ++static void INIT rc_do_normalize(struct rc *rc, void(*error)(char *x))
  23.161 + {
  23.162 + 	if (rc->ptr >= rc->buffer_end)
  23.163 +-		rc_read(rc);
  23.164 ++		rc_read(rc, error);
  23.165 + 	rc->range <<= 8;
  23.166 + 	rc->code = (rc->code << 8) | *rc->ptr++;
  23.167 + }
  23.168 +-static inline void INIT rc_normalize(struct rc *rc)
  23.169 ++static inline void INIT rc_normalize(struct rc *rc, void(*error)(char *x))
  23.170 + {
  23.171 + 	if (rc->range < (1 << RC_TOP_BITS))
  23.172 +-		rc_do_normalize(rc);
  23.173 ++		rc_do_normalize(rc, error);
  23.174 + }
  23.175 + 
  23.176 + /* Called 9 times */
  23.177 + /* Why rc_is_bit_0_helper exists?
  23.178 +  *Because we want to always expose (rc->code < rc->bound) to optimizer
  23.179 +  */
  23.180 +-static inline uint32_t INIT rc_is_bit_0_helper(struct rc *rc, uint16_t *p)
  23.181 ++static inline uint32_t INIT rc_is_bit_0_helper(struct rc *rc, uint16_t *p,
  23.182 ++					       void (*error)(char *x))
  23.183 + {
  23.184 +-	rc_normalize(rc);
  23.185 ++	rc_normalize(rc, error);
  23.186 + 	rc->bound = *p * (rc->range >> RC_MODEL_TOTAL_BITS);
  23.187 + 	return rc->bound;
  23.188 + }
  23.189 +-static inline int INIT rc_is_bit_0(struct rc *rc, uint16_t *p)
  23.190 ++static inline int INIT rc_is_bit_0(struct rc *rc, uint16_t *p, void(*error)(char *x))
  23.191 + {
  23.192 +-	uint32_t t = rc_is_bit_0_helper(rc, p);
  23.193 ++	uint32_t t = rc_is_bit_0_helper(rc, p, error);
  23.194 + 	return rc->code < t;
  23.195 + }
  23.196 + 
  23.197 +@@ -177,9 +179,9 @@
  23.198 + }
  23.199 + 
  23.200 + /* Called 4 times in unlzma loop */
  23.201 +-static int INIT rc_get_bit(struct rc *rc, uint16_t *p, int *symbol)
  23.202 ++static int INIT rc_get_bit(struct rc *rc, uint16_t *p, int *symbol, void(*error)(char *x))
  23.203 + {
  23.204 +-	if (rc_is_bit_0(rc, p)) {
  23.205 ++	if (rc_is_bit_0(rc, p, error)) {
  23.206 + 		rc_update_bit_0(rc, p);
  23.207 + 		*symbol *= 2;
  23.208 + 		return 0;
  23.209 +@@ -191,9 +193,9 @@
  23.210 + }
  23.211 + 
  23.212 + /* Called once */
  23.213 +-static inline int INIT rc_direct_bit(struct rc *rc)
  23.214 ++static inline int INIT rc_direct_bit(struct rc *rc , void(*error)(char *x))
  23.215 + {
  23.216 +-	rc_normalize(rc);
  23.217 ++	rc_normalize(rc, error);
  23.218 + 	rc->range >>= 1;
  23.219 + 	if (rc->code >= rc->range) {
  23.220 + 		rc->code -= rc->range;
  23.221 +@@ -204,13 +206,14 @@
  23.222 + 
  23.223 + /* Called twice */
  23.224 + static inline void INIT
  23.225 +-rc_bit_tree_decode(struct rc *rc, uint16_t *p, int num_levels, int *symbol)
  23.226 ++rc_bit_tree_decode(struct rc *rc, uint16_t *p, int num_levels, int *symbol,
  23.227 ++							void(*error)(char *x))
  23.228 + {
  23.229 + 	int i = num_levels;
  23.230 + 
  23.231 + 	*symbol = 1;
  23.232 + 	while (i--)
  23.233 +-		rc_get_bit(rc, p + *symbol, symbol);
  23.234 ++		rc_get_bit(rc, p + *symbol, symbol, error);
  23.235 + 	*symbol -= 1 << num_levels;
  23.236 + }
  23.237 + 
  23.238 +@@ -406,7 +409,8 @@
  23.239 + static inline void INIT process_bit0(struct writer *wr, struct rc *rc,
  23.240 + 				     struct cstate *cst, uint16_t *p,
  23.241 + 				     int pos_state, uint16_t *prob,
  23.242 +-				     int lc, uint32_t literal_pos_mask) {
  23.243 ++				     int lc, uint32_t literal_pos_mask,
  23.244 ++				     void(*error)(char *x)) {
  23.245 + 	int mi = 1;
  23.246 + 	static const int state[LZMA_NUM_STATES] = 
  23.247 + 		{ 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 4, 5 };
  23.248 +@@ -427,7 +431,7 @@
  23.249 + 			match_byte <<= 1;
  23.250 + 			bit = match_byte & 0x100;
  23.251 + 			prob_lit = prob + 0x100 + bit + mi;
  23.252 +-			if (rc_get_bit(rc, prob_lit, &mi)) {
  23.253 ++			if (rc_get_bit(rc, prob_lit, &mi, error)) {
  23.254 + 				if (!bit)
  23.255 + 					break;
  23.256 + 			} else {
  23.257 +@@ -438,7 +442,7 @@
  23.258 + 	}
  23.259 + 	while (mi < 0x100) {
  23.260 + 		uint16_t *prob_lit = prob + mi;
  23.261 +-		rc_get_bit(rc, prob_lit, &mi);
  23.262 ++		rc_get_bit(rc, prob_lit, &mi, error);
  23.263 + 	}
  23.264 + 	write_byte(wr, mi);
  23.265 + 	cst->state = state[cst->state];
  23.266 +@@ -446,7 +453,8 @@
  23.267 + 
  23.268 + static inline void INIT process_bit1(struct writer *wr, struct rc *rc,
  23.269 + 					    struct cstate *cst, uint16_t *p,
  23.270 +-					    int pos_state, uint16_t *prob) {
  23.271 ++					    int pos_state, uint16_t *prob,
  23.272 ++					    void(*error)(char *x)) {
  23.273 + 	int offset;
  23.274 + 	uint16_t *prob_len;
  23.275 + 	int num_bits;
  23.276 +@@ -454,7 +459,7 @@
  23.277 + 
  23.278 + 	rc_update_bit_1(rc, prob);
  23.279 + 	prob = p + LZMA_IS_REP + cst->state;
  23.280 +-	if (rc_is_bit_0(rc, prob)) {
  23.281 ++	if (rc_is_bit_0(rc, prob, error)) {
  23.282 + 		rc_update_bit_0(rc, prob);
  23.283 + 		cst->rep3 = cst->rep2;
  23.284 + 		cst->rep2 = cst->rep1;
  23.285 +@@ -464,13 +469,13 @@
  23.286 + 	} else {
  23.287 + 		rc_update_bit_1(rc, prob);
  23.288 + 		prob += LZMA_IS_REP_G0 - LZMA_IS_REP;
  23.289 +-		if (rc_is_bit_0(rc, prob)) {
  23.290 ++		if (rc_is_bit_0(rc, prob, error)) {
  23.291 + 			rc_update_bit_0(rc, prob);
  23.292 + 			prob = (p + LZMA_IS_REP_0_LONG
  23.293 + 				+ (cst->state <<
  23.294 + 				   LZMA_NUM_POS_BITS_MAX) +
  23.295 + 				pos_state);
  23.296 +-			if (rc_is_bit_0(rc, prob)) {
  23.297 ++			if (rc_is_bit_0(rc, prob, error)) {
  23.298 + 				rc_update_bit_0(rc, prob);
  23.299 + 
  23.300 + 				cst->state = cst->state < LZMA_NUM_LIT_STATES ?
  23.301 +@@ -485,13 +490,13 @@
  23.302 + 
  23.303 + 			rc_update_bit_1(rc, prob);
  23.304 + 			prob += LZMA_IS_REP_G1 - LZMA_IS_REP_G0;
  23.305 +-			if (rc_is_bit_0(rc, prob)) {
  23.306 ++			if (rc_is_bit_0(rc, prob, error)) {
  23.307 + 				rc_update_bit_0(rc, prob);
  23.308 + 				distance = cst->rep1;
  23.309 + 			} else {
  23.310 + 				rc_update_bit_1(rc, prob);
  23.311 + 				prob += LZMA_IS_REP_G2 - LZMA_IS_REP_G1;
  23.312 +-				if (rc_is_bit_0(rc, prob)) {
  23.313 ++				if (rc_is_bit_0(rc, prob, error)) {
  23.314 + 					rc_update_bit_0(rc, prob);
  23.315 + 					distance = cst->rep2;
  23.316 + 				} else {
  23.317 +@@ -509,7 +514,7 @@
  23.318 + 	}
  23.319 + 
  23.320 + 	prob_len = prob + LZMA_LEN_CHOICE;
  23.321 +-	if (rc_is_bit_0(rc, prob_len)) {
  23.322 ++	if (rc_is_bit_0(rc, prob_len, error)) {
  23.323 + 		rc_update_bit_0(rc, prob_len);
  23.324 + 		prob_len += LZMA_LEN_LOW - LZMA_LEN_CHOICE
  23.325 + 			    + (pos_state <<
  23.326 +@@ -519,7 +524,7 @@
  23.327 + 	} else {
  23.328 + 		rc_update_bit_1(rc, prob_len);
  23.329 + 		prob_len += LZMA_LEN_CHOICE_2 - LZMA_LEN_CHOICE;
  23.330 +-		if (rc_is_bit_0(rc, prob_len)) {
  23.331 ++		if (rc_is_bit_0(rc, prob_len, error)) {
  23.332 + 			rc_update_bit_0(rc, prob_len);
  23.333 + 			prob_len += LZMA_LEN_MID - LZMA_LEN_CHOICE_2
  23.334 + 				    + (pos_state <<
  23.335 +@@ -535,7 +540,7 @@
  23.336 + 		}
  23.337 + 	}
  23.338 + 
  23.339 +-	rc_bit_tree_decode(rc, prob_len, num_bits, &len);
  23.340 ++	rc_bit_tree_decode(rc, prob_len, num_bits, &len, error);
  23.341 + 	len += offset;
  23.342 + 
  23.343 + 	if (cst->state < 4) {
  23.344 +@@ -550,7 +555,7 @@
  23.345 + 			 << LZMA_NUM_POS_SLOT_BITS);
  23.346 + 		rc_bit_tree_decode(rc, prob,
  23.347 + 				   LZMA_NUM_POS_SLOT_BITS,
  23.348 +-				   &pos_slot);
  23.349 ++				   &pos_slot, error);
  23.350 + 		if (pos_slot >= LZMA_START_POS_MODEL_INDEX) {
  23.351 + 			int i, mi;
  23.352 + 			num_bits = (pos_slot >> 1) - 1;
  23.353 +@@ -563,7 +568,7 @@
  23.354 + 				num_bits -= LZMA_NUM_ALIGN_BITS;
  23.355 + 				while (num_bits--)
  23.356 + 					cst->rep0 = (cst->rep0 << 1) |
  23.357 +-						rc_direct_bit(rc);
  23.358 ++						rc_direct_bit(rc, error);
  23.359 + 				prob = p + LZMA_ALIGN;
  23.360 + 				cst->rep0 <<= LZMA_NUM_ALIGN_BITS;
  23.361 + 				num_bits = LZMA_NUM_ALIGN_BITS;
  23.362 +@@ -571,7 +576,7 @@
  23.363 + 			i = 1;
  23.364 + 			mi = 1;
  23.365 + 			while (num_bits--) {
  23.366 +-				if (rc_get_bit(rc, prob + mi, &mi))
  23.367 ++				if (rc_get_bit(rc, prob + mi, &mi, error))
  23.368 + 					cst->rep0 |= i;
  23.369 + 				i <<= 1;
  23.370 + 			}
  23.371 +@@ -588,12 +593,12 @@
  23.372 + 
  23.373 + 
  23.374 + 
  23.375 +-STATIC inline int INIT unlzma(unsigned char *buf, int in_len,
  23.376 ++STATIC int INIT unlzma(unsigned char *buf, int in_len,
  23.377 + 			      int(*fill)(void*, unsigned int),
  23.378 + 			      int(*flush)(void*, unsigned int),
  23.379 + 			      unsigned char *output,
  23.380 + 			      int *posp,
  23.381 +-			      void(*error_fn)(char *x)
  23.382 ++			      void(*error)(char *x)
  23.383 + 	)
  23.384 + {
  23.385 + 	extern int cpio_flush_buffer(void*, unsigned int);
  23.386 +@@ -610,7 +615,6 @@
  23.387 + 	unsigned char *inbuf;
  23.388 + 	int ret = -1;
  23.389 + 
  23.390 +-	set_error_fn(error_fn);
  23.391 + 
  23.392 + 	if (buf)
  23.393 + 		inbuf = buf;
  23.394 +@@ -638,7 +642,7 @@
  23.395 + 
  23.396 + 	for (i = 0; i < sizeof(header); i++) {
  23.397 + 		if (rc.ptr >= rc.buffer_end)
  23.398 +-			rc_read(&rc);
  23.399 ++			rc_read(&rc, error);
  23.400 + 		((unsigned char *)&header)[i] = *rc.ptr++;
  23.401 + 	}
  23.402 + 
  23.403 +@@ -683,17 +687,17 @@
  23.404 + 	for (i = 0; i < num_probs; i++)
  23.405 + 		p[i] = (1 << RC_MODEL_TOTAL_BITS) >> 1;
  23.406 + 	wr.max_index = wr.next_index = 0;
  23.407 +-	rc_init_code(&rc);
  23.408 ++	rc_init_code(&rc, error);
  23.409 + 
  23.410 + 	while (get_pos(&wr) < header.dst_size) {
  23.411 + 		int pos_state =	get_pos(&wr) & pos_state_mask;
  23.412 + 		uint16_t *prob = p + LZMA_IS_MATCH +
  23.413 + 			(cst.state << LZMA_NUM_POS_BITS_MAX) + pos_state;
  23.414 +-		if (rc_is_bit_0(&rc, prob))
  23.415 ++		if (rc_is_bit_0(&rc, prob, error))
  23.416 + 			process_bit0(&wr, &rc, &cst, p, pos_state, prob,
  23.417 +-				     lc, literal_pos_mask);
  23.418 ++				     lc, literal_pos_mask, error);
  23.419 + 		else {
  23.420 +-			process_bit1(&wr, &rc, &cst, p, pos_state, prob);
  23.421 ++			process_bit1(&wr, &rc, &cst, p, pos_state, prob, error);
  23.422 + 			if (cst.rep0 == 0)
  23.423 + 				break;
  23.424 + 		}
  23.425 +@@ -727,6 +731,9 @@
  23.426 + exit_0:
  23.427 + 	return ret;
  23.428 + }
  23.429 ++#if defined(CONFIG_DECOMPRESS_LZMA_NEEDED) && !defined(PREBOOT)
  23.430 ++EXPORT_SYMBOL(unlzma);
  23.431 ++#endif
  23.432 + 
  23.433 + #ifdef PREBOOT
  23.434 + STATIC int INIT decompress(unsigned char *buf, int in_len,
  23.435 +
  23.436 +--- linux-2.6.34/fs/squashfs/Kconfig
  23.437 ++++ linux-2.6.34/fs/squashfs/Kconfig
  23.438 +@@ -26,6 +26,12 @@
  23.439 + 
  23.440 + 	  If unsure, say N.
  23.441 + 
  23.442 ++config SQUASHFS_LZMA
  23.443 ++	bool "Include support for LZMA compressed file systems"
  23.444 ++	depends on SQUASHFS
  23.445 ++	select DECOMPRESS_LZMA
  23.446 ++	select DECOMPRESS_LZMA_NEEDED
  23.447 ++
  23.448 + config SQUASHFS_EMBEDDED
  23.449 + 
  23.450 + 	bool "Additional option for memory-constrained systems" 
  23.451 +
  23.452 +--- linux-2.6.34/fs/squashfs/Makefile
  23.453 ++++ linux-2.6.34/fs/squashfs/Makefile
  23.454 +@@ -5,3 +5,4 @@
  23.455 + obj-$(CONFIG_SQUASHFS) += squashfs.o
  23.456 + squashfs-y += block.o cache.o dir.o export.o file.o fragment.o id.o inode.o
  23.457 + squashfs-y += namei.o super.o symlink.o zlib_wrapper.o decompressor.o
  23.458 ++squashfs-$(CONFIG_SQUASHFS_LZMA) += lzma_wrapper.o
  23.459 +
  23.460 +--- linux-2.6.34/fs/squashfs/decompressor.c
  23.461 ++++ linux-2.6.34/fs/squashfs/decompressor.c
  23.462 +@@ -50,7 +50,11 @@
  23.463 + 
  23.464 + static const struct squashfs_decompressor *decompressor[] = {
  23.465 + 	&squashfs_zlib_comp_ops,
  23.466 ++#ifdef CONFIG_SQUASHFS_LZMA
  23.467 ++	&squashfs_lzma_comp_ops,
  23.468 ++#else
  23.469 + 	&squashfs_lzma_unsupported_comp_ops,
  23.470 ++#endif
  23.471 + 	&squashfs_lzo_unsupported_comp_ops,
  23.472 + 	&squashfs_unknown_comp_ops
  23.473 + };
  23.474 +
  23.475 +--- linux-2.6.34/fs/squashfs/lzma_wrapper.c
  23.476 ++++ linux-2.6.34/fs/squashfs/lzma_wrapper.c
  23.477 +@@ -0,0 +1,152 @@
  23.478 ++/*
  23.479 ++ * Squashfs - a compressed read only filesystem for Linux
  23.480 ++ *
  23.481 ++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
  23.482 ++ * Phillip Lougher <phillip@lougher.demon.co.uk>
  23.483 ++ *
  23.484 ++ * This program is free software; you can redistribute it and/or
  23.485 ++ * modify it under the terms of the GNU General Public License
  23.486 ++ * as published by the Free Software Foundation; either version 2,
  23.487 ++ * or (at your option) any later version.
  23.488 ++ *
  23.489 ++ * This program is distributed in the hope that it will be useful,
  23.490 ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
  23.491 ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  23.492 ++ * GNU General Public License for more details.
  23.493 ++ *
  23.494 ++ * You should have received a copy of the GNU General Public License
  23.495 ++ * along with this program; if not, write to the Free Software
  23.496 ++ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  23.497 ++ *
  23.498 ++ * lzma_wrapper.c
  23.499 ++ */
  23.500 ++
  23.501 ++#include <asm/unaligned.h>
  23.502 ++#include <linux/slab.h>
  23.503 ++#include <linux/buffer_head.h>
  23.504 ++#include <linux/mutex.h>
  23.505 ++#include <linux/vmalloc.h>
  23.506 ++#include <linux/decompress/unlzma.h>
  23.507 ++
  23.508 ++#include "squashfs_fs.h"
  23.509 ++#include "squashfs_fs_sb.h"
  23.510 ++#include "squashfs_fs_i.h"
  23.511 ++#include "squashfs.h"
  23.512 ++#include "decompressor.h"
  23.513 ++
  23.514 ++struct squashfs_lzma {
  23.515 ++	void	*input;
  23.516 ++	void	*output;
  23.517 ++};
  23.518 ++
  23.519 ++/* decompress_unlzma.c is currently non re-entrant... */
  23.520 ++DEFINE_MUTEX(lzma_mutex);
  23.521 ++
  23.522 ++/* decompress_unlzma.c doesn't provide any context in its callbacks... */
  23.523 ++static int lzma_error;
  23.524 ++
  23.525 ++static void error(char *m)
  23.526 ++{
  23.527 ++	ERROR("unlzma error: %s\n", m);
  23.528 ++	lzma_error = 1;
  23.529 ++}
  23.530 ++
  23.531 ++
  23.532 ++static void *lzma_init(struct squashfs_sb_info *msblk)
  23.533 ++{
  23.534 ++	struct squashfs_lzma *stream = kzalloc(sizeof(*stream), GFP_KERNEL);
  23.535 ++	if (stream == NULL)
  23.536 ++		goto failed;
  23.537 ++	stream->input = vmalloc(msblk->block_size);
  23.538 ++	if (stream->input == NULL)
  23.539 ++		goto failed;
  23.540 ++	stream->output = vmalloc(msblk->block_size);
  23.541 ++	if (stream->output == NULL)
  23.542 ++		goto failed2;
  23.543 ++
  23.544 ++	return stream;
  23.545 ++
  23.546 ++failed2:
  23.547 ++	vfree(stream->input);
  23.548 ++failed:
  23.549 ++	ERROR("failed to allocate lzma workspace\n");
  23.550 ++	kfree(stream);
  23.551 ++	return NULL;
  23.552 ++}
  23.553 ++
  23.554 ++
  23.555 ++static void lzma_free(void *strm)
  23.556 ++{
  23.557 ++	struct squashfs_lzma *stream = strm;
  23.558 ++
  23.559 ++	if (stream) {
  23.560 ++		vfree(stream->input);
  23.561 ++		vfree(stream->output);
  23.562 ++	}
  23.563 ++	kfree(stream);
  23.564 ++}
  23.565 ++
  23.566 ++
  23.567 ++static int lzma_uncompress(struct squashfs_sb_info *msblk, void **buffer,
  23.568 ++	struct buffer_head **bh, int b, int offset, int length, int srclength,
  23.569 ++	int pages)
  23.570 ++{
  23.571 ++	struct squashfs_lzma *stream = msblk->stream;
  23.572 ++	void *buff = stream->input;
  23.573 ++	int avail, i, bytes = length, res;
  23.574 ++
  23.575 ++	mutex_lock(&lzma_mutex);
  23.576 ++
  23.577 ++	for (i = 0; i < b; i++) {
  23.578 ++		wait_on_buffer(bh[i]);
  23.579 ++		if (!buffer_uptodate(bh[i]))
  23.580 ++			goto block_release;
  23.581 ++
  23.582 ++		avail = min(bytes, msblk->devblksize - offset);
  23.583 ++		memcpy(buff, bh[i]->b_data + offset, avail);
  23.584 ++		buff += avail;
  23.585 ++		bytes -= avail;
  23.586 ++		offset = 0;
  23.587 ++		put_bh(bh[i]);
  23.588 ++	}
  23.589 ++
  23.590 ++	lzma_error = 0;
  23.591 ++	res = unlzma(stream->input, length, NULL, NULL, stream->output, NULL,
  23.592 ++							error);
  23.593 ++	if (res || lzma_error)
  23.594 ++		goto failed;
  23.595 ++
  23.596 ++	/* uncompressed size is stored in the LZMA header (5 byte offset) */
  23.597 ++	res = bytes = get_unaligned_le32(stream->input + 5);
  23.598 ++	for (i = 0, buff = stream->output; bytes && i < pages; i++) {
  23.599 ++		avail = min_t(int, bytes, PAGE_CACHE_SIZE);
  23.600 ++		memcpy(buffer[i], buff, avail);
  23.601 ++		buff += avail;
  23.602 ++		bytes -= avail;
  23.603 ++	}
  23.604 ++	if (bytes)
  23.605 ++		goto failed;
  23.606 ++
  23.607 ++	mutex_unlock(&lzma_mutex);
  23.608 ++	return res;
  23.609 ++
  23.610 ++block_release:
  23.611 ++	for (; i < b; i++)
  23.612 ++		put_bh(bh[i]);
  23.613 ++
  23.614 ++failed:
  23.615 ++	mutex_unlock(&lzma_mutex);
  23.616 ++
  23.617 ++	ERROR("lzma decompression failed, data probably corrupt\n");
  23.618 ++	return -EIO;
  23.619 ++}
  23.620 ++
  23.621 ++const struct squashfs_decompressor squashfs_lzma_comp_ops = {
  23.622 ++	.init = lzma_init,
  23.623 ++	.free = lzma_free,
  23.624 ++	.decompress = lzma_uncompress,
  23.625 ++	.id = LZMA_COMPRESSION,
  23.626 ++	.name = "lzma",
  23.627 ++	.supported = 1
  23.628 ++};
  23.629 ++
  23.630 +
  23.631 +--- linux-2.6.34/fs/squashfs/squashfs.h
  23.632 ++++ linux-2.6.34/fs/squashfs/squashfs.h
  23.633 +@@ -94,3 +94,6 @@
  23.634 + 
  23.635 + /* zlib_wrapper.c */
  23.636 + extern const struct squashfs_decompressor squashfs_zlib_comp_ops;
  23.637 ++
  23.638 ++/* lzma wrapper.c */
  23.639 ++extern const struct squashfs_decompressor squashfs_lzma_comp_ops;
  23.640 +
  23.641 +--- linux-2.6.34/lib/Makefile
  23.642 ++++ linux-2.6.34/lib/Makefile
  23.643 +@@ -69,7 +69,7 @@ obj-$(CONFIG_LZO_DECOMPRESS) += lzo/
  23.644 + 
  23.645 + lib-$(CONFIG_DECOMPRESS_GZIP) += decompress_inflate.o
  23.646 + lib-$(CONFIG_DECOMPRESS_BZIP2) += decompress_bunzip2.o
  23.647 +-lib-$(CONFIG_DECOMPRESS_LZMA) += decompress_unlzma.o
  23.648 ++obj-$(CONFIG_DECOMPRESS_LZMA) += decompress_unlzma.o
  23.649 + lib-$(CONFIG_DECOMPRESS_LZO) += decompress_unlzo.o
  23.650 + 
  23.651 + obj-$(CONFIG_TEXTSEARCH) += textsearch.o
  23.652 +
    24.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    24.2 +++ b/kernel-modular/stuff/linux-unlzma-2.6.37.u	Tue Feb 01 09:37:33 2011 +0100
    24.3 @@ -0,0 +1,268 @@
    24.4 +--- linux-2.6.30.4/init/initramfs.c
    24.5 ++++ linux-2.6.30.4/init/initramfs.c
    24.6 +@@ -425,7 +425,8 @@
    24.7 + 	return len - count;
    24.8 + }
    24.9 + 
   24.10 +-static int __init flush_buffer(void *bufv, unsigned len)
   24.11 ++#define flush_buffer cpio_flush_buffer
   24.12 ++int __init flush_buffer(void *bufv, unsigned len)
   24.13 + {
   24.14 + 	char *buf = (char *) bufv;
   24.15 + 	int written;
   24.16 +
   24.17 +--- linux-2.6.30.4/lib/decompress_unlzma.c
   24.18 ++++ linux-2.6.30.4/lib/decompress_unlzma.c
   24.19 +@@ -278,6 +278,10 @@
   24.20 + 	size_t global_pos;
   24.21 + 	int(*flush)(void*, unsigned int);
   24.22 + 	struct lzma_header *header;
   24.23 ++	int is_cpio_flush;
   24.24 ++	uint8_t **buffer_index;
   24.25 ++	int next_index;
   24.26 ++	int max_index;
   24.27 + };
   24.28 + 
   24.29 + struct cstate {
   24.30 +@@ -294,6 +298,14 @@
   24.31 + static inline uint8_t INIT peek_old_byte(struct writer *wr,
   24.32 + 						uint32_t offs)
   24.33 + {
   24.34 ++	if (wr->is_cpio_flush) {
   24.35 ++		int32_t pos;
   24.36 ++		while (offs > wr->header->dict_size)
   24.37 ++			offs -= wr->header->dict_size;
   24.38 ++		pos = wr->buffer_pos - offs;
   24.39 ++		return wr->buffer_index[pos / LZMA_IOBUF_SIZE]
   24.40 ++				       [pos % LZMA_IOBUF_SIZE];
   24.41 ++	}
   24.42 + 	if (!wr->flush) {
   24.43 + 		int32_t pos;
   24.44 + 		while (offs > wr->header->dict_size)
   24.45 +@@ -309,8 +321,41 @@
   24.46 + 
   24.47 + }
   24.48 + 
   24.49 ++static inline void INIT write_byte_if_cpio(struct writer *wr, uint8_t byte)
   24.50 ++{
   24.51 ++	if (wr->buffer_pos % LZMA_IOBUF_SIZE == 0) {
   24.52 ++		// if the following large_malloc fails, the initramfs
   24.53 ++		// whould not be load with is_cpio_flush forced 0 too.
   24.54 ++		// Remember we do not allocate historic buffer.
   24.55 ++		// Let's assume it will never fail !
   24.56 ++		if (wr->next_index >= wr->max_index) {
   24.57 ++			// realloc wr->buffer_index
   24.58 ++			uint8_t **p = wr->buffer_index;
   24.59 ++			wr->buffer_index = (uint8_t **) 
   24.60 ++				large_malloc(LZMA_IOBUF_SIZE + 
   24.61 ++					    sizeof(*p) * wr->max_index);
   24.62 ++			if (wr->max_index) {
   24.63 ++				memcpy(wr->buffer_index, p,
   24.64 ++				       sizeof(*p) * wr->max_index);
   24.65 ++				free(p);
   24.66 ++			}
   24.67 ++			wr->max_index += LZMA_IOBUF_SIZE / sizeof(*p);
   24.68 ++		}
   24.69 ++		wr->buffer_index[wr->next_index++] =
   24.70 ++			(uint8_t *) large_malloc(LZMA_IOBUF_SIZE);
   24.71 ++	}
   24.72 ++	wr->buffer_index[wr->buffer_pos / LZMA_IOBUF_SIZE]
   24.73 ++			[wr->buffer_pos % LZMA_IOBUF_SIZE] =
   24.74 ++		wr->previous_byte = byte;
   24.75 ++	wr->buffer_pos++;
   24.76 ++}
   24.77 ++
   24.78 + static inline void INIT write_byte(struct writer *wr, uint8_t byte)
   24.79 + {
   24.80 ++	if (wr->is_cpio_flush) {
   24.81 ++		write_byte_if_cpio(wr, byte);
   24.82 ++		return;
   24.83 ++	}
   24.84 + 	wr->buffer[wr->buffer_pos++] = wr->previous_byte = byte;
   24.85 + 	if (wr->flush && wr->buffer_pos == wr->header->dict_size) {
   24.86 + 		wr->buffer_pos = 0;
   24.87 +@@ -328,7 +373,21 @@
   24.88 + static inline void INIT copy_bytes(struct writer *wr,
   24.89 + 					 uint32_t rep0, int len)
   24.90 + {
   24.91 +-	do {
   24.92 ++	if (wr->is_cpio_flush) {
   24.93 ++		int32_t pos;
   24.94 ++		uint32_t offs = rep0;
   24.95 ++		while (offs > wr->header->dict_size)
   24.96 ++			offs -= wr->header->dict_size;
   24.97 ++		pos = wr->buffer_pos - offs;
   24.98 ++		do {
   24.99 ++			write_byte_if_cpio(wr, 
  24.100 ++				wr->buffer_index[pos / LZMA_IOBUF_SIZE]
  24.101 ++						[pos % LZMA_IOBUF_SIZE]);
  24.102 ++			pos++;
  24.103 ++			len--;
  24.104 ++		} while (len != 0 && wr->buffer_pos < wr->header->dst_size);
  24.105 ++	}
  24.106 ++	else do {
  24.107 + 		copy_byte(wr, rep0);
  24.108 + 		len--;
  24.109 + 	} while (len != 0 && wr->buffer_pos < wr->header->dst_size);
  24.110 +@@ -339,6 +398,9 @@
  24.111 + 				     int pos_state, uint16_t *prob,
  24.112 + 				     int lc, uint32_t literal_pos_mask) {
  24.113 + 	int mi = 1;
  24.114 ++	static const int state[LZMA_NUM_STATES] = 
  24.115 ++		{ 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 4, 5 };
  24.116 ++
  24.117 + 	rc_update_bit_0(rc, prob);
  24.118 + 	prob = (p + LZMA_LITERAL +
  24.119 + 		(LZMA_LIT_SIZE
  24.120 +@@ -369,18 +431,13 @@
  24.121 + 		rc_get_bit(rc, prob_lit, &mi);
  24.122 + 	}
  24.123 + 	write_byte(wr, mi);
  24.124 +-	if (cst->state < 4)
  24.125 +-		cst->state = 0;
  24.126 +-	else if (cst->state < 10)
  24.127 +-		cst->state -= 3;
  24.128 +-	else
  24.129 +-		cst->state -= 6;
  24.130 ++	cst->state = state[cst->state];
  24.131 + }
  24.132 + 
  24.133 + static inline void INIT process_bit1(struct writer *wr, struct rc *rc,
  24.134 + 					    struct cstate *cst, uint16_t *p,
  24.135 + 					    int pos_state, uint16_t *prob) {
  24.136 +-  int offset;
  24.137 ++	int offset;
  24.138 + 	uint16_t *prob_len;
  24.139 + 	int num_bits;
  24.140 + 	int len;
  24.141 +@@ -396,7 +453,7 @@
  24.142 + 		prob = p + LZMA_LEN_CODER;
  24.143 + 	} else {
  24.144 + 		rc_update_bit_1(rc, prob);
  24.145 +-		prob = p + LZMA_IS_REP_G0 + cst->state;
  24.146 ++		prob += LZMA_IS_REP_G0 - LZMA_IS_REP;
  24.147 + 		if (rc_is_bit_0(rc, prob)) {
  24.148 + 			rc_update_bit_0(rc, prob);
  24.149 + 			prob = (p + LZMA_IS_REP_0_LONG
  24.150 +@@ -417,13 +474,13 @@
  24.151 + 			uint32_t distance;
  24.152 + 
  24.153 + 			rc_update_bit_1(rc, prob);
  24.154 +-			prob = p + LZMA_IS_REP_G1 + cst->state;
  24.155 ++			prob += LZMA_IS_REP_G1 - LZMA_IS_REP_G0;
  24.156 + 			if (rc_is_bit_0(rc, prob)) {
  24.157 + 				rc_update_bit_0(rc, prob);
  24.158 + 				distance = cst->rep1;
  24.159 + 			} else {
  24.160 + 				rc_update_bit_1(rc, prob);
  24.161 +-				prob = p + LZMA_IS_REP_G2 + cst->state;
  24.162 ++				prob += LZMA_IS_REP_G2 - LZMA_IS_REP_G1;
  24.163 + 				if (rc_is_bit_0(rc, prob)) {
  24.164 + 					rc_update_bit_0(rc, prob);
  24.165 + 					distance = cst->rep2;
  24.166 +@@ -444,24 +501,24 @@
  24.167 + 	prob_len = prob + LZMA_LEN_CHOICE;
  24.168 + 	if (rc_is_bit_0(rc, prob_len)) {
  24.169 + 		rc_update_bit_0(rc, prob_len);
  24.170 +-		prob_len = (prob + LZMA_LEN_LOW
  24.171 ++		prob_len += LZMA_LEN_LOW - LZMA_LEN_CHOICE
  24.172 + 			    + (pos_state <<
  24.173 +-			       LZMA_LEN_NUM_LOW_BITS));
  24.174 ++			       LZMA_LEN_NUM_LOW_BITS);
  24.175 + 		offset = 0;
  24.176 + 		num_bits = LZMA_LEN_NUM_LOW_BITS;
  24.177 + 	} else {
  24.178 + 		rc_update_bit_1(rc, prob_len);
  24.179 +-		prob_len = prob + LZMA_LEN_CHOICE_2;
  24.180 ++		prob_len += LZMA_LEN_CHOICE_2 - LZMA_LEN_CHOICE;
  24.181 + 		if (rc_is_bit_0(rc, prob_len)) {
  24.182 + 			rc_update_bit_0(rc, prob_len);
  24.183 +-			prob_len = (prob + LZMA_LEN_MID
  24.184 ++			prob_len += LZMA_LEN_MID - LZMA_LEN_CHOICE_2
  24.185 + 				    + (pos_state <<
  24.186 +-				       LZMA_LEN_NUM_MID_BITS));
  24.187 ++				       LZMA_LEN_NUM_MID_BITS);
  24.188 + 			offset = 1 << LZMA_LEN_NUM_LOW_BITS;
  24.189 + 			num_bits = LZMA_LEN_NUM_MID_BITS;
  24.190 + 		} else {
  24.191 + 			rc_update_bit_1(rc, prob_len);
  24.192 +-			prob_len = prob + LZMA_LEN_HIGH;
  24.193 ++			prob_len += LZMA_LEN_HIGH - LZMA_LEN_CHOICE_2;
  24.194 + 			offset = ((1 << LZMA_LEN_NUM_LOW_BITS)
  24.195 + 				  + (1 << LZMA_LEN_NUM_MID_BITS));
  24.196 + 			num_bits = LZMA_LEN_NUM_HIGH_BITS;
  24.197 +@@ -529,6 +586,7 @@
  24.198 + 			      void(*error_fn)(char *x)
  24.199 + 	)
  24.200 + {
  24.201 ++	extern int cpio_flush_buffer(void*, unsigned int);
  24.202 + 	struct lzma_header header;
  24.203 + 	int lc, pb, lp;
  24.204 + 	uint32_t pos_state_mask;
  24.205 +@@ -563,6 +621,10 @@
  24.206 + 	wr.global_pos = 0;
  24.207 + 	wr.previous_byte = 0;
  24.208 + 	wr.buffer_pos = 0;
  24.209 ++	wr.is_cpio_flush = 0;
  24.210 ++	if (flush == cpio_flush_buffer)
  24.211 ++		wr.is_cpio_flush = 1;
  24.212 ++	wr.buffer_index = NULL;
  24.213 + 
  24.214 + 	rc_init(&rc, fill, inbuf, in_len);
  24.215 + 
  24.216 +@@ -596,23 +658,23 @@
  24.217 + 	if (header.dict_size == 0)
  24.218 + 		header.dict_size = 1;
  24.219 + 
  24.220 +-	if (output)
  24.221 ++	if (output || wr.is_cpio_flush)
  24.222 + 		wr.buffer = output;
  24.223 + 	else {
  24.224 + 		wr.bufsize = MIN(header.dst_size, header.dict_size);
  24.225 + 		wr.buffer = large_malloc(wr.bufsize);
  24.226 + 	}
  24.227 +-	if (wr.buffer == NULL)
  24.228 ++	if (wr.buffer == NULL && !wr.is_cpio_flush)
  24.229 + 		goto exit_1;
  24.230 + 
  24.231 + 	num_probs = LZMA_BASE_SIZE + (LZMA_LIT_SIZE << (lc + lp));
  24.232 + 	p = (uint16_t *) large_malloc(num_probs * sizeof(*p));
  24.233 + 	if (p == 0)
  24.234 + 		goto exit_2;
  24.235 +-	num_probs = LZMA_LITERAL + (LZMA_LIT_SIZE << (lc + lp));
  24.236 ++	num_probs += LZMA_LITERAL - LZMA_BASE_SIZE;
  24.237 + 	for (i = 0; i < num_probs; i++)
  24.238 + 		p[i] = (1 << RC_MODEL_TOTAL_BITS) >> 1;
  24.239 +-
  24.240 ++	wr.max_index = wr.next_index = 0;
  24.241 + 	rc_init_code(&rc);
  24.242 + 
  24.243 + 	while (get_pos(&wr) < header.dst_size) {
  24.244 +@@ -631,12 +693,25 @@
  24.245 + 
  24.246 + 	if (posp)
  24.247 + 		*posp = rc.ptr-rc.buffer;
  24.248 +-	if (wr.flush)
  24.249 ++	if (wr.is_cpio_flush) {
  24.250 ++		int i;
  24.251 ++		for (i = 0; i < wr.next_index -1; i++) {
  24.252 ++			wr.flush(wr.buffer_index[i], LZMA_IOBUF_SIZE);
  24.253 ++			large_free(wr.buffer_index[i]);
  24.254 ++		}
  24.255 ++		if (i < wr.next_index) {
  24.256 ++			wr.flush(wr.buffer_index[i], 
  24.257 ++				 wr.buffer_pos % LZMA_IOBUF_SIZE);
  24.258 ++			large_free(wr.buffer_index[i]);
  24.259 ++		}
  24.260 ++		large_free(wr.buffer_index);
  24.261 ++	}
  24.262 ++	else if (wr.flush)
  24.263 + 		wr.flush(wr.buffer, wr.buffer_pos);
  24.264 + 	ret = 0;
  24.265 + 	large_free(p);
  24.266 + exit_2:
  24.267 +-	if (!output)
  24.268 ++	if (!output && !wr.is_cpio_flush)
  24.269 + 		large_free(wr.buffer);
  24.270 + exit_1:
  24.271 + 	if (!buf)
    25.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    25.2 +++ b/kernel-modular/stuff/list_modules.sh	Tue Feb 01 09:37:33 2011 +0100
    25.3 @@ -0,0 +1,43 @@
    25.4 +#!/bin/sh
    25.5 +# list_modules.sh: list Linux kernel modules for SliTaz GNU/Linux.
    25.6 +# 2008/06/07 <pascal.bellard@slitaz.org> - GNU General Public License.
    25.7 +#
    25.8 +
    25.9 +find_modules()
   25.10 +{
   25.11 +find $_pkg/lib/modules/*-slitaz/kernel/$1 -type f -exec basename {} \;
   25.12 +}
   25.13 +
   25.14 +if [ -z "$1" ] ; then
   25.15 +  cat 1>&2 <<EOT
   25.16 +  
   25.17 +\033[1musage:\033[0m `basename $0` path/to/kernel-modules-subtrees
   25.18 +exemple `basename $0` drivers/net/wireless >list
   25.19 +
   25.20 +EOT
   25.21 +  exit 1
   25.22 +fi
   25.23 +
   25.24 +if [ -z "$(ls -d $_pkg/lib/modules/*-slitaz/kernel/$1 2> /dev/null)" ] ; then
   25.25 +  cat 1>&2 <<EOT
   25.26 +  
   25.27 +Error : $1 does not exist.
   25.28 +
   25.29 +EOT
   25.30 +  exit 1
   25.31 +fi
   25.32 +
   25.33 +for tree in $@; do
   25.34 +    for module in $(find_modules $tree) ; do
   25.35 +        grep /$module: $_pkg/lib/modules/*-slitaz/modules.dep ||
   25.36 +        find $_pkg/lib/modules/*-slitaz/kernel/$tree -name $module
   25.37 +    done | awk '{ for (i = 1; i <= NF; i++)  print $i; }'
   25.38 +done | sort | uniq | sed -e 's,.*slitaz/,,' -e 's,^kernel/,,' -e 's/:$//' | \
   25.39 +while read module; do
   25.40 +    grep -qs ^$module$ $src/modules.list && continue
   25.41 +    if [ ! -f $_pkg/lib/modules/*-slitaz/kernel/$module ]; then
   25.42 +	(cd $_pkg/lib/modules/*-slitaz/kernel; find -name $(basename $module) )
   25.43 +    else
   25.44 +        echo $module
   25.45 +    fi
   25.46 +done
    26.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    26.2 +++ b/kernel-modular/stuff/modules-2.6.37.list	Tue Feb 01 09:37:33 2011 +0100
    26.3 @@ -0,0 +1,143 @@
    26.4 +drivers/acpi/video.ko.gz
    26.5 +drivers/acpi/button.ko.gz
    26.6 +drivers/char/genrtc.ko.gz
    26.7 +drivers/char/i8k.ko.gz
    26.8 +drivers/char/lp.ko.gz
    26.9 +drivers/char/rtc.ko.gz
   26.10 +drivers/hwmon/coretemp.ko.gz
   26.11 +drivers/hwmon/hwmon.ko.gz
   26.12 +drivers/hwmon/k8temp.ko.gz
   26.13 +drivers/input/mouse/inport.ko.gz
   26.14 +drivers/input/mouse/logibm.ko.gz
   26.15 +drivers/input/mouse/pc110pad.ko.gz
   26.16 +drivers/net/3c501.ko.gz
   26.17 +drivers/net/3c503.ko.gz
   26.18 +drivers/net/3c505.ko.gz
   26.19 +drivers/net/3c509.ko.gz
   26.20 +drivers/net/3c515.ko.gz
   26.21 +drivers/net/3c59x.ko.gz
   26.22 +drivers/net/82596.ko.gz
   26.23 +drivers/net/amd8111e.ko.gz
   26.24 +drivers/net/arcnet/arcnet.ko.gz
   26.25 +drivers/net/arcnet/com90xx.ko.gz
   26.26 +drivers/net/arcnet/rfc1201.ko.gz
   26.27 +drivers/net/atl1c/atl1c.ko.gz
   26.28 +drivers/net/atl1e/atl1e.ko.gz
   26.29 +drivers/net/atlx/atl2.ko.gz
   26.30 +drivers/net/bnx2.ko.gz
   26.31 +drivers/net/cassini.ko.gz
   26.32 +drivers/net/cs89x0.ko.gz
   26.33 +drivers/net/depca.ko.gz
   26.34 +drivers/net/dl2k.ko.gz
   26.35 +drivers/net/e1000/e1000.ko.gz
   26.36 +drivers/net/e2100.ko.gz
   26.37 +drivers/net/eepro.ko.gz
   26.38 +drivers/net/eexpress.ko.gz
   26.39 +drivers/net/eth16i.ko.gz
   26.40 +drivers/net/ewrk3.ko.gz
   26.41 +drivers/net/fealnx.ko.gz
   26.42 +drivers/net/hp100.ko.gz
   26.43 +drivers/net/hp.ko.gz
   26.44 +drivers/net/hp-plus.ko.gz
   26.45 +drivers/net/ipg.ko.gz
   26.46 +drivers/net/lance.ko.gz
   26.47 +drivers/net/lp486e.ko.gz
   26.48 +drivers/net/ne.ko.gz
   26.49 +drivers/net/ni52.ko.gz
   26.50 +drivers/net/ni65.ko.gz
   26.51 +drivers/net/pcmcia/3c574_cs.ko.gz
   26.52 +drivers/net/pcmcia/3c589_cs.ko.gz
   26.53 +drivers/net/pcmcia/axnet_cs.ko.gz
   26.54 +drivers/net/pcmcia/fmvj18x_cs.ko.gz
   26.55 +drivers/net/pcmcia/nmclan_cs.ko.gz
   26.56 +drivers/net/pcmcia/pcnet_cs.ko.gz
   26.57 +drivers/net/pcmcia/smc91c92_cs.ko.gz
   26.58 +drivers/net/pcmcia/xirc2ps_cs.ko.gz
   26.59 +drivers/net/phy/broadcom.ko.gz
   26.60 +drivers/net/phy/cicada.ko.gz
   26.61 +drivers/net/phy/davicom.ko.gz
   26.62 +drivers/net/phy/libphy.ko.gz
   26.63 +drivers/net/phy/lxt.ko.gz
   26.64 +drivers/net/phy/marvell.ko.gz
   26.65 +drivers/net/phy/qsemi.ko.gz 
   26.66 +drivers/net/phy/smsc.ko.gz 
   26.67 +drivers/net/dnet.ko.gz
   26.68 +drivers/net/sc92031.ko.gz
   26.69 +drivers/net/sis190.ko.gz
   26.70 +drivers/net/skge.ko.gz
   26.71 +drivers/net/sky2.ko.gz
   26.72 +drivers/net/smc9194.ko.gz
   26.73 +drivers/net/smc-ultra.ko.gz
   26.74 +drivers/net/starfire.ko.gz
   26.75 +drivers/net/sungem.ko.gz
   26.76 +drivers/net/sungem_phy.ko.gz
   26.77 +drivers/net/sunhme.ko.gz
   26.78 +drivers/net/tg3.ko.gz
   26.79 +drivers/net/tulip/tulip.ko.gz
   26.80 +drivers/net/tulip/uli526x.ko.gz
   26.81 +drivers/net/typhoon.ko.gz
   26.82 +drivers/net/usb/asix.ko.gz
   26.83 +drivers/net/usb/cdc_ether.ko.gz
   26.84 +drivers/net/usb/cdc_subset.ko.gz
   26.85 +drivers/net/usb/net1080.ko.gz
   26.86 +drivers/net/usb/rndis_host.ko.gz
   26.87 +drivers/net/usb/usbnet.ko.gz
   26.88 +drivers/net/usb/zaurus.ko.gz
   26.89 +drivers/net/usb/cdc_eem.ko.gz 
   26.90 +drivers/net/usb/dm9601.ko.gz
   26.91 +drivers/net/via-velocity.ko.gz
   26.92 +drivers/net/wd.ko.gz
   26.93 +drivers/net/8390p.ko.gz
   26.94 +drivers/net/b44.ko.gz
   26.95 +drivers/net/r6040.ko.gz
   26.96 +drivers/net/vmxnet3/vmxnet3.ko.gz
   26.97 +drivers/net/usb/int51x1.ko.gz
   26.98 +drivers/net/usb/ipheth.ko.gz
   26.99 +drivers/net/usb/smsc75xx.ko.gz
  26.100 +drivers/net/smsc9420.ko.gz
  26.101 +drivers/ide/ide-cs.ko.gz
  26.102 +drivers/watchdog/softdog.ko.gz
  26.103 +drivers/parport/parport.ko.gz
  26.104 +drivers/parport/parport_pc.ko.gz
  26.105 +drivers/pcmcia/i82092.ko.gz
  26.106 +drivers/pcmcia/i82365.ko.gz
  26.107 +drivers/pcmcia/pcmcia_core.ko.gz
  26.108 +drivers/pcmcia/pcmcia.ko.gz
  26.109 +drivers/pcmcia/pcmcia_rsrc.ko.gz
  26.110 +drivers/pcmcia/pd6729.ko.gz
  26.111 +drivers/pcmcia/yenta_socket.ko.gz
  26.112 +drivers/usb/class/cdc-acm.ko.gz
  26.113 +drivers/usb/class/usblp.ko.gz
  26.114 +drivers/usb/serial/ch341.ko.gz
  26.115 +drivers/usb/serial/pl2303.ko.gz
  26.116 +drivers/usb/serial/usbserial.ko.gz
  26.117 +drivers/usb/mon/usbmon.ko.gz
  26.118 +drivers/usb/host/xhci-hcd.ko.gz
  26.119 +drivers/ssb/ssb.ko.gz
  26.120 +drivers/block/floppy.ko.gz
  26.121 +drivers/input/mouse/sermouse.ko.gz
  26.122 +drivers/video/output.ko.gz
  26.123 +fs/binfmt_misc.ko.gz
  26.124 +fs/fat/msdos.ko.gz
  26.125 +fs/fuse/cuse.ko.gz
  26.126 +net/ipv4/netfilter/ipt_REJECT.ko.gz
  26.127 +net/netfilter/nfnetlink.ko.gz
  26.128 +net/netfilter/nfnetlink_log.ko.gz
  26.129 +lib/crc7.ko.gz
  26.130 +drivers/misc/cb710/cb710.ko.gz
  26.131 +drivers/misc/tifm_core.ko.gz
  26.132 +drivers/leds/led-class.ko.gz
  26.133 +net/llc/llc.ko.gz
  26.134 +drivers/mmc/core/mmc_core.ko.gz
  26.135 +net/rfkill/rfkill.ko.gz
  26.136 +net/sunrpc/auth_gss/auth_rpcgss.ko.gz
  26.137 +net/sunrpc/auth_gss/rpcsec_gss_krb5.ko.gz
  26.138 +net/netfilter/nf_conntrack.ko.gz
  26.139 +drivers/input/gameport/gameport.ko.gz
  26.140 +drivers/i2c/i2c-core.ko.gz
  26.141 +sound/soundcore.ko.gz
  26.142 +sound/ac97_bus.ko.gz
  26.143 +sound/core/snd.ko.gz
  26.144 +lib/libcrc32c.ko.gz
  26.145 +lib/crc-itu-t.ko.gz
  26.146 +lib/raid6/raid6_pq.ko.gz