# HG changeset patch # User Pascal Bellard # Date 1296549453 -3600 # Node ID 5d8744871068981abc9de575ebe348cd25b5d26b # Parent c241da0f26a5502033236483df5ee559bf6ca2bf Add kernel diff -r c241da0f26a5 -r 5d8744871068 kernel-isa/receipt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel-isa/receipt Tue Feb 01 09:37:33 2011 +0100 @@ -0,0 +1,19 @@ +# SliTaz package receipt. + +PACKAGE="kernel-isa" +VERSION="2.6.37" +CATEGORY="base-system" +SHORT_DESC="Kernel i386 with ppp, ne2k-isa, 3c509, ide and ext3" +MAINTAINER="devel@slitaz.org" +WEB_SITE="http://www.kernel.org/" +WANTED="kernel-modular" + +# Rules to gen a SliTaz package suitable for Tazpkg. +genpkg_rules() +{ + mkdir $fs/boot + cp -a $WOK/kernel-modular/linux-$VERSION/$PACKAGE $fs/boot/bzImage + cp -a $WOK/kernel-modular/linux-$VERSION/System.map-${PACKAGE#kernel-} $fs/boot/System.map + cp -a $WOK/kernel-modular/linux-$VERSION/config-${PACKAGE#kernel-} $fs/boot/config +} + diff -r c241da0f26a5 -r 5d8744871068 kernel-lguest/receipt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel-lguest/receipt Tue Feb 01 09:37:33 2011 +0100 @@ -0,0 +1,18 @@ +# SliTaz package receipt. + +PACKAGE="kernel-lguest" +VERSION="2.6.37" +CATEGORY="base-system" +SHORT_DESC="Kernel i686 with ext3 and virtual drivers for ethernet and disk" +MAINTAINER="devel@slitaz.org" +WEB_SITE="http://www.kernel.org/" +WANTED="kernel-modular" + +# Rules to gen a SliTaz package suitable for Tazpkg. +genpkg_rules() +{ + mkdir $fs/boot + cp -a $WOK/kernel-modular/linux-$VERSION/$PACKAGE $fs/boot/bzImage + cp -a $WOK/kernel-modular/linux-$VERSION/System.map-${PACKAGE#kernel-} $fs/boot/System.map + cp -a $WOK/kernel-modular/linux-$VERSION/config-${PACKAGE#kernel-} $fs/boot/config +} diff -r c241da0f26a5 -r 5d8744871068 kernel-modular/receipt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel-modular/receipt Tue Feb 01 09:37:33 2011 +0100 @@ -0,0 +1,169 @@ +# SliTaz package receipt. + +PACKAGE="kernel-modular" +SOURCE="linux" +VERSION="2.6.37" +CATEGORY="base-system" +SHORT_DESC="The Linux kernel and modules." +DEPENDS="depmod" +BUILD_DEPENDS="slitaz-toolchain perl git lzma" +[ -n "$TARGET" ] && +BUILD_DEPENDS="$BUILD_DEPENDS uclibc-cross-compiler-$TARGET" || +TARGET="i486" +MAINTAINER="devel@slitaz.org" +TARBALL="$SOURCE-$VERSION.tar.bz2" +WEB_SITE="http://www.kernel.org/" +WGET_URL="http://www.eu.kernel.org/pub/linux/kernel/v${VERSION:0:3}/$TARBALL" +CONFIG_FILES="/lib/modules/$VERSION-slitaz/modules.dep" + +# Rules to configure and make the package. +compile_rules() +{ + if [ ! -s $WOK/busybox/busybox*/rootfs.cpio ]; then + tazwok cook busybox + fi + cp $WOK/busybox/busybox*/rootfs.cpio $src + + # this is code to help update the kernel version faster + #for i in $(grep -l 'WANTED="linux"' $WOK/*/receipt) + #do + # sed -i 's|VERSION="OLDVERSION"|VERSION="NEWVERSION"|g' $i + #done + local _AUFSVER=`grep ^VERSION= $WOK/aufs/receipt | cut -d "=" -f2 | sed -e 's/"//g'` + local AUFSDIR="aufs-${_AUFSVER}" + TARBALL=$SOURCES_REPOSITORY/$AUFSDIR.tar.lzma + if [ -f $TARBALL ]; then + unlzma -c $TARBALL | tar xf - + cd $AUFSDIR && git checkout origin/aufs2.1-37 + cd $WOK/$PACKAGE + else + # Aufs2 from git repository + git clone git://aufs.git.sourceforge.net/gitroot/aufs/aufs2-standalone.git $AUFSDIR + tar cf - $AUFSDIR | lzma e $TARBALL -si + cd $AUFSDIR && git checkout origin/aufs2.1-37 + cd $WOK/$PACKAGE + fi + cp -a $AUFSDIR/Documentation $AUFSDIR/fs $AUFSDIR/include $src + cp -a $AUFSDIR/*.patch $WOK/$PACKAGE/stuff + # We need the real GNU patch + [ -L /usr/bin/patch ] && tazpkg get-install patch --forced + cd $src + # SliTaz db + [ -d slitaz ] && rm -rf slitaz 2> /dev/null + mkdir slitaz + echo "$WGET_URL" > slitaz/url + cp ../stuff/gztazmod.sh ../stuff/list_modules.sh slitaz + cp ../stuff/bootloader.sh slitaz + # Apply patches + while read patch_file; do + echo "$patch_file" >> slitaz/patches + cp ../stuff/$patch_file slitaz + if [ -f done.$patch_file ]; then + echo "Skipping $patch_file" + continue + fi + echo "Apply $patch_file" + patch -p1 < slitaz/$patch_file || exit 1 + touch done.$patch_file + done < /dev/null + cp arch/x86/boot/bzImage kernel-modular + cp System.map System.map-modular + cp .config config-modular + mv arch/x86/boot/bzImage $PWD/_pkg/boot/vmlinuz-$VERSION-slitaz + # Compress all modules. + $WOK/$PACKAGE/stuff/gztazmod.sh $PWD/_pkg/lib/modules/$VERSION-slitaz + ln System.map System.map-modules + ln Module.symvers Module.symvers-modules +} + +# Rules to gen a SliTaz package suitable for Tazpkg. +genpkg_rules() +{ + mkdir $fs/boot + cp -a $_pkg/../$PACKAGE $fs/boot/bzImage + cp -a $_pkg/../System.map-${PACKAGE#kernel-} $fs/boot/System.map + cp -a $_pkg/../config-${PACKAGE#kernel-} $fs/boot/config + # Compress all modules. + #./stuff/gztazmod.sh $_pkg/lib/modules/$VERSION-slitaz +} + +# Pre and post install commands for Tazpkg. +post_install() +{ + echo "Processing post-install commands..." + chroot "$1/" depmod -a $VERSION-slitaz + # GRUB stuff. + if [ -f "$1/boot/grub/menu.lst" ]; then + root_dev=`cat $1/boot/grub/menu.lst | grep root= | sed 's/.*root=\([^ ]*\).*/\1/' | head -n 1` + grub_dev=`cat $1/boot/grub/menu.lst | grep "root (" | head -n 1` + # Add new kernel entry in case of upgrade for installed system. + if ! grep -q $SOURCE-$VERSION-slitaz $1/boot/grub/menu.lst; then + cat >> $1/boot/grub/menu.lst << EOT + +title SliTaz GNU/Linux (Kernel $VERSION-slitaz) +$grub_dev +kernel /boot/vmlinuz-$VERSION-slitaz root=$root_dev +EOT + fi + # Display information message. + cat < +Date: Thu, 2 Dec 2010 19:14:19 +0000 (+0200) +Subject: Decompressors: Add XZ decompressor module +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fpkl%2Fsquashfs-xz.git;a=commitdiff_plain;h=3dbc3fe7878e53b43064a12d4ab31ca4c18ce85f + +Decompressors: Add XZ decompressor module + +In userspace, the .lzma format has become mostly a legacy +file format that got superseded by the .xz format. Similarly, +LZMA Utils was superseded by XZ Utils. + +These patches add support for XZ decompression into +the kernel. Most of the code is as is from XZ Embedded +. It was written for +the Linux kernel but is usable in other projects too. + +Advantages of XZ over the current LZMA code in the kernel: + - Nice API that can be used by other kernel modules; it's + not limited to kernel, initramfs, and initrd decompression. + - Integrity check support (CRC32) + - BCJ filters improve compression of executable code on + certain architectures. These together with LZMA2 can + produce a few percent smaller kernel or Squashfs images + than plain LZMA without making the decompression slower. + +This patch: Add the main decompression code (xz_dec), testing +module (xz_dec_test), wrapper script (xz_wrap.sh) for the xz +command line tool, and documentation. The xz_dec module is +enough to have a usable XZ decompressor e.g. for Squashfs. + +Signed-off-by: Lasse Collin +--- + +diff --git a/Documentation/xz.txt b/Documentation/xz.txt +new file mode 100644 +index 0000000..68329ac +--- /dev/null ++++ b/Documentation/xz.txt +@@ -0,0 +1,122 @@ ++ ++XZ data compression in Linux ++============================ ++ ++Introduction ++ ++ XZ is a general purpose data compression format with high compression ++ ratio and relatively fast decompression. The primary compression ++ algorithm (filter) is LZMA2. Additional filters can be used to improve ++ compression ratio even further. E.g. Branch/Call/Jump (BCJ) filters ++ improve compression ratio of executable data. ++ ++ The XZ decompressor in Linux is called XZ Embedded. It supports ++ the LZMA2 filter and optionally also BCJ filters. CRC32 is supported ++ for integrity checking. The home page of XZ Embedded is at ++ , where you can find the ++ latest version and also information about using the code outside ++ the Linux kernel. ++ ++ For userspace, XZ Utils provide a zlib-like compression library ++ and a gzip-like command line tool. XZ Utils can be downloaded from ++ . ++ ++XZ related components in the kernel ++ ++ The xz_dec module provides XZ decompressor with single-call (buffer ++ to buffer) and multi-call (stateful) APIs. The usage of the xz_dec ++ module is documented in include/linux/xz.h. ++ ++ The xz_dec_test module is for testing xz_dec. xz_dec_test is not ++ useful unless you are hacking the XZ decompressor. xz_dec_test ++ allocates a char device major dynamically to which one can write ++ .xz files from userspace. The decompressed output is thrown away. ++ Keep an eye on dmesg to see diagnostics printed by xz_dec_test. ++ See the xz_dec_test source code for the details. ++ ++ For decompressing the kernel image, initramfs, and initrd, there ++ is a wrapper function in lib/decompress_unxz.c. Its API is the ++ same as in other decompress_*.c files, which is defined in ++ include/linux/decompress/generic.h. ++ ++ scripts/xz_wrap.sh is a wrapper for the xz command line tool found ++ from XZ Utils. The wrapper sets compression options to values suitable ++ for compressing the kernel image. ++ ++ For kernel makefiles, two commands are provided for use with ++ $(call if_needed). The kernel image should be compressed with ++ $(call if_needed,xzkern) which will use a BCJ filter and a big LZMA2 ++ dictionary. It will also append a four-byte trailer containing the ++ uncompressed size of the file, which is needed by the boot code. ++ Other things should be compressed with $(call if_needed,xzmisc) ++ which will use no BCJ filter and 1 MiB LZMA2 dictionary. ++ ++Notes on compression options ++ ++ Since the XZ Embedded supports only streams with no integrity check or ++ CRC32, make sure that you don't use some other integrity check type ++ when encoding files that are supposed to be decoded by the kernel. With ++ liblzma, you need to use either LZMA_CHECK_NONE or LZMA_CHECK_CRC32 ++ when encoding. With the xz command line tool, use --check=none or ++ --check=crc32. ++ ++ Using CRC32 is strongly recommended unless there is some other layer ++ which will verify the integrity of the uncompressed data anyway. ++ Double checking the integrity would probably be waste of CPU cycles. ++ Note that the headers will always have a CRC32 which will be validated ++ by the decoder; you can only change the integrity check type (or ++ disable it) for the actual uncompressed data. ++ ++ In userspace, LZMA2 is typically used with dictionary sizes of several ++ megabytes. The decoder needs to have the dictionary in RAM, thus big ++ dictionaries cannot be used for files that are intended to be decoded ++ by the kernel. 1 MiB is probably the maximum reasonable dictionary ++ size for in-kernel use (maybe more is OK for initramfs). The presets ++ in XZ Utils may not be optimal when creating files for the kernel, ++ so don't hesitate to use custom settings. Example: ++ ++ xz --check=crc32 --lzma2=dict=512KiB inputfile ++ ++ An exception to above dictionary size limitation is when the decoder ++ is used in single-call mode. Decompressing the kernel itself is an ++ example of this situation. In single-call mode, the memory usage ++ doesn't depend on the dictionary size, and it is perfectly fine to ++ use a big dictionary: for maximum compression, the dictionary should ++ be at least as big as the uncompressed data itself. ++ ++Future plans ++ ++ Creating a limited XZ encoder may be considered if people think it is ++ useful. LZMA2 is slower to compress than e.g. Deflate or LZO even at ++ the fastest settings, so it isn't clear if LZMA2 encoder is wanted ++ into the kernel. ++ ++ Support for limited random-access reading is planned for the ++ decompression code. I don't know if it could have any use in the ++ kernel, but I know that it would be useful in some embedded projects ++ outside the Linux kernel. ++ ++Conformance to the .xz file format specification ++ ++ There are a couple of corner cases where things have been simplified ++ at expense of detecting errors as early as possible. These should not ++ matter in practice all, since they don't cause security issues. But ++ it is good to know this if testing the code e.g. with the test files ++ from XZ Utils. ++ ++Reporting bugs ++ ++ Before reporting a bug, please check that it's not fixed already ++ at upstream. See to get the ++ latest code. ++ ++ Report bugs to or visit #tukaani on ++ Freenode and talk to Larhzu. I don't actively read LKML or other ++ kernel-related mailing lists, so if there's something I should know, ++ you should email to me personally or use IRC. ++ ++ Don't bother Igor Pavlov with questions about the XZ implementation ++ in the kernel or about XZ Utils. While these two implementations ++ include essential code that is directly based on Igor Pavlov's code, ++ these implementations aren't maintained nor supported by him. ++ +diff --git a/include/linux/xz.h b/include/linux/xz.h +new file mode 100644 +index 0000000..64cffa6 +--- /dev/null ++++ b/include/linux/xz.h +@@ -0,0 +1,264 @@ ++/* ++ * XZ decompressor ++ * ++ * Authors: Lasse Collin ++ * Igor Pavlov ++ * ++ * This file has been put into the public domain. ++ * You can do whatever you want with this file. ++ */ ++ ++#ifndef XZ_H ++#define XZ_H ++ ++#ifdef __KERNEL__ ++# include ++# include ++#else ++# include ++# include ++#endif ++ ++/* In Linux, this is used to make extern functions static when needed. */ ++#ifndef XZ_EXTERN ++# define XZ_EXTERN extern ++#endif ++ ++/** ++ * enum xz_mode - Operation mode ++ * ++ * @XZ_SINGLE: Single-call mode. This uses less RAM than ++ * than multi-call modes, because the LZMA2 ++ * dictionary doesn't need to be allocated as ++ * part of the decoder state. All required data ++ * structures are allocated at initialization, ++ * so xz_dec_run() cannot return XZ_MEM_ERROR. ++ * @XZ_PREALLOC: Multi-call mode with preallocated LZMA2 ++ * dictionary buffer. All data structures are ++ * allocated at initialization, so xz_dec_run() ++ * cannot return XZ_MEM_ERROR. ++ * @XZ_DYNALLOC: Multi-call mode. The LZMA2 dictionary is ++ * allocated once the required size has been ++ * parsed from the stream headers. If the ++ * allocation fails, xz_dec_run() will return ++ * XZ_MEM_ERROR. ++ * ++ * It is possible to enable support only for a subset of the above ++ * modes at compile time by defining XZ_DEC_SINGLE, XZ_DEC_PREALLOC, ++ * or XZ_DEC_DYNALLOC. The xz_dec kernel module is always compiled ++ * with support for all operation modes, but the preboot code may ++ * be built with fewer features to minimize code size. ++ */ ++enum xz_mode { ++ XZ_SINGLE, ++ XZ_PREALLOC, ++ XZ_DYNALLOC ++}; ++ ++/** ++ * enum xz_ret - Return codes ++ * @XZ_OK: Everything is OK so far. More input or more ++ * output space is required to continue. This ++ * return code is possible only in multi-call mode ++ * (XZ_PREALLOC or XZ_DYNALLOC). ++ * @XZ_STREAM_END: Operation finished successfully. ++ * @XZ_UNSUPPORTED_CHECK: Integrity check type is not supported. Decoding ++ * is still possible in multi-call mode by simply ++ * calling xz_dec_run() again. ++ * Note that this return value is used only if ++ * XZ_DEC_ANY_CHECK was defined at build time, ++ * which is not used in the kernel. Unsupported ++ * check types return XZ_OPTIONS_ERROR if ++ * XZ_DEC_ANY_CHECK was not defined at build time. ++ * @XZ_MEM_ERROR: Allocating memory failed. This return code is ++ * possible only if the decoder was initialized ++ * with XZ_DYNALLOC. The amount of memory that was ++ * tried to be allocated was no more than the ++ * dict_max argument given to xz_dec_init(). ++ * @XZ_MEMLIMIT_ERROR: A bigger LZMA2 dictionary would be needed than ++ * allowed by the dict_max argument given to ++ * xz_dec_init(). This return value is possible ++ * only in multi-call mode (XZ_PREALLOC or ++ * XZ_DYNALLOC); the single-call mode (XZ_SINGLE) ++ * ignores the dict_max argument. ++ * @XZ_FORMAT_ERROR: File format was not recognized (wrong magic ++ * bytes). ++ * @XZ_OPTIONS_ERROR: This implementation doesn't support the requested ++ * compression options. In the decoder this means ++ * that the header CRC32 matches, but the header ++ * itself specifies something that we don't support. ++ * @XZ_DATA_ERROR: Compressed data is corrupt. ++ * @XZ_BUF_ERROR: Cannot make any progress. Details are slightly ++ * different between multi-call and single-call ++ * mode; more information below. ++ * ++ * In multi-call mode, XZ_BUF_ERROR is returned when two consecutive calls ++ * to XZ code cannot consume any input and cannot produce any new output. ++ * This happens when there is no new input available, or the output buffer ++ * is full while at least one output byte is still pending. Assuming your ++ * code is not buggy, you can get this error only when decoding a compressed ++ * stream that is truncated or otherwise corrupt. ++ * ++ * In single-call mode, XZ_BUF_ERROR is returned only when the output buffer ++ * is too small or the compressed input is corrupt in a way that makes the ++ * decoder produce more output than the caller expected. When it is ++ * (relatively) clear that the compressed input is truncated, XZ_DATA_ERROR ++ * is used instead of XZ_BUF_ERROR. ++ */ ++enum xz_ret { ++ XZ_OK, ++ XZ_STREAM_END, ++ XZ_UNSUPPORTED_CHECK, ++ XZ_MEM_ERROR, ++ XZ_MEMLIMIT_ERROR, ++ XZ_FORMAT_ERROR, ++ XZ_OPTIONS_ERROR, ++ XZ_DATA_ERROR, ++ XZ_BUF_ERROR ++}; ++ ++/** ++ * struct xz_buf - Passing input and output buffers to XZ code ++ * @in: Beginning of the input buffer. This may be NULL if and only ++ * if in_pos is equal to in_size. ++ * @in_pos: Current position in the input buffer. This must not exceed ++ * in_size. ++ * @in_size: Size of the input buffer ++ * @out: Beginning of the output buffer. This may be NULL if and only ++ * if out_pos is equal to out_size. ++ * @out_pos: Current position in the output buffer. This must not exceed ++ * out_size. ++ * @out_size: Size of the output buffer ++ * ++ * Only the contents of the output buffer from out[out_pos] onward, and ++ * the variables in_pos and out_pos are modified by the XZ code. ++ */ ++struct xz_buf { ++ const uint8_t *in; ++ size_t in_pos; ++ size_t in_size; ++ ++ uint8_t *out; ++ size_t out_pos; ++ size_t out_size; ++}; ++ ++/** ++ * struct xz_dec - Opaque type to hold the XZ decoder state ++ */ ++struct xz_dec; ++ ++/** ++ * xz_dec_init() - Allocate and initialize a XZ decoder state ++ * @mode: Operation mode ++ * @dict_max: Maximum size of the LZMA2 dictionary (history buffer) for ++ * multi-call decoding. This is ignored in single-call mode ++ * (mode == XZ_SINGLE). LZMA2 dictionary is always 2^n bytes ++ * or 2^n + 2^(n-1) bytes (the latter sizes are less common ++ * in practice), so other values for dict_max don't make sense. ++ * In the kernel, dictionary sizes of 64 KiB, 128 KiB, 256 KiB, ++ * 512 KiB, and 1 MiB are probably the only reasonable values, ++ * except for kernel and initramfs images where a bigger ++ * dictionary can be fine and useful. ++ * ++ * Single-call mode (XZ_SINGLE): xz_dec_run() decodes the whole stream at ++ * once. The caller must provide enough output space or the decoding will ++ * fail. The output space is used as the dictionary buffer, which is why ++ * there is no need to allocate the dictionary as part of the decoder's ++ * internal state. ++ * ++ * Because the output buffer is used as the workspace, streams encoded using ++ * a big dictionary are not a problem in single-call mode. It is enough that ++ * the output buffer is big enough to hold the actual uncompressed data; it ++ * can be smaller than the dictionary size stored in the stream headers. ++ * ++ * Multi-call mode with preallocated dictionary (XZ_PREALLOC): dict_max bytes ++ * of memory is preallocated for the LZMA2 dictionary. This way there is no ++ * risk that xz_dec_run() could run out of memory, since xz_dec_run() will ++ * never allocate any memory. Instead, if the preallocated dictionary is too ++ * small for decoding the given input stream, xz_dec_run() will return ++ * XZ_MEMLIMIT_ERROR. Thus, it is important to know what kind of data will be ++ * decoded to avoid allocating excessive amount of memory for the dictionary. ++ * ++ * Multi-call mode with dynamically allocated dictionary (XZ_DYNALLOC): ++ * dict_max specifies the maximum allowed dictionary size that xz_dec_run() ++ * may allocate once it has parsed the dictionary size from the stream ++ * headers. This way excessive allocations can be avoided while still ++ * limiting the maximum memory usage to a sane value to prevent running the ++ * system out of memory when decompressing streams from untrusted sources. ++ * ++ * On success, xz_dec_init() returns a pointer to struct xz_dec, which is ++ * ready to be used with xz_dec_run(). If memory allocation fails, ++ * xz_dec_init() returns NULL. ++ */ ++XZ_EXTERN struct xz_dec *xz_dec_init(enum xz_mode mode, uint32_t dict_max); ++ ++/** ++ * xz_dec_run() - Run the XZ decoder ++ * @s: Decoder state allocated using xz_dec_init() ++ * @b: Input and output buffers ++ * ++ * The possible return values depend on build options and operation mode. ++ * See enum xz_ret for details. ++ * ++ * Note that if an error occurs in single-call mode (return value is not ++ * XZ_STREAM_END), b->in_pos and b->out_pos are not modified and the ++ * contents of the output buffer from b->out[b->out_pos] onward are ++ * undefined. This is true even after XZ_BUF_ERROR, because with some filter ++ * chains, there may be a second pass over the output buffer, and this pass ++ * cannot be properly done if the output buffer is truncated. Thus, you ++ * cannot give the single-call decoder a too small buffer and then expect to ++ * get that amount valid data from the beginning of the stream. You must use ++ * the multi-call decoder if you don't want to uncompress the whole stream. ++ */ ++XZ_EXTERN enum xz_ret xz_dec_run(struct xz_dec *s, struct xz_buf *b); ++ ++/** ++ * xz_dec_reset() - Reset an already allocated decoder state ++ * @s: Decoder state allocated using xz_dec_init() ++ * ++ * This function can be used to reset the multi-call decoder state without ++ * freeing and reallocating memory with xz_dec_end() and xz_dec_init(). ++ * ++ * In single-call mode, xz_dec_reset() is always called in the beginning of ++ * xz_dec_run(). Thus, explicit call to xz_dec_reset() is useful only in ++ * multi-call mode. ++ */ ++XZ_EXTERN void xz_dec_reset(struct xz_dec *s); ++ ++/** ++ * xz_dec_end() - Free the memory allocated for the decoder state ++ * @s: Decoder state allocated using xz_dec_init(). If s is NULL, ++ * this function does nothing. ++ */ ++XZ_EXTERN void xz_dec_end(struct xz_dec *s); ++ ++/* ++ * Standalone build (userspace build or in-kernel build for boot time use) ++ * needs a CRC32 implementation. For normal in-kernel use, kernel's own ++ * CRC32 module is used instead, and users of this module don't need to ++ * care about the functions below. ++ */ ++#ifndef XZ_INTERNAL_CRC32 ++# ifdef __KERNEL__ ++# define XZ_INTERNAL_CRC32 0 ++# else ++# define XZ_INTERNAL_CRC32 1 ++# endif ++#endif ++ ++#if XZ_INTERNAL_CRC32 ++/* ++ * This must be called before any other xz_* function to initialize ++ * the CRC32 lookup table. ++ */ ++XZ_EXTERN void xz_crc32_init(void); ++ ++/* ++ * Update CRC32 value using the polynomial from IEEE-802.3. To start a new ++ * calculation, the third argument must be zero. To continue the calculation, ++ * the previously returned value is passed as the third argument. ++ */ ++XZ_EXTERN uint32_t xz_crc32(const uint8_t *buf, size_t size, uint32_t crc); ++#endif ++#endif +diff --git a/lib/Kconfig b/lib/Kconfig +index fa9bf2c..6090314 100644 +--- a/lib/Kconfig ++++ b/lib/Kconfig +@@ -106,6 +106,8 @@ config LZO_COMPRESS + config LZO_DECOMPRESS + tristate + ++source "lib/xz/Kconfig" ++ + # + # These all provide a common interface (hence the apparent duplication with + # ZLIB_INFLATE; DECOMPRESS_GZIP is just a wrapper.) +diff --git a/lib/Makefile b/lib/Makefile +index e6a3763..f2f98dd 100644 +--- a/lib/Makefile ++++ b/lib/Makefile +@@ -69,6 +69,7 @@ obj-$(CONFIG_ZLIB_DEFLATE) += zlib_deflate/ + obj-$(CONFIG_REED_SOLOMON) += reed_solomon/ + obj-$(CONFIG_LZO_COMPRESS) += lzo/ + obj-$(CONFIG_LZO_DECOMPRESS) += lzo/ ++obj-$(CONFIG_XZ_DEC) += xz/ + obj-$(CONFIG_RAID6_PQ) += raid6/ + + lib-$(CONFIG_DECOMPRESS_GZIP) += decompress_inflate.o +diff --git a/lib/xz/Kconfig b/lib/xz/Kconfig +new file mode 100644 +index 0000000..e3b6e18 +--- /dev/null ++++ b/lib/xz/Kconfig +@@ -0,0 +1,59 @@ ++config XZ_DEC ++ tristate "XZ decompression support" ++ select CRC32 ++ help ++ LZMA2 compression algorithm and BCJ filters are supported using ++ the .xz file format as the container. For integrity checking, ++ CRC32 is supported. See Documentation/xz.txt for more information. ++ ++config XZ_DEC_X86 ++ bool "x86 BCJ filter decoder" if EMBEDDED ++ default y ++ depends on XZ_DEC ++ select XZ_DEC_BCJ ++ ++config XZ_DEC_POWERPC ++ bool "PowerPC BCJ filter decoder" if EMBEDDED ++ default y ++ depends on XZ_DEC ++ select XZ_DEC_BCJ ++ ++config XZ_DEC_IA64 ++ bool "IA-64 BCJ filter decoder" if EMBEDDED ++ default y ++ depends on XZ_DEC ++ select XZ_DEC_BCJ ++ ++config XZ_DEC_ARM ++ bool "ARM BCJ filter decoder" if EMBEDDED ++ default y ++ depends on XZ_DEC ++ select XZ_DEC_BCJ ++ ++config XZ_DEC_ARMTHUMB ++ bool "ARM-Thumb BCJ filter decoder" if EMBEDDED ++ default y ++ depends on XZ_DEC ++ select XZ_DEC_BCJ ++ ++config XZ_DEC_SPARC ++ bool "SPARC BCJ filter decoder" if EMBEDDED ++ default y ++ depends on XZ_DEC ++ select XZ_DEC_BCJ ++ ++config XZ_DEC_BCJ ++ bool ++ default n ++ ++config XZ_DEC_TEST ++ tristate "XZ decompressor tester" ++ default n ++ depends on XZ_DEC ++ help ++ This allows passing .xz files to the in-kernel XZ decoder via ++ a character special file. It calculates CRC32 of the decompressed ++ data and writes diagnostics to the system log. ++ ++ Unless you are developing the XZ decoder, you don't need this ++ and should say N. +diff --git a/lib/xz/Makefile b/lib/xz/Makefile +new file mode 100644 +index 0000000..a7fa769 +--- /dev/null ++++ b/lib/xz/Makefile +@@ -0,0 +1,5 @@ ++obj-$(CONFIG_XZ_DEC) += xz_dec.o ++xz_dec-y := xz_dec_syms.o xz_dec_stream.o xz_dec_lzma2.o ++xz_dec-$(CONFIG_XZ_DEC_BCJ) += xz_dec_bcj.o ++ ++obj-$(CONFIG_XZ_DEC_TEST) += xz_dec_test.o +diff --git a/lib/xz/xz_crc32.c b/lib/xz/xz_crc32.c +new file mode 100644 +index 0000000..34532d1 +--- /dev/null ++++ b/lib/xz/xz_crc32.c +@@ -0,0 +1,59 @@ ++/* ++ * CRC32 using the polynomial from IEEE-802.3 ++ * ++ * Authors: Lasse Collin ++ * Igor Pavlov ++ * ++ * This file has been put into the public domain. ++ * You can do whatever you want with this file. ++ */ ++ ++/* ++ * This is not the fastest implementation, but it is pretty compact. ++ * The fastest versions of xz_crc32() on modern CPUs without hardware ++ * accelerated CRC instruction are 3-5 times as fast as this version, ++ * but they are bigger and use more memory for the lookup table. ++ */ ++ ++#include "xz_private.h" ++ ++/* ++ * STATIC_RW_DATA is used in the pre-boot environment on some architectures. ++ * See for details. ++ */ ++#ifndef STATIC_RW_DATA ++# define STATIC_RW_DATA static ++#endif ++ ++STATIC_RW_DATA uint32_t xz_crc32_table[256]; ++ ++XZ_EXTERN void xz_crc32_init(void) ++{ ++ const uint32_t poly = 0xEDB88320; ++ ++ uint32_t i; ++ uint32_t j; ++ uint32_t r; ++ ++ for (i = 0; i < 256; ++i) { ++ r = i; ++ for (j = 0; j < 8; ++j) ++ r = (r >> 1) ^ (poly & ~((r & 1) - 1)); ++ ++ xz_crc32_table[i] = r; ++ } ++ ++ return; ++} ++ ++XZ_EXTERN uint32_t xz_crc32(const uint8_t *buf, size_t size, uint32_t crc) ++{ ++ crc = ~crc; ++ ++ while (size != 0) { ++ crc = xz_crc32_table[*buf++ ^ (crc & 0xFF)] ^ (crc >> 8); ++ --size; ++ } ++ ++ return ~crc; ++} +diff --git a/lib/xz/xz_dec_bcj.c b/lib/xz/xz_dec_bcj.c +new file mode 100644 +index 0000000..e51e255 +--- /dev/null ++++ b/lib/xz/xz_dec_bcj.c +@@ -0,0 +1,561 @@ ++/* ++ * Branch/Call/Jump (BCJ) filter decoders ++ * ++ * Authors: Lasse Collin ++ * Igor Pavlov ++ * ++ * This file has been put into the public domain. ++ * You can do whatever you want with this file. ++ */ ++ ++#include "xz_private.h" ++ ++/* ++ * The rest of the file is inside this ifdef. It makes things a little more ++ * convenient when building without support for any BCJ filters. ++ */ ++#ifdef XZ_DEC_BCJ ++ ++struct xz_dec_bcj { ++ /* Type of the BCJ filter being used */ ++ enum { ++ BCJ_X86 = 4, /* x86 or x86-64 */ ++ BCJ_POWERPC = 5, /* Big endian only */ ++ BCJ_IA64 = 6, /* Big or little endian */ ++ BCJ_ARM = 7, /* Little endian only */ ++ BCJ_ARMTHUMB = 8, /* Little endian only */ ++ BCJ_SPARC = 9 /* Big or little endian */ ++ } type; ++ ++ /* ++ * Return value of the next filter in the chain. We need to preserve ++ * this information across calls, because we must not call the next ++ * filter anymore once it has returned XZ_STREAM_END. ++ */ ++ enum xz_ret ret; ++ ++ /* True if we are operating in single-call mode. */ ++ bool single_call; ++ ++ /* ++ * Absolute position relative to the beginning of the uncompressed ++ * data (in a single .xz Block). We care only about the lowest 32 ++ * bits so this doesn't need to be uint64_t even with big files. ++ */ ++ uint32_t pos; ++ ++ /* x86 filter state */ ++ uint32_t x86_prev_mask; ++ ++ /* Temporary space to hold the variables from struct xz_buf */ ++ uint8_t *out; ++ size_t out_pos; ++ size_t out_size; ++ ++ struct { ++ /* Amount of already filtered data in the beginning of buf */ ++ size_t filtered; ++ ++ /* Total amount of data currently stored in buf */ ++ size_t size; ++ ++ /* ++ * Buffer to hold a mix of filtered and unfiltered data. This ++ * needs to be big enough to hold Alignment + 2 * Look-ahead: ++ * ++ * Type Alignment Look-ahead ++ * x86 1 4 ++ * PowerPC 4 0 ++ * IA-64 16 0 ++ * ARM 4 0 ++ * ARM-Thumb 2 2 ++ * SPARC 4 0 ++ */ ++ uint8_t buf[16]; ++ } temp; ++}; ++ ++#ifdef XZ_DEC_X86 ++/* ++ * This is used to test the most significant byte of a memory address ++ * in an x86 instruction. ++ */ ++static inline int bcj_x86_test_msbyte(uint8_t b) ++{ ++ return b == 0x00 || b == 0xFF; ++} ++ ++static size_t bcj_x86(struct xz_dec_bcj *s, uint8_t *buf, size_t size) ++{ ++ static const bool mask_to_allowed_status[8] ++ = { true, true, true, false, true, false, false, false }; ++ ++ static const uint8_t mask_to_bit_num[8] = { 0, 1, 2, 2, 3, 3, 3, 3 }; ++ ++ size_t i; ++ size_t prev_pos = (size_t)-1; ++ uint32_t prev_mask = s->x86_prev_mask; ++ uint32_t src; ++ uint32_t dest; ++ uint32_t j; ++ uint8_t b; ++ ++ if (size <= 4) ++ return 0; ++ ++ size -= 4; ++ for (i = 0; i < size; ++i) { ++ if ((buf[i] & 0xFE) != 0xE8) ++ continue; ++ ++ prev_pos = i - prev_pos; ++ if (prev_pos > 3) { ++ prev_mask = 0; ++ } else { ++ prev_mask = (prev_mask << (prev_pos - 1)) & 7; ++ if (prev_mask != 0) { ++ b = buf[i + 4 - mask_to_bit_num[prev_mask]]; ++ if (!mask_to_allowed_status[prev_mask] ++ || bcj_x86_test_msbyte(b)) { ++ prev_pos = i; ++ prev_mask = (prev_mask << 1) | 1; ++ continue; ++ } ++ } ++ } ++ ++ prev_pos = i; ++ ++ if (bcj_x86_test_msbyte(buf[i + 4])) { ++ src = get_unaligned_le32(buf + i + 1); ++ while (true) { ++ dest = src - (s->pos + (uint32_t)i + 5); ++ if (prev_mask == 0) ++ break; ++ ++ j = mask_to_bit_num[prev_mask] * 8; ++ b = (uint8_t)(dest >> (24 - j)); ++ if (!bcj_x86_test_msbyte(b)) ++ break; ++ ++ src = dest ^ (((uint32_t)1 << (32 - j)) - 1); ++ } ++ ++ dest &= 0x01FFFFFF; ++ dest |= (uint32_t)0 - (dest & 0x01000000); ++ put_unaligned_le32(dest, buf + i + 1); ++ i += 4; ++ } else { ++ prev_mask = (prev_mask << 1) | 1; ++ } ++ } ++ ++ prev_pos = i - prev_pos; ++ s->x86_prev_mask = prev_pos > 3 ? 0 : prev_mask << (prev_pos - 1); ++ return i; ++} ++#endif ++ ++#ifdef XZ_DEC_POWERPC ++static size_t bcj_powerpc(struct xz_dec_bcj *s, uint8_t *buf, size_t size) ++{ ++ size_t i; ++ uint32_t instr; ++ ++ for (i = 0; i + 4 <= size; i += 4) { ++ instr = get_unaligned_be32(buf + i); ++ if ((instr & 0xFC000003) == 0x48000001) { ++ instr &= 0x03FFFFFC; ++ instr -= s->pos + (uint32_t)i; ++ instr &= 0x03FFFFFC; ++ instr |= 0x48000001; ++ put_unaligned_be32(instr, buf + i); ++ } ++ } ++ ++ return i; ++} ++#endif ++ ++#ifdef XZ_DEC_IA64 ++static size_t bcj_ia64(struct xz_dec_bcj *s, uint8_t *buf, size_t size) ++{ ++ static const uint8_t branch_table[32] = { ++ 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, ++ 4, 4, 6, 6, 0, 0, 7, 7, ++ 4, 4, 0, 0, 4, 4, 0, 0 ++ }; ++ ++ /* ++ * The local variables take a little bit stack space, but it's less ++ * than what LZMA2 decoder takes, so it doesn't make sense to reduce ++ * stack usage here without doing that for the LZMA2 decoder too. ++ */ ++ ++ /* Loop counters */ ++ size_t i; ++ size_t j; ++ ++ /* Instruction slot (0, 1, or 2) in the 128-bit instruction word */ ++ uint32_t slot; ++ ++ /* Bitwise offset of the instruction indicated by slot */ ++ uint32_t bit_pos; ++ ++ /* bit_pos split into byte and bit parts */ ++ uint32_t byte_pos; ++ uint32_t bit_res; ++ ++ /* Address part of an instruction */ ++ uint32_t addr; ++ ++ /* Mask used to detect which instructions to convert */ ++ uint32_t mask; ++ ++ /* 41-bit instruction stored somewhere in the lowest 48 bits */ ++ uint64_t instr; ++ ++ /* Instruction normalized with bit_res for easier manipulation */ ++ uint64_t norm; ++ ++ for (i = 0; i + 16 <= size; i += 16) { ++ mask = branch_table[buf[i] & 0x1F]; ++ for (slot = 0, bit_pos = 5; slot < 3; ++slot, bit_pos += 41) { ++ if (((mask >> slot) & 1) == 0) ++ continue; ++ ++ byte_pos = bit_pos >> 3; ++ bit_res = bit_pos & 7; ++ instr = 0; ++ for (j = 0; j < 6; ++j) ++ instr |= (uint64_t)(buf[i + j + byte_pos]) ++ << (8 * j); ++ ++ norm = instr >> bit_res; ++ ++ if (((norm >> 37) & 0x0F) == 0x05 ++ && ((norm >> 9) & 0x07) == 0) { ++ addr = (norm >> 13) & 0x0FFFFF; ++ addr |= ((uint32_t)(norm >> 36) & 1) << 20; ++ addr <<= 4; ++ addr -= s->pos + (uint32_t)i; ++ addr >>= 4; ++ ++ norm &= ~((uint64_t)0x8FFFFF << 13); ++ norm |= (uint64_t)(addr & 0x0FFFFF) << 13; ++ norm |= (uint64_t)(addr & 0x100000) ++ << (36 - 20); ++ ++ instr &= (1 << bit_res) - 1; ++ instr |= norm << bit_res; ++ ++ for (j = 0; j < 6; j++) ++ buf[i + j + byte_pos] ++ = (uint8_t)(instr >> (8 * j)); ++ } ++ } ++ } ++ ++ return i; ++} ++#endif ++ ++#ifdef XZ_DEC_ARM ++static size_t bcj_arm(struct xz_dec_bcj *s, uint8_t *buf, size_t size) ++{ ++ size_t i; ++ uint32_t addr; ++ ++ for (i = 0; i + 4 <= size; i += 4) { ++ if (buf[i + 3] == 0xEB) { ++ addr = (uint32_t)buf[i] | ((uint32_t)buf[i + 1] << 8) ++ | ((uint32_t)buf[i + 2] << 16); ++ addr <<= 2; ++ addr -= s->pos + (uint32_t)i + 8; ++ addr >>= 2; ++ buf[i] = (uint8_t)addr; ++ buf[i + 1] = (uint8_t)(addr >> 8); ++ buf[i + 2] = (uint8_t)(addr >> 16); ++ } ++ } ++ ++ return i; ++} ++#endif ++ ++#ifdef XZ_DEC_ARMTHUMB ++static size_t bcj_armthumb(struct xz_dec_bcj *s, uint8_t *buf, size_t size) ++{ ++ size_t i; ++ uint32_t addr; ++ ++ for (i = 0; i + 4 <= size; i += 2) { ++ if ((buf[i + 1] & 0xF8) == 0xF0 ++ && (buf[i + 3] & 0xF8) == 0xF8) { ++ addr = (((uint32_t)buf[i + 1] & 0x07) << 19) ++ | ((uint32_t)buf[i] << 11) ++ | (((uint32_t)buf[i + 3] & 0x07) << 8) ++ | (uint32_t)buf[i + 2]; ++ addr <<= 1; ++ addr -= s->pos + (uint32_t)i + 4; ++ addr >>= 1; ++ buf[i + 1] = (uint8_t)(0xF0 | ((addr >> 19) & 0x07)); ++ buf[i] = (uint8_t)(addr >> 11); ++ buf[i + 3] = (uint8_t)(0xF8 | ((addr >> 8) & 0x07)); ++ buf[i + 2] = (uint8_t)addr; ++ i += 2; ++ } ++ } ++ ++ return i; ++} ++#endif ++ ++#ifdef XZ_DEC_SPARC ++static size_t bcj_sparc(struct xz_dec_bcj *s, uint8_t *buf, size_t size) ++{ ++ size_t i; ++ uint32_t instr; ++ ++ for (i = 0; i + 4 <= size; i += 4) { ++ instr = get_unaligned_be32(buf + i); ++ if ((instr >> 22) == 0x100 || (instr >> 22) == 0x1FF) { ++ instr <<= 2; ++ instr -= s->pos + (uint32_t)i; ++ instr >>= 2; ++ instr = ((uint32_t)0x40000000 - (instr & 0x400000)) ++ | 0x40000000 | (instr & 0x3FFFFF); ++ put_unaligned_be32(instr, buf + i); ++ } ++ } ++ ++ return i; ++} ++#endif ++ ++/* ++ * Apply the selected BCJ filter. Update *pos and s->pos to match the amount ++ * of data that got filtered. ++ * ++ * NOTE: This is implemented as a switch statement to avoid using function ++ * pointers, which could be problematic in the kernel boot code, which must ++ * avoid pointers to static data (at least on x86). ++ */ ++static void bcj_apply(struct xz_dec_bcj *s, ++ uint8_t *buf, size_t *pos, size_t size) ++{ ++ size_t filtered; ++ ++ buf += *pos; ++ size -= *pos; ++ ++ switch (s->type) { ++#ifdef XZ_DEC_X86 ++ case BCJ_X86: ++ filtered = bcj_x86(s, buf, size); ++ break; ++#endif ++#ifdef XZ_DEC_POWERPC ++ case BCJ_POWERPC: ++ filtered = bcj_powerpc(s, buf, size); ++ break; ++#endif ++#ifdef XZ_DEC_IA64 ++ case BCJ_IA64: ++ filtered = bcj_ia64(s, buf, size); ++ break; ++#endif ++#ifdef XZ_DEC_ARM ++ case BCJ_ARM: ++ filtered = bcj_arm(s, buf, size); ++ break; ++#endif ++#ifdef XZ_DEC_ARMTHUMB ++ case BCJ_ARMTHUMB: ++ filtered = bcj_armthumb(s, buf, size); ++ break; ++#endif ++#ifdef XZ_DEC_SPARC ++ case BCJ_SPARC: ++ filtered = bcj_sparc(s, buf, size); ++ break; ++#endif ++ default: ++ /* Never reached but silence compiler warnings. */ ++ filtered = 0; ++ break; ++ } ++ ++ *pos += filtered; ++ s->pos += filtered; ++} ++ ++/* ++ * Flush pending filtered data from temp to the output buffer. ++ * Move the remaining mixture of possibly filtered and unfiltered ++ * data to the beginning of temp. ++ */ ++static void bcj_flush(struct xz_dec_bcj *s, struct xz_buf *b) ++{ ++ size_t copy_size; ++ ++ copy_size = min_t(size_t, s->temp.filtered, b->out_size - b->out_pos); ++ memcpy(b->out + b->out_pos, s->temp.buf, copy_size); ++ b->out_pos += copy_size; ++ ++ s->temp.filtered -= copy_size; ++ s->temp.size -= copy_size; ++ memmove(s->temp.buf, s->temp.buf + copy_size, s->temp.size); ++} ++ ++/* ++ * The BCJ filter functions are primitive in sense that they process the ++ * data in chunks of 1-16 bytes. To hide this issue, this function does ++ * some buffering. ++ */ ++XZ_EXTERN enum xz_ret xz_dec_bcj_run(struct xz_dec_bcj *s, ++ struct xz_dec_lzma2 *lzma2, ++ struct xz_buf *b) ++{ ++ size_t out_start; ++ ++ /* ++ * Flush pending already filtered data to the output buffer. Return ++ * immediatelly if we couldn't flush everything, or if the next ++ * filter in the chain had already returned XZ_STREAM_END. ++ */ ++ if (s->temp.filtered > 0) { ++ bcj_flush(s, b); ++ if (s->temp.filtered > 0) ++ return XZ_OK; ++ ++ if (s->ret == XZ_STREAM_END) ++ return XZ_STREAM_END; ++ } ++ ++ /* ++ * If we have more output space than what is currently pending in ++ * temp, copy the unfiltered data from temp to the output buffer ++ * and try to fill the output buffer by decoding more data from the ++ * next filter in the chain. Apply the BCJ filter on the new data ++ * in the output buffer. If everything cannot be filtered, copy it ++ * to temp and rewind the output buffer position accordingly. ++ */ ++ if (s->temp.size < b->out_size - b->out_pos) { ++ out_start = b->out_pos; ++ memcpy(b->out + b->out_pos, s->temp.buf, s->temp.size); ++ b->out_pos += s->temp.size; ++ ++ s->ret = xz_dec_lzma2_run(lzma2, b); ++ if (s->ret != XZ_STREAM_END ++ && (s->ret != XZ_OK || s->single_call)) ++ return s->ret; ++ ++ bcj_apply(s, b->out, &out_start, b->out_pos); ++ ++ /* ++ * As an exception, if the next filter returned XZ_STREAM_END, ++ * we can do that too, since the last few bytes that remain ++ * unfiltered are meant to remain unfiltered. ++ */ ++ if (s->ret == XZ_STREAM_END) ++ return XZ_STREAM_END; ++ ++ s->temp.size = b->out_pos - out_start; ++ b->out_pos -= s->temp.size; ++ memcpy(s->temp.buf, b->out + b->out_pos, s->temp.size); ++ } ++ ++ /* ++ * If we have unfiltered data in temp, try to fill by decoding more ++ * data from the next filter. Apply the BCJ filter on temp. Then we ++ * hopefully can fill the actual output buffer by copying filtered ++ * data from temp. A mix of filtered and unfiltered data may be left ++ * in temp; it will be taken care on the next call to this function. ++ */ ++ if (s->temp.size > 0) { ++ /* Make b->out{,_pos,_size} temporarily point to s->temp. */ ++ s->out = b->out; ++ s->out_pos = b->out_pos; ++ s->out_size = b->out_size; ++ b->out = s->temp.buf; ++ b->out_pos = s->temp.size; ++ b->out_size = sizeof(s->temp.buf); ++ ++ s->ret = xz_dec_lzma2_run(lzma2, b); ++ ++ s->temp.size = b->out_pos; ++ b->out = s->out; ++ b->out_pos = s->out_pos; ++ b->out_size = s->out_size; ++ ++ if (s->ret != XZ_OK && s->ret != XZ_STREAM_END) ++ return s->ret; ++ ++ bcj_apply(s, s->temp.buf, &s->temp.filtered, s->temp.size); ++ ++ /* ++ * If the next filter returned XZ_STREAM_END, we mark that ++ * everything is filtered, since the last unfiltered bytes ++ * of the stream are meant to be left as is. ++ */ ++ if (s->ret == XZ_STREAM_END) ++ s->temp.filtered = s->temp.size; ++ ++ bcj_flush(s, b); ++ if (s->temp.filtered > 0) ++ return XZ_OK; ++ } ++ ++ return s->ret; ++} ++ ++XZ_EXTERN struct xz_dec_bcj *xz_dec_bcj_create(bool single_call) ++{ ++ struct xz_dec_bcj *s = kmalloc(sizeof(*s), GFP_KERNEL); ++ if (s != NULL) ++ s->single_call = single_call; ++ ++ return s; ++} ++ ++XZ_EXTERN enum xz_ret xz_dec_bcj_reset(struct xz_dec_bcj *s, uint8_t id) ++{ ++ switch (id) { ++#ifdef XZ_DEC_X86 ++ case BCJ_X86: ++#endif ++#ifdef XZ_DEC_POWERPC ++ case BCJ_POWERPC: ++#endif ++#ifdef XZ_DEC_IA64 ++ case BCJ_IA64: ++#endif ++#ifdef XZ_DEC_ARM ++ case BCJ_ARM: ++#endif ++#ifdef XZ_DEC_ARMTHUMB ++ case BCJ_ARMTHUMB: ++#endif ++#ifdef XZ_DEC_SPARC ++ case BCJ_SPARC: ++#endif ++ break; ++ ++ default: ++ /* Unsupported Filter ID */ ++ return XZ_OPTIONS_ERROR; ++ } ++ ++ s->type = id; ++ s->ret = XZ_OK; ++ s->pos = 0; ++ s->x86_prev_mask = 0; ++ s->temp.filtered = 0; ++ s->temp.size = 0; ++ ++ return XZ_OK; ++} ++ ++#endif +diff --git a/lib/xz/xz_dec_lzma2.c b/lib/xz/xz_dec_lzma2.c +new file mode 100644 +index 0000000..ea5fa4f +--- /dev/null ++++ b/lib/xz/xz_dec_lzma2.c +@@ -0,0 +1,1171 @@ ++/* ++ * LZMA2 decoder ++ * ++ * Authors: Lasse Collin ++ * Igor Pavlov ++ * ++ * This file has been put into the public domain. ++ * You can do whatever you want with this file. ++ */ ++ ++#include "xz_private.h" ++#include "xz_lzma2.h" ++ ++/* ++ * Range decoder initialization eats the first five bytes of each LZMA chunk. ++ */ ++#define RC_INIT_BYTES 5 ++ ++/* ++ * Minimum number of usable input buffer to safely decode one LZMA symbol. ++ * The worst case is that we decode 22 bits using probabilities and 26 ++ * direct bits. This may decode at maximum of 20 bytes of input. However, ++ * lzma_main() does an extra normalization before returning, thus we ++ * need to put 21 here. ++ */ ++#define LZMA_IN_REQUIRED 21 ++ ++/* ++ * Dictionary (history buffer) ++ * ++ * These are always true: ++ * start <= pos <= full <= end ++ * pos <= limit <= end ++ * ++ * In multi-call mode, also these are true: ++ * end == size ++ * size <= size_max ++ * allocated <= size ++ * ++ * Most of these variables are size_t to support single-call mode, ++ * in which the dictionary variables address the actual output ++ * buffer directly. ++ */ ++struct dictionary { ++ /* Beginning of the history buffer */ ++ uint8_t *buf; ++ ++ /* Old position in buf (before decoding more data) */ ++ size_t start; ++ ++ /* Position in buf */ ++ size_t pos; ++ ++ /* ++ * How full dictionary is. This is used to detect corrupt input that ++ * would read beyond the beginning of the uncompressed stream. ++ */ ++ size_t full; ++ ++ /* Write limit; we don't write to buf[limit] or later bytes. */ ++ size_t limit; ++ ++ /* ++ * End of the dictionary buffer. In multi-call mode, this is ++ * the same as the dictionary size. In single-call mode, this ++ * indicates the size of the output buffer. ++ */ ++ size_t end; ++ ++ /* ++ * Size of the dictionary as specified in Block Header. This is used ++ * together with "full" to detect corrupt input that would make us ++ * read beyond the beginning of the uncompressed stream. ++ */ ++ uint32_t size; ++ ++ /* ++ * Maximum allowed dictionary size in multi-call mode. ++ * This is ignored in single-call mode. ++ */ ++ uint32_t size_max; ++ ++ /* ++ * Amount of memory currently allocated for the dictionary. ++ * This is used only with XZ_DYNALLOC. (With XZ_PREALLOC, ++ * size_max is always the same as the allocated size.) ++ */ ++ uint32_t allocated; ++ ++ /* Operation mode */ ++ enum xz_mode mode; ++}; ++ ++/* Range decoder */ ++struct rc_dec { ++ uint32_t range; ++ uint32_t code; ++ ++ /* ++ * Number of initializing bytes remaining to be read ++ * by rc_read_init(). ++ */ ++ uint32_t init_bytes_left; ++ ++ /* ++ * Buffer from which we read our input. It can be either ++ * temp.buf or the caller-provided input buffer. ++ */ ++ const uint8_t *in; ++ size_t in_pos; ++ size_t in_limit; ++}; ++ ++/* Probabilities for a length decoder. */ ++struct lzma_len_dec { ++ /* Probability of match length being at least 10 */ ++ uint16_t choice; ++ ++ /* Probability of match length being at least 18 */ ++ uint16_t choice2; ++ ++ /* Probabilities for match lengths 2-9 */ ++ uint16_t low[POS_STATES_MAX][LEN_LOW_SYMBOLS]; ++ ++ /* Probabilities for match lengths 10-17 */ ++ uint16_t mid[POS_STATES_MAX][LEN_MID_SYMBOLS]; ++ ++ /* Probabilities for match lengths 18-273 */ ++ uint16_t high[LEN_HIGH_SYMBOLS]; ++}; ++ ++struct lzma_dec { ++ /* Distances of latest four matches */ ++ uint32_t rep0; ++ uint32_t rep1; ++ uint32_t rep2; ++ uint32_t rep3; ++ ++ /* Types of the most recently seen LZMA symbols */ ++ enum lzma_state state; ++ ++ /* ++ * Length of a match. This is updated so that dict_repeat can ++ * be called again to finish repeating the whole match. ++ */ ++ uint32_t len; ++ ++ /* ++ * LZMA properties or related bit masks (number of literal ++ * context bits, a mask dervied from the number of literal ++ * position bits, and a mask dervied from the number ++ * position bits) ++ */ ++ uint32_t lc; ++ uint32_t literal_pos_mask; /* (1 << lp) - 1 */ ++ uint32_t pos_mask; /* (1 << pb) - 1 */ ++ ++ /* If 1, it's a match. Otherwise it's a single 8-bit literal. */ ++ uint16_t is_match[STATES][POS_STATES_MAX]; ++ ++ /* If 1, it's a repeated match. The distance is one of rep0 .. rep3. */ ++ uint16_t is_rep[STATES]; ++ ++ /* ++ * If 0, distance of a repeated match is rep0. ++ * Otherwise check is_rep1. ++ */ ++ uint16_t is_rep0[STATES]; ++ ++ /* ++ * If 0, distance of a repeated match is rep1. ++ * Otherwise check is_rep2. ++ */ ++ uint16_t is_rep1[STATES]; ++ ++ /* If 0, distance of a repeated match is rep2. Otherwise it is rep3. */ ++ uint16_t is_rep2[STATES]; ++ ++ /* ++ * If 1, the repeated match has length of one byte. Otherwise ++ * the length is decoded from rep_len_decoder. ++ */ ++ uint16_t is_rep0_long[STATES][POS_STATES_MAX]; ++ ++ /* ++ * Probability tree for the highest two bits of the match ++ * distance. There is a separate probability tree for match ++ * lengths of 2 (i.e. MATCH_LEN_MIN), 3, 4, and [5, 273]. ++ */ ++ uint16_t dist_slot[DIST_STATES][DIST_SLOTS]; ++ ++ /* ++ * Probility trees for additional bits for match distance ++ * when the distance is in the range [4, 127]. ++ */ ++ uint16_t dist_special[FULL_DISTANCES - DIST_MODEL_END]; ++ ++ /* ++ * Probability tree for the lowest four bits of a match ++ * distance that is equal to or greater than 128. ++ */ ++ uint16_t dist_align[ALIGN_SIZE]; ++ ++ /* Length of a normal match */ ++ struct lzma_len_dec match_len_dec; ++ ++ /* Length of a repeated match */ ++ struct lzma_len_dec rep_len_dec; ++ ++ /* Probabilities of literals */ ++ uint16_t literal[LITERAL_CODERS_MAX][LITERAL_CODER_SIZE]; ++}; ++ ++struct lzma2_dec { ++ /* Position in xz_dec_lzma2_run(). */ ++ enum lzma2_seq { ++ SEQ_CONTROL, ++ SEQ_UNCOMPRESSED_1, ++ SEQ_UNCOMPRESSED_2, ++ SEQ_COMPRESSED_0, ++ SEQ_COMPRESSED_1, ++ SEQ_PROPERTIES, ++ SEQ_LZMA_PREPARE, ++ SEQ_LZMA_RUN, ++ SEQ_COPY ++ } sequence; ++ ++ /* Next position after decoding the compressed size of the chunk. */ ++ enum lzma2_seq next_sequence; ++ ++ /* Uncompressed size of LZMA chunk (2 MiB at maximum) */ ++ uint32_t uncompressed; ++ ++ /* ++ * Compressed size of LZMA chunk or compressed/uncompressed ++ * size of uncompressed chunk (64 KiB at maximum) ++ */ ++ uint32_t compressed; ++ ++ /* ++ * True if dictionary reset is needed. This is false before ++ * the first chunk (LZMA or uncompressed). ++ */ ++ bool need_dict_reset; ++ ++ /* ++ * True if new LZMA properties are needed. This is false ++ * before the first LZMA chunk. ++ */ ++ bool need_props; ++}; ++ ++struct xz_dec_lzma2 { ++ /* ++ * The order below is important on x86 to reduce code size and ++ * it shouldn't hurt on other platforms. Everything up to and ++ * including lzma.pos_mask are in the first 128 bytes on x86-32, ++ * which allows using smaller instructions to access those ++ * variables. On x86-64, fewer variables fit into the first 128 ++ * bytes, but this is still the best order without sacrificing ++ * the readability by splitting the structures. ++ */ ++ struct rc_dec rc; ++ struct dictionary dict; ++ struct lzma2_dec lzma2; ++ struct lzma_dec lzma; ++ ++ /* ++ * Temporary buffer which holds small number of input bytes between ++ * decoder calls. See lzma2_lzma() for details. ++ */ ++ struct { ++ uint32_t size; ++ uint8_t buf[3 * LZMA_IN_REQUIRED]; ++ } temp; ++}; ++ ++/************** ++ * Dictionary * ++ **************/ ++ ++/* ++ * Reset the dictionary state. When in single-call mode, set up the beginning ++ * of the dictionary to point to the actual output buffer. ++ */ ++static void dict_reset(struct dictionary *dict, struct xz_buf *b) ++{ ++ if (DEC_IS_SINGLE(dict->mode)) { ++ dict->buf = b->out + b->out_pos; ++ dict->end = b->out_size - b->out_pos; ++ } ++ ++ dict->start = 0; ++ dict->pos = 0; ++ dict->limit = 0; ++ dict->full = 0; ++} ++ ++/* Set dictionary write limit */ ++static void dict_limit(struct dictionary *dict, size_t out_max) ++{ ++ if (dict->end - dict->pos <= out_max) ++ dict->limit = dict->end; ++ else ++ dict->limit = dict->pos + out_max; ++} ++ ++/* Return true if at least one byte can be written into the dictionary. */ ++static inline bool dict_has_space(const struct dictionary *dict) ++{ ++ return dict->pos < dict->limit; ++} ++ ++/* ++ * Get a byte from the dictionary at the given distance. The distance is ++ * assumed to valid, or as a special case, zero when the dictionary is ++ * still empty. This special case is needed for single-call decoding to ++ * avoid writing a '\0' to the end of the destination buffer. ++ */ ++static inline uint32_t dict_get(const struct dictionary *dict, uint32_t dist) ++{ ++ size_t offset = dict->pos - dist - 1; ++ ++ if (dist >= dict->pos) ++ offset += dict->end; ++ ++ return dict->full > 0 ? dict->buf[offset] : 0; ++} ++ ++/* ++ * Put one byte into the dictionary. It is assumed that there is space for it. ++ */ ++static inline void dict_put(struct dictionary *dict, uint8_t byte) ++{ ++ dict->buf[dict->pos++] = byte; ++ ++ if (dict->full < dict->pos) ++ dict->full = dict->pos; ++} ++ ++/* ++ * Repeat given number of bytes from the given distance. If the distance is ++ * invalid, false is returned. On success, true is returned and *len is ++ * updated to indicate how many bytes were left to be repeated. ++ */ ++static bool dict_repeat(struct dictionary *dict, uint32_t *len, uint32_t dist) ++{ ++ size_t back; ++ uint32_t left; ++ ++ if (dist >= dict->full || dist >= dict->size) ++ return false; ++ ++ left = min_t(size_t, dict->limit - dict->pos, *len); ++ *len -= left; ++ ++ back = dict->pos - dist - 1; ++ if (dist >= dict->pos) ++ back += dict->end; ++ ++ do { ++ dict->buf[dict->pos++] = dict->buf[back++]; ++ if (back == dict->end) ++ back = 0; ++ } while (--left > 0); ++ ++ if (dict->full < dict->pos) ++ dict->full = dict->pos; ++ ++ return true; ++} ++ ++/* Copy uncompressed data as is from input to dictionary and output buffers. */ ++static void dict_uncompressed(struct dictionary *dict, struct xz_buf *b, ++ uint32_t *left) ++{ ++ size_t copy_size; ++ ++ while (*left > 0 && b->in_pos < b->in_size ++ && b->out_pos < b->out_size) { ++ copy_size = min(b->in_size - b->in_pos, ++ b->out_size - b->out_pos); ++ if (copy_size > dict->end - dict->pos) ++ copy_size = dict->end - dict->pos; ++ if (copy_size > *left) ++ copy_size = *left; ++ ++ *left -= copy_size; ++ ++ memcpy(dict->buf + dict->pos, b->in + b->in_pos, copy_size); ++ dict->pos += copy_size; ++ ++ if (dict->full < dict->pos) ++ dict->full = dict->pos; ++ ++ if (DEC_IS_MULTI(dict->mode)) { ++ if (dict->pos == dict->end) ++ dict->pos = 0; ++ ++ memcpy(b->out + b->out_pos, b->in + b->in_pos, ++ copy_size); ++ } ++ ++ dict->start = dict->pos; ++ ++ b->out_pos += copy_size; ++ b->in_pos += copy_size; ++ } ++} ++ ++/* ++ * Flush pending data from dictionary to b->out. It is assumed that there is ++ * enough space in b->out. This is guaranteed because caller uses dict_limit() ++ * before decoding data into the dictionary. ++ */ ++static uint32_t dict_flush(struct dictionary *dict, struct xz_buf *b) ++{ ++ size_t copy_size = dict->pos - dict->start; ++ ++ if (DEC_IS_MULTI(dict->mode)) { ++ if (dict->pos == dict->end) ++ dict->pos = 0; ++ ++ memcpy(b->out + b->out_pos, dict->buf + dict->start, ++ copy_size); ++ } ++ ++ dict->start = dict->pos; ++ b->out_pos += copy_size; ++ return copy_size; ++} ++ ++/***************** ++ * Range decoder * ++ *****************/ ++ ++/* Reset the range decoder. */ ++static void rc_reset(struct rc_dec *rc) ++{ ++ rc->range = (uint32_t)-1; ++ rc->code = 0; ++ rc->init_bytes_left = RC_INIT_BYTES; ++} ++ ++/* ++ * Read the first five initial bytes into rc->code if they haven't been ++ * read already. (Yes, the first byte gets completely ignored.) ++ */ ++static bool rc_read_init(struct rc_dec *rc, struct xz_buf *b) ++{ ++ while (rc->init_bytes_left > 0) { ++ if (b->in_pos == b->in_size) ++ return false; ++ ++ rc->code = (rc->code << 8) + b->in[b->in_pos++]; ++ --rc->init_bytes_left; ++ } ++ ++ return true; ++} ++ ++/* Return true if there may not be enough input for the next decoding loop. */ ++static inline bool rc_limit_exceeded(const struct rc_dec *rc) ++{ ++ return rc->in_pos > rc->in_limit; ++} ++ ++/* ++ * Return true if it is possible (from point of view of range decoder) that ++ * we have reached the end of the LZMA chunk. ++ */ ++static inline bool rc_is_finished(const struct rc_dec *rc) ++{ ++ return rc->code == 0; ++} ++ ++/* Read the next input byte if needed. */ ++static __always_inline void rc_normalize(struct rc_dec *rc) ++{ ++ if (rc->range < RC_TOP_VALUE) { ++ rc->range <<= RC_SHIFT_BITS; ++ rc->code = (rc->code << RC_SHIFT_BITS) + rc->in[rc->in_pos++]; ++ } ++} ++ ++/* ++ * Decode one bit. In some versions, this function has been splitted in three ++ * functions so that the compiler is supposed to be able to more easily avoid ++ * an extra branch. In this particular version of the LZMA decoder, this ++ * doesn't seem to be a good idea (tested with GCC 3.3.6, 3.4.6, and 4.3.3 ++ * on x86). Using a non-splitted version results in nicer looking code too. ++ * ++ * NOTE: This must return an int. Do not make it return a bool or the speed ++ * of the code generated by GCC 3.x decreases 10-15 %. (GCC 4.3 doesn't care, ++ * and it generates 10-20 % faster code than GCC 3.x from this file anyway.) ++ */ ++static __always_inline int rc_bit(struct rc_dec *rc, uint16_t *prob) ++{ ++ uint32_t bound; ++ int bit; ++ ++ rc_normalize(rc); ++ bound = (rc->range >> RC_BIT_MODEL_TOTAL_BITS) * *prob; ++ if (rc->code < bound) { ++ rc->range = bound; ++ *prob += (RC_BIT_MODEL_TOTAL - *prob) >> RC_MOVE_BITS; ++ bit = 0; ++ } else { ++ rc->range -= bound; ++ rc->code -= bound; ++ *prob -= *prob >> RC_MOVE_BITS; ++ bit = 1; ++ } ++ ++ return bit; ++} ++ ++/* Decode a bittree starting from the most significant bit. */ ++static __always_inline uint32_t rc_bittree(struct rc_dec *rc, ++ uint16_t *probs, uint32_t limit) ++{ ++ uint32_t symbol = 1; ++ ++ do { ++ if (rc_bit(rc, &probs[symbol])) ++ symbol = (symbol << 1) + 1; ++ else ++ symbol <<= 1; ++ } while (symbol < limit); ++ ++ return symbol; ++} ++ ++/* Decode a bittree starting from the least significant bit. */ ++static __always_inline void rc_bittree_reverse(struct rc_dec *rc, ++ uint16_t *probs, ++ uint32_t *dest, uint32_t limit) ++{ ++ uint32_t symbol = 1; ++ uint32_t i = 0; ++ ++ do { ++ if (rc_bit(rc, &probs[symbol])) { ++ symbol = (symbol << 1) + 1; ++ *dest += 1 << i; ++ } else { ++ symbol <<= 1; ++ } ++ } while (++i < limit); ++} ++ ++/* Decode direct bits (fixed fifty-fifty probability) */ ++static inline void rc_direct(struct rc_dec *rc, uint32_t *dest, uint32_t limit) ++{ ++ uint32_t mask; ++ ++ do { ++ rc_normalize(rc); ++ rc->range >>= 1; ++ rc->code -= rc->range; ++ mask = (uint32_t)0 - (rc->code >> 31); ++ rc->code += rc->range & mask; ++ *dest = (*dest << 1) + (mask + 1); ++ } while (--limit > 0); ++} ++ ++/******** ++ * LZMA * ++ ********/ ++ ++/* Get pointer to literal coder probability array. */ ++static uint16_t *lzma_literal_probs(struct xz_dec_lzma2 *s) ++{ ++ uint32_t prev_byte = dict_get(&s->dict, 0); ++ uint32_t low = prev_byte >> (8 - s->lzma.lc); ++ uint32_t high = (s->dict.pos & s->lzma.literal_pos_mask) << s->lzma.lc; ++ return s->lzma.literal[low + high]; ++} ++ ++/* Decode a literal (one 8-bit byte) */ ++static void lzma_literal(struct xz_dec_lzma2 *s) ++{ ++ uint16_t *probs; ++ uint32_t symbol; ++ uint32_t match_byte; ++ uint32_t match_bit; ++ uint32_t offset; ++ uint32_t i; ++ ++ probs = lzma_literal_probs(s); ++ ++ if (lzma_state_is_literal(s->lzma.state)) { ++ symbol = rc_bittree(&s->rc, probs, 0x100); ++ } else { ++ symbol = 1; ++ match_byte = dict_get(&s->dict, s->lzma.rep0) << 1; ++ offset = 0x100; ++ ++ do { ++ match_bit = match_byte & offset; ++ match_byte <<= 1; ++ i = offset + match_bit + symbol; ++ ++ if (rc_bit(&s->rc, &probs[i])) { ++ symbol = (symbol << 1) + 1; ++ offset &= match_bit; ++ } else { ++ symbol <<= 1; ++ offset &= ~match_bit; ++ } ++ } while (symbol < 0x100); ++ } ++ ++ dict_put(&s->dict, (uint8_t)symbol); ++ lzma_state_literal(&s->lzma.state); ++} ++ ++/* Decode the length of the match into s->lzma.len. */ ++static void lzma_len(struct xz_dec_lzma2 *s, struct lzma_len_dec *l, ++ uint32_t pos_state) ++{ ++ uint16_t *probs; ++ uint32_t limit; ++ ++ if (!rc_bit(&s->rc, &l->choice)) { ++ probs = l->low[pos_state]; ++ limit = LEN_LOW_SYMBOLS; ++ s->lzma.len = MATCH_LEN_MIN; ++ } else { ++ if (!rc_bit(&s->rc, &l->choice2)) { ++ probs = l->mid[pos_state]; ++ limit = LEN_MID_SYMBOLS; ++ s->lzma.len = MATCH_LEN_MIN + LEN_LOW_SYMBOLS; ++ } else { ++ probs = l->high; ++ limit = LEN_HIGH_SYMBOLS; ++ s->lzma.len = MATCH_LEN_MIN + LEN_LOW_SYMBOLS ++ + LEN_MID_SYMBOLS; ++ } ++ } ++ ++ s->lzma.len += rc_bittree(&s->rc, probs, limit) - limit; ++} ++ ++/* Decode a match. The distance will be stored in s->lzma.rep0. */ ++static void lzma_match(struct xz_dec_lzma2 *s, uint32_t pos_state) ++{ ++ uint16_t *probs; ++ uint32_t dist_slot; ++ uint32_t limit; ++ ++ lzma_state_match(&s->lzma.state); ++ ++ s->lzma.rep3 = s->lzma.rep2; ++ s->lzma.rep2 = s->lzma.rep1; ++ s->lzma.rep1 = s->lzma.rep0; ++ ++ lzma_len(s, &s->lzma.match_len_dec, pos_state); ++ ++ probs = s->lzma.dist_slot[lzma_get_dist_state(s->lzma.len)]; ++ dist_slot = rc_bittree(&s->rc, probs, DIST_SLOTS) - DIST_SLOTS; ++ ++ if (dist_slot < DIST_MODEL_START) { ++ s->lzma.rep0 = dist_slot; ++ } else { ++ limit = (dist_slot >> 1) - 1; ++ s->lzma.rep0 = 2 + (dist_slot & 1); ++ ++ if (dist_slot < DIST_MODEL_END) { ++ s->lzma.rep0 <<= limit; ++ probs = s->lzma.dist_special + s->lzma.rep0 ++ - dist_slot - 1; ++ rc_bittree_reverse(&s->rc, probs, ++ &s->lzma.rep0, limit); ++ } else { ++ rc_direct(&s->rc, &s->lzma.rep0, limit - ALIGN_BITS); ++ s->lzma.rep0 <<= ALIGN_BITS; ++ rc_bittree_reverse(&s->rc, s->lzma.dist_align, ++ &s->lzma.rep0, ALIGN_BITS); ++ } ++ } ++} ++ ++/* ++ * Decode a repeated match. The distance is one of the four most recently ++ * seen matches. The distance will be stored in s->lzma.rep0. ++ */ ++static void lzma_rep_match(struct xz_dec_lzma2 *s, uint32_t pos_state) ++{ ++ uint32_t tmp; ++ ++ if (!rc_bit(&s->rc, &s->lzma.is_rep0[s->lzma.state])) { ++ if (!rc_bit(&s->rc, &s->lzma.is_rep0_long[ ++ s->lzma.state][pos_state])) { ++ lzma_state_short_rep(&s->lzma.state); ++ s->lzma.len = 1; ++ return; ++ } ++ } else { ++ if (!rc_bit(&s->rc, &s->lzma.is_rep1[s->lzma.state])) { ++ tmp = s->lzma.rep1; ++ } else { ++ if (!rc_bit(&s->rc, &s->lzma.is_rep2[s->lzma.state])) { ++ tmp = s->lzma.rep2; ++ } else { ++ tmp = s->lzma.rep3; ++ s->lzma.rep3 = s->lzma.rep2; ++ } ++ ++ s->lzma.rep2 = s->lzma.rep1; ++ } ++ ++ s->lzma.rep1 = s->lzma.rep0; ++ s->lzma.rep0 = tmp; ++ } ++ ++ lzma_state_long_rep(&s->lzma.state); ++ lzma_len(s, &s->lzma.rep_len_dec, pos_state); ++} ++ ++/* LZMA decoder core */ ++static bool lzma_main(struct xz_dec_lzma2 *s) ++{ ++ uint32_t pos_state; ++ ++ /* ++ * If the dictionary was reached during the previous call, try to ++ * finish the possibly pending repeat in the dictionary. ++ */ ++ if (dict_has_space(&s->dict) && s->lzma.len > 0) ++ dict_repeat(&s->dict, &s->lzma.len, s->lzma.rep0); ++ ++ /* ++ * Decode more LZMA symbols. One iteration may consume up to ++ * LZMA_IN_REQUIRED - 1 bytes. ++ */ ++ while (dict_has_space(&s->dict) && !rc_limit_exceeded(&s->rc)) { ++ pos_state = s->dict.pos & s->lzma.pos_mask; ++ ++ if (!rc_bit(&s->rc, &s->lzma.is_match[ ++ s->lzma.state][pos_state])) { ++ lzma_literal(s); ++ } else { ++ if (rc_bit(&s->rc, &s->lzma.is_rep[s->lzma.state])) ++ lzma_rep_match(s, pos_state); ++ else ++ lzma_match(s, pos_state); ++ ++ if (!dict_repeat(&s->dict, &s->lzma.len, s->lzma.rep0)) ++ return false; ++ } ++ } ++ ++ /* ++ * Having the range decoder always normalized when we are outside ++ * this function makes it easier to correctly handle end of the chunk. ++ */ ++ rc_normalize(&s->rc); ++ ++ return true; ++} ++ ++/* ++ * Reset the LZMA decoder and range decoder state. Dictionary is nore reset ++ * here, because LZMA state may be reset without resetting the dictionary. ++ */ ++static void lzma_reset(struct xz_dec_lzma2 *s) ++{ ++ uint16_t *probs; ++ size_t i; ++ ++ s->lzma.state = STATE_LIT_LIT; ++ s->lzma.rep0 = 0; ++ s->lzma.rep1 = 0; ++ s->lzma.rep2 = 0; ++ s->lzma.rep3 = 0; ++ ++ /* ++ * All probabilities are initialized to the same value. This hack ++ * makes the code smaller by avoiding a separate loop for each ++ * probability array. ++ * ++ * This could be optimized so that only that part of literal ++ * probabilities that are actually required. In the common case ++ * we would write 12 KiB less. ++ */ ++ probs = s->lzma.is_match[0]; ++ for (i = 0; i < PROBS_TOTAL; ++i) ++ probs[i] = RC_BIT_MODEL_TOTAL / 2; ++ ++ rc_reset(&s->rc); ++} ++ ++/* ++ * Decode and validate LZMA properties (lc/lp/pb) and calculate the bit masks ++ * from the decoded lp and pb values. On success, the LZMA decoder state is ++ * reset and true is returned. ++ */ ++static bool lzma_props(struct xz_dec_lzma2 *s, uint8_t props) ++{ ++ if (props > (4 * 5 + 4) * 9 + 8) ++ return false; ++ ++ s->lzma.pos_mask = 0; ++ while (props >= 9 * 5) { ++ props -= 9 * 5; ++ ++s->lzma.pos_mask; ++ } ++ ++ s->lzma.pos_mask = (1 << s->lzma.pos_mask) - 1; ++ ++ s->lzma.literal_pos_mask = 0; ++ while (props >= 9) { ++ props -= 9; ++ ++s->lzma.literal_pos_mask; ++ } ++ ++ s->lzma.lc = props; ++ ++ if (s->lzma.lc + s->lzma.literal_pos_mask > 4) ++ return false; ++ ++ s->lzma.literal_pos_mask = (1 << s->lzma.literal_pos_mask) - 1; ++ ++ lzma_reset(s); ++ ++ return true; ++} ++ ++/********* ++ * LZMA2 * ++ *********/ ++ ++/* ++ * The LZMA decoder assumes that if the input limit (s->rc.in_limit) hasn't ++ * been exceeded, it is safe to read up to LZMA_IN_REQUIRED bytes. This ++ * wrapper function takes care of making the LZMA decoder's assumption safe. ++ * ++ * As long as there is plenty of input left to be decoded in the current LZMA ++ * chunk, we decode directly from the caller-supplied input buffer until ++ * there's LZMA_IN_REQUIRED bytes left. Those remaining bytes are copied into ++ * s->temp.buf, which (hopefully) gets filled on the next call to this ++ * function. We decode a few bytes from the temporary buffer so that we can ++ * continue decoding from the caller-supplied input buffer again. ++ */ ++static bool lzma2_lzma(struct xz_dec_lzma2 *s, struct xz_buf *b) ++{ ++ size_t in_avail; ++ uint32_t tmp; ++ ++ in_avail = b->in_size - b->in_pos; ++ if (s->temp.size > 0 || s->lzma2.compressed == 0) { ++ tmp = 2 * LZMA_IN_REQUIRED - s->temp.size; ++ if (tmp > s->lzma2.compressed - s->temp.size) ++ tmp = s->lzma2.compressed - s->temp.size; ++ if (tmp > in_avail) ++ tmp = in_avail; ++ ++ memcpy(s->temp.buf + s->temp.size, b->in + b->in_pos, tmp); ++ ++ if (s->temp.size + tmp == s->lzma2.compressed) { ++ memzero(s->temp.buf + s->temp.size + tmp, ++ sizeof(s->temp.buf) ++ - s->temp.size - tmp); ++ s->rc.in_limit = s->temp.size + tmp; ++ } else if (s->temp.size + tmp < LZMA_IN_REQUIRED) { ++ s->temp.size += tmp; ++ b->in_pos += tmp; ++ return true; ++ } else { ++ s->rc.in_limit = s->temp.size + tmp - LZMA_IN_REQUIRED; ++ } ++ ++ s->rc.in = s->temp.buf; ++ s->rc.in_pos = 0; ++ ++ if (!lzma_main(s) || s->rc.in_pos > s->temp.size + tmp) ++ return false; ++ ++ s->lzma2.compressed -= s->rc.in_pos; ++ ++ if (s->rc.in_pos < s->temp.size) { ++ s->temp.size -= s->rc.in_pos; ++ memmove(s->temp.buf, s->temp.buf + s->rc.in_pos, ++ s->temp.size); ++ return true; ++ } ++ ++ b->in_pos += s->rc.in_pos - s->temp.size; ++ s->temp.size = 0; ++ } ++ ++ in_avail = b->in_size - b->in_pos; ++ if (in_avail >= LZMA_IN_REQUIRED) { ++ s->rc.in = b->in; ++ s->rc.in_pos = b->in_pos; ++ ++ if (in_avail >= s->lzma2.compressed + LZMA_IN_REQUIRED) ++ s->rc.in_limit = b->in_pos + s->lzma2.compressed; ++ else ++ s->rc.in_limit = b->in_size - LZMA_IN_REQUIRED; ++ ++ if (!lzma_main(s)) ++ return false; ++ ++ in_avail = s->rc.in_pos - b->in_pos; ++ if (in_avail > s->lzma2.compressed) ++ return false; ++ ++ s->lzma2.compressed -= in_avail; ++ b->in_pos = s->rc.in_pos; ++ } ++ ++ in_avail = b->in_size - b->in_pos; ++ if (in_avail < LZMA_IN_REQUIRED) { ++ if (in_avail > s->lzma2.compressed) ++ in_avail = s->lzma2.compressed; ++ ++ memcpy(s->temp.buf, b->in + b->in_pos, in_avail); ++ s->temp.size = in_avail; ++ b->in_pos += in_avail; ++ } ++ ++ return true; ++} ++ ++/* ++ * Take care of the LZMA2 control layer, and forward the job of actual LZMA ++ * decoding or copying of uncompressed chunks to other functions. ++ */ ++XZ_EXTERN enum xz_ret xz_dec_lzma2_run(struct xz_dec_lzma2 *s, ++ struct xz_buf *b) ++{ ++ uint32_t tmp; ++ ++ while (b->in_pos < b->in_size || s->lzma2.sequence == SEQ_LZMA_RUN) { ++ switch (s->lzma2.sequence) { ++ case SEQ_CONTROL: ++ /* ++ * LZMA2 control byte ++ * ++ * Exact values: ++ * 0x00 End marker ++ * 0x01 Dictionary reset followed by ++ * an uncompressed chunk ++ * 0x02 Uncompressed chunk (no dictionary reset) ++ * ++ * Highest three bits (s->control & 0xE0): ++ * 0xE0 Dictionary reset, new properties and state ++ * reset, followed by LZMA compressed chunk ++ * 0xC0 New properties and state reset, followed ++ * by LZMA compressed chunk (no dictionary ++ * reset) ++ * 0xA0 State reset using old properties, ++ * followed by LZMA compressed chunk (no ++ * dictionary reset) ++ * 0x80 LZMA chunk (no dictionary or state reset) ++ * ++ * For LZMA compressed chunks, the lowest five bits ++ * (s->control & 1F) are the highest bits of the ++ * uncompressed size (bits 16-20). ++ * ++ * A new LZMA2 stream must begin with a dictionary ++ * reset. The first LZMA chunk must set new ++ * properties and reset the LZMA state. ++ * ++ * Values that don't match anything described above ++ * are invalid and we return XZ_DATA_ERROR. ++ */ ++ tmp = b->in[b->in_pos++]; ++ ++ if (tmp >= 0xE0 || tmp == 0x01) { ++ s->lzma2.need_props = true; ++ s->lzma2.need_dict_reset = false; ++ dict_reset(&s->dict, b); ++ } else if (s->lzma2.need_dict_reset) { ++ return XZ_DATA_ERROR; ++ } ++ ++ if (tmp >= 0x80) { ++ s->lzma2.uncompressed = (tmp & 0x1F) << 16; ++ s->lzma2.sequence = SEQ_UNCOMPRESSED_1; ++ ++ if (tmp >= 0xC0) { ++ /* ++ * When there are new properties, ++ * state reset is done at ++ * SEQ_PROPERTIES. ++ */ ++ s->lzma2.need_props = false; ++ s->lzma2.next_sequence ++ = SEQ_PROPERTIES; ++ ++ } else if (s->lzma2.need_props) { ++ return XZ_DATA_ERROR; ++ ++ } else { ++ s->lzma2.next_sequence ++ = SEQ_LZMA_PREPARE; ++ if (tmp >= 0xA0) ++ lzma_reset(s); ++ } ++ } else { ++ if (tmp == 0x00) ++ return XZ_STREAM_END; ++ ++ if (tmp > 0x02) ++ return XZ_DATA_ERROR; ++ ++ s->lzma2.sequence = SEQ_COMPRESSED_0; ++ s->lzma2.next_sequence = SEQ_COPY; ++ } ++ ++ break; ++ ++ case SEQ_UNCOMPRESSED_1: ++ s->lzma2.uncompressed ++ += (uint32_t)b->in[b->in_pos++] << 8; ++ s->lzma2.sequence = SEQ_UNCOMPRESSED_2; ++ break; ++ ++ case SEQ_UNCOMPRESSED_2: ++ s->lzma2.uncompressed ++ += (uint32_t)b->in[b->in_pos++] + 1; ++ s->lzma2.sequence = SEQ_COMPRESSED_0; ++ break; ++ ++ case SEQ_COMPRESSED_0: ++ s->lzma2.compressed ++ = (uint32_t)b->in[b->in_pos++] << 8; ++ s->lzma2.sequence = SEQ_COMPRESSED_1; ++ break; ++ ++ case SEQ_COMPRESSED_1: ++ s->lzma2.compressed ++ += (uint32_t)b->in[b->in_pos++] + 1; ++ s->lzma2.sequence = s->lzma2.next_sequence; ++ break; ++ ++ case SEQ_PROPERTIES: ++ if (!lzma_props(s, b->in[b->in_pos++])) ++ return XZ_DATA_ERROR; ++ ++ s->lzma2.sequence = SEQ_LZMA_PREPARE; ++ ++ case SEQ_LZMA_PREPARE: ++ if (s->lzma2.compressed < RC_INIT_BYTES) ++ return XZ_DATA_ERROR; ++ ++ if (!rc_read_init(&s->rc, b)) ++ return XZ_OK; ++ ++ s->lzma2.compressed -= RC_INIT_BYTES; ++ s->lzma2.sequence = SEQ_LZMA_RUN; ++ ++ case SEQ_LZMA_RUN: ++ /* ++ * Set dictionary limit to indicate how much we want ++ * to be encoded at maximum. Decode new data into the ++ * dictionary. Flush the new data from dictionary to ++ * b->out. Check if we finished decoding this chunk. ++ * In case the dictionary got full but we didn't fill ++ * the output buffer yet, we may run this loop ++ * multiple times without changing s->lzma2.sequence. ++ */ ++ dict_limit(&s->dict, min_t(size_t, ++ b->out_size - b->out_pos, ++ s->lzma2.uncompressed)); ++ if (!lzma2_lzma(s, b)) ++ return XZ_DATA_ERROR; ++ ++ s->lzma2.uncompressed -= dict_flush(&s->dict, b); ++ ++ if (s->lzma2.uncompressed == 0) { ++ if (s->lzma2.compressed > 0 || s->lzma.len > 0 ++ || !rc_is_finished(&s->rc)) ++ return XZ_DATA_ERROR; ++ ++ rc_reset(&s->rc); ++ s->lzma2.sequence = SEQ_CONTROL; ++ ++ } else if (b->out_pos == b->out_size ++ || (b->in_pos == b->in_size ++ && s->temp.size ++ < s->lzma2.compressed)) { ++ return XZ_OK; ++ } ++ ++ break; ++ ++ case SEQ_COPY: ++ dict_uncompressed(&s->dict, b, &s->lzma2.compressed); ++ if (s->lzma2.compressed > 0) ++ return XZ_OK; ++ ++ s->lzma2.sequence = SEQ_CONTROL; ++ break; ++ } ++ } ++ ++ return XZ_OK; ++} ++ ++XZ_EXTERN struct xz_dec_lzma2 *xz_dec_lzma2_create(enum xz_mode mode, ++ uint32_t dict_max) ++{ ++ struct xz_dec_lzma2 *s = kmalloc(sizeof(*s), GFP_KERNEL); ++ if (s == NULL) ++ return NULL; ++ ++ s->dict.mode = mode; ++ s->dict.size_max = dict_max; ++ ++ if (DEC_IS_PREALLOC(mode)) { ++ s->dict.buf = vmalloc(dict_max); ++ if (s->dict.buf == NULL) { ++ kfree(s); ++ return NULL; ++ } ++ } else if (DEC_IS_DYNALLOC(mode)) { ++ s->dict.buf = NULL; ++ s->dict.allocated = 0; ++ } ++ ++ return s; ++} ++ ++XZ_EXTERN enum xz_ret xz_dec_lzma2_reset(struct xz_dec_lzma2 *s, uint8_t props) ++{ ++ /* This limits dictionary size to 3 GiB to keep parsing simpler. */ ++ if (props > 39) ++ return XZ_OPTIONS_ERROR; ++ ++ s->dict.size = 2 + (props & 1); ++ s->dict.size <<= (props >> 1) + 11; ++ ++ if (DEC_IS_MULTI(s->dict.mode)) { ++ if (s->dict.size > s->dict.size_max) ++ return XZ_MEMLIMIT_ERROR; ++ ++ s->dict.end = s->dict.size; ++ ++ if (DEC_IS_DYNALLOC(s->dict.mode)) { ++ if (s->dict.allocated < s->dict.size) { ++ vfree(s->dict.buf); ++ s->dict.buf = vmalloc(s->dict.size); ++ if (s->dict.buf == NULL) { ++ s->dict.allocated = 0; ++ return XZ_MEM_ERROR; ++ } ++ } ++ } ++ } ++ ++ s->lzma.len = 0; ++ ++ s->lzma2.sequence = SEQ_CONTROL; ++ s->lzma2.need_dict_reset = true; ++ ++ s->temp.size = 0; ++ ++ return XZ_OK; ++} ++ ++XZ_EXTERN void xz_dec_lzma2_end(struct xz_dec_lzma2 *s) ++{ ++ if (DEC_IS_MULTI(s->dict.mode)) ++ vfree(s->dict.buf); ++ ++ kfree(s); ++} +diff --git a/lib/xz/xz_dec_stream.c b/lib/xz/xz_dec_stream.c +new file mode 100644 +index 0000000..ac809b1 +--- /dev/null ++++ b/lib/xz/xz_dec_stream.c +@@ -0,0 +1,821 @@ ++/* ++ * .xz Stream decoder ++ * ++ * Author: Lasse Collin ++ * ++ * This file has been put into the public domain. ++ * You can do whatever you want with this file. ++ */ ++ ++#include "xz_private.h" ++#include "xz_stream.h" ++ ++/* Hash used to validate the Index field */ ++struct xz_dec_hash { ++ vli_type unpadded; ++ vli_type uncompressed; ++ uint32_t crc32; ++}; ++ ++struct xz_dec { ++ /* Position in dec_main() */ ++ enum { ++ SEQ_STREAM_HEADER, ++ SEQ_BLOCK_START, ++ SEQ_BLOCK_HEADER, ++ SEQ_BLOCK_UNCOMPRESS, ++ SEQ_BLOCK_PADDING, ++ SEQ_BLOCK_CHECK, ++ SEQ_INDEX, ++ SEQ_INDEX_PADDING, ++ SEQ_INDEX_CRC32, ++ SEQ_STREAM_FOOTER ++ } sequence; ++ ++ /* Position in variable-length integers and Check fields */ ++ uint32_t pos; ++ ++ /* Variable-length integer decoded by dec_vli() */ ++ vli_type vli; ++ ++ /* Saved in_pos and out_pos */ ++ size_t in_start; ++ size_t out_start; ++ ++ /* CRC32 value in Block or Index */ ++ uint32_t crc32; ++ ++ /* Type of the integrity check calculated from uncompressed data */ ++ enum xz_check check_type; ++ ++ /* Operation mode */ ++ enum xz_mode mode; ++ ++ /* ++ * True if the next call to xz_dec_run() is allowed to return ++ * XZ_BUF_ERROR. ++ */ ++ bool allow_buf_error; ++ ++ /* Information stored in Block Header */ ++ struct { ++ /* ++ * Value stored in the Compressed Size field, or ++ * VLI_UNKNOWN if Compressed Size is not present. ++ */ ++ vli_type compressed; ++ ++ /* ++ * Value stored in the Uncompressed Size field, or ++ * VLI_UNKNOWN if Uncompressed Size is not present. ++ */ ++ vli_type uncompressed; ++ ++ /* Size of the Block Header field */ ++ uint32_t size; ++ } block_header; ++ ++ /* Information collected when decoding Blocks */ ++ struct { ++ /* Observed compressed size of the current Block */ ++ vli_type compressed; ++ ++ /* Observed uncompressed size of the current Block */ ++ vli_type uncompressed; ++ ++ /* Number of Blocks decoded so far */ ++ vli_type count; ++ ++ /* ++ * Hash calculated from the Block sizes. This is used to ++ * validate the Index field. ++ */ ++ struct xz_dec_hash hash; ++ } block; ++ ++ /* Variables needed when verifying the Index field */ ++ struct { ++ /* Position in dec_index() */ ++ enum { ++ SEQ_INDEX_COUNT, ++ SEQ_INDEX_UNPADDED, ++ SEQ_INDEX_UNCOMPRESSED ++ } sequence; ++ ++ /* Size of the Index in bytes */ ++ vli_type size; ++ ++ /* Number of Records (matches block.count in valid files) */ ++ vli_type count; ++ ++ /* ++ * Hash calculated from the Records (matches block.hash in ++ * valid files). ++ */ ++ struct xz_dec_hash hash; ++ } index; ++ ++ /* ++ * Temporary buffer needed to hold Stream Header, Block Header, ++ * and Stream Footer. The Block Header is the biggest (1 KiB) ++ * so we reserve space according to that. buf[] has to be aligned ++ * to a multiple of four bytes; the size_t variables before it ++ * should guarantee this. ++ */ ++ struct { ++ size_t pos; ++ size_t size; ++ uint8_t buf[1024]; ++ } temp; ++ ++ struct xz_dec_lzma2 *lzma2; ++ ++#ifdef XZ_DEC_BCJ ++ struct xz_dec_bcj *bcj; ++ bool bcj_active; ++#endif ++}; ++ ++#ifdef XZ_DEC_ANY_CHECK ++/* Sizes of the Check field with different Check IDs */ ++static const uint8_t check_sizes[16] = { ++ 0, ++ 4, 4, 4, ++ 8, 8, 8, ++ 16, 16, 16, ++ 32, 32, 32, ++ 64, 64, 64 ++}; ++#endif ++ ++/* ++ * Fill s->temp by copying data starting from b->in[b->in_pos]. Caller ++ * must have set s->temp.pos to indicate how much data we are supposed ++ * to copy into s->temp.buf. Return true once s->temp.pos has reached ++ * s->temp.size. ++ */ ++static bool fill_temp(struct xz_dec *s, struct xz_buf *b) ++{ ++ size_t copy_size = min_t(size_t, ++ b->in_size - b->in_pos, s->temp.size - s->temp.pos); ++ ++ memcpy(s->temp.buf + s->temp.pos, b->in + b->in_pos, copy_size); ++ b->in_pos += copy_size; ++ s->temp.pos += copy_size; ++ ++ if (s->temp.pos == s->temp.size) { ++ s->temp.pos = 0; ++ return true; ++ } ++ ++ return false; ++} ++ ++/* Decode a variable-length integer (little-endian base-128 encoding) */ ++static enum xz_ret dec_vli(struct xz_dec *s, const uint8_t *in, ++ size_t *in_pos, size_t in_size) ++{ ++ uint8_t byte; ++ ++ if (s->pos == 0) ++ s->vli = 0; ++ ++ while (*in_pos < in_size) { ++ byte = in[*in_pos]; ++ ++*in_pos; ++ ++ s->vli |= (vli_type)(byte & 0x7F) << s->pos; ++ ++ if ((byte & 0x80) == 0) { ++ /* Don't allow non-minimal encodings. */ ++ if (byte == 0 && s->pos != 0) ++ return XZ_DATA_ERROR; ++ ++ s->pos = 0; ++ return XZ_STREAM_END; ++ } ++ ++ s->pos += 7; ++ if (s->pos == 7 * VLI_BYTES_MAX) ++ return XZ_DATA_ERROR; ++ } ++ ++ return XZ_OK; ++} ++ ++/* ++ * Decode the Compressed Data field from a Block. Update and validate ++ * the observed compressed and uncompressed sizes of the Block so that ++ * they don't exceed the values possibly stored in the Block Header ++ * (validation assumes that no integer overflow occurs, since vli_type ++ * is normally uint64_t). Update the CRC32 if presence of the CRC32 ++ * field was indicated in Stream Header. ++ * ++ * Once the decoding is finished, validate that the observed sizes match ++ * the sizes possibly stored in the Block Header. Update the hash and ++ * Block count, which are later used to validate the Index field. ++ */ ++static enum xz_ret dec_block(struct xz_dec *s, struct xz_buf *b) ++{ ++ enum xz_ret ret; ++ ++ s->in_start = b->in_pos; ++ s->out_start = b->out_pos; ++ ++#ifdef XZ_DEC_BCJ ++ if (s->bcj_active) ++ ret = xz_dec_bcj_run(s->bcj, s->lzma2, b); ++ else ++#endif ++ ret = xz_dec_lzma2_run(s->lzma2, b); ++ ++ s->block.compressed += b->in_pos - s->in_start; ++ s->block.uncompressed += b->out_pos - s->out_start; ++ ++ /* ++ * There is no need to separately check for VLI_UNKNOWN, since ++ * the observed sizes are always smaller than VLI_UNKNOWN. ++ */ ++ if (s->block.compressed > s->block_header.compressed ++ || s->block.uncompressed ++ > s->block_header.uncompressed) ++ return XZ_DATA_ERROR; ++ ++ if (s->check_type == XZ_CHECK_CRC32) ++ s->crc32 = xz_crc32(b->out + s->out_start, ++ b->out_pos - s->out_start, s->crc32); ++ ++ if (ret == XZ_STREAM_END) { ++ if (s->block_header.compressed != VLI_UNKNOWN ++ && s->block_header.compressed ++ != s->block.compressed) ++ return XZ_DATA_ERROR; ++ ++ if (s->block_header.uncompressed != VLI_UNKNOWN ++ && s->block_header.uncompressed ++ != s->block.uncompressed) ++ return XZ_DATA_ERROR; ++ ++ s->block.hash.unpadded += s->block_header.size ++ + s->block.compressed; ++ ++#ifdef XZ_DEC_ANY_CHECK ++ s->block.hash.unpadded += check_sizes[s->check_type]; ++#else ++ if (s->check_type == XZ_CHECK_CRC32) ++ s->block.hash.unpadded += 4; ++#endif ++ ++ s->block.hash.uncompressed += s->block.uncompressed; ++ s->block.hash.crc32 = xz_crc32( ++ (const uint8_t *)&s->block.hash, ++ sizeof(s->block.hash), s->block.hash.crc32); ++ ++ ++s->block.count; ++ } ++ ++ return ret; ++} ++ ++/* Update the Index size and the CRC32 value. */ ++static void index_update(struct xz_dec *s, const struct xz_buf *b) ++{ ++ size_t in_used = b->in_pos - s->in_start; ++ s->index.size += in_used; ++ s->crc32 = xz_crc32(b->in + s->in_start, in_used, s->crc32); ++} ++ ++/* ++ * Decode the Number of Records, Unpadded Size, and Uncompressed Size ++ * fields from the Index field. That is, Index Padding and CRC32 are not ++ * decoded by this function. ++ * ++ * This can return XZ_OK (more input needed), XZ_STREAM_END (everything ++ * successfully decoded), or XZ_DATA_ERROR (input is corrupt). ++ */ ++static enum xz_ret dec_index(struct xz_dec *s, struct xz_buf *b) ++{ ++ enum xz_ret ret; ++ ++ do { ++ ret = dec_vli(s, b->in, &b->in_pos, b->in_size); ++ if (ret != XZ_STREAM_END) { ++ index_update(s, b); ++ return ret; ++ } ++ ++ switch (s->index.sequence) { ++ case SEQ_INDEX_COUNT: ++ s->index.count = s->vli; ++ ++ /* ++ * Validate that the Number of Records field ++ * indicates the same number of Records as ++ * there were Blocks in the Stream. ++ */ ++ if (s->index.count != s->block.count) ++ return XZ_DATA_ERROR; ++ ++ s->index.sequence = SEQ_INDEX_UNPADDED; ++ break; ++ ++ case SEQ_INDEX_UNPADDED: ++ s->index.hash.unpadded += s->vli; ++ s->index.sequence = SEQ_INDEX_UNCOMPRESSED; ++ break; ++ ++ case SEQ_INDEX_UNCOMPRESSED: ++ s->index.hash.uncompressed += s->vli; ++ s->index.hash.crc32 = xz_crc32( ++ (const uint8_t *)&s->index.hash, ++ sizeof(s->index.hash), ++ s->index.hash.crc32); ++ --s->index.count; ++ s->index.sequence = SEQ_INDEX_UNPADDED; ++ break; ++ } ++ } while (s->index.count > 0); ++ ++ return XZ_STREAM_END; ++} ++ ++/* ++ * Validate that the next four input bytes match the value of s->crc32. ++ * s->pos must be zero when starting to validate the first byte. ++ */ ++static enum xz_ret crc32_validate(struct xz_dec *s, struct xz_buf *b) ++{ ++ do { ++ if (b->in_pos == b->in_size) ++ return XZ_OK; ++ ++ if (((s->crc32 >> s->pos) & 0xFF) != b->in[b->in_pos++]) ++ return XZ_DATA_ERROR; ++ ++ s->pos += 8; ++ ++ } while (s->pos < 32); ++ ++ s->crc32 = 0; ++ s->pos = 0; ++ ++ return XZ_STREAM_END; ++} ++ ++#ifdef XZ_DEC_ANY_CHECK ++/* ++ * Skip over the Check field when the Check ID is not supported. ++ * Returns true once the whole Check field has been skipped over. ++ */ ++static bool check_skip(struct xz_dec *s, struct xz_buf *b) ++{ ++ while (s->pos < check_sizes[s->check_type]) { ++ if (b->in_pos == b->in_size) ++ return false; ++ ++ ++b->in_pos; ++ ++s->pos; ++ } ++ ++ s->pos = 0; ++ ++ return true; ++} ++#endif ++ ++/* Decode the Stream Header field (the first 12 bytes of the .xz Stream). */ ++static enum xz_ret dec_stream_header(struct xz_dec *s) ++{ ++ if (!memeq(s->temp.buf, HEADER_MAGIC, HEADER_MAGIC_SIZE)) ++ return XZ_FORMAT_ERROR; ++ ++ if (xz_crc32(s->temp.buf + HEADER_MAGIC_SIZE, 2, 0) ++ != get_le32(s->temp.buf + HEADER_MAGIC_SIZE + 2)) ++ return XZ_DATA_ERROR; ++ ++ if (s->temp.buf[HEADER_MAGIC_SIZE] != 0) ++ return XZ_OPTIONS_ERROR; ++ ++ /* ++ * Of integrity checks, we support only none (Check ID = 0) and ++ * CRC32 (Check ID = 1). However, if XZ_DEC_ANY_CHECK is defined, ++ * we will accept other check types too, but then the check won't ++ * be verified and a warning (XZ_UNSUPPORTED_CHECK) will be given. ++ */ ++ s->check_type = s->temp.buf[HEADER_MAGIC_SIZE + 1]; ++ ++#ifdef XZ_DEC_ANY_CHECK ++ if (s->check_type > XZ_CHECK_MAX) ++ return XZ_OPTIONS_ERROR; ++ ++ if (s->check_type > XZ_CHECK_CRC32) ++ return XZ_UNSUPPORTED_CHECK; ++#else ++ if (s->check_type > XZ_CHECK_CRC32) ++ return XZ_OPTIONS_ERROR; ++#endif ++ ++ return XZ_OK; ++} ++ ++/* Decode the Stream Footer field (the last 12 bytes of the .xz Stream) */ ++static enum xz_ret dec_stream_footer(struct xz_dec *s) ++{ ++ if (!memeq(s->temp.buf + 10, FOOTER_MAGIC, FOOTER_MAGIC_SIZE)) ++ return XZ_DATA_ERROR; ++ ++ if (xz_crc32(s->temp.buf + 4, 6, 0) != get_le32(s->temp.buf)) ++ return XZ_DATA_ERROR; ++ ++ /* ++ * Validate Backward Size. Note that we never added the size of the ++ * Index CRC32 field to s->index.size, thus we use s->index.size / 4 ++ * instead of s->index.size / 4 - 1. ++ */ ++ if ((s->index.size >> 2) != get_le32(s->temp.buf + 4)) ++ return XZ_DATA_ERROR; ++ ++ if (s->temp.buf[8] != 0 || s->temp.buf[9] != s->check_type) ++ return XZ_DATA_ERROR; ++ ++ /* ++ * Use XZ_STREAM_END instead of XZ_OK to be more convenient ++ * for the caller. ++ */ ++ return XZ_STREAM_END; ++} ++ ++/* Decode the Block Header and initialize the filter chain. */ ++static enum xz_ret dec_block_header(struct xz_dec *s) ++{ ++ enum xz_ret ret; ++ ++ /* ++ * Validate the CRC32. We know that the temp buffer is at least ++ * eight bytes so this is safe. ++ */ ++ s->temp.size -= 4; ++ if (xz_crc32(s->temp.buf, s->temp.size, 0) ++ != get_le32(s->temp.buf + s->temp.size)) ++ return XZ_DATA_ERROR; ++ ++ s->temp.pos = 2; ++ ++ /* ++ * Catch unsupported Block Flags. We support only one or two filters ++ * in the chain, so we catch that with the same test. ++ */ ++#ifdef XZ_DEC_BCJ ++ if (s->temp.buf[1] & 0x3E) ++#else ++ if (s->temp.buf[1] & 0x3F) ++#endif ++ return XZ_OPTIONS_ERROR; ++ ++ /* Compressed Size */ ++ if (s->temp.buf[1] & 0x40) { ++ if (dec_vli(s, s->temp.buf, &s->temp.pos, s->temp.size) ++ != XZ_STREAM_END) ++ return XZ_DATA_ERROR; ++ ++ s->block_header.compressed = s->vli; ++ } else { ++ s->block_header.compressed = VLI_UNKNOWN; ++ } ++ ++ /* Uncompressed Size */ ++ if (s->temp.buf[1] & 0x80) { ++ if (dec_vli(s, s->temp.buf, &s->temp.pos, s->temp.size) ++ != XZ_STREAM_END) ++ return XZ_DATA_ERROR; ++ ++ s->block_header.uncompressed = s->vli; ++ } else { ++ s->block_header.uncompressed = VLI_UNKNOWN; ++ } ++ ++#ifdef XZ_DEC_BCJ ++ /* If there are two filters, the first one must be a BCJ filter. */ ++ s->bcj_active = s->temp.buf[1] & 0x01; ++ if (s->bcj_active) { ++ if (s->temp.size - s->temp.pos < 2) ++ return XZ_OPTIONS_ERROR; ++ ++ ret = xz_dec_bcj_reset(s->bcj, s->temp.buf[s->temp.pos++]); ++ if (ret != XZ_OK) ++ return ret; ++ ++ /* ++ * We don't support custom start offset, ++ * so Size of Properties must be zero. ++ */ ++ if (s->temp.buf[s->temp.pos++] != 0x00) ++ return XZ_OPTIONS_ERROR; ++ } ++#endif ++ ++ /* Valid Filter Flags always take at least two bytes. */ ++ if (s->temp.size - s->temp.pos < 2) ++ return XZ_DATA_ERROR; ++ ++ /* Filter ID = LZMA2 */ ++ if (s->temp.buf[s->temp.pos++] != 0x21) ++ return XZ_OPTIONS_ERROR; ++ ++ /* Size of Properties = 1-byte Filter Properties */ ++ if (s->temp.buf[s->temp.pos++] != 0x01) ++ return XZ_OPTIONS_ERROR; ++ ++ /* Filter Properties contains LZMA2 dictionary size. */ ++ if (s->temp.size - s->temp.pos < 1) ++ return XZ_DATA_ERROR; ++ ++ ret = xz_dec_lzma2_reset(s->lzma2, s->temp.buf[s->temp.pos++]); ++ if (ret != XZ_OK) ++ return ret; ++ ++ /* The rest must be Header Padding. */ ++ while (s->temp.pos < s->temp.size) ++ if (s->temp.buf[s->temp.pos++] != 0x00) ++ return XZ_OPTIONS_ERROR; ++ ++ s->temp.pos = 0; ++ s->block.compressed = 0; ++ s->block.uncompressed = 0; ++ ++ return XZ_OK; ++} ++ ++static enum xz_ret dec_main(struct xz_dec *s, struct xz_buf *b) ++{ ++ enum xz_ret ret; ++ ++ /* ++ * Store the start position for the case when we are in the middle ++ * of the Index field. ++ */ ++ s->in_start = b->in_pos; ++ ++ while (true) { ++ switch (s->sequence) { ++ case SEQ_STREAM_HEADER: ++ /* ++ * Stream Header is copied to s->temp, and then ++ * decoded from there. This way if the caller ++ * gives us only little input at a time, we can ++ * still keep the Stream Header decoding code ++ * simple. Similar approach is used in many places ++ * in this file. ++ */ ++ if (!fill_temp(s, b)) ++ return XZ_OK; ++ ++ /* ++ * If dec_stream_header() returns ++ * XZ_UNSUPPORTED_CHECK, it is still possible ++ * to continue decoding if working in multi-call ++ * mode. Thus, update s->sequence before calling ++ * dec_stream_header(). ++ */ ++ s->sequence = SEQ_BLOCK_START; ++ ++ ret = dec_stream_header(s); ++ if (ret != XZ_OK) ++ return ret; ++ ++ case SEQ_BLOCK_START: ++ /* We need one byte of input to continue. */ ++ if (b->in_pos == b->in_size) ++ return XZ_OK; ++ ++ /* See if this is the beginning of the Index field. */ ++ if (b->in[b->in_pos] == 0) { ++ s->in_start = b->in_pos++; ++ s->sequence = SEQ_INDEX; ++ break; ++ } ++ ++ /* ++ * Calculate the size of the Block Header and ++ * prepare to decode it. ++ */ ++ s->block_header.size ++ = ((uint32_t)b->in[b->in_pos] + 1) * 4; ++ ++ s->temp.size = s->block_header.size; ++ s->temp.pos = 0; ++ s->sequence = SEQ_BLOCK_HEADER; ++ ++ case SEQ_BLOCK_HEADER: ++ if (!fill_temp(s, b)) ++ return XZ_OK; ++ ++ ret = dec_block_header(s); ++ if (ret != XZ_OK) ++ return ret; ++ ++ s->sequence = SEQ_BLOCK_UNCOMPRESS; ++ ++ case SEQ_BLOCK_UNCOMPRESS: ++ ret = dec_block(s, b); ++ if (ret != XZ_STREAM_END) ++ return ret; ++ ++ s->sequence = SEQ_BLOCK_PADDING; ++ ++ case SEQ_BLOCK_PADDING: ++ /* ++ * Size of Compressed Data + Block Padding ++ * must be a multiple of four. We don't need ++ * s->block.compressed for anything else ++ * anymore, so we use it here to test the size ++ * of the Block Padding field. ++ */ ++ while (s->block.compressed & 3) { ++ if (b->in_pos == b->in_size) ++ return XZ_OK; ++ ++ if (b->in[b->in_pos++] != 0) ++ return XZ_DATA_ERROR; ++ ++ ++s->block.compressed; ++ } ++ ++ s->sequence = SEQ_BLOCK_CHECK; ++ ++ case SEQ_BLOCK_CHECK: ++ if (s->check_type == XZ_CHECK_CRC32) { ++ ret = crc32_validate(s, b); ++ if (ret != XZ_STREAM_END) ++ return ret; ++ } ++#ifdef XZ_DEC_ANY_CHECK ++ else if (!check_skip(s, b)) { ++ return XZ_OK; ++ } ++#endif ++ ++ s->sequence = SEQ_BLOCK_START; ++ break; ++ ++ case SEQ_INDEX: ++ ret = dec_index(s, b); ++ if (ret != XZ_STREAM_END) ++ return ret; ++ ++ s->sequence = SEQ_INDEX_PADDING; ++ ++ case SEQ_INDEX_PADDING: ++ while ((s->index.size + (b->in_pos - s->in_start)) ++ & 3) { ++ if (b->in_pos == b->in_size) { ++ index_update(s, b); ++ return XZ_OK; ++ } ++ ++ if (b->in[b->in_pos++] != 0) ++ return XZ_DATA_ERROR; ++ } ++ ++ /* Finish the CRC32 value and Index size. */ ++ index_update(s, b); ++ ++ /* Compare the hashes to validate the Index field. */ ++ if (!memeq(&s->block.hash, &s->index.hash, ++ sizeof(s->block.hash))) ++ return XZ_DATA_ERROR; ++ ++ s->sequence = SEQ_INDEX_CRC32; ++ ++ case SEQ_INDEX_CRC32: ++ ret = crc32_validate(s, b); ++ if (ret != XZ_STREAM_END) ++ return ret; ++ ++ s->temp.size = STREAM_HEADER_SIZE; ++ s->sequence = SEQ_STREAM_FOOTER; ++ ++ case SEQ_STREAM_FOOTER: ++ if (!fill_temp(s, b)) ++ return XZ_OK; ++ ++ return dec_stream_footer(s); ++ } ++ } ++ ++ /* Never reached */ ++} ++ ++/* ++ * xz_dec_run() is a wrapper for dec_main() to handle some special cases in ++ * multi-call and single-call decoding. ++ * ++ * In multi-call mode, we must return XZ_BUF_ERROR when it seems clear that we ++ * are not going to make any progress anymore. This is to prevent the caller ++ * from calling us infinitely when the input file is truncated or otherwise ++ * corrupt. Since zlib-style API allows that the caller fills the input buffer ++ * only when the decoder doesn't produce any new output, we have to be careful ++ * to avoid returning XZ_BUF_ERROR too easily: XZ_BUF_ERROR is returned only ++ * after the second consecutive call to xz_dec_run() that makes no progress. ++ * ++ * In single-call mode, if we couldn't decode everything and no error ++ * occurred, either the input is truncated or the output buffer is too small. ++ * Since we know that the last input byte never produces any output, we know ++ * that if all the input was consumed and decoding wasn't finished, the file ++ * must be corrupt. Otherwise the output buffer has to be too small or the ++ * file is corrupt in a way that decoding it produces too big output. ++ * ++ * If single-call decoding fails, we reset b->in_pos and b->out_pos back to ++ * their original values. This is because with some filter chains there won't ++ * be any valid uncompressed data in the output buffer unless the decoding ++ * actually succeeds (that's the price to pay of using the output buffer as ++ * the workspace). ++ */ ++XZ_EXTERN enum xz_ret xz_dec_run(struct xz_dec *s, struct xz_buf *b) ++{ ++ size_t in_start; ++ size_t out_start; ++ enum xz_ret ret; ++ ++ if (DEC_IS_SINGLE(s->mode)) ++ xz_dec_reset(s); ++ ++ in_start = b->in_pos; ++ out_start = b->out_pos; ++ ret = dec_main(s, b); ++ ++ if (DEC_IS_SINGLE(s->mode)) { ++ if (ret == XZ_OK) ++ ret = b->in_pos == b->in_size ++ ? XZ_DATA_ERROR : XZ_BUF_ERROR; ++ ++ if (ret != XZ_STREAM_END) { ++ b->in_pos = in_start; ++ b->out_pos = out_start; ++ } ++ ++ } else if (ret == XZ_OK && in_start == b->in_pos ++ && out_start == b->out_pos) { ++ if (s->allow_buf_error) ++ ret = XZ_BUF_ERROR; ++ ++ s->allow_buf_error = true; ++ } else { ++ s->allow_buf_error = false; ++ } ++ ++ return ret; ++} ++ ++XZ_EXTERN struct xz_dec *xz_dec_init(enum xz_mode mode, uint32_t dict_max) ++{ ++ struct xz_dec *s = kmalloc(sizeof(*s), GFP_KERNEL); ++ if (s == NULL) ++ return NULL; ++ ++ s->mode = mode; ++ ++#ifdef XZ_DEC_BCJ ++ s->bcj = xz_dec_bcj_create(DEC_IS_SINGLE(mode)); ++ if (s->bcj == NULL) ++ goto error_bcj; ++#endif ++ ++ s->lzma2 = xz_dec_lzma2_create(mode, dict_max); ++ if (s->lzma2 == NULL) ++ goto error_lzma2; ++ ++ xz_dec_reset(s); ++ return s; ++ ++error_lzma2: ++#ifdef XZ_DEC_BCJ ++ xz_dec_bcj_end(s->bcj); ++error_bcj: ++#endif ++ kfree(s); ++ return NULL; ++} ++ ++XZ_EXTERN void xz_dec_reset(struct xz_dec *s) ++{ ++ s->sequence = SEQ_STREAM_HEADER; ++ s->allow_buf_error = false; ++ s->pos = 0; ++ s->crc32 = 0; ++ memzero(&s->block, sizeof(s->block)); ++ memzero(&s->index, sizeof(s->index)); ++ s->temp.pos = 0; ++ s->temp.size = STREAM_HEADER_SIZE; ++} ++ ++XZ_EXTERN void xz_dec_end(struct xz_dec *s) ++{ ++ if (s != NULL) { ++ xz_dec_lzma2_end(s->lzma2); ++#ifdef XZ_DEC_BCJ ++ xz_dec_bcj_end(s->bcj); ++#endif ++ kfree(s); ++ } ++} +diff --git a/lib/xz/xz_dec_syms.c b/lib/xz/xz_dec_syms.c +new file mode 100644 +index 0000000..32eb3c0 +--- /dev/null ++++ b/lib/xz/xz_dec_syms.c +@@ -0,0 +1,26 @@ ++/* ++ * XZ decoder module information ++ * ++ * Author: Lasse Collin ++ * ++ * This file has been put into the public domain. ++ * You can do whatever you want with this file. ++ */ ++ ++#include ++#include ++ ++EXPORT_SYMBOL(xz_dec_init); ++EXPORT_SYMBOL(xz_dec_reset); ++EXPORT_SYMBOL(xz_dec_run); ++EXPORT_SYMBOL(xz_dec_end); ++ ++MODULE_DESCRIPTION("XZ decompressor"); ++MODULE_VERSION("1.0"); ++MODULE_AUTHOR("Lasse Collin and Igor Pavlov"); ++ ++/* ++ * This code is in the public domain, but in Linux it's simplest to just ++ * say it's GPL and consider the authors as the copyright holders. ++ */ ++MODULE_LICENSE("GPL"); +diff --git a/lib/xz/xz_dec_test.c b/lib/xz/xz_dec_test.c +new file mode 100644 +index 0000000..da28a19 +--- /dev/null ++++ b/lib/xz/xz_dec_test.c +@@ -0,0 +1,220 @@ ++/* ++ * XZ decoder tester ++ * ++ * Author: Lasse Collin ++ * ++ * This file has been put into the public domain. ++ * You can do whatever you want with this file. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* Maximum supported dictionary size */ ++#define DICT_MAX (1 << 20) ++ ++/* Device name to pass to register_chrdev(). */ ++#define DEVICE_NAME "xz_dec_test" ++ ++/* Dynamically allocated device major number */ ++static int device_major; ++ ++/* ++ * We reuse the same decoder state, and thus can decode only one ++ * file at a time. ++ */ ++static bool device_is_open; ++ ++/* XZ decoder state */ ++static struct xz_dec *state; ++ ++/* ++ * Return value of xz_dec_run(). We need to avoid calling xz_dec_run() after ++ * it has returned XZ_STREAM_END, so we make this static. ++ */ ++static enum xz_ret ret; ++ ++/* ++ * Input and output buffers. The input buffer is used as a temporary safe ++ * place for the data coming from the userspace. ++ */ ++static uint8_t buffer_in[1024]; ++static uint8_t buffer_out[1024]; ++ ++/* ++ * Structure to pass the input and output buffers to the XZ decoder. ++ * A few of the fields are never modified so we initialize them here. ++ */ ++static struct xz_buf buffers = { ++ .in = buffer_in, ++ .out = buffer_out, ++ .out_size = sizeof(buffer_out) ++}; ++ ++/* ++ * CRC32 of uncompressed data. This is used to give the user a simple way ++ * to check that the decoder produces correct output. ++ */ ++static uint32_t crc; ++ ++static int xz_dec_test_open(struct inode *i, struct file *f) ++{ ++ if (device_is_open) ++ return -EBUSY; ++ ++ device_is_open = true; ++ ++ xz_dec_reset(state); ++ ret = XZ_OK; ++ crc = 0xFFFFFFFF; ++ ++ buffers.in_pos = 0; ++ buffers.in_size = 0; ++ buffers.out_pos = 0; ++ ++ printk(KERN_INFO DEVICE_NAME ": opened\n"); ++ return 0; ++} ++ ++static int xz_dec_test_release(struct inode *i, struct file *f) ++{ ++ device_is_open = false; ++ ++ if (ret == XZ_OK) ++ printk(KERN_INFO DEVICE_NAME ": input was truncated\n"); ++ ++ printk(KERN_INFO DEVICE_NAME ": closed\n"); ++ return 0; ++} ++ ++/* ++ * Decode the data given to us from the userspace. CRC32 of the uncompressed ++ * data is calculated and is printed at the end of successful decoding. The ++ * uncompressed data isn't stored anywhere for further use. ++ * ++ * The .xz file must have exactly one Stream and no Stream Padding. The data ++ * after the first Stream is considered to be garbage. ++ */ ++static ssize_t xz_dec_test_write(struct file *file, const char __user *buf, ++ size_t size, loff_t *pos) ++{ ++ size_t remaining; ++ ++ if (ret != XZ_OK) { ++ if (size > 0) ++ printk(KERN_INFO DEVICE_NAME ": %zu bytes of " ++ "garbage at the end of the file\n", ++ size); ++ ++ return -ENOSPC; ++ } ++ ++ printk(KERN_INFO DEVICE_NAME ": decoding %zu bytes of input\n", ++ size); ++ ++ remaining = size; ++ while ((remaining > 0 || buffers.out_pos == buffers.out_size) ++ && ret == XZ_OK) { ++ if (buffers.in_pos == buffers.in_size) { ++ buffers.in_pos = 0; ++ buffers.in_size = min(remaining, sizeof(buffer_in)); ++ if (copy_from_user(buffer_in, buf, buffers.in_size)) ++ return -EFAULT; ++ ++ buf += buffers.in_size; ++ remaining -= buffers.in_size; ++ } ++ ++ buffers.out_pos = 0; ++ ret = xz_dec_run(state, &buffers); ++ crc = crc32(crc, buffer_out, buffers.out_pos); ++ } ++ ++ switch (ret) { ++ case XZ_OK: ++ printk(KERN_INFO DEVICE_NAME ": XZ_OK\n"); ++ return size; ++ ++ case XZ_STREAM_END: ++ printk(KERN_INFO DEVICE_NAME ": XZ_STREAM_END, " ++ "CRC32 = 0x%08X\n", ~crc); ++ return size - remaining - (buffers.in_size - buffers.in_pos); ++ ++ case XZ_MEMLIMIT_ERROR: ++ printk(KERN_INFO DEVICE_NAME ": XZ_MEMLIMIT_ERROR\n"); ++ break; ++ ++ case XZ_FORMAT_ERROR: ++ printk(KERN_INFO DEVICE_NAME ": XZ_FORMAT_ERROR\n"); ++ break; ++ ++ case XZ_OPTIONS_ERROR: ++ printk(KERN_INFO DEVICE_NAME ": XZ_OPTIONS_ERROR\n"); ++ break; ++ ++ case XZ_DATA_ERROR: ++ printk(KERN_INFO DEVICE_NAME ": XZ_DATA_ERROR\n"); ++ break; ++ ++ case XZ_BUF_ERROR: ++ printk(KERN_INFO DEVICE_NAME ": XZ_BUF_ERROR\n"); ++ break; ++ ++ default: ++ printk(KERN_INFO DEVICE_NAME ": Bug detected!\n"); ++ break; ++ } ++ ++ return -EIO; ++} ++ ++/* Allocate the XZ decoder state and register the character device. */ ++static int __init xz_dec_test_init(void) ++{ ++ static const struct file_operations fileops = { ++ .owner = THIS_MODULE, ++ .open = &xz_dec_test_open, ++ .release = &xz_dec_test_release, ++ .write = &xz_dec_test_write ++ }; ++ ++ state = xz_dec_init(XZ_PREALLOC, DICT_MAX); ++ if (state == NULL) ++ return -ENOMEM; ++ ++ device_major = register_chrdev(0, DEVICE_NAME, &fileops); ++ if (device_major < 0) { ++ xz_dec_end(state); ++ return device_major; ++ } ++ ++ printk(KERN_INFO DEVICE_NAME ": module loaded\n"); ++ printk(KERN_INFO DEVICE_NAME ": Create a device node with " ++ "'mknod " DEVICE_NAME " c %d 0' and write .xz files " ++ "to it.\n", device_major); ++ return 0; ++} ++ ++static void __exit xz_dec_test_exit(void) ++{ ++ unregister_chrdev(device_major, DEVICE_NAME); ++ xz_dec_end(state); ++ printk(KERN_INFO DEVICE_NAME ": module unloaded\n"); ++} ++ ++module_init(xz_dec_test_init); ++module_exit(xz_dec_test_exit); ++ ++MODULE_DESCRIPTION("XZ decompressor tester"); ++MODULE_VERSION("1.0"); ++MODULE_AUTHOR("Lasse Collin "); ++ ++/* ++ * This code is in the public domain, but in Linux it's simplest to just ++ * say it's GPL and consider the authors as the copyright holders. ++ */ ++MODULE_LICENSE("GPL"); +diff --git a/lib/xz/xz_lzma2.h b/lib/xz/xz_lzma2.h +new file mode 100644 +index 0000000..071d67b +--- /dev/null ++++ b/lib/xz/xz_lzma2.h +@@ -0,0 +1,204 @@ ++/* ++ * LZMA2 definitions ++ * ++ * Authors: Lasse Collin ++ * Igor Pavlov ++ * ++ * This file has been put into the public domain. ++ * You can do whatever you want with this file. ++ */ ++ ++#ifndef XZ_LZMA2_H ++#define XZ_LZMA2_H ++ ++/* Range coder constants */ ++#define RC_SHIFT_BITS 8 ++#define RC_TOP_BITS 24 ++#define RC_TOP_VALUE (1 << RC_TOP_BITS) ++#define RC_BIT_MODEL_TOTAL_BITS 11 ++#define RC_BIT_MODEL_TOTAL (1 << RC_BIT_MODEL_TOTAL_BITS) ++#define RC_MOVE_BITS 5 ++ ++/* ++ * Maximum number of position states. A position state is the lowest pb ++ * number of bits of the current uncompressed offset. In some places there ++ * are different sets of probabilities for different position states. ++ */ ++#define POS_STATES_MAX (1 << 4) ++ ++/* ++ * This enum is used to track which LZMA symbols have occurred most recently ++ * and in which order. This information is used to predict the next symbol. ++ * ++ * Symbols: ++ * - Literal: One 8-bit byte ++ * - Match: Repeat a chunk of data at some distance ++ * - Long repeat: Multi-byte match at a recently seen distance ++ * - Short repeat: One-byte repeat at a recently seen distance ++ * ++ * The symbol names are in from STATE_oldest_older_previous. REP means ++ * either short or long repeated match, and NONLIT means any non-literal. ++ */ ++enum lzma_state { ++ STATE_LIT_LIT, ++ STATE_MATCH_LIT_LIT, ++ STATE_REP_LIT_LIT, ++ STATE_SHORTREP_LIT_LIT, ++ STATE_MATCH_LIT, ++ STATE_REP_LIT, ++ STATE_SHORTREP_LIT, ++ STATE_LIT_MATCH, ++ STATE_LIT_LONGREP, ++ STATE_LIT_SHORTREP, ++ STATE_NONLIT_MATCH, ++ STATE_NONLIT_REP ++}; ++ ++/* Total number of states */ ++#define STATES 12 ++ ++/* The lowest 7 states indicate that the previous state was a literal. */ ++#define LIT_STATES 7 ++ ++/* Indicate that the latest symbol was a literal. */ ++static inline void lzma_state_literal(enum lzma_state *state) ++{ ++ if (*state <= STATE_SHORTREP_LIT_LIT) ++ *state = STATE_LIT_LIT; ++ else if (*state <= STATE_LIT_SHORTREP) ++ *state -= 3; ++ else ++ *state -= 6; ++} ++ ++/* Indicate that the latest symbol was a match. */ ++static inline void lzma_state_match(enum lzma_state *state) ++{ ++ *state = *state < LIT_STATES ? STATE_LIT_MATCH : STATE_NONLIT_MATCH; ++} ++ ++/* Indicate that the latest state was a long repeated match. */ ++static inline void lzma_state_long_rep(enum lzma_state *state) ++{ ++ *state = *state < LIT_STATES ? STATE_LIT_LONGREP : STATE_NONLIT_REP; ++} ++ ++/* Indicate that the latest symbol was a short match. */ ++static inline void lzma_state_short_rep(enum lzma_state *state) ++{ ++ *state = *state < LIT_STATES ? STATE_LIT_SHORTREP : STATE_NONLIT_REP; ++} ++ ++/* Test if the previous symbol was a literal. */ ++static inline bool lzma_state_is_literal(enum lzma_state state) ++{ ++ return state < LIT_STATES; ++} ++ ++/* Each literal coder is divided in three sections: ++ * - 0x001-0x0FF: Without match byte ++ * - 0x101-0x1FF: With match byte; match bit is 0 ++ * - 0x201-0x2FF: With match byte; match bit is 1 ++ * ++ * Match byte is used when the previous LZMA symbol was something else than ++ * a literal (that is, it was some kind of match). ++ */ ++#define LITERAL_CODER_SIZE 0x300 ++ ++/* Maximum number of literal coders */ ++#define LITERAL_CODERS_MAX (1 << 4) ++ ++/* Minimum length of a match is two bytes. */ ++#define MATCH_LEN_MIN 2 ++ ++/* Match length is encoded with 4, 5, or 10 bits. ++ * ++ * Length Bits ++ * 2-9 4 = Choice=0 + 3 bits ++ * 10-17 5 = Choice=1 + Choice2=0 + 3 bits ++ * 18-273 10 = Choice=1 + Choice2=1 + 8 bits ++ */ ++#define LEN_LOW_BITS 3 ++#define LEN_LOW_SYMBOLS (1 << LEN_LOW_BITS) ++#define LEN_MID_BITS 3 ++#define LEN_MID_SYMBOLS (1 << LEN_MID_BITS) ++#define LEN_HIGH_BITS 8 ++#define LEN_HIGH_SYMBOLS (1 << LEN_HIGH_BITS) ++#define LEN_SYMBOLS (LEN_LOW_SYMBOLS + LEN_MID_SYMBOLS + LEN_HIGH_SYMBOLS) ++ ++/* ++ * Maximum length of a match is 273 which is a result of the encoding ++ * described above. ++ */ ++#define MATCH_LEN_MAX (MATCH_LEN_MIN + LEN_SYMBOLS - 1) ++ ++/* ++ * Different sets of probabilities are used for match distances that have ++ * very short match length: Lengths of 2, 3, and 4 bytes have a separate ++ * set of probabilities for each length. The matches with longer length ++ * use a shared set of probabilities. ++ */ ++#define DIST_STATES 4 ++ ++/* ++ * Get the index of the appropriate probability array for decoding ++ * the distance slot. ++ */ ++static inline uint32_t lzma_get_dist_state(uint32_t len) ++{ ++ return len < DIST_STATES + MATCH_LEN_MIN ++ ? len - MATCH_LEN_MIN : DIST_STATES - 1; ++} ++ ++/* ++ * The highest two bits of a 32-bit match distance are encoded using six bits. ++ * This six-bit value is called a distance slot. This way encoding a 32-bit ++ * value takes 6-36 bits, larger values taking more bits. ++ */ ++#define DIST_SLOT_BITS 6 ++#define DIST_SLOTS (1 << DIST_SLOT_BITS) ++ ++/* Match distances up to 127 are fully encoded using probabilities. Since ++ * the highest two bits (distance slot) are always encoded using six bits, ++ * the distances 0-3 don't need any additional bits to encode, since the ++ * distance slot itself is the same as the actual distance. DIST_MODEL_START ++ * indicates the first distance slot where at least one additional bit is ++ * needed. ++ */ ++#define DIST_MODEL_START 4 ++ ++/* ++ * Match distances greater than 127 are encoded in three pieces: ++ * - distance slot: the highest two bits ++ * - direct bits: 2-26 bits below the highest two bits ++ * - alignment bits: four lowest bits ++ * ++ * Direct bits don't use any probabilities. ++ * ++ * The distance slot value of 14 is for distances 128-191. ++ */ ++#define DIST_MODEL_END 14 ++ ++/* Distance slots that indicate a distance <= 127. */ ++#define FULL_DISTANCES_BITS (DIST_MODEL_END / 2) ++#define FULL_DISTANCES (1 << FULL_DISTANCES_BITS) ++ ++/* ++ * For match distances greater than 127, only the highest two bits and the ++ * lowest four bits (alignment) is encoded using probabilities. ++ */ ++#define ALIGN_BITS 4 ++#define ALIGN_SIZE (1 << ALIGN_BITS) ++#define ALIGN_MASK (ALIGN_SIZE - 1) ++ ++/* Total number of all probability variables */ ++#define PROBS_TOTAL (1846 + LITERAL_CODERS_MAX * LITERAL_CODER_SIZE) ++ ++/* ++ * LZMA remembers the four most recent match distances. Reusing these ++ * distances tends to take less space than re-encoding the actual ++ * distance value. ++ */ ++#define REPS 4 ++ ++#endif +diff --git a/lib/xz/xz_private.h b/lib/xz/xz_private.h +new file mode 100644 +index 0000000..a65633e +--- /dev/null ++++ b/lib/xz/xz_private.h +@@ -0,0 +1,156 @@ ++/* ++ * Private includes and definitions ++ * ++ * Author: Lasse Collin ++ * ++ * This file has been put into the public domain. ++ * You can do whatever you want with this file. ++ */ ++ ++#ifndef XZ_PRIVATE_H ++#define XZ_PRIVATE_H ++ ++#ifdef __KERNEL__ ++# include ++# include ++# include ++ /* XZ_PREBOOT may be defined only via decompress_unxz.c. */ ++# ifndef XZ_PREBOOT ++# include ++# include ++# include ++# ifdef CONFIG_XZ_DEC_X86 ++# define XZ_DEC_X86 ++# endif ++# ifdef CONFIG_XZ_DEC_POWERPC ++# define XZ_DEC_POWERPC ++# endif ++# ifdef CONFIG_XZ_DEC_IA64 ++# define XZ_DEC_IA64 ++# endif ++# ifdef CONFIG_XZ_DEC_ARM ++# define XZ_DEC_ARM ++# endif ++# ifdef CONFIG_XZ_DEC_ARMTHUMB ++# define XZ_DEC_ARMTHUMB ++# endif ++# ifdef CONFIG_XZ_DEC_SPARC ++# define XZ_DEC_SPARC ++# endif ++# define memeq(a, b, size) (memcmp(a, b, size) == 0) ++# define memzero(buf, size) memset(buf, 0, size) ++# endif ++# define get_le32(p) le32_to_cpup((const uint32_t *)(p)) ++#else ++ /* ++ * For userspace builds, use a separate header to define the required ++ * macros and functions. This makes it easier to adapt the code into ++ * different environments and avoids clutter in the Linux kernel tree. ++ */ ++# include "xz_config.h" ++#endif ++ ++/* If no specific decoding mode is requested, enable support for all modes. */ ++#if !defined(XZ_DEC_SINGLE) && !defined(XZ_DEC_PREALLOC) \ ++ && !defined(XZ_DEC_DYNALLOC) ++# define XZ_DEC_SINGLE ++# define XZ_DEC_PREALLOC ++# define XZ_DEC_DYNALLOC ++#endif ++ ++/* ++ * The DEC_IS_foo(mode) macros are used in "if" statements. If only some ++ * of the supported modes are enabled, these macros will evaluate to true or ++ * false at compile time and thus allow the compiler to omit unneeded code. ++ */ ++#ifdef XZ_DEC_SINGLE ++# define DEC_IS_SINGLE(mode) ((mode) == XZ_SINGLE) ++#else ++# define DEC_IS_SINGLE(mode) (false) ++#endif ++ ++#ifdef XZ_DEC_PREALLOC ++# define DEC_IS_PREALLOC(mode) ((mode) == XZ_PREALLOC) ++#else ++# define DEC_IS_PREALLOC(mode) (false) ++#endif ++ ++#ifdef XZ_DEC_DYNALLOC ++# define DEC_IS_DYNALLOC(mode) ((mode) == XZ_DYNALLOC) ++#else ++# define DEC_IS_DYNALLOC(mode) (false) ++#endif ++ ++#if !defined(XZ_DEC_SINGLE) ++# define DEC_IS_MULTI(mode) (true) ++#elif defined(XZ_DEC_PREALLOC) || defined(XZ_DEC_DYNALLOC) ++# define DEC_IS_MULTI(mode) ((mode) != XZ_SINGLE) ++#else ++# define DEC_IS_MULTI(mode) (false) ++#endif ++ ++/* ++ * If any of the BCJ filter decoders are wanted, define XZ_DEC_BCJ. ++ * XZ_DEC_BCJ is used to enable generic support for BCJ decoders. ++ */ ++#ifndef XZ_DEC_BCJ ++# if defined(XZ_DEC_X86) || defined(XZ_DEC_POWERPC) \ ++ || defined(XZ_DEC_IA64) || defined(XZ_DEC_ARM) \ ++ || defined(XZ_DEC_ARM) || defined(XZ_DEC_ARMTHUMB) \ ++ || defined(XZ_DEC_SPARC) ++# define XZ_DEC_BCJ ++# endif ++#endif ++ ++/* ++ * Allocate memory for LZMA2 decoder. xz_dec_lzma2_reset() must be used ++ * before calling xz_dec_lzma2_run(). ++ */ ++XZ_EXTERN struct xz_dec_lzma2 *xz_dec_lzma2_create(enum xz_mode mode, ++ uint32_t dict_max); ++ ++/* ++ * Decode the LZMA2 properties (one byte) and reset the decoder. Return ++ * XZ_OK on success, XZ_MEMLIMIT_ERROR if the preallocated dictionary is not ++ * big enough, and XZ_OPTIONS_ERROR if props indicates something that this ++ * decoder doesn't support. ++ */ ++XZ_EXTERN enum xz_ret xz_dec_lzma2_reset(struct xz_dec_lzma2 *s, ++ uint8_t props); ++ ++/* Decode raw LZMA2 stream from b->in to b->out. */ ++XZ_EXTERN enum xz_ret xz_dec_lzma2_run(struct xz_dec_lzma2 *s, ++ struct xz_buf *b); ++ ++/* Free the memory allocated for the LZMA2 decoder. */ ++XZ_EXTERN void xz_dec_lzma2_end(struct xz_dec_lzma2 *s); ++ ++#ifdef XZ_DEC_BCJ ++/* ++ * Allocate memory for BCJ decoders. xz_dec_bcj_reset() must be used before ++ * calling xz_dec_bcj_run(). ++ */ ++XZ_EXTERN struct xz_dec_bcj *xz_dec_bcj_create(bool single_call); ++ ++/* ++ * Decode the Filter ID of a BCJ filter. This implementation doesn't ++ * support custom start offsets, so no decoding of Filter Properties ++ * is needed. Returns XZ_OK if the given Filter ID is supported. ++ * Otherwise XZ_OPTIONS_ERROR is returned. ++ */ ++XZ_EXTERN enum xz_ret xz_dec_bcj_reset(struct xz_dec_bcj *s, uint8_t id); ++ ++/* ++ * Decode raw BCJ + LZMA2 stream. This must be used only if there actually is ++ * a BCJ filter in the chain. If the chain has only LZMA2, xz_dec_lzma2_run() ++ * must be called directly. ++ */ ++XZ_EXTERN enum xz_ret xz_dec_bcj_run(struct xz_dec_bcj *s, ++ struct xz_dec_lzma2 *lzma2, ++ struct xz_buf *b); ++ ++/* Free the memory allocated for the BCJ filters. */ ++#define xz_dec_bcj_end(s) kfree(s) ++#endif ++ ++#endif +diff --git a/lib/xz/xz_stream.h b/lib/xz/xz_stream.h +new file mode 100644 +index 0000000..66cb5a7 +--- /dev/null ++++ b/lib/xz/xz_stream.h +@@ -0,0 +1,62 @@ ++/* ++ * Definitions for handling the .xz file format ++ * ++ * Author: Lasse Collin ++ * ++ * This file has been put into the public domain. ++ * You can do whatever you want with this file. ++ */ ++ ++#ifndef XZ_STREAM_H ++#define XZ_STREAM_H ++ ++#if defined(__KERNEL__) && !XZ_INTERNAL_CRC32 ++# include ++# undef crc32 ++# define xz_crc32(buf, size, crc) \ ++ (~crc32_le(~(uint32_t)(crc), buf, size)) ++#endif ++ ++/* ++ * See the .xz file format specification at ++ * http://tukaani.org/xz/xz-file-format.txt ++ * to understand the container format. ++ */ ++ ++#define STREAM_HEADER_SIZE 12 ++ ++#define HEADER_MAGIC "\3757zXZ" ++#define HEADER_MAGIC_SIZE 6 ++ ++#define FOOTER_MAGIC "YZ" ++#define FOOTER_MAGIC_SIZE 2 ++ ++/* ++ * Variable-length integer can hold a 63-bit unsigned integer or a special ++ * value indicating that the value is unknown. ++ * ++ * Experimental: vli_type can be defined to uint32_t to save a few bytes ++ * in code size (no effect on speed). Doing so limits the uncompressed and ++ * compressed size of the file to less than 256 MiB and may also weaken ++ * error detection slightly. ++ */ ++typedef uint64_t vli_type; ++ ++#define VLI_MAX ((vli_type)-1 / 2) ++#define VLI_UNKNOWN ((vli_type)-1) ++ ++/* Maximum encoded size of a VLI */ ++#define VLI_BYTES_MAX (sizeof(vli_type) * 8 / 7) ++ ++/* Integrity Check types */ ++enum xz_check { ++ XZ_CHECK_NONE = 0, ++ XZ_CHECK_CRC32 = 1, ++ XZ_CHECK_CRC64 = 4, ++ XZ_CHECK_SHA256 = 10 ++}; ++ ++/* Maximum possible Check ID */ ++#define XZ_CHECK_MAX 15 ++ ++#endif +diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib +index 54fd1b7..b862007 100644 +--- a/scripts/Makefile.lib ++++ b/scripts/Makefile.lib +@@ -246,6 +246,34 @@ cmd_lzo = (cat $(filter-out FORCE,$^) | \ + lzop -9 && $(call size_append, $(filter-out FORCE,$^))) > $@ || \ + (rm -f $@ ; false) + ++# XZ ++# --------------------------------------------------------------------------- ++# Use xzkern to compress the kernel image and xzmisc to compress other things. ++# ++# xzkern uses a big LZMA2 dictionary since it doesn't increase memory usage ++# of the kernel decompressor. A BCJ filter is used if it is available for ++# the target architecture. xzkern also appends uncompressed size of the data ++# using size_append. The .xz format has the size information available at ++# the end of the file too, but it's in more complex format and it's good to ++# avoid changing the part of the boot code that reads the uncompressed size. ++# Note that the bytes added by size_append will make the xz tool think that ++# the file is corrupt. This is expected. ++# ++# xzmisc doesn't use size_append, so it can be used to create normal .xz ++# files. xzmisc uses smaller LZMA2 dictionary than xzkern, because a very ++# big dictionary would increase the memory usage too much in the multi-call ++# decompression mode. A BCJ filter isn't used either. ++quiet_cmd_xzkern = XZKERN $@ ++cmd_xzkern = (cat $(filter-out FORCE,$^) | \ ++ sh $(srctree)/scripts/xz_wrap.sh && \ ++ $(call size_append, $(filter-out FORCE,$^))) > $@ || \ ++ (rm -f $@ ; false) ++ ++quiet_cmd_xzmisc = XZMISC $@ ++cmd_xzmisc = (cat $(filter-out FORCE,$^) | \ ++ xz --check=crc32 --lzma2=dict=1MiB) > $@ || \ ++ (rm -f $@ ; false) ++ + # misc stuff + # --------------------------------------------------------------------------- + quote:=" +diff --git a/scripts/xz_wrap.sh b/scripts/xz_wrap.sh +new file mode 100644 +index 0000000..17a5798 +--- /dev/null ++++ b/scripts/xz_wrap.sh +@@ -0,0 +1,23 @@ ++#!/bin/sh ++# ++# This is a wrapper for xz to compress the kernel image using appropriate ++# compression options depending on the architecture. ++# ++# Author: Lasse Collin ++# ++# This file has been put into the public domain. ++# You can do whatever you want with this file. ++# ++ ++BCJ= ++LZMA2OPTS= ++ ++case $ARCH in ++ x86|x86_64) BCJ=--x86 ;; ++ powerpc) BCJ=--powerpc ;; ++ ia64) BCJ=--ia64; LZMA2OPTS=pb=4 ;; ++ arm) BCJ=--arm ;; ++ sparc) BCJ=--sparc ;; ++esac ++ ++exec xz --check=crc32 $BCJ --lzma2=$LZMA2OPTS,dict=32MiB diff -r c241da0f26a5 -r 5d8744871068 kernel-modular/stuff/002-squashfs-decompressors-add-boot-time-xz-support.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel-modular/stuff/002-squashfs-decompressors-add-boot-time-xz-support.patch Tue Feb 01 09:37:33 2011 +0100 @@ -0,0 +1,638 @@ +From: Lasse Collin +Date: Thu, 2 Dec 2010 19:14:37 +0000 (+0200) +Subject: Decompressors: Add boot-time XZ support +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fpkl%2Fsquashfs-xz.git;a=commitdiff_plain;h=c64bc9a229b46db75d7761601dd8ca25385a7780 + +Decompressors: Add boot-time XZ support + +This implements the API defined in +which is used for kernel, initramfs, and initrd decompression. +This patch together with the first patch is enough for +XZ-compressed initramfs and initrd; XZ-compressed kernel will +need arch-specific changes. + +In contrast to other initramfs compression methods, support for +XZ-compressed initramfs is not enabled by default in usr/Kconfig. +This is primarily due to the Kconfig options of the xz_dec +module. It can be good to require that xz_dec is enabled +separately so the user can select only the BCJ filters he needs +when EMBEDDED=y. + +The buffering requirements described in decompress_unxz.c are +stricter than with gzip, so the relevant changes should be done +to the arch-specific code when adding support for XZ-compressed +kernel. Similarly, the heap size in arch-specific pre-boot code +may need to be increased (30 KiB is enough). + +The XZ decompressor needs memmove(), memeq() (memcmp() == 0), +and memzero() (memset(ptr, 0, size)), which aren't available in +all arch-specific pre-boot environments. I'm including simple +versions in decompress_unxz.c, but a cleaner solution would +naturally be nicer. + +Signed-off-by: Lasse Collin +--- + +diff --git a/include/linux/decompress/unxz.h b/include/linux/decompress/unxz.h +new file mode 100644 +index 0000000..41728fc +--- /dev/null ++++ b/include/linux/decompress/unxz.h +@@ -0,0 +1,19 @@ ++/* ++ * Wrapper for decompressing XZ-compressed kernel, initramfs, and initrd ++ * ++ * Author: Lasse Collin ++ * ++ * This file has been put into the public domain. ++ * You can do whatever you want with this file. ++ */ ++ ++#ifndef DECOMPRESS_UNXZ_H ++#define DECOMPRESS_UNXZ_H ++ ++int unxz(unsigned char *in, int in_size, ++ int (*fill)(void *dest, unsigned int size), ++ int (*flush)(void *src, unsigned int size), ++ unsigned char *out, int *in_used, ++ void (*error)(char *x)); ++ ++#endif +diff --git a/init/Kconfig b/init/Kconfig +index 2de5b1c..d9fbb0f 100644 +--- a/init/Kconfig ++++ b/init/Kconfig +@@ -123,13 +123,16 @@ config HAVE_KERNEL_BZIP2 + config HAVE_KERNEL_LZMA + bool + ++config HAVE_KERNEL_XZ ++ bool ++ + config HAVE_KERNEL_LZO + bool + + choice + prompt "Kernel compression mode" + default KERNEL_GZIP +- depends on HAVE_KERNEL_GZIP || HAVE_KERNEL_BZIP2 || HAVE_KERNEL_LZMA || HAVE_KERNEL_LZO ++ depends on HAVE_KERNEL_GZIP || HAVE_KERNEL_BZIP2 || HAVE_KERNEL_LZMA || HAVE_KERNEL_XZ || HAVE_KERNEL_LZO + help + The linux kernel is a kind of self-extracting executable. + Several compression algorithms are available, which differ +@@ -174,6 +177,21 @@ config KERNEL_LZMA + two. Compression is slowest. The kernel size is about 33% + smaller with LZMA in comparison to gzip. + ++config KERNEL_XZ ++ bool "XZ" ++ depends on HAVE_KERNEL_XZ ++ help ++ XZ uses the LZMA2 algorithm and instruction set specific ++ BCJ filters which can improve compression ratio of executable ++ code. The size of the kernel is about 30% smaller with XZ in ++ comparison to gzip. On architectures for which there is a BCJ ++ filter (i386, x86_64, ARM, IA-64, PowerPC, and SPARC), XZ ++ will create a few percent smaller kernel than plain LZMA. ++ ++ The speed is about the same as with LZMA: The decompression ++ speed of XZ is better than that of bzip2 but worse than gzip ++ and LZO. Compression is slow. ++ + config KERNEL_LZO + bool "LZO" + depends on HAVE_KERNEL_LZO +diff --git a/lib/Kconfig b/lib/Kconfig +index 6090314..45960e1 100644 +--- a/lib/Kconfig ++++ b/lib/Kconfig +@@ -122,6 +122,9 @@ config DECOMPRESS_BZIP2 + config DECOMPRESS_LZMA + tristate + ++config DECOMPRESS_XZ ++ tristate ++ + config DECOMPRESS_LZO + select LZO_DECOMPRESS + tristate +diff --git a/lib/Makefile b/lib/Makefile +index f2f98dd..06e3d8a 100644 +--- a/lib/Makefile ++++ b/lib/Makefile +@@ -75,6 +75,7 @@ obj-$(CONFIG_RAID6_PQ) += raid6/ + lib-$(CONFIG_DECOMPRESS_GZIP) += decompress_inflate.o + lib-$(CONFIG_DECOMPRESS_BZIP2) += decompress_bunzip2.o + lib-$(CONFIG_DECOMPRESS_LZMA) += decompress_unlzma.o ++lib-$(CONFIG_DECOMPRESS_XZ) += decompress_unxz.o + lib-$(CONFIG_DECOMPRESS_LZO) += decompress_unlzo.o + + obj-$(CONFIG_TEXTSEARCH) += textsearch.o +diff --git a/lib/decompress.c b/lib/decompress.c +index a760681..3d766b7 100644 +--- a/lib/decompress.c ++++ b/lib/decompress.c +@@ -8,6 +8,7 @@ + + #include + #include ++#include + #include + #include + +@@ -23,6 +24,9 @@ + #ifndef CONFIG_DECOMPRESS_LZMA + # define unlzma NULL + #endif ++#ifndef CONFIG_DECOMPRESS_XZ ++# define unxz NULL ++#endif + #ifndef CONFIG_DECOMPRESS_LZO + # define unlzo NULL + #endif +@@ -36,6 +40,7 @@ static const struct compress_format { + { {037, 0236}, "gzip", gunzip }, + { {0x42, 0x5a}, "bzip2", bunzip2 }, + { {0x5d, 0x00}, "lzma", unlzma }, ++ { {0xfd, 0x37}, "xz", unxz }, + { {0x89, 0x4c}, "lzo", unlzo }, + { {0, 0}, NULL, NULL } + }; +diff --git a/lib/decompress_unxz.c b/lib/decompress_unxz.c +new file mode 100644 +index 0000000..cecd23d +--- /dev/null ++++ b/lib/decompress_unxz.c +@@ -0,0 +1,397 @@ ++/* ++ * Wrapper for decompressing XZ-compressed kernel, initramfs, and initrd ++ * ++ * Author: Lasse Collin ++ * ++ * This file has been put into the public domain. ++ * You can do whatever you want with this file. ++ */ ++ ++/* ++ * Important notes about in-place decompression ++ * ++ * At least on x86, the kernel is decompressed in place: the compressed data ++ * is placed to the end of the output buffer, and the decompressor overwrites ++ * most of the compressed data. There must be enough safety margin to ++ * guarantee that the write position is always behind the read position. ++ * ++ * The safety margin for XZ with LZMA2 or BCJ+LZMA2 is calculated below. ++ * Note that the margin with XZ is bigger than with Deflate (gzip)! ++ * ++ * The worst case for in-place decompression is that the beginning of ++ * the file is compressed extremely well, and the rest of the file is ++ * uncompressible. Thus, we must look for worst-case expansion when the ++ * compressor is encoding uncompressible data. ++ * ++ * The structure of the .xz file in case of a compresed kernel is as follows. ++ * Sizes (as bytes) of the fields are in parenthesis. ++ * ++ * Stream Header (12) ++ * Block Header: ++ * Block Header (8-12) ++ * Compressed Data (N) ++ * Block Padding (0-3) ++ * CRC32 (4) ++ * Index (8-20) ++ * Stream Footer (12) ++ * ++ * Normally there is exactly one Block, but let's assume that there are ++ * 2-4 Blocks just in case. Because Stream Header and also Block Header ++ * of the first Block don't make the decompressor produce any uncompressed ++ * data, we can ignore them from our calculations. Block Headers of possible ++ * additional Blocks have to be taken into account still. With these ++ * assumptions, it is safe to assume that the total header overhead is ++ * less than 128 bytes. ++ * ++ * Compressed Data contains LZMA2 or BCJ+LZMA2 encoded data. Since BCJ ++ * doesn't change the size of the data, it is enough to calculate the ++ * safety margin for LZMA2. ++ * ++ * LZMA2 stores the data in chunks. Each chunk has a header whose size is ++ * a maximum of 6 bytes, but to get round 2^n numbers, let's assume that ++ * the maximum chunk header size is 8 bytes. After the chunk header, there ++ * may be up to 64 KiB of actual payload in the chunk. Often the payload is ++ * quite a bit smaller though; to be safe, let's assume that an average ++ * chunk has only 32 KiB of payload. ++ * ++ * The maximum uncompressed size of the payload is 2 MiB. The minimum ++ * uncompressed size of the payload is in practice never less than the ++ * payload size itself. The LZMA2 format would allow uncompressed size ++ * to be less than the payload size, but no sane compressor creates such ++ * files. LZMA2 supports storing uncompressible data in uncompressed form, ++ * so there's never a need to create payloads whose uncompressed size is ++ * smaller than the compressed size. ++ * ++ * The assumption, that the uncompressed size of the payload is never ++ * smaller than the payload itself, is valid only when talking about ++ * the payload as a whole. It is possible that the payload has parts where ++ * the decompressor consumes more input than it produces output. Calculating ++ * the worst case for this would be tricky. Instead of trying to do that, ++ * let's simply make sure that the decompressor never overwrites any bytes ++ * of the payload which it is currently reading. ++ * ++ * Now we have enough information to calculate the safety margin. We need ++ * - 128 bytes for the .xz file format headers; ++ * - 8 bytes per every 32 KiB of uncompressed size (one LZMA2 chunk header ++ * per chunk, each chunk having average payload size of 32 KiB); and ++ * - 64 KiB (biggest possible LZMA2 chunk payload size) to make sure that ++ * the decompressor never overwrites anything from the LZMA2 chunk ++ * payload it is currently reading. ++ * ++ * We get the following formula: ++ * ++ * safety_margin = 128 + uncompressed_size * 8 / 32768 + 65536 ++ * = 128 + (uncompressed_size >> 12) + 65536 ++ * ++ * For comparision, according to arch/x86/boot/compressed/misc.c, the ++ * equivalent formula for Deflate is this: ++ * ++ * safety_margin = 18 + (uncompressed_size >> 12) + 32768 ++ * ++ * Thus, when updating Deflate-only in-place kernel decompressor to ++ * support XZ, the fixed overhead has to be increased from 18+32768 bytes ++ * to 128+65536 bytes. ++ */ ++ ++/* ++ * STATIC is defined to "static" if we are being built for kernel ++ * decompression (pre-boot code). will define ++ * STATIC to empty if it wasn't already defined. Since we will need to ++ * know later if we are being used for kernel decompression, we define ++ * XZ_PREBOOT here. ++ */ ++#ifdef STATIC ++# define XZ_PREBOOT ++#endif ++#ifdef __KERNEL__ ++# include ++#endif ++#define XZ_EXTERN STATIC ++ ++#ifndef XZ_PREBOOT ++# include ++# include ++#else ++/* ++ * Use the internal CRC32 code instead of kernel's CRC32 module, which ++ * is not available in early phase of booting. ++ */ ++#define XZ_INTERNAL_CRC32 1 ++ ++/* ++ * For boot time use, we enable only the BCJ filter of the current ++ * architecture or none if no BCJ filter is available for the architecture. ++ */ ++#ifdef CONFIG_X86 ++# define XZ_DEC_X86 ++#endif ++#ifdef CONFIG_PPC ++# define XZ_DEC_POWERPC ++#endif ++#ifdef CONFIG_ARM ++# define XZ_DEC_ARM ++#endif ++#ifdef CONFIG_IA64 ++# define XZ_DEC_IA64 ++#endif ++#ifdef CONFIG_SPARC ++# define XZ_DEC_SPARC ++#endif ++ ++/* ++ * This will get the basic headers so that memeq() and others ++ * can be defined. ++ */ ++#include "xz/xz_private.h" ++ ++/* ++ * Replace the normal allocation functions with the versions from ++ * . vfree() needs to support vfree(NULL) ++ * when XZ_DYNALLOC is used, but the pre-boot free() doesn't support it. ++ * Workaround it here because the other decompressors don't need it. ++ */ ++#undef kmalloc ++#undef kfree ++#undef vmalloc ++#undef vfree ++#define kmalloc(size, flags) malloc(size) ++#define kfree(ptr) free(ptr) ++#define vmalloc(size) malloc(size) ++#define vfree(ptr) do { if (ptr != NULL) free(ptr); } while (0) ++ ++/* ++ * FIXME: Not all basic memory functions are provided in architecture-specific ++ * files (yet). We define our own versions here for now, but this should be ++ * only a temporary solution. ++ * ++ * memeq and memzero are not used much and any remotely sane implementation ++ * is fast enough. memcpy/memmove speed matters in multi-call mode, but ++ * the kernel image is decompressed in single-call mode, in which only ++ * memcpy speed can matter and only if there is a lot of uncompressible data ++ * (LZMA2 stores uncompressible chunks in uncompressed form). Thus, the ++ * functions below should just be kept small; it's probably not worth ++ * optimizing for speed. ++ */ ++ ++#ifndef memeq ++static bool memeq(const void *a, const void *b, size_t size) ++{ ++ const uint8_t *x = a; ++ const uint8_t *y = b; ++ size_t i; ++ ++ for (i = 0; i < size; ++i) ++ if (x[i] != y[i]) ++ return false; ++ ++ return true; ++} ++#endif ++ ++#ifndef memzero ++static void memzero(void *buf, size_t size) ++{ ++ uint8_t *b = buf; ++ uint8_t *e = b + size; ++ ++ while (b != e) ++ *b++ = '\0'; ++} ++#endif ++ ++#ifndef memmove ++/* Not static to avoid a conflict with the prototype in the Linux headers. */ ++void *memmove(void *dest, const void *src, size_t size) ++{ ++ uint8_t *d = dest; ++ const uint8_t *s = src; ++ size_t i; ++ ++ if (d < s) { ++ for (i = 0; i < size; ++i) ++ d[i] = s[i]; ++ } else if (d > s) { ++ i = size; ++ while (i-- > 0) ++ d[i] = s[i]; ++ } ++ ++ return dest; ++} ++#endif ++ ++/* ++ * Since we need memmove anyway, would use it as memcpy too. ++ * Commented out for now to avoid breaking things. ++ */ ++/* ++#ifndef memcpy ++# define memcpy memmove ++#endif ++*/ ++ ++#include "xz/xz_crc32.c" ++#include "xz/xz_dec_stream.c" ++#include "xz/xz_dec_lzma2.c" ++#include "xz/xz_dec_bcj.c" ++ ++#endif /* XZ_PREBOOT */ ++ ++/* Size of the input and output buffers in multi-call mode */ ++#define XZ_IOBUF_SIZE 4096 ++ ++/* ++ * This function implements the API defined in . ++ * ++ * This wrapper will automatically choose single-call or multi-call mode ++ * of the native XZ decoder API. The single-call mode can be used only when ++ * both input and output buffers are available as a single chunk, i.e. when ++ * fill() and flush() won't be used. ++ */ ++STATIC int INIT unxz(unsigned char *in, int in_size, ++ int (*fill)(void *dest, unsigned int size), ++ int (*flush)(void *src, unsigned int size), ++ unsigned char *out, int *in_used, ++ void (*error)(char *x)) ++{ ++ struct xz_buf b; ++ struct xz_dec *s; ++ enum xz_ret ret; ++ bool must_free_in = false; ++ ++#if XZ_INTERNAL_CRC32 ++ xz_crc32_init(); ++#endif ++ ++ if (in_used != NULL) ++ *in_used = 0; ++ ++ if (fill == NULL && flush == NULL) ++ s = xz_dec_init(XZ_SINGLE, 0); ++ else ++ s = xz_dec_init(XZ_DYNALLOC, (uint32_t)-1); ++ ++ if (s == NULL) ++ goto error_alloc_state; ++ ++ if (flush == NULL) { ++ b.out = out; ++ b.out_size = (size_t)-1; ++ } else { ++ b.out_size = XZ_IOBUF_SIZE; ++ b.out = malloc(XZ_IOBUF_SIZE); ++ if (b.out == NULL) ++ goto error_alloc_out; ++ } ++ ++ if (in == NULL) { ++ must_free_in = true; ++ in = malloc(XZ_IOBUF_SIZE); ++ if (in == NULL) ++ goto error_alloc_in; ++ } ++ ++ b.in = in; ++ b.in_pos = 0; ++ b.in_size = in_size; ++ b.out_pos = 0; ++ ++ if (fill == NULL && flush == NULL) { ++ ret = xz_dec_run(s, &b); ++ } else { ++ do { ++ if (b.in_pos == b.in_size && fill != NULL) { ++ if (in_used != NULL) ++ *in_used += b.in_pos; ++ ++ b.in_pos = 0; ++ ++ in_size = fill(in, XZ_IOBUF_SIZE); ++ if (in_size < 0) { ++ /* ++ * This isn't an optimal error code ++ * but it probably isn't worth making ++ * a new one either. ++ */ ++ ret = XZ_BUF_ERROR; ++ break; ++ } ++ ++ b.in_size = in_size; ++ } ++ ++ ret = xz_dec_run(s, &b); ++ ++ if (flush != NULL && (b.out_pos == b.out_size ++ || (ret != XZ_OK && b.out_pos > 0))) { ++ /* ++ * Setting ret here may hide an error ++ * returned by xz_dec_run(), but probably ++ * it's not too bad. ++ */ ++ if (flush(b.out, b.out_pos) != (int)b.out_pos) ++ ret = XZ_BUF_ERROR; ++ ++ b.out_pos = 0; ++ } ++ } while (ret == XZ_OK); ++ ++ if (must_free_in) ++ free(in); ++ ++ if (flush != NULL) ++ free(b.out); ++ } ++ ++ if (in_used != NULL) ++ *in_used += b.in_pos; ++ ++ xz_dec_end(s); ++ ++ switch (ret) { ++ case XZ_STREAM_END: ++ return 0; ++ ++ case XZ_MEM_ERROR: ++ /* This can occur only in multi-call mode. */ ++ error("XZ decompressor ran out of memory"); ++ break; ++ ++ case XZ_FORMAT_ERROR: ++ error("Input is not in the XZ format (wrong magic bytes)"); ++ break; ++ ++ case XZ_OPTIONS_ERROR: ++ error("Input was encoded with settings that are not " ++ "supported by this XZ decoder"); ++ break; ++ ++ case XZ_DATA_ERROR: ++ case XZ_BUF_ERROR: ++ error("XZ-compressed data is corrupt"); ++ break; ++ ++ default: ++ error("Bug in the XZ decompressor"); ++ break; ++ } ++ ++ return -1; ++ ++error_alloc_in: ++ if (flush != NULL) ++ free(b.out); ++ ++error_alloc_out: ++ xz_dec_end(s); ++ ++error_alloc_state: ++ error("XZ decompressor ran out of memory"); ++ return -1; ++} ++ ++/* ++ * This macro is used by architecture-specific files to decompress ++ * the kernel image. ++ */ ++#define decompress unxz +diff --git a/scripts/gen_initramfs_list.sh b/scripts/gen_initramfs_list.sh +index 5958fff..55caecd 100644 +--- a/scripts/gen_initramfs_list.sh ++++ b/scripts/gen_initramfs_list.sh +@@ -243,6 +243,8 @@ case "$arg" in + echo "$output_file" | grep -q "\.gz$" && compr="gzip -9 -f" + echo "$output_file" | grep -q "\.bz2$" && compr="bzip2 -9 -f" + echo "$output_file" | grep -q "\.lzma$" && compr="lzma -9 -f" ++ echo "$output_file" | grep -q "\.xz$" && \ ++ compr="xz --check=crc32 --lzma2=dict=1MiB" + echo "$output_file" | grep -q "\.lzo$" && compr="lzop -9 -f" + echo "$output_file" | grep -q "\.cpio$" && compr="cat" + shift +diff --git a/usr/Kconfig b/usr/Kconfig +index e2721f5..9f51a29 100644 +--- a/usr/Kconfig ++++ b/usr/Kconfig +@@ -72,6 +72,18 @@ config RD_LZMA + Support loading of a LZMA encoded initial ramdisk or cpio buffer + If unsure, say N. + ++config RD_XZ ++ bool "Support initial ramdisks compressed using XZ" ++ depends on BLK_DEV_INITRD && XZ_DEC=y ++ select DECOMPRESS_XZ ++ help ++ Support loading of a XZ encoded initial ramdisk or cpio buffer. ++ ++ If this option is inactive, say Y to "XZ decompression support" ++ under "Library routines" first. ++ ++ If unsure, say N. ++ + config RD_LZO + bool "Support initial ramdisks compressed using LZO" if EMBEDDED + default !EMBEDDED +@@ -139,6 +151,15 @@ config INITRAMFS_COMPRESSION_LZMA + three. Compression is slowest. The initramfs size is about 33% + smaller with LZMA in comparison to gzip. + ++config INITRAMFS_COMPRESSION_XZ ++ bool "XZ" ++ depends on RD_XZ ++ help ++ XZ uses the LZMA2 algorithm. The initramfs size is about 30% ++ smaller with XZ in comparison to gzip. Decompression speed ++ is better than that of bzip2 but worse than gzip and LZO. ++ Compression is slow. ++ + config INITRAMFS_COMPRESSION_LZO + bool "LZO" + depends on RD_LZO +diff --git a/usr/Makefile b/usr/Makefile +index 6b4b6da..5845a13 100644 +--- a/usr/Makefile ++++ b/usr/Makefile +@@ -15,6 +15,9 @@ suffix_$(CONFIG_INITRAMFS_COMPRESSION_BZIP2) = .bz2 + # Lzma + suffix_$(CONFIG_INITRAMFS_COMPRESSION_LZMA) = .lzma + ++# XZ ++suffix_$(CONFIG_INITRAMFS_COMPRESSION_XZ) = .xz ++ + # Lzo + suffix_$(CONFIG_INITRAMFS_COMPRESSION_LZO) = .lzo + +@@ -48,7 +51,7 @@ endif + quiet_cmd_initfs = GEN $@ + cmd_initfs = $(initramfs) -o $@ $(ramfs-args) $(ramfs-input) + +-targets := initramfs_data.cpio.gz initramfs_data.cpio.bz2 initramfs_data.cpio.lzma initramfs_data.cpio.lzo initramfs_data.cpio ++targets := initramfs_data.cpio.gz initramfs_data.cpio.bz2 initramfs_data.cpio.lzma initramfs_data.cpio.xz initramfs_data.cpio.lzo initramfs_data.cpio + # do not try to update files included in initramfs + $(deps_initramfs): ; + diff -r c241da0f26a5 -r 5d8744871068 kernel-modular/stuff/003-squashfs-x86-support-xz-compressed-kernel.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel-modular/stuff/003-squashfs-x86-support-xz-compressed-kernel.patch Tue Feb 01 09:37:33 2011 +0100 @@ -0,0 +1,128 @@ +From: Lasse Collin +Date: Thu, 2 Dec 2010 19:14:57 +0000 (+0200) +Subject: x86: Support XZ-compressed kernel +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fpkl%2Fsquashfs-xz.git;a=commitdiff_plain;h=d4ad78414e5312126127b1f88cdaf8584af3eef1 + +x86: Support XZ-compressed kernel + +This integrates the XZ decompression code to the x86 +pre-boot code. + +mkpiggy.c is updated to reserve about 32 KiB more buffer safety +margin for kernel decompression. It is done unconditionally for +all decompressors to keep the code simpler. + +The XZ decompressor needs around 30 KiB of heap, so the heap size +is increased to 32 KiB on both x86-32 and x86-64. + +Documentation/x86/boot.txt is updated to list the XZ magic number. + +With the x86 BCJ filter in XZ, XZ-compressed x86 kernel tends to be +a few percent smaller than the equivalent LZMA-compressed kernel. + +Signed-off-by: Lasse Collin +--- + +diff --git a/Documentation/x86/boot.txt b/Documentation/x86/boot.txt +index 30b43e1..3988cde 100644 +--- a/Documentation/x86/boot.txt ++++ b/Documentation/x86/boot.txt +@@ -621,9 +621,9 @@ Protocol: 2.08+ + The payload may be compressed. The format of both the compressed and + uncompressed data should be determined using the standard magic + numbers. The currently supported compression formats are gzip +- (magic numbers 1F 8B or 1F 9E), bzip2 (magic number 42 5A) and LZMA +- (magic number 5D 00). The uncompressed payload is currently always ELF +- (magic number 7F 45 4C 46). ++ (magic numbers 1F 8B or 1F 9E), bzip2 (magic number 42 5A), LZMA ++ (magic number 5D 00), and XZ (magic number FD 37). The uncompressed ++ payload is currently always ELF (magic number 7F 45 4C 46). + + Field name: payload_length + Type: read +diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig +index cea0cd9..f3db0d7 100644 +--- a/arch/x86/Kconfig ++++ b/arch/x86/Kconfig +@@ -51,6 +51,7 @@ config X86 + select HAVE_KERNEL_GZIP + select HAVE_KERNEL_BZIP2 + select HAVE_KERNEL_LZMA ++ select HAVE_KERNEL_XZ + select HAVE_KERNEL_LZO + select HAVE_HW_BREAKPOINT + select HAVE_MIXED_BREAKPOINTS_REGS +diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile +index 0c22955..09664ef 100644 +--- a/arch/x86/boot/compressed/Makefile ++++ b/arch/x86/boot/compressed/Makefile +@@ -4,7 +4,7 @@ + # create a compressed vmlinux image from the original vmlinux + # + +-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 ++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 + + KBUILD_CFLAGS := -m$(BITS) -D__KERNEL__ $(LINUX_INCLUDE) -O2 + KBUILD_CFLAGS += -fno-strict-aliasing -fPIC +@@ -49,12 +49,15 @@ $(obj)/vmlinux.bin.bz2: $(vmlinux.bin.all-y) FORCE + $(call if_changed,bzip2) + $(obj)/vmlinux.bin.lzma: $(vmlinux.bin.all-y) FORCE + $(call if_changed,lzma) ++$(obj)/vmlinux.bin.xz: $(vmlinux.bin.all-y) FORCE ++ $(call if_changed,xzkern) + $(obj)/vmlinux.bin.lzo: $(vmlinux.bin.all-y) FORCE + $(call if_changed,lzo) + + suffix-$(CONFIG_KERNEL_GZIP) := gz + suffix-$(CONFIG_KERNEL_BZIP2) := bz2 + suffix-$(CONFIG_KERNEL_LZMA) := lzma ++suffix-$(CONFIG_KERNEL_XZ) := xz + suffix-$(CONFIG_KERNEL_LZO) := lzo + + quiet_cmd_mkpiggy = MKPIGGY $@ +diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c +index 8f7bef8..6d4cab7 100644 +--- a/arch/x86/boot/compressed/misc.c ++++ b/arch/x86/boot/compressed/misc.c +@@ -139,6 +139,10 @@ static int lines, cols; + #include "../../../../lib/decompress_unlzma.c" + #endif + ++#ifdef CONFIG_KERNEL_XZ ++#include "../../../../lib/decompress_unxz.c" ++#endif ++ + #ifdef CONFIG_KERNEL_LZO + #include "../../../../lib/decompress_unlzo.c" + #endif +diff --git a/arch/x86/boot/compressed/mkpiggy.c b/arch/x86/boot/compressed/mkpiggy.c +index 5c22812..646aa78 100644 +--- a/arch/x86/boot/compressed/mkpiggy.c ++++ b/arch/x86/boot/compressed/mkpiggy.c +@@ -74,7 +74,7 @@ int main(int argc, char *argv[]) + + offs = (olen > ilen) ? olen - ilen : 0; + offs += olen >> 12; /* Add 8 bytes for each 32K block */ +- offs += 32*1024 + 18; /* Add 32K + 18 bytes slack */ ++ offs += 64*1024 + 128; /* Add 64K + 128 bytes slack */ + offs = (offs+4095) & ~4095; /* Round to a 4K boundary */ + + printf(".section \".rodata..compressed\",\"a\",@progbits\n"); +diff --git a/arch/x86/include/asm/boot.h b/arch/x86/include/asm/boot.h +index 3b62ab5..5e1a2ee 100644 +--- a/arch/x86/include/asm/boot.h ++++ b/arch/x86/include/asm/boot.h +@@ -32,11 +32,7 @@ + #define BOOT_HEAP_SIZE 0x400000 + #else /* !CONFIG_KERNEL_BZIP2 */ + +-#ifdef CONFIG_X86_64 +-#define BOOT_HEAP_SIZE 0x7000 +-#else +-#define BOOT_HEAP_SIZE 0x4000 +-#endif ++#define BOOT_HEAP_SIZE 0x8000 + + #endif /* !CONFIG_KERNEL_BZIP2 */ + diff -r c241da0f26a5 -r 5d8744871068 kernel-modular/stuff/004-squashfs-add-xz-compression-support.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel-modular/stuff/004-squashfs-add-xz-compression-support.patch Tue Feb 01 09:37:33 2011 +0100 @@ -0,0 +1,183 @@ +From: Phillip Lougher +Date: Thu, 9 Dec 2010 02:02:29 +0000 (+0000) +Subject: Squashfs: add XZ compression support +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fpkl%2Fsquashfs-xz.git;a=commitdiff_plain;h=d3e6969b9ff1f3a3c6bf3da71433c77046aa80e4 + +Squashfs: add XZ compression support + +Add XZ decompressor wrapper code. + +Signed-off-by: Phillip Lougher +--- + +diff --git a/fs/squashfs/squashfs_fs.h b/fs/squashfs/squashfs_fs.h +index c5137fc..39533fe 100644 +--- a/fs/squashfs/squashfs_fs.h ++++ b/fs/squashfs/squashfs_fs.h +@@ -238,6 +238,7 @@ struct meta_index { + #define ZLIB_COMPRESSION 1 + #define LZMA_COMPRESSION 2 + #define LZO_COMPRESSION 3 ++#define XZ_COMPRESSION 4 + + struct squashfs_super_block { + __le32 s_magic; +diff --git a/fs/squashfs/xz_wrapper.c b/fs/squashfs/xz_wrapper.c +new file mode 100644 +index 0000000..053fe35 +--- /dev/null ++++ b/fs/squashfs/xz_wrapper.c +@@ -0,0 +1,153 @@ ++/* ++ * Squashfs - a compressed read only filesystem for Linux ++ * ++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 ++ * Phillip Lougher ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version 2, ++ * or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ++ * ++ * xz_wrapper.c ++ */ ++ ++ ++#include ++#include ++#include ++#include ++ ++#include "squashfs_fs.h" ++#include "squashfs_fs_sb.h" ++#include "squashfs_fs_i.h" ++#include "squashfs.h" ++#include "decompressor.h" ++ ++struct squashfs_xz { ++ struct xz_dec *state; ++ struct xz_buf buf; ++}; ++ ++static void *squashfs_xz_init(struct squashfs_sb_info *msblk) ++{ ++ int block_size = max_t(int, msblk->block_size, SQUASHFS_METADATA_SIZE); ++ ++ struct squashfs_xz *stream = kmalloc(sizeof(*stream), GFP_KERNEL); ++ if (stream == NULL) ++ goto failed; ++ stream->state = xz_dec_init(XZ_PREALLOC, block_size); ++ if (stream->state == NULL) ++ goto failed; ++ ++ return stream; ++ ++failed: ++ ERROR("Failed to allocate xz workspace\n"); ++ kfree(stream); ++ return NULL; ++} ++ ++ ++static void squashfs_xz_free(void *strm) ++{ ++ struct squashfs_xz *stream = strm; ++ ++ if (stream) { ++ xz_dec_end(stream->state); ++ kfree(stream); ++ } ++} ++ ++ ++static int squashfs_xz_uncompress(struct squashfs_sb_info *msblk, void **buffer, ++ struct buffer_head **bh, int b, int offset, int length, int srclength, ++ int pages) ++{ ++ enum xz_ret xz_err; ++ int avail, total = 0, k = 0, page = 0; ++ struct squashfs_xz *stream = msblk->stream; ++ ++ mutex_lock(&msblk->read_data_mutex); ++ ++ xz_dec_reset(stream->state); ++ stream->buf.in_pos = 0; ++ stream->buf.in_size = 0; ++ stream->buf.out_pos = 0; ++ stream->buf.out_size = PAGE_CACHE_SIZE; ++ stream->buf.out = buffer[page++]; ++ ++ do { ++ if (stream->buf.in_pos == stream->buf.in_size && k < b) { ++ avail = min(length, msblk->devblksize - offset); ++ length -= avail; ++ wait_on_buffer(bh[k]); ++ if (!buffer_uptodate(bh[k])) ++ goto release_mutex; ++ ++ if (avail == 0) { ++ offset = 0; ++ put_bh(bh[k++]); ++ continue; ++ } ++ ++ stream->buf.in = bh[k]->b_data + offset; ++ stream->buf.in_size = avail; ++ stream->buf.in_pos = 0; ++ offset = 0; ++ } ++ ++ if (stream->buf.out_pos == stream->buf.out_size ++ && page < pages) { ++ stream->buf.out = buffer[page++]; ++ stream->buf.out_pos = 0; ++ total += PAGE_CACHE_SIZE; ++ } ++ ++ xz_err = xz_dec_run(stream->state, &stream->buf); ++ ++ if (stream->buf.in_pos == stream->buf.in_size && k < b) ++ put_bh(bh[k++]); ++ } while (xz_err == XZ_OK); ++ ++ if (xz_err != XZ_STREAM_END) { ++ ERROR("xz_dec_run error, data probably corrupt\n"); ++ goto release_mutex; ++ } ++ ++ if (k < b) { ++ ERROR("xz_uncompress error, input remaining\n"); ++ goto release_mutex; ++ } ++ ++ total += stream->buf.out_pos; ++ mutex_unlock(&msblk->read_data_mutex); ++ return total; ++ ++release_mutex: ++ mutex_unlock(&msblk->read_data_mutex); ++ ++ for (; k < b; k++) ++ put_bh(bh[k]); ++ ++ return -EIO; ++} ++ ++const struct squashfs_decompressor squashfs_xz_comp_ops = { ++ .init = squashfs_xz_init, ++ .free = squashfs_xz_free, ++ .decompress = squashfs_xz_uncompress, ++ .id = XZ_COMPRESSION, ++ .name = "xz", ++ .supported = 1 ++}; ++ diff -r c241da0f26a5 -r 5d8744871068 kernel-modular/stuff/005-squashfs-add-xz-compression-configuration-option.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel-modular/stuff/005-squashfs-add-xz-compression-configuration-option.patch Tue Feb 01 09:37:33 2011 +0100 @@ -0,0 +1,86 @@ +From: Phillip Lougher +Date: Thu, 9 Dec 2010 02:08:31 +0000 (+0000) +Subject: Squashfs: Add XZ compression configuration option +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fpkl%2Fsquashfs-xz.git;a=commitdiff_plain;h=e23d468968e608de27328888240de27d7582ad52 + +Squashfs: Add XZ compression configuration option + +Signed-off-by: Phillip Lougher +--- + +diff --git a/fs/squashfs/Kconfig b/fs/squashfs/Kconfig +index e5f63da..e96d99a 100644 +--- a/fs/squashfs/Kconfig ++++ b/fs/squashfs/Kconfig +@@ -53,6 +53,22 @@ config SQUASHFS_LZO + + If unsure, say N. + ++config SQUASHFS_XZ ++ bool "Include support for XZ compressed file systems" ++ depends on SQUASHFS ++ default n ++ select XZ_DEC ++ help ++ Saying Y here includes support for reading Squashfs file systems ++ compressed with XZ compresssion. XZ gives better compression than ++ the default zlib compression, at the expense of greater CPU and ++ memory overhead. ++ ++ XZ is not the standard compression used in Squashfs and so most ++ file systems will be readable without selecting this option. ++ ++ If unsure, say N. ++ + config SQUASHFS_EMBEDDED + bool "Additional option for memory-constrained systems" + depends on SQUASHFS +diff --git a/fs/squashfs/Makefile b/fs/squashfs/Makefile +index 7672bac..cecf2be 100644 +--- a/fs/squashfs/Makefile ++++ b/fs/squashfs/Makefile +@@ -7,3 +7,4 @@ squashfs-y += block.o cache.o dir.o export.o file.o fragment.o id.o inode.o + squashfs-y += namei.o super.o symlink.o zlib_wrapper.o decompressor.o + squashfs-$(CONFIG_SQUASHFS_XATTR) += xattr.o xattr_id.o + squashfs-$(CONFIG_SQUASHFS_LZO) += lzo_wrapper.o ++squashfs-$(CONFIG_SQUASHFS_XZ) += xz_wrapper.o +diff --git a/fs/squashfs/decompressor.c b/fs/squashfs/decompressor.c +index 24af9ce..ac333b8 100644 +--- a/fs/squashfs/decompressor.c ++++ b/fs/squashfs/decompressor.c +@@ -46,6 +46,12 @@ static const struct squashfs_decompressor squashfs_lzo_unsupported_comp_ops = { + }; + #endif + ++#ifndef CONFIG_SQUASHFS_XZ ++static const struct squashfs_decompressor squashfs_xz_unsupported_comp_ops = { ++ NULL, NULL, NULL, XZ_COMPRESSION, "xz", 0 ++}; ++#endif ++ + static const struct squashfs_decompressor squashfs_unknown_comp_ops = { + NULL, NULL, NULL, 0, "unknown", 0 + }; +@@ -58,6 +64,11 @@ static const struct squashfs_decompressor *decompressor[] = { + #else + &squashfs_lzo_unsupported_comp_ops, + #endif ++#ifdef CONFIG_SQUASHFS_XZ ++ &squashfs_xz_comp_ops, ++#else ++ &squashfs_xz_unsupported_comp_ops, ++#endif + &squashfs_unknown_comp_ops + }; + +diff --git a/fs/squashfs/squashfs.h b/fs/squashfs/squashfs.h +index 5d45569..1096e2e 100644 +--- a/fs/squashfs/squashfs.h ++++ b/fs/squashfs/squashfs.h +@@ -107,3 +107,6 @@ extern const struct squashfs_decompressor squashfs_zlib_comp_ops; + + /* lzo_wrapper.c */ + extern const struct squashfs_decompressor squashfs_lzo_comp_ops; ++ ++/* xz_wrapper.c */ ++extern const struct squashfs_decompressor squashfs_xz_comp_ops; diff -r c241da0f26a5 -r 5d8744871068 kernel-modular/stuff/aufs2-2.6.36-fix.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel-modular/stuff/aufs2-2.6.36-fix.patch Tue Feb 01 09:37:33 2011 +0100 @@ -0,0 +1,130 @@ +diff --git a/fs/file_table.c b/fs/file_table.c +index a04bdd8..fbf8908 100644 +--- a/fs/file_table.c ++++ b/fs/file_table.c +@@ -20,7 +20,6 @@ + #include + #include + #include +-#include + #include + #include + #include +@@ -34,7 +33,6 @@ struct files_stat_struct files_stat = { + .max_files = NR_FILE + }; + +-DECLARE_LGLOCK(files_lglock); + DEFINE_LGLOCK(files_lglock); + + /* SLAB cache for file structures */ +@@ -394,37 +392,6 @@ void file_sb_list_del(struct file *file) + } + } + +-#ifdef CONFIG_SMP +- +-/* +- * These macros iterate all files on all CPUs for a given superblock. +- * files_lglock must be held globally. +- */ +-#define do_file_list_for_each_entry(__sb, __file) \ +-{ \ +- int i; \ +- for_each_possible_cpu(i) { \ +- struct list_head *list; \ +- list = per_cpu_ptr((__sb)->s_files, i); \ +- list_for_each_entry((__file), list, f_u.fu_list) +- +-#define while_file_list_for_each_entry \ +- } \ +-} +- +-#else +- +-#define do_file_list_for_each_entry(__sb, __file) \ +-{ \ +- struct list_head *list; \ +- list = &(sb)->s_files; \ +- list_for_each_entry((__file), list, f_u.fu_list) +- +-#define while_file_list_for_each_entry \ +-} +- +-#endif +- + int fs_may_remount_ro(struct super_block *sb) + { + struct file *file; +diff --git a/fs/statfs.c b/fs/statfs.c +index 30ea8c8..9025c98 100644 +--- a/fs/statfs.c ++++ b/fs/statfs.c +@@ -61,6 +61,7 @@ int statfs_by_dentry(struct dentry *dentry, struct kstatfs *buf) + buf->f_frsize = buf->f_bsize; + return retval; + } ++EXPORT_SYMBOL(statfs_by_dentry); + + int vfs_statfs(struct path *path, struct kstatfs *buf) + { +diff --git a/include/linux/fs.h b/include/linux/fs.h +index 63d069b..741d296 100644 +--- a/include/linux/fs.h ++++ b/include/linux/fs.h +@@ -9,6 +9,7 @@ + #include + #include + #include ++#include + + /* + * It's silly to have NR_OPEN bigger than NR_FILE, but you can change +@@ -1814,6 +1815,7 @@ extern struct vfsmount *collect_mounts(struct path *); + extern void drop_collected_mounts(struct vfsmount *); + extern int iterate_mounts(int (*)(struct vfsmount *, void *), void *, + struct vfsmount *); ++extern int statfs_by_dentry(struct dentry *dentry, struct kstatfs *buf); + extern int vfs_statfs(struct path *, struct kstatfs *); + extern int statfs_by_dentry(struct dentry *, struct kstatfs *); + extern int freeze_super(struct super_block *super); +@@ -2481,5 +2483,39 @@ int __init get_filesystem_list(char *buf); + #define OPEN_FMODE(flag) ((__force fmode_t)(((flag + 1) & O_ACCMODE) | \ + (flag & FMODE_NONOTIFY))) + ++ ++DECLARE_LGLOCK(files_lglock); ++ ++#ifdef CONFIG_SMP ++ ++/* ++ * These macros iterate all files on all CPUs for a given superblock. ++ * files_lglock must be held globally. ++ */ ++#define do_file_list_for_each_entry(__sb, __file) \ ++{ \ ++ int i; \ ++ for_each_possible_cpu(i) { \ ++ struct list_head *list; \ ++ list = per_cpu_ptr((__sb)->s_files, i); \ ++ list_for_each_entry((__file), list, f_u.fu_list) ++ ++#define while_file_list_for_each_entry \ ++ } \ ++} ++ ++#else ++ ++#define do_file_list_for_each_entry(__sb, __file) \ ++{ \ ++ struct list_head *list; \ ++ list = &(sb)->s_files; \ ++ list_for_each_entry((__file), list, f_u.fu_list) ++ ++#define while_file_list_for_each_entry \ ++} ++ ++#endif ++ + #endif /* __KERNEL__ */ + #endif /* _LINUX_FS_H */ diff -r c241da0f26a5 -r 5d8744871068 kernel-modular/stuff/aufs2-base.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel-modular/stuff/aufs2-base.patch Tue Feb 01 09:37:33 2011 +0100 @@ -0,0 +1,78 @@ +aufs2.1 base patch for linux-2.6.37 + +diff --git a/fs/namei.c b/fs/namei.c +index 4ff7ca5..a8c583f 100644 +--- a/fs/namei.c ++++ b/fs/namei.c +@@ -1161,12 +1161,12 @@ out: + * needs parent already locked. Doesn't follow mounts. + * SMP-safe. + */ +-static struct dentry *lookup_hash(struct nameidata *nd) ++struct dentry *lookup_hash(struct nameidata *nd) + { + return __lookup_hash(&nd->last, nd->path.dentry, nd); + } + +-static int __lookup_one_len(const char *name, struct qstr *this, ++int __lookup_one_len(const char *name, struct qstr *this, + struct dentry *base, int len) + { + unsigned long hash; +diff --git a/fs/splice.c b/fs/splice.c +index ce2f025..ff0ae69 100644 +--- a/fs/splice.c ++++ b/fs/splice.c +@@ -1092,8 +1092,8 @@ EXPORT_SYMBOL(generic_splice_sendpage); + /* + * Attempt to initiate a splice from pipe to file. + */ +-static long do_splice_from(struct pipe_inode_info *pipe, struct file *out, +- loff_t *ppos, size_t len, unsigned int flags) ++long do_splice_from(struct pipe_inode_info *pipe, struct file *out, ++ loff_t *ppos, size_t len, unsigned int flags) + { + ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, + loff_t *, size_t, unsigned int); +@@ -1120,9 +1120,9 @@ static long do_splice_from(struct pipe_inode_info *pipe, struct file *out, + /* + * Attempt to initiate a splice from a file to a pipe. + */ +-static long do_splice_to(struct file *in, loff_t *ppos, +- struct pipe_inode_info *pipe, size_t len, +- unsigned int flags) ++long do_splice_to(struct file *in, loff_t *ppos, ++ struct pipe_inode_info *pipe, size_t len, ++ unsigned int flags) + { + ssize_t (*splice_read)(struct file *, loff_t *, + struct pipe_inode_info *, size_t, unsigned int); +diff --git a/include/linux/namei.h b/include/linux/namei.h +index 05b441d..91bc74e 100644 +--- a/include/linux/namei.h ++++ b/include/linux/namei.h +@@ -73,6 +73,9 @@ extern int vfs_path_lookup(struct dentry *, struct vfsmount *, + extern struct file *lookup_instantiate_filp(struct nameidata *nd, struct dentry *dentry, + int (*open)(struct inode *, struct file *)); + ++extern struct dentry *lookup_hash(struct nameidata *nd); ++extern int __lookup_one_len(const char *name, struct qstr *this, ++ struct dentry *base, int len); + extern struct dentry *lookup_one_len(const char *, struct dentry *, int); + + extern int follow_down(struct path *); +diff --git a/include/linux/splice.h b/include/linux/splice.h +index 997c3b4..be9a153 100644 +--- a/include/linux/splice.h ++++ b/include/linux/splice.h +@@ -89,4 +89,10 @@ extern int splice_grow_spd(struct pipe_inode_info *, struct splice_pipe_desc *); + extern void splice_shrink_spd(struct pipe_inode_info *, + struct splice_pipe_desc *); + ++extern long do_splice_from(struct pipe_inode_info *pipe, struct file *out, ++ loff_t *ppos, size_t len, unsigned int flags); ++extern long do_splice_to(struct file *in, loff_t *ppos, ++ struct pipe_inode_info *pipe, size_t len, ++ unsigned int flags); ++ + #endif diff -r c241da0f26a5 -r 5d8744871068 kernel-modular/stuff/aufs2-kbuild.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel-modular/stuff/aufs2-kbuild.patch Tue Feb 01 09:37:33 2011 +0100 @@ -0,0 +1,35 @@ +aufs2.1 kbuild patch for linux-2.6.37 + +diff --git a/fs/Kconfig b/fs/Kconfig +index 771f457..bb1a52f 100644 +--- a/fs/Kconfig ++++ b/fs/Kconfig +@@ -191,6 +191,7 @@ source "fs/romfs/Kconfig" + source "fs/sysv/Kconfig" + source "fs/ufs/Kconfig" + source "fs/exofs/Kconfig" ++source "fs/aufs/Kconfig" + + endif # MISC_FILESYSTEMS + +diff --git a/fs/Makefile b/fs/Makefile +index a7f7cef..95dd4d3 100644 +--- a/fs/Makefile ++++ b/fs/Makefile +@@ -121,3 +121,4 @@ obj-$(CONFIG_BTRFS_FS) += btrfs/ + obj-$(CONFIG_GFS2_FS) += gfs2/ + obj-$(CONFIG_EXOFS_FS) += exofs/ + obj-$(CONFIG_CEPH_FS) += ceph/ ++obj-$(CONFIG_AUFS_FS) += aufs/ +diff --git a/include/linux/Kbuild b/include/linux/Kbuild +index 97319a8..7ebb4b4 100644 +--- a/include/linux/Kbuild ++++ b/include/linux/Kbuild +@@ -60,6 +60,7 @@ header-y += atmppp.h + header-y += atmsap.h + header-y += atmsvc.h + header-y += audit.h ++header-y += aufs_type.h + header-y += auto_fs.h + header-y += auto_fs4.h + header-y += auxvec.h diff -r c241da0f26a5 -r 5d8744871068 kernel-modular/stuff/aufs2-module-2.6.36.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel-modular/stuff/aufs2-module-2.6.36.patch Tue Feb 01 09:37:33 2011 +0100 @@ -0,0 +1,47 @@ +diff --git a/ubuntu/aufs/branch.c b/ubuntu/aufs/branch.c +index cd4463c..ff6b158 100644 +--- a/fs/aufs/branch.c ++++ b/fs/aufs/branch.c +@@ -22,6 +22,8 @@ + + #include + #include ++#include ++#include + #include "aufs.h" + + /* +@@ -851,7 +853,8 @@ static int au_br_mod_files_ro(struct super_block *sb, aufs_bindex_t bindex) + goto out; + + /* no need file_list_lock() since sbinfo is locked? defered? */ +- list_for_each_entry(file, &sb->s_files, f_u.fu_list) { ++ lg_global_lock(files_lglock); ++ do_file_list_for_each_entry(sb, file) { + if (special_file(file->f_dentry->d_inode->i_mode)) + continue; + +@@ -861,6 +864,7 @@ static int au_br_mod_files_ro(struct super_block *sb, aufs_bindex_t bindex) + err = -EBUSY; + FiMustNoWaiters(file); + fi_read_unlock(file); ++ lg_global_unlock(files_lglock); + goto out_free; + } + +@@ -889,10 +893,13 @@ static int au_br_mod_files_ro(struct super_block *sb, aufs_bindex_t bindex) + if (p) { + a = p; + a[n++] = hf; +- } else ++ } else { ++ lg_global_unlock(files_lglock); + goto out_free; ++ } + } +- } ++ } while_file_list_for_each_entry; ++ lg_global_unlock(files_lglock); + + err = 0; + if (n) diff -r c241da0f26a5 -r 5d8744871068 kernel-modular/stuff/aufs2-standalone.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel-modular/stuff/aufs2-standalone.patch Tue Feb 01 09:37:33 2011 +0100 @@ -0,0 +1,289 @@ +aufs2.1 standalone patch for linux-2.6.37 + +diff --git a/fs/file_table.c b/fs/file_table.c +index c3dee38..f529e4d 100644 +--- a/fs/file_table.c ++++ b/fs/file_table.c +@@ -393,6 +393,8 @@ void file_sb_list_del(struct file *file) + } + } + ++EXPORT_SYMBOL(file_sb_list_del); ++ + #ifdef CONFIG_SMP + + /* +diff --git a/fs/inode.c b/fs/inode.c +index ae2727a..2c8071a 100644 +--- a/fs/inode.c ++++ b/fs/inode.c +@@ -82,6 +82,7 @@ static struct hlist_head *inode_hashtable __read_mostly; + * the i_state of an inode while it is in use.. + */ + DEFINE_SPINLOCK(inode_lock); ++EXPORT_SYMBOL(inode_lock); + + /* + * iprune_sem provides exclusion between the kswapd or try_to_free_pages +diff --git a/fs/namei.c b/fs/namei.c +index a8c583f..b020c45 100644 +--- a/fs/namei.c ++++ b/fs/namei.c +@@ -347,6 +347,7 @@ int deny_write_access(struct file * file) + + return 0; + } ++EXPORT_SYMBOL(deny_write_access); + + /** + * path_get - get a reference to a path +@@ -1165,6 +1166,7 @@ struct dentry *lookup_hash(struct nameidata *nd) + { + return __lookup_hash(&nd->last, nd->path.dentry, nd); + } ++EXPORT_SYMBOL(lookup_hash); + + int __lookup_one_len(const char *name, struct qstr *this, + struct dentry *base, int len) +@@ -1187,6 +1189,7 @@ int __lookup_one_len(const char *name, struct qstr *this, + this->hash = end_name_hash(hash); + return 0; + } ++EXPORT_SYMBOL(__lookup_one_len); + + /** + * lookup_one_len - filesystem helper to lookup single pathname component +diff --git a/fs/namespace.c b/fs/namespace.c +index 3dbfc07..3998762 100644 +--- a/fs/namespace.c ++++ b/fs/namespace.c +@@ -1321,6 +1321,7 @@ int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg, + } + return 0; + } ++EXPORT_SYMBOL(iterate_mounts); + + static void cleanup_group_ids(struct vfsmount *mnt, struct vfsmount *end) + { +diff --git a/fs/notify/group.c b/fs/notify/group.c +index d309f38..f0e9568 100644 +--- a/fs/notify/group.c ++++ b/fs/notify/group.c +@@ -22,6 +22,7 @@ + #include + #include + #include ++#include + + #include + #include "fsnotify.h" +@@ -70,6 +71,7 @@ void fsnotify_put_group(struct fsnotify_group *group) + if (atomic_dec_and_test(&group->refcnt)) + fsnotify_destroy_group(group); + } ++EXPORT_SYMBOL(fsnotify_put_group); + + /* + * Create a new fsnotify_group and hold a reference for the group returned. +@@ -102,3 +104,4 @@ struct fsnotify_group *fsnotify_alloc_group(const struct fsnotify_ops *ops) + + return group; + } ++EXPORT_SYMBOL(fsnotify_alloc_group); +diff --git a/fs/notify/mark.c b/fs/notify/mark.c +index 325185e..adede09 100644 +--- a/fs/notify/mark.c ++++ b/fs/notify/mark.c +@@ -113,6 +113,7 @@ void fsnotify_put_mark(struct fsnotify_mark *mark) + if (atomic_dec_and_test(&mark->refcnt)) + mark->free_mark(mark); + } ++EXPORT_SYMBOL(fsnotify_put_mark); + + /* + * Any time a mark is getting freed we end up here. +@@ -190,6 +191,7 @@ void fsnotify_destroy_mark(struct fsnotify_mark *mark) + if (unlikely(atomic_dec_and_test(&group->num_marks))) + fsnotify_final_destroy_group(group); + } ++EXPORT_SYMBOL(fsnotify_destroy_mark); + + void fsnotify_set_mark_mask_locked(struct fsnotify_mark *mark, __u32 mask) + { +@@ -277,6 +279,7 @@ err: + + return ret; + } ++EXPORT_SYMBOL(fsnotify_add_mark); + + /* + * clear any marks in a group in which mark->flags & flags is true +@@ -332,6 +335,7 @@ void fsnotify_init_mark(struct fsnotify_mark *mark, + atomic_set(&mark->refcnt, 1); + mark->free_mark = free_mark; + } ++EXPORT_SYMBOL(fsnotify_init_mark); + + static int fsnotify_mark_destroy(void *ignored) + { +diff --git a/fs/open.c b/fs/open.c +index 4197b9e..912817a 100644 +--- a/fs/open.c ++++ b/fs/open.c +@@ -60,6 +60,7 @@ int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs, + mutex_unlock(&dentry->d_inode->i_mutex); + return ret; + } ++EXPORT_SYMBOL(do_truncate); + + static long do_sys_truncate(const char __user *pathname, loff_t length) + { +diff --git a/fs/splice.c b/fs/splice.c +index ff0ae69..1c9e9b0 100644 +--- a/fs/splice.c ++++ b/fs/splice.c +@@ -1116,6 +1116,7 @@ long do_splice_from(struct pipe_inode_info *pipe, struct file *out, + + return splice_write(pipe, out, ppos, len, flags); + } ++EXPORT_SYMBOL(do_splice_from); + + /* + * Attempt to initiate a splice from a file to a pipe. +@@ -1142,6 +1143,7 @@ long do_splice_to(struct file *in, loff_t *ppos, + + return splice_read(in, ppos, pipe, len, flags); + } ++EXPORT_SYMBOL(do_splice_to); + + /** + * splice_direct_to_actor - splices data directly between two non-pipes +diff --git a/security/commoncap.c b/security/commoncap.c +index 64c2ed9..e58b5d8 100644 +--- a/security/commoncap.c ++++ b/security/commoncap.c +@@ -929,3 +929,4 @@ int cap_file_mmap(struct file *file, unsigned long reqprot, + } + return ret; + } ++EXPORT_SYMBOL(cap_file_mmap); +diff --git a/security/device_cgroup.c b/security/device_cgroup.c +index 8d9c48f..29108aa 100644 +--- a/security/device_cgroup.c ++++ b/security/device_cgroup.c +@@ -515,6 +515,7 @@ found: + + return -EPERM; + } ++EXPORT_SYMBOL(devcgroup_inode_permission); + + int devcgroup_inode_mknod(int mode, dev_t dev) + { +diff --git a/security/security.c b/security/security.c +index 1b798d3..3b7d2ca 100644 +--- a/security/security.c ++++ b/security/security.c +@@ -360,6 +360,7 @@ int security_path_mkdir(struct path *dir, struct dentry *dentry, int mode) + return 0; + return security_ops->path_mkdir(dir, dentry, mode); + } ++EXPORT_SYMBOL(security_path_mkdir); + + int security_path_rmdir(struct path *dir, struct dentry *dentry) + { +@@ -367,6 +368,7 @@ int security_path_rmdir(struct path *dir, struct dentry *dentry) + return 0; + return security_ops->path_rmdir(dir, dentry); + } ++EXPORT_SYMBOL(security_path_rmdir); + + int security_path_unlink(struct path *dir, struct dentry *dentry) + { +@@ -374,6 +376,7 @@ int security_path_unlink(struct path *dir, struct dentry *dentry) + return 0; + return security_ops->path_unlink(dir, dentry); + } ++EXPORT_SYMBOL(security_path_unlink); + + int security_path_symlink(struct path *dir, struct dentry *dentry, + const char *old_name) +@@ -382,6 +385,7 @@ int security_path_symlink(struct path *dir, struct dentry *dentry, + return 0; + return security_ops->path_symlink(dir, dentry, old_name); + } ++EXPORT_SYMBOL(security_path_symlink); + + int security_path_link(struct dentry *old_dentry, struct path *new_dir, + struct dentry *new_dentry) +@@ -390,6 +394,7 @@ int security_path_link(struct dentry *old_dentry, struct path *new_dir, + return 0; + return security_ops->path_link(old_dentry, new_dir, new_dentry); + } ++EXPORT_SYMBOL(security_path_link); + + int security_path_rename(struct path *old_dir, struct dentry *old_dentry, + struct path *new_dir, struct dentry *new_dentry) +@@ -400,6 +405,7 @@ int security_path_rename(struct path *old_dir, struct dentry *old_dentry, + return security_ops->path_rename(old_dir, old_dentry, new_dir, + new_dentry); + } ++EXPORT_SYMBOL(security_path_rename); + + int security_path_truncate(struct path *path) + { +@@ -407,6 +413,7 @@ int security_path_truncate(struct path *path) + return 0; + return security_ops->path_truncate(path); + } ++EXPORT_SYMBOL(security_path_truncate); + + int security_path_chmod(struct dentry *dentry, struct vfsmount *mnt, + mode_t mode) +@@ -415,6 +422,7 @@ int security_path_chmod(struct dentry *dentry, struct vfsmount *mnt, + return 0; + return security_ops->path_chmod(dentry, mnt, mode); + } ++EXPORT_SYMBOL(security_path_chmod); + + int security_path_chown(struct path *path, uid_t uid, gid_t gid) + { +@@ -422,6 +430,7 @@ int security_path_chown(struct path *path, uid_t uid, gid_t gid) + return 0; + return security_ops->path_chown(path, uid, gid); + } ++EXPORT_SYMBOL(security_path_chown); + + int security_path_chroot(struct path *path) + { +@@ -498,6 +507,7 @@ int security_inode_readlink(struct dentry *dentry) + return 0; + return security_ops->inode_readlink(dentry); + } ++EXPORT_SYMBOL(security_inode_readlink); + + int security_inode_follow_link(struct dentry *dentry, struct nameidata *nd) + { +@@ -512,6 +522,7 @@ int security_inode_permission(struct inode *inode, int mask) + return 0; + return security_ops->inode_permission(inode, mask); + } ++EXPORT_SYMBOL(security_inode_permission); + + int security_inode_setattr(struct dentry *dentry, struct iattr *attr) + { +@@ -611,6 +622,7 @@ int security_file_permission(struct file *file, int mask) + + return fsnotify_perm(file, mask); + } ++EXPORT_SYMBOL(security_file_permission); + + int security_file_alloc(struct file *file) + { +@@ -638,6 +650,7 @@ int security_file_mmap(struct file *file, unsigned long reqprot, + return ret; + return ima_file_mmap(file, prot); + } ++EXPORT_SYMBOL(security_file_mmap); + + int security_file_mprotect(struct vm_area_struct *vma, unsigned long reqprot, + unsigned long prot) diff -r c241da0f26a5 -r 5d8744871068 kernel-modular/stuff/bootloader.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel-modular/stuff/bootloader.sh Tue Feb 01 09:37:33 2011 +0100 @@ -0,0 +1,218 @@ +#!/bin/sh +# +# This script creates a floppy image set from a linux bzImage and can merge +# a cmdline and/or one or more initramfs. +# The total size can not exceed 15M because INT 15H function 87H limitations. +# +# (C) 2009 Pascal Bellard - GNU General Public License v3. + +usage() +{ +cat < /dev/null + [ -n "$DEBUG" ] && printf "store16(%04X) = %04X\n" $1 $2 1>&2 +} + +# write a 32 bits data +# usage: storelong offset data32 file +storelong() +{ + echo $2 | awk '{ printf "\\\\x%02X\\\\x%02X\\\\x%02X\\\\x%02X", + $1%256,($1/256)%256,($1/256/256)%256,($1/256/256/256)%256 }' | \ + xargs echo -en | \ + dd bs=4 conv=notrunc of=$3 seek=$(( $1 / 4 )) 2> /dev/null + [ -n "$DEBUG" ] && printf "storelong(%04X) = %08X\n" $1 $2 1>&2 +} + +# read a 32 bits data +# usage: getlong offset file +getlong() +{ + dd if=$2 bs=1 skip=$(( $1 )) count=4 2> /dev/null | \ + hexdump -e '"" 1/4 "%d" "\n"' +} + +floppyset() +{ + # bzImage offsets + CylinderCount=496 + SetupSzOfs=497 + FlagsOfs=498 + SyssizeOfs=500 + VideoModeOfs=506 + RootDevOfs=508 + CodeAdrOfs=0x214 + RamfsAdrOfs=0x218 + RamfsLenOfs=0x21C + ArgPtrOfs=0x228 + + # boot+setup address + SetupBase=0x90000 + + stacktop=0x9E00 + + bs=/tmp/bs$$ + + # Get and patch boot sector + # See http://hg.slitaz.org/wok/raw-file/711d076b277c/linux/stuff/linux-header-2.6.34.u + dd if=$KERNEL bs=512 count=1 of=$bs 2> /dev/null + uudecode < /dev/null +begin-base64 644 - +/L+6nWgAkAcGF4n8McC5HQDzq1sfD6mg8X1ABlfFd3ixBvOlZWaPR3gGH8ZF ++D/6l1hB6DQBvgACA3QO6HYBWwseKAJ0LFNH6AoBXuhmAbAgzRCwCM0QTuhl +ATwIdAOIBK05NigCdPDoPgE8CnXgiHz+ieb/TBD/TBi/9AGBTRz/gMdFMACc +sBCxBUi0k4lEHLABiUQUmGaY0+BIZgMFZtPoaAAQB7+AACn4nHMCAccx21BW +6J4AXrkAgLSH/kQczRVYnXfcoRoCvxwCsQk4RBxyuJPNE+oAACCQsEYoyL7b +AejSAF3rI4D5E3IEOMF3a4D+AnIEOOZ3bGCB/QAGdCoGUlFTlrQCULEGtQTB +xQSwDyHoBJAnFEAn6IwA/s117LAgzRDitOiWAJjNE2FSUCjIdwKwAZg5+HIC +ifhQtALNE5VeWFpyoJVBjuGAxwJPdFFOdfSM4ZU4wXVFiMj+xrEBOOZ1O4j0 +/sW2AID9UHIwOi7wAXIqtQBgvt4B/kQMU+gxAFvoOAB1FlKYzRO4AQLNE1rQ +1Dpk/nXqRgjkdeVh64sWB7AxLAO0DrsHAM0QPA1088OwDejv/6wIwHX4w79s +BLFbZQINuA0BZToNdArNFnT0mM0Wju9Hw1g6AEluc2VydCBkaXNrIDEuBw0A +AA== +==== +EOT + + # Get setup + setupsz=$(getlong $SetupSzOfs $bs) + setupszb=$(( $setupsz & 255 )) + dd if=$KERNEL bs=512 skip=1 count=$setupszb 2> /dev/null >> $bs + + if [ -n "$TRACKS" ]; then + [ -n "$DEBUG" ] && echo -n "--tracks " 1>&2 + n=$(getlong $CylinderCount $bs) + store16 $CylinderCount $(( ($n & -256) + $TRACKS )) $bs + fi + if [ -n "$FLAGS" ]; then + [ -n "$DEBUG" ] && echo -n "--flags " 1>&2 + store16 $FlagsOfs $FLAGS $bs + fi + if [ -n "$VIDEO" ]; then + [ -n "$DEBUG" ] && echo -n "--video " 1>&2 + store16 $VideoModeOfs $VIDEO $bs + fi + if [ -n "$RDEV" ]; then + [ -n "$DEBUG" ] && echo -n "--rdev " 1>&2 + n=$(stat -c '0x%02t%02T' $RDEV 2> /dev/null) + [ -n "$n" ] || n=$RDEV + store16 $RootDevOfs $n $bs + fi + + # Store cmdline after setup + if [ -n "$CMDLINE" ]; then + [ -n "$DEBUG" ] && echo -n "--cmdline '$CMDLINE' " 1>&2 + echo -n "$CMDLINE" | dd bs=512 count=1 conv=sync 2> /dev/null >> $bs + storelong $ArgPtrOfs $(( $SetupBase + $stacktop )) $bs + fi + + # Compute initramfs size + initrdlen=0 + padding=0 + for i in $( echo $INITRD | sed 's/,/ /' ); do + [ -s "$i" ] || continue + [ -n "$DEBUG" ] && echo "--initrd $i " 1>&2 + initrdlen=$(( $initrdlen + $padding )) + padding=$(stat -c %s $i) + initrdlen=$(( $initrdlen + $padding )) + padding=$(( 4096 - ($padding & 4095) )) + [ $padding -eq 4096 ] && padding=0 + done + Ksize=$(( $(getlong $SyssizeOfs $bs)*16 )) + Kpad=$(( (($Ksize+4095)/4096)*4096 - Ksize )) + if [ $initrdlen -ne 0 ]; then + [ -n "$DEBUG" ] && echo "initrdlen = $initrdlen " 1>&2 + Kbase=$(getlong $CodeAdrOfs $bs) + storelong $RamfsAdrOfs \ + $(( (0x1000000 - $initrdlen) & 0xFFFF0000 )) $bs + storelong $RamfsLenOfs $(( ($initrdlen + 3) & -4 )) $bs + fi + + # Output boot sector + setup + cmdline + dd if=$bs 2> /dev/null + + # Output kernel code + dd if=$KERNEL bs=512 skip=$(( $setupszb + 1 )) 2> /dev/null + + # Pad to next sector + Kpad=$(( 512 - ($(stat -c %s $KERNEL) & 511) )) + [ $Kpad -eq 512 ] || dd if=/dev/zero bs=1 count=$Kpad 2> /dev/null + + # Output initramfs + padding=0 + for i in $( echo $INITRD | sed 's/,/ /' ); do + [ -s "$i" ] || continue + [ $padding -ne 0 ] && dd if=/dev/zero bs=1 count=$padding 2> /dev/null + dd if=$i 2> /dev/null + padding=$(( 4 - ($(stat -c %s $i) & 3) )) + [ $padding -eq 4 ] && padding=0 + done + + # Cleanup + rm -f $bs +} + +if [ "$FORMAT" == "0" ]; then # unsplitted + floppyset > $PREFIX + exit +fi +floppyset | split -b ${FORMAT}k /dev/stdin floppy$$ +i=1 +ls floppy$$* | while read file ; do + output=$PREFIX$(printf "%03d" $i) + cat $file /dev/zero | dd bs=1k count=$FORMAT conv=sync of=$output 2> /dev/null + echo $output + rm -f $file + i=$(( $i + 1 )) +done diff -r c241da0f26a5 -r 5d8744871068 kernel-modular/stuff/check_modules.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel-modular/stuff/check_modules.sh Tue Feb 01 09:37:33 2011 +0100 @@ -0,0 +1,51 @@ +#!/bin/sh +# Echo any module in kernel .config that's not added to one of linux-* pkgs +# (c) SliTaz - GNU General Public License. +# 20090618 +# 20100528 +# +. /etc/tazwok.conf +VERSION=`grep ^VERSION= $WOK/linux/receipt | cut -d "=" -f2 | sed -e 's/"//g'` +src="$WOK/linux/linux-$VERSION" + +cd $src +mkdir -p ../stuff/tmp +rm -f ../stuff/tmp/* + +echo -e "\nChecking for modules selected in .config but not in linux-* pkgs" +echo "======================================================================" + +# create a packaged modules list +cat ../stuff/modules-"$VERSION".list >> ../stuff/tmp/pkgs-modules-"$VERSION".list + +for i in $(cd $WOK; ls -d linux-*) +do + tazpath="taz/$i-$VERSION" + for j in $(cat $WOK/$i/$tazpath/files.list | grep ".ko.gz") + do + basename $j >> ../stuff/tmp/pkgs-modules-"$VERSION".list + done +done +# get the original list in .config +for i in $(find $_pkg -iname "*.ko.gz") +do + basename $i >> ../stuff/tmp/originial-"$VERSION".list +done +# compare original .config and pkged modules +for i in $(cat ../stuff/tmp/originial-$VERSION.list) +do + if ! grep -qs "$i" ../stuff/tmp/pkgs-modules-"$VERSION".list ; then + modpath=`find $_pkg -iname "$i"` + echo "Orphan module: $i" + echo "$i : $modpath" >> ../stuff/tmp/unpackaged-modules-"$VERSION".list + fi +done +if [ -f ../stuff/tmp/unpackaged-modules-"$VERSION".list ]; then + echo "======================================================================" + echo -e "Check linux/stuff/tmp/unpackaged-modules-$VERSION.list for mod path\n" +else + echo -e "\nAll modules are packaged\n" + echo "======================================================================" + echo "" + rm -rf ../stuff/tmp +fi diff -r c241da0f26a5 -r 5d8744871068 kernel-modular/stuff/gztazmod.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel-modular/stuff/gztazmod.sh Tue Feb 01 09:37:33 2011 +0100 @@ -0,0 +1,67 @@ +#!/bin/sh +# gztazmod.sh: Compress Linux kernel modules for SliTaz GNU/Linux. +# 2007/10/04 - GNU General Public License. +# + +# We do our work in the kernel version modules directory. +if [ -z "$1" ] ; then + echo "" + echo -e "\033[1musage:\033[0m `basename $0` path/to/kernel-version" + echo "" + exit 1 +fi + +if [ ! -r "$1" ] ; then + echo "" + echo -e "Error : $1 does not exist." + echo "" + exit 1 +fi + +cd $1 + +# Status functions. +status() +{ + local CHECK=$? + echo -en "\\033[70G[ " + if [ $CHECK = 0 ]; then + echo -en "\\033[1;33mOK" + else + echo -en "\\033[1;31mFailed" + fi + echo -e "\\033[0;39m ]" +} + +# Script start. +echo "" +echo "Starting gztazmod.sh to build compressed kernel modules... " +echo "" + +# Find all modules. +echo -n "Searching all modules to compress them... " +find . -name "*.ko" -exec lzma e '{}' '{}'.gz \; 2> /dev/null +status +find . -name "*.ko" -exec rm '{}' \; + +# Build a new temporary modules.dep. +echo -n "Building tmp.dep... " +sed 's/\.ko.gz/.ko/g' modules.dep > tmp.dep +sed -i 's/\.ko.gz/.ko/g' tmp.dep +sed -i 's/\.ko/.ko.gz/g' tmp.dep +status + +# Destroy original modules.dep +echo -n "Destroying modules.dep... " +rm modules.dep +status + +# Remove tmp.dep to modules.dep. +echo -n "Removing tmp.dep to modules.dep... " +mv tmp.dep modules.dep +status + +# Script end. +echo "" +echo "Kernel modules `basename $1` are ready." +echo "" diff -r c241da0f26a5 -r 5d8744871068 kernel-modular/stuff/linux-2.6.37-slitaz.config-i486-isa --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel-modular/stuff/linux-2.6.37-slitaz.config-i486-isa Tue Feb 01 09:37:33 2011 +0100 @@ -0,0 +1,923 @@ +# +# Automatically generated make config: don't edit +# Linux/i386 2.6.37 Kernel Configuration +# Sun Jan 30 23:08:13 2011 +# +# CONFIG_64BIT is not set +CONFIG_X86_32=y +# CONFIG_X86_64 is not set +CONFIG_X86=y +CONFIG_INSTRUCTION_DECODER=y +CONFIG_OUTPUT_FORMAT="elf32-i386" +CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig" +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_CLOCKSOURCE_WATCHDOG=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_MMU=y +CONFIG_ZONE_DMA=y +# CONFIG_NEED_DMA_MAP_STATE is not set +CONFIG_NEED_SG_DMA_LENGTH=y +CONFIG_GENERIC_ISA_DMA=y +CONFIG_GENERIC_IOMAP=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +# CONFIG_GENERIC_TIME_VSYSCALL is not set +CONFIG_ARCH_HAS_CPU_RELAX=y +CONFIG_ARCH_HAS_DEFAULT_IDLE=y +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y +CONFIG_HAVE_SETUP_PER_CPU_AREA=y +CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y +CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y +# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y +# CONFIG_ZONE_DMA32 is not set +CONFIG_ARCH_POPULATES_NODE_MAP=y +# CONFIG_AUDIT_ARCH is not set +CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y +CONFIG_X86_32_LAZY_GS=y +CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-ecx -fcall-saved-edx" +CONFIG_KTIME_SCALAR=y +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y +CONFIG_HAVE_IRQ_WORK=y +CONFIG_IRQ_WORK=y + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_CROSS_COMPILE="" +CONFIG_LOCALVERSION="-slitaz" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_HAVE_KERNEL_GZIP=y +CONFIG_HAVE_KERNEL_BZIP2=y +CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_XZ=y +CONFIG_HAVE_KERNEL_LZO=y +# CONFIG_KERNEL_GZIP is not set +# CONFIG_KERNEL_BZIP2 is not set +CONFIG_KERNEL_LZMA=y +# CONFIG_KERNEL_XZ is not set +# CONFIG_KERNEL_LZO is not set +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_AUDIT is not set +CONFIG_HAVE_GENERIC_HARDIRQS=y + +# +# IRQ subsystem +# +CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y +# CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED is not set +CONFIG_HAVE_SPARSE_IRQ=y +CONFIG_GENERIC_IRQ_PROBE=y +# CONFIG_GENERIC_PENDING_IRQ is not set +# CONFIG_AUTO_IRQ_AFFINITY is not set +# CONFIG_IRQ_PER_CPU is not set +# CONFIG_HARDIRQS_SW_RESEND is not set +# CONFIG_SPARSE_IRQ is not set + +# +# RCU Subsystem +# +CONFIG_TINY_RCU=y +# CONFIG_PREEMPT_RCU is not set +# CONFIG_TREE_RCU_TRACE is not set +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=12 +CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y +# CONFIG_NAMESPACES is not set +# CONFIG_RELAY is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="rootfs.cpio" +CONFIG_INITRAMFS_ROOT_UID=0 +CONFIG_INITRAMFS_ROOT_GID=0 +CONFIG_RD_GZIP=y +# CONFIG_RD_BZIP2 is not set +CONFIG_RD_LZMA=y +# CONFIG_RD_LZO is not set +CONFIG_INITRAMFS_COMPRESSION_NONE=y +# CONFIG_INITRAMFS_COMPRESSION_GZIP is not set +# CONFIG_INITRAMFS_COMPRESSION_LZMA is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y +CONFIG_EMBEDDED=y +# CONFIG_UID16 is not set +# CONFIG_SYSCTL_SYSCALL is not set +# CONFIG_KALLSYMS is not set +# CONFIG_HOTPLUG is not set +CONFIG_PRINTK=y +# CONFIG_BUG is not set +# CONFIG_ELF_CORE is not set +CONFIG_PCSPKR_PLATFORM=y +# CONFIG_BASE_FULL is not set +CONFIG_FUTEX=y +# CONFIG_EPOLL is not set +# CONFIG_SIGNALFD is not set +# CONFIG_TIMERFD is not set +# CONFIG_EVENTFD is not set +# CONFIG_SHMEM is not set +# CONFIG_AIO is not set +CONFIG_HAVE_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +CONFIG_PERF_EVENTS=y +# CONFIG_PERF_COUNTERS is not set +# CONFIG_VM_EVENT_COUNTERS is not set +CONFIG_COMPAT_BRK=y +# CONFIG_SLAB is not set +# CONFIG_SLUB is not set +CONFIG_SLOB=y +# CONFIG_PROFILING is not set +CONFIG_HAVE_OPROFILE=y +# CONFIG_JUMP_LABEL is not set +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +CONFIG_HAVE_IOREMAP_PROT=y +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_HAVE_OPTPROBES=y +CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y +CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y +CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y +CONFIG_HAVE_USER_RETURN_NOTIFIER=y +CONFIG_HAVE_PERF_EVENTS_NMI=y +CONFIG_HAVE_ARCH_JUMP_LABEL=y + +# +# GCOV-based kernel profiling +# +CONFIG_HAVE_GENERIC_DMA_COHERENT=y +CONFIG_RT_MUTEXES=y +CONFIG_BASE_SMALL=1 +# CONFIG_MODULES is not set +CONFIG_BLOCK=y +# CONFIG_LBDAF is not set +# CONFIG_BLK_DEV_BSG is not set +# CONFIG_BLK_DEV_INTEGRITY is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_DEADLINE is not set +# CONFIG_IOSCHED_CFQ is not set +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set +# CONFIG_FREEZER is not set + +# +# Processor type and features +# +# CONFIG_NO_HZ is not set +# CONFIG_HIGH_RES_TIMERS is not set +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +# CONFIG_SMP is not set +# CONFIG_X86_EXTENDED_PLATFORM is not set +CONFIG_SCHED_OMIT_FRAME_POINTER=y +# CONFIG_PARAVIRT_GUEST is not set +CONFIG_NO_BOOTMEM=y +# CONFIG_MEMTEST is not set +CONFIG_M386=y +# CONFIG_M486 is not set +# CONFIG_M586 is not set +# CONFIG_M586TSC is not set +# CONFIG_M586MMX is not set +# CONFIG_M686 is not set +# CONFIG_MPENTIUMII is not set +# CONFIG_MPENTIUMIII is not set +# CONFIG_MPENTIUMM is not set +# CONFIG_MPENTIUM4 is not set +# CONFIG_MK6 is not set +# CONFIG_MK7 is not set +# CONFIG_MK8 is not set +# CONFIG_MCRUSOE is not set +# CONFIG_MEFFICEON is not set +# CONFIG_MWINCHIPC6 is not set +# CONFIG_MWINCHIP3D is not set +# CONFIG_MGEODEGX1 is not set +# CONFIG_MGEODE_LX is not set +# CONFIG_MCYRIXIII is not set +# CONFIG_MVIAC3_2 is not set +# CONFIG_MVIAC7 is not set +# CONFIG_MCORE2 is not set +# CONFIG_MATOM is not set +# CONFIG_X86_GENERIC is not set +CONFIG_X86_CPU=y +CONFIG_X86_INTERNODE_CACHE_SHIFT=4 +# CONFIG_X86_CMPXCHG is not set +CONFIG_X86_L1_CACHE_SHIFT=4 +# CONFIG_X86_PPRO_FENCE is not set +CONFIG_X86_F00F_BUG=y +CONFIG_X86_INVD_BUG=y +CONFIG_X86_MINIMUM_CPU_FAMILY=3 +# CONFIG_PROCESSOR_SELECT is not set +CONFIG_CPU_SUP_INTEL=y +CONFIG_CPU_SUP_CYRIX_32=y +CONFIG_CPU_SUP_AMD=y +CONFIG_CPU_SUP_CENTAUR=y +CONFIG_CPU_SUP_TRANSMETA_32=y +CONFIG_CPU_SUP_UMC_32=y +# CONFIG_HPET_TIMER is not set +# CONFIG_DMI is not set +# CONFIG_IOMMU_HELPER is not set +# CONFIG_IOMMU_API is not set +CONFIG_NR_CPUS=1 +# CONFIG_IRQ_TIME_ACCOUNTING is not set +CONFIG_PREEMPT_NONE=y +# CONFIG_PREEMPT_VOLUNTARY is not set +# CONFIG_PREEMPT is not set +# CONFIG_X86_UP_APIC is not set +# CONFIG_X86_MCE is not set +# CONFIG_VM86 is not set +# CONFIG_TOSHIBA is not set +# CONFIG_I8K is not set +# CONFIG_X86_REBOOTFIXUPS is not set +# CONFIG_MICROCODE is not set +# CONFIG_X86_MSR is not set +# CONFIG_X86_CPUID is not set +CONFIG_NOHIGHMEM=y +# CONFIG_HIGHMEM4G is not set +CONFIG_VMSPLIT_3G=y +# CONFIG_VMSPLIT_3G_OPT is not set +# CONFIG_VMSPLIT_2G is not set +# CONFIG_VMSPLIT_2G_OPT is not set +# CONFIG_VMSPLIT_1G is not set +CONFIG_PAGE_OFFSET=0xC0000000 +# CONFIG_X86_PAE is not set +# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set +# CONFIG_ARCH_DMA_ADDR_T_64BIT is not set +CONFIG_ARCH_FLATMEM_ENABLE=y +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ILLEGAL_POINTER_VALUE=0 +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +CONFIG_SPARSEMEM_STATIC=y +CONFIG_HAVE_MEMBLOCK=y +CONFIG_PAGEFLAGS_EXTENDED=y +CONFIG_SPLIT_PTLOCK_CPUS=4 +# CONFIG_PHYS_ADDR_T_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +CONFIG_NEED_PER_CPU_KM=y +# CONFIG_X86_CHECK_BIOS_CORRUPTION is not set +CONFIG_X86_RESERVE_LOW=64 +CONFIG_MATH_EMULATION=y +# CONFIG_MTRR is not set +# CONFIG_SECCOMP is not set +# CONFIG_CC_STACKPROTECTOR is not set +CONFIG_HZ_100=y +# CONFIG_HZ_250 is not set +# CONFIG_HZ_300 is not set +# CONFIG_HZ_1000 is not set +CONFIG_HZ=100 +# CONFIG_SCHED_HRTICK is not set +# CONFIG_KEXEC is not set +CONFIG_PHYSICAL_START=0x100000 +# CONFIG_RELOCATABLE is not set +CONFIG_PHYSICAL_ALIGN=0x100000 +# CONFIG_COMPAT_VDSO is not set +# CONFIG_CMDLINE_BOOL is not set + +# +# Power management and ACPI options +# +# CONFIG_PM is not set +# CONFIG_SFI is not set + +# +# CPU Frequency scaling +# +# CONFIG_CPU_FREQ is not set +# CONFIG_CPU_IDLE is not set + +# +# Bus options (PCI etc.) +# +# CONFIG_PCI is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +CONFIG_ISA_DMA_API=y +CONFIG_ISA=y +# CONFIG_EISA is not set +# CONFIG_MCA is not set +# CONFIG_SCx200 is not set +# CONFIG_OLPC is not set +# CONFIG_OLPC_OPENFIRMWARE is not set + +# +# Executable file formats / Emulations +# +CONFIG_BINFMT_ELF=y +CONFIG_HAVE_AOUT=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set +CONFIG_HAVE_ATOMIC_IOMAP=y +CONFIG_HAVE_TEXT_POKE_SMP=y +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE_DEMUX is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +# CONFIG_INET_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +# CONFIG_INET_LRO is not set +# CONFIG_INET_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IPV6 is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +# CONFIG_NETFILTER is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_L2TP is not set +# CONFIG_BRIDGE is not set +# CONFIG_NET_DSA is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set +# CONFIG_NET_SCHED is not set +# CONFIG_DCB is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +# CONFIG_AF_RXRPC is not set +# CONFIG_WIRELESS is not set +# CONFIG_WIMAX is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set +# CONFIG_CAIF is not set +# CONFIG_CEPH_LIB is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +CONFIG_FIRMWARE_IN_KERNEL=y +CONFIG_EXTRA_FIRMWARE="" +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +# CONFIG_MTD is not set +# CONFIG_PARPORT is not set +# CONFIG_PNP is not set +CONFIG_BLK_DEV=y +CONFIG_BLK_DEV_FD=y +# CONFIG_BLK_DEV_XD is not set +# CONFIG_BLK_DEV_COW_COMMON is not set +# CONFIG_BLK_DEV_LOOP is not set + +# +# DRBD disabled because PROC_FS, INET or CONNECTOR not selected +# +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +# CONFIG_BLK_DEV_HD is not set +# CONFIG_BLK_DEV_RBD is not set +# CONFIG_MISC_DEVICES is not set +CONFIG_HAVE_IDE=y +CONFIG_IDE=y + +# +# Please see Documentation/ide/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_IDE_SATA is not set +# CONFIG_IDE_GD is not set +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_IDE_TASK_IOCTL is not set +# CONFIG_IDE_PROC_FS is not set + +# +# IDE chipset support/bugfixes +# +CONFIG_IDE_GENERIC=y +# CONFIG_BLK_DEV_PLATFORM is not set +# CONFIG_BLK_DEV_CMD640 is not set + +# +# Other IDE chipsets support +# + +# +# Note: most of these also require special kernel boot parameters +# +# CONFIG_BLK_DEV_4DRIVES is not set +# CONFIG_BLK_DEV_ALI14XX is not set +# CONFIG_BLK_DEV_DTC2278 is not set +# CONFIG_BLK_DEV_HT6560B is not set +# CONFIG_BLK_DEV_QD65XX is not set +# CONFIG_BLK_DEV_UMC8672 is not set +# CONFIG_BLK_DEV_IDEDMA is not set + +# +# SCSI device support +# +CONFIG_SCSI_MOD=y +# CONFIG_RAID_ATTRS is not set +# CONFIG_SCSI is not set +# CONFIG_SCSI_DMA is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set +# CONFIG_MACINTOSH_DRIVERS is not set +CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_VETH is not set +# CONFIG_ARCNET is not set +# CONFIG_MII is not set +# CONFIG_PHYLIB is not set +CONFIG_NET_ETHERNET=y +CONFIG_NET_VENDOR_3COM=y +# CONFIG_EL1 is not set +# CONFIG_EL2 is not set +# CONFIG_ELPLUS is not set +# CONFIG_EL16 is not set +CONFIG_EL3=y +# CONFIG_3C515 is not set +# CONFIG_LANCE is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_ETHOC is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_DNET is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_HP100 is not set +CONFIG_NET_ISA=y +# CONFIG_E2100 is not set +# CONFIG_EWRK3 is not set +# CONFIG_EEXPRESS is not set +# CONFIG_EEXPRESS_PRO is not set +# CONFIG_HPLAN_PLUS is not set +# CONFIG_HPLAN is not set +# CONFIG_LP486E is not set +# CONFIG_ETH16I is not set +CONFIG_NE2000=y +# CONFIG_ZNET is not set +# CONFIG_SEEQ8005 is not set +# CONFIG_IBM_NEW_EMAC_ZMII is not set +# CONFIG_IBM_NEW_EMAC_RGMII is not set +# CONFIG_IBM_NEW_EMAC_TAH is not set +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set +# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set +# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set +# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set +# CONFIG_NET_PCI is not set +# CONFIG_B44 is not set +# CONFIG_CS89x0 is not set +# CONFIG_KS8851_MLL is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set +# CONFIG_TR is not set +# CONFIG_WLAN is not set + +# +# Enable WiMAX (Networking options) to see the WiMAX drivers +# +# CONFIG_WAN is not set + +# +# CAIF transport drivers +# +CONFIG_PPP=y +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=y +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=y +# CONFIG_PPP_BSDCOMP is not set +# CONFIG_PPP_MPPE is not set +CONFIG_PPPOE=y +# CONFIG_SLIP is not set +CONFIG_SLHC=y +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set +# CONFIG_PHONE is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set +# CONFIG_INPUT_SPARSEKMAP is not set + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_OPENCORES is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_MISC is not set + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +# CONFIG_SERIO_SERPORT is not set +# CONFIG_SERIO_CT82C710 is not set +CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_RAW is not set +# CONFIG_SERIO_ALTERA_PS2 is not set +# CONFIG_SERIO_PS2MULT is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_CONSOLE_TRANSLATIONS=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_DEVKMEM is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_N_GSM is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +# CONFIG_SERIAL_8250_CONSOLE is not set +CONFIG_FIX_EARLYCON_MEM=y +CONFIG_SERIAL_8250_NR_UARTS=2 +CONFIG_SERIAL_8250_RUNTIME_UARTS=2 +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_CORE=y +# CONFIG_SERIAL_TIMBERDALE is not set +# CONFIG_SERIAL_ALTERA_JTAGUART is not set +# CONFIG_SERIAL_ALTERA_UART is not set +CONFIG_UNIX98_PTYS=y +# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set +# CONFIG_LEGACY_PTYS is not set +# CONFIG_TTY_PRINTK is not set +# CONFIG_IPMI_HANDLER is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_GEN_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_MWAVE is not set +# CONFIG_PC8736x_GPIO is not set +# CONFIG_NSC_GPIO is not set +# CONFIG_CS5535_GPIO is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_HANGCHECK_TIMER is not set +# CONFIG_TCG_TPM is not set +# CONFIG_TELCLOCK is not set +CONFIG_DEVPORT=y +# CONFIG_RAMOOPS is not set +# CONFIG_I2C is not set +# CONFIG_SPI is not set + +# +# PPS support +# +# CONFIG_PPS is not set +CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y +# CONFIG_GPIOLIB is not set +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON is not set +# CONFIG_THERMAL is not set +# CONFIG_WATCHDOG is not set +CONFIG_SSB_POSSIBLE=y + +# +# Sonics Silicon Backplane +# +# CONFIG_SSB is not set +# CONFIG_MFD_SUPPORT is not set +# CONFIG_REGULATOR is not set +# CONFIG_MEDIA_SUPPORT is not set + +# +# Graphics support +# +# CONFIG_DRM is not set +# CONFIG_VGASTATE is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +# CONFIG_FB is not set +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +CONFIG_VGA_CONSOLE=y +# CONFIG_VGACON_SOFT_SCROLLBACK is not set +# CONFIG_MDA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +# CONFIG_SOUND is not set +# CONFIG_HID_SUPPORT is not set +# CONFIG_USB_SUPPORT is not set +# CONFIG_MMC is not set +# CONFIG_MEMSTICK is not set +# CONFIG_NEW_LEDS is not set +# CONFIG_ACCESSIBILITY is not set +# CONFIG_EDAC is not set +# CONFIG_RTC_CLASS is not set +# CONFIG_DMADEVICES is not set +# CONFIG_AUXDISPLAY is not set +# CONFIG_UIO is not set +# CONFIG_STAGING is not set +# CONFIG_X86_PLATFORM_DEVICES is not set + +# +# Firmware Drivers +# +# CONFIG_EDD is not set +# CONFIG_FIRMWARE_MEMMAP is not set +# CONFIG_DELL_RBU is not set +# CONFIG_DCDBAS is not set +# CONFIG_ISCSI_IBFT_FIND is not set + +# +# File systems +# +# CONFIG_EXT2_FS is not set +CONFIG_EXT3_FS=y +# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set +# CONFIG_EXT3_FS_XATTR is not set +# CONFIG_EXT4_FS is not set +CONFIG_JBD=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +# CONFIG_FILE_LOCKING is not set +# CONFIG_FSNOTIFY is not set +# CONFIG_DNOTIFY is not set +# CONFIG_INOTIFY_USER is not set +# CONFIG_FANOTIFY is not set +# CONFIG_QUOTA is not set +# CONFIG_QUOTACTL is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# Caches +# +# CONFIG_FSCACHE is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +# CONFIG_MSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +# CONFIG_PROC_KCORE is not set +CONFIG_PROC_SYSCTL=y +# CONFIG_PROC_PAGE_MONITOR is not set +# CONFIG_SYSFS is not set +# CONFIG_HUGETLBFS is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_MISC_FILESYSTEMS is not set +# CONFIG_NETWORK_FILESYSTEMS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_NLS is not set + +# +# Kernel hacking +# +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +# CONFIG_PRINTK_TIME is not set +# CONFIG_ENABLE_WARN_DEPRECATED is not set +# CONFIG_ENABLE_MUST_CHECK is not set +CONFIG_FRAME_WARN=1024 +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_STRIP_ASM_SYMS is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_HARDLOCKUP_DETECTOR is not set +CONFIG_BKL=y +# CONFIG_SPARSE_RCU_POINTER is not set +# CONFIG_DEBUG_MEMORY_INIT is not set +CONFIG_ARCH_WANT_FRAME_POINTERS=y +# CONFIG_FRAME_POINTER is not set +# CONFIG_SYSCTL_SYSCALL_CHECK is not set +CONFIG_USER_STACKTRACE_SUPPORT=y +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y +CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y +CONFIG_HAVE_C_RECORDMCOUNT=y +CONFIG_TRACING_SUPPORT=y +# CONFIG_FTRACE is not set +# CONFIG_DMA_API_DEBUG is not set +# CONFIG_ATOMIC64_SELFTEST is not set +# CONFIG_SAMPLES is not set +CONFIG_HAVE_ARCH_KGDB=y +CONFIG_HAVE_ARCH_KMEMCHECK=y +# CONFIG_STRICT_DEVMEM is not set +# CONFIG_X86_VERBOSE_BOOTUP is not set +# CONFIG_EARLY_PRINTK is not set +# CONFIG_DOUBLEFAULT is not set +# CONFIG_IOMMU_STRESS is not set +CONFIG_HAVE_MMIOTRACE_SUPPORT=y +CONFIG_IO_DELAY_TYPE_0X80=0 +CONFIG_IO_DELAY_TYPE_0XED=1 +CONFIG_IO_DELAY_TYPE_UDELAY=2 +CONFIG_IO_DELAY_TYPE_NONE=3 +CONFIG_IO_DELAY_0X80=y +# CONFIG_IO_DELAY_0XED is not set +# CONFIG_IO_DELAY_UDELAY is not set +# CONFIG_IO_DELAY_NONE is not set +CONFIG_DEFAULT_IO_DELAY_TYPE=0 +CONFIG_OPTIMIZE_INLINING=y + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY_DMESG_RESTRICT is not set +# CONFIG_SECURITYFS is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY="" +# CONFIG_CRYPTO is not set +CONFIG_HAVE_KVM=y +# CONFIG_VIRTUALIZATION is not set +# CONFIG_BINARY_PRINTF is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_GENERIC_FIND_FIRST_BIT=y +CONFIG_GENERIC_FIND_NEXT_BIT=y +CONFIG_GENERIC_FIND_LAST_BIT=y +CONFIG_CRC_CCITT=y +# CONFIG_CRC16 is not set +# CONFIG_CRC_T10DIF is not set +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +# CONFIG_XZ_DEC is not set +# CONFIG_XZ_DEC_BCJ is not set +CONFIG_DECOMPRESS_GZIP=y +CONFIG_DECOMPRESS_LZMA=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y +CONFIG_NLATTR=y diff -r c241da0f26a5 -r 5d8744871068 kernel-modular/stuff/linux-2.6.37-slitaz.config-i486-lguest --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel-modular/stuff/linux-2.6.37-slitaz.config-i486-lguest Tue Feb 01 09:37:33 2011 +0100 @@ -0,0 +1,858 @@ +# +# Automatically generated make config: don't edit +# Linux/i386 2.6.37 Kernel Configuration +# Sun Jan 30 23:06:32 2011 +# +# CONFIG_64BIT is not set +CONFIG_X86_32=y +# CONFIG_X86_64 is not set +CONFIG_X86=y +CONFIG_INSTRUCTION_DECODER=y +CONFIG_OUTPUT_FORMAT="elf32-i386" +CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig" +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_CLOCKSOURCE_WATCHDOG=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_MMU=y +CONFIG_ZONE_DMA=y +# CONFIG_NEED_DMA_MAP_STATE is not set +CONFIG_NEED_SG_DMA_LENGTH=y +CONFIG_GENERIC_ISA_DMA=y +CONFIG_GENERIC_IOMAP=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +# CONFIG_RWSEM_GENERIC_SPINLOCK is not set +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +# CONFIG_GENERIC_TIME_VSYSCALL is not set +CONFIG_ARCH_HAS_CPU_RELAX=y +CONFIG_ARCH_HAS_DEFAULT_IDLE=y +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y +CONFIG_HAVE_SETUP_PER_CPU_AREA=y +CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y +CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y +# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y +# CONFIG_ZONE_DMA32 is not set +CONFIG_ARCH_POPULATES_NODE_MAP=y +# CONFIG_AUDIT_ARCH is not set +CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y +CONFIG_X86_32_LAZY_GS=y +CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-ecx -fcall-saved-edx" +CONFIG_KTIME_SCALAR=y +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y +CONFIG_HAVE_IRQ_WORK=y +CONFIG_IRQ_WORK=y + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_CROSS_COMPILE="" +CONFIG_LOCALVERSION="-slitaz" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_HAVE_KERNEL_GZIP=y +CONFIG_HAVE_KERNEL_BZIP2=y +CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_XZ=y +CONFIG_HAVE_KERNEL_LZO=y +# CONFIG_KERNEL_GZIP is not set +# CONFIG_KERNEL_BZIP2 is not set +CONFIG_KERNEL_LZMA=y +# CONFIG_KERNEL_XZ is not set +# CONFIG_KERNEL_LZO is not set +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_AUDIT is not set +CONFIG_HAVE_GENERIC_HARDIRQS=y + +# +# IRQ subsystem +# +CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y +# CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED is not set +CONFIG_HAVE_SPARSE_IRQ=y +CONFIG_GENERIC_IRQ_PROBE=y +# CONFIG_GENERIC_PENDING_IRQ is not set +# CONFIG_AUTO_IRQ_AFFINITY is not set +# CONFIG_IRQ_PER_CPU is not set +# CONFIG_HARDIRQS_SW_RESEND is not set +# CONFIG_SPARSE_IRQ is not set + +# +# RCU Subsystem +# +CONFIG_TINY_RCU=y +# CONFIG_PREEMPT_RCU is not set +# CONFIG_TREE_RCU_TRACE is not set +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=12 +CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y +# CONFIG_NAMESPACES is not set +# CONFIG_RELAY is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="rootfs.cpio" +CONFIG_INITRAMFS_ROOT_UID=0 +CONFIG_INITRAMFS_ROOT_GID=0 +CONFIG_RD_GZIP=y +# CONFIG_RD_BZIP2 is not set +CONFIG_RD_LZMA=y +# CONFIG_RD_LZO is not set +CONFIG_INITRAMFS_COMPRESSION_NONE=y +# CONFIG_INITRAMFS_COMPRESSION_GZIP is not set +# CONFIG_INITRAMFS_COMPRESSION_LZMA is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y +CONFIG_EMBEDDED=y +# CONFIG_UID16 is not set +# CONFIG_SYSCTL_SYSCALL is not set +# CONFIG_KALLSYMS is not set +# CONFIG_HOTPLUG is not set +CONFIG_PRINTK=y +# CONFIG_BUG is not set +# CONFIG_ELF_CORE is not set +CONFIG_PCSPKR_PLATFORM=y +# CONFIG_BASE_FULL is not set +CONFIG_FUTEX=y +# CONFIG_EPOLL is not set +# CONFIG_SIGNALFD is not set +# CONFIG_TIMERFD is not set +# CONFIG_EVENTFD is not set +# CONFIG_SHMEM is not set +# CONFIG_AIO is not set +CONFIG_HAVE_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +CONFIG_PERF_EVENTS=y +# CONFIG_PERF_COUNTERS is not set +# CONFIG_VM_EVENT_COUNTERS is not set +CONFIG_COMPAT_BRK=y +# CONFIG_SLAB is not set +# CONFIG_SLUB is not set +CONFIG_SLOB=y +# CONFIG_PROFILING is not set +CONFIG_HAVE_OPROFILE=y +# CONFIG_JUMP_LABEL is not set +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +CONFIG_HAVE_IOREMAP_PROT=y +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_HAVE_OPTPROBES=y +CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y +CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y +CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y +CONFIG_HAVE_USER_RETURN_NOTIFIER=y +CONFIG_HAVE_PERF_EVENTS_NMI=y +CONFIG_HAVE_ARCH_JUMP_LABEL=y + +# +# GCOV-based kernel profiling +# +CONFIG_HAVE_GENERIC_DMA_COHERENT=y +CONFIG_RT_MUTEXES=y +CONFIG_BASE_SMALL=1 +# CONFIG_MODULES is not set +CONFIG_BLOCK=y +# CONFIG_LBDAF is not set +# CONFIG_BLK_DEV_BSG is not set +# CONFIG_BLK_DEV_INTEGRITY is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_DEADLINE is not set +# CONFIG_IOSCHED_CFQ is not set +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set +# CONFIG_FREEZER is not set + +# +# Processor type and features +# +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ=y +# CONFIG_HIGH_RES_TIMERS is not set +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +# CONFIG_SMP is not set +# CONFIG_X86_EXTENDED_PLATFORM is not set +CONFIG_SCHED_OMIT_FRAME_POINTER=y +CONFIG_PARAVIRT_GUEST=y +# CONFIG_XEN_PRIVILEGED_GUEST is not set +CONFIG_KVM_CLOCK=y +CONFIG_KVM_GUEST=y +CONFIG_LGUEST_GUEST=y +CONFIG_PARAVIRT=y +CONFIG_PARAVIRT_CLOCK=y +CONFIG_NO_BOOTMEM=y +# CONFIG_MEMTEST is not set +# CONFIG_M386 is not set +# CONFIG_M486 is not set +# CONFIG_M586 is not set +# CONFIG_M586TSC is not set +# CONFIG_M586MMX is not set +# CONFIG_M686 is not set +# CONFIG_MPENTIUMII is not set +CONFIG_MPENTIUMIII=y +# CONFIG_MPENTIUMM is not set +# CONFIG_MPENTIUM4 is not set +# CONFIG_MK6 is not set +# CONFIG_MK7 is not set +# CONFIG_MK8 is not set +# CONFIG_MCRUSOE is not set +# CONFIG_MEFFICEON is not set +# CONFIG_MWINCHIPC6 is not set +# CONFIG_MWINCHIP3D is not set +# CONFIG_MGEODEGX1 is not set +# CONFIG_MGEODE_LX is not set +# CONFIG_MCYRIXIII is not set +# CONFIG_MVIAC3_2 is not set +# CONFIG_MVIAC7 is not set +# CONFIG_MCORE2 is not set +# CONFIG_MATOM is not set +CONFIG_X86_GENERIC=y +CONFIG_X86_CPU=y +CONFIG_X86_INTERNODE_CACHE_SHIFT=6 +CONFIG_X86_CMPXCHG=y +CONFIG_X86_L1_CACHE_SHIFT=6 +CONFIG_X86_XADD=y +CONFIG_X86_WP_WORKS_OK=y +CONFIG_X86_INVLPG=y +CONFIG_X86_BSWAP=y +CONFIG_X86_POPAD_OK=y +CONFIG_X86_INTEL_USERCOPY=y +CONFIG_X86_USE_PPRO_CHECKSUM=y +CONFIG_X86_TSC=y +CONFIG_X86_CMPXCHG64=y +CONFIG_X86_CMOV=y +CONFIG_X86_MINIMUM_CPU_FAMILY=5 +CONFIG_X86_DEBUGCTLMSR=y +# CONFIG_PROCESSOR_SELECT is not set +CONFIG_CPU_SUP_INTEL=y +CONFIG_CPU_SUP_CYRIX_32=y +CONFIG_CPU_SUP_AMD=y +CONFIG_CPU_SUP_CENTAUR=y +CONFIG_CPU_SUP_TRANSMETA_32=y +CONFIG_CPU_SUP_UMC_32=y +# CONFIG_HPET_TIMER is not set +# CONFIG_DMI is not set +# CONFIG_IOMMU_HELPER is not set +# CONFIG_IOMMU_API is not set +CONFIG_NR_CPUS=1 +# CONFIG_IRQ_TIME_ACCOUNTING is not set +CONFIG_PREEMPT_NONE=y +# CONFIG_PREEMPT_VOLUNTARY is not set +# CONFIG_PREEMPT is not set +# CONFIG_X86_UP_APIC is not set +# CONFIG_X86_MCE is not set +# CONFIG_VM86 is not set +# CONFIG_TOSHIBA is not set +# CONFIG_I8K is not set +# CONFIG_X86_REBOOTFIXUPS is not set +# CONFIG_MICROCODE is not set +# CONFIG_X86_MSR is not set +# CONFIG_X86_CPUID is not set +CONFIG_NOHIGHMEM=y +# CONFIG_HIGHMEM4G is not set +# CONFIG_HIGHMEM64G is not set +CONFIG_VMSPLIT_3G=y +# CONFIG_VMSPLIT_3G_OPT is not set +# CONFIG_VMSPLIT_2G is not set +# CONFIG_VMSPLIT_2G_OPT is not set +# CONFIG_VMSPLIT_1G is not set +CONFIG_PAGE_OFFSET=0xC0000000 +# CONFIG_X86_PAE is not set +# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set +# CONFIG_ARCH_DMA_ADDR_T_64BIT is not set +CONFIG_ARCH_FLATMEM_ENABLE=y +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ILLEGAL_POINTER_VALUE=0 +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +CONFIG_SPARSEMEM_STATIC=y +CONFIG_HAVE_MEMBLOCK=y +CONFIG_PAGEFLAGS_EXTENDED=y +CONFIG_SPLIT_PTLOCK_CPUS=4 +# CONFIG_PHYS_ADDR_T_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +CONFIG_NEED_PER_CPU_KM=y +# CONFIG_X86_CHECK_BIOS_CORRUPTION is not set +CONFIG_X86_RESERVE_LOW=64 +# CONFIG_MATH_EMULATION is not set +# CONFIG_MTRR is not set +# CONFIG_SECCOMP is not set +# CONFIG_CC_STACKPROTECTOR is not set +CONFIG_HZ_100=y +# CONFIG_HZ_250 is not set +# CONFIG_HZ_300 is not set +# CONFIG_HZ_1000 is not set +CONFIG_HZ=100 +# CONFIG_SCHED_HRTICK is not set +# CONFIG_KEXEC is not set +CONFIG_PHYSICAL_START=0x100000 +# CONFIG_RELOCATABLE is not set +CONFIG_PHYSICAL_ALIGN=0x100000 +# CONFIG_COMPAT_VDSO is not set +# CONFIG_CMDLINE_BOOL is not set + +# +# Power management and ACPI options +# +# CONFIG_PM is not set +# CONFIG_SFI is not set + +# +# CPU Frequency scaling +# +# CONFIG_CPU_FREQ is not set +# CONFIG_CPU_IDLE is not set + +# +# Bus options (PCI etc.) +# +# CONFIG_PCI is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +CONFIG_ISA_DMA_API=y +# CONFIG_ISA is not set +# CONFIG_MCA is not set +# CONFIG_SCx200 is not set +# CONFIG_OLPC is not set +# CONFIG_OLPC_OPENFIRMWARE is not set + +# +# Executable file formats / Emulations +# +CONFIG_BINFMT_ELF=y +CONFIG_HAVE_AOUT=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set +CONFIG_HAVE_ATOMIC_IOMAP=y +CONFIG_HAVE_TEXT_POKE_SMP=y +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE_DEMUX is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +# CONFIG_INET_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +# CONFIG_INET_LRO is not set +# CONFIG_INET_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IPV6 is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +# CONFIG_NETFILTER is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_L2TP is not set +# CONFIG_BRIDGE is not set +# CONFIG_NET_DSA is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set +# CONFIG_NET_SCHED is not set +# CONFIG_DCB is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +# CONFIG_AF_RXRPC is not set +# CONFIG_WIRELESS is not set +# CONFIG_WIMAX is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set +# CONFIG_CAIF is not set +# CONFIG_CEPH_LIB is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +CONFIG_FIRMWARE_IN_KERNEL=y +CONFIG_EXTRA_FIRMWARE="" +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +# CONFIG_MTD is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set + +# +# DRBD disabled because PROC_FS, INET or CONNECTOR not selected +# +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +CONFIG_VIRTIO_BLK=y +# CONFIG_BLK_DEV_HD is not set +# CONFIG_BLK_DEV_RBD is not set +# CONFIG_MISC_DEVICES is not set +CONFIG_HAVE_IDE=y +# CONFIG_IDE is not set + +# +# SCSI device support +# +CONFIG_SCSI_MOD=y +# CONFIG_RAID_ATTRS is not set +# CONFIG_SCSI is not set +# CONFIG_SCSI_DMA is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set +# CONFIG_MACINTOSH_DRIVERS is not set +CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_VETH is not set +# CONFIG_MII is not set +# CONFIG_PHYLIB is not set +# CONFIG_NET_ETHERNET is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set +# CONFIG_WLAN is not set + +# +# Enable WiMAX (Networking options) to see the WiMAX drivers +# +# CONFIG_WAN is not set + +# +# CAIF transport drivers +# +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +CONFIG_VIRTIO_NET=y +# CONFIG_ISDN is not set +# CONFIG_PHONE is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set +# CONFIG_INPUT_SPARSEKMAP is not set + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_OPENCORES is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_MISC is not set + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +# CONFIG_SERIO_SERPORT is not set +# CONFIG_SERIO_CT82C710 is not set +CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_RAW is not set +# CONFIG_SERIO_ALTERA_PS2 is not set +# CONFIG_SERIO_PS2MULT is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_CONSOLE_TRANSLATIONS=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_DEVKMEM is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_N_GSM is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +# CONFIG_SERIAL_8250_CONSOLE is not set +CONFIG_FIX_EARLYCON_MEM=y +CONFIG_SERIAL_8250_NR_UARTS=2 +CONFIG_SERIAL_8250_RUNTIME_UARTS=2 +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_CORE=y +# CONFIG_SERIAL_TIMBERDALE is not set +# CONFIG_SERIAL_ALTERA_JTAGUART is not set +# CONFIG_SERIAL_ALTERA_UART is not set +CONFIG_UNIX98_PTYS=y +# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set +# CONFIG_LEGACY_PTYS is not set +# CONFIG_TTY_PRINTK is not set +CONFIG_HVC_DRIVER=y +CONFIG_VIRTIO_CONSOLE=y +# CONFIG_IPMI_HANDLER is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_GEN_RTC is not set +# CONFIG_R3964 is not set +# CONFIG_MWAVE is not set +# CONFIG_PC8736x_GPIO is not set +# CONFIG_NSC_GPIO is not set +# CONFIG_CS5535_GPIO is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_HANGCHECK_TIMER is not set +# CONFIG_TCG_TPM is not set +# CONFIG_TELCLOCK is not set +# CONFIG_RAMOOPS is not set +# CONFIG_I2C is not set +# CONFIG_SPI is not set + +# +# PPS support +# +# CONFIG_PPS is not set +CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y +# CONFIG_GPIOLIB is not set +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON is not set +# CONFIG_THERMAL is not set +# CONFIG_WATCHDOG is not set +CONFIG_SSB_POSSIBLE=y + +# +# Sonics Silicon Backplane +# +# CONFIG_SSB is not set +# CONFIG_MFD_SUPPORT is not set +# CONFIG_REGULATOR is not set +# CONFIG_MEDIA_SUPPORT is not set + +# +# Graphics support +# +# CONFIG_DRM is not set +# CONFIG_VGASTATE is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +# CONFIG_FB is not set +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +CONFIG_VGA_CONSOLE=y +# CONFIG_VGACON_SOFT_SCROLLBACK is not set +CONFIG_DUMMY_CONSOLE=y +# CONFIG_SOUND is not set +# CONFIG_HID_SUPPORT is not set +# CONFIG_USB_SUPPORT is not set +# CONFIG_MMC is not set +# CONFIG_MEMSTICK is not set +# CONFIG_NEW_LEDS is not set +# CONFIG_ACCESSIBILITY is not set +# CONFIG_EDAC is not set +# CONFIG_RTC_CLASS is not set +# CONFIG_DMADEVICES is not set +# CONFIG_AUXDISPLAY is not set +# CONFIG_UIO is not set +# CONFIG_STAGING is not set +# CONFIG_X86_PLATFORM_DEVICES is not set + +# +# Firmware Drivers +# +# CONFIG_EDD is not set +# CONFIG_FIRMWARE_MEMMAP is not set +# CONFIG_DELL_RBU is not set +# CONFIG_DCDBAS is not set +# CONFIG_ISCSI_IBFT_FIND is not set + +# +# File systems +# +# CONFIG_EXT2_FS is not set +CONFIG_EXT3_FS=y +# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set +# CONFIG_EXT3_FS_XATTR is not set +# CONFIG_EXT4_FS is not set +CONFIG_JBD=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +# CONFIG_FILE_LOCKING is not set +# CONFIG_FSNOTIFY is not set +# CONFIG_DNOTIFY is not set +# CONFIG_INOTIFY_USER is not set +# CONFIG_FANOTIFY is not set +# CONFIG_QUOTA is not set +# CONFIG_QUOTACTL is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# Caches +# +# CONFIG_FSCACHE is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +# CONFIG_MSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +# CONFIG_PROC_KCORE is not set +CONFIG_PROC_SYSCTL=y +# CONFIG_PROC_PAGE_MONITOR is not set +# CONFIG_SYSFS is not set +# CONFIG_HUGETLBFS is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_MISC_FILESYSTEMS is not set +# CONFIG_NETWORK_FILESYSTEMS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_NLS is not set + +# +# Kernel hacking +# +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +# CONFIG_PRINTK_TIME is not set +# CONFIG_ENABLE_WARN_DEPRECATED is not set +# CONFIG_ENABLE_MUST_CHECK is not set +CONFIG_FRAME_WARN=1024 +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_STRIP_ASM_SYMS is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_HARDLOCKUP_DETECTOR is not set +CONFIG_BKL=y +# CONFIG_SPARSE_RCU_POINTER is not set +# CONFIG_DEBUG_MEMORY_INIT is not set +CONFIG_ARCH_WANT_FRAME_POINTERS=y +# CONFIG_FRAME_POINTER is not set +# CONFIG_SYSCTL_SYSCALL_CHECK is not set +CONFIG_USER_STACKTRACE_SUPPORT=y +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y +CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y +CONFIG_HAVE_C_RECORDMCOUNT=y +CONFIG_TRACING_SUPPORT=y +# CONFIG_FTRACE is not set +# CONFIG_DMA_API_DEBUG is not set +# CONFIG_ATOMIC64_SELFTEST is not set +# CONFIG_SAMPLES is not set +CONFIG_HAVE_ARCH_KGDB=y +CONFIG_HAVE_ARCH_KMEMCHECK=y +# CONFIG_STRICT_DEVMEM is not set +# CONFIG_X86_VERBOSE_BOOTUP is not set +# CONFIG_EARLY_PRINTK is not set +# CONFIG_DOUBLEFAULT is not set +# CONFIG_IOMMU_STRESS is not set +CONFIG_HAVE_MMIOTRACE_SUPPORT=y +CONFIG_IO_DELAY_TYPE_0X80=0 +CONFIG_IO_DELAY_TYPE_0XED=1 +CONFIG_IO_DELAY_TYPE_UDELAY=2 +CONFIG_IO_DELAY_TYPE_NONE=3 +CONFIG_IO_DELAY_0X80=y +# CONFIG_IO_DELAY_0XED is not set +# CONFIG_IO_DELAY_UDELAY is not set +# CONFIG_IO_DELAY_NONE is not set +CONFIG_DEFAULT_IO_DELAY_TYPE=0 +CONFIG_OPTIMIZE_INLINING=y + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY_DMESG_RESTRICT is not set +# CONFIG_SECURITYFS is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY="" +# CONFIG_CRYPTO is not set +CONFIG_HAVE_KVM=y +# CONFIG_VIRTUALIZATION is not set +CONFIG_VIRTIO=y +CONFIG_VIRTIO_RING=y +# CONFIG_BINARY_PRINTF is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_GENERIC_FIND_FIRST_BIT=y +CONFIG_GENERIC_FIND_NEXT_BIT=y +CONFIG_GENERIC_FIND_LAST_BIT=y +CONFIG_CRC_CCITT=y +# CONFIG_CRC16 is not set +# CONFIG_CRC_T10DIF is not set +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=y +# CONFIG_XZ_DEC is not set +# CONFIG_XZ_DEC_BCJ is not set +CONFIG_DECOMPRESS_GZIP=y +CONFIG_DECOMPRESS_LZMA=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y +CONFIG_NLATTR=y diff -r c241da0f26a5 -r 5d8744871068 kernel-modular/stuff/linux-2.6.37-slitaz.config-i486-modular --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel-modular/stuff/linux-2.6.37-slitaz.config-i486-modular Tue Feb 01 09:37:33 2011 +0100 @@ -0,0 +1,4737 @@ +# +# Automatically generated make config: don't edit +# Linux/i386 2.6.37 Kernel Configuration +# Mon Jan 31 15:19:41 2011 +# +# CONFIG_64BIT is not set +CONFIG_X86_32=y +# CONFIG_X86_64 is not set +CONFIG_X86=y +CONFIG_INSTRUCTION_DECODER=y +CONFIG_OUTPUT_FORMAT="elf32-i386" +CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig" +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_CLOCKSOURCE_WATCHDOG=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_MMU=y +CONFIG_ZONE_DMA=y +# CONFIG_NEED_DMA_MAP_STATE is not set +CONFIG_NEED_SG_DMA_LENGTH=y +CONFIG_GENERIC_ISA_DMA=y +CONFIG_GENERIC_IOMAP=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_GPIO=y +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +# CONFIG_GENERIC_TIME_VSYSCALL is not set +CONFIG_ARCH_HAS_CPU_RELAX=y +CONFIG_ARCH_HAS_DEFAULT_IDLE=y +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y +CONFIG_HAVE_SETUP_PER_CPU_AREA=y +CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y +CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y +# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y +# CONFIG_ZONE_DMA32 is not set +CONFIG_ARCH_POPULATES_NODE_MAP=y +# CONFIG_AUDIT_ARCH is not set +CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y +CONFIG_X86_32_LAZY_GS=y +CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-ecx -fcall-saved-edx" +CONFIG_KTIME_SCALAR=y +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y +CONFIG_HAVE_IRQ_WORK=y +CONFIG_IRQ_WORK=y + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_CROSS_COMPILE="" +CONFIG_LOCALVERSION="-slitaz" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_HAVE_KERNEL_GZIP=y +CONFIG_HAVE_KERNEL_BZIP2=y +CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_XZ=y +CONFIG_HAVE_KERNEL_LZO=y +# CONFIG_KERNEL_GZIP is not set +# CONFIG_KERNEL_BZIP2 is not set +CONFIG_KERNEL_LZMA=y +# CONFIG_KERNEL_XZ is not set +# CONFIG_KERNEL_LZO is not set +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_AUDIT is not set +CONFIG_HAVE_GENERIC_HARDIRQS=y + +# +# IRQ subsystem +# +CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y +# CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED is not set +CONFIG_HAVE_SPARSE_IRQ=y +CONFIG_GENERIC_IRQ_PROBE=y +# CONFIG_GENERIC_PENDING_IRQ is not set +# CONFIG_AUTO_IRQ_AFFINITY is not set +# CONFIG_IRQ_PER_CPU is not set +# CONFIG_HARDIRQS_SW_RESEND is not set +# CONFIG_SPARSE_IRQ is not set + +# +# RCU Subsystem +# +CONFIG_TINY_RCU=y +# CONFIG_PREEMPT_RCU is not set +# CONFIG_TREE_RCU_TRACE is not set +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=12 +CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y +# CONFIG_CGROUPS is not set +# CONFIG_NAMESPACES is not set +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="rootfs.cpio" +CONFIG_INITRAMFS_ROOT_UID=0 +CONFIG_INITRAMFS_ROOT_GID=0 +CONFIG_RD_GZIP=y +# CONFIG_RD_BZIP2 is not set +CONFIG_RD_LZMA=y +# CONFIG_RD_LZO is not set +CONFIG_INITRAMFS_COMPRESSION_NONE=y +# CONFIG_INITRAMFS_COMPRESSION_GZIP is not set +# CONFIG_INITRAMFS_COMPRESSION_LZMA is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y +CONFIG_EMBEDDED=y +# CONFIG_UID16 is not set +# CONFIG_SYSCTL_SYSCALL is not set +# CONFIG_KALLSYMS is not set +# CONFIG_HOTPLUG is not set +CONFIG_PRINTK=y +# CONFIG_BUG is not set +# CONFIG_ELF_CORE is not set +CONFIG_PCSPKR_PLATFORM=y +# CONFIG_BASE_FULL is not set +CONFIG_FUTEX=y +# CONFIG_EPOLL is not set +# CONFIG_SIGNALFD is not set +# CONFIG_TIMERFD is not set +CONFIG_EVENTFD=y +# CONFIG_SHMEM is not set +# CONFIG_AIO is not set +CONFIG_HAVE_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +CONFIG_PERF_EVENTS=y +# CONFIG_PERF_COUNTERS is not set +# CONFIG_VM_EVENT_COUNTERS is not set +CONFIG_PCI_QUIRKS=y +CONFIG_COMPAT_BRK=y +# CONFIG_SLAB is not set +# CONFIG_SLUB is not set +CONFIG_SLOB=y +# CONFIG_PROFILING is not set +CONFIG_HAVE_OPROFILE=y +# CONFIG_KPROBES is not set +# CONFIG_JUMP_LABEL is not set +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +CONFIG_USER_RETURN_NOTIFIER=y +CONFIG_HAVE_IOREMAP_PROT=y +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_HAVE_OPTPROBES=y +CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y +CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y +CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y +CONFIG_HAVE_USER_RETURN_NOTIFIER=y +CONFIG_HAVE_PERF_EVENTS_NMI=y +CONFIG_HAVE_ARCH_JUMP_LABEL=y + +# +# GCOV-based kernel profiling +# +CONFIG_HAVE_GENERIC_DMA_COHERENT=y +CONFIG_RT_MUTEXES=y +CONFIG_BASE_SMALL=1 +CONFIG_MODULES=y +# CONFIG_MODULE_FORCE_LOAD is not set +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_BLOCK=y +# CONFIG_LBDAF is not set +CONFIG_BLK_DEV_BSG=y +# CONFIG_BLK_DEV_INTEGRITY is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_DEADLINE is not set +# CONFIG_IOSCHED_CFQ is not set +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" +CONFIG_PREEMPT_NOTIFIERS=y +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set +# CONFIG_FREEZER is not set + +# +# Processor type and features +# +# CONFIG_NO_HZ is not set +# CONFIG_HIGH_RES_TIMERS is not set +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +# CONFIG_SMP is not set +# CONFIG_X86_EXTENDED_PLATFORM is not set +CONFIG_SCHED_OMIT_FRAME_POINTER=y +# CONFIG_PARAVIRT_GUEST is not set +CONFIG_NO_BOOTMEM=y +# CONFIG_MEMTEST is not set +CONFIG_M386=y +# CONFIG_M486 is not set +# CONFIG_M586 is not set +# CONFIG_M586TSC is not set +# CONFIG_M586MMX is not set +# CONFIG_M686 is not set +# CONFIG_MPENTIUMII is not set +# CONFIG_MPENTIUMIII is not set +# CONFIG_MPENTIUMM is not set +# CONFIG_MPENTIUM4 is not set +# CONFIG_MK6 is not set +# CONFIG_MK7 is not set +# CONFIG_MK8 is not set +# CONFIG_MCRUSOE is not set +# CONFIG_MEFFICEON is not set +# CONFIG_MWINCHIPC6 is not set +# CONFIG_MWINCHIP3D is not set +# CONFIG_MGEODEGX1 is not set +# CONFIG_MGEODE_LX is not set +# CONFIG_MCYRIXIII is not set +# CONFIG_MVIAC3_2 is not set +# CONFIG_MVIAC7 is not set +# CONFIG_MCORE2 is not set +# CONFIG_MATOM is not set +# CONFIG_X86_GENERIC is not set +CONFIG_X86_CPU=y +CONFIG_X86_INTERNODE_CACHE_SHIFT=4 +# CONFIG_X86_CMPXCHG is not set +CONFIG_X86_L1_CACHE_SHIFT=4 +# CONFIG_X86_PPRO_FENCE is not set +CONFIG_X86_F00F_BUG=y +CONFIG_X86_INVD_BUG=y +CONFIG_X86_MINIMUM_CPU_FAMILY=3 +# CONFIG_PROCESSOR_SELECT is not set +CONFIG_CPU_SUP_INTEL=y +CONFIG_CPU_SUP_CYRIX_32=y +CONFIG_CPU_SUP_AMD=y +CONFIG_CPU_SUP_CENTAUR=y +CONFIG_CPU_SUP_TRANSMETA_32=y +CONFIG_CPU_SUP_UMC_32=y +# CONFIG_HPET_TIMER is not set +# CONFIG_DMI is not set +# CONFIG_IOMMU_HELPER is not set +# CONFIG_IOMMU_API is not set +CONFIG_NR_CPUS=1 +# CONFIG_IRQ_TIME_ACCOUNTING is not set +CONFIG_PREEMPT_NONE=y +# CONFIG_PREEMPT_VOLUNTARY is not set +# CONFIG_PREEMPT is not set +# CONFIG_X86_UP_APIC is not set +# CONFIG_X86_MCE is not set +# CONFIG_VM86 is not set +# CONFIG_TOSHIBA is not set +# CONFIG_I8K is not set +# CONFIG_X86_REBOOTFIXUPS is not set +# CONFIG_MICROCODE is not set +# CONFIG_X86_MSR is not set +# CONFIG_X86_CPUID is not set +CONFIG_NOHIGHMEM=y +# CONFIG_HIGHMEM4G is not set +CONFIG_VMSPLIT_3G=y +# CONFIG_VMSPLIT_3G_OPT is not set +# CONFIG_VMSPLIT_2G is not set +# CONFIG_VMSPLIT_2G_OPT is not set +# CONFIG_VMSPLIT_1G is not set +CONFIG_PAGE_OFFSET=0xC0000000 +# CONFIG_X86_PAE is not set +# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set +# CONFIG_ARCH_DMA_ADDR_T_64BIT is not set +CONFIG_ARCH_FLATMEM_ENABLE=y +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ILLEGAL_POINTER_VALUE=0 +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +CONFIG_SPARSEMEM_STATIC=y +CONFIG_HAVE_MEMBLOCK=y +CONFIG_PAGEFLAGS_EXTENDED=y +CONFIG_SPLIT_PTLOCK_CPUS=4 +# CONFIG_PHYS_ADDR_T_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_MMU_NOTIFIER=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +CONFIG_NEED_PER_CPU_KM=y +# CONFIG_X86_CHECK_BIOS_CORRUPTION is not set +CONFIG_X86_RESERVE_LOW=64 +CONFIG_MATH_EMULATION=y +# CONFIG_MTRR is not set +# CONFIG_SECCOMP is not set +# CONFIG_CC_STACKPROTECTOR is not set +CONFIG_HZ_100=y +# CONFIG_HZ_250 is not set +# CONFIG_HZ_300 is not set +# CONFIG_HZ_1000 is not set +CONFIG_HZ=100 +# CONFIG_SCHED_HRTICK is not set +# CONFIG_KEXEC is not set +CONFIG_PHYSICAL_START=0x100000 +# CONFIG_RELOCATABLE is not set +CONFIG_PHYSICAL_ALIGN=0x100000 +# CONFIG_COMPAT_VDSO is not set +# CONFIG_CMDLINE_BOOL is not set + +# +# Power management and ACPI options +# +# CONFIG_PM is not set +# CONFIG_SFI is not set + +# +# CPU Frequency scaling +# +# CONFIG_CPU_FREQ is not set +# CONFIG_CPU_IDLE is not set + +# +# Bus options (PCI etc.) +# +CONFIG_PCI=y +# CONFIG_PCI_GOBIOS is not set +# CONFIG_PCI_GOMMCONFIG is not set +# CONFIG_PCI_GODIRECT is not set +CONFIG_PCI_GOANY=y +CONFIG_PCI_BIOS=y +CONFIG_PCI_DIRECT=y +CONFIG_PCI_DOMAINS=y +# CONFIG_PCI_CNB20LE_QUIRK is not set +# CONFIG_PCIEPORTBUS is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +# CONFIG_PCI_STUB is not set +# CONFIG_PCI_IOV is not set +CONFIG_ISA_DMA_API=y +CONFIG_ISA=y +# CONFIG_EISA is not set +# CONFIG_MCA is not set +# CONFIG_SCx200 is not set +# CONFIG_OLPC is not set +# CONFIG_OLPC_OPENFIRMWARE is not set +CONFIG_AMD_NB=y + +# +# Executable file formats / Emulations +# +CONFIG_BINFMT_ELF=y +CONFIG_HAVE_AOUT=y +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_MISC=m +CONFIG_HAVE_ATOMIC_IOMAP=y +CONFIG_HAVE_TEXT_POKE_SMP=y +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_XFRM_STATISTICS is not set +CONFIG_XFRM_IPCOMP=m +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +CONFIG_NET_IPIP=m +# CONFIG_NET_IPGRE_DEMUX is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +CONFIG_INET_AH=m +CONFIG_INET_ESP=m +CONFIG_INET_IPCOMP=m +CONFIG_INET_XFRM_TUNNEL=m +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +CONFIG_INET_LRO=y +# CONFIG_INET_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +# CONFIG_IPV6_MIP6 is not set +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +# CONFIG_IPV6_SIT_6RD is not set +CONFIG_IPV6_NDISC_NODETYPE=y +CONFIG_IPV6_TUNNEL=m +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_IPV6_MROUTE is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_NETFILTER_ADVANCED=y +CONFIG_BRIDGE_NETFILTER=y + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_NETLINK=m +CONFIG_NETFILTER_NETLINK_QUEUE=m +CONFIG_NETFILTER_NETLINK_LOG=m +CONFIG_NF_CONNTRACK=m +CONFIG_NF_CONNTRACK_MARK=y +CONFIG_NF_CONNTRACK_EVENTS=y +CONFIG_NF_CT_PROTO_DCCP=m +CONFIG_NF_CT_PROTO_GRE=m +CONFIG_NF_CT_PROTO_SCTP=m +CONFIG_NF_CT_PROTO_UDPLITE=m +CONFIG_NF_CONNTRACK_AMANDA=m +CONFIG_NF_CONNTRACK_FTP=m +CONFIG_NF_CONNTRACK_H323=m +CONFIG_NF_CONNTRACK_IRC=m +CONFIG_NF_CONNTRACK_NETBIOS_NS=m +CONFIG_NF_CONNTRACK_PPTP=m +CONFIG_NF_CONNTRACK_SANE=m +CONFIG_NF_CONNTRACK_SIP=m +CONFIG_NF_CONNTRACK_TFTP=m +CONFIG_NF_CT_NETLINK=m +# CONFIG_NETFILTER_TPROXY is not set +CONFIG_NETFILTER_XTABLES=m + +# +# Xtables combined modules +# +CONFIG_NETFILTER_XT_MARK=m +CONFIG_NETFILTER_XT_CONNMARK=m + +# +# Xtables targets +# +# CONFIG_NETFILTER_XT_TARGET_CHECKSUM is not set +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +CONFIG_NETFILTER_XT_TARGET_CONNMARK=m +# CONFIG_NETFILTER_XT_TARGET_CT is not set +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set +CONFIG_NETFILTER_XT_TARGET_HL=m +# CONFIG_NETFILTER_XT_TARGET_IDLETIMER is not set +# CONFIG_NETFILTER_XT_TARGET_LED is not set +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set +CONFIG_NETFILTER_XT_TARGET_RATEEST=m +# CONFIG_NETFILTER_XT_TARGET_TEE is not set +# CONFIG_NETFILTER_XT_TARGET_TRACE is not set +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set + +# +# Xtables matches +# +CONFIG_NETFILTER_XT_MATCH_CLUSTER=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +# CONFIG_NETFILTER_XT_MATCH_CPU is not set +CONFIG_NETFILTER_XT_MATCH_DCCP=m +CONFIG_NETFILTER_XT_MATCH_DSCP=m +CONFIG_NETFILTER_XT_MATCH_ESP=m +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m +CONFIG_NETFILTER_XT_MATCH_HELPER=m +CONFIG_NETFILTER_XT_MATCH_HL=m +CONFIG_NETFILTER_XT_MATCH_IPRANGE=m +# CONFIG_NETFILTER_XT_MATCH_IPVS is not set +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +CONFIG_NETFILTER_XT_MATCH_OSF=m +CONFIG_NETFILTER_XT_MATCH_OWNER=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +CONFIG_NETFILTER_XT_MATCH_RATEEST=m +CONFIG_NETFILTER_XT_MATCH_REALM=m +CONFIG_NETFILTER_XT_MATCH_RECENT=m +CONFIG_NETFILTER_XT_MATCH_SCTP=m +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_TIME=m +CONFIG_NETFILTER_XT_MATCH_U32=m +CONFIG_IP_VS=m +CONFIG_IP_VS_IPV6=y +# CONFIG_IP_VS_DEBUG is not set +CONFIG_IP_VS_TAB_BITS=12 + +# +# IPVS transport protocol load balancing support +# +CONFIG_IP_VS_PROTO_TCP=y +CONFIG_IP_VS_PROTO_UDP=y +CONFIG_IP_VS_PROTO_AH_ESP=y +CONFIG_IP_VS_PROTO_ESP=y +CONFIG_IP_VS_PROTO_AH=y +CONFIG_IP_VS_PROTO_SCTP=y + +# +# IPVS scheduler +# +CONFIG_IP_VS_RR=m +CONFIG_IP_VS_WRR=m +CONFIG_IP_VS_LC=m +CONFIG_IP_VS_WLC=m +CONFIG_IP_VS_LBLC=m +CONFIG_IP_VS_LBLCR=m +CONFIG_IP_VS_DH=m +CONFIG_IP_VS_SH=m +CONFIG_IP_VS_SED=m +CONFIG_IP_VS_NQ=m + +# +# IPVS application helper +# +CONFIG_IP_VS_FTP=m +CONFIG_IP_VS_NFCT=y +# CONFIG_IP_VS_PE_SIP is not set + +# +# IP: Netfilter Configuration +# +CONFIG_NF_DEFRAG_IPV4=m +CONFIG_NF_CONNTRACK_IPV4=m +CONFIG_NF_CONNTRACK_PROC_COMPAT=y +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_NF_NAT=m +CONFIG_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_NF_NAT_SNMP_BASIC=m +CONFIG_NF_NAT_PROTO_DCCP=m +CONFIG_NF_NAT_PROTO_GRE=m +CONFIG_NF_NAT_PROTO_UDPLITE=m +CONFIG_NF_NAT_PROTO_SCTP=m +CONFIG_NF_NAT_FTP=m +CONFIG_NF_NAT_IRC=m +CONFIG_NF_NAT_TFTP=m +CONFIG_NF_NAT_AMANDA=m +CONFIG_NF_NAT_PPTP=m +CONFIG_NF_NAT_H323=m +CONFIG_NF_NAT_SIP=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m + +# +# IPv6: Netfilter Configuration +# +CONFIG_NF_DEFRAG_IPV6=m +CONFIG_NF_CONNTRACK_IPV6=m +CONFIG_IP6_NF_QUEUE=m +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MATCH_AH=m +CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_HL=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_MATCH_MH=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_TARGET_HL=m +CONFIG_IP6_NF_TARGET_LOG=m +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_RAW=m +# CONFIG_BRIDGE_NF_EBTABLES is not set +# CONFIG_IP_DCCP is not set +CONFIG_IP_SCTP=m +# CONFIG_SCTP_DBG_MSG is not set +# CONFIG_SCTP_DBG_OBJCNT is not set +# CONFIG_SCTP_HMAC_NONE is not set +# CONFIG_SCTP_HMAC_SHA1 is not set +CONFIG_SCTP_HMAC_MD5=y +# CONFIG_RDS is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_L2TP is not set +CONFIG_STP=m +CONFIG_BRIDGE=m +CONFIG_BRIDGE_IGMP_SNOOPING=y +# CONFIG_NET_DSA is not set +CONFIG_VLAN_8021Q=m +# CONFIG_VLAN_8021Q_GVRP is not set +# CONFIG_DECNET is not set +CONFIG_LLC=m +# CONFIG_LLC2 is not set +CONFIG_IPX=m +# CONFIG_IPX_INTERN is not set +CONFIG_ATALK=m +CONFIG_DEV_APPLETALK=m +# CONFIG_LTPC is not set +# CONFIG_COPS is not set +CONFIG_IPDDP=m +CONFIG_IPDDP_ENCAP=y +CONFIG_IPDDP_DECAP=y +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +CONFIG_PHONET=m +# CONFIG_PHONET_PIPECTRLR is not set +# CONFIG_IEEE802154 is not set +CONFIG_NET_SCHED=y + +# +# Queueing/Scheduling +# +CONFIG_NET_SCH_CBQ=m +CONFIG_NET_SCH_HTB=m +CONFIG_NET_SCH_HFSC=m +CONFIG_NET_SCH_PRIO=m +CONFIG_NET_SCH_MULTIQ=m +CONFIG_NET_SCH_RED=m +CONFIG_NET_SCH_SFQ=m +CONFIG_NET_SCH_TEQL=m +CONFIG_NET_SCH_TBF=m +CONFIG_NET_SCH_GRED=m +CONFIG_NET_SCH_DSMARK=m +CONFIG_NET_SCH_NETEM=m +CONFIG_NET_SCH_DRR=m +# CONFIG_NET_SCH_INGRESS is not set + +# +# Classification +# +CONFIG_NET_CLS=y +CONFIG_NET_CLS_BASIC=m +CONFIG_NET_CLS_TCINDEX=m +CONFIG_NET_CLS_ROUTE4=m +CONFIG_NET_CLS_ROUTE=y +CONFIG_NET_CLS_FW=m +CONFIG_NET_CLS_U32=m +CONFIG_CLS_U32_PERF=y +CONFIG_CLS_U32_MARK=y +CONFIG_NET_CLS_RSVP=m +CONFIG_NET_CLS_RSVP6=m +CONFIG_NET_CLS_FLOW=m +CONFIG_NET_EMATCH=y +CONFIG_NET_EMATCH_STACK=32 +CONFIG_NET_EMATCH_CMP=m +CONFIG_NET_EMATCH_NBYTE=m +CONFIG_NET_EMATCH_U32=m +CONFIG_NET_EMATCH_META=m +CONFIG_NET_EMATCH_TEXT=m +CONFIG_NET_CLS_ACT=y +CONFIG_NET_ACT_POLICE=m +CONFIG_NET_ACT_GACT=m +# CONFIG_GACT_PROB is not set +CONFIG_NET_ACT_MIRRED=m +CONFIG_NET_ACT_IPT=m +CONFIG_NET_ACT_NAT=m +CONFIG_NET_ACT_PEDIT=m +CONFIG_NET_ACT_SIMP=m +CONFIG_NET_ACT_SKBEDIT=m +# CONFIG_NET_ACT_CSUM is not set +CONFIG_NET_CLS_IND=y +CONFIG_NET_SCH_FIFO=y +# CONFIG_DCB is not set +CONFIG_DNS_RESOLVER=m + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +CONFIG_IRDA_ULTRA=y + +# +# IrDA options +# +CONFIG_IRDA_CACHE_LAST_LSAP=y +CONFIG_IRDA_FAST_RR=y +# CONFIG_IRDA_DEBUG is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +CONFIG_IRTTY_SIR=m + +# +# Dongle support +# +CONFIG_DONGLE=y +CONFIG_ESI_DONGLE=m +CONFIG_ACTISYS_DONGLE=m +CONFIG_TEKRAM_DONGLE=m +CONFIG_TOIM3232_DONGLE=m +CONFIG_LITELINK_DONGLE=m +CONFIG_MA600_DONGLE=m +CONFIG_GIRBIL_DONGLE=m +CONFIG_MCP2120_DONGLE=m +CONFIG_OLD_BELKIN_DONGLE=m +CONFIG_ACT200L_DONGLE=m +# CONFIG_KINGSUN_DONGLE is not set +# CONFIG_KSDAZZLE_DONGLE is not set +# CONFIG_KS959_DONGLE is not set + +# +# FIR device drivers +# +# CONFIG_USB_IRDA is not set +# CONFIG_SIGMATEL_FIR is not set +CONFIG_NSC_FIR=m +CONFIG_WINBOND_FIR=m +CONFIG_TOSHIBA_FIR=m +CONFIG_SMC_IRCC_FIR=m +CONFIG_ALI_FIR=m +CONFIG_VLSI_FIR=m +CONFIG_VIA_FIR=m +# CONFIG_MCS_FIR is not set +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +# CONFIG_BT_CMTP is not set +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +# CONFIG_BT_HCIBTUSB is not set +# CONFIG_BT_HCIBTSDIO is not set +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +# CONFIG_BT_HCIUART_ATH3K is not set +CONFIG_BT_HCIUART_LL=y +# CONFIG_BT_HCIBCM203X is not set +# CONFIG_BT_HCIBPA10X is not set +# CONFIG_BT_HCIBFUSB is not set +CONFIG_BT_HCIVHCI=m +CONFIG_BT_MRVL=m +# CONFIG_BT_MRVL_SDIO is not set +CONFIG_AF_RXRPC=m +# CONFIG_AF_RXRPC_DEBUG is not set +# CONFIG_RXKAD is not set +CONFIG_WIRELESS=y +CONFIG_WIRELESS_EXT=y +CONFIG_WEXT_CORE=y +CONFIG_WEXT_PROC=y +CONFIG_WEXT_SPY=y +CONFIG_WEXT_PRIV=y +CONFIG_CFG80211=m +# CONFIG_NL80211_TESTMODE is not set +# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set +# CONFIG_CFG80211_REG_DEBUG is not set +CONFIG_CFG80211_DEFAULT_PS=y +# CONFIG_CFG80211_INTERNAL_REGDB is not set +CONFIG_CFG80211_WEXT=y +CONFIG_WIRELESS_EXT_SYSFS=y +CONFIG_LIB80211=m +CONFIG_LIB80211_CRYPT_WEP=m +CONFIG_LIB80211_CRYPT_CCMP=m +CONFIG_LIB80211_CRYPT_TKIP=m +# CONFIG_LIB80211_DEBUG is not set +CONFIG_MAC80211=m +CONFIG_MAC80211_HAS_RC=y +CONFIG_MAC80211_RC_PID=y +CONFIG_MAC80211_RC_MINSTREL=y +CONFIG_MAC80211_RC_MINSTREL_HT=y +# CONFIG_MAC80211_RC_DEFAULT_PID is not set +CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y +CONFIG_MAC80211_RC_DEFAULT="minstrel_ht" +CONFIG_MAC80211_MESH=y +CONFIG_MAC80211_LEDS=y +# CONFIG_MAC80211_DEBUG_MENU is not set +CONFIG_WIMAX=m +CONFIG_WIMAX_DEBUG_LEVEL=8 +CONFIG_RFKILL=m +CONFIG_RFKILL_LEDS=y +CONFIG_RFKILL_INPUT=y +# CONFIG_NET_9P is not set +# CONFIG_CAIF is not set +CONFIG_CEPH_LIB=m +# CONFIG_CEPH_LIB_PRETTYDEBUG is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=m +CONFIG_FIRMWARE_IN_KERNEL=y +CONFIG_EXTRA_FIRMWARE="" +# CONFIG_SYS_HYPERVISOR is not set +CONFIG_CONNECTOR=m +CONFIG_MTD=m +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_TESTS is not set +CONFIG_MTD_CONCAT=m +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_AR7_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=m +CONFIG_HAVE_MTD_OTP=y +CONFIG_MTD_BLKDEVS=m +CONFIG_MTD_BLOCK=m +CONFIG_MTD_BLOCK_RO=m +CONFIG_FTL=m +CONFIG_NFTL=m +CONFIG_NFTL_RW=y +CONFIG_INFTL=m +CONFIG_RFD_FTL=m +CONFIG_SSFDC=m +# CONFIG_SM_FTL is not set +CONFIG_MTD_OOPS=m + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=m +CONFIG_MTD_JEDECPROBE=m +CONFIG_MTD_GEN_PROBE=m +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +CONFIG_MTD_CFI_INTELEXT=m +CONFIG_MTD_CFI_AMDSTD=m +CONFIG_MTD_CFI_STAA=m +CONFIG_MTD_CFI_UTIL=m +CONFIG_MTD_RAM=m +CONFIG_MTD_ROM=m +CONFIG_MTD_ABSENT=m + +# +# Mapping drivers for chip access +# +CONFIG_MTD_COMPLEX_MAPPINGS=y +CONFIG_MTD_PHYSMAP=m +CONFIG_MTD_PHYSMAP_COMPAT=y +CONFIG_MTD_PHYSMAP_START=0x8000000 +CONFIG_MTD_PHYSMAP_LEN=0 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2 +CONFIG_MTD_SC520CDP=m +CONFIG_MTD_NETSC520=m +CONFIG_MTD_TS5500=m +CONFIG_MTD_SBC_GXX=m +CONFIG_MTD_AMD76XROM=m +CONFIG_MTD_ICHXROM=m +CONFIG_MTD_ESB2ROM=m +CONFIG_MTD_CK804XROM=m +CONFIG_MTD_SCB2_FLASH=m +CONFIG_MTD_NETtel=m +CONFIG_MTD_L440GX=m +CONFIG_MTD_PCI=m +# CONFIG_MTD_GPIO_ADDR is not set +CONFIG_MTD_INTEL_VR_NOR=m +CONFIG_MTD_PLATRAM=m + +# +# Self-contained MTD device drivers +# +CONFIG_MTD_PMC551=m +# CONFIG_MTD_PMC551_BUGFIX is not set +# CONFIG_MTD_PMC551_DEBUG is not set +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SST25L is not set +CONFIG_MTD_SLRAM=m +CONFIG_MTD_PHRAM=m +CONFIG_MTD_MTDRAM=m +CONFIG_MTDRAM_TOTAL_SIZE=4096 +CONFIG_MTDRAM_ERASE_SIZE=128 +CONFIG_MTD_BLOCK2MTD=m + +# +# Disk-On-Chip Device Drivers +# +CONFIG_MTD_DOC2000=m +CONFIG_MTD_DOC2001=m +CONFIG_MTD_DOC2001PLUS=m +CONFIG_MTD_DOCPROBE=m +CONFIG_MTD_DOCECC=m +# CONFIG_MTD_DOCPROBE_ADVANCED is not set +CONFIG_MTD_DOCPROBE_ADDRESS=0 +CONFIG_MTD_NAND_ECC=m +# CONFIG_MTD_NAND_ECC_SMC is not set +CONFIG_MTD_NAND=m +# CONFIG_MTD_NAND_VERIFY_WRITE is not set +# CONFIG_MTD_SM_COMMON is not set +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +# CONFIG_MTD_NAND_DENALI is not set +CONFIG_MTD_NAND_IDS=m +# CONFIG_MTD_NAND_RICOH is not set +CONFIG_MTD_NAND_DISKONCHIP=m +# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set +CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0 +# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set +CONFIG_MTD_NAND_CAFE=m +CONFIG_MTD_NAND_CS553X=m +CONFIG_MTD_NAND_NANDSIM=m +CONFIG_MTD_NAND_PLATFORM=m +# CONFIG_MTD_ALAUDA is not set +CONFIG_MTD_ONENAND=m +CONFIG_MTD_ONENAND_VERIFY_WRITE=y +CONFIG_MTD_ONENAND_GENERIC=m +CONFIG_MTD_ONENAND_OTP=y +CONFIG_MTD_ONENAND_2X_PROGRAM=y +CONFIG_MTD_ONENAND_SIM=m + +# +# LPDDR flash memory drivers +# +CONFIG_MTD_LPDDR=m +CONFIG_MTD_QINFO_PROBE=m +CONFIG_MTD_UBI=m +CONFIG_MTD_UBI_WL_THRESHOLD=4096 +CONFIG_MTD_UBI_BEB_RESERVE=1 +CONFIG_MTD_UBI_GLUEBI=m + +# +# UBI debugging options +# +# CONFIG_MTD_UBI_DEBUG is not set +CONFIG_PARPORT=m +CONFIG_PARPORT_PC=m +CONFIG_PARPORT_SERIAL=m +CONFIG_PARPORT_PC_FIFO=y +CONFIG_PARPORT_PC_SUPERIO=y +# CONFIG_PARPORT_GSC is not set +CONFIG_PARPORT_AX88796=m +CONFIG_PARPORT_1284=y +CONFIG_PARPORT_NOT_PC=y +CONFIG_PNP=y +CONFIG_PNP_DEBUG_MESSAGES=y + +# +# Protocols +# +CONFIG_ISAPNP=y +# CONFIG_PNPBIOS is not set +# CONFIG_PNPACPI is not set +CONFIG_BLK_DEV=y +CONFIG_BLK_DEV_FD=m +# CONFIG_BLK_DEV_XD is not set +CONFIG_PARIDE=m + +# +# Parallel IDE high-level drivers +# +CONFIG_PARIDE_PD=m +CONFIG_PARIDE_PCD=m +CONFIG_PARIDE_PF=m +CONFIG_PARIDE_PT=m +CONFIG_PARIDE_PG=m + +# +# Parallel IDE protocol modules +# +CONFIG_PARIDE_ATEN=m +CONFIG_PARIDE_BPCK=m +CONFIG_PARIDE_BPCK6=m +CONFIG_PARIDE_COMM=m +CONFIG_PARIDE_DSTR=m +CONFIG_PARIDE_FIT2=m +CONFIG_PARIDE_FIT3=m +CONFIG_PARIDE_EPAT=m +CONFIG_PARIDE_EPATC8=y +CONFIG_PARIDE_EPIA=m +CONFIG_PARIDE_FRIQ=m +CONFIG_PARIDE_FRPW=m +CONFIG_PARIDE_KBIC=m +CONFIG_PARIDE_KTTI=m +CONFIG_PARIDE_ON20=m +CONFIG_PARIDE_ON26=m +CONFIG_BLK_CPQ_DA=m +CONFIG_BLK_CPQ_CISS_DA=m +CONFIG_CISS_SCSI_TAPE=y +CONFIG_BLK_DEV_DAC960=m +CONFIG_BLK_DEV_UMEM=m +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +CONFIG_BLK_DEV_CRYPTOLOOP=m +CONFIG_BLK_DEV_DRBD=m +# CONFIG_DRBD_FAULT_INJECTION is not set +CONFIG_BLK_DEV_NBD=m +# CONFIG_BLK_DEV_OSD is not set +CONFIG_BLK_DEV_SX8=m +CONFIG_BLK_DEV_UB=m +CONFIG_BLK_DEV_RAM=m +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_XIP=y +CONFIG_CDROM_PKTCDVD=m +CONFIG_CDROM_PKTCDVD_BUFFERS=8 +# CONFIG_CDROM_PKTCDVD_WCACHE is not set +CONFIG_ATA_OVER_ETH=m +# CONFIG_VIRTIO_BLK is not set +# CONFIG_BLK_DEV_HD is not set +# CONFIG_BLK_DEV_RBD is not set +CONFIG_MISC_DEVICES=y +# CONFIG_AD525X_DPOT is not set +CONFIG_IBM_ASM=m +CONFIG_PHANTOM=m +CONFIG_SGI_IOC4=m +CONFIG_TIFM_CORE=m +CONFIG_TIFM_7XX1=m +CONFIG_ICS932S401=m +CONFIG_ENCLOSURE_SERVICES=m +CONFIG_CS5535_MFGPT=m +CONFIG_CS5535_MFGPT_DEFAULT_IRQ=7 +CONFIG_CS5535_CLOCK_EVENT_SRC=m +CONFIG_HP_ILO=m +# CONFIG_APDS9802ALS is not set +# CONFIG_ISL29003 is not set +# CONFIG_ISL29020 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_SENSORS_BH1780 is not set +# CONFIG_SENSORS_BH1770 is not set +# CONFIG_SENSORS_APDS990X is not set +# CONFIG_HMC6352 is not set +CONFIG_DS1682=m +# CONFIG_TI_DAC7512 is not set +CONFIG_VMWARE_BALLOON=m +# CONFIG_BMP085 is not set +# CONFIG_PCH_PHUB is not set +CONFIG_C2PORT=m +CONFIG_C2PORT_DURAMAR_2150=m + +# +# EEPROM support +# +# CONFIG_EEPROM_AT24 is not set +# CONFIG_EEPROM_AT25 is not set +# CONFIG_EEPROM_LEGACY is not set +# CONFIG_EEPROM_MAX6875 is not set +CONFIG_EEPROM_93CX6=m +CONFIG_CB710_CORE=m +# CONFIG_CB710_DEBUG is not set +CONFIG_CB710_DEBUG_ASSUMPTIONS=y +# CONFIG_IWMC3200TOP is not set + +# +# Texas Instruments shared transport line discipline +# +# CONFIG_TI_ST is not set +CONFIG_HAVE_IDE=y +# CONFIG_IDE is not set + +# +# SCSI device support +# +CONFIG_SCSI_MOD=m +CONFIG_RAID_ATTRS=m +CONFIG_SCSI=m +CONFIG_SCSI_DMA=y +CONFIG_SCSI_TGT=m +CONFIG_SCSI_NETLINK=y +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=m +CONFIG_CHR_DEV_ST=m +CONFIG_CHR_DEV_OSST=m +CONFIG_BLK_DEV_SR=m +CONFIG_BLK_DEV_SR_VENDOR=y +CONFIG_CHR_DEV_SG=m +CONFIG_CHR_DEV_SCH=m +CONFIG_SCSI_ENCLOSURE=m +CONFIG_SCSI_MULTI_LUN=y +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +CONFIG_SCSI_SCAN_ASYNC=y +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +CONFIG_SCSI_SPI_ATTRS=m +CONFIG_SCSI_FC_ATTRS=m +CONFIG_SCSI_FC_TGT_ATTRS=y +CONFIG_SCSI_ISCSI_ATTRS=m +CONFIG_SCSI_SAS_ATTRS=m +CONFIG_SCSI_SAS_LIBSAS=m +CONFIG_SCSI_SAS_ATA=y +CONFIG_SCSI_SAS_HOST_SMP=y +CONFIG_SCSI_SAS_LIBSAS_DEBUG=y +CONFIG_SCSI_SRP_ATTRS=m +CONFIG_SCSI_SRP_TGT_ATTRS=y +CONFIG_SCSI_LOWLEVEL=y +CONFIG_ISCSI_TCP=m +CONFIG_ISCSI_BOOT_SYSFS=m +CONFIG_SCSI_CXGB3_ISCSI=m +# CONFIG_SCSI_CXGB4_ISCSI is not set +CONFIG_SCSI_BNX2_ISCSI=m +CONFIG_BE2ISCSI=m +CONFIG_BLK_DEV_3W_XXXX_RAID=m +CONFIG_SCSI_HPSA=m +CONFIG_SCSI_3W_9XXX=m +CONFIG_SCSI_3W_SAS=m +CONFIG_SCSI_7000FASST=m +CONFIG_SCSI_ACARD=m +CONFIG_SCSI_AHA152X=m +CONFIG_SCSI_AHA1542=m +CONFIG_SCSI_AACRAID=m +CONFIG_SCSI_AIC7XXX=m +CONFIG_AIC7XXX_CMDS_PER_DEVICE=32 +CONFIG_AIC7XXX_RESET_DELAY_MS=5000 +CONFIG_AIC7XXX_DEBUG_ENABLE=y +CONFIG_AIC7XXX_DEBUG_MASK=0 +CONFIG_AIC7XXX_REG_PRETTY_PRINT=y +# CONFIG_SCSI_AIC7XXX_OLD is not set +CONFIG_SCSI_AIC79XX=m +CONFIG_AIC79XX_CMDS_PER_DEVICE=32 +CONFIG_AIC79XX_RESET_DELAY_MS=5000 +CONFIG_AIC79XX_DEBUG_ENABLE=y +CONFIG_AIC79XX_DEBUG_MASK=0 +CONFIG_AIC79XX_REG_PRETTY_PRINT=y +CONFIG_SCSI_AIC94XX=m +CONFIG_AIC94XX_DEBUG=y +CONFIG_SCSI_MVSAS=m +CONFIG_SCSI_MVSAS_DEBUG=y +CONFIG_SCSI_DPT_I2O=m +CONFIG_SCSI_ADVANSYS=m +CONFIG_SCSI_IN2000=m +CONFIG_SCSI_ARCMSR=m +CONFIG_MEGARAID_NEWGEN=y +CONFIG_MEGARAID_MM=m +CONFIG_MEGARAID_MAILBOX=m +CONFIG_MEGARAID_LEGACY=m +CONFIG_MEGARAID_SAS=m +CONFIG_SCSI_MPT2SAS=m +CONFIG_SCSI_MPT2SAS_MAX_SGE=128 +CONFIG_SCSI_MPT2SAS_LOGGING=y +CONFIG_SCSI_HPTIOP=m +CONFIG_SCSI_BUSLOGIC=m +CONFIG_SCSI_FLASHPOINT=y +CONFIG_VMWARE_PVSCSI=m +CONFIG_LIBFC=m +CONFIG_LIBFCOE=m +CONFIG_FCOE=m +CONFIG_FCOE_FNIC=m +CONFIG_SCSI_DMX3191D=m +CONFIG_SCSI_DTC3280=m +CONFIG_SCSI_EATA=m +CONFIG_SCSI_EATA_TAGGED_QUEUE=y +CONFIG_SCSI_EATA_LINKED_COMMANDS=y +CONFIG_SCSI_EATA_MAX_TAGS=16 +CONFIG_SCSI_FUTURE_DOMAIN=m +CONFIG_SCSI_GDTH=m +CONFIG_SCSI_GENERIC_NCR5380=m +CONFIG_SCSI_GENERIC_NCR5380_MMIO=m +CONFIG_SCSI_GENERIC_NCR53C400=y +CONFIG_SCSI_IPS=m +CONFIG_SCSI_INITIO=m +CONFIG_SCSI_INIA100=m +CONFIG_SCSI_PPA=m +CONFIG_SCSI_IMM=m +CONFIG_SCSI_IZIP_EPP16=y +CONFIG_SCSI_IZIP_SLOW_CTR=y +CONFIG_SCSI_NCR53C406A=m +CONFIG_SCSI_STEX=m +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 +CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 +CONFIG_SCSI_SYM53C8XX_MMIO=y +# CONFIG_SCSI_IPR is not set +CONFIG_SCSI_PAS16=m +CONFIG_SCSI_QLOGIC_FAS=m +CONFIG_SCSI_QLOGIC_1280=m +CONFIG_SCSI_QLA_FC=m +CONFIG_SCSI_QLA_ISCSI=m +CONFIG_SCSI_LPFC=m +CONFIG_SCSI_SYM53C416=m +CONFIG_SCSI_DC395x=m +CONFIG_SCSI_DC390T=m +CONFIG_SCSI_T128=m +CONFIG_SCSI_U14_34F=m +CONFIG_SCSI_U14_34F_TAGGED_QUEUE=y +CONFIG_SCSI_U14_34F_LINKED_COMMANDS=y +CONFIG_SCSI_U14_34F_MAX_TAGS=8 +CONFIG_SCSI_ULTRASTOR=m +CONFIG_SCSI_NSP32=m +CONFIG_SCSI_DEBUG=m +CONFIG_SCSI_PMCRAID=m +CONFIG_SCSI_PM8001=m +CONFIG_SCSI_SRP=m +CONFIG_SCSI_BFA_FC=m +CONFIG_SCSI_DH=m +CONFIG_SCSI_DH_RDAC=m +CONFIG_SCSI_DH_HP_SW=m +CONFIG_SCSI_DH_EMC=m +CONFIG_SCSI_DH_ALUA=m +CONFIG_SCSI_OSD_INITIATOR=m +CONFIG_SCSI_OSD_ULD=m +CONFIG_SCSI_OSD_DPRINT_SENSE=1 +CONFIG_SCSI_OSD_DEBUG=y +CONFIG_ATA=m +# CONFIG_ATA_NONSTANDARD is not set +CONFIG_ATA_VERBOSE_ERROR=y +CONFIG_SATA_PMP=y + +# +# Controllers with non-SFF native interface +# +CONFIG_SATA_AHCI=m +# CONFIG_SATA_AHCI_PLATFORM is not set +CONFIG_SATA_INIC162X=m +CONFIG_SATA_SIL24=m +CONFIG_ATA_SFF=y + +# +# SFF controllers with custom DMA interface +# +CONFIG_PDC_ADMA=m +CONFIG_SATA_QSTOR=m +CONFIG_SATA_SX4=m +CONFIG_ATA_BMDMA=y + +# +# SATA SFF controllers with BMDMA +# +CONFIG_ATA_PIIX=m +CONFIG_SATA_MV=m +CONFIG_SATA_NV=m +CONFIG_SATA_PROMISE=m +CONFIG_SATA_SIL=m +CONFIG_SATA_SIS=m +CONFIG_SATA_SVW=m +CONFIG_SATA_ULI=m +CONFIG_SATA_VIA=m +CONFIG_SATA_VITESSE=m + +# +# PATA SFF controllers with BMDMA +# +CONFIG_PATA_ALI=m +CONFIG_PATA_AMD=m +CONFIG_PATA_ARTOP=m +CONFIG_PATA_ATIIXP=m +CONFIG_PATA_ATP867X=m +CONFIG_PATA_CMD64X=m +CONFIG_PATA_CS5520=m +CONFIG_PATA_CS5530=m +CONFIG_PATA_CS5535=m +CONFIG_PATA_CS5536=m +CONFIG_PATA_CYPRESS=m +CONFIG_PATA_EFAR=m +CONFIG_PATA_HPT366=m +CONFIG_PATA_HPT37X=m +CONFIG_PATA_HPT3X2N=m +CONFIG_PATA_HPT3X3=m +CONFIG_PATA_HPT3X3_DMA=y +CONFIG_PATA_IT8213=m +CONFIG_PATA_IT821X=m +CONFIG_PATA_JMICRON=m +CONFIG_PATA_MARVELL=m +CONFIG_PATA_NETCELL=m +CONFIG_PATA_NINJA32=m +CONFIG_PATA_NS87415=m +CONFIG_PATA_OLDPIIX=m +CONFIG_PATA_OPTIDMA=m +CONFIG_PATA_PDC2027X=m +CONFIG_PATA_PDC_OLD=m +CONFIG_PATA_RADISYS=m +CONFIG_PATA_RDC=m +CONFIG_PATA_SC1200=m +CONFIG_PATA_SCH=m +CONFIG_PATA_SERVERWORKS=m +CONFIG_PATA_SIL680=m +CONFIG_PATA_SIS=m +CONFIG_PATA_TOSHIBA=m +CONFIG_PATA_TRIFLEX=m +CONFIG_PATA_VIA=m +CONFIG_PATA_WINBOND=m + +# +# PIO-only SFF controllers +# +CONFIG_PATA_CMD640_PCI=m +CONFIG_PATA_ISAPNP=m +CONFIG_PATA_MPIIX=m +CONFIG_PATA_NS87410=m +CONFIG_PATA_OPTI=m +CONFIG_PATA_PLATFORM=m +CONFIG_PATA_QDI=m +CONFIG_PATA_RZ1000=m +CONFIG_PATA_WINBOND_VLB=m + +# +# Generic fallback / legacy drivers +# +CONFIG_ATA_GENERIC=m +CONFIG_PATA_LEGACY=m +CONFIG_MD=y +CONFIG_BLK_DEV_MD=m +CONFIG_MD_LINEAR=m +CONFIG_MD_RAID0=m +CONFIG_MD_RAID1=m +CONFIG_MD_RAID10=m +CONFIG_MD_RAID456=m +CONFIG_MD_MULTIPATH=m +CONFIG_MD_FAULTY=m +CONFIG_BLK_DEV_DM=m +# CONFIG_DM_DEBUG is not set +CONFIG_DM_CRYPT=m +CONFIG_DM_SNAPSHOT=m +CONFIG_DM_MIRROR=m +CONFIG_DM_LOG_USERSPACE=m +CONFIG_DM_ZERO=m +CONFIG_DM_MULTIPATH=m +CONFIG_DM_MULTIPATH_QL=m +CONFIG_DM_MULTIPATH_ST=m +CONFIG_DM_DELAY=m +CONFIG_DM_UEVENT=y +CONFIG_FUSION=y +CONFIG_FUSION_SPI=m +CONFIG_FUSION_FC=m +CONFIG_FUSION_SAS=m +CONFIG_FUSION_MAX_SGE=128 +CONFIG_FUSION_CTL=m +CONFIG_FUSION_LAN=m +CONFIG_FUSION_LOGGING=y + +# +# IEEE 1394 (FireWire) support +# +CONFIG_FIREWIRE=m +CONFIG_FIREWIRE_OHCI=m +CONFIG_FIREWIRE_OHCI_DEBUG=y +CONFIG_FIREWIRE_SBP2=m +CONFIG_FIREWIRE_NET=m +# CONFIG_FIREWIRE_NOSY is not set +CONFIG_I2O=m +CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y +CONFIG_I2O_EXT_ADAPTEC=y +CONFIG_I2O_CONFIG=m +# CONFIG_I2O_CONFIG_OLD_IOCTL is not set +CONFIG_I2O_BUS=m +CONFIG_I2O_BLOCK=m +CONFIG_I2O_SCSI=m +CONFIG_I2O_PROC=m +CONFIG_MACINTOSH_DRIVERS=y +CONFIG_MAC_EMUMOUSEBTN=m +CONFIG_NETDEVICES=y +CONFIG_IFB=m +CONFIG_DUMMY=m +CONFIG_BONDING=m +CONFIG_MACVLAN=m +CONFIG_MACVTAP=m +CONFIG_EQUALIZER=m +CONFIG_TUN=m +CONFIG_VETH=m +CONFIG_NET_SB1000=m +CONFIG_ARCNET=m +CONFIG_ARCNET_1201=m +CONFIG_ARCNET_1051=m +CONFIG_ARCNET_RAW=m +CONFIG_ARCNET_CAP=m +CONFIG_ARCNET_COM90xx=m +CONFIG_ARCNET_COM90xxIO=m +CONFIG_ARCNET_RIM_I=m +CONFIG_ARCNET_COM20020=m +CONFIG_ARCNET_COM20020_ISA=m +CONFIG_ARCNET_COM20020_PCI=m +CONFIG_MII=m +CONFIG_PHYLIB=m + +# +# MII PHY device drivers +# +CONFIG_MARVELL_PHY=m +CONFIG_DAVICOM_PHY=m +CONFIG_QSEMI_PHY=m +CONFIG_LXT_PHY=m +CONFIG_CICADA_PHY=m +CONFIG_VITESSE_PHY=m +CONFIG_SMSC_PHY=m +CONFIG_BROADCOM_PHY=m +# CONFIG_BCM63XX_PHY is not set +CONFIG_ICPLUS_PHY=m +CONFIG_REALTEK_PHY=m +CONFIG_NATIONAL_PHY=m +CONFIG_STE10XP=m +CONFIG_LSI_ET1011C_PHY=m +CONFIG_MICREL_PHY=m +CONFIG_MDIO_BITBANG=m +CONFIG_MDIO_GPIO=m +CONFIG_NET_ETHERNET=y +CONFIG_HAPPYMEAL=m +CONFIG_SUNGEM=m +CONFIG_CASSINI=m +CONFIG_NET_VENDOR_3COM=y +CONFIG_EL1=m +CONFIG_EL2=m +CONFIG_ELPLUS=m +CONFIG_EL16=m +CONFIG_EL3=m +CONFIG_3C515=m +CONFIG_VORTEX=m +CONFIG_TYPHOON=m +CONFIG_LANCE=m +CONFIG_NET_VENDOR_SMC=y +CONFIG_WD80x3=m +CONFIG_ULTRA=m +CONFIG_SMC9194=m +CONFIG_ENC28J60=m +CONFIG_ENC28J60_WRITEVERIFY=y +CONFIG_ETHOC=m +CONFIG_NET_VENDOR_RACAL=y +CONFIG_NI5010=m +CONFIG_NI52=m +CONFIG_NI65=m +CONFIG_DNET=m +CONFIG_NET_TULIP=y +CONFIG_DE2104X=m +CONFIG_DE2104X_DSL=0 +CONFIG_TULIP=m +# CONFIG_TULIP_MWI is not set +# CONFIG_TULIP_MMIO is not set +# CONFIG_TULIP_NAPI is not set +CONFIG_DE4X5=m +CONFIG_WINBOND_840=m +CONFIG_DM9102=m +CONFIG_ULI526X=m +CONFIG_AT1700=m +CONFIG_DEPCA=m +CONFIG_HP100=m +CONFIG_NET_ISA=y +CONFIG_E2100=m +CONFIG_EWRK3=m +CONFIG_EEXPRESS=m +CONFIG_EEXPRESS_PRO=m +CONFIG_HPLAN_PLUS=m +CONFIG_HPLAN=m +CONFIG_LP486E=m +CONFIG_ETH16I=m +CONFIG_NE2000=m +CONFIG_ZNET=m +CONFIG_SEEQ8005=m +# CONFIG_IBM_NEW_EMAC_ZMII is not set +# CONFIG_IBM_NEW_EMAC_RGMII is not set +# CONFIG_IBM_NEW_EMAC_TAH is not set +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set +# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set +# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set +# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set +CONFIG_NET_PCI=y +CONFIG_PCNET32=m +CONFIG_AMD8111_ETH=m +CONFIG_ADAPTEC_STARFIRE=m +CONFIG_AC3200=m +CONFIG_KSZ884X_PCI=m +CONFIG_APRICOT=m +CONFIG_B44=m +CONFIG_B44_PCI_AUTOSELECT=y +CONFIG_B44_PCICORE_AUTOSELECT=y +CONFIG_B44_PCI=y +CONFIG_FORCEDETH=m +CONFIG_CS89x0=m +CONFIG_E100=m +CONFIG_FEALNX=m +CONFIG_NATSEMI=m +CONFIG_NE2K_PCI=m +CONFIG_8139CP=m +CONFIG_8139TOO=m +CONFIG_8139TOO_PIO=y +# CONFIG_8139TOO_TUNE_TWISTER is not set +# CONFIG_8139TOO_8129 is not set +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_R6040=m +CONFIG_SIS900=m +CONFIG_EPIC100=m +CONFIG_SMSC9420=m +CONFIG_SUNDANCE=m +# CONFIG_SUNDANCE_MMIO is not set +CONFIG_TLAN=m +CONFIG_KS8842=m +CONFIG_KS8851=m +CONFIG_KS8851_MLL=m +CONFIG_VIA_RHINE=m +# CONFIG_VIA_RHINE_MMIO is not set +CONFIG_SC92031=m +CONFIG_NET_POCKET=y +CONFIG_ATP=m +CONFIG_DE600=m +CONFIG_DE620=m +CONFIG_ATL2=m +CONFIG_NETDEV_1000=y +CONFIG_ACENIC=m +# CONFIG_ACENIC_OMIT_TIGON_I is not set +CONFIG_DL2K=m +CONFIG_E1000=m +CONFIG_E1000E=m +CONFIG_IP1000=m +CONFIG_IGB=m +CONFIG_IGB_DCA=y +CONFIG_IGBVF=m +CONFIG_NS83820=m +CONFIG_HAMACHI=m +CONFIG_YELLOWFIN=m +CONFIG_R8169=m +CONFIG_R8169_VLAN=y +CONFIG_SIS190=m +CONFIG_SKGE=m +CONFIG_SKY2=m +CONFIG_VIA_VELOCITY=m +CONFIG_TIGON3=m +CONFIG_BNX2=m +CONFIG_CNIC=m +CONFIG_QLA3XXX=m +CONFIG_ATL1=m +CONFIG_ATL1E=m +CONFIG_ATL1C=m +CONFIG_JME=m +# CONFIG_STMMAC_ETH is not set +# CONFIG_PCH_GBE is not set +CONFIG_NETDEV_10000=y +CONFIG_MDIO=m +CONFIG_CHELSIO_T1=m +CONFIG_CHELSIO_T1_1G=y +CONFIG_CHELSIO_T3_DEPENDS=y +CONFIG_CHELSIO_T3=m +CONFIG_CHELSIO_T4_DEPENDS=y +CONFIG_CHELSIO_T4=m +CONFIG_CHELSIO_T4VF_DEPENDS=y +# CONFIG_CHELSIO_T4VF is not set +CONFIG_ENIC=m +CONFIG_IXGBE=m +CONFIG_IXGBE_DCA=y +CONFIG_IXGB=m +CONFIG_S2IO=m +CONFIG_VXGE=m +CONFIG_VXGE_DEBUG_TRACE_ALL=y +CONFIG_MYRI10GE=m +CONFIG_MYRI10GE_DCA=y +CONFIG_NETXEN_NIC=m +CONFIG_NIU=m +CONFIG_MLX4_EN=m +CONFIG_MLX4_CORE=m +CONFIG_MLX4_DEBUG=y +CONFIG_TEHUTI=m +CONFIG_BNX2X=m +CONFIG_QLCNIC=m +CONFIG_QLGE=m +# CONFIG_BNA is not set +CONFIG_SFC=m +CONFIG_SFC_MTD=y +CONFIG_BE2NET=m +CONFIG_TR=m +CONFIG_IBMTR=m +CONFIG_IBMOL=m +CONFIG_IBMLS=m +CONFIG_3C359=m +CONFIG_TMS380TR=m +CONFIG_TMSPCI=m +CONFIG_SKISA=m +CONFIG_PROTEON=m +CONFIG_ABYSS=m +CONFIG_SMCTR=m +CONFIG_WLAN=y +CONFIG_LIBERTAS_THINFIRM=m +# CONFIG_LIBERTAS_THINFIRM_DEBUG is not set +CONFIG_LIBERTAS_THINFIRM_USB=m +CONFIG_AIRO=m +CONFIG_ATMEL=m +CONFIG_PCI_ATMEL=m +CONFIG_AT76C50X_USB=m +CONFIG_PRISM54=m +CONFIG_USB_ZD1201=m +CONFIG_USB_NET_RNDIS_WLAN=m +CONFIG_RTL8180=m +CONFIG_RTL8187=m +CONFIG_RTL8187_LEDS=y +CONFIG_ADM8211=m +CONFIG_MAC80211_HWSIM=m +CONFIG_MWL8K=m +CONFIG_ATH_COMMON=m +# CONFIG_ATH_DEBUG is not set +# CONFIG_ATH5K is not set +# CONFIG_ATH9K is not set +# CONFIG_ATH9K_HTC is not set +# CONFIG_AR9170_USB is not set +# CONFIG_CARL9170 is not set +CONFIG_B43=m +CONFIG_B43_PCI_AUTOSELECT=y +CONFIG_B43_PCICORE_AUTOSELECT=y +# CONFIG_B43_SDIO is not set +CONFIG_B43_PIO=y +CONFIG_B43_PHY_LP=y +CONFIG_B43_LEDS=y +CONFIG_B43_HWRNG=y +# CONFIG_B43_DEBUG is not set +CONFIG_B43LEGACY=m +CONFIG_B43LEGACY_PCI_AUTOSELECT=y +CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y +CONFIG_B43LEGACY_LEDS=y +CONFIG_B43LEGACY_HWRNG=y +CONFIG_B43LEGACY_DEBUG=y +CONFIG_B43LEGACY_DMA=y +CONFIG_B43LEGACY_PIO=y +CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y +# CONFIG_B43LEGACY_DMA_MODE is not set +# CONFIG_B43LEGACY_PIO_MODE is not set +CONFIG_HOSTAP=m +CONFIG_HOSTAP_FIRMWARE=y +CONFIG_HOSTAP_FIRMWARE_NVRAM=y +CONFIG_HOSTAP_PLX=m +CONFIG_HOSTAP_PCI=m +CONFIG_IPW2100=m +CONFIG_IPW2100_MONITOR=y +# CONFIG_IPW2100_DEBUG is not set +CONFIG_IPW2200=m +CONFIG_IPW2200_MONITOR=y +CONFIG_IPW2200_RADIOTAP=y +CONFIG_IPW2200_PROMISCUOUS=y +CONFIG_IPW2200_QOS=y +# CONFIG_IPW2200_DEBUG is not set +CONFIG_LIBIPW=m +# CONFIG_LIBIPW_DEBUG is not set +CONFIG_IWLWIFI=m + +# +# Debugging Options +# +# CONFIG_IWLWIFI_DEBUG is not set +CONFIG_IWLAGN=m +CONFIG_IWL4965=y +CONFIG_IWL5000=y +CONFIG_IWL3945=m +# CONFIG_IWM is not set +CONFIG_LIBERTAS=m +CONFIG_LIBERTAS_USB=m +# CONFIG_LIBERTAS_SDIO is not set +CONFIG_LIBERTAS_SPI=m +# CONFIG_LIBERTAS_DEBUG is not set +CONFIG_LIBERTAS_MESH=y +CONFIG_HERMES=m +# CONFIG_HERMES_PRISM is not set +CONFIG_HERMES_CACHE_FW_ON_INIT=y +CONFIG_PLX_HERMES=m +CONFIG_TMD_HERMES=m +CONFIG_NORTEL_HERMES=m +# CONFIG_ORINOCO_USB is not set +CONFIG_P54_COMMON=m +CONFIG_P54_USB=m +CONFIG_P54_PCI=m +CONFIG_P54_SPI=m +# CONFIG_P54_SPI_DEFAULT_EEPROM is not set +CONFIG_P54_LEDS=y +CONFIG_RT2X00=m +CONFIG_RT2400PCI=m +CONFIG_RT2500PCI=m +CONFIG_RT61PCI=m +CONFIG_RT2800PCI_PCI=y +CONFIG_RT2800PCI=m +CONFIG_RT2800PCI_RT30XX=y +CONFIG_RT2800PCI_RT35XX=y +# CONFIG_RT2500USB is not set +# CONFIG_RT73USB is not set +# CONFIG_RT2800USB is not set +CONFIG_RT2800_LIB=m +CONFIG_RT2X00_LIB_PCI=m +CONFIG_RT2X00_LIB=m +CONFIG_RT2X00_LIB_HT=y +CONFIG_RT2X00_LIB_FIRMWARE=y +CONFIG_RT2X00_LIB_CRYPTO=y +CONFIG_RT2X00_LIB_LEDS=y +# CONFIG_RT2X00_DEBUG is not set +CONFIG_WL1251=m +CONFIG_WL1251_SPI=m +# CONFIG_WL1251_SDIO is not set +CONFIG_WL12XX=m +CONFIG_WL1271=m +# CONFIG_WL1271_SPI is not set +# CONFIG_WL1271_SDIO is not set +CONFIG_ZD1211RW=m +# CONFIG_ZD1211RW_DEBUG is not set + +# +# WiMAX Wireless Broadband devices +# +CONFIG_WIMAX_I2400M=m +CONFIG_WIMAX_I2400M_USB=m +# CONFIG_WIMAX_I2400M_SDIO is not set +CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8 + +# +# USB Network Adapters +# +CONFIG_USB_CATC=m +CONFIG_USB_KAWETH=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +CONFIG_USB_USBNET=m +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_CDCETHER=m +CONFIG_USB_NET_CDC_EEM=m +CONFIG_USB_NET_DM9601=m +CONFIG_USB_NET_SMSC75XX=m +CONFIG_USB_NET_SMSC95XX=m +CONFIG_USB_NET_GL620A=m +CONFIG_USB_NET_NET1080=m +CONFIG_USB_NET_PLUSB=m +CONFIG_USB_NET_MCS7830=m +CONFIG_USB_NET_RNDIS_HOST=m +CONFIG_USB_NET_CDC_SUBSET=m +CONFIG_USB_ALI_M5632=y +CONFIG_USB_AN2720=y +CONFIG_USB_BELKIN=y +CONFIG_USB_ARMLINUX=y +CONFIG_USB_EPSON2888=y +CONFIG_USB_KC2190=y +CONFIG_USB_NET_ZAURUS=m +# CONFIG_USB_NET_CX82310_ETH is not set +CONFIG_USB_HSO=m +CONFIG_USB_NET_INT51X1=m +CONFIG_USB_CDC_PHONET=m +CONFIG_USB_IPHETH=m +CONFIG_USB_SIERRA_NET=m +CONFIG_WAN=y +CONFIG_HOSTESS_SV11=m +CONFIG_COSA=m +CONFIG_LANMEDIA=m +CONFIG_SEALEVEL_4021=m +CONFIG_HDLC=m +CONFIG_HDLC_RAW=m +CONFIG_HDLC_RAW_ETH=m +CONFIG_HDLC_CISCO=m +CONFIG_HDLC_FR=m +CONFIG_HDLC_PPP=m + +# +# X.25/LAPB support is disabled +# +CONFIG_PCI200SYN=m +CONFIG_WANXL=m +CONFIG_PC300TOO=m +CONFIG_N2=m +CONFIG_C101=m +CONFIG_FARSYNC=m +CONFIG_DSCC4=m +CONFIG_DSCC4_PCISYNC=y +CONFIG_DSCC4_PCI_RST=y +CONFIG_DLCI=m +CONFIG_DLCI_MAX=8 +CONFIG_SDLA=m +CONFIG_SBNI=m +CONFIG_SBNI_MULTILINE=y + +# +# CAIF transport drivers +# +CONFIG_FDDI=m +CONFIG_DEFXX=m +# CONFIG_DEFXX_MMIO is not set +CONFIG_SKFP=m +CONFIG_HIPPI=y +CONFIG_ROADRUNNER=m +CONFIG_ROADRUNNER_LARGE_RINGS=y +CONFIG_PLIP=m +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_MPPE=m +CONFIG_PPPOE=m +CONFIG_SLIP=m +CONFIG_SLIP_COMPRESSED=y +CONFIG_SLHC=m +CONFIG_SLIP_SMART=y +CONFIG_SLIP_MODE_SLIP6=y +CONFIG_NET_FC=y +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VIRTIO_NET is not set +CONFIG_VMXNET3=m +CONFIG_ISDN=y +CONFIG_ISDN_I4L=m +# CONFIG_ISDN_PPP is not set +# CONFIG_ISDN_AUDIO is not set + +# +# ISDN feature submodules +# +# CONFIG_ISDN_DRV_LOOP is not set +# CONFIG_ISDN_DIVERSION is not set + +# +# ISDN4Linux hardware drivers +# + +# +# Passive cards +# +# CONFIG_ISDN_DRV_HISAX is not set + +# +# Active cards +# +# CONFIG_ISDN_DRV_ICN is not set +# CONFIG_ISDN_DRV_PCBIT is not set +# CONFIG_ISDN_DRV_SC is not set +# CONFIG_ISDN_DRV_ACT2000 is not set +CONFIG_ISDN_CAPI=m +CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y +CONFIG_CAPI_TRACE=y +CONFIG_ISDN_CAPI_MIDDLEWARE=y +CONFIG_ISDN_CAPI_CAPI20=m +CONFIG_ISDN_CAPI_CAPIFS_BOOL=y +CONFIG_ISDN_CAPI_CAPIFS=m +CONFIG_ISDN_CAPI_CAPIDRV=m + +# +# CAPI hardware drivers +# +CONFIG_CAPI_AVM=y +CONFIG_ISDN_DRV_AVMB1_B1ISA=m +CONFIG_ISDN_DRV_AVMB1_B1PCI=m +CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y +CONFIG_ISDN_DRV_AVMB1_T1ISA=m +CONFIG_ISDN_DRV_AVMB1_T1PCI=m +CONFIG_ISDN_DRV_AVMB1_C4=m +CONFIG_CAPI_EICON=y +CONFIG_ISDN_DIVAS=m +CONFIG_ISDN_DIVAS_BRIPCI=y +CONFIG_ISDN_DIVAS_PRIPCI=y +CONFIG_ISDN_DIVAS_DIVACAPI=m +CONFIG_ISDN_DIVAS_USERIDI=m +CONFIG_ISDN_DIVAS_MAINT=m +CONFIG_ISDN_DRV_GIGASET=m +CONFIG_GIGASET_CAPI=y +# CONFIG_GIGASET_I4L is not set +# CONFIG_GIGASET_DUMMYLL is not set +CONFIG_GIGASET_BASE=m +CONFIG_GIGASET_M105=m +CONFIG_GIGASET_M101=m +# CONFIG_GIGASET_DEBUG is not set +CONFIG_HYSDN=m +CONFIG_HYSDN_CAPI=y +CONFIG_MISDN=m +CONFIG_MISDN_DSP=m +CONFIG_MISDN_L1OIP=m + +# +# mISDN hardware drivers +# +CONFIG_MISDN_HFCPCI=m +CONFIG_MISDN_HFCMULTI=m +CONFIG_MISDN_HFCUSB=m +CONFIG_MISDN_AVMFRITZ=m +CONFIG_MISDN_SPEEDFAX=m +CONFIG_MISDN_INFINEON=m +CONFIG_MISDN_W6692=m +CONFIG_MISDN_NETJET=m +CONFIG_MISDN_IPAC=m +CONFIG_MISDN_ISAR=m +CONFIG_ISDN_HDLC=m +CONFIG_PHONE=m +CONFIG_PHONE_IXJ=m + +# +# Input device support +# +CONFIG_INPUT=y +CONFIG_INPUT_FF_MEMLESS=m +CONFIG_INPUT_POLLDEV=m +CONFIG_INPUT_SPARSEKMAP=m + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=m +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +CONFIG_INPUT_JOYDEV=m +CONFIG_INPUT_EVDEV=m +CONFIG_INPUT_EVBUG=m + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ADP5588=m +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_QT2160 is not set +CONFIG_KEYBOARD_LKKBD=m +CONFIG_KEYBOARD_GPIO=m +# CONFIG_KEYBOARD_GPIO_POLLED is not set +# CONFIG_KEYBOARD_TCA6416 is not set +CONFIG_KEYBOARD_MATRIX=m +CONFIG_KEYBOARD_LM8323=m +CONFIG_KEYBOARD_MAX7359=m +# CONFIG_KEYBOARD_MCS is not set +CONFIG_KEYBOARD_NEWTON=m +CONFIG_KEYBOARD_OPENCORES=m +CONFIG_KEYBOARD_STOWAWAY=m +CONFIG_KEYBOARD_SUNKBD=m +CONFIG_KEYBOARD_XTKBD=m +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=m +CONFIG_MOUSE_PS2_ALPS=y +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +CONFIG_MOUSE_PS2_TRACKPOINT=y +CONFIG_MOUSE_PS2_ELANTECH=y +CONFIG_MOUSE_PS2_SENTELIC=y +CONFIG_MOUSE_PS2_TOUCHKIT=y +CONFIG_MOUSE_SERIAL=m +CONFIG_MOUSE_APPLETOUCH=m +CONFIG_MOUSE_BCM5974=m +CONFIG_MOUSE_INPORT=m +CONFIG_MOUSE_ATIXL=y +CONFIG_MOUSE_LOGIBM=m +CONFIG_MOUSE_PC110PAD=m +CONFIG_MOUSE_VSXXXAA=m +CONFIG_MOUSE_GPIO=m +CONFIG_MOUSE_SYNAPTICS_I2C=m +CONFIG_INPUT_JOYSTICK=y +CONFIG_JOYSTICK_ANALOG=m +CONFIG_JOYSTICK_A3D=m +CONFIG_JOYSTICK_ADI=m +CONFIG_JOYSTICK_COBRA=m +CONFIG_JOYSTICK_GF2K=m +CONFIG_JOYSTICK_GRIP=m +CONFIG_JOYSTICK_GRIP_MP=m +CONFIG_JOYSTICK_GUILLEMOT=m +CONFIG_JOYSTICK_INTERACT=m +CONFIG_JOYSTICK_SIDEWINDER=m +CONFIG_JOYSTICK_TMDC=m +CONFIG_JOYSTICK_IFORCE=m +CONFIG_JOYSTICK_IFORCE_USB=y +CONFIG_JOYSTICK_IFORCE_232=y +CONFIG_JOYSTICK_WARRIOR=m +CONFIG_JOYSTICK_MAGELLAN=m +CONFIG_JOYSTICK_SPACEORB=m +CONFIG_JOYSTICK_SPACEBALL=m +CONFIG_JOYSTICK_STINGER=m +CONFIG_JOYSTICK_TWIDJOY=m +CONFIG_JOYSTICK_ZHENHUA=m +CONFIG_JOYSTICK_DB9=m +CONFIG_JOYSTICK_GAMECON=m +CONFIG_JOYSTICK_TURBOGRAFX=m +CONFIG_JOYSTICK_JOYDUMP=m +CONFIG_JOYSTICK_XPAD=m +CONFIG_JOYSTICK_XPAD_FF=y +CONFIG_JOYSTICK_XPAD_LEDS=y +CONFIG_INPUT_TABLET=y +CONFIG_TABLET_USB_ACECAD=m +CONFIG_TABLET_USB_AIPTEK=m +CONFIG_TABLET_USB_GTCO=m +# CONFIG_TABLET_USB_HANWANG is not set +CONFIG_TABLET_USB_KBTAB=m +CONFIG_TABLET_USB_WACOM=m +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_ADS7846=m +CONFIG_TOUCHSCREEN_AD7877=m +CONFIG_TOUCHSCREEN_AD7879=m +CONFIG_TOUCHSCREEN_AD7879_I2C=m +# CONFIG_TOUCHSCREEN_AD7879_SPI is not set +# CONFIG_TOUCHSCREEN_BU21013 is not set +# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set +CONFIG_TOUCHSCREEN_DYNAPRO=m +# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set +CONFIG_TOUCHSCREEN_EETI=m +CONFIG_TOUCHSCREEN_FUJITSU=m +CONFIG_TOUCHSCREEN_GUNZE=m +CONFIG_TOUCHSCREEN_ELO=m +CONFIG_TOUCHSCREEN_WACOM_W8001=m +CONFIG_TOUCHSCREEN_MCS5000=m +CONFIG_TOUCHSCREEN_MTOUCH=m +CONFIG_TOUCHSCREEN_INEXIO=m +CONFIG_TOUCHSCREEN_MK712=m +CONFIG_TOUCHSCREEN_HTCPEN=m +CONFIG_TOUCHSCREEN_PENMOUNT=m +# CONFIG_TOUCHSCREEN_QT602240 is not set +CONFIG_TOUCHSCREEN_TOUCHRIGHT=m +CONFIG_TOUCHSCREEN_TOUCHWIN=m +# CONFIG_TOUCHSCREEN_UCB1400 is not set +CONFIG_TOUCHSCREEN_WM97XX=m +CONFIG_TOUCHSCREEN_WM9705=y +CONFIG_TOUCHSCREEN_WM9712=y +CONFIG_TOUCHSCREEN_WM9713=y +CONFIG_TOUCHSCREEN_USB_COMPOSITE=m +CONFIG_TOUCHSCREEN_USB_EGALAX=y +CONFIG_TOUCHSCREEN_USB_PANJIT=y +CONFIG_TOUCHSCREEN_USB_3M=y +CONFIG_TOUCHSCREEN_USB_ITM=y +CONFIG_TOUCHSCREEN_USB_ETURBO=y +CONFIG_TOUCHSCREEN_USB_GUNZE=y +CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y +CONFIG_TOUCHSCREEN_USB_IRTOUCH=y +CONFIG_TOUCHSCREEN_USB_IDEALTEK=y +CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y +CONFIG_TOUCHSCREEN_USB_GOTOP=y +CONFIG_TOUCHSCREEN_USB_JASTEC=y +CONFIG_TOUCHSCREEN_USB_E2I=y +CONFIG_TOUCHSCREEN_USB_ZYTRONIC=y +CONFIG_TOUCHSCREEN_USB_ETT_TC45USB=y +CONFIG_TOUCHSCREEN_USB_NEXIO=y +CONFIG_TOUCHSCREEN_TOUCHIT213=m +CONFIG_TOUCHSCREEN_TSC2007=m +CONFIG_TOUCHSCREEN_PCAP=m +# CONFIG_TOUCHSCREEN_TPS6507X is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_AD714X is not set +CONFIG_INPUT_PCSPKR=m +CONFIG_INPUT_APANEL=m +CONFIG_INPUT_WISTRON_BTNS=m +CONFIG_INPUT_ATI_REMOTE=m +CONFIG_INPUT_ATI_REMOTE2=m +CONFIG_INPUT_KEYSPAN_REMOTE=m +CONFIG_INPUT_POWERMATE=m +CONFIG_INPUT_YEALINK=m +CONFIG_INPUT_CM109=m +CONFIG_INPUT_UINPUT=m +CONFIG_INPUT_WINBOND_CIR=m +CONFIG_INPUT_PCF50633_PMU=m +# CONFIG_INPUT_PCF8574 is not set +CONFIG_INPUT_GPIO_ROTARY_ENCODER=m +CONFIG_INPUT_PCAP=m +# CONFIG_INPUT_ADXL34X is not set + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +CONFIG_SERIO_SERPORT=m +CONFIG_SERIO_CT82C710=m +CONFIG_SERIO_PARKBD=m +CONFIG_SERIO_PCIPS2=m +CONFIG_SERIO_LIBPS2=y +CONFIG_SERIO_RAW=m +CONFIG_SERIO_ALTERA_PS2=m +# CONFIG_SERIO_PS2MULT is not set +CONFIG_GAMEPORT=m +CONFIG_GAMEPORT_NS558=m +CONFIG_GAMEPORT_L4=m +CONFIG_GAMEPORT_EMU10K1=m +CONFIG_GAMEPORT_FM801=m + +# +# Character devices +# +CONFIG_VT=y +CONFIG_CONSOLE_TRANSLATIONS=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_DEVKMEM is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_N_GSM is not set +CONFIG_NOZOMI=m + +# +# Serial drivers +# +CONFIG_SERIAL_8250=m +CONFIG_FIX_EARLYCON_MEM=y +CONFIG_SERIAL_8250_PCI=m +CONFIG_SERIAL_8250_PNP=m +CONFIG_SERIAL_8250_NR_UARTS=2 +CONFIG_SERIAL_8250_RUNTIME_UARTS=2 +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_MANY_PORTS=y +CONFIG_SERIAL_8250_FOURPORT=m +CONFIG_SERIAL_8250_ACCENT=m +CONFIG_SERIAL_8250_BOCA=m +CONFIG_SERIAL_8250_EXAR_ST16C554=m +CONFIG_SERIAL_8250_HUB6=m +CONFIG_SERIAL_8250_SHARE_IRQ=y +CONFIG_SERIAL_8250_DETECT_IRQ=y +CONFIG_SERIAL_8250_RSA=y + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_MAX3100=m +# CONFIG_SERIAL_MAX3107 is not set +# CONFIG_SERIAL_MRST_MAX3110 is not set +# CONFIG_SERIAL_MFD_HSU is not set +CONFIG_SERIAL_UARTLITE=m +CONFIG_SERIAL_CORE=m +CONFIG_SERIAL_JSM=m +CONFIG_SERIAL_TIMBERDALE=m +# CONFIG_SERIAL_ALTERA_JTAGUART is not set +# CONFIG_SERIAL_ALTERA_UART is not set +CONFIG_UNIX98_PTYS=y +# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set +# CONFIG_LEGACY_PTYS is not set +# CONFIG_TTY_PRINTK is not set +CONFIG_PRINTER=m +CONFIG_LP_CONSOLE=y +CONFIG_PPDEV=m +CONFIG_HVC_DRIVER=y +# CONFIG_VIRTIO_CONSOLE is not set +CONFIG_IPMI_HANDLER=m +# CONFIG_IPMI_PANIC_EVENT is not set +CONFIG_IPMI_DEVICE_INTERFACE=m +CONFIG_IPMI_SI=m +CONFIG_IPMI_WATCHDOG=m +CONFIG_IPMI_POWEROFF=m +CONFIG_HW_RANDOM=m +CONFIG_HW_RANDOM_TIMERIOMEM=m +CONFIG_HW_RANDOM_INTEL=m +CONFIG_HW_RANDOM_AMD=m +CONFIG_HW_RANDOM_GEODE=m +CONFIG_HW_RANDOM_VIA=m +# CONFIG_HW_RANDOM_VIRTIO is not set +CONFIG_NVRAM=m +CONFIG_DTLK=m +CONFIG_R3964=m +CONFIG_APPLICOM=m +CONFIG_SONYPI=m +CONFIG_MWAVE=m +CONFIG_PC8736x_GPIO=m +CONFIG_NSC_GPIO=m +CONFIG_CS5535_GPIO=m +CONFIG_RAW_DRIVER=m +CONFIG_MAX_RAW_DEVS=256 +CONFIG_HANGCHECK_TIMER=m +CONFIG_TCG_TPM=m +CONFIG_TCG_TIS=m +CONFIG_TCG_NSC=m +CONFIG_TCG_ATMEL=m +CONFIG_TCG_INFINEON=m +CONFIG_TELCLOCK=m +CONFIG_DEVPORT=y +# CONFIG_RAMOOPS is not set +CONFIG_I2C=m +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_COMPAT=y +CONFIG_I2C_CHARDEV=m +# CONFIG_I2C_MUX is not set +CONFIG_I2C_HELPER_AUTO=y +CONFIG_I2C_SMBUS=m +CONFIG_I2C_ALGOBIT=m +CONFIG_I2C_ALGOPCF=m +CONFIG_I2C_ALGOPCA=m + +# +# I2C Hardware Bus support +# + +# +# PC SMBus host controller drivers +# +CONFIG_I2C_ALI1535=m +CONFIG_I2C_ALI1563=m +CONFIG_I2C_ALI15X3=m +CONFIG_I2C_AMD756=m +CONFIG_I2C_AMD756_S4882=m +CONFIG_I2C_AMD8111=m +CONFIG_I2C_I801=m +CONFIG_I2C_ISCH=m +CONFIG_I2C_PIIX4=m +CONFIG_I2C_NFORCE2=m +CONFIG_I2C_NFORCE2_S4985=m +CONFIG_I2C_SIS5595=m +CONFIG_I2C_SIS630=m +CONFIG_I2C_SIS96X=m +CONFIG_I2C_VIA=m +CONFIG_I2C_VIAPRO=m + +# +# I2C system bus drivers (mostly embedded / system-on-chip) +# +# CONFIG_I2C_GPIO is not set +# CONFIG_I2C_INTEL_MID is not set +CONFIG_I2C_OCORES=m +CONFIG_I2C_PCA_PLATFORM=m +CONFIG_I2C_SIMTEC=m +CONFIG_I2C_XILINX=m + +# +# External I2C/SMBus adapter drivers +# +CONFIG_I2C_PARPORT=m +# CONFIG_I2C_PARPORT_LIGHT is not set +CONFIG_I2C_TAOS_EVM=m +# CONFIG_I2C_TINY_USB is not set + +# +# Other I2C/SMBus bus drivers +# +CONFIG_I2C_ELEKTOR=m +CONFIG_I2C_PCA_ISA=m +CONFIG_I2C_STUB=m +CONFIG_SCx200_ACB=m +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +CONFIG_SPI=y +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +CONFIG_SPI_BITBANG=m +CONFIG_SPI_BUTTERFLY=m +# CONFIG_SPI_GPIO is not set +CONFIG_SPI_LM70_LLP=m +# CONFIG_SPI_TOPCLIFF_PCH is not set +CONFIG_SPI_XILINX=m +CONFIG_SPI_XILINX_PLTFM=m +CONFIG_SPI_DESIGNWARE=m +CONFIG_SPI_DW_PCI=m + +# +# SPI Protocol Masters +# +CONFIG_SPI_SPIDEV=m +# CONFIG_SPI_TLE62X0 is not set + +# +# PPS support +# +CONFIG_PPS=m +# CONFIG_PPS_DEBUG is not set + +# +# PPS clients support +# +CONFIG_PPS_CLIENT_KTIMER=m +CONFIG_PPS_CLIENT_LDISC=m +CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y +CONFIG_GPIOLIB=y +# CONFIG_GPIO_SYSFS is not set +CONFIG_GPIO_MAX730X=m + +# +# Memory mapped GPIO expanders: +# +# CONFIG_GPIO_BASIC_MMIO is not set +CONFIG_GPIO_IT8761E=m +CONFIG_GPIO_SCH=m +# CONFIG_GPIO_VX855 is not set + +# +# I2C GPIO expanders: +# +CONFIG_GPIO_MAX7300=m +CONFIG_GPIO_MAX732X=m +CONFIG_GPIO_PCA953X=m +CONFIG_GPIO_PCF857X=m +CONFIG_GPIO_ADP5588=m + +# +# PCI GPIO expanders: +# +CONFIG_GPIO_CS5535=m +CONFIG_GPIO_LANGWELL=y +# CONFIG_GPIO_PCH is not set +CONFIG_GPIO_TIMBERDALE=y +# CONFIG_GPIO_RDC321X is not set + +# +# SPI GPIO expanders: +# +CONFIG_GPIO_MAX7301=m +CONFIG_GPIO_MCP23S08=m +CONFIG_GPIO_MC33880=m +# CONFIG_GPIO_74X164 is not set + +# +# AC97 GPIO expanders: +# +# CONFIG_GPIO_UCB1400 is not set + +# +# MODULbus GPIO expanders: +# +CONFIG_W1=m +CONFIG_W1_CON=y + +# +# 1-wire Bus Masters +# +CONFIG_W1_MASTER_MATROX=m +CONFIG_W1_MASTER_DS2490=m +CONFIG_W1_MASTER_DS2482=m +CONFIG_W1_MASTER_GPIO=m + +# +# 1-wire Slaves +# +CONFIG_W1_SLAVE_THERM=m +CONFIG_W1_SLAVE_SMEM=m +CONFIG_W1_SLAVE_DS2431=m +CONFIG_W1_SLAVE_DS2433=m +CONFIG_W1_SLAVE_DS2433_CRC=y +CONFIG_W1_SLAVE_DS2760=m +CONFIG_W1_SLAVE_BQ27000=m +CONFIG_POWER_SUPPLY=m +# CONFIG_POWER_SUPPLY_DEBUG is not set +CONFIG_PDA_POWER=m +# CONFIG_TEST_POWER is not set +CONFIG_BATTERY_DS2760=m +CONFIG_BATTERY_DS2782=m +# CONFIG_BATTERY_BQ20Z75 is not set +CONFIG_BATTERY_BQ27x00=m +CONFIG_BATTERY_MAX17040=m +CONFIG_CHARGER_PCF50633=m +# CONFIG_CHARGER_ISP1704 is not set +CONFIG_HWMON=m +CONFIG_HWMON_VID=m +# CONFIG_HWMON_DEBUG_CHIP is not set + +# +# Native drivers +# +CONFIG_SENSORS_ABITUGURU=m +CONFIG_SENSORS_ABITUGURU3=m +CONFIG_SENSORS_AD7414=m +CONFIG_SENSORS_AD7418=m +CONFIG_SENSORS_ADCXX=m +CONFIG_SENSORS_ADM1021=m +CONFIG_SENSORS_ADM1025=m +CONFIG_SENSORS_ADM1026=m +CONFIG_SENSORS_ADM1029=m +CONFIG_SENSORS_ADM1031=m +CONFIG_SENSORS_ADM9240=m +CONFIG_SENSORS_ADT7411=m +CONFIG_SENSORS_ADT7462=m +CONFIG_SENSORS_ADT7470=m +CONFIG_SENSORS_ADT7475=m +CONFIG_SENSORS_ASC7621=m +CONFIG_SENSORS_K8TEMP=m +CONFIG_SENSORS_K10TEMP=m +CONFIG_SENSORS_ASB100=m +CONFIG_SENSORS_ATXP1=m +CONFIG_SENSORS_DS1621=m +CONFIG_SENSORS_I5K_AMB=m +CONFIG_SENSORS_F71805F=m +CONFIG_SENSORS_F71882FG=m +CONFIG_SENSORS_F75375S=m +CONFIG_SENSORS_FSCHMD=m +CONFIG_SENSORS_G760A=m +CONFIG_SENSORS_GL518SM=m +CONFIG_SENSORS_GL520SM=m +# CONFIG_SENSORS_GPIO_FAN is not set +CONFIG_SENSORS_CORETEMP=m +# CONFIG_SENSORS_PKGTEMP is not set +CONFIG_SENSORS_IBMAEM=m +CONFIG_SENSORS_IBMPEX=m +CONFIG_SENSORS_IT87=m +# CONFIG_SENSORS_JC42 is not set +CONFIG_SENSORS_LM63=m +CONFIG_SENSORS_LM70=m +CONFIG_SENSORS_LM73=m +CONFIG_SENSORS_LM75=m +CONFIG_SENSORS_LM77=m +CONFIG_SENSORS_LM78=m +CONFIG_SENSORS_LM80=m +CONFIG_SENSORS_LM83=m +CONFIG_SENSORS_LM85=m +CONFIG_SENSORS_LM87=m +CONFIG_SENSORS_LM90=m +CONFIG_SENSORS_LM92=m +CONFIG_SENSORS_LM93=m +CONFIG_SENSORS_LTC4215=m +CONFIG_SENSORS_LTC4245=m +# CONFIG_SENSORS_LTC4261 is not set +CONFIG_SENSORS_LM95241=m +CONFIG_SENSORS_MAX1111=m +CONFIG_SENSORS_MAX1619=m +CONFIG_SENSORS_MAX6650=m +CONFIG_SENSORS_PC87360=m +CONFIG_SENSORS_PC87427=m +CONFIG_SENSORS_PCF8591=m +CONFIG_SENSORS_SHT15=m +CONFIG_SENSORS_SIS5595=m +# CONFIG_SENSORS_SMM665 is not set +CONFIG_SENSORS_DME1737=m +# CONFIG_SENSORS_EMC1403 is not set +# CONFIG_SENSORS_EMC2103 is not set +CONFIG_SENSORS_SMSC47M1=m +CONFIG_SENSORS_SMSC47M192=m +CONFIG_SENSORS_SMSC47B397=m +CONFIG_SENSORS_ADS7828=m +# CONFIG_SENSORS_ADS7871 is not set +CONFIG_SENSORS_AMC6821=m +CONFIG_SENSORS_THMC50=m +# CONFIG_SENSORS_TMP102 is not set +CONFIG_SENSORS_TMP401=m +CONFIG_SENSORS_TMP421=m +CONFIG_SENSORS_VIA_CPUTEMP=m +CONFIG_SENSORS_VIA686A=m +CONFIG_SENSORS_VT1211=m +CONFIG_SENSORS_VT8231=m +CONFIG_SENSORS_W83781D=m +CONFIG_SENSORS_W83791D=m +CONFIG_SENSORS_W83792D=m +CONFIG_SENSORS_W83793=m +# CONFIG_SENSORS_W83795 is not set +CONFIG_SENSORS_W83L785TS=m +CONFIG_SENSORS_W83L786NG=m +CONFIG_SENSORS_W83627HF=m +CONFIG_SENSORS_W83627EHF=m +CONFIG_SENSORS_LIS3_SPI=m +CONFIG_SENSORS_LIS3_I2C=m +CONFIG_SENSORS_APPLESMC=m +CONFIG_THERMAL=m +CONFIG_THERMAL_HWMON=y +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +CONFIG_SOFT_WATCHDOG=m +CONFIG_ACQUIRE_WDT=m +CONFIG_ADVANTECH_WDT=m +CONFIG_ALIM1535_WDT=m +CONFIG_ALIM7101_WDT=m +# CONFIG_F71808E_WDT is not set +CONFIG_GEODE_WDT=m +CONFIG_SC520_WDT=m +CONFIG_SBC_FITPC2_WATCHDOG=m +CONFIG_EUROTECH_WDT=m +CONFIG_IB700_WDT=m +CONFIG_IBMASR=m +CONFIG_WAFER_WDT=m +CONFIG_I6300ESB_WDT=m +CONFIG_ITCO_WDT=m +CONFIG_ITCO_VENDOR_SUPPORT=y +CONFIG_IT8712F_WDT=m +CONFIG_IT87_WDT=m +CONFIG_HP_WATCHDOG=m +# CONFIG_HPWDT_NMI_DECODING is not set +CONFIG_SC1200_WDT=m +CONFIG_PC87413_WDT=m +CONFIG_60XX_WDT=m +CONFIG_SBC8360_WDT=m +CONFIG_SBC7240_WDT=m +CONFIG_CPU5_WDT=m +CONFIG_SMSC_SCH311X_WDT=m +CONFIG_SMSC37B787_WDT=m +CONFIG_W83627HF_WDT=m +CONFIG_W83697HF_WDT=m +CONFIG_W83697UG_WDT=m +CONFIG_W83877F_WDT=m +CONFIG_W83977F_WDT=m +CONFIG_MACHZ_WDT=m +CONFIG_SBC_EPX_C3_WATCHDOG=m + +# +# ISA-based Watchdog Cards +# +CONFIG_PCWATCHDOG=m +CONFIG_MIXCOMWD=m +CONFIG_WDT=m + +# +# PCI-based Watchdog Cards +# +CONFIG_PCIPCWATCHDOG=m +CONFIG_WDTPCI=m + +# +# USB-based Watchdog Cards +# +CONFIG_USBPCWATCHDOG=m +CONFIG_SSB_POSSIBLE=y + +# +# Sonics Silicon Backplane +# +CONFIG_SSB=m +CONFIG_SSB_SPROM=y +CONFIG_SSB_BLOCKIO=y +CONFIG_SSB_PCIHOST_POSSIBLE=y +CONFIG_SSB_PCIHOST=y +CONFIG_SSB_B43_PCI_BRIDGE=y +CONFIG_SSB_SDIOHOST_POSSIBLE=y +# CONFIG_SSB_SDIOHOST is not set +# CONFIG_SSB_SILENT is not set +# CONFIG_SSB_DEBUG is not set +CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y +CONFIG_SSB_DRIVER_PCICORE=y +CONFIG_MFD_SUPPORT=y +CONFIG_MFD_CORE=m +CONFIG_MFD_SM501=m +CONFIG_MFD_SM501_GPIO=y +CONFIG_HTC_PASIC3=m +CONFIG_UCB1400_CORE=m +CONFIG_TPS65010=m +# CONFIG_TPS6507X is not set +# CONFIG_MFD_TMIO is not set +CONFIG_MFD_WM8400=m +# CONFIG_MFD_WM831X_SPI is not set +CONFIG_MFD_PCF50633=m +# CONFIG_MFD_MC13XXX is not set +CONFIG_PCF50633_ADC=m +CONFIG_PCF50633_GPIO=m +# CONFIG_ABX500_CORE is not set +CONFIG_EZX_PCAP=y +CONFIG_MFD_TIMBERDALE=m +CONFIG_LPC_SCH=m +# CONFIG_MFD_RDC321X is not set +# CONFIG_MFD_JANZ_CMODIO is not set +# CONFIG_MFD_VX855 is not set +CONFIG_REGULATOR=y +# CONFIG_REGULATOR_DEBUG is not set +# CONFIG_REGULATOR_DUMMY is not set +CONFIG_REGULATOR_FIXED_VOLTAGE=m +CONFIG_REGULATOR_VIRTUAL_CONSUMER=m +CONFIG_REGULATOR_USERSPACE_CONSUMER=m +CONFIG_REGULATOR_BQ24022=m +CONFIG_REGULATOR_MAX1586=m +CONFIG_REGULATOR_MAX8649=m +CONFIG_REGULATOR_MAX8660=m +# CONFIG_REGULATOR_MAX8952 is not set +CONFIG_REGULATOR_WM8400=m +CONFIG_REGULATOR_PCF50633=m +CONFIG_REGULATOR_LP3971=m +# CONFIG_REGULATOR_LP3972 is not set +CONFIG_REGULATOR_PCAP=m +CONFIG_REGULATOR_TPS65023=m +CONFIG_REGULATOR_TPS6507X=m +# CONFIG_REGULATOR_ISL6271A is not set +# CONFIG_REGULATOR_AD5398 is not set +CONFIG_MEDIA_SUPPORT=m + +# +# Multimedia core support +# +CONFIG_VIDEO_DEV=m +CONFIG_VIDEO_V4L2_COMMON=m +CONFIG_VIDEO_ALLOW_V4L1=y +CONFIG_VIDEO_V4L1_COMPAT=y +CONFIG_DVB_CORE=m +CONFIG_VIDEO_MEDIA=m + +# +# Multimedia drivers +# +CONFIG_VIDEO_SAA7146=m +CONFIG_VIDEO_SAA7146_VV=m +CONFIG_IR_CORE=m +CONFIG_VIDEO_IR=m +CONFIG_LIRC=m +CONFIG_RC_MAP=m +CONFIG_IR_NEC_DECODER=m +CONFIG_IR_RC5_DECODER=m +CONFIG_IR_RC6_DECODER=m +CONFIG_IR_JVC_DECODER=m +CONFIG_IR_SONY_DECODER=m +CONFIG_IR_RC5_SZ_DECODER=m +CONFIG_IR_LIRC_CODEC=m +# CONFIG_IR_ENE is not set +# CONFIG_IR_IMON is not set +# CONFIG_IR_MCEUSB is not set +# CONFIG_IR_NUVOTON is not set +# CONFIG_IR_STREAMZAP is not set +CONFIG_MEDIA_ATTACH=y +CONFIG_MEDIA_TUNER=m +CONFIG_MEDIA_TUNER_CUSTOMISE=y + +# +# Customize TV tuners +# +CONFIG_MEDIA_TUNER_SIMPLE=m +CONFIG_MEDIA_TUNER_TDA8290=m +CONFIG_MEDIA_TUNER_TDA827X=m +CONFIG_MEDIA_TUNER_TDA18271=m +CONFIG_MEDIA_TUNER_TDA9887=m +CONFIG_MEDIA_TUNER_TEA5761=m +CONFIG_MEDIA_TUNER_TEA5767=m +CONFIG_MEDIA_TUNER_MT20XX=m +CONFIG_MEDIA_TUNER_MT2060=m +CONFIG_MEDIA_TUNER_MT2266=m +CONFIG_MEDIA_TUNER_MT2131=m +CONFIG_MEDIA_TUNER_QT1010=m +CONFIG_MEDIA_TUNER_XC2028=m +CONFIG_MEDIA_TUNER_XC5000=m +CONFIG_MEDIA_TUNER_MXL5005S=m +CONFIG_MEDIA_TUNER_MXL5007T=m +CONFIG_MEDIA_TUNER_MC44S803=m +CONFIG_MEDIA_TUNER_MAX2165=m +CONFIG_MEDIA_TUNER_TDA18218=m +CONFIG_VIDEO_V4L2=m +CONFIG_VIDEO_V4L1=m +CONFIG_VIDEOBUF_GEN=m +CONFIG_VIDEOBUF_DMA_SG=m +CONFIG_VIDEOBUF_VMALLOC=m +CONFIG_VIDEOBUF_DVB=m +CONFIG_VIDEO_BTCX=m +CONFIG_VIDEO_TVEEPROM=m +CONFIG_VIDEO_TUNER=m +CONFIG_VIDEO_CAPTURE_DRIVERS=y +# CONFIG_VIDEO_ADV_DEBUG is not set +# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set +CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +CONFIG_VIDEO_IR_I2C=m + +# +# Audio decoders +# +CONFIG_VIDEO_TVAUDIO=m +CONFIG_VIDEO_TDA7432=m +CONFIG_VIDEO_TDA9840=m +CONFIG_VIDEO_TEA6415C=m +CONFIG_VIDEO_TEA6420=m +CONFIG_VIDEO_MSP3400=m +CONFIG_VIDEO_CS5345=m +CONFIG_VIDEO_CS53L32A=m +CONFIG_VIDEO_M52790=m +CONFIG_VIDEO_WM8775=m +CONFIG_VIDEO_WM8739=m +CONFIG_VIDEO_VP27SMPX=m + +# +# RDS decoders +# +CONFIG_VIDEO_SAA6588=m + +# +# Video decoders +# +CONFIG_VIDEO_BT819=m +CONFIG_VIDEO_BT856=m +CONFIG_VIDEO_BT866=m +CONFIG_VIDEO_KS0127=m +CONFIG_VIDEO_OV7670=m +CONFIG_VIDEO_SAA7110=m +CONFIG_VIDEO_SAA711X=m +CONFIG_VIDEO_SAA717X=m +CONFIG_VIDEO_VPX3220=m + +# +# Video and audio decoders +# +CONFIG_VIDEO_CX25840=m + +# +# MPEG video encoders +# +CONFIG_VIDEO_CX2341X=m + +# +# Video encoders +# +CONFIG_VIDEO_SAA7127=m +CONFIG_VIDEO_SAA7185=m +CONFIG_VIDEO_ADV7170=m +CONFIG_VIDEO_ADV7175=m + +# +# Video improvement chips +# +CONFIG_VIDEO_UPD64031A=m +CONFIG_VIDEO_UPD64083=m +CONFIG_VIDEO_VIVI=m +CONFIG_VIDEO_BT848=m +CONFIG_VIDEO_BT848_DVB=y +CONFIG_VIDEO_PMS=m +CONFIG_VIDEO_BWQCAM=m +CONFIG_VIDEO_CQCAM=m +CONFIG_VIDEO_W9966=m +# CONFIG_VIDEO_CPIA2 is not set +CONFIG_VIDEO_ZORAN=m +CONFIG_VIDEO_ZORAN_DC30=m +CONFIG_VIDEO_ZORAN_ZR36060=m +CONFIG_VIDEO_ZORAN_BUZ=m +CONFIG_VIDEO_ZORAN_DC10=m +CONFIG_VIDEO_ZORAN_LML33=m +CONFIG_VIDEO_ZORAN_LML33R10=m +CONFIG_VIDEO_ZORAN_AVS6EYES=m +CONFIG_VIDEO_SAA7134=m +# CONFIG_VIDEO_SAA7134_ALSA is not set +CONFIG_VIDEO_SAA7134_RC=y +CONFIG_VIDEO_SAA7134_DVB=m +CONFIG_VIDEO_MXB=m +CONFIG_VIDEO_HEXIUM_ORION=m +CONFIG_VIDEO_HEXIUM_GEMINI=m +CONFIG_VIDEO_CX88=m +# CONFIG_VIDEO_CX88_ALSA is not set +CONFIG_VIDEO_CX88_BLACKBIRD=m +CONFIG_VIDEO_CX88_DVB=m +CONFIG_VIDEO_CX88_MPEG=m +CONFIG_VIDEO_CX88_VP3054=m +CONFIG_VIDEO_CX23885=m +# CONFIG_VIDEO_AU0828 is not set +CONFIG_VIDEO_IVTV=m +# CONFIG_VIDEO_FB_IVTV is not set +CONFIG_VIDEO_CX18=m +# CONFIG_VIDEO_CX18_ALSA is not set +CONFIG_VIDEO_SAA7164=m +CONFIG_VIDEO_CAFE_CCIC=m +# CONFIG_VIDEO_SR030PC30 is not set +# CONFIG_VIDEO_VIA_CAMERA is not set +CONFIG_SOC_CAMERA=m +# CONFIG_SOC_CAMERA_IMX074 is not set +# CONFIG_SOC_CAMERA_MT9M001 is not set +# CONFIG_SOC_CAMERA_MT9M111 is not set +# CONFIG_SOC_CAMERA_MT9T031 is not set +# CONFIG_SOC_CAMERA_MT9T112 is not set +# CONFIG_SOC_CAMERA_MT9V022 is not set +# CONFIG_SOC_CAMERA_RJ54N1 is not set +# CONFIG_SOC_CAMERA_TW9910 is not set +# CONFIG_SOC_CAMERA_PLATFORM is not set +# CONFIG_SOC_CAMERA_OV6650 is not set +# CONFIG_SOC_CAMERA_OV772X is not set +# CONFIG_SOC_CAMERA_OV9640 is not set +CONFIG_V4L_USB_DRIVERS=y +# CONFIG_USB_VIDEO_CLASS is not set +CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y +CONFIG_USB_GSPCA=m +# CONFIG_USB_M5602 is not set +# CONFIG_USB_STV06XX is not set +# CONFIG_USB_GL860 is not set +# CONFIG_USB_GSPCA_BENQ is not set +# CONFIG_USB_GSPCA_CONEX is not set +# CONFIG_USB_GSPCA_CPIA1 is not set +# CONFIG_USB_GSPCA_ETOMS is not set +# CONFIG_USB_GSPCA_FINEPIX is not set +# CONFIG_USB_GSPCA_JEILINJ is not set +# CONFIG_USB_GSPCA_KONICA is not set +# CONFIG_USB_GSPCA_MARS is not set +# CONFIG_USB_GSPCA_MR97310A is not set +# CONFIG_USB_GSPCA_OV519 is not set +# CONFIG_USB_GSPCA_OV534 is not set +# CONFIG_USB_GSPCA_OV534_9 is not set +# CONFIG_USB_GSPCA_PAC207 is not set +# CONFIG_USB_GSPCA_PAC7302 is not set +# CONFIG_USB_GSPCA_PAC7311 is not set +# CONFIG_USB_GSPCA_SN9C2028 is not set +# CONFIG_USB_GSPCA_SN9C20X is not set +# CONFIG_USB_GSPCA_SONIXB is not set +# CONFIG_USB_GSPCA_SONIXJ is not set +# CONFIG_USB_GSPCA_SPCA500 is not set +# CONFIG_USB_GSPCA_SPCA501 is not set +# CONFIG_USB_GSPCA_SPCA505 is not set +# CONFIG_USB_GSPCA_SPCA506 is not set +# CONFIG_USB_GSPCA_SPCA508 is not set +# CONFIG_USB_GSPCA_SPCA561 is not set +# CONFIG_USB_GSPCA_SPCA1528 is not set +# CONFIG_USB_GSPCA_SQ905 is not set +# CONFIG_USB_GSPCA_SQ905C is not set +# CONFIG_USB_GSPCA_SQ930X is not set +# CONFIG_USB_GSPCA_STK014 is not set +# CONFIG_USB_GSPCA_STV0680 is not set +# CONFIG_USB_GSPCA_SUNPLUS is not set +# CONFIG_USB_GSPCA_T613 is not set +# CONFIG_USB_GSPCA_TV8532 is not set +# CONFIG_USB_GSPCA_VC032X is not set +# CONFIG_USB_GSPCA_XIRLINK_CIT is not set +# CONFIG_USB_GSPCA_ZC3XX is not set +# CONFIG_VIDEO_PVRUSB2 is not set +# CONFIG_VIDEO_HDPVR is not set +# CONFIG_VIDEO_EM28XX is not set +# CONFIG_VIDEO_TLG2300 is not set +# CONFIG_VIDEO_CX231XX is not set +# CONFIG_VIDEO_USBVISION is not set +# CONFIG_USB_VICAM is not set +# CONFIG_USB_IBMCAM is not set +# CONFIG_USB_KONICAWC is not set +# CONFIG_USB_ET61X251 is not set +# CONFIG_USB_SE401 is not set +# CONFIG_USB_SN9C102 is not set +# CONFIG_USB_PWC is not set +# CONFIG_USB_ZR364XX is not set +# CONFIG_USB_STKWEBCAM is not set +# CONFIG_USB_S2255 is not set +# CONFIG_V4L_MEM2MEM_DRIVERS is not set +CONFIG_RADIO_ADAPTERS=y +CONFIG_RADIO_CADET=m +CONFIG_RADIO_RTRACK=m +CONFIG_RADIO_RTRACK2=m +CONFIG_RADIO_AZTECH=m +CONFIG_RADIO_GEMTEK=m +CONFIG_RADIO_GEMTEK_PCI=m +CONFIG_RADIO_MAXIRADIO=m +CONFIG_RADIO_MAESTRO=m +# CONFIG_RADIO_MIROPCM20 is not set +CONFIG_RADIO_SF16FMI=m +CONFIG_RADIO_SF16FMR2=m +CONFIG_RADIO_TERRATEC=m +CONFIG_RADIO_TRUST=m +CONFIG_RADIO_TYPHOON=m +CONFIG_RADIO_ZOLTRIX=m +CONFIG_I2C_SI4713=m +CONFIG_RADIO_SI4713=m +# CONFIG_USB_DSBR is not set +CONFIG_RADIO_SI470X=y +# CONFIG_USB_SI470X is not set +CONFIG_I2C_SI470X=m +# CONFIG_USB_MR800 is not set +CONFIG_RADIO_TEA5764=m +CONFIG_RADIO_SAA7706H=m +CONFIG_RADIO_TEF6862=m +CONFIG_RADIO_TIMBERDALE=m +CONFIG_DVB_MAX_ADAPTERS=8 +CONFIG_DVB_DYNAMIC_MINORS=y +CONFIG_DVB_CAPTURE_DRIVERS=y + +# +# Supported SAA7146 based PCI Adapters +# +CONFIG_TTPCI_EEPROM=m +CONFIG_DVB_AV7110=m +CONFIG_DVB_AV7110_OSD=y +CONFIG_DVB_BUDGET_CORE=m +CONFIG_DVB_BUDGET=m +CONFIG_DVB_BUDGET_CI=m +CONFIG_DVB_BUDGET_AV=m +CONFIG_DVB_BUDGET_PATCH=m + +# +# Supported USB Adapters +# +# CONFIG_DVB_USB is not set +# CONFIG_DVB_TTUSB_BUDGET is not set +# CONFIG_DVB_TTUSB_DEC is not set +CONFIG_SMS_SIANO_MDTV=m + +# +# Siano module components +# +# CONFIG_SMS_USB_DRV is not set +# CONFIG_SMS_SDIO_DRV is not set + +# +# Supported FlexCopII (B2C2) Adapters +# +CONFIG_DVB_B2C2_FLEXCOP=m +CONFIG_DVB_B2C2_FLEXCOP_PCI=m +# CONFIG_DVB_B2C2_FLEXCOP_USB is not set +# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set + +# +# Supported BT878 Adapters +# +CONFIG_DVB_BT8XX=m + +# +# Supported Pluto2 Adapters +# +CONFIG_DVB_PLUTO2=m + +# +# Supported SDMC DM1105 Adapters +# +CONFIG_DVB_DM1105=m +CONFIG_DVB_FIREDTV=m +CONFIG_DVB_FIREDTV_FIREWIRE=y +# CONFIG_DVB_FIREDTV_IEEE1394 is not set +CONFIG_DVB_FIREDTV_INPUT=y + +# +# Supported Earthsoft PT1 Adapters +# +CONFIG_DVB_PT1=m + +# +# Supported Mantis Adapters +# +CONFIG_MANTIS_CORE=m +CONFIG_DVB_MANTIS=m +CONFIG_DVB_HOPPER=m + +# +# Supported nGene Adapters +# +CONFIG_DVB_NGENE=m + +# +# Supported DVB Frontends +# +# CONFIG_DVB_FE_CUSTOMISE is not set + +# +# Multistandard (satellite) frontends +# +CONFIG_DVB_STB0899=m +CONFIG_DVB_STB6100=m +CONFIG_DVB_STV090x=m +CONFIG_DVB_STV6110x=m + +# +# DVB-S (satellite) frontends +# +CONFIG_DVB_CX24110=m +CONFIG_DVB_CX24123=m +CONFIG_DVB_MT312=m +CONFIG_DVB_ZL10036=m +CONFIG_DVB_ZL10039=m +CONFIG_DVB_S5H1420=m +CONFIG_DVB_STV0288=m +CONFIG_DVB_STB6000=m +CONFIG_DVB_STV0299=m +CONFIG_DVB_STV6110=m +CONFIG_DVB_STV0900=m +CONFIG_DVB_TDA8083=m +CONFIG_DVB_TDA10086=m +CONFIG_DVB_TDA8261=m +CONFIG_DVB_VES1X93=m +CONFIG_DVB_TUNER_ITD1000=m +CONFIG_DVB_TUNER_CX24113=m +CONFIG_DVB_TDA826X=m +CONFIG_DVB_TUA6100=m +CONFIG_DVB_CX24116=m +CONFIG_DVB_SI21XX=m +CONFIG_DVB_DS3000=m +CONFIG_DVB_MB86A16=m + +# +# DVB-T (terrestrial) frontends +# +CONFIG_DVB_SP8870=m +CONFIG_DVB_SP887X=m +CONFIG_DVB_CX22702=m +CONFIG_DVB_L64781=m +CONFIG_DVB_TDA1004X=m +CONFIG_DVB_NXT6000=m +CONFIG_DVB_MT352=m +CONFIG_DVB_ZL10353=m +CONFIG_DVB_DIB7000P=m +CONFIG_DVB_TDA10048=m + +# +# DVB-C (cable) frontends +# +CONFIG_DVB_VES1820=m +CONFIG_DVB_TDA10021=m +CONFIG_DVB_TDA10023=m +CONFIG_DVB_STV0297=m + +# +# ATSC (North American/Korean Terrestrial/Cable DTV) frontends +# +CONFIG_DVB_NXT200X=m +CONFIG_DVB_OR51211=m +CONFIG_DVB_OR51132=m +CONFIG_DVB_BCM3510=m +CONFIG_DVB_LGDT330X=m +CONFIG_DVB_LGDT3305=m +CONFIG_DVB_S5H1409=m +CONFIG_DVB_S5H1411=m + +# +# ISDB-T (terrestrial) frontends +# + +# +# Digital terrestrial only tuners/PLL +# +CONFIG_DVB_PLL=m + +# +# SEC control devices for DVB-S +# +CONFIG_DVB_LNBP21=m +CONFIG_DVB_ISL6405=m +CONFIG_DVB_ISL6421=m +CONFIG_DVB_ISL6423=m +CONFIG_DVB_TDA665x=m + +# +# Tools to develop new frontends +# +# CONFIG_DVB_DUMMY_FE is not set +CONFIG_DAB=y +CONFIG_USB_DABUSB=m + +# +# Graphics support +# +CONFIG_AGP=m +CONFIG_AGP_ALI=m +CONFIG_AGP_ATI=m +CONFIG_AGP_AMD=m +CONFIG_AGP_AMD64=m +CONFIG_AGP_INTEL=m +CONFIG_AGP_NVIDIA=m +CONFIG_AGP_SIS=m +CONFIG_AGP_SWORKS=m +CONFIG_AGP_VIA=m +CONFIG_AGP_EFFICEON=m +CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=16 +CONFIG_DRM=m +CONFIG_DRM_KMS_HELPER=m +CONFIG_DRM_TTM=m +# CONFIG_DRM_TDFX is not set +# CONFIG_DRM_R128 is not set +# CONFIG_DRM_RADEON is not set +# CONFIG_DRM_I810 is not set +# CONFIG_DRM_MGA is not set +# CONFIG_DRM_SIS is not set +# CONFIG_DRM_VIA is not set +# CONFIG_DRM_SAVAGE is not set +CONFIG_STUB_POULSBO=m +CONFIG_VGASTATE=m +CONFIG_VIDEO_OUTPUT_CONTROL=m +CONFIG_FB=m +CONFIG_FIRMWARE_EDID=y +CONFIG_FB_DDC=m +# CONFIG_FB_BOOT_VESA_SUPPORT is not set +CONFIG_FB_CFB_FILLRECT=m +CONFIG_FB_CFB_COPYAREA=m +CONFIG_FB_CFB_IMAGEBLIT=m +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +CONFIG_FB_SYS_FILLRECT=m +CONFIG_FB_SYS_COPYAREA=m +CONFIG_FB_SYS_IMAGEBLIT=m +CONFIG_FB_FOREIGN_ENDIAN=y +CONFIG_FB_BOTH_ENDIAN=y +# CONFIG_FB_BIG_ENDIAN is not set +# CONFIG_FB_LITTLE_ENDIAN is not set +CONFIG_FB_SYS_FOPS=m +CONFIG_FB_DEFERRED_IO=y +CONFIG_FB_HECUBA=m +CONFIG_FB_SVGALIB=m +# CONFIG_FB_MACMODES is not set +CONFIG_FB_BACKLIGHT=y +CONFIG_FB_MODE_HELPERS=y +CONFIG_FB_TILEBLITTING=y + +# +# Frame buffer hardware drivers +# +CONFIG_FB_CIRRUS=m +CONFIG_FB_PM2=m +CONFIG_FB_PM2_FIFO_DISCONNECT=y +CONFIG_FB_CYBER2000=m +CONFIG_FB_ARC=m +CONFIG_FB_VGA16=m +CONFIG_FB_UVESA=m +CONFIG_FB_N411=m +CONFIG_FB_HGA=m +CONFIG_FB_HGA_ACCEL=y +CONFIG_FB_S1D13XXX=m +CONFIG_FB_NVIDIA=m +CONFIG_FB_NVIDIA_I2C=y +CONFIG_FB_NVIDIA_DEBUG=y +CONFIG_FB_NVIDIA_BACKLIGHT=y +CONFIG_FB_RIVA=m +CONFIG_FB_RIVA_I2C=y +# CONFIG_FB_RIVA_DEBUG is not set +CONFIG_FB_RIVA_BACKLIGHT=y +# CONFIG_FB_I810 is not set +CONFIG_FB_LE80578=m +CONFIG_FB_CARILLO_RANCH=m +CONFIG_FB_INTEL=m +# CONFIG_FB_INTEL_DEBUG is not set +CONFIG_FB_INTEL_I2C=y +CONFIG_FB_MATROX=m +CONFIG_FB_MATROX_MILLENIUM=y +CONFIG_FB_MATROX_MYSTIQUE=y +CONFIG_FB_MATROX_G=y +CONFIG_FB_MATROX_I2C=m +CONFIG_FB_MATROX_MAVEN=m +CONFIG_FB_RADEON=m +CONFIG_FB_RADEON_I2C=y +CONFIG_FB_RADEON_BACKLIGHT=y +# CONFIG_FB_RADEON_DEBUG is not set +CONFIG_FB_ATY128=m +CONFIG_FB_ATY128_BACKLIGHT=y +CONFIG_FB_ATY=m +CONFIG_FB_ATY_CT=y +CONFIG_FB_ATY_GENERIC_LCD=y +CONFIG_FB_ATY_GX=y +CONFIG_FB_ATY_BACKLIGHT=y +CONFIG_FB_S3=m +CONFIG_FB_SAVAGE=m +CONFIG_FB_SAVAGE_I2C=y +CONFIG_FB_SAVAGE_ACCEL=y +CONFIG_FB_SIS=m +CONFIG_FB_SIS_300=y +CONFIG_FB_SIS_315=y +CONFIG_FB_VIA=m +# CONFIG_FB_VIA_DIRECT_PROCFS is not set +CONFIG_FB_NEOMAGIC=m +CONFIG_FB_KYRO=m +CONFIG_FB_3DFX=m +CONFIG_FB_3DFX_ACCEL=y +CONFIG_FB_3DFX_I2C=y +CONFIG_FB_VOODOO1=m +CONFIG_FB_VT8623=m +CONFIG_FB_TRIDENT=m +CONFIG_FB_ARK=m +CONFIG_FB_PM3=m +CONFIG_FB_CARMINE=m +CONFIG_FB_CARMINE_DRAM_EVAL=y +# CONFIG_CARMINE_DRAM_CUSTOM is not set +CONFIG_FB_GEODE=y +CONFIG_FB_GEODE_LX=m +CONFIG_FB_GEODE_GX=m +CONFIG_FB_GEODE_GX1=m +CONFIG_FB_TMIO=m +CONFIG_FB_TMIO_ACCELL=y +CONFIG_FB_SM501=m +CONFIG_FB_VIRTUAL=m +CONFIG_FB_METRONOME=m +CONFIG_FB_MB862XX=m +CONFIG_FB_MB862XX_PCI_GDC=y +CONFIG_FB_BROADSHEET=m +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_LCD_CLASS_DEVICE=m +CONFIG_LCD_L4F00242T03=m +CONFIG_LCD_LMS283GF05=m +CONFIG_LCD_LTV350QV=m +CONFIG_LCD_ILI9320=m +CONFIG_LCD_TDO24M=m +CONFIG_LCD_VGG2432A4=m +CONFIG_LCD_PLATFORM=m +# CONFIG_LCD_S6E63M0 is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=m +CONFIG_BACKLIGHT_GENERIC=m +CONFIG_BACKLIGHT_PROGEAR=m +CONFIG_BACKLIGHT_CARILLO_RANCH=m +CONFIG_BACKLIGHT_MBP_NVIDIA=m +CONFIG_BACKLIGHT_SAHARA=m +# CONFIG_BACKLIGHT_ADP8860 is not set +# CONFIG_BACKLIGHT_PCF50633 is not set + +# +# Display device support +# +CONFIG_DISPLAY_SUPPORT=m + +# +# Display hardware drivers +# + +# +# Console display driver support +# +CONFIG_VGA_CONSOLE=y +# CONFIG_VGACON_SOFT_SCROLLBACK is not set +CONFIG_MDA_CONSOLE=m +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=m +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +# CONFIG_LOGO is not set +CONFIG_SOUND=m +CONFIG_SOUND_OSS_CORE=y +CONFIG_SOUND_OSS_CORE_PRECLAIM=y +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_HWDEP=m +CONFIG_SND_RAWMIDI=m +CONFIG_SND_JACK=y +CONFIG_SND_SEQUENCER=m +CONFIG_SND_SEQ_DUMMY=m +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_PCM_OSS_PLUGINS=y +CONFIG_SND_SEQUENCER_OSS=y +CONFIG_SND_DYNAMIC_MINORS=y +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set +CONFIG_SND_VMASTER=y +CONFIG_SND_DMA_SGBUF=y +CONFIG_SND_RAWMIDI_SEQ=m +CONFIG_SND_OPL3_LIB_SEQ=m +CONFIG_SND_OPL4_LIB_SEQ=m +CONFIG_SND_SBAWE_SEQ=m +CONFIG_SND_EMU10K1_SEQ=m +CONFIG_SND_MPU401_UART=m +CONFIG_SND_OPL3_LIB=m +CONFIG_SND_OPL4_LIB=m +CONFIG_SND_VX_LIB=m +CONFIG_SND_AC97_CODEC=m +CONFIG_SND_DRIVERS=y +CONFIG_SND_DUMMY=m +# CONFIG_SND_ALOOP is not set +CONFIG_SND_VIRMIDI=m +CONFIG_SND_MTPAV=m +CONFIG_SND_MTS64=m +CONFIG_SND_SERIAL_U16550=m +CONFIG_SND_MPU401=m +CONFIG_SND_PORTMAN2X4=m +# CONFIG_SND_AC97_POWER_SAVE is not set +CONFIG_SND_WSS_LIB=m +CONFIG_SND_SB_COMMON=m +CONFIG_SND_SB8_DSP=m +CONFIG_SND_SB16_DSP=m +CONFIG_SND_ISA=y +CONFIG_SND_ADLIB=m +CONFIG_SND_AD1816A=m +CONFIG_SND_AD1848=m +CONFIG_SND_ALS100=m +# CONFIG_SND_AZT1605 is not set +# CONFIG_SND_AZT2316 is not set +CONFIG_SND_AZT2320=m +CONFIG_SND_CMI8330=m +CONFIG_SND_CS4231=m +CONFIG_SND_CS4236=m +CONFIG_SND_ES1688=m +CONFIG_SND_ES18XX=m +CONFIG_SND_SC6000=m +CONFIG_SND_GUSCLASSIC=m +CONFIG_SND_GUSEXTREME=m +CONFIG_SND_GUSMAX=m +CONFIG_SND_INTERWAVE=m +CONFIG_SND_INTERWAVE_STB=m +CONFIG_SND_JAZZ16=m +CONFIG_SND_OPL3SA2=m +CONFIG_SND_OPTI92X_AD1848=m +CONFIG_SND_OPTI92X_CS4231=m +CONFIG_SND_OPTI93X=m +CONFIG_SND_MIRO=m +CONFIG_SND_SB8=m +CONFIG_SND_SB16=m +CONFIG_SND_SBAWE=m +CONFIG_SND_SB16_CSP=y +CONFIG_SND_SSCAPE=m +CONFIG_SND_WAVEFRONT=m +CONFIG_SND_MSND_PINNACLE=m +CONFIG_SND_MSND_CLASSIC=m +CONFIG_SND_PCI=y +CONFIG_SND_AD1889=m +CONFIG_SND_ALS300=m +CONFIG_SND_ALS4000=m +CONFIG_SND_ALI5451=m +# CONFIG_SND_ASIHPI is not set +CONFIG_SND_ATIIXP=m +CONFIG_SND_ATIIXP_MODEM=m +CONFIG_SND_AU8810=m +CONFIG_SND_AU8820=m +CONFIG_SND_AU8830=m +CONFIG_SND_AW2=m +CONFIG_SND_AZT3328=m +CONFIG_SND_BT87X=m +# CONFIG_SND_BT87X_OVERCLOCK is not set +CONFIG_SND_CA0106=m +CONFIG_SND_CMIPCI=m +CONFIG_SND_OXYGEN_LIB=m +CONFIG_SND_OXYGEN=m +CONFIG_SND_CS4281=m +CONFIG_SND_CS46XX=m +CONFIG_SND_CS46XX_NEW_DSP=y +CONFIG_SND_CS5530=m +CONFIG_SND_CS5535AUDIO=m +CONFIG_SND_CTXFI=m +CONFIG_SND_DARLA20=m +CONFIG_SND_GINA20=m +CONFIG_SND_LAYLA20=m +CONFIG_SND_DARLA24=m +CONFIG_SND_GINA24=m +CONFIG_SND_LAYLA24=m +CONFIG_SND_MONA=m +CONFIG_SND_MIA=m +CONFIG_SND_ECHO3G=m +CONFIG_SND_INDIGO=m +CONFIG_SND_INDIGOIO=m +CONFIG_SND_INDIGODJ=m +CONFIG_SND_INDIGOIOX=m +CONFIG_SND_INDIGODJX=m +CONFIG_SND_EMU10K1=m +CONFIG_SND_EMU10K1X=m +CONFIG_SND_ENS1370=m +CONFIG_SND_ENS1371=m +CONFIG_SND_ES1938=m +CONFIG_SND_ES1968=m +# CONFIG_SND_ES1968_INPUT is not set +CONFIG_SND_FM801=m +# CONFIG_SND_FM801_TEA575X_BOOL is not set +CONFIG_SND_HDA_INTEL=m +# CONFIG_SND_HDA_HWDEP is not set +# CONFIG_SND_HDA_INPUT_BEEP is not set +# CONFIG_SND_HDA_INPUT_JACK is not set +# CONFIG_SND_HDA_PATCH_LOADER is not set +CONFIG_SND_HDA_CODEC_REALTEK=y +CONFIG_SND_HDA_CODEC_ANALOG=y +CONFIG_SND_HDA_CODEC_SIGMATEL=y +CONFIG_SND_HDA_CODEC_VIA=y +CONFIG_SND_HDA_CODEC_HDMI=y +CONFIG_SND_HDA_CODEC_CIRRUS=y +CONFIG_SND_HDA_CODEC_CONEXANT=y +CONFIG_SND_HDA_CODEC_CA0110=y +CONFIG_SND_HDA_CODEC_CMEDIA=y +CONFIG_SND_HDA_CODEC_SI3054=y +CONFIG_SND_HDA_GENERIC=y +# CONFIG_SND_HDA_POWER_SAVE is not set +CONFIG_SND_HDSP=m +CONFIG_SND_HDSPM=m +CONFIG_SND_HIFIER=m +CONFIG_SND_ICE1712=m +CONFIG_SND_ICE1724=m +CONFIG_SND_INTEL8X0=m +CONFIG_SND_INTEL8X0M=m +CONFIG_SND_KORG1212=m +CONFIG_SND_LX6464ES=m +CONFIG_SND_MAESTRO3=m +# CONFIG_SND_MAESTRO3_INPUT is not set +CONFIG_SND_MIXART=m +CONFIG_SND_NM256=m +CONFIG_SND_PCXHR=m +CONFIG_SND_RIPTIDE=m +CONFIG_SND_RME32=m +CONFIG_SND_RME96=m +CONFIG_SND_RME9652=m +CONFIG_SND_SIS7019=m +CONFIG_SND_SONICVIBES=m +CONFIG_SND_TRIDENT=m +CONFIG_SND_VIA82XX=m +CONFIG_SND_VIA82XX_MODEM=m +CONFIG_SND_VIRTUOSO=m +CONFIG_SND_VX222=m +CONFIG_SND_YMFPCI=m +CONFIG_SND_SPI=y +CONFIG_SND_USB=y +CONFIG_SND_USB_AUDIO=m +CONFIG_SND_USB_UA101=m +CONFIG_SND_USB_USX2Y=m +CONFIG_SND_USB_CAIAQ=m +CONFIG_SND_USB_CAIAQ_INPUT=y +CONFIG_SND_USB_US122L=m +CONFIG_SND_SOC=m +CONFIG_SND_SOC_I2C_AND_SPI=m +CONFIG_SND_SOC_ALL_CODECS=m +CONFIG_SND_SOC_WM_HUBS=m +CONFIG_SND_SOC_AD1836=m +CONFIG_SND_SOC_AD193X=m +CONFIG_SND_SOC_AD73311=m +CONFIG_SND_SOC_ADS117X=m +CONFIG_SND_SOC_AK4104=m +CONFIG_SND_SOC_AK4535=m +CONFIG_SND_SOC_AK4642=m +CONFIG_SND_SOC_AK4671=m +CONFIG_SND_SOC_CS42L51=m +CONFIG_SND_SOC_CS4270=m +CONFIG_SND_SOC_CX20442=m +CONFIG_SND_SOC_L3=m +CONFIG_SND_SOC_DA7210=m +CONFIG_SND_SOC_MAX98088=m +CONFIG_SND_SOC_PCM3008=m +CONFIG_SND_SOC_SPDIF=m +CONFIG_SND_SOC_SSM2602=m +CONFIG_SND_SOC_TLV320AIC23=m +CONFIG_SND_SOC_TLV320AIC26=m +CONFIG_SND_SOC_TLV320AIC3X=m +CONFIG_SND_SOC_TLV320DAC33=m +CONFIG_SND_SOC_UDA134X=m +CONFIG_SND_SOC_UDA1380=m +CONFIG_SND_SOC_WM8400=m +CONFIG_SND_SOC_WM8510=m +CONFIG_SND_SOC_WM8523=m +CONFIG_SND_SOC_WM8580=m +CONFIG_SND_SOC_WM8711=m +CONFIG_SND_SOC_WM8727=m +CONFIG_SND_SOC_WM8728=m +CONFIG_SND_SOC_WM8731=m +CONFIG_SND_SOC_WM8741=m +CONFIG_SND_SOC_WM8750=m +CONFIG_SND_SOC_WM8753=m +CONFIG_SND_SOC_WM8776=m +CONFIG_SND_SOC_WM8804=m +CONFIG_SND_SOC_WM8900=m +CONFIG_SND_SOC_WM8903=m +CONFIG_SND_SOC_WM8904=m +CONFIG_SND_SOC_WM8940=m +CONFIG_SND_SOC_WM8955=m +CONFIG_SND_SOC_WM8960=m +CONFIG_SND_SOC_WM8961=m +CONFIG_SND_SOC_WM8962=m +CONFIG_SND_SOC_WM8971=m +CONFIG_SND_SOC_WM8974=m +CONFIG_SND_SOC_WM8978=m +CONFIG_SND_SOC_WM8985=m +CONFIG_SND_SOC_WM8988=m +CONFIG_SND_SOC_WM8990=m +CONFIG_SND_SOC_WM8993=m +CONFIG_SND_SOC_WM9081=m +CONFIG_SND_SOC_MAX9877=m +CONFIG_SND_SOC_TPA6130A2=m +CONFIG_SND_SOC_WM2000=m +CONFIG_SND_SOC_WM9090=m +# CONFIG_SOUND_PRIME is not set +CONFIG_AC97_BUS=m +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +CONFIG_HIDRAW=y + +# +# USB Input Devices +# +CONFIG_USB_HID=m +CONFIG_HID_PID=y +CONFIG_USB_HIDDEV=y + +# +# USB HID Boot Protocol drivers +# +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m + +# +# Special HID drivers +# +CONFIG_HID_3M_PCT=m +CONFIG_HID_A4TECH=m +# CONFIG_HID_ACRUX_FF is not set +CONFIG_HID_APPLE=m +CONFIG_HID_BELKIN=m +# CONFIG_HID_CANDO is not set +CONFIG_HID_CHERRY=m +CONFIG_HID_CHICONY=m +# CONFIG_HID_PRODIKEYS is not set +CONFIG_HID_CYPRESS=m +CONFIG_HID_DRAGONRISE=m +CONFIG_DRAGONRISE_FF=y +# CONFIG_HID_EGALAX is not set +# CONFIG_HID_ELECOM is not set +CONFIG_HID_EZKEY=m +CONFIG_HID_KYE=m +# CONFIG_HID_UCLOGIC is not set +# CONFIG_HID_WALTOP is not set +CONFIG_HID_GYRATION=m +CONFIG_HID_TWINHAN=m +CONFIG_HID_KENSINGTON=m +CONFIG_HID_LOGITECH=m +CONFIG_LOGITECH_FF=y +CONFIG_LOGIRUMBLEPAD2_FF=y +CONFIG_LOGIG940_FF=y +# CONFIG_LOGIWII_FF is not set +CONFIG_HID_MAGICMOUSE=m +CONFIG_HID_MICROSOFT=m +CONFIG_HID_MOSART=m +CONFIG_HID_MONTEREY=m +CONFIG_HID_NTRIG=m +CONFIG_HID_ORTEK=m +CONFIG_HID_PANTHERLORD=m +CONFIG_PANTHERLORD_FF=y +CONFIG_HID_PETALYNX=m +# CONFIG_HID_PICOLCD is not set +CONFIG_HID_QUANTA=m +# CONFIG_HID_ROCCAT is not set +# CONFIG_HID_ROCCAT_KONE is not set +# CONFIG_HID_ROCCAT_PYRA is not set +CONFIG_HID_SAMSUNG=m +CONFIG_HID_SONY=m +CONFIG_HID_STANTUM=m +CONFIG_HID_SUNPLUS=m +CONFIG_HID_GREENASIA=m +CONFIG_GREENASIA_FF=y +CONFIG_HID_SMARTJOYPLUS=m +CONFIG_SMARTJOYPLUS_FF=y +CONFIG_HID_TOPSEED=m +CONFIG_HID_THRUSTMASTER=m +# CONFIG_THRUSTMASTER_FF is not set +CONFIG_HID_WACOM=m +# CONFIG_HID_WACOM_POWER_SUPPLY is not set +CONFIG_HID_ZEROPLUS=m +CONFIG_ZEROPLUS_FF=y +# CONFIG_HID_ZYDACRON is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +CONFIG_USB_ARCH_HAS_EHCI=y +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set +# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set + +# +# Miscellaneous USB options +# +# CONFIG_USB_DEVICEFS is not set +CONFIG_USB_DEVICE_CLASS=y +CONFIG_USB_DYNAMIC_MINORS=y +# CONFIG_USB_OTG_WHITELIST is not set +# CONFIG_USB_OTG_BLACKLIST_HUB is not set +CONFIG_USB_MON=m +CONFIG_USB_WUSB=m +CONFIG_USB_WUSB_CBAF=m +# CONFIG_USB_WUSB_CBAF_DEBUG is not set + +# +# USB Host Controller Drivers +# +CONFIG_USB_C67X00_HCD=m +CONFIG_USB_XHCI_HCD=m +CONFIG_USB_XHCI_HCD_DEBUGGING=y +CONFIG_USB_EHCI_HCD=m +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_EHCI_TT_NEWSCHED=y +CONFIG_USB_OXU210HP_HCD=m +CONFIG_USB_ISP116X_HCD=m +CONFIG_USB_ISP1760_HCD=m +CONFIG_USB_ISP1362_HCD=m +CONFIG_USB_OHCI_HCD=m +CONFIG_USB_OHCI_HCD_SSB=y +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +CONFIG_USB_UHCI_HCD=m +# CONFIG_USB_U132_HCD is not set +CONFIG_USB_SL811_HCD=m +CONFIG_USB_R8A66597_HCD=m +CONFIG_USB_WHCI_HCD=m +CONFIG_USB_HWA_HCD=m + +# +# USB Device Class drivers +# +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m +CONFIG_USB_WDM=m +CONFIG_USB_TMC=m + +# +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may +# + +# +# also be needed; see USB_STORAGE Help for more info +# +CONFIG_USB_STORAGE=m +# CONFIG_USB_STORAGE_DEBUG is not set +CONFIG_USB_STORAGE_DATAFAB=m +CONFIG_USB_STORAGE_FREECOM=m +CONFIG_USB_STORAGE_ISD200=m +CONFIG_USB_STORAGE_USBAT=m +CONFIG_USB_STORAGE_SDDR09=m +CONFIG_USB_STORAGE_SDDR55=m +CONFIG_USB_STORAGE_JUMPSHOT=m +CONFIG_USB_STORAGE_ALAUDA=m +CONFIG_USB_STORAGE_ONETOUCH=m +CONFIG_USB_STORAGE_KARMA=m +CONFIG_USB_STORAGE_CYPRESS_ATACB=m +# CONFIG_USB_UAS is not set +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +CONFIG_USB_MDC800=m +CONFIG_USB_MICROTEK=m + +# +# USB port drivers +# +CONFIG_USB_USS720=m +CONFIG_USB_SERIAL=m +# CONFIG_USB_EZUSB is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_AIRCABLE is not set +# CONFIG_USB_SERIAL_ARK3116 is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_CH341 is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_CP210X is not set +# CONFIG_USB_SERIAL_CYPRESS_M8 is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_FUNSOFT is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IPAQ is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_EDGEPORT_TI is not set +# CONFIG_USB_SERIAL_GARMIN is not set +# CONFIG_USB_SERIAL_IPW is not set +# CONFIG_USB_SERIAL_IUU is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KLSI is not set +# CONFIG_USB_SERIAL_KOBIL_SCT is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_MOS7720 is not set +# CONFIG_USB_SERIAL_MOS7840 is not set +# CONFIG_USB_SERIAL_MOTOROLA is not set +# CONFIG_USB_SERIAL_NAVMAN is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_OTI6858 is not set +# CONFIG_USB_SERIAL_QCAUX is not set +# CONFIG_USB_SERIAL_QUALCOMM is not set +# CONFIG_USB_SERIAL_SPCP8X5 is not set +# CONFIG_USB_SERIAL_HP4X is not set +# CONFIG_USB_SERIAL_SAFE is not set +# CONFIG_USB_SERIAL_SAMBA is not set +# CONFIG_USB_SERIAL_SIEMENS_MPI is not set +# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set +# CONFIG_USB_SERIAL_SYMBOL is not set +# CONFIG_USB_SERIAL_TI is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OPTION is not set +# CONFIG_USB_SERIAL_OMNINET is not set +# CONFIG_USB_SERIAL_OPTICON is not set +# CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set +# CONFIG_USB_SERIAL_ZIO is not set +# CONFIG_USB_SERIAL_SSU100 is not set +# CONFIG_USB_SERIAL_DEBUG is not set + +# +# USB Miscellaneous drivers +# +CONFIG_USB_EMI62=m +CONFIG_USB_EMI26=m +CONFIG_USB_ADUTUX=m +CONFIG_USB_SEVSEG=m +CONFIG_USB_RIO500=m +CONFIG_USB_LEGOTOWER=m +CONFIG_USB_LCD=m +CONFIG_USB_LED=m +CONFIG_USB_CYPRESS_CY7C63=m +CONFIG_USB_CYTHERM=m +CONFIG_USB_IDMOUSE=m +CONFIG_USB_FTDI_ELAN=m +CONFIG_USB_APPLEDISPLAY=m +CONFIG_USB_SISUSBVGA=m +CONFIG_USB_SISUSBVGA_CON=y +CONFIG_USB_LD=m +CONFIG_USB_TRANCEVIBRATOR=m +CONFIG_USB_IOWARRIOR=m +CONFIG_USB_TEST=m +CONFIG_USB_ISIGHTFW=m +# CONFIG_USB_YUREX is not set +CONFIG_USB_GADGET=m +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_VBUS_DRAW=2 +CONFIG_USB_GADGET_SELECTED=y +CONFIG_USB_GADGET_R8A66597=y +CONFIG_USB_R8A66597=m +# CONFIG_USB_GADGET_M66592 is not set +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_CI13XXX is not set +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LANGWELL is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +CONFIG_USB_GADGET_DUALSPEED=y +# CONFIG_USB_ZERO is not set +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_ETH is not set +# CONFIG_USB_GADGETFS is not set +# CONFIG_USB_FUNCTIONFS is not set +# CONFIG_USB_FILE_STORAGE is not set +# CONFIG_USB_MASS_STORAGE is not set +# CONFIG_USB_G_SERIAL is not set +# CONFIG_USB_MIDI_GADGET is not set +# CONFIG_USB_G_PRINTER is not set +# CONFIG_USB_CDC_COMPOSITE is not set +# CONFIG_USB_G_NOKIA is not set +# CONFIG_USB_G_MULTI is not set +# CONFIG_USB_G_HID is not set +# CONFIG_USB_G_DBGP is not set +# CONFIG_USB_G_WEBCAM is not set + +# +# OTG and related infrastructure +# +CONFIG_USB_OTG_UTILS=y +CONFIG_USB_GPIO_VBUS=m +CONFIG_NOP_USB_XCEIV=m +CONFIG_UWB=m +CONFIG_UWB_HWA=m +CONFIG_UWB_WHCI=m +CONFIG_UWB_I1480U=m +CONFIG_MMC=m +# CONFIG_MMC_DEBUG is not set +# CONFIG_MMC_UNSAFE_RESUME is not set + +# +# MMC/SD/SDIO Card Drivers +# +CONFIG_MMC_BLOCK=m +CONFIG_MMC_BLOCK_MINORS=8 +CONFIG_MMC_BLOCK_BOUNCE=y +CONFIG_SDIO_UART=m +CONFIG_MMC_TEST=m + +# +# MMC/SD/SDIO Host Controller Drivers +# +CONFIG_MMC_SDHCI=m +CONFIG_MMC_SDHCI_PCI=m +CONFIG_MMC_RICOH_MMC=y +CONFIG_MMC_SDHCI_PLTFM=m +CONFIG_MMC_WBSD=m +CONFIG_MMC_TIFM_SD=m +CONFIG_MMC_SPI=m +CONFIG_MMC_CB710=m +CONFIG_MMC_VIA_SDMMC=m +# CONFIG_MMC_USHC is not set +CONFIG_MEMSTICK=m +# CONFIG_MEMSTICK_DEBUG is not set + +# +# MemoryStick drivers +# +# CONFIG_MEMSTICK_UNSAFE_RESUME is not set +CONFIG_MSPRO_BLOCK=m + +# +# MemoryStick Host Controller Drivers +# +CONFIG_MEMSTICK_TIFM_MS=m +CONFIG_MEMSTICK_JMICRON_38X=m +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +# CONFIG_LEDS_NET5501 is not set +CONFIG_LEDS_ALIX2=m +CONFIG_LEDS_PCA9532=m +CONFIG_LEDS_GPIO=m +CONFIG_LEDS_GPIO_PLATFORM=y +CONFIG_LEDS_LP3944=m +# CONFIG_LEDS_LP5521 is not set +# CONFIG_LEDS_LP5523 is not set +CONFIG_LEDS_PCA955X=m +CONFIG_LEDS_DAC124S085=m +CONFIG_LEDS_REGULATOR=m +CONFIG_LEDS_BD2802=m +CONFIG_LEDS_LT3593=m +CONFIG_LEDS_TRIGGERS=y + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGER_TIMER=m +CONFIG_LEDS_TRIGGER_HEARTBEAT=m +CONFIG_LEDS_TRIGGER_BACKLIGHT=m +CONFIG_LEDS_TRIGGER_GPIO=m +CONFIG_LEDS_TRIGGER_DEFAULT_ON=m + +# +# iptables trigger is under Netfilter config (LED target) +# +CONFIG_ACCESSIBILITY=y +CONFIG_INFINIBAND=m +CONFIG_INFINIBAND_USER_MAD=m +CONFIG_INFINIBAND_USER_ACCESS=m +CONFIG_INFINIBAND_USER_MEM=y +CONFIG_INFINIBAND_ADDR_TRANS=y +CONFIG_INFINIBAND_MTHCA=m +# CONFIG_INFINIBAND_MTHCA_DEBUG is not set +CONFIG_INFINIBAND_AMSO1100=m +# CONFIG_INFINIBAND_AMSO1100_DEBUG is not set +CONFIG_INFINIBAND_CXGB3=m +# CONFIG_INFINIBAND_CXGB3_DEBUG is not set +# CONFIG_INFINIBAND_CXGB4 is not set +CONFIG_MLX4_INFINIBAND=m +CONFIG_INFINIBAND_NES=m +# CONFIG_INFINIBAND_NES_DEBUG is not set +CONFIG_INFINIBAND_IPOIB=m +CONFIG_INFINIBAND_IPOIB_CM=y +# CONFIG_INFINIBAND_IPOIB_DEBUG is not set +CONFIG_INFINIBAND_SRP=m +CONFIG_INFINIBAND_ISER=m +CONFIG_EDAC=y + +# +# Reporting subsystems +# +# CONFIG_EDAC_DEBUG is not set +CONFIG_EDAC_MM_EDAC=m +CONFIG_EDAC_AMD76X=m +CONFIG_EDAC_E7XXX=m +CONFIG_EDAC_I82875P=m +CONFIG_EDAC_I82975X=m +CONFIG_EDAC_I3000=m +CONFIG_EDAC_I3200=m +CONFIG_EDAC_X38=m +CONFIG_EDAC_I5400=m +# CONFIG_EDAC_I7CORE is not set +CONFIG_EDAC_I82860=m +CONFIG_EDAC_R82600=m +CONFIG_EDAC_I5000=m +CONFIG_EDAC_I5100=m +# CONFIG_EDAC_I7300 is not set +CONFIG_RTC_LIB=m +CONFIG_RTC_CLASS=m + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +CONFIG_RTC_INTF_DEV_UIE_EMUL=y +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +CONFIG_RTC_DRV_DS1307=m +CONFIG_RTC_DRV_DS1374=m +CONFIG_RTC_DRV_DS1672=m +# CONFIG_RTC_DRV_DS3232 is not set +CONFIG_RTC_DRV_MAX6900=m +CONFIG_RTC_DRV_RS5C372=m +CONFIG_RTC_DRV_ISL1208=m +# CONFIG_RTC_DRV_ISL12022 is not set +CONFIG_RTC_DRV_X1205=m +CONFIG_RTC_DRV_PCF8563=m +CONFIG_RTC_DRV_PCF8583=m +CONFIG_RTC_DRV_M41T80=m +CONFIG_RTC_DRV_M41T80_WDT=y +CONFIG_RTC_DRV_BQ32K=m +CONFIG_RTC_DRV_S35390A=m +CONFIG_RTC_DRV_FM3130=m +CONFIG_RTC_DRV_RX8581=m +CONFIG_RTC_DRV_RX8025=m + +# +# SPI RTC drivers +# +CONFIG_RTC_DRV_M41T94=m +CONFIG_RTC_DRV_DS1305=m +CONFIG_RTC_DRV_DS1390=m +CONFIG_RTC_DRV_MAX6902=m +CONFIG_RTC_DRV_R9701=m +CONFIG_RTC_DRV_RS5C348=m +CONFIG_RTC_DRV_DS3234=m +CONFIG_RTC_DRV_PCF2123=m + +# +# Platform RTC drivers +# +CONFIG_RTC_DRV_CMOS=m +CONFIG_RTC_DRV_DS1286=m +CONFIG_RTC_DRV_DS1511=m +CONFIG_RTC_DRV_DS1553=m +CONFIG_RTC_DRV_DS1742=m +CONFIG_RTC_DRV_STK17TA8=m +CONFIG_RTC_DRV_M48T86=m +CONFIG_RTC_DRV_M48T35=m +CONFIG_RTC_DRV_M48T59=m +CONFIG_RTC_DRV_MSM6242=m +CONFIG_RTC_DRV_BQ4802=m +CONFIG_RTC_DRV_RP5C01=m +CONFIG_RTC_DRV_V3020=m +CONFIG_RTC_DRV_PCF50633=m + +# +# on-CPU RTC drivers +# +CONFIG_RTC_DRV_PCAP=m +CONFIG_DMADEVICES=y +# CONFIG_DMADEVICES_DEBUG is not set + +# +# DMA Devices +# +# CONFIG_INTEL_MID_DMAC is not set +CONFIG_INTEL_IOATDMA=m +# CONFIG_TIMB_DMA is not set +# CONFIG_PCH_DMA is not set +CONFIG_DMA_ENGINE=y + +# +# DMA Clients +# +CONFIG_NET_DMA=y +CONFIG_ASYNC_TX_DMA=y +# CONFIG_DMATEST is not set +CONFIG_DCA=m +CONFIG_AUXDISPLAY=y +CONFIG_KS0108=m +CONFIG_KS0108_PORT=0x378 +CONFIG_KS0108_DELAY=2 +CONFIG_CFAG12864B=m +CONFIG_CFAG12864B_RATE=20 +CONFIG_UIO=m +CONFIG_UIO_CIF=m +CONFIG_UIO_PDRV=m +CONFIG_UIO_PDRV_GENIRQ=m +CONFIG_UIO_AEC=m +CONFIG_UIO_SERCOS3=m +CONFIG_UIO_PCI_GENERIC=m +CONFIG_UIO_NETX=m +CONFIG_STAGING=y +# CONFIG_STAGING_EXCLUDE_BUILD is not set +CONFIG_ET131X=m +CONFIG_ET131X_DEBUG=y +CONFIG_SLICOSS=m +CONFIG_VIDEO_GO7007=m +CONFIG_VIDEO_GO7007_USB=m +CONFIG_VIDEO_GO7007_OV7640=m +CONFIG_VIDEO_GO7007_SAA7113=m +CONFIG_VIDEO_GO7007_SAA7115=m +CONFIG_VIDEO_GO7007_TW9903=m +CONFIG_VIDEO_GO7007_UDA1342=m +CONFIG_VIDEO_GO7007_SONY_TUNER=m +CONFIG_VIDEO_GO7007_TW2804=m +CONFIG_VIDEO_CX25821=m +CONFIG_VIDEO_CX25821_ALSA=m +# CONFIG_VIDEO_TM6000 is not set +CONFIG_VIDEO_CPIA=m +CONFIG_VIDEO_CPIA_PP=m +# CONFIG_VIDEO_CPIA_USB is not set +CONFIG_VIDEO_STRADIS=m +CONFIG_USB_IP_COMMON=m +CONFIG_USB_IP_VHCI_HCD=m +CONFIG_USB_IP_HOST=m +# CONFIG_USB_IP_DEBUG_ENABLE is not set +CONFIG_W35UND=m +CONFIG_PRISM2_USB=m +CONFIG_ECHO=m +# CONFIG_BRCM80211 is not set +CONFIG_RT2860=m +CONFIG_RT2870=m +CONFIG_COMEDI=m +# CONFIG_COMEDI_DEBUG is not set +# CONFIG_COMEDI_MISC_DRIVERS is not set +# CONFIG_COMEDI_ISA_DRIVERS is not set +CONFIG_COMEDI_PCI_DRIVERS=m +# CONFIG_COMEDI_ADDI_APCI_035 is not set +# CONFIG_COMEDI_ADDI_APCI_1032 is not set +# CONFIG_COMEDI_ADDI_APCI_1500 is not set +# CONFIG_COMEDI_ADDI_APCI_1516 is not set +# CONFIG_COMEDI_ADDI_APCI_1564 is not set +# CONFIG_COMEDI_ADDI_APCI_16XX is not set +# CONFIG_COMEDI_ADDI_APCI_2016 is not set +# CONFIG_COMEDI_ADDI_APCI_2032 is not set +# CONFIG_COMEDI_ADDI_APCI_2200 is not set +# CONFIG_COMEDI_ADDI_APCI_3001 is not set +# CONFIG_COMEDI_ADDI_APCI_3120 is not set +# CONFIG_COMEDI_ADDI_APCI_3501 is not set +# CONFIG_COMEDI_ADDI_APCI_3XXX is not set +# CONFIG_COMEDI_ADL_PCI6208 is not set +# CONFIG_COMEDI_ADL_PCI7230 is not set +# CONFIG_COMEDI_ADL_PCI7296 is not set +# CONFIG_COMEDI_ADL_PCI7432 is not set +# CONFIG_COMEDI_ADL_PCI8164 is not set +# CONFIG_COMEDI_ADL_PCI9111 is not set +# CONFIG_COMEDI_ADL_PCI9118 is not set +# CONFIG_COMEDI_ADV_PCI1710 is not set +# CONFIG_COMEDI_ADV_PCI1723 is not set +# CONFIG_COMEDI_ADV_PCI_DIO is not set +# CONFIG_COMEDI_AMPLC_DIO200 is not set +# CONFIG_COMEDI_AMPLC_PC236 is not set +# CONFIG_COMEDI_AMPLC_PC263 is not set +# CONFIG_COMEDI_AMPLC_PCI224 is not set +# CONFIG_COMEDI_AMPLC_PCI230 is not set +# CONFIG_COMEDI_CONTEC_PCI_DIO is not set +# CONFIG_COMEDI_DT3000 is not set +# CONFIG_COMEDI_UNIOXX5 is not set +# CONFIG_COMEDI_GSC_HPDI is not set +# CONFIG_COMEDI_ICP_MULTI is not set +# CONFIG_COMEDI_II_PCI20KC is not set +# CONFIG_COMEDI_DAQBOARD2000 is not set +# CONFIG_COMEDI_JR3_PCI is not set +# CONFIG_COMEDI_KE_COUNTER is not set +# CONFIG_COMEDI_CB_PCIDAS64 is not set +# CONFIG_COMEDI_CB_PCIDAS is not set +# CONFIG_COMEDI_CB_PCIDDA is not set +# CONFIG_COMEDI_CB_PCIDIO is not set +# CONFIG_COMEDI_CB_PCIMDAS is not set +# CONFIG_COMEDI_CB_PCIMDDA is not set +# CONFIG_COMEDI_ME4000 is not set +# CONFIG_COMEDI_ME_DAQ is not set +# CONFIG_COMEDI_RTD520 is not set +# CONFIG_COMEDI_S526 is not set +# CONFIG_COMEDI_S626 is not set +# CONFIG_COMEDI_SSV_DNP is not set +CONFIG_COMEDI_USB_DRIVERS=m +# CONFIG_COMEDI_DT9812 is not set +# CONFIG_COMEDI_USBDUX is not set +# CONFIG_COMEDI_USBDUXFAST is not set +# CONFIG_COMEDI_VMK80XX is not set +# CONFIG_COMEDI_NI_COMMON is not set +# CONFIG_COMEDI_8255 is not set +# CONFIG_COMEDI_DAS08 is not set +# CONFIG_COMEDI_FC is not set +CONFIG_ASUS_OLED=m +CONFIG_PANEL=m +CONFIG_PANEL_PARPORT=0 +CONFIG_PANEL_PROFILE=5 +# CONFIG_PANEL_CHANGE_MESSAGE is not set +CONFIG_R8187SE=m +CONFIG_RTL8192U=m +CONFIG_RTL8192E=m +# CONFIG_R8712U is not set +CONFIG_TRANZPORT=m +CONFIG_POHMELFS=m +# CONFIG_POHMELFS_DEBUG is not set +# CONFIG_POHMELFS_CRYPTO is not set +CONFIG_AUTOFS_FS=m +CONFIG_IDE_PHISON=m +# CONFIG_LINE6_USB is not set +CONFIG_DRM_VMWGFX=m +CONFIG_DRM_NOUVEAU=m +CONFIG_DRM_NOUVEAU_BACKLIGHT=y + +# +# I2C encoder or helper chips +# +CONFIG_DRM_I2C_CH7006=m +CONFIG_DRM_I2C_SIL164=m +CONFIG_USB_SERIAL_QUATECH2=m +CONFIG_USB_SERIAL_QUATECH_USB2=m +CONFIG_VT6655=m +CONFIG_VT6656=m +CONFIG_FB_UDL=m +CONFIG_HYPERV=m +CONFIG_HYPERV_STORAGE=m +CONFIG_HYPERV_NET=m +CONFIG_HYPERV_UTILS=m +CONFIG_VME_BUS=m + +# +# VME Bridge Drivers +# +CONFIG_VME_CA91CX42=m +CONFIG_VME_TSI148=m + +# +# VME Device Drivers +# +CONFIG_VME_USER=m + +# +# VME Board Drivers +# +CONFIG_VMIVME_7805=m +CONFIG_IIO=m +CONFIG_IIO_RING_BUFFER=y +CONFIG_IIO_SW_RING=m +CONFIG_IIO_TRIGGER=y + +# +# Accelerometers +# +# CONFIG_ADIS16209 is not set +# CONFIG_ADIS16220 is not set +# CONFIG_ADIS16240 is not set +CONFIG_KXSD9=m +CONFIG_LIS3L02DQ=m +CONFIG_SCA3000=m + +# +# Analog to digital convertors +# +CONFIG_MAX1363=m +CONFIG_MAX1363_RING_BUFFER=y +# CONFIG_AD799X is not set +# CONFIG_AD7476 is not set + +# +# Digital gyroscope sensors +# +# CONFIG_ADIS16260 is not set + +# +# Inertial measurement units +# +# CONFIG_ADIS16300 is not set +# CONFIG_ADIS16350 is not set +# CONFIG_ADIS16400 is not set + +# +# Light sensors +# +CONFIG_SENSORS_TSL2563=m +# CONFIG_SENSORS_ISL29018 is not set + +# +# Magnetometer sensors +# +# CONFIG_SENSORS_AK8975 is not set +# CONFIG_SENSORS_HMC5843 is not set + +# +# Triggers - standalone +# +CONFIG_IIO_PERIODIC_RTC_TRIGGER=m +CONFIG_IIO_GPIO_TRIGGER=m +# CONFIG_ZRAM is not set +CONFIG_BATMAN_ADV=m +# CONFIG_BATMAN_ADV_DEBUG is not set +CONFIG_SAMSUNG_LAPTOP=m +CONFIG_FB_SM7XX=m +# CONFIG_VIDEO_DT3155 is not set +CONFIG_CRYSTALHD=m +# CONFIG_CXT1E1 is not set + +# +# Texas Instruments shared transport line discipline +# +# CONFIG_ST_BT is not set +# CONFIG_ADIS16255 is not set +# CONFIG_FB_XGI is not set +# CONFIG_LIRC_STAGING is not set +CONFIG_SMB_FS=m +CONFIG_SMB_NLS_DEFAULT=y +CONFIG_SMB_NLS_REMOTE="cp437" +# CONFIG_EASYCAP is not set +# CONFIG_SOLO6X10 is not set +CONFIG_MACH_NO_WESTBRIDGE=y +# CONFIG_SBE_2T3E3 is not set +# CONFIG_ATH6K_LEGACY is not set +# CONFIG_USB_ENESTORAGE is not set +# CONFIG_BCM_WIMAX is not set +# CONFIG_FT1000 is not set + +# +# Speakup console speech +# +# CONFIG_SPEAKUP is not set +CONFIG_X86_PLATFORM_DEVICES=y +CONFIG_SENSORS_HDAPS=m +# CONFIG_IBM_RTL is not set + +# +# Firmware Drivers +# +# CONFIG_EDD is not set +# CONFIG_FIRMWARE_MEMMAP is not set +# CONFIG_DELL_RBU is not set +# CONFIG_DCDBAS is not set +# CONFIG_ISCSI_IBFT_FIND is not set + +# +# File systems +# +CONFIG_EXT2_FS=m +CONFIG_EXT2_FS_XATTR=y +CONFIG_EXT2_FS_POSIX_ACL=y +CONFIG_EXT2_FS_SECURITY=y +CONFIG_EXT2_FS_XIP=y +CONFIG_EXT3_FS=m +# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set +CONFIG_EXT3_FS_XATTR=y +CONFIG_EXT3_FS_POSIX_ACL=y +CONFIG_EXT3_FS_SECURITY=y +CONFIG_EXT4_FS=m +CONFIG_EXT4_FS_XATTR=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_EXT4_FS_SECURITY=y +# CONFIG_EXT4_DEBUG is not set +CONFIG_FS_XIP=y +CONFIG_JBD=m +CONFIG_JBD2=m +CONFIG_FS_MBCACHE=m +CONFIG_REISERFS_FS=m +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +CONFIG_REISERFS_FS_XATTR=y +CONFIG_REISERFS_FS_POSIX_ACL=y +CONFIG_REISERFS_FS_SECURITY=y +CONFIG_JFS_FS=m +CONFIG_JFS_POSIX_ACL=y +CONFIG_JFS_SECURITY=y +# CONFIG_JFS_DEBUG is not set +# CONFIG_JFS_STATISTICS is not set +CONFIG_FS_POSIX_ACL=y +CONFIG_XFS_FS=m +CONFIG_XFS_QUOTA=y +CONFIG_XFS_POSIX_ACL=y +CONFIG_XFS_RT=y +# CONFIG_XFS_DEBUG is not set +# CONFIG_OCFS2_FS is not set +CONFIG_BTRFS_FS=m +CONFIG_BTRFS_FS_POSIX_ACL=y +CONFIG_NILFS2_FS=m +CONFIG_EXPORTFS=m +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y +CONFIG_DNOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_FANOTIFY is not set +CONFIG_QUOTA=y +CONFIG_QUOTA_NETLINK_INTERFACE=y +CONFIG_PRINT_QUOTA_WARNING=y +CONFIG_QUOTA_DEBUG=y +CONFIG_QUOTA_TREE=m +# CONFIG_QFMT_V1 is not set +CONFIG_QFMT_V2=m +CONFIG_QUOTACTL=y +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m +CONFIG_CUSE=m + +# +# Caches +# +CONFIG_FSCACHE=m +# CONFIG_FSCACHE_STATS is not set +# CONFIG_FSCACHE_HISTOGRAM is not set +# CONFIG_FSCACHE_DEBUG is not set +# CONFIG_FSCACHE_OBJECT_LIST is not set +CONFIG_CACHEFILES=m +# CONFIG_CACHEFILES_DEBUG is not set +CONFIG_CACHEFILES_HISTOGRAM=y + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_UDF_FS=m +CONFIG_UDF_NLS=y + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +CONFIG_NTFS_FS=m +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +# CONFIG_PROC_KCORE is not set +CONFIG_PROC_SYSCTL=y +# CONFIG_PROC_PAGE_MONITOR is not set +CONFIG_SYSFS=y +# CONFIG_HUGETLBFS is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_CONFIGFS_FS=m +CONFIG_MISC_FILESYSTEMS=y +CONFIG_ADFS_FS=m +# CONFIG_ADFS_FS_RW is not set +CONFIG_AFFS_FS=m +# CONFIG_ECRYPT_FS is not set +CONFIG_HFS_FS=m +CONFIG_HFSPLUS_FS=m +CONFIG_BEFS_FS=m +# CONFIG_BEFS_DEBUG is not set +CONFIG_BFS_FS=m +CONFIG_EFS_FS=m +CONFIG_JFFS2_FS=m +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +CONFIG_JFFS2_FS_WBUF_VERIFY=y +# CONFIG_JFFS2_SUMMARY is not set +CONFIG_JFFS2_FS_XATTR=y +# CONFIG_JFFS2_FS_POSIX_ACL is not set +# CONFIG_JFFS2_FS_SECURITY is not set +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_LZO=y +CONFIG_JFFS2_RTIME=y +CONFIG_JFFS2_RUBIN=y +# CONFIG_JFFS2_CMODE_NONE is not set +CONFIG_JFFS2_CMODE_PRIORITY=y +# CONFIG_JFFS2_CMODE_SIZE is not set +# CONFIG_JFFS2_CMODE_FAVOURLZO is not set +CONFIG_UBIFS_FS=m +CONFIG_UBIFS_FS_XATTR=y +CONFIG_UBIFS_FS_ADVANCED_COMPR=y +CONFIG_UBIFS_FS_LZO=y +CONFIG_UBIFS_FS_ZLIB=y +# CONFIG_UBIFS_FS_DEBUG is not set +CONFIG_LOGFS=m +CONFIG_CRAMFS=m +CONFIG_SQUASHFS=m +# CONFIG_SQUASHFS_XATTR is not set +# CONFIG_SQUASHFS_LZO is not set +# CONFIG_SQUASHFS_XZ is not set +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +CONFIG_VXFS_FS=m +CONFIG_MINIX_FS=m +CONFIG_OMFS_FS=m +CONFIG_HPFS_FS=m +CONFIG_QNX4FS_FS=m +CONFIG_ROMFS_FS=m +CONFIG_ROMFS_BACKED_BY_BLOCK=y +# CONFIG_ROMFS_BACKED_BY_MTD is not set +# CONFIG_ROMFS_BACKED_BY_BOTH is not set +CONFIG_ROMFS_ON_BLOCK=y +CONFIG_SYSV_FS=m +CONFIG_UFS_FS=m +# CONFIG_UFS_FS_WRITE is not set +# CONFIG_UFS_DEBUG is not set +CONFIG_EXOFS_FS=m +# CONFIG_EXOFS_DEBUG is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +CONFIG_NFS_V3_ACL=y +# CONFIG_NFS_V4 is not set +CONFIG_NFS_FSCACHE=y +CONFIG_NFSD=m +CONFIG_NFSD_DEPRECATED=y +CONFIG_NFSD_V2_ACL=y +CONFIG_NFSD_V3=y +CONFIG_NFSD_V3_ACL=y +# CONFIG_NFSD_V4 is not set +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_NFS_ACL_SUPPORT=m +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=m +CONFIG_SUNRPC_GSS=m +CONFIG_SUNRPC_XPRT_RDMA=m +CONFIG_RPCSEC_GSS_KRB5=m +CONFIG_CEPH_FS=m +CONFIG_CIFS=m +CONFIG_CIFS_STATS=y +CONFIG_CIFS_STATS2=y +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_UPCALL is not set +CONFIG_CIFS_XATTR=y +CONFIG_CIFS_POSIX=y +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_DFS_UPCALL is not set +# CONFIG_CIFS_FSCACHE is not set +# CONFIG_CIFS_ACL is not set +CONFIG_CIFS_EXPERIMENTAL=y +CONFIG_NCP_FS=m +CONFIG_NCPFS_PACKET_SIGNING=y +CONFIG_NCPFS_IOCTL_LOCKING=y +CONFIG_NCPFS_STRONG=y +CONFIG_NCPFS_NFS_NS=y +CONFIG_NCPFS_OS2_NS=y +CONFIG_NCPFS_SMALLDOS=y +CONFIG_NCPFS_NLS=y +CONFIG_NCPFS_EXTRAS=y +CONFIG_CODA_FS=m +CONFIG_AFS_FS=m +# CONFIG_AFS_DEBUG is not set +CONFIG_AFS_FSCACHE=y + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_NLS=m +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m +CONFIG_DLM=m +# CONFIG_DLM_DEBUG is not set + +# +# Kernel hacking +# +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +# CONFIG_PRINTK_TIME is not set +# CONFIG_ENABLE_WARN_DEPRECATED is not set +# CONFIG_ENABLE_MUST_CHECK is not set +CONFIG_FRAME_WARN=1024 +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_STRIP_ASM_SYMS is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_HARDLOCKUP_DETECTOR is not set +CONFIG_BKL=y +# CONFIG_SPARSE_RCU_POINTER is not set +# CONFIG_DEBUG_MEMORY_INIT is not set +CONFIG_ARCH_WANT_FRAME_POINTERS=y +# CONFIG_FRAME_POINTER is not set +# CONFIG_SYSCTL_SYSCALL_CHECK is not set +CONFIG_USER_STACKTRACE_SUPPORT=y +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y +CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y +CONFIG_HAVE_C_RECORDMCOUNT=y +CONFIG_TRACING_SUPPORT=y +# CONFIG_FTRACE is not set +# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set +# CONFIG_FIREWIRE_OHCI_REMOTE_DMA is not set +# CONFIG_DMA_API_DEBUG is not set +# CONFIG_ATOMIC64_SELFTEST is not set +CONFIG_ASYNC_RAID6_TEST=m +# CONFIG_SAMPLES is not set +CONFIG_HAVE_ARCH_KGDB=y +CONFIG_HAVE_ARCH_KMEMCHECK=y +# CONFIG_STRICT_DEVMEM is not set +# CONFIG_X86_VERBOSE_BOOTUP is not set +# CONFIG_EARLY_PRINTK is not set +# CONFIG_DOUBLEFAULT is not set +# CONFIG_IOMMU_STRESS is not set +CONFIG_HAVE_MMIOTRACE_SUPPORT=y +CONFIG_IO_DELAY_TYPE_0X80=0 +CONFIG_IO_DELAY_TYPE_0XED=1 +CONFIG_IO_DELAY_TYPE_UDELAY=2 +CONFIG_IO_DELAY_TYPE_NONE=3 +CONFIG_IO_DELAY_0X80=y +# CONFIG_IO_DELAY_0XED is not set +# CONFIG_IO_DELAY_UDELAY is not set +# CONFIG_IO_DELAY_NONE is not set +CONFIG_DEFAULT_IO_DELAY_TYPE=0 +CONFIG_OPTIMIZE_INLINING=y + +# +# Security options +# +CONFIG_KEYS=y +# CONFIG_KEYS_DEBUG_PROC_KEYS is not set +# CONFIG_SECURITY_DMESG_RESTRICT is not set +# CONFIG_SECURITY is not set +CONFIG_SECURITYFS=y +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY="" +CONFIG_XOR_BLOCKS=m +CONFIG_ASYNC_CORE=m +CONFIG_ASYNC_MEMCPY=m +CONFIG_ASYNC_XOR=m +CONFIG_ASYNC_PQ=m +CONFIG_ASYNC_RAID6_RECOV=m +CONFIG_ASYNC_TX_DISABLE_PQ_VAL_DMA=y +CONFIG_ASYNC_TX_DISABLE_XOR_VAL_DMA=y +CONFIG_CRYPTO=y + +# +# Crypto core or helper +# +CONFIG_CRYPTO_ALGAPI=m +CONFIG_CRYPTO_ALGAPI2=m +CONFIG_CRYPTO_AEAD=m +CONFIG_CRYPTO_AEAD2=m +CONFIG_CRYPTO_BLKCIPHER=m +CONFIG_CRYPTO_BLKCIPHER2=m +CONFIG_CRYPTO_HASH=m +CONFIG_CRYPTO_HASH2=m +CONFIG_CRYPTO_RNG=m +CONFIG_CRYPTO_RNG2=m +CONFIG_CRYPTO_PCOMP=m +CONFIG_CRYPTO_PCOMP2=m +CONFIG_CRYPTO_MANAGER=m +CONFIG_CRYPTO_MANAGER2=m +CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y +CONFIG_CRYPTO_GF128MUL=m +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_WORKQUEUE=m +CONFIG_CRYPTO_CRYPTD=m +CONFIG_CRYPTO_AUTHENC=m +# CONFIG_CRYPTO_TEST is not set + +# +# Authenticated Encryption with Associated Data +# +CONFIG_CRYPTO_CCM=m +CONFIG_CRYPTO_GCM=m +CONFIG_CRYPTO_SEQIV=m + +# +# Block modes +# +CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_CTR=m +CONFIG_CRYPTO_CTS=m +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_XTS=m + +# +# Hash modes +# +CONFIG_CRYPTO_HMAC=m +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_VMAC=m + +# +# Digest +# +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_CRC32C_INTEL=m +CONFIG_CRYPTO_GHASH=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_RMD128=m +CONFIG_CRYPTO_RMD160=m +CONFIG_CRYPTO_RMD256=m +CONFIG_CRYPTO_RMD320=m +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_TGR192=m +CONFIG_CRYPTO_WP512=m + +# +# Ciphers +# +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_AES_586=m +CONFIG_CRYPTO_ANUBIS=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_SALSA20=m +CONFIG_CRYPTO_SALSA20_586=m +CONFIG_CRYPTO_SEED=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_TWOFISH_586=m + +# +# Compression +# +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_ZLIB=m +CONFIG_CRYPTO_LZO=m + +# +# Random Number Generation +# +CONFIG_CRYPTO_ANSI_CPRNG=m +CONFIG_CRYPTO_HW=y +# CONFIG_CRYPTO_DEV_PADLOCK is not set +# CONFIG_CRYPTO_DEV_GEODE is not set +# CONFIG_CRYPTO_DEV_HIFN_795X is not set +CONFIG_HAVE_KVM=y +CONFIG_HAVE_KVM_IRQCHIP=y +CONFIG_HAVE_KVM_EVENTFD=y +CONFIG_KVM_APIC_ARCHITECTURE=y +CONFIG_KVM_MMIO=y +CONFIG_VIRTUALIZATION=y +CONFIG_KVM=m +CONFIG_KVM_INTEL=m +CONFIG_KVM_AMD=m +CONFIG_VHOST_NET=m +CONFIG_LGUEST=m +CONFIG_VIRTIO=m +CONFIG_VIRTIO_RING=m +CONFIG_VIRTIO_PCI=m +CONFIG_VIRTIO_BALLOON=m +# CONFIG_BINARY_PRINTF is not set + +# +# Library routines +# +CONFIG_RAID6_PQ=m +CONFIG_BITREVERSE=y +CONFIG_GENERIC_FIND_FIRST_BIT=y +CONFIG_GENERIC_FIND_NEXT_BIT=y +CONFIG_GENERIC_FIND_LAST_BIT=y +CONFIG_CRC_CCITT=y +CONFIG_CRC16=m +CONFIG_CRC_T10DIF=m +CONFIG_CRC_ITU_T=m +CONFIG_CRC32=y +CONFIG_CRC7=m +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=m +CONFIG_LZO_COMPRESS=m +CONFIG_LZO_DECOMPRESS=m +# CONFIG_XZ_DEC is not set +# CONFIG_XZ_DEC_BCJ is not set +CONFIG_DECOMPRESS_GZIP=y +CONFIG_DECOMPRESS_LZMA=y +CONFIG_GENERIC_ALLOCATOR=y +CONFIG_REED_SOLOMON=m +CONFIG_REED_SOLOMON_DEC16=y +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=m +CONFIG_TEXTSEARCH_BM=m +CONFIG_TEXTSEARCH_FSM=m +CONFIG_BTREE=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y +CONFIG_CHECK_SIGNATURE=y +CONFIG_NLATTR=y +CONFIG_LRU_CACHE=m diff -r c241da0f26a5 -r 5d8744871068 kernel-modular/stuff/linux-diff-2.6.37.u --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel-modular/stuff/linux-diff-2.6.37.u Tue Feb 01 09:37:33 2011 +0100 @@ -0,0 +1,40 @@ +--- linux-2.6.30.6/arch/x86/vdso/Makefile ++++ linux-2.6.30.6/arch/x86/vdso/Makefile +@@ -104,10 +104,12 @@ + $(foreach H,$(filter-out FORCE,$^),\ + if grep -q VDSO32_SYSENTER_RETURN $H; \ + then diff -u $(@D)/.tmp_$(@F) $H; \ +- else sed /VDSO32_SYSENTER_RETURN/d $(@D)/.tmp_$(@F) | \ +- diff -u - $H; fi &&) : ;\ ++ else sed /VDSO32_SYSENTER_RETURN/d $(@D)/.tmp_$(@F) > \ ++ $(@D)/.tmp_$(@F).$$ ; \ ++ diff -u $(@D)/.tmp_$(@F).$$ $H; fi &&) : ;\ + then mv -f $(@D)/.tmp_$(@F) $@; \ +- else rm -f $(@D)/.tmp_$(@F); exit 1; \ ++ else rm -f $(@D)/.tmp_$(@F)*; exit 1; \ ++ rm -f $(@D)/.tmp_$(@F)*; \ + fi + endef + + +--- linux-2.6.34/scripts/Makefile.lib ++++ linux-2.6.34/scripts/Makefile.lib +@@ -204,7 +204,8 @@ + # --------------------------------------------------------------------------- + + quiet_cmd_gzip = GZIP $@ +-cmd_gzip = (cat $(filter-out FORCE,$^) | gzip -f -9 > $@) || \ ++cmd_gzip = (cat $(filter-out FORCE,$^) | gzip -f -9 > $@) && \ ++ ( which advdef > /dev/null && advdef -z $@ ; true ) || \ + (rm -f $@ ; false) + + +@@ -238,7 +239,7 @@ + + quiet_cmd_lzma = LZMA $@ + cmd_lzma = (cat $(filter-out FORCE,$^) | \ +- lzma -9 && $(call size_append, $(filter-out FORCE,$^))) > $@ || \ ++ lzma e -si -so && $(call size_append, $(filter-out FORCE,$^))) > $@ || \ + (rm -f $@ ; false) + + quiet_cmd_lzo = LZO $@ diff -r c241da0f26a5 -r 5d8744871068 kernel-modular/stuff/linux-freeinitrd-2.6.37.u --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel-modular/stuff/linux-freeinitrd-2.6.37.u Tue Feb 01 09:37:33 2011 +0100 @@ -0,0 +1,129 @@ +--- linux-2.6.30.4/arch/x86/mm/init.c ++++ linux-2.6.30.4/arch/x86/mm/init.c +@@ -366,7 +366,7 @@ + */ + set_memory_rw(begin, (end - begin) >> PAGE_SHIFT); + +- printk(KERN_INFO "Freeing %s: %luk freed\n", what, (end - begin) >> 10); ++ if (what) printk(KERN_INFO "Freeing %s: %luk freed\n", what, (end - begin) >> 10); + + for (; addr < end; addr += PAGE_SIZE) { + ClearPageReserved(virt_to_page(addr)); + +--- linux-2.6.30.4/init/initramfs.c ++++ linux-2.6.30.4/init/initramfs.c +@@ -374,6 +374,52 @@ + [Reset] = do_reset, + }; + ++#include ++#define INITRD_PAGE ((PAGE_SIZE > 64*1024) ? PAGE_SIZE : 64*1024) ++#define INITRD_DOT (1024*1024) ++ ++static void free_rootfs_mem(unsigned long start, unsigned long end) ++{ ++ free_init_pages(NULL, start, end); ++} ++ ++static void _free_initrd(unsigned long initrd_start, unsigned long initrd_end, ++ void (*free_initrd_mem)(unsigned long, unsigned long)); ++ ++static struct { ++ int offset, last, inptr, freed; ++ char *max; ++} fill; ++ ++static void release_inbuf(unsigned n) ++{ ++ if (n >= INITRD_PAGE) { ++ unsigned rem = n % INITRD_PAGE; ++ unsigned end = initrd_start + n - rem; ++ _free_initrd(initrd_start, end, free_rootfs_mem); ++ fill.freed += n - rem; ++ if (fill.freed >= INITRD_DOT) { ++ fill.freed -= INITRD_DOT; ++ printk("."); ++ } ++ initrd_start = end; ++ fill.offset = rem; ++ } ++} ++ ++static int fill_buffer(void *buffer, unsigned size) ++{ ++ int max = fill.max - (char *) initrd_start - fill.offset; ++ if (max > size) max = size; ++ if (max > INITRD_PAGE) max = INITRD_PAGE; ++ memcpy(buffer, (void *)(initrd_start + fill.offset), max); ++ release_inbuf(fill.offset); ++ fill.offset += max; ++ fill.inptr += fill.last; ++ fill.last = max; ++ return max; ++} ++ + static int __init write_buffer(char *buf, unsigned len) + { + count = len; +@@ -418,6 +463,7 @@ + decompress_fn decompress; + const char *compress_name; + static __initdata char msg_buf[64]; ++ int early_free_initrd = (buf == (char *) initrd_start); + + header_buf = kmalloc(110, GFP_KERNEL); + symlink_buf = kmalloc(PATH_MAX + N_ALIGN(PATH_MAX) + 1, GFP_KERNEL); +@@ -431,11 +478,16 @@ + message = NULL; + while (!message && len) { + loff_t saved_offset = this_header; ++ fill.offset = buf - (char *) initrd_start; ++ fill.max = buf + len; ++ fill.inptr = fill.last = fill.freed = 0; + if (*buf == '0' && !(this_header & 3)) { + state = Start; + written = write_buffer(buf, len); + buf += written; + len -= written; ++ if (early_free_initrd) ++ release_inbuf(buf - (char *) initrd_start); + continue; + } + if (!*buf) { +@@ -447,7 +497,12 @@ + this_header = 0; + decompress = decompress_method(buf, len, &compress_name); + if (decompress) { +- res = decompress(buf, len, NULL, flush_buffer, NULL, ++ if (early_free_initrd) { ++ res = decompress(NULL, 0, fill_buffer, ++ flush_buffer, NULL, &my_inptr, error); ++ my_inptr += fill.inptr; ++ } ++ else res = decompress(buf, len, NULL, flush_buffer, NULL, + &my_inptr, error); + if (res) + error("decompressor failed"); +@@ -488,7 +546,8 @@ + #include + #include + +-static void __init free_initrd(void) ++static void _free_initrd(unsigned long initrd_start, unsigned long initrd_end, ++ void (*free_initrd_mem)(unsigned long, unsigned long)) + { + #ifdef CONFIG_KEXEC + unsigned long crashk_start = (unsigned long)__va(crashk_res.start); +@@ -516,6 +574,12 @@ + #endif + free_initrd_mem(initrd_start, initrd_end); + skip: ++ ; ++} ++ ++static void __init free_initrd(void) ++{ ++ _free_initrd(initrd_start, initrd_end, free_initrd_mem); + initrd_start = 0; + initrd_end = 0; + } diff -r c241da0f26a5 -r 5d8744871068 kernel-modular/stuff/linux-header-2.6.37.u --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel-modular/stuff/linux-header-2.6.37.u Tue Feb 01 09:37:33 2011 +0100 @@ -0,0 +1,469 @@ +--- linux-2.6.30.6/arch/x86/boot/header.S ++++ linux-2.6.30.6/arch/x86/boot/header.S +@@ -6,7 +6,7 @@ + * Based on bootsect.S and setup.S + * modified by more people than can be counted + * +- * Rewritten as a common file by H. Peter Anvin (Apr 2007) ++ * Rewritten Pascal Bellard (Nov 2009) + * + * BIG FAT NOTE: We're in real mode using 64k segments. Therefore segment + * addresses must be multiplied by 16 to obtain their respective linear +@@ -27,6 +27,8 @@ + + BOOTSEG = 0x07C0 /* original address of boot-sector */ + SYSSEG = 0x1000 /* historical load address >> 4 */ ++INITSEG = 0x9000 /* boot address >> 4 */ ++SETUPSEG = 0x9020 /* setup address >> 4 */ + + #ifndef SVGA_MODE + #define SVGA_MODE ASK_VGA +@@ -40,53 +42,412 @@ + #define ROOT_RDONLY 1 + #endif + ++/* some extra features */ ++#define EDIT_CMDLINE on hotkey ++#define SHOW_REGS show int13 status & parameters ++ + .code16 + .section ".bstext", "ax" + + .global bootsect_start + bootsect_start: ++ cld # assume nothing ++stacktop = 0x9E00 # in 0x8000 .. 0xA000 ++zeroed = 48+10 # gdt + zeroed registers ++ movw $stacktop-12-zeroed, %di # stacktop is an arbitrary value >= ++ # length of bootsect + length of ++ # setup + room for stack; ++ # 12 is disk parm size. ++ pushw $INITSEG ++ popw %es # %es = INITSEG ++ ++ pushw %es ++ popw %ss # %ss and %es already contain INITSEG ++ movw %di, %sp # put stack at INITSEG:stacktop-... ++ ++# Many BIOS's default disk parameter tables will not recognize ++# multi-sector reads beyond the maximum sector number specified ++# in the default diskette parameter tables - this may mean 7 ++# sectors in some cases. ++# ++# Since single sector reads are slow and out of the question, ++# we must take care of this by creating new parameter tables ++# (for the first disk) in RAM. We can set the maximum sector ++# count to 36 - the most we will encounter on an ED 2.88. ++# ++# High doesn't hurt. Low does. Let's use the max: 63 ++# ++# Segments are as follows: %es = %ss = INITSEG, ++ ++ xorw %ax, %ax # %ax = 0 ++ movw $zeroed/2, %cx # clear gdt + offset, %ds, limits ++ rep # don't worry about cld ++ stosw # already done above ++ popw %bx # offset = 0 ++ popw %ds # %ds = 0 ++ popw %gs # %gs = 0 ++ ++ movb setup_sects+0x7C00, %al # read bootsector + setup (%ds = 0) ++ incw %ax ++ ++ pushw %es ++ pushw %di # %ds:%bx+0x78 is parameter table address ++ ldsw 0x78(%bx), %si # %ds:%si is source ++ movb $6, %cl # copy 12 bytes ++ rep # don't worry about cld ++ movsw # already done above ++ popl %gs:0x78(%bx) # update parameter table address ++ pushw %es ++ popw %ds # now %ds = %es = %ss = INITSEG ++ movb $63, 0x4-12(%di) # patch sector count, %di = stacktop ++ cli ++ ++ xchg %ax, %di # sector count ++ popw %ax # limits = 0 ++ incw %cx # cylinder 0, sector 1 ++ call read_first_sectors # read setup ++ ++offset_version = 0xE ++ movw $0x200,%si ++ addw offset_version(%si),%si # starting protocol 2.00, Kernel 1.3.73 ++ call putstr # show which kernel we are loading ++ ++# The cmdline can be entered and modifed at boot time. ++# Only characters before the cursor are passed to the kernel. ++ popw %bx # clear %bx ++ orw cmd_line_ptr, %bx ++ jz nocmdline ++ pushw %bx ++ incw %di ++ call read_sectors ++ popw %si ++ call putstr ++#ifdef EDIT_CMDLINE ++cmdlp: ++ movb $0x20, %al # clear end of line ++ int $0x10 # with Space ++ movb $8, %al # and BackSpace ++ int $0x10 ++ decw %si ++cmdget: ++ call wait4key ++ cmpb $8, %al # BackSpace ? ++ je cmdbs ++ movb %al, (%si) # store char ++ lodsw # %si += 2 ++cmdbs: ++#if 1 ++ cmpw %si,cmd_line_ptr ++ je cmdget ++#endif ++ call putc # set %ah and %bx ++ cmpb $10, %al # Enter ? ++ jne cmdlp ++ movb %bh,-2(%si) # set end of string and remove CR ++endcmdline: ++#endif ++nocmdline: + +- # Normalize the start address +- ljmp $BOOTSEG, $start2 +- +-start2: +- movw %cs, %ax +- movw %ax, %ds +- movw %ax, %es +- movw %ax, %ss +- xorw %sp, %sp +- sti +- cld +- +- movw $bugger_off_msg, %si ++# This routine loads the system at address SYSSEG, making sure ++# no 64kB boundaries are crossed. We try to load it as fast as ++# possible, loading whole tracks whenever we can. ++ ++ramdisk_image = 0x0218 ++ramdisk_size = 0x021C ++ movw %sp, %si # for bootsect_gdt ++ decw 16(%si) # bootsect_src = 64Kb ++ decw 24(%si) # bootsect_dst = 64Kb ++ movw $syssize, %di ++type_of_loader = 0x210 ++loadflags = 0x211 ++heap_end_ptr = 0x224 ++ksyssize = 500 ++ orw $0x80FF, type_of_loader-ksyssize(%di) # loader type = 0xFF ++ movw $stacktop-0x200, heap_end_ptr-ksyssize(%di) ++ movb $0x10, %al # destination = 0x100000 ++ movb $5, %cl ++initrdlp: ++ decw %ax ++ movb $0x93,%ah ++ movw %ax, 28(%si) # bootsect_dst_base+2 ++ movb $(SYSSEG/4096), %al # source = SYSSEG ++ movw %ax, 20(%si) # bootsect_src_base+2 ++ cbw ++ cwde ++ shlw %cl, %ax ++ decw %ax ++ addl (%di),%eax ++ shrl %cl, %eax ++syslp: ++ pushw $SYSSEG ++ popw %es ++ movw $128,%di # 64Kb ++ subw %di, %ax # max 32M > int 15 limit ++ pushf ++ jnc not_last ++ addw %ax, %di ++not_last: ++ xorw %bx, %bx # clear %bx ++ pushw %ax ++#if defined(SHOW_REGS) ++ pushw %si ++ call read_sectors ++ popw %si ++#else ++ call read_sectors ++#endif ++ movw $0x8000, %cx # full 64K ++ movb $0x87, %ah ++ incb 28(%si) # bootsect_dst_base+2 ++ int $0x15 # max 16M ++ popw %ax ++ popf ++ ja syslp ++ movw ramdisk_image+2,%ax ++ movw $ramdisk_size,%di ++ movb $9, %cl ++ cmpb %al,28(%si) ++ jb initrdlp ++ ++# This procedure turns off the floppy drive motor, so ++# that we enter the kernel in a known state, and ++# don't have to worry about it later. ++ ++#if 1 ++kill_motor: ++ xchgw %ax, %bx # reset FDC ++ int $0x13 ++#else ++kill_motor: ++ movw $0x3f2, %dx ++ xchgw %ax, %bx ++ outb %al, %dx ++#endif + +-msg_loop: +- lodsb +- andb %al, %al +- jz bs_die +- movb $0xe, %ah +- movw $7, %bx ++# After that (everything loaded), we jump to the setup-routine ++# loaded directly after the bootblock: ++# Segments are as follows: %ds = %ss = INITSEG ++ ++ ljmp $SETUPSEG, $0 ++ ++# read_sectors reads %di sectors into %es:0 buffer. ++# %es:0 is updated to the next memory location. ++# First, sectors are read sector by sector until ++# sector per track count is known. Then they are ++# read track by track. ++# Assume no error on first track. ++ ++#define FLOPPY_CYLINDERS 80 /* 80 cylinders minimum */ ++#define FLOPPY_HEADS 2 /* 2 heads minimum */ ++#define FLOPPY_SECTORS 18 /* 18 sectors minimum */ ++ ++#ifdef SHOW_REGS ++print_loop: ++ movb $0x6 + 'A' - 1, %al ++ subb %cl, %al ++ movw $regs, %si # caller %si is saved ++ call putcs # putc(%al) + putstr(%si) ++# it will print out all of the registers. ++ popw %bp # load word into %si ++ jmp print_all # print %bp (status) ++#endif ++check_limits: ++#ifndef SHOW_REGS ++ popw %dx ++#endif ++ cmpb $FLOPPY_SECTORS+1, %cl # 18 sectors minimum ++ jb check_head ++ cmpb %al, %cl # max sector known ? ++ ja next_head # no -> store it ++check_head: ++ cmpb $FLOPPY_HEADS, %dh # 2 heads minimum ++ jb check_cylinder ++ cmpb %ah, %dh # max head known ? ++ ja next_cylinder # no -> store it ++check_cylinder: ++ pushaw ++#ifdef SHOW_REGS ++ cmpw $0x600,%bp # disk changed ? ++ je reset_floppy ++ pushw %es # print %es (named EX) ++ pushw %dx # print %dx ++ pushw %cx # print %cx ++ pushw %bx # print %bx ++ xchgw %ax, %si ++ movb $2,%ah ++ pushw %ax # print %ax ++ movb $6,%cl ++print_all: ++ movb $4, %ch # 4 hex digits ++print_digit: ++ rolw $4, %bp # rotate to use low 4 bits ++ movb $0x0f, %al ++ andw %bp, %ax # %al = mask for nybble ++ addb $0x90, %al # convert %al to ascii hex ++ daa # in only four instructions! ++ adcb $0x40, %al ++ daa ++ call putc # set %ah and %bx ++ decb %ch ++ jnz print_digit ++ movb $0x20, %al # SPACE + int $0x10 +- jmp msg_loop +- +-bs_die: +- # Allow the user to press a key, then reboot +- xorw %ax, %ax ++ loop print_loop ++ call wait ++ cbw # %ah = 0 ++reset_floppy: ++#else ++ cbw # %ah = 0 ++#endif ++ int $0x13 # reset controler ++ popaw ++read_sectorslp: ++ pushw %dx # some bios break dx... ++ pushw %ax # limits ++ subb %cl, %al # sectors remaining in track ++ ja tolastsect ++ movb $1, %al # 1 sector mini ++tolastsect: ++ cbw ++ cmpw %di, %ax ++ jb more1trk ++ movw %di, %ax # sectors to read ++more1trk: ++ pushw %ax # save context ++ movb $2, %ah # cmd: read chs ++ int $0x13 ++#ifdef SHOW_REGS ++ xchgw %ax, %bp # status ++#endif ++# ifdef SHOW_REGS ++ popw %si # save %ax ++ popw %ax # limits ++ popw %dx ++# else ++ popw %dx # save %ax ++ popw %ax # limits ++# endif ++ jc check_limits ++ xchgw %ax, %bp ++# ifdef SHOW_REGS ++update_regs: ++ incw %cx # next sector ++ movw %cx, %fs ++ addb $2,%bh # next location ++ decw %di # update sector counter ++ jz putcdot ++ decw %si ++ jnz update_regs ++# else ++ addw %dx,%cx # next sector ++ addb %dl,%bh ++ addb %dl,%bh # next location ++ subw %dx,%di # update sector counter ++ popw %dx ++ jz putcdot ++# endif ++read_sectors: ++ movw %fs, %cx ++ xchgw %ax, %bp ++ cmpb %al,%cl # reach sector limit ? ++ jne bdendlp ++next_head: ++ movb %cl,%al ++ incb %dh # next head ++ movb $1,%cl # first sector ++ cmpb %ah, %dh # reach head limit ? ++ jne bdendlp ++next_cylinder: ++ movb %dh,%ah ++# NOTE : support 256 cylinders max ++ incb %ch # next cylinder ++read_first_sectors: ++ movb $0,%dh # first head ++cylinder_count = 496 ++ cmpb $FLOPPY_CYLINDERS,%ch # reach cylinder limit ? ++ jb bdendlp ++ cmpb cylinder_count, %ch ++ jb bdendlp ++next_floppy: ++ movb $0,%ch # first cylinder ++ pushaw ++ movw $swap_floppy,%si ++ incb 12(%si) ++ pushw %bx ++ call putstr ++ popw %bx ++waitfloppy: ++ call wait ++ jne waitfloppydone ++ pushw %dx # some bios break dx... ++ cbw ++ int $0x13 # reset FDC ++ movw $0x201,%ax ++# cwd ++# movw $1,%cx ++ int $0x13 # read first sector ++ popw %dx ++ rclb $1,%ah # floppy changed 06=>0D no error 00 ++ cmpb -2(%si), %ah # 0D then 00 ++ jne waitfloppy # no => try again ++ incw %si ++ orb %ah,%ah # was 00 ? ++ jne waitfloppy ++waitfloppydone: ++ popaw ++bdendlp: ++ jmp read_sectorslp ++ ++putcdot: ++ pushw %ss ++ popw %es # restore es ++ movb $0x2e+3, %al # loading... message 2e = . ++putclf: ++ subb $3, %al ++putc: ++ movb $0xe, %ah ++ movw $7, %bx # one dot each 64k ++ int $0x10 ++ cmp $0xd, %al # CR ? ++ je putclf ++ ret ++ ++putstr: ++ movb $0xd, %al # CR ++putcs: ++ call putc ++ lodsb ++ orb %al,%al # end of string is \0 ++ jnz putcs ++ ret ++ ++clock = 0x46C ++wait: ++wait4key: ++ movw $clock, %di ++#define DELAY 5 ++ movb $(DELAY*182)/10,%cl ++ addb %gs:(%di),%cl ++waitkbd: ++ movw $0x10D, %ax # test keyboard, timeout => CR ++ cmpb %gs:(%di),%cl ++ je waitdone + int $0x16 +- int $0x19 ++ jz waitkbd ++ cbw ++ int $0x16 # eat char ++ movw %di, %gs # disable timeout ++ incw %di # clear Z ++waitdone: ++ ret + +- # int 0x19 should never return. In case it does anyway, +- # invoke the BIOS reset code... +- ljmp $0xf000,$0xfff0 +- +- .section ".bsdata", "a" +-bugger_off_msg: +- .ascii "Direct booting from floppy is no longer supported.\r\n" +- .ascii "Please use a boot loader program instead.\r\n" +- .ascii "\n" +- .ascii "Remove disk and press any key to reboot . . .\r\n" +- .byte 0 ++#ifdef SHOW_REGS ++regs: .asciz "X:" ++#endif + ++swap_floppy: .ascii "Insert disk 1" ++ .ascii "." ++ .byte 7,13,0 + + # Kernel attributes; used by setup. This is part 1 of the + # header, from the old boot sector. diff -r c241da0f26a5 -r 5d8744871068 kernel-modular/stuff/linux-squashfs-lzma-2.6.34.u --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel-modular/stuff/linux-squashfs-lzma-2.6.34.u Tue Feb 01 09:37:33 2011 +0100 @@ -0,0 +1,649 @@ +--- linux-2.6.30.6/include/linux/decompress/bunzip2_mm.h ++++ linux-2.6.30.6/include/linux/decompress/bunzip2_mm.h +@@ -0,0 +1,13 @@ ++#ifndef BUNZIP2_MM_H ++#define BUNZIP2_MM_H ++ ++#ifdef STATIC ++/* Code active when included from pre-boot environment: */ ++#define INIT ++#else ++/* Compile for initramfs/initrd code only */ ++#define INIT __init ++static void(*error)(char *m); ++#endif ++ ++#endif + +--- linux-2.6.30.6/include/linux/decompress/inflate_mm.h ++++ linux-2.6.30.6/include/linux/decompress/inflate_mm.h +@@ -0,0 +1,13 @@ ++#ifndef INFLATE_MM_H ++#define INFLATE_MM_H ++ ++#ifdef STATIC ++/* Code active when included from pre-boot environment: */ ++#define INIT ++#else ++/* Compile for initramfs/initrd code only */ ++#define INIT __init ++static void(*error)(char *m); ++#endif ++ ++#endif + +#--- linux-2.6.30.6/include/linux/decompress/mm.h +#+++ linux-2.6.30.6/include/linux/decompress/mm.h +@@ -63,8 +63,6 @@ + + #define set_error_fn(x) + +-#define INIT +- + #else /* STATIC */ + + /* Code active when compiled standalone for use when loading ramdisk: */ +@@ -84,10 +82,8 @@ + #define large_malloc(a) vmalloc(a) + #define large_free(a) vfree(a) + +-static void(*error)(char *m); + #define set_error_fn(x) error = x; + +-#define INIT __init + #define STATIC + + #include + +--- linux-2.6.30.6/include/linux/decompress/unlzma_mm.h ++++ linux-2.6.30.6/include/linux/decompress/unlzma_mm.h +@@ -0,0 +1,20 @@ ++#ifndef UNLZMA_MM_H ++#define UNLZMA_MM_H ++ ++#ifdef STATIC ++ ++/* Code active when included from pre-boot environment: */ ++#define INIT ++ ++#elif defined(CONFIG_DECOMPRESS_LZMA_NEEDED) ++ ++/* Make it available to non initramfs/initrd code */ ++#define INIT ++#include ++#else ++ ++/* Compile for initramfs/initrd code only */ ++#define INIT __init ++#endif ++ ++#endif + +--- linux-2.6.30.6/lib/Kconfig ++++ linux-2.6.30.6/lib/Kconfig +@@ -117,6 +117,9 @@ + config DECOMPRESS_LZMA + tristate + ++config DECOMPRESS_LZMA_NEEDED ++ boolean ++ + config DECOMPRESS_LZO + select LZO_DECOMPRESS + tristate + +--- linux-2.6.30.6/lib/decompress_bunzip2.c ++++ linux-2.6.30.6/lib/decompress_bunzip2.c +@@ -52,6 +52,7 @@ + #include + #endif /* STATIC */ + ++#include + #include + + #ifndef INT_MAX + +--- linux-2.6.30.6/lib/decompress_inflate.c ++++ linux-2.6.30.6/lib/decompress_inflate.c +@@ -23,6 +23,7 @@ + + #endif /* STATIC */ + ++#include + #include + + #define GZIP_IOBUF_SIZE (16*1024) + +--- linux-2.6.30.6/lib/decompress_unlzma.c ++++ linux-2.6.30.6/lib/decompress_unlzma.c +@@ -36,6 +36,7 @@ + #include + #endif /* STATIC */ + ++#include + #include + + #define MIN(a, b) (((a) < (b)) ? (a) : (b)) +@@ -88,7 +89,7 @@ + } + + /* Called twice: once at startup and once in rc_normalize() */ +-static void INIT rc_read(struct rc *rc) ++static void INIT rc_read(struct rc *rc, void(*error)(char *x)) + { + rc->buffer_size = rc->fill((char *)rc->buffer, LZMA_IOBUF_SIZE); + if (rc->buffer_size <= 0) +@@ -115,13 +116,13 @@ + rc->range = 0xFFFFFFFF; + } + +-static inline void INIT rc_init_code(struct rc *rc) ++static inline void INIT rc_init_code(struct rc *rc, void(*error)(char *x)) + { + int i; + + for (i = 0; i < 5; i++) { + if (rc->ptr >= rc->buffer_end) +- rc_read(rc); ++ rc_read(rc, error); + rc->code = (rc->code << 8) | *rc->ptr++; + } + } +@@ -134,32 +135,33 @@ + } + + /* Called twice, but one callsite is in inline'd rc_is_bit_0_helper() */ +-static void INIT rc_do_normalize(struct rc *rc) ++static void INIT rc_do_normalize(struct rc *rc, void(*error)(char *x)) + { + if (rc->ptr >= rc->buffer_end) +- rc_read(rc); ++ rc_read(rc, error); + rc->range <<= 8; + rc->code = (rc->code << 8) | *rc->ptr++; + } +-static inline void INIT rc_normalize(struct rc *rc) ++static inline void INIT rc_normalize(struct rc *rc, void(*error)(char *x)) + { + if (rc->range < (1 << RC_TOP_BITS)) +- rc_do_normalize(rc); ++ rc_do_normalize(rc, error); + } + + /* Called 9 times */ + /* Why rc_is_bit_0_helper exists? + *Because we want to always expose (rc->code < rc->bound) to optimizer + */ +-static inline uint32_t INIT rc_is_bit_0_helper(struct rc *rc, uint16_t *p) ++static inline uint32_t INIT rc_is_bit_0_helper(struct rc *rc, uint16_t *p, ++ void (*error)(char *x)) + { +- rc_normalize(rc); ++ rc_normalize(rc, error); + rc->bound = *p * (rc->range >> RC_MODEL_TOTAL_BITS); + return rc->bound; + } +-static inline int INIT rc_is_bit_0(struct rc *rc, uint16_t *p) ++static inline int INIT rc_is_bit_0(struct rc *rc, uint16_t *p, void(*error)(char *x)) + { +- uint32_t t = rc_is_bit_0_helper(rc, p); ++ uint32_t t = rc_is_bit_0_helper(rc, p, error); + return rc->code < t; + } + +@@ -177,9 +179,9 @@ + } + + /* Called 4 times in unlzma loop */ +-static int INIT rc_get_bit(struct rc *rc, uint16_t *p, int *symbol) ++static int INIT rc_get_bit(struct rc *rc, uint16_t *p, int *symbol, void(*error)(char *x)) + { +- if (rc_is_bit_0(rc, p)) { ++ if (rc_is_bit_0(rc, p, error)) { + rc_update_bit_0(rc, p); + *symbol *= 2; + return 0; +@@ -191,9 +193,9 @@ + } + + /* Called once */ +-static inline int INIT rc_direct_bit(struct rc *rc) ++static inline int INIT rc_direct_bit(struct rc *rc , void(*error)(char *x)) + { +- rc_normalize(rc); ++ rc_normalize(rc, error); + rc->range >>= 1; + if (rc->code >= rc->range) { + rc->code -= rc->range; +@@ -204,13 +206,14 @@ + + /* Called twice */ + static inline void INIT +-rc_bit_tree_decode(struct rc *rc, uint16_t *p, int num_levels, int *symbol) ++rc_bit_tree_decode(struct rc *rc, uint16_t *p, int num_levels, int *symbol, ++ void(*error)(char *x)) + { + int i = num_levels; + + *symbol = 1; + while (i--) +- rc_get_bit(rc, p + *symbol, symbol); ++ rc_get_bit(rc, p + *symbol, symbol, error); + *symbol -= 1 << num_levels; + } + +@@ -406,7 +409,8 @@ + static inline void INIT process_bit0(struct writer *wr, struct rc *rc, + struct cstate *cst, uint16_t *p, + int pos_state, uint16_t *prob, +- int lc, uint32_t literal_pos_mask) { ++ int lc, uint32_t literal_pos_mask, ++ void(*error)(char *x)) { + int mi = 1; + static const int state[LZMA_NUM_STATES] = + { 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 4, 5 }; +@@ -427,7 +431,7 @@ + match_byte <<= 1; + bit = match_byte & 0x100; + prob_lit = prob + 0x100 + bit + mi; +- if (rc_get_bit(rc, prob_lit, &mi)) { ++ if (rc_get_bit(rc, prob_lit, &mi, error)) { + if (!bit) + break; + } else { +@@ -438,7 +442,7 @@ + } + while (mi < 0x100) { + uint16_t *prob_lit = prob + mi; +- rc_get_bit(rc, prob_lit, &mi); ++ rc_get_bit(rc, prob_lit, &mi, error); + } + write_byte(wr, mi); + cst->state = state[cst->state]; +@@ -446,7 +453,8 @@ + + static inline void INIT process_bit1(struct writer *wr, struct rc *rc, + struct cstate *cst, uint16_t *p, +- int pos_state, uint16_t *prob) { ++ int pos_state, uint16_t *prob, ++ void(*error)(char *x)) { + int offset; + uint16_t *prob_len; + int num_bits; +@@ -454,7 +459,7 @@ + + rc_update_bit_1(rc, prob); + prob = p + LZMA_IS_REP + cst->state; +- if (rc_is_bit_0(rc, prob)) { ++ if (rc_is_bit_0(rc, prob, error)) { + rc_update_bit_0(rc, prob); + cst->rep3 = cst->rep2; + cst->rep2 = cst->rep1; +@@ -464,13 +469,13 @@ + } else { + rc_update_bit_1(rc, prob); + prob += LZMA_IS_REP_G0 - LZMA_IS_REP; +- if (rc_is_bit_0(rc, prob)) { ++ if (rc_is_bit_0(rc, prob, error)) { + rc_update_bit_0(rc, prob); + prob = (p + LZMA_IS_REP_0_LONG + + (cst->state << + LZMA_NUM_POS_BITS_MAX) + + pos_state); +- if (rc_is_bit_0(rc, prob)) { ++ if (rc_is_bit_0(rc, prob, error)) { + rc_update_bit_0(rc, prob); + + cst->state = cst->state < LZMA_NUM_LIT_STATES ? +@@ -485,13 +490,13 @@ + + rc_update_bit_1(rc, prob); + prob += LZMA_IS_REP_G1 - LZMA_IS_REP_G0; +- if (rc_is_bit_0(rc, prob)) { ++ if (rc_is_bit_0(rc, prob, error)) { + rc_update_bit_0(rc, prob); + distance = cst->rep1; + } else { + rc_update_bit_1(rc, prob); + prob += LZMA_IS_REP_G2 - LZMA_IS_REP_G1; +- if (rc_is_bit_0(rc, prob)) { ++ if (rc_is_bit_0(rc, prob, error)) { + rc_update_bit_0(rc, prob); + distance = cst->rep2; + } else { +@@ -509,7 +514,7 @@ + } + + prob_len = prob + LZMA_LEN_CHOICE; +- if (rc_is_bit_0(rc, prob_len)) { ++ if (rc_is_bit_0(rc, prob_len, error)) { + rc_update_bit_0(rc, prob_len); + prob_len += LZMA_LEN_LOW - LZMA_LEN_CHOICE + + (pos_state << +@@ -519,7 +524,7 @@ + } else { + rc_update_bit_1(rc, prob_len); + prob_len += LZMA_LEN_CHOICE_2 - LZMA_LEN_CHOICE; +- if (rc_is_bit_0(rc, prob_len)) { ++ if (rc_is_bit_0(rc, prob_len, error)) { + rc_update_bit_0(rc, prob_len); + prob_len += LZMA_LEN_MID - LZMA_LEN_CHOICE_2 + + (pos_state << +@@ -535,7 +540,7 @@ + } + } + +- rc_bit_tree_decode(rc, prob_len, num_bits, &len); ++ rc_bit_tree_decode(rc, prob_len, num_bits, &len, error); + len += offset; + + if (cst->state < 4) { +@@ -550,7 +555,7 @@ + << LZMA_NUM_POS_SLOT_BITS); + rc_bit_tree_decode(rc, prob, + LZMA_NUM_POS_SLOT_BITS, +- &pos_slot); ++ &pos_slot, error); + if (pos_slot >= LZMA_START_POS_MODEL_INDEX) { + int i, mi; + num_bits = (pos_slot >> 1) - 1; +@@ -563,7 +568,7 @@ + num_bits -= LZMA_NUM_ALIGN_BITS; + while (num_bits--) + cst->rep0 = (cst->rep0 << 1) | +- rc_direct_bit(rc); ++ rc_direct_bit(rc, error); + prob = p + LZMA_ALIGN; + cst->rep0 <<= LZMA_NUM_ALIGN_BITS; + num_bits = LZMA_NUM_ALIGN_BITS; +@@ -571,7 +576,7 @@ + i = 1; + mi = 1; + while (num_bits--) { +- if (rc_get_bit(rc, prob + mi, &mi)) ++ if (rc_get_bit(rc, prob + mi, &mi, error)) + cst->rep0 |= i; + i <<= 1; + } +@@ -588,12 +593,12 @@ + + + +-STATIC inline int INIT unlzma(unsigned char *buf, int in_len, ++STATIC int INIT unlzma(unsigned char *buf, int in_len, + int(*fill)(void*, unsigned int), + int(*flush)(void*, unsigned int), + unsigned char *output, + int *posp, +- void(*error_fn)(char *x) ++ void(*error)(char *x) + ) + { + extern int cpio_flush_buffer(void*, unsigned int); +@@ -610,7 +615,6 @@ + unsigned char *inbuf; + int ret = -1; + +- set_error_fn(error_fn); + + if (buf) + inbuf = buf; +@@ -638,7 +642,7 @@ + + for (i = 0; i < sizeof(header); i++) { + if (rc.ptr >= rc.buffer_end) +- rc_read(&rc); ++ rc_read(&rc, error); + ((unsigned char *)&header)[i] = *rc.ptr++; + } + +@@ -683,17 +687,17 @@ + for (i = 0; i < num_probs; i++) + p[i] = (1 << RC_MODEL_TOTAL_BITS) >> 1; + wr.max_index = wr.next_index = 0; +- rc_init_code(&rc); ++ rc_init_code(&rc, error); + + while (get_pos(&wr) < header.dst_size) { + int pos_state = get_pos(&wr) & pos_state_mask; + uint16_t *prob = p + LZMA_IS_MATCH + + (cst.state << LZMA_NUM_POS_BITS_MAX) + pos_state; +- if (rc_is_bit_0(&rc, prob)) ++ if (rc_is_bit_0(&rc, prob, error)) + process_bit0(&wr, &rc, &cst, p, pos_state, prob, +- lc, literal_pos_mask); ++ lc, literal_pos_mask, error); + else { +- process_bit1(&wr, &rc, &cst, p, pos_state, prob); ++ process_bit1(&wr, &rc, &cst, p, pos_state, prob, error); + if (cst.rep0 == 0) + break; + } +@@ -727,6 +731,9 @@ + exit_0: + return ret; + } ++#if defined(CONFIG_DECOMPRESS_LZMA_NEEDED) && !defined(PREBOOT) ++EXPORT_SYMBOL(unlzma); ++#endif + + #ifdef PREBOOT + STATIC int INIT decompress(unsigned char *buf, int in_len, + +--- linux-2.6.34/fs/squashfs/Kconfig ++++ linux-2.6.34/fs/squashfs/Kconfig +@@ -26,6 +26,12 @@ + + If unsure, say N. + ++config SQUASHFS_LZMA ++ bool "Include support for LZMA compressed file systems" ++ depends on SQUASHFS ++ select DECOMPRESS_LZMA ++ select DECOMPRESS_LZMA_NEEDED ++ + config SQUASHFS_EMBEDDED + + bool "Additional option for memory-constrained systems" + +--- linux-2.6.34/fs/squashfs/Makefile ++++ linux-2.6.34/fs/squashfs/Makefile +@@ -5,3 +5,4 @@ + obj-$(CONFIG_SQUASHFS) += squashfs.o + squashfs-y += block.o cache.o dir.o export.o file.o fragment.o id.o inode.o + squashfs-y += namei.o super.o symlink.o zlib_wrapper.o decompressor.o ++squashfs-$(CONFIG_SQUASHFS_LZMA) += lzma_wrapper.o + +--- linux-2.6.34/fs/squashfs/decompressor.c ++++ linux-2.6.34/fs/squashfs/decompressor.c +@@ -50,7 +50,11 @@ + + static const struct squashfs_decompressor *decompressor[] = { + &squashfs_zlib_comp_ops, ++#ifdef CONFIG_SQUASHFS_LZMA ++ &squashfs_lzma_comp_ops, ++#else + &squashfs_lzma_unsupported_comp_ops, ++#endif + &squashfs_lzo_unsupported_comp_ops, + &squashfs_unknown_comp_ops + }; + +--- linux-2.6.34/fs/squashfs/lzma_wrapper.c ++++ linux-2.6.34/fs/squashfs/lzma_wrapper.c +@@ -0,0 +1,152 @@ ++/* ++ * Squashfs - a compressed read only filesystem for Linux ++ * ++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 ++ * Phillip Lougher ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version 2, ++ * or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ++ * ++ * lzma_wrapper.c ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "squashfs_fs.h" ++#include "squashfs_fs_sb.h" ++#include "squashfs_fs_i.h" ++#include "squashfs.h" ++#include "decompressor.h" ++ ++struct squashfs_lzma { ++ void *input; ++ void *output; ++}; ++ ++/* decompress_unlzma.c is currently non re-entrant... */ ++DEFINE_MUTEX(lzma_mutex); ++ ++/* decompress_unlzma.c doesn't provide any context in its callbacks... */ ++static int lzma_error; ++ ++static void error(char *m) ++{ ++ ERROR("unlzma error: %s\n", m); ++ lzma_error = 1; ++} ++ ++ ++static void *lzma_init(struct squashfs_sb_info *msblk) ++{ ++ struct squashfs_lzma *stream = kzalloc(sizeof(*stream), GFP_KERNEL); ++ if (stream == NULL) ++ goto failed; ++ stream->input = vmalloc(msblk->block_size); ++ if (stream->input == NULL) ++ goto failed; ++ stream->output = vmalloc(msblk->block_size); ++ if (stream->output == NULL) ++ goto failed2; ++ ++ return stream; ++ ++failed2: ++ vfree(stream->input); ++failed: ++ ERROR("failed to allocate lzma workspace\n"); ++ kfree(stream); ++ return NULL; ++} ++ ++ ++static void lzma_free(void *strm) ++{ ++ struct squashfs_lzma *stream = strm; ++ ++ if (stream) { ++ vfree(stream->input); ++ vfree(stream->output); ++ } ++ kfree(stream); ++} ++ ++ ++static int lzma_uncompress(struct squashfs_sb_info *msblk, void **buffer, ++ struct buffer_head **bh, int b, int offset, int length, int srclength, ++ int pages) ++{ ++ struct squashfs_lzma *stream = msblk->stream; ++ void *buff = stream->input; ++ int avail, i, bytes = length, res; ++ ++ mutex_lock(&lzma_mutex); ++ ++ for (i = 0; i < b; i++) { ++ wait_on_buffer(bh[i]); ++ if (!buffer_uptodate(bh[i])) ++ goto block_release; ++ ++ avail = min(bytes, msblk->devblksize - offset); ++ memcpy(buff, bh[i]->b_data + offset, avail); ++ buff += avail; ++ bytes -= avail; ++ offset = 0; ++ put_bh(bh[i]); ++ } ++ ++ lzma_error = 0; ++ res = unlzma(stream->input, length, NULL, NULL, stream->output, NULL, ++ error); ++ if (res || lzma_error) ++ goto failed; ++ ++ /* uncompressed size is stored in the LZMA header (5 byte offset) */ ++ res = bytes = get_unaligned_le32(stream->input + 5); ++ for (i = 0, buff = stream->output; bytes && i < pages; i++) { ++ avail = min_t(int, bytes, PAGE_CACHE_SIZE); ++ memcpy(buffer[i], buff, avail); ++ buff += avail; ++ bytes -= avail; ++ } ++ if (bytes) ++ goto failed; ++ ++ mutex_unlock(&lzma_mutex); ++ return res; ++ ++block_release: ++ for (; i < b; i++) ++ put_bh(bh[i]); ++ ++failed: ++ mutex_unlock(&lzma_mutex); ++ ++ ERROR("lzma decompression failed, data probably corrupt\n"); ++ return -EIO; ++} ++ ++const struct squashfs_decompressor squashfs_lzma_comp_ops = { ++ .init = lzma_init, ++ .free = lzma_free, ++ .decompress = lzma_uncompress, ++ .id = LZMA_COMPRESSION, ++ .name = "lzma", ++ .supported = 1 ++}; ++ + +--- linux-2.6.34/fs/squashfs/squashfs.h ++++ linux-2.6.34/fs/squashfs/squashfs.h +@@ -94,3 +94,6 @@ + + /* zlib_wrapper.c */ + extern const struct squashfs_decompressor squashfs_zlib_comp_ops; ++ ++/* lzma wrapper.c */ ++extern const struct squashfs_decompressor squashfs_lzma_comp_ops; + +--- linux-2.6.34/lib/Makefile ++++ linux-2.6.34/lib/Makefile +@@ -69,7 +69,7 @@ obj-$(CONFIG_LZO_DECOMPRESS) += lzo/ + + lib-$(CONFIG_DECOMPRESS_GZIP) += decompress_inflate.o + lib-$(CONFIG_DECOMPRESS_BZIP2) += decompress_bunzip2.o +-lib-$(CONFIG_DECOMPRESS_LZMA) += decompress_unlzma.o ++obj-$(CONFIG_DECOMPRESS_LZMA) += decompress_unlzma.o + lib-$(CONFIG_DECOMPRESS_LZO) += decompress_unlzo.o + + obj-$(CONFIG_TEXTSEARCH) += textsearch.o + diff -r c241da0f26a5 -r 5d8744871068 kernel-modular/stuff/linux-unlzma-2.6.37.u --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel-modular/stuff/linux-unlzma-2.6.37.u Tue Feb 01 09:37:33 2011 +0100 @@ -0,0 +1,268 @@ +--- linux-2.6.30.4/init/initramfs.c ++++ linux-2.6.30.4/init/initramfs.c +@@ -425,7 +425,8 @@ + return len - count; + } + +-static int __init flush_buffer(void *bufv, unsigned len) ++#define flush_buffer cpio_flush_buffer ++int __init flush_buffer(void *bufv, unsigned len) + { + char *buf = (char *) bufv; + int written; + +--- linux-2.6.30.4/lib/decompress_unlzma.c ++++ linux-2.6.30.4/lib/decompress_unlzma.c +@@ -278,6 +278,10 @@ + size_t global_pos; + int(*flush)(void*, unsigned int); + struct lzma_header *header; ++ int is_cpio_flush; ++ uint8_t **buffer_index; ++ int next_index; ++ int max_index; + }; + + struct cstate { +@@ -294,6 +298,14 @@ + static inline uint8_t INIT peek_old_byte(struct writer *wr, + uint32_t offs) + { ++ if (wr->is_cpio_flush) { ++ int32_t pos; ++ while (offs > wr->header->dict_size) ++ offs -= wr->header->dict_size; ++ pos = wr->buffer_pos - offs; ++ return wr->buffer_index[pos / LZMA_IOBUF_SIZE] ++ [pos % LZMA_IOBUF_SIZE]; ++ } + if (!wr->flush) { + int32_t pos; + while (offs > wr->header->dict_size) +@@ -309,8 +321,41 @@ + + } + ++static inline void INIT write_byte_if_cpio(struct writer *wr, uint8_t byte) ++{ ++ if (wr->buffer_pos % LZMA_IOBUF_SIZE == 0) { ++ // if the following large_malloc fails, the initramfs ++ // whould not be load with is_cpio_flush forced 0 too. ++ // Remember we do not allocate historic buffer. ++ // Let's assume it will never fail ! ++ if (wr->next_index >= wr->max_index) { ++ // realloc wr->buffer_index ++ uint8_t **p = wr->buffer_index; ++ wr->buffer_index = (uint8_t **) ++ large_malloc(LZMA_IOBUF_SIZE + ++ sizeof(*p) * wr->max_index); ++ if (wr->max_index) { ++ memcpy(wr->buffer_index, p, ++ sizeof(*p) * wr->max_index); ++ free(p); ++ } ++ wr->max_index += LZMA_IOBUF_SIZE / sizeof(*p); ++ } ++ wr->buffer_index[wr->next_index++] = ++ (uint8_t *) large_malloc(LZMA_IOBUF_SIZE); ++ } ++ wr->buffer_index[wr->buffer_pos / LZMA_IOBUF_SIZE] ++ [wr->buffer_pos % LZMA_IOBUF_SIZE] = ++ wr->previous_byte = byte; ++ wr->buffer_pos++; ++} ++ + static inline void INIT write_byte(struct writer *wr, uint8_t byte) + { ++ if (wr->is_cpio_flush) { ++ write_byte_if_cpio(wr, byte); ++ return; ++ } + wr->buffer[wr->buffer_pos++] = wr->previous_byte = byte; + if (wr->flush && wr->buffer_pos == wr->header->dict_size) { + wr->buffer_pos = 0; +@@ -328,7 +373,21 @@ + static inline void INIT copy_bytes(struct writer *wr, + uint32_t rep0, int len) + { +- do { ++ if (wr->is_cpio_flush) { ++ int32_t pos; ++ uint32_t offs = rep0; ++ while (offs > wr->header->dict_size) ++ offs -= wr->header->dict_size; ++ pos = wr->buffer_pos - offs; ++ do { ++ write_byte_if_cpio(wr, ++ wr->buffer_index[pos / LZMA_IOBUF_SIZE] ++ [pos % LZMA_IOBUF_SIZE]); ++ pos++; ++ len--; ++ } while (len != 0 && wr->buffer_pos < wr->header->dst_size); ++ } ++ else do { + copy_byte(wr, rep0); + len--; + } while (len != 0 && wr->buffer_pos < wr->header->dst_size); +@@ -339,6 +398,9 @@ + int pos_state, uint16_t *prob, + int lc, uint32_t literal_pos_mask) { + int mi = 1; ++ static const int state[LZMA_NUM_STATES] = ++ { 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 4, 5 }; ++ + rc_update_bit_0(rc, prob); + prob = (p + LZMA_LITERAL + + (LZMA_LIT_SIZE +@@ -369,18 +431,13 @@ + rc_get_bit(rc, prob_lit, &mi); + } + write_byte(wr, mi); +- if (cst->state < 4) +- cst->state = 0; +- else if (cst->state < 10) +- cst->state -= 3; +- else +- cst->state -= 6; ++ cst->state = state[cst->state]; + } + + static inline void INIT process_bit1(struct writer *wr, struct rc *rc, + struct cstate *cst, uint16_t *p, + int pos_state, uint16_t *prob) { +- int offset; ++ int offset; + uint16_t *prob_len; + int num_bits; + int len; +@@ -396,7 +453,7 @@ + prob = p + LZMA_LEN_CODER; + } else { + rc_update_bit_1(rc, prob); +- prob = p + LZMA_IS_REP_G0 + cst->state; ++ prob += LZMA_IS_REP_G0 - LZMA_IS_REP; + if (rc_is_bit_0(rc, prob)) { + rc_update_bit_0(rc, prob); + prob = (p + LZMA_IS_REP_0_LONG +@@ -417,13 +474,13 @@ + uint32_t distance; + + rc_update_bit_1(rc, prob); +- prob = p + LZMA_IS_REP_G1 + cst->state; ++ prob += LZMA_IS_REP_G1 - LZMA_IS_REP_G0; + if (rc_is_bit_0(rc, prob)) { + rc_update_bit_0(rc, prob); + distance = cst->rep1; + } else { + rc_update_bit_1(rc, prob); +- prob = p + LZMA_IS_REP_G2 + cst->state; ++ prob += LZMA_IS_REP_G2 - LZMA_IS_REP_G1; + if (rc_is_bit_0(rc, prob)) { + rc_update_bit_0(rc, prob); + distance = cst->rep2; +@@ -444,24 +501,24 @@ + prob_len = prob + LZMA_LEN_CHOICE; + if (rc_is_bit_0(rc, prob_len)) { + rc_update_bit_0(rc, prob_len); +- prob_len = (prob + LZMA_LEN_LOW ++ prob_len += LZMA_LEN_LOW - LZMA_LEN_CHOICE + + (pos_state << +- LZMA_LEN_NUM_LOW_BITS)); ++ LZMA_LEN_NUM_LOW_BITS); + offset = 0; + num_bits = LZMA_LEN_NUM_LOW_BITS; + } else { + rc_update_bit_1(rc, prob_len); +- prob_len = prob + LZMA_LEN_CHOICE_2; ++ prob_len += LZMA_LEN_CHOICE_2 - LZMA_LEN_CHOICE; + if (rc_is_bit_0(rc, prob_len)) { + rc_update_bit_0(rc, prob_len); +- prob_len = (prob + LZMA_LEN_MID ++ prob_len += LZMA_LEN_MID - LZMA_LEN_CHOICE_2 + + (pos_state << +- LZMA_LEN_NUM_MID_BITS)); ++ LZMA_LEN_NUM_MID_BITS); + offset = 1 << LZMA_LEN_NUM_LOW_BITS; + num_bits = LZMA_LEN_NUM_MID_BITS; + } else { + rc_update_bit_1(rc, prob_len); +- prob_len = prob + LZMA_LEN_HIGH; ++ prob_len += LZMA_LEN_HIGH - LZMA_LEN_CHOICE_2; + offset = ((1 << LZMA_LEN_NUM_LOW_BITS) + + (1 << LZMA_LEN_NUM_MID_BITS)); + num_bits = LZMA_LEN_NUM_HIGH_BITS; +@@ -529,6 +586,7 @@ + void(*error_fn)(char *x) + ) + { ++ extern int cpio_flush_buffer(void*, unsigned int); + struct lzma_header header; + int lc, pb, lp; + uint32_t pos_state_mask; +@@ -563,6 +621,10 @@ + wr.global_pos = 0; + wr.previous_byte = 0; + wr.buffer_pos = 0; ++ wr.is_cpio_flush = 0; ++ if (flush == cpio_flush_buffer) ++ wr.is_cpio_flush = 1; ++ wr.buffer_index = NULL; + + rc_init(&rc, fill, inbuf, in_len); + +@@ -596,23 +658,23 @@ + if (header.dict_size == 0) + header.dict_size = 1; + +- if (output) ++ if (output || wr.is_cpio_flush) + wr.buffer = output; + else { + wr.bufsize = MIN(header.dst_size, header.dict_size); + wr.buffer = large_malloc(wr.bufsize); + } +- if (wr.buffer == NULL) ++ if (wr.buffer == NULL && !wr.is_cpio_flush) + goto exit_1; + + num_probs = LZMA_BASE_SIZE + (LZMA_LIT_SIZE << (lc + lp)); + p = (uint16_t *) large_malloc(num_probs * sizeof(*p)); + if (p == 0) + goto exit_2; +- num_probs = LZMA_LITERAL + (LZMA_LIT_SIZE << (lc + lp)); ++ num_probs += LZMA_LITERAL - LZMA_BASE_SIZE; + for (i = 0; i < num_probs; i++) + p[i] = (1 << RC_MODEL_TOTAL_BITS) >> 1; +- ++ wr.max_index = wr.next_index = 0; + rc_init_code(&rc); + + while (get_pos(&wr) < header.dst_size) { +@@ -631,12 +693,25 @@ + + if (posp) + *posp = rc.ptr-rc.buffer; +- if (wr.flush) ++ if (wr.is_cpio_flush) { ++ int i; ++ for (i = 0; i < wr.next_index -1; i++) { ++ wr.flush(wr.buffer_index[i], LZMA_IOBUF_SIZE); ++ large_free(wr.buffer_index[i]); ++ } ++ if (i < wr.next_index) { ++ wr.flush(wr.buffer_index[i], ++ wr.buffer_pos % LZMA_IOBUF_SIZE); ++ large_free(wr.buffer_index[i]); ++ } ++ large_free(wr.buffer_index); ++ } ++ else if (wr.flush) + wr.flush(wr.buffer, wr.buffer_pos); + ret = 0; + large_free(p); + exit_2: +- if (!output) ++ if (!output && !wr.is_cpio_flush) + large_free(wr.buffer); + exit_1: + if (!buf) diff -r c241da0f26a5 -r 5d8744871068 kernel-modular/stuff/list_modules.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel-modular/stuff/list_modules.sh Tue Feb 01 09:37:33 2011 +0100 @@ -0,0 +1,43 @@ +#!/bin/sh +# list_modules.sh: list Linux kernel modules for SliTaz GNU/Linux. +# 2008/06/07 - GNU General Public License. +# + +find_modules() +{ +find $_pkg/lib/modules/*-slitaz/kernel/$1 -type f -exec basename {} \; +} + +if [ -z "$1" ] ; then + cat 1>&2 <list + +EOT + exit 1 +fi + +if [ -z "$(ls -d $_pkg/lib/modules/*-slitaz/kernel/$1 2> /dev/null)" ] ; then + cat 1>&2 <