wok-6.x rev 9258

Add: linux-libre 2.6.37-libre (part 2)
author Antoine Bodin <gokhlayeh@slitaz.org>
date Tue Mar 15 03:24:23 2011 +0100 (2011-03-15)
parents abe27fd0192d
children 67cd1106a33b
files linux-libre/stuff/001-squashfs-decompressors-add-xz-decompressor-module.patch linux-libre/stuff/linux-libre-2.6.37-libre-slitaz.config
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/linux-libre/stuff/001-squashfs-decompressors-add-xz-decompressor-module.patch	Tue Mar 15 03:24:23 2011 +0100
     1.3 @@ -0,0 +1,3934 @@
     1.4 +From: Lasse Collin <lasse.collin@tukaani.org>
     1.5 +Date: Thu, 2 Dec 2010 19:14:19 +0000 (+0200)
     1.6 +Subject: Decompressors: Add XZ decompressor module
     1.7 +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fpkl%2Fsquashfs-xz.git;a=commitdiff_plain;h=3dbc3fe7878e53b43064a12d4ab31ca4c18ce85f
     1.8 +
     1.9 +Decompressors: Add XZ decompressor module
    1.10 +
    1.11 +In userspace, the .lzma format has become mostly a legacy
    1.12 +file format that got superseded by the .xz format. Similarly,
    1.13 +LZMA Utils was superseded by XZ Utils.
    1.14 +
    1.15 +These patches add support for XZ decompression into
    1.16 +the kernel. Most of the code is as is from XZ Embedded
    1.17 +<http://tukaani.org/xz/embedded.html>. It was written for
    1.18 +the Linux kernel but is usable in other projects too.
    1.19 +
    1.20 +Advantages of XZ over the current LZMA code in the kernel:
    1.21 +  - Nice API that can be used by other kernel modules; it's
    1.22 +    not limited to kernel, initramfs, and initrd decompression.
    1.23 +  - Integrity check support (CRC32)
    1.24 +  - BCJ filters improve compression of executable code on
    1.25 +    certain architectures. These together with LZMA2 can
    1.26 +    produce a few percent smaller kernel or Squashfs images
    1.27 +    than plain LZMA without making the decompression slower.
    1.28 +
    1.29 +This patch: Add the main decompression code (xz_dec), testing
    1.30 +module (xz_dec_test), wrapper script (xz_wrap.sh) for the xz
    1.31 +command line tool, and documentation. The xz_dec module is
    1.32 +enough to have a usable XZ decompressor e.g. for Squashfs.
    1.33 +
    1.34 +Signed-off-by: Lasse Collin <lasse.collin@tukaani.org>
    1.35 +---
    1.36 +
    1.37 +diff --git a/Documentation/xz.txt b/Documentation/xz.txt
    1.38 +new file mode 100644
    1.39 +index 0000000..68329ac
    1.40 +--- /dev/null
    1.41 ++++ b/Documentation/xz.txt
    1.42 +@@ -0,0 +1,122 @@
    1.43 ++
    1.44 ++XZ data compression in Linux
    1.45 ++============================
    1.46 ++
    1.47 ++Introduction
    1.48 ++
    1.49 ++    XZ is a general purpose data compression format with high compression
    1.50 ++    ratio and relatively fast decompression. The primary compression
    1.51 ++    algorithm (filter) is LZMA2. Additional filters can be used to improve
    1.52 ++    compression ratio even further. E.g. Branch/Call/Jump (BCJ) filters
    1.53 ++    improve compression ratio of executable data.
    1.54 ++
    1.55 ++    The XZ decompressor in Linux is called XZ Embedded. It supports
    1.56 ++    the LZMA2 filter and optionally also BCJ filters. CRC32 is supported
    1.57 ++    for integrity checking. The home page of XZ Embedded is at
    1.58 ++    <http://tukaani.org/xz/embedded.html>, where you can find the
    1.59 ++    latest version and also information about using the code outside
    1.60 ++    the Linux kernel.
    1.61 ++
    1.62 ++    For userspace, XZ Utils provide a zlib-like compression library
    1.63 ++    and a gzip-like command line tool. XZ Utils can be downloaded from
    1.64 ++    <http://tukaani.org/xz/>.
    1.65 ++
    1.66 ++XZ related components in the kernel
    1.67 ++
    1.68 ++    The xz_dec module provides XZ decompressor with single-call (buffer
    1.69 ++    to buffer) and multi-call (stateful) APIs. The usage of the xz_dec
    1.70 ++    module is documented in include/linux/xz.h.
    1.71 ++
    1.72 ++    The xz_dec_test module is for testing xz_dec. xz_dec_test is not
    1.73 ++    useful unless you are hacking the XZ decompressor. xz_dec_test
    1.74 ++    allocates a char device major dynamically to which one can write
    1.75 ++    .xz files from userspace. The decompressed output is thrown away.
    1.76 ++    Keep an eye on dmesg to see diagnostics printed by xz_dec_test.
    1.77 ++    See the xz_dec_test source code for the details.
    1.78 ++
    1.79 ++    For decompressing the kernel image, initramfs, and initrd, there
    1.80 ++    is a wrapper function in lib/decompress_unxz.c. Its API is the
    1.81 ++    same as in other decompress_*.c files, which is defined in
    1.82 ++    include/linux/decompress/generic.h.
    1.83 ++
    1.84 ++    scripts/xz_wrap.sh is a wrapper for the xz command line tool found
    1.85 ++    from XZ Utils. The wrapper sets compression options to values suitable
    1.86 ++    for compressing the kernel image.
    1.87 ++
    1.88 ++    For kernel makefiles, two commands are provided for use with
    1.89 ++    $(call if_needed). The kernel image should be compressed with
    1.90 ++    $(call if_needed,xzkern) which will use a BCJ filter and a big LZMA2
    1.91 ++    dictionary. It will also append a four-byte trailer containing the
    1.92 ++    uncompressed size of the file, which is needed by the boot code.
    1.93 ++    Other things should be compressed with $(call if_needed,xzmisc)
    1.94 ++    which will use no BCJ filter and 1 MiB LZMA2 dictionary.
    1.95 ++
    1.96 ++Notes on compression options
    1.97 ++
    1.98 ++    Since the XZ Embedded supports only streams with no integrity check or
    1.99 ++    CRC32, make sure that you don't use some other integrity check type
   1.100 ++    when encoding files that are supposed to be decoded by the kernel. With
   1.101 ++    liblzma, you need to use either LZMA_CHECK_NONE or LZMA_CHECK_CRC32
   1.102 ++    when encoding. With the xz command line tool, use --check=none or
   1.103 ++    --check=crc32.
   1.104 ++
   1.105 ++    Using CRC32 is strongly recommended unless there is some other layer
   1.106 ++    which will verify the integrity of the uncompressed data anyway.
   1.107 ++    Double checking the integrity would probably be waste of CPU cycles.
   1.108 ++    Note that the headers will always have a CRC32 which will be validated
   1.109 ++    by the decoder; you can only change the integrity check type (or
   1.110 ++    disable it) for the actual uncompressed data.
   1.111 ++
   1.112 ++    In userspace, LZMA2 is typically used with dictionary sizes of several
   1.113 ++    megabytes. The decoder needs to have the dictionary in RAM, thus big
   1.114 ++    dictionaries cannot be used for files that are intended to be decoded
   1.115 ++    by the kernel. 1 MiB is probably the maximum reasonable dictionary
   1.116 ++    size for in-kernel use (maybe more is OK for initramfs). The presets
   1.117 ++    in XZ Utils may not be optimal when creating files for the kernel,
   1.118 ++    so don't hesitate to use custom settings. Example:
   1.119 ++
   1.120 ++        xz --check=crc32 --lzma2=dict=512KiB inputfile
   1.121 ++
   1.122 ++    An exception to above dictionary size limitation is when the decoder
   1.123 ++    is used in single-call mode. Decompressing the kernel itself is an
   1.124 ++    example of this situation. In single-call mode, the memory usage
   1.125 ++    doesn't depend on the dictionary size, and it is perfectly fine to
   1.126 ++    use a big dictionary: for maximum compression, the dictionary should
   1.127 ++    be at least as big as the uncompressed data itself.
   1.128 ++
   1.129 ++Future plans
   1.130 ++
   1.131 ++    Creating a limited XZ encoder may be considered if people think it is
   1.132 ++    useful. LZMA2 is slower to compress than e.g. Deflate or LZO even at
   1.133 ++    the fastest settings, so it isn't clear if LZMA2 encoder is wanted
   1.134 ++    into the kernel.
   1.135 ++
   1.136 ++    Support for limited random-access reading is planned for the
   1.137 ++    decompression code. I don't know if it could have any use in the
   1.138 ++    kernel, but I know that it would be useful in some embedded projects
   1.139 ++    outside the Linux kernel.
   1.140 ++
   1.141 ++Conformance to the .xz file format specification
   1.142 ++
   1.143 ++    There are a couple of corner cases where things have been simplified
   1.144 ++    at expense of detecting errors as early as possible. These should not
   1.145 ++    matter in practice all, since they don't cause security issues. But
   1.146 ++    it is good to know this if testing the code e.g. with the test files
   1.147 ++    from XZ Utils.
   1.148 ++
   1.149 ++Reporting bugs
   1.150 ++
   1.151 ++    Before reporting a bug, please check that it's not fixed already
   1.152 ++    at upstream. See <http://tukaani.org/xz/embedded.html> to get the
   1.153 ++    latest code.
   1.154 ++
   1.155 ++    Report bugs to <lasse.collin@tukaani.org> or visit #tukaani on
   1.156 ++    Freenode and talk to Larhzu. I don't actively read LKML or other
   1.157 ++    kernel-related mailing lists, so if there's something I should know,
   1.158 ++    you should email to me personally or use IRC.
   1.159 ++
   1.160 ++    Don't bother Igor Pavlov with questions about the XZ implementation
   1.161 ++    in the kernel or about XZ Utils. While these two implementations
   1.162 ++    include essential code that is directly based on Igor Pavlov's code,
   1.163 ++    these implementations aren't maintained nor supported by him.
   1.164 ++
   1.165 +diff --git a/include/linux/xz.h b/include/linux/xz.h
   1.166 +new file mode 100644
   1.167 +index 0000000..64cffa6
   1.168 +--- /dev/null
   1.169 ++++ b/include/linux/xz.h
   1.170 +@@ -0,0 +1,264 @@
   1.171 ++/*
   1.172 ++ * XZ decompressor
   1.173 ++ *
   1.174 ++ * Authors: Lasse Collin <lasse.collin@tukaani.org>
   1.175 ++ *          Igor Pavlov <http://7-zip.org/>
   1.176 ++ *
   1.177 ++ * This file has been put into the public domain.
   1.178 ++ * You can do whatever you want with this file.
   1.179 ++ */
   1.180 ++
   1.181 ++#ifndef XZ_H
   1.182 ++#define XZ_H
   1.183 ++
   1.184 ++#ifdef __KERNEL__
   1.185 ++#	include <linux/stddef.h>
   1.186 ++#	include <linux/types.h>
   1.187 ++#else
   1.188 ++#	include <stddef.h>
   1.189 ++#	include <stdint.h>
   1.190 ++#endif
   1.191 ++
   1.192 ++/* In Linux, this is used to make extern functions static when needed. */
   1.193 ++#ifndef XZ_EXTERN
   1.194 ++#	define XZ_EXTERN extern
   1.195 ++#endif
   1.196 ++
   1.197 ++/**
   1.198 ++ * enum xz_mode - Operation mode
   1.199 ++ *
   1.200 ++ * @XZ_SINGLE:              Single-call mode. This uses less RAM than
   1.201 ++ *                          than multi-call modes, because the LZMA2
   1.202 ++ *                          dictionary doesn't need to be allocated as
   1.203 ++ *                          part of the decoder state. All required data
   1.204 ++ *                          structures are allocated at initialization,
   1.205 ++ *                          so xz_dec_run() cannot return XZ_MEM_ERROR.
   1.206 ++ * @XZ_PREALLOC:            Multi-call mode with preallocated LZMA2
   1.207 ++ *                          dictionary buffer. All data structures are
   1.208 ++ *                          allocated at initialization, so xz_dec_run()
   1.209 ++ *                          cannot return XZ_MEM_ERROR.
   1.210 ++ * @XZ_DYNALLOC:            Multi-call mode. The LZMA2 dictionary is
   1.211 ++ *                          allocated once the required size has been
   1.212 ++ *                          parsed from the stream headers. If the
   1.213 ++ *                          allocation fails, xz_dec_run() will return
   1.214 ++ *                          XZ_MEM_ERROR.
   1.215 ++ *
   1.216 ++ * It is possible to enable support only for a subset of the above
   1.217 ++ * modes at compile time by defining XZ_DEC_SINGLE, XZ_DEC_PREALLOC,
   1.218 ++ * or XZ_DEC_DYNALLOC. The xz_dec kernel module is always compiled
   1.219 ++ * with support for all operation modes, but the preboot code may
   1.220 ++ * be built with fewer features to minimize code size.
   1.221 ++ */
   1.222 ++enum xz_mode {
   1.223 ++	XZ_SINGLE,
   1.224 ++	XZ_PREALLOC,
   1.225 ++	XZ_DYNALLOC
   1.226 ++};
   1.227 ++
   1.228 ++/**
   1.229 ++ * enum xz_ret - Return codes
   1.230 ++ * @XZ_OK:                  Everything is OK so far. More input or more
   1.231 ++ *                          output space is required to continue. This
   1.232 ++ *                          return code is possible only in multi-call mode
   1.233 ++ *                          (XZ_PREALLOC or XZ_DYNALLOC).
   1.234 ++ * @XZ_STREAM_END:          Operation finished successfully.
   1.235 ++ * @XZ_UNSUPPORTED_CHECK:   Integrity check type is not supported. Decoding
   1.236 ++ *                          is still possible in multi-call mode by simply
   1.237 ++ *                          calling xz_dec_run() again.
   1.238 ++ *                          Note that this return value is used only if
   1.239 ++ *                          XZ_DEC_ANY_CHECK was defined at build time,
   1.240 ++ *                          which is not used in the kernel. Unsupported
   1.241 ++ *                          check types return XZ_OPTIONS_ERROR if
   1.242 ++ *                          XZ_DEC_ANY_CHECK was not defined at build time.
   1.243 ++ * @XZ_MEM_ERROR:           Allocating memory failed. This return code is
   1.244 ++ *                          possible only if the decoder was initialized
   1.245 ++ *                          with XZ_DYNALLOC. The amount of memory that was
   1.246 ++ *                          tried to be allocated was no more than the
   1.247 ++ *                          dict_max argument given to xz_dec_init().
   1.248 ++ * @XZ_MEMLIMIT_ERROR:      A bigger LZMA2 dictionary would be needed than
   1.249 ++ *                          allowed by the dict_max argument given to
   1.250 ++ *                          xz_dec_init(). This return value is possible
   1.251 ++ *                          only in multi-call mode (XZ_PREALLOC or
   1.252 ++ *                          XZ_DYNALLOC); the single-call mode (XZ_SINGLE)
   1.253 ++ *                          ignores the dict_max argument.
   1.254 ++ * @XZ_FORMAT_ERROR:        File format was not recognized (wrong magic
   1.255 ++ *                          bytes).
   1.256 ++ * @XZ_OPTIONS_ERROR:       This implementation doesn't support the requested
   1.257 ++ *                          compression options. In the decoder this means
   1.258 ++ *                          that the header CRC32 matches, but the header
   1.259 ++ *                          itself specifies something that we don't support.
   1.260 ++ * @XZ_DATA_ERROR:          Compressed data is corrupt.
   1.261 ++ * @XZ_BUF_ERROR:           Cannot make any progress. Details are slightly
   1.262 ++ *                          different between multi-call and single-call
   1.263 ++ *                          mode; more information below.
   1.264 ++ *
   1.265 ++ * In multi-call mode, XZ_BUF_ERROR is returned when two consecutive calls
   1.266 ++ * to XZ code cannot consume any input and cannot produce any new output.
   1.267 ++ * This happens when there is no new input available, or the output buffer
   1.268 ++ * is full while at least one output byte is still pending. Assuming your
   1.269 ++ * code is not buggy, you can get this error only when decoding a compressed
   1.270 ++ * stream that is truncated or otherwise corrupt.
   1.271 ++ *
   1.272 ++ * In single-call mode, XZ_BUF_ERROR is returned only when the output buffer
   1.273 ++ * is too small or the compressed input is corrupt in a way that makes the
   1.274 ++ * decoder produce more output than the caller expected. When it is
   1.275 ++ * (relatively) clear that the compressed input is truncated, XZ_DATA_ERROR
   1.276 ++ * is used instead of XZ_BUF_ERROR.
   1.277 ++ */
   1.278 ++enum xz_ret {
   1.279 ++	XZ_OK,
   1.280 ++	XZ_STREAM_END,
   1.281 ++	XZ_UNSUPPORTED_CHECK,
   1.282 ++	XZ_MEM_ERROR,
   1.283 ++	XZ_MEMLIMIT_ERROR,
   1.284 ++	XZ_FORMAT_ERROR,
   1.285 ++	XZ_OPTIONS_ERROR,
   1.286 ++	XZ_DATA_ERROR,
   1.287 ++	XZ_BUF_ERROR
   1.288 ++};
   1.289 ++
   1.290 ++/**
   1.291 ++ * struct xz_buf - Passing input and output buffers to XZ code
   1.292 ++ * @in:         Beginning of the input buffer. This may be NULL if and only
   1.293 ++ *              if in_pos is equal to in_size.
   1.294 ++ * @in_pos:     Current position in the input buffer. This must not exceed
   1.295 ++ *              in_size.
   1.296 ++ * @in_size:    Size of the input buffer
   1.297 ++ * @out:        Beginning of the output buffer. This may be NULL if and only
   1.298 ++ *              if out_pos is equal to out_size.
   1.299 ++ * @out_pos:    Current position in the output buffer. This must not exceed
   1.300 ++ *              out_size.
   1.301 ++ * @out_size:   Size of the output buffer
   1.302 ++ *
   1.303 ++ * Only the contents of the output buffer from out[out_pos] onward, and
   1.304 ++ * the variables in_pos and out_pos are modified by the XZ code.
   1.305 ++ */
   1.306 ++struct xz_buf {
   1.307 ++	const uint8_t *in;
   1.308 ++	size_t in_pos;
   1.309 ++	size_t in_size;
   1.310 ++
   1.311 ++	uint8_t *out;
   1.312 ++	size_t out_pos;
   1.313 ++	size_t out_size;
   1.314 ++};
   1.315 ++
   1.316 ++/**
   1.317 ++ * struct xz_dec - Opaque type to hold the XZ decoder state
   1.318 ++ */
   1.319 ++struct xz_dec;
   1.320 ++
   1.321 ++/**
   1.322 ++ * xz_dec_init() - Allocate and initialize a XZ decoder state
   1.323 ++ * @mode:       Operation mode
   1.324 ++ * @dict_max:   Maximum size of the LZMA2 dictionary (history buffer) for
   1.325 ++ *              multi-call decoding. This is ignored in single-call mode
   1.326 ++ *              (mode == XZ_SINGLE). LZMA2 dictionary is always 2^n bytes
   1.327 ++ *              or 2^n + 2^(n-1) bytes (the latter sizes are less common
   1.328 ++ *              in practice), so other values for dict_max don't make sense.
   1.329 ++ *              In the kernel, dictionary sizes of 64 KiB, 128 KiB, 256 KiB,
   1.330 ++ *              512 KiB, and 1 MiB are probably the only reasonable values,
   1.331 ++ *              except for kernel and initramfs images where a bigger
   1.332 ++ *              dictionary can be fine and useful.
   1.333 ++ *
   1.334 ++ * Single-call mode (XZ_SINGLE): xz_dec_run() decodes the whole stream at
   1.335 ++ * once. The caller must provide enough output space or the decoding will
   1.336 ++ * fail. The output space is used as the dictionary buffer, which is why
   1.337 ++ * there is no need to allocate the dictionary as part of the decoder's
   1.338 ++ * internal state.
   1.339 ++ *
   1.340 ++ * Because the output buffer is used as the workspace, streams encoded using
   1.341 ++ * a big dictionary are not a problem in single-call mode. It is enough that
   1.342 ++ * the output buffer is big enough to hold the actual uncompressed data; it
   1.343 ++ * can be smaller than the dictionary size stored in the stream headers.
   1.344 ++ *
   1.345 ++ * Multi-call mode with preallocated dictionary (XZ_PREALLOC): dict_max bytes
   1.346 ++ * of memory is preallocated for the LZMA2 dictionary. This way there is no
   1.347 ++ * risk that xz_dec_run() could run out of memory, since xz_dec_run() will
   1.348 ++ * never allocate any memory. Instead, if the preallocated dictionary is too
   1.349 ++ * small for decoding the given input stream, xz_dec_run() will return
   1.350 ++ * XZ_MEMLIMIT_ERROR. Thus, it is important to know what kind of data will be
   1.351 ++ * decoded to avoid allocating excessive amount of memory for the dictionary.
   1.352 ++ *
   1.353 ++ * Multi-call mode with dynamically allocated dictionary (XZ_DYNALLOC):
   1.354 ++ * dict_max specifies the maximum allowed dictionary size that xz_dec_run()
   1.355 ++ * may allocate once it has parsed the dictionary size from the stream
   1.356 ++ * headers. This way excessive allocations can be avoided while still
   1.357 ++ * limiting the maximum memory usage to a sane value to prevent running the
   1.358 ++ * system out of memory when decompressing streams from untrusted sources.
   1.359 ++ *
   1.360 ++ * On success, xz_dec_init() returns a pointer to struct xz_dec, which is
   1.361 ++ * ready to be used with xz_dec_run(). If memory allocation fails,
   1.362 ++ * xz_dec_init() returns NULL.
   1.363 ++ */
   1.364 ++XZ_EXTERN struct xz_dec *xz_dec_init(enum xz_mode mode, uint32_t dict_max);
   1.365 ++
   1.366 ++/**
   1.367 ++ * xz_dec_run() - Run the XZ decoder
   1.368 ++ * @s:          Decoder state allocated using xz_dec_init()
   1.369 ++ * @b:          Input and output buffers
   1.370 ++ *
   1.371 ++ * The possible return values depend on build options and operation mode.
   1.372 ++ * See enum xz_ret for details.
   1.373 ++ *
   1.374 ++ * Note that if an error occurs in single-call mode (return value is not
   1.375 ++ * XZ_STREAM_END), b->in_pos and b->out_pos are not modified and the
   1.376 ++ * contents of the output buffer from b->out[b->out_pos] onward are
   1.377 ++ * undefined. This is true even after XZ_BUF_ERROR, because with some filter
   1.378 ++ * chains, there may be a second pass over the output buffer, and this pass
   1.379 ++ * cannot be properly done if the output buffer is truncated. Thus, you
   1.380 ++ * cannot give the single-call decoder a too small buffer and then expect to
   1.381 ++ * get that amount valid data from the beginning of the stream. You must use
   1.382 ++ * the multi-call decoder if you don't want to uncompress the whole stream.
   1.383 ++ */
   1.384 ++XZ_EXTERN enum xz_ret xz_dec_run(struct xz_dec *s, struct xz_buf *b);
   1.385 ++
   1.386 ++/**
   1.387 ++ * xz_dec_reset() - Reset an already allocated decoder state
   1.388 ++ * @s:          Decoder state allocated using xz_dec_init()
   1.389 ++ *
   1.390 ++ * This function can be used to reset the multi-call decoder state without
   1.391 ++ * freeing and reallocating memory with xz_dec_end() and xz_dec_init().
   1.392 ++ *
   1.393 ++ * In single-call mode, xz_dec_reset() is always called in the beginning of
   1.394 ++ * xz_dec_run(). Thus, explicit call to xz_dec_reset() is useful only in
   1.395 ++ * multi-call mode.
   1.396 ++ */
   1.397 ++XZ_EXTERN void xz_dec_reset(struct xz_dec *s);
   1.398 ++
   1.399 ++/**
   1.400 ++ * xz_dec_end() - Free the memory allocated for the decoder state
   1.401 ++ * @s:          Decoder state allocated using xz_dec_init(). If s is NULL,
   1.402 ++ *              this function does nothing.
   1.403 ++ */
   1.404 ++XZ_EXTERN void xz_dec_end(struct xz_dec *s);
   1.405 ++
   1.406 ++/*
   1.407 ++ * Standalone build (userspace build or in-kernel build for boot time use)
   1.408 ++ * needs a CRC32 implementation. For normal in-kernel use, kernel's own
   1.409 ++ * CRC32 module is used instead, and users of this module don't need to
   1.410 ++ * care about the functions below.
   1.411 ++ */
   1.412 ++#ifndef XZ_INTERNAL_CRC32
   1.413 ++#	ifdef __KERNEL__
   1.414 ++#		define XZ_INTERNAL_CRC32 0
   1.415 ++#	else
   1.416 ++#		define XZ_INTERNAL_CRC32 1
   1.417 ++#	endif
   1.418 ++#endif
   1.419 ++
   1.420 ++#if XZ_INTERNAL_CRC32
   1.421 ++/*
   1.422 ++ * This must be called before any other xz_* function to initialize
   1.423 ++ * the CRC32 lookup table.
   1.424 ++ */
   1.425 ++XZ_EXTERN void xz_crc32_init(void);
   1.426 ++
   1.427 ++/*
   1.428 ++ * Update CRC32 value using the polynomial from IEEE-802.3. To start a new
   1.429 ++ * calculation, the third argument must be zero. To continue the calculation,
   1.430 ++ * the previously returned value is passed as the third argument.
   1.431 ++ */
   1.432 ++XZ_EXTERN uint32_t xz_crc32(const uint8_t *buf, size_t size, uint32_t crc);
   1.433 ++#endif
   1.434 ++#endif
   1.435 +diff --git a/lib/Kconfig b/lib/Kconfig
   1.436 +index fa9bf2c..6090314 100644
   1.437 +--- a/lib/Kconfig
   1.438 ++++ b/lib/Kconfig
   1.439 +@@ -106,6 +106,8 @@ config LZO_COMPRESS
   1.440 + config LZO_DECOMPRESS
   1.441 + 	tristate
   1.442 + 
   1.443 ++source "lib/xz/Kconfig"
   1.444 ++
   1.445 + #
   1.446 + # These all provide a common interface (hence the apparent duplication with
   1.447 + # ZLIB_INFLATE; DECOMPRESS_GZIP is just a wrapper.)
   1.448 +diff --git a/lib/Makefile b/lib/Makefile
   1.449 +index e6a3763..f2f98dd 100644
   1.450 +--- a/lib/Makefile
   1.451 ++++ b/lib/Makefile
   1.452 +@@ -69,6 +69,7 @@ obj-$(CONFIG_ZLIB_DEFLATE) += zlib_deflate/
   1.453 + obj-$(CONFIG_REED_SOLOMON) += reed_solomon/
   1.454 + obj-$(CONFIG_LZO_COMPRESS) += lzo/
   1.455 + obj-$(CONFIG_LZO_DECOMPRESS) += lzo/
   1.456 ++obj-$(CONFIG_XZ_DEC) += xz/
   1.457 + obj-$(CONFIG_RAID6_PQ) += raid6/
   1.458 + 
   1.459 + lib-$(CONFIG_DECOMPRESS_GZIP) += decompress_inflate.o
   1.460 +diff --git a/lib/xz/Kconfig b/lib/xz/Kconfig
   1.461 +new file mode 100644
   1.462 +index 0000000..e3b6e18
   1.463 +--- /dev/null
   1.464 ++++ b/lib/xz/Kconfig
   1.465 +@@ -0,0 +1,59 @@
   1.466 ++config XZ_DEC
   1.467 ++	tristate "XZ decompression support"
   1.468 ++	select CRC32
   1.469 ++	help
   1.470 ++	  LZMA2 compression algorithm and BCJ filters are supported using
   1.471 ++	  the .xz file format as the container. For integrity checking,
   1.472 ++	  CRC32 is supported. See Documentation/xz.txt for more information.
   1.473 ++
   1.474 ++config XZ_DEC_X86
   1.475 ++	bool "x86 BCJ filter decoder" if EMBEDDED
   1.476 ++	default y
   1.477 ++	depends on XZ_DEC
   1.478 ++	select XZ_DEC_BCJ
   1.479 ++
   1.480 ++config XZ_DEC_POWERPC
   1.481 ++	bool "PowerPC BCJ filter decoder" if EMBEDDED
   1.482 ++	default y
   1.483 ++	depends on XZ_DEC
   1.484 ++	select XZ_DEC_BCJ
   1.485 ++
   1.486 ++config XZ_DEC_IA64
   1.487 ++	bool "IA-64 BCJ filter decoder" if EMBEDDED
   1.488 ++	default y
   1.489 ++	depends on XZ_DEC
   1.490 ++	select XZ_DEC_BCJ
   1.491 ++
   1.492 ++config XZ_DEC_ARM
   1.493 ++	bool "ARM BCJ filter decoder" if EMBEDDED
   1.494 ++	default y
   1.495 ++	depends on XZ_DEC
   1.496 ++	select XZ_DEC_BCJ
   1.497 ++
   1.498 ++config XZ_DEC_ARMTHUMB
   1.499 ++	bool "ARM-Thumb BCJ filter decoder" if EMBEDDED
   1.500 ++	default y
   1.501 ++	depends on XZ_DEC
   1.502 ++	select XZ_DEC_BCJ
   1.503 ++
   1.504 ++config XZ_DEC_SPARC
   1.505 ++	bool "SPARC BCJ filter decoder" if EMBEDDED
   1.506 ++	default y
   1.507 ++	depends on XZ_DEC
   1.508 ++	select XZ_DEC_BCJ
   1.509 ++
   1.510 ++config XZ_DEC_BCJ
   1.511 ++	bool
   1.512 ++	default n
   1.513 ++
   1.514 ++config XZ_DEC_TEST
   1.515 ++	tristate "XZ decompressor tester"
   1.516 ++	default n
   1.517 ++	depends on XZ_DEC
   1.518 ++	help
   1.519 ++	  This allows passing .xz files to the in-kernel XZ decoder via
   1.520 ++	  a character special file. It calculates CRC32 of the decompressed
   1.521 ++	  data and writes diagnostics to the system log.
   1.522 ++
   1.523 ++	  Unless you are developing the XZ decoder, you don't need this
   1.524 ++	  and should say N.
   1.525 +diff --git a/lib/xz/Makefile b/lib/xz/Makefile
   1.526 +new file mode 100644
   1.527 +index 0000000..a7fa769
   1.528 +--- /dev/null
   1.529 ++++ b/lib/xz/Makefile
   1.530 +@@ -0,0 +1,5 @@
   1.531 ++obj-$(CONFIG_XZ_DEC) += xz_dec.o
   1.532 ++xz_dec-y := xz_dec_syms.o xz_dec_stream.o xz_dec_lzma2.o
   1.533 ++xz_dec-$(CONFIG_XZ_DEC_BCJ) += xz_dec_bcj.o
   1.534 ++
   1.535 ++obj-$(CONFIG_XZ_DEC_TEST) += xz_dec_test.o
   1.536 +diff --git a/lib/xz/xz_crc32.c b/lib/xz/xz_crc32.c
   1.537 +new file mode 100644
   1.538 +index 0000000..34532d1
   1.539 +--- /dev/null
   1.540 ++++ b/lib/xz/xz_crc32.c
   1.541 +@@ -0,0 +1,59 @@
   1.542 ++/*
   1.543 ++ * CRC32 using the polynomial from IEEE-802.3
   1.544 ++ *
   1.545 ++ * Authors: Lasse Collin <lasse.collin@tukaani.org>
   1.546 ++ *          Igor Pavlov <http://7-zip.org/>
   1.547 ++ *
   1.548 ++ * This file has been put into the public domain.
   1.549 ++ * You can do whatever you want with this file.
   1.550 ++ */
   1.551 ++
   1.552 ++/*
   1.553 ++ * This is not the fastest implementation, but it is pretty compact.
   1.554 ++ * The fastest versions of xz_crc32() on modern CPUs without hardware
   1.555 ++ * accelerated CRC instruction are 3-5 times as fast as this version,
   1.556 ++ * but they are bigger and use more memory for the lookup table.
   1.557 ++ */
   1.558 ++
   1.559 ++#include "xz_private.h"
   1.560 ++
   1.561 ++/*
   1.562 ++ * STATIC_RW_DATA is used in the pre-boot environment on some architectures.
   1.563 ++ * See <linux/decompress/mm.h> for details.
   1.564 ++ */
   1.565 ++#ifndef STATIC_RW_DATA
   1.566 ++#	define STATIC_RW_DATA static
   1.567 ++#endif
   1.568 ++
   1.569 ++STATIC_RW_DATA uint32_t xz_crc32_table[256];
   1.570 ++
   1.571 ++XZ_EXTERN void xz_crc32_init(void)
   1.572 ++{
   1.573 ++	const uint32_t poly = 0xEDB88320;
   1.574 ++
   1.575 ++	uint32_t i;
   1.576 ++	uint32_t j;
   1.577 ++	uint32_t r;
   1.578 ++
   1.579 ++	for (i = 0; i < 256; ++i) {
   1.580 ++		r = i;
   1.581 ++		for (j = 0; j < 8; ++j)
   1.582 ++			r = (r >> 1) ^ (poly & ~((r & 1) - 1));
   1.583 ++
   1.584 ++		xz_crc32_table[i] = r;
   1.585 ++	}
   1.586 ++
   1.587 ++	return;
   1.588 ++}
   1.589 ++
   1.590 ++XZ_EXTERN uint32_t xz_crc32(const uint8_t *buf, size_t size, uint32_t crc)
   1.591 ++{
   1.592 ++	crc = ~crc;
   1.593 ++
   1.594 ++	while (size != 0) {
   1.595 ++		crc = xz_crc32_table[*buf++ ^ (crc & 0xFF)] ^ (crc >> 8);
   1.596 ++		--size;
   1.597 ++	}
   1.598 ++
   1.599 ++	return ~crc;
   1.600 ++}
   1.601 +diff --git a/lib/xz/xz_dec_bcj.c b/lib/xz/xz_dec_bcj.c
   1.602 +new file mode 100644
   1.603 +index 0000000..e51e255
   1.604 +--- /dev/null
   1.605 ++++ b/lib/xz/xz_dec_bcj.c
   1.606 +@@ -0,0 +1,561 @@
   1.607 ++/*
   1.608 ++ * Branch/Call/Jump (BCJ) filter decoders
   1.609 ++ *
   1.610 ++ * Authors: Lasse Collin <lasse.collin@tukaani.org>
   1.611 ++ *          Igor Pavlov <http://7-zip.org/>
   1.612 ++ *
   1.613 ++ * This file has been put into the public domain.
   1.614 ++ * You can do whatever you want with this file.
   1.615 ++ */
   1.616 ++
   1.617 ++#include "xz_private.h"
   1.618 ++
   1.619 ++/*
   1.620 ++ * The rest of the file is inside this ifdef. It makes things a little more
   1.621 ++ * convenient when building without support for any BCJ filters.
   1.622 ++ */
   1.623 ++#ifdef XZ_DEC_BCJ
   1.624 ++
   1.625 ++struct xz_dec_bcj {
   1.626 ++	/* Type of the BCJ filter being used */
   1.627 ++	enum {
   1.628 ++		BCJ_X86 = 4,        /* x86 or x86-64 */
   1.629 ++		BCJ_POWERPC = 5,    /* Big endian only */
   1.630 ++		BCJ_IA64 = 6,       /* Big or little endian */
   1.631 ++		BCJ_ARM = 7,        /* Little endian only */
   1.632 ++		BCJ_ARMTHUMB = 8,   /* Little endian only */
   1.633 ++		BCJ_SPARC = 9       /* Big or little endian */
   1.634 ++	} type;
   1.635 ++
   1.636 ++	/*
   1.637 ++	 * Return value of the next filter in the chain. We need to preserve
   1.638 ++	 * this information across calls, because we must not call the next
   1.639 ++	 * filter anymore once it has returned XZ_STREAM_END.
   1.640 ++	 */
   1.641 ++	enum xz_ret ret;
   1.642 ++
   1.643 ++	/* True if we are operating in single-call mode. */
   1.644 ++	bool single_call;
   1.645 ++
   1.646 ++	/*
   1.647 ++	 * Absolute position relative to the beginning of the uncompressed
   1.648 ++	 * data (in a single .xz Block). We care only about the lowest 32
   1.649 ++	 * bits so this doesn't need to be uint64_t even with big files.
   1.650 ++	 */
   1.651 ++	uint32_t pos;
   1.652 ++
   1.653 ++	/* x86 filter state */
   1.654 ++	uint32_t x86_prev_mask;
   1.655 ++
   1.656 ++	/* Temporary space to hold the variables from struct xz_buf */
   1.657 ++	uint8_t *out;
   1.658 ++	size_t out_pos;
   1.659 ++	size_t out_size;
   1.660 ++
   1.661 ++	struct {
   1.662 ++		/* Amount of already filtered data in the beginning of buf */
   1.663 ++		size_t filtered;
   1.664 ++
   1.665 ++		/* Total amount of data currently stored in buf  */
   1.666 ++		size_t size;
   1.667 ++
   1.668 ++		/*
   1.669 ++		 * Buffer to hold a mix of filtered and unfiltered data. This
   1.670 ++		 * needs to be big enough to hold Alignment + 2 * Look-ahead:
   1.671 ++		 *
   1.672 ++		 * Type         Alignment   Look-ahead
   1.673 ++		 * x86              1           4
   1.674 ++		 * PowerPC          4           0
   1.675 ++		 * IA-64           16           0
   1.676 ++		 * ARM              4           0
   1.677 ++		 * ARM-Thumb        2           2
   1.678 ++		 * SPARC            4           0
   1.679 ++		 */
   1.680 ++		uint8_t buf[16];
   1.681 ++	} temp;
   1.682 ++};
   1.683 ++
   1.684 ++#ifdef XZ_DEC_X86
   1.685 ++/*
   1.686 ++ * This is used to test the most significant byte of a memory address
   1.687 ++ * in an x86 instruction.
   1.688 ++ */
   1.689 ++static inline int bcj_x86_test_msbyte(uint8_t b)
   1.690 ++{
   1.691 ++	return b == 0x00 || b == 0xFF;
   1.692 ++}
   1.693 ++
   1.694 ++static size_t bcj_x86(struct xz_dec_bcj *s, uint8_t *buf, size_t size)
   1.695 ++{
   1.696 ++	static const bool mask_to_allowed_status[8]
   1.697 ++		= { true, true, true, false, true, false, false, false };
   1.698 ++
   1.699 ++	static const uint8_t mask_to_bit_num[8] = { 0, 1, 2, 2, 3, 3, 3, 3 };
   1.700 ++
   1.701 ++	size_t i;
   1.702 ++	size_t prev_pos = (size_t)-1;
   1.703 ++	uint32_t prev_mask = s->x86_prev_mask;
   1.704 ++	uint32_t src;
   1.705 ++	uint32_t dest;
   1.706 ++	uint32_t j;
   1.707 ++	uint8_t b;
   1.708 ++
   1.709 ++	if (size <= 4)
   1.710 ++		return 0;
   1.711 ++
   1.712 ++	size -= 4;
   1.713 ++	for (i = 0; i < size; ++i) {
   1.714 ++		if ((buf[i] & 0xFE) != 0xE8)
   1.715 ++			continue;
   1.716 ++
   1.717 ++		prev_pos = i - prev_pos;
   1.718 ++		if (prev_pos > 3) {
   1.719 ++			prev_mask = 0;
   1.720 ++		} else {
   1.721 ++			prev_mask = (prev_mask << (prev_pos - 1)) & 7;
   1.722 ++			if (prev_mask != 0) {
   1.723 ++				b = buf[i + 4 - mask_to_bit_num[prev_mask]];
   1.724 ++				if (!mask_to_allowed_status[prev_mask]
   1.725 ++						|| bcj_x86_test_msbyte(b)) {
   1.726 ++					prev_pos = i;
   1.727 ++					prev_mask = (prev_mask << 1) | 1;
   1.728 ++					continue;
   1.729 ++				}
   1.730 ++			}
   1.731 ++		}
   1.732 ++
   1.733 ++		prev_pos = i;
   1.734 ++
   1.735 ++		if (bcj_x86_test_msbyte(buf[i + 4])) {
   1.736 ++			src = get_unaligned_le32(buf + i + 1);
   1.737 ++			while (true) {
   1.738 ++				dest = src - (s->pos + (uint32_t)i + 5);
   1.739 ++				if (prev_mask == 0)
   1.740 ++					break;
   1.741 ++
   1.742 ++				j = mask_to_bit_num[prev_mask] * 8;
   1.743 ++				b = (uint8_t)(dest >> (24 - j));
   1.744 ++				if (!bcj_x86_test_msbyte(b))
   1.745 ++					break;
   1.746 ++
   1.747 ++				src = dest ^ (((uint32_t)1 << (32 - j)) - 1);
   1.748 ++			}
   1.749 ++
   1.750 ++			dest &= 0x01FFFFFF;
   1.751 ++			dest |= (uint32_t)0 - (dest & 0x01000000);
   1.752 ++			put_unaligned_le32(dest, buf + i + 1);
   1.753 ++			i += 4;
   1.754 ++		} else {
   1.755 ++			prev_mask = (prev_mask << 1) | 1;
   1.756 ++		}
   1.757 ++	}
   1.758 ++
   1.759 ++	prev_pos = i - prev_pos;
   1.760 ++	s->x86_prev_mask = prev_pos > 3 ? 0 : prev_mask << (prev_pos - 1);
   1.761 ++	return i;
   1.762 ++}
   1.763 ++#endif
   1.764 ++
   1.765 ++#ifdef XZ_DEC_POWERPC
   1.766 ++static size_t bcj_powerpc(struct xz_dec_bcj *s, uint8_t *buf, size_t size)
   1.767 ++{
   1.768 ++	size_t i;
   1.769 ++	uint32_t instr;
   1.770 ++
   1.771 ++	for (i = 0; i + 4 <= size; i += 4) {
   1.772 ++		instr = get_unaligned_be32(buf + i);
   1.773 ++		if ((instr & 0xFC000003) == 0x48000001) {
   1.774 ++			instr &= 0x03FFFFFC;
   1.775 ++			instr -= s->pos + (uint32_t)i;
   1.776 ++			instr &= 0x03FFFFFC;
   1.777 ++			instr |= 0x48000001;
   1.778 ++			put_unaligned_be32(instr, buf + i);
   1.779 ++		}
   1.780 ++	}
   1.781 ++
   1.782 ++	return i;
   1.783 ++}
   1.784 ++#endif
   1.785 ++
   1.786 ++#ifdef XZ_DEC_IA64
   1.787 ++static size_t bcj_ia64(struct xz_dec_bcj *s, uint8_t *buf, size_t size)
   1.788 ++{
   1.789 ++	static const uint8_t branch_table[32] = {
   1.790 ++		0, 0, 0, 0, 0, 0, 0, 0,
   1.791 ++		0, 0, 0, 0, 0, 0, 0, 0,
   1.792 ++		4, 4, 6, 6, 0, 0, 7, 7,
   1.793 ++		4, 4, 0, 0, 4, 4, 0, 0
   1.794 ++	};
   1.795 ++
   1.796 ++	/*
   1.797 ++	 * The local variables take a little bit stack space, but it's less
   1.798 ++	 * than what LZMA2 decoder takes, so it doesn't make sense to reduce
   1.799 ++	 * stack usage here without doing that for the LZMA2 decoder too.
   1.800 ++	 */
   1.801 ++
   1.802 ++	/* Loop counters */
   1.803 ++	size_t i;
   1.804 ++	size_t j;
   1.805 ++
   1.806 ++	/* Instruction slot (0, 1, or 2) in the 128-bit instruction word */
   1.807 ++	uint32_t slot;
   1.808 ++
   1.809 ++	/* Bitwise offset of the instruction indicated by slot */
   1.810 ++	uint32_t bit_pos;
   1.811 ++
   1.812 ++	/* bit_pos split into byte and bit parts */
   1.813 ++	uint32_t byte_pos;
   1.814 ++	uint32_t bit_res;
   1.815 ++
   1.816 ++	/* Address part of an instruction */
   1.817 ++	uint32_t addr;
   1.818 ++
   1.819 ++	/* Mask used to detect which instructions to convert */
   1.820 ++	uint32_t mask;
   1.821 ++
   1.822 ++	/* 41-bit instruction stored somewhere in the lowest 48 bits */
   1.823 ++	uint64_t instr;
   1.824 ++
   1.825 ++	/* Instruction normalized with bit_res for easier manipulation */
   1.826 ++	uint64_t norm;
   1.827 ++
   1.828 ++	for (i = 0; i + 16 <= size; i += 16) {
   1.829 ++		mask = branch_table[buf[i] & 0x1F];
   1.830 ++		for (slot = 0, bit_pos = 5; slot < 3; ++slot, bit_pos += 41) {
   1.831 ++			if (((mask >> slot) & 1) == 0)
   1.832 ++				continue;
   1.833 ++
   1.834 ++			byte_pos = bit_pos >> 3;
   1.835 ++			bit_res = bit_pos & 7;
   1.836 ++			instr = 0;
   1.837 ++			for (j = 0; j < 6; ++j)
   1.838 ++				instr |= (uint64_t)(buf[i + j + byte_pos])
   1.839 ++						<< (8 * j);
   1.840 ++
   1.841 ++			norm = instr >> bit_res;
   1.842 ++
   1.843 ++			if (((norm >> 37) & 0x0F) == 0x05
   1.844 ++					&& ((norm >> 9) & 0x07) == 0) {
   1.845 ++				addr = (norm >> 13) & 0x0FFFFF;
   1.846 ++				addr |= ((uint32_t)(norm >> 36) & 1) << 20;
   1.847 ++				addr <<= 4;
   1.848 ++				addr -= s->pos + (uint32_t)i;
   1.849 ++				addr >>= 4;
   1.850 ++
   1.851 ++				norm &= ~((uint64_t)0x8FFFFF << 13);
   1.852 ++				norm |= (uint64_t)(addr & 0x0FFFFF) << 13;
   1.853 ++				norm |= (uint64_t)(addr & 0x100000)
   1.854 ++						<< (36 - 20);
   1.855 ++
   1.856 ++				instr &= (1 << bit_res) - 1;
   1.857 ++				instr |= norm << bit_res;
   1.858 ++
   1.859 ++				for (j = 0; j < 6; j++)
   1.860 ++					buf[i + j + byte_pos]
   1.861 ++						= (uint8_t)(instr >> (8 * j));
   1.862 ++			}
   1.863 ++		}
   1.864 ++	}
   1.865 ++
   1.866 ++	return i;
   1.867 ++}
   1.868 ++#endif
   1.869 ++
   1.870 ++#ifdef XZ_DEC_ARM
   1.871 ++static size_t bcj_arm(struct xz_dec_bcj *s, uint8_t *buf, size_t size)
   1.872 ++{
   1.873 ++	size_t i;
   1.874 ++	uint32_t addr;
   1.875 ++
   1.876 ++	for (i = 0; i + 4 <= size; i += 4) {
   1.877 ++		if (buf[i + 3] == 0xEB) {
   1.878 ++			addr = (uint32_t)buf[i] | ((uint32_t)buf[i + 1] << 8)
   1.879 ++					| ((uint32_t)buf[i + 2] << 16);
   1.880 ++			addr <<= 2;
   1.881 ++			addr -= s->pos + (uint32_t)i + 8;
   1.882 ++			addr >>= 2;
   1.883 ++			buf[i] = (uint8_t)addr;
   1.884 ++			buf[i + 1] = (uint8_t)(addr >> 8);
   1.885 ++			buf[i + 2] = (uint8_t)(addr >> 16);
   1.886 ++		}
   1.887 ++	}
   1.888 ++
   1.889 ++	return i;
   1.890 ++}
   1.891 ++#endif
   1.892 ++
   1.893 ++#ifdef XZ_DEC_ARMTHUMB
   1.894 ++static size_t bcj_armthumb(struct xz_dec_bcj *s, uint8_t *buf, size_t size)
   1.895 ++{
   1.896 ++	size_t i;
   1.897 ++	uint32_t addr;
   1.898 ++
   1.899 ++	for (i = 0; i + 4 <= size; i += 2) {
   1.900 ++		if ((buf[i + 1] & 0xF8) == 0xF0
   1.901 ++				&& (buf[i + 3] & 0xF8) == 0xF8) {
   1.902 ++			addr = (((uint32_t)buf[i + 1] & 0x07) << 19)
   1.903 ++					| ((uint32_t)buf[i] << 11)
   1.904 ++					| (((uint32_t)buf[i + 3] & 0x07) << 8)
   1.905 ++					| (uint32_t)buf[i + 2];
   1.906 ++			addr <<= 1;
   1.907 ++			addr -= s->pos + (uint32_t)i + 4;
   1.908 ++			addr >>= 1;
   1.909 ++			buf[i + 1] = (uint8_t)(0xF0 | ((addr >> 19) & 0x07));
   1.910 ++			buf[i] = (uint8_t)(addr >> 11);
   1.911 ++			buf[i + 3] = (uint8_t)(0xF8 | ((addr >> 8) & 0x07));
   1.912 ++			buf[i + 2] = (uint8_t)addr;
   1.913 ++			i += 2;
   1.914 ++		}
   1.915 ++	}
   1.916 ++
   1.917 ++	return i;
   1.918 ++}
   1.919 ++#endif
   1.920 ++
   1.921 ++#ifdef XZ_DEC_SPARC
   1.922 ++static size_t bcj_sparc(struct xz_dec_bcj *s, uint8_t *buf, size_t size)
   1.923 ++{
   1.924 ++	size_t i;
   1.925 ++	uint32_t instr;
   1.926 ++
   1.927 ++	for (i = 0; i + 4 <= size; i += 4) {
   1.928 ++		instr = get_unaligned_be32(buf + i);
   1.929 ++		if ((instr >> 22) == 0x100 || (instr >> 22) == 0x1FF) {
   1.930 ++			instr <<= 2;
   1.931 ++			instr -= s->pos + (uint32_t)i;
   1.932 ++			instr >>= 2;
   1.933 ++			instr = ((uint32_t)0x40000000 - (instr & 0x400000))
   1.934 ++					| 0x40000000 | (instr & 0x3FFFFF);
   1.935 ++			put_unaligned_be32(instr, buf + i);
   1.936 ++		}
   1.937 ++	}
   1.938 ++
   1.939 ++	return i;
   1.940 ++}
   1.941 ++#endif
   1.942 ++
   1.943 ++/*
   1.944 ++ * Apply the selected BCJ filter. Update *pos and s->pos to match the amount
   1.945 ++ * of data that got filtered.
   1.946 ++ *
   1.947 ++ * NOTE: This is implemented as a switch statement to avoid using function
   1.948 ++ * pointers, which could be problematic in the kernel boot code, which must
   1.949 ++ * avoid pointers to static data (at least on x86).
   1.950 ++ */
   1.951 ++static void bcj_apply(struct xz_dec_bcj *s,
   1.952 ++		      uint8_t *buf, size_t *pos, size_t size)
   1.953 ++{
   1.954 ++	size_t filtered;
   1.955 ++
   1.956 ++	buf += *pos;
   1.957 ++	size -= *pos;
   1.958 ++
   1.959 ++	switch (s->type) {
   1.960 ++#ifdef XZ_DEC_X86
   1.961 ++	case BCJ_X86:
   1.962 ++		filtered = bcj_x86(s, buf, size);
   1.963 ++		break;
   1.964 ++#endif
   1.965 ++#ifdef XZ_DEC_POWERPC
   1.966 ++	case BCJ_POWERPC:
   1.967 ++		filtered = bcj_powerpc(s, buf, size);
   1.968 ++		break;
   1.969 ++#endif
   1.970 ++#ifdef XZ_DEC_IA64
   1.971 ++	case BCJ_IA64:
   1.972 ++		filtered = bcj_ia64(s, buf, size);
   1.973 ++		break;
   1.974 ++#endif
   1.975 ++#ifdef XZ_DEC_ARM
   1.976 ++	case BCJ_ARM:
   1.977 ++		filtered = bcj_arm(s, buf, size);
   1.978 ++		break;
   1.979 ++#endif
   1.980 ++#ifdef XZ_DEC_ARMTHUMB
   1.981 ++	case BCJ_ARMTHUMB:
   1.982 ++		filtered = bcj_armthumb(s, buf, size);
   1.983 ++		break;
   1.984 ++#endif
   1.985 ++#ifdef XZ_DEC_SPARC
   1.986 ++	case BCJ_SPARC:
   1.987 ++		filtered = bcj_sparc(s, buf, size);
   1.988 ++		break;
   1.989 ++#endif
   1.990 ++	default:
   1.991 ++		/* Never reached but silence compiler warnings. */
   1.992 ++		filtered = 0;
   1.993 ++		break;
   1.994 ++	}
   1.995 ++
   1.996 ++	*pos += filtered;
   1.997 ++	s->pos += filtered;
   1.998 ++}
   1.999 ++
  1.1000 ++/*
  1.1001 ++ * Flush pending filtered data from temp to the output buffer.
  1.1002 ++ * Move the remaining mixture of possibly filtered and unfiltered
  1.1003 ++ * data to the beginning of temp.
  1.1004 ++ */
  1.1005 ++static void bcj_flush(struct xz_dec_bcj *s, struct xz_buf *b)
  1.1006 ++{
  1.1007 ++	size_t copy_size;
  1.1008 ++
  1.1009 ++	copy_size = min_t(size_t, s->temp.filtered, b->out_size - b->out_pos);
  1.1010 ++	memcpy(b->out + b->out_pos, s->temp.buf, copy_size);
  1.1011 ++	b->out_pos += copy_size;
  1.1012 ++
  1.1013 ++	s->temp.filtered -= copy_size;
  1.1014 ++	s->temp.size -= copy_size;
  1.1015 ++	memmove(s->temp.buf, s->temp.buf + copy_size, s->temp.size);
  1.1016 ++}
  1.1017 ++
  1.1018 ++/*
  1.1019 ++ * The BCJ filter functions are primitive in sense that they process the
  1.1020 ++ * data in chunks of 1-16 bytes. To hide this issue, this function does
  1.1021 ++ * some buffering.
  1.1022 ++ */
  1.1023 ++XZ_EXTERN enum xz_ret xz_dec_bcj_run(struct xz_dec_bcj *s,
  1.1024 ++				     struct xz_dec_lzma2 *lzma2,
  1.1025 ++				     struct xz_buf *b)
  1.1026 ++{
  1.1027 ++	size_t out_start;
  1.1028 ++
  1.1029 ++	/*
  1.1030 ++	 * Flush pending already filtered data to the output buffer. Return
  1.1031 ++	 * immediatelly if we couldn't flush everything, or if the next
  1.1032 ++	 * filter in the chain had already returned XZ_STREAM_END.
  1.1033 ++	 */
  1.1034 ++	if (s->temp.filtered > 0) {
  1.1035 ++		bcj_flush(s, b);
  1.1036 ++		if (s->temp.filtered > 0)
  1.1037 ++			return XZ_OK;
  1.1038 ++
  1.1039 ++		if (s->ret == XZ_STREAM_END)
  1.1040 ++			return XZ_STREAM_END;
  1.1041 ++	}
  1.1042 ++
  1.1043 ++	/*
  1.1044 ++	 * If we have more output space than what is currently pending in
  1.1045 ++	 * temp, copy the unfiltered data from temp to the output buffer
  1.1046 ++	 * and try to fill the output buffer by decoding more data from the
  1.1047 ++	 * next filter in the chain. Apply the BCJ filter on the new data
  1.1048 ++	 * in the output buffer. If everything cannot be filtered, copy it
  1.1049 ++	 * to temp and rewind the output buffer position accordingly.
  1.1050 ++	 */
  1.1051 ++	if (s->temp.size < b->out_size - b->out_pos) {
  1.1052 ++		out_start = b->out_pos;
  1.1053 ++		memcpy(b->out + b->out_pos, s->temp.buf, s->temp.size);
  1.1054 ++		b->out_pos += s->temp.size;
  1.1055 ++
  1.1056 ++		s->ret = xz_dec_lzma2_run(lzma2, b);
  1.1057 ++		if (s->ret != XZ_STREAM_END
  1.1058 ++				&& (s->ret != XZ_OK || s->single_call))
  1.1059 ++			return s->ret;
  1.1060 ++
  1.1061 ++		bcj_apply(s, b->out, &out_start, b->out_pos);
  1.1062 ++
  1.1063 ++		/*
  1.1064 ++		 * As an exception, if the next filter returned XZ_STREAM_END,
  1.1065 ++		 * we can do that too, since the last few bytes that remain
  1.1066 ++		 * unfiltered are meant to remain unfiltered.
  1.1067 ++		 */
  1.1068 ++		if (s->ret == XZ_STREAM_END)
  1.1069 ++			return XZ_STREAM_END;
  1.1070 ++
  1.1071 ++		s->temp.size = b->out_pos - out_start;
  1.1072 ++		b->out_pos -= s->temp.size;
  1.1073 ++		memcpy(s->temp.buf, b->out + b->out_pos, s->temp.size);
  1.1074 ++	}
  1.1075 ++
  1.1076 ++	/*
  1.1077 ++	 * If we have unfiltered data in temp, try to fill by decoding more
  1.1078 ++	 * data from the next filter. Apply the BCJ filter on temp. Then we
  1.1079 ++	 * hopefully can fill the actual output buffer by copying filtered
  1.1080 ++	 * data from temp. A mix of filtered and unfiltered data may be left
  1.1081 ++	 * in temp; it will be taken care on the next call to this function.
  1.1082 ++	 */
  1.1083 ++	if (s->temp.size > 0) {
  1.1084 ++		/* Make b->out{,_pos,_size} temporarily point to s->temp. */
  1.1085 ++		s->out = b->out;
  1.1086 ++		s->out_pos = b->out_pos;
  1.1087 ++		s->out_size = b->out_size;
  1.1088 ++		b->out = s->temp.buf;
  1.1089 ++		b->out_pos = s->temp.size;
  1.1090 ++		b->out_size = sizeof(s->temp.buf);
  1.1091 ++
  1.1092 ++		s->ret = xz_dec_lzma2_run(lzma2, b);
  1.1093 ++
  1.1094 ++		s->temp.size = b->out_pos;
  1.1095 ++		b->out = s->out;
  1.1096 ++		b->out_pos = s->out_pos;
  1.1097 ++		b->out_size = s->out_size;
  1.1098 ++
  1.1099 ++		if (s->ret != XZ_OK && s->ret != XZ_STREAM_END)
  1.1100 ++			return s->ret;
  1.1101 ++
  1.1102 ++		bcj_apply(s, s->temp.buf, &s->temp.filtered, s->temp.size);
  1.1103 ++
  1.1104 ++		/*
  1.1105 ++		 * If the next filter returned XZ_STREAM_END, we mark that
  1.1106 ++		 * everything is filtered, since the last unfiltered bytes
  1.1107 ++		 * of the stream are meant to be left as is.
  1.1108 ++		 */
  1.1109 ++		if (s->ret == XZ_STREAM_END)
  1.1110 ++			s->temp.filtered = s->temp.size;
  1.1111 ++
  1.1112 ++		bcj_flush(s, b);
  1.1113 ++		if (s->temp.filtered > 0)
  1.1114 ++			return XZ_OK;
  1.1115 ++	}
  1.1116 ++
  1.1117 ++	return s->ret;
  1.1118 ++}
  1.1119 ++
  1.1120 ++XZ_EXTERN struct xz_dec_bcj *xz_dec_bcj_create(bool single_call)
  1.1121 ++{
  1.1122 ++	struct xz_dec_bcj *s = kmalloc(sizeof(*s), GFP_KERNEL);
  1.1123 ++	if (s != NULL)
  1.1124 ++		s->single_call = single_call;
  1.1125 ++
  1.1126 ++	return s;
  1.1127 ++}
  1.1128 ++
  1.1129 ++XZ_EXTERN enum xz_ret xz_dec_bcj_reset(struct xz_dec_bcj *s, uint8_t id)
  1.1130 ++{
  1.1131 ++	switch (id) {
  1.1132 ++#ifdef XZ_DEC_X86
  1.1133 ++	case BCJ_X86:
  1.1134 ++#endif
  1.1135 ++#ifdef XZ_DEC_POWERPC
  1.1136 ++	case BCJ_POWERPC:
  1.1137 ++#endif
  1.1138 ++#ifdef XZ_DEC_IA64
  1.1139 ++	case BCJ_IA64:
  1.1140 ++#endif
  1.1141 ++#ifdef XZ_DEC_ARM
  1.1142 ++	case BCJ_ARM:
  1.1143 ++#endif
  1.1144 ++#ifdef XZ_DEC_ARMTHUMB
  1.1145 ++	case BCJ_ARMTHUMB:
  1.1146 ++#endif
  1.1147 ++#ifdef XZ_DEC_SPARC
  1.1148 ++	case BCJ_SPARC:
  1.1149 ++#endif
  1.1150 ++		break;
  1.1151 ++
  1.1152 ++	default:
  1.1153 ++		/* Unsupported Filter ID */
  1.1154 ++		return XZ_OPTIONS_ERROR;
  1.1155 ++	}
  1.1156 ++
  1.1157 ++	s->type = id;
  1.1158 ++	s->ret = XZ_OK;
  1.1159 ++	s->pos = 0;
  1.1160 ++	s->x86_prev_mask = 0;
  1.1161 ++	s->temp.filtered = 0;
  1.1162 ++	s->temp.size = 0;
  1.1163 ++
  1.1164 ++	return XZ_OK;
  1.1165 ++}
  1.1166 ++
  1.1167 ++#endif
  1.1168 +diff --git a/lib/xz/xz_dec_lzma2.c b/lib/xz/xz_dec_lzma2.c
  1.1169 +new file mode 100644
  1.1170 +index 0000000..ea5fa4f
  1.1171 +--- /dev/null
  1.1172 ++++ b/lib/xz/xz_dec_lzma2.c
  1.1173 +@@ -0,0 +1,1171 @@
  1.1174 ++/*
  1.1175 ++ * LZMA2 decoder
  1.1176 ++ *
  1.1177 ++ * Authors: Lasse Collin <lasse.collin@tukaani.org>
  1.1178 ++ *          Igor Pavlov <http://7-zip.org/>
  1.1179 ++ *
  1.1180 ++ * This file has been put into the public domain.
  1.1181 ++ * You can do whatever you want with this file.
  1.1182 ++ */
  1.1183 ++
  1.1184 ++#include "xz_private.h"
  1.1185 ++#include "xz_lzma2.h"
  1.1186 ++
  1.1187 ++/*
  1.1188 ++ * Range decoder initialization eats the first five bytes of each LZMA chunk.
  1.1189 ++ */
  1.1190 ++#define RC_INIT_BYTES 5
  1.1191 ++
  1.1192 ++/*
  1.1193 ++ * Minimum number of usable input buffer to safely decode one LZMA symbol.
  1.1194 ++ * The worst case is that we decode 22 bits using probabilities and 26
  1.1195 ++ * direct bits. This may decode at maximum of 20 bytes of input. However,
  1.1196 ++ * lzma_main() does an extra normalization before returning, thus we
  1.1197 ++ * need to put 21 here.
  1.1198 ++ */
  1.1199 ++#define LZMA_IN_REQUIRED 21
  1.1200 ++
  1.1201 ++/*
  1.1202 ++ * Dictionary (history buffer)
  1.1203 ++ *
  1.1204 ++ * These are always true:
  1.1205 ++ *    start <= pos <= full <= end
  1.1206 ++ *    pos <= limit <= end
  1.1207 ++ *
  1.1208 ++ * In multi-call mode, also these are true:
  1.1209 ++ *    end == size
  1.1210 ++ *    size <= size_max
  1.1211 ++ *    allocated <= size
  1.1212 ++ *
  1.1213 ++ * Most of these variables are size_t to support single-call mode,
  1.1214 ++ * in which the dictionary variables address the actual output
  1.1215 ++ * buffer directly.
  1.1216 ++ */
  1.1217 ++struct dictionary {
  1.1218 ++	/* Beginning of the history buffer */
  1.1219 ++	uint8_t *buf;
  1.1220 ++
  1.1221 ++	/* Old position in buf (before decoding more data) */
  1.1222 ++	size_t start;
  1.1223 ++
  1.1224 ++	/* Position in buf */
  1.1225 ++	size_t pos;
  1.1226 ++
  1.1227 ++	/*
  1.1228 ++	 * How full dictionary is. This is used to detect corrupt input that
  1.1229 ++	 * would read beyond the beginning of the uncompressed stream.
  1.1230 ++	 */
  1.1231 ++	size_t full;
  1.1232 ++
  1.1233 ++	/* Write limit; we don't write to buf[limit] or later bytes. */
  1.1234 ++	size_t limit;
  1.1235 ++
  1.1236 ++	/*
  1.1237 ++	 * End of the dictionary buffer. In multi-call mode, this is
  1.1238 ++	 * the same as the dictionary size. In single-call mode, this
  1.1239 ++	 * indicates the size of the output buffer.
  1.1240 ++	 */
  1.1241 ++	size_t end;
  1.1242 ++
  1.1243 ++	/*
  1.1244 ++	 * Size of the dictionary as specified in Block Header. This is used
  1.1245 ++	 * together with "full" to detect corrupt input that would make us
  1.1246 ++	 * read beyond the beginning of the uncompressed stream.
  1.1247 ++	 */
  1.1248 ++	uint32_t size;
  1.1249 ++
  1.1250 ++	/*
  1.1251 ++	 * Maximum allowed dictionary size in multi-call mode.
  1.1252 ++	 * This is ignored in single-call mode.
  1.1253 ++	 */
  1.1254 ++	uint32_t size_max;
  1.1255 ++
  1.1256 ++	/*
  1.1257 ++	 * Amount of memory currently allocated for the dictionary.
  1.1258 ++	 * This is used only with XZ_DYNALLOC. (With XZ_PREALLOC,
  1.1259 ++	 * size_max is always the same as the allocated size.)
  1.1260 ++	 */
  1.1261 ++	uint32_t allocated;
  1.1262 ++
  1.1263 ++	/* Operation mode */
  1.1264 ++	enum xz_mode mode;
  1.1265 ++};
  1.1266 ++
  1.1267 ++/* Range decoder */
  1.1268 ++struct rc_dec {
  1.1269 ++	uint32_t range;
  1.1270 ++	uint32_t code;
  1.1271 ++
  1.1272 ++	/*
  1.1273 ++	 * Number of initializing bytes remaining to be read
  1.1274 ++	 * by rc_read_init().
  1.1275 ++	 */
  1.1276 ++	uint32_t init_bytes_left;
  1.1277 ++
  1.1278 ++	/*
  1.1279 ++	 * Buffer from which we read our input. It can be either
  1.1280 ++	 * temp.buf or the caller-provided input buffer.
  1.1281 ++	 */
  1.1282 ++	const uint8_t *in;
  1.1283 ++	size_t in_pos;
  1.1284 ++	size_t in_limit;
  1.1285 ++};
  1.1286 ++
  1.1287 ++/* Probabilities for a length decoder. */
  1.1288 ++struct lzma_len_dec {
  1.1289 ++	/* Probability of match length being at least 10 */
  1.1290 ++	uint16_t choice;
  1.1291 ++
  1.1292 ++	/* Probability of match length being at least 18 */
  1.1293 ++	uint16_t choice2;
  1.1294 ++
  1.1295 ++	/* Probabilities for match lengths 2-9 */
  1.1296 ++	uint16_t low[POS_STATES_MAX][LEN_LOW_SYMBOLS];
  1.1297 ++
  1.1298 ++	/* Probabilities for match lengths 10-17 */
  1.1299 ++	uint16_t mid[POS_STATES_MAX][LEN_MID_SYMBOLS];
  1.1300 ++
  1.1301 ++	/* Probabilities for match lengths 18-273 */
  1.1302 ++	uint16_t high[LEN_HIGH_SYMBOLS];
  1.1303 ++};
  1.1304 ++
  1.1305 ++struct lzma_dec {
  1.1306 ++	/* Distances of latest four matches */
  1.1307 ++	uint32_t rep0;
  1.1308 ++	uint32_t rep1;
  1.1309 ++	uint32_t rep2;
  1.1310 ++	uint32_t rep3;
  1.1311 ++
  1.1312 ++	/* Types of the most recently seen LZMA symbols */
  1.1313 ++	enum lzma_state state;
  1.1314 ++
  1.1315 ++	/*
  1.1316 ++	 * Length of a match. This is updated so that dict_repeat can
  1.1317 ++	 * be called again to finish repeating the whole match.
  1.1318 ++	 */
  1.1319 ++	uint32_t len;
  1.1320 ++
  1.1321 ++	/*
  1.1322 ++	 * LZMA properties or related bit masks (number of literal
  1.1323 ++	 * context bits, a mask dervied from the number of literal
  1.1324 ++	 * position bits, and a mask dervied from the number
  1.1325 ++	 * position bits)
  1.1326 ++	 */
  1.1327 ++	uint32_t lc;
  1.1328 ++	uint32_t literal_pos_mask; /* (1 << lp) - 1 */
  1.1329 ++	uint32_t pos_mask;         /* (1 << pb) - 1 */
  1.1330 ++
  1.1331 ++	/* If 1, it's a match. Otherwise it's a single 8-bit literal. */
  1.1332 ++	uint16_t is_match[STATES][POS_STATES_MAX];
  1.1333 ++
  1.1334 ++	/* If 1, it's a repeated match. The distance is one of rep0 .. rep3. */
  1.1335 ++	uint16_t is_rep[STATES];
  1.1336 ++
  1.1337 ++	/*
  1.1338 ++	 * If 0, distance of a repeated match is rep0.
  1.1339 ++	 * Otherwise check is_rep1.
  1.1340 ++	 */
  1.1341 ++	uint16_t is_rep0[STATES];
  1.1342 ++
  1.1343 ++	/*
  1.1344 ++	 * If 0, distance of a repeated match is rep1.
  1.1345 ++	 * Otherwise check is_rep2.
  1.1346 ++	 */
  1.1347 ++	uint16_t is_rep1[STATES];
  1.1348 ++
  1.1349 ++	/* If 0, distance of a repeated match is rep2. Otherwise it is rep3. */
  1.1350 ++	uint16_t is_rep2[STATES];
  1.1351 ++
  1.1352 ++	/*
  1.1353 ++	 * If 1, the repeated match has length of one byte. Otherwise
  1.1354 ++	 * the length is decoded from rep_len_decoder.
  1.1355 ++	 */
  1.1356 ++	uint16_t is_rep0_long[STATES][POS_STATES_MAX];
  1.1357 ++
  1.1358 ++	/*
  1.1359 ++	 * Probability tree for the highest two bits of the match
  1.1360 ++	 * distance. There is a separate probability tree for match
  1.1361 ++	 * lengths of 2 (i.e. MATCH_LEN_MIN), 3, 4, and [5, 273].
  1.1362 ++	 */
  1.1363 ++	uint16_t dist_slot[DIST_STATES][DIST_SLOTS];
  1.1364 ++
  1.1365 ++	/*
  1.1366 ++	 * Probility trees for additional bits for match distance
  1.1367 ++	 * when the distance is in the range [4, 127].
  1.1368 ++	 */
  1.1369 ++	uint16_t dist_special[FULL_DISTANCES - DIST_MODEL_END];
  1.1370 ++
  1.1371 ++	/*
  1.1372 ++	 * Probability tree for the lowest four bits of a match
  1.1373 ++	 * distance that is equal to or greater than 128.
  1.1374 ++	 */
  1.1375 ++	uint16_t dist_align[ALIGN_SIZE];
  1.1376 ++
  1.1377 ++	/* Length of a normal match */
  1.1378 ++	struct lzma_len_dec match_len_dec;
  1.1379 ++
  1.1380 ++	/* Length of a repeated match */
  1.1381 ++	struct lzma_len_dec rep_len_dec;
  1.1382 ++
  1.1383 ++	/* Probabilities of literals */
  1.1384 ++	uint16_t literal[LITERAL_CODERS_MAX][LITERAL_CODER_SIZE];
  1.1385 ++};
  1.1386 ++
  1.1387 ++struct lzma2_dec {
  1.1388 ++	/* Position in xz_dec_lzma2_run(). */
  1.1389 ++	enum lzma2_seq {
  1.1390 ++		SEQ_CONTROL,
  1.1391 ++		SEQ_UNCOMPRESSED_1,
  1.1392 ++		SEQ_UNCOMPRESSED_2,
  1.1393 ++		SEQ_COMPRESSED_0,
  1.1394 ++		SEQ_COMPRESSED_1,
  1.1395 ++		SEQ_PROPERTIES,
  1.1396 ++		SEQ_LZMA_PREPARE,
  1.1397 ++		SEQ_LZMA_RUN,
  1.1398 ++		SEQ_COPY
  1.1399 ++	} sequence;
  1.1400 ++
  1.1401 ++	/* Next position after decoding the compressed size of the chunk. */
  1.1402 ++	enum lzma2_seq next_sequence;
  1.1403 ++
  1.1404 ++	/* Uncompressed size of LZMA chunk (2 MiB at maximum) */
  1.1405 ++	uint32_t uncompressed;
  1.1406 ++
  1.1407 ++	/*
  1.1408 ++	 * Compressed size of LZMA chunk or compressed/uncompressed
  1.1409 ++	 * size of uncompressed chunk (64 KiB at maximum)
  1.1410 ++	 */
  1.1411 ++	uint32_t compressed;
  1.1412 ++
  1.1413 ++	/*
  1.1414 ++	 * True if dictionary reset is needed. This is false before
  1.1415 ++	 * the first chunk (LZMA or uncompressed).
  1.1416 ++	 */
  1.1417 ++	bool need_dict_reset;
  1.1418 ++
  1.1419 ++	/*
  1.1420 ++	 * True if new LZMA properties are needed. This is false
  1.1421 ++	 * before the first LZMA chunk.
  1.1422 ++	 */
  1.1423 ++	bool need_props;
  1.1424 ++};
  1.1425 ++
  1.1426 ++struct xz_dec_lzma2 {
  1.1427 ++	/*
  1.1428 ++	 * The order below is important on x86 to reduce code size and
  1.1429 ++	 * it shouldn't hurt on other platforms. Everything up to and
  1.1430 ++	 * including lzma.pos_mask are in the first 128 bytes on x86-32,
  1.1431 ++	 * which allows using smaller instructions to access those
  1.1432 ++	 * variables. On x86-64, fewer variables fit into the first 128
  1.1433 ++	 * bytes, but this is still the best order without sacrificing
  1.1434 ++	 * the readability by splitting the structures.
  1.1435 ++	 */
  1.1436 ++	struct rc_dec rc;
  1.1437 ++	struct dictionary dict;
  1.1438 ++	struct lzma2_dec lzma2;
  1.1439 ++	struct lzma_dec lzma;
  1.1440 ++
  1.1441 ++	/*
  1.1442 ++	 * Temporary buffer which holds small number of input bytes between
  1.1443 ++	 * decoder calls. See lzma2_lzma() for details.
  1.1444 ++	 */
  1.1445 ++	struct {
  1.1446 ++		uint32_t size;
  1.1447 ++		uint8_t buf[3 * LZMA_IN_REQUIRED];
  1.1448 ++	} temp;
  1.1449 ++};
  1.1450 ++
  1.1451 ++/**************
  1.1452 ++ * Dictionary *
  1.1453 ++ **************/
  1.1454 ++
  1.1455 ++/*
  1.1456 ++ * Reset the dictionary state. When in single-call mode, set up the beginning
  1.1457 ++ * of the dictionary to point to the actual output buffer.
  1.1458 ++ */
  1.1459 ++static void dict_reset(struct dictionary *dict, struct xz_buf *b)
  1.1460 ++{
  1.1461 ++	if (DEC_IS_SINGLE(dict->mode)) {
  1.1462 ++		dict->buf = b->out + b->out_pos;
  1.1463 ++		dict->end = b->out_size - b->out_pos;
  1.1464 ++	}
  1.1465 ++
  1.1466 ++	dict->start = 0;
  1.1467 ++	dict->pos = 0;
  1.1468 ++	dict->limit = 0;
  1.1469 ++	dict->full = 0;
  1.1470 ++}
  1.1471 ++
  1.1472 ++/* Set dictionary write limit */
  1.1473 ++static void dict_limit(struct dictionary *dict, size_t out_max)
  1.1474 ++{
  1.1475 ++	if (dict->end - dict->pos <= out_max)
  1.1476 ++		dict->limit = dict->end;
  1.1477 ++	else
  1.1478 ++		dict->limit = dict->pos + out_max;
  1.1479 ++}
  1.1480 ++
  1.1481 ++/* Return true if at least one byte can be written into the dictionary. */
  1.1482 ++static inline bool dict_has_space(const struct dictionary *dict)
  1.1483 ++{
  1.1484 ++	return dict->pos < dict->limit;
  1.1485 ++}
  1.1486 ++
  1.1487 ++/*
  1.1488 ++ * Get a byte from the dictionary at the given distance. The distance is
  1.1489 ++ * assumed to valid, or as a special case, zero when the dictionary is
  1.1490 ++ * still empty. This special case is needed for single-call decoding to
  1.1491 ++ * avoid writing a '\0' to the end of the destination buffer.
  1.1492 ++ */
  1.1493 ++static inline uint32_t dict_get(const struct dictionary *dict, uint32_t dist)
  1.1494 ++{
  1.1495 ++	size_t offset = dict->pos - dist - 1;
  1.1496 ++
  1.1497 ++	if (dist >= dict->pos)
  1.1498 ++		offset += dict->end;
  1.1499 ++
  1.1500 ++	return dict->full > 0 ? dict->buf[offset] : 0;
  1.1501 ++}
  1.1502 ++
  1.1503 ++/*
  1.1504 ++ * Put one byte into the dictionary. It is assumed that there is space for it.
  1.1505 ++ */
  1.1506 ++static inline void dict_put(struct dictionary *dict, uint8_t byte)
  1.1507 ++{
  1.1508 ++	dict->buf[dict->pos++] = byte;
  1.1509 ++
  1.1510 ++	if (dict->full < dict->pos)
  1.1511 ++		dict->full = dict->pos;
  1.1512 ++}
  1.1513 ++
  1.1514 ++/*
  1.1515 ++ * Repeat given number of bytes from the given distance. If the distance is
  1.1516 ++ * invalid, false is returned. On success, true is returned and *len is
  1.1517 ++ * updated to indicate how many bytes were left to be repeated.
  1.1518 ++ */
  1.1519 ++static bool dict_repeat(struct dictionary *dict, uint32_t *len, uint32_t dist)
  1.1520 ++{
  1.1521 ++	size_t back;
  1.1522 ++	uint32_t left;
  1.1523 ++
  1.1524 ++	if (dist >= dict->full || dist >= dict->size)
  1.1525 ++		return false;
  1.1526 ++
  1.1527 ++	left = min_t(size_t, dict->limit - dict->pos, *len);
  1.1528 ++	*len -= left;
  1.1529 ++
  1.1530 ++	back = dict->pos - dist - 1;
  1.1531 ++	if (dist >= dict->pos)
  1.1532 ++		back += dict->end;
  1.1533 ++
  1.1534 ++	do {
  1.1535 ++		dict->buf[dict->pos++] = dict->buf[back++];
  1.1536 ++		if (back == dict->end)
  1.1537 ++			back = 0;
  1.1538 ++	} while (--left > 0);
  1.1539 ++
  1.1540 ++	if (dict->full < dict->pos)
  1.1541 ++		dict->full = dict->pos;
  1.1542 ++
  1.1543 ++	return true;
  1.1544 ++}
  1.1545 ++
  1.1546 ++/* Copy uncompressed data as is from input to dictionary and output buffers. */
  1.1547 ++static void dict_uncompressed(struct dictionary *dict, struct xz_buf *b,
  1.1548 ++			      uint32_t *left)
  1.1549 ++{
  1.1550 ++	size_t copy_size;
  1.1551 ++
  1.1552 ++	while (*left > 0 && b->in_pos < b->in_size
  1.1553 ++			&& b->out_pos < b->out_size) {
  1.1554 ++		copy_size = min(b->in_size - b->in_pos,
  1.1555 ++				b->out_size - b->out_pos);
  1.1556 ++		if (copy_size > dict->end - dict->pos)
  1.1557 ++			copy_size = dict->end - dict->pos;
  1.1558 ++		if (copy_size > *left)
  1.1559 ++			copy_size = *left;
  1.1560 ++
  1.1561 ++		*left -= copy_size;
  1.1562 ++
  1.1563 ++		memcpy(dict->buf + dict->pos, b->in + b->in_pos, copy_size);
  1.1564 ++		dict->pos += copy_size;
  1.1565 ++
  1.1566 ++		if (dict->full < dict->pos)
  1.1567 ++			dict->full = dict->pos;
  1.1568 ++
  1.1569 ++		if (DEC_IS_MULTI(dict->mode)) {
  1.1570 ++			if (dict->pos == dict->end)
  1.1571 ++				dict->pos = 0;
  1.1572 ++
  1.1573 ++			memcpy(b->out + b->out_pos, b->in + b->in_pos,
  1.1574 ++					copy_size);
  1.1575 ++		}
  1.1576 ++
  1.1577 ++		dict->start = dict->pos;
  1.1578 ++
  1.1579 ++		b->out_pos += copy_size;
  1.1580 ++		b->in_pos += copy_size;
  1.1581 ++	}
  1.1582 ++}
  1.1583 ++
  1.1584 ++/*
  1.1585 ++ * Flush pending data from dictionary to b->out. It is assumed that there is
  1.1586 ++ * enough space in b->out. This is guaranteed because caller uses dict_limit()
  1.1587 ++ * before decoding data into the dictionary.
  1.1588 ++ */
  1.1589 ++static uint32_t dict_flush(struct dictionary *dict, struct xz_buf *b)
  1.1590 ++{
  1.1591 ++	size_t copy_size = dict->pos - dict->start;
  1.1592 ++
  1.1593 ++	if (DEC_IS_MULTI(dict->mode)) {
  1.1594 ++		if (dict->pos == dict->end)
  1.1595 ++			dict->pos = 0;
  1.1596 ++
  1.1597 ++		memcpy(b->out + b->out_pos, dict->buf + dict->start,
  1.1598 ++				copy_size);
  1.1599 ++	}
  1.1600 ++
  1.1601 ++	dict->start = dict->pos;
  1.1602 ++	b->out_pos += copy_size;
  1.1603 ++	return copy_size;
  1.1604 ++}
  1.1605 ++
  1.1606 ++/*****************
  1.1607 ++ * Range decoder *
  1.1608 ++ *****************/
  1.1609 ++
  1.1610 ++/* Reset the range decoder. */
  1.1611 ++static void rc_reset(struct rc_dec *rc)
  1.1612 ++{
  1.1613 ++	rc->range = (uint32_t)-1;
  1.1614 ++	rc->code = 0;
  1.1615 ++	rc->init_bytes_left = RC_INIT_BYTES;
  1.1616 ++}
  1.1617 ++
  1.1618 ++/*
  1.1619 ++ * Read the first five initial bytes into rc->code if they haven't been
  1.1620 ++ * read already. (Yes, the first byte gets completely ignored.)
  1.1621 ++ */
  1.1622 ++static bool rc_read_init(struct rc_dec *rc, struct xz_buf *b)
  1.1623 ++{
  1.1624 ++	while (rc->init_bytes_left > 0) {
  1.1625 ++		if (b->in_pos == b->in_size)
  1.1626 ++			return false;
  1.1627 ++
  1.1628 ++		rc->code = (rc->code << 8) + b->in[b->in_pos++];
  1.1629 ++		--rc->init_bytes_left;
  1.1630 ++	}
  1.1631 ++
  1.1632 ++	return true;
  1.1633 ++}
  1.1634 ++
  1.1635 ++/* Return true if there may not be enough input for the next decoding loop. */
  1.1636 ++static inline bool rc_limit_exceeded(const struct rc_dec *rc)
  1.1637 ++{
  1.1638 ++	return rc->in_pos > rc->in_limit;
  1.1639 ++}
  1.1640 ++
  1.1641 ++/*
  1.1642 ++ * Return true if it is possible (from point of view of range decoder) that
  1.1643 ++ * we have reached the end of the LZMA chunk.
  1.1644 ++ */
  1.1645 ++static inline bool rc_is_finished(const struct rc_dec *rc)
  1.1646 ++{
  1.1647 ++	return rc->code == 0;
  1.1648 ++}
  1.1649 ++
  1.1650 ++/* Read the next input byte if needed. */
  1.1651 ++static __always_inline void rc_normalize(struct rc_dec *rc)
  1.1652 ++{
  1.1653 ++	if (rc->range < RC_TOP_VALUE) {
  1.1654 ++		rc->range <<= RC_SHIFT_BITS;
  1.1655 ++		rc->code = (rc->code << RC_SHIFT_BITS) + rc->in[rc->in_pos++];
  1.1656 ++	}
  1.1657 ++}
  1.1658 ++
  1.1659 ++/*
  1.1660 ++ * Decode one bit. In some versions, this function has been splitted in three
  1.1661 ++ * functions so that the compiler is supposed to be able to more easily avoid
  1.1662 ++ * an extra branch. In this particular version of the LZMA decoder, this
  1.1663 ++ * doesn't seem to be a good idea (tested with GCC 3.3.6, 3.4.6, and 4.3.3
  1.1664 ++ * on x86). Using a non-splitted version results in nicer looking code too.
  1.1665 ++ *
  1.1666 ++ * NOTE: This must return an int. Do not make it return a bool or the speed
  1.1667 ++ * of the code generated by GCC 3.x decreases 10-15 %. (GCC 4.3 doesn't care,
  1.1668 ++ * and it generates 10-20 % faster code than GCC 3.x from this file anyway.)
  1.1669 ++ */
  1.1670 ++static __always_inline int rc_bit(struct rc_dec *rc, uint16_t *prob)
  1.1671 ++{
  1.1672 ++	uint32_t bound;
  1.1673 ++	int bit;
  1.1674 ++
  1.1675 ++	rc_normalize(rc);
  1.1676 ++	bound = (rc->range >> RC_BIT_MODEL_TOTAL_BITS) * *prob;
  1.1677 ++	if (rc->code < bound) {
  1.1678 ++		rc->range = bound;
  1.1679 ++		*prob += (RC_BIT_MODEL_TOTAL - *prob) >> RC_MOVE_BITS;
  1.1680 ++		bit = 0;
  1.1681 ++	} else {
  1.1682 ++		rc->range -= bound;
  1.1683 ++		rc->code -= bound;
  1.1684 ++		*prob -= *prob >> RC_MOVE_BITS;
  1.1685 ++		bit = 1;
  1.1686 ++	}
  1.1687 ++
  1.1688 ++	return bit;
  1.1689 ++}
  1.1690 ++
  1.1691 ++/* Decode a bittree starting from the most significant bit. */
  1.1692 ++static __always_inline uint32_t rc_bittree(struct rc_dec *rc,
  1.1693 ++					   uint16_t *probs, uint32_t limit)
  1.1694 ++{
  1.1695 ++	uint32_t symbol = 1;
  1.1696 ++
  1.1697 ++	do {
  1.1698 ++		if (rc_bit(rc, &probs[symbol]))
  1.1699 ++			symbol = (symbol << 1) + 1;
  1.1700 ++		else
  1.1701 ++			symbol <<= 1;
  1.1702 ++	} while (symbol < limit);
  1.1703 ++
  1.1704 ++	return symbol;
  1.1705 ++}
  1.1706 ++
  1.1707 ++/* Decode a bittree starting from the least significant bit. */
  1.1708 ++static __always_inline void rc_bittree_reverse(struct rc_dec *rc,
  1.1709 ++					       uint16_t *probs,
  1.1710 ++					       uint32_t *dest, uint32_t limit)
  1.1711 ++{
  1.1712 ++	uint32_t symbol = 1;
  1.1713 ++	uint32_t i = 0;
  1.1714 ++
  1.1715 ++	do {
  1.1716 ++		if (rc_bit(rc, &probs[symbol])) {
  1.1717 ++			symbol = (symbol << 1) + 1;
  1.1718 ++			*dest += 1 << i;
  1.1719 ++		} else {
  1.1720 ++			symbol <<= 1;
  1.1721 ++		}
  1.1722 ++	} while (++i < limit);
  1.1723 ++}
  1.1724 ++
  1.1725 ++/* Decode direct bits (fixed fifty-fifty probability) */
  1.1726 ++static inline void rc_direct(struct rc_dec *rc, uint32_t *dest, uint32_t limit)
  1.1727 ++{
  1.1728 ++	uint32_t mask;
  1.1729 ++
  1.1730 ++	do {
  1.1731 ++		rc_normalize(rc);
  1.1732 ++		rc->range >>= 1;
  1.1733 ++		rc->code -= rc->range;
  1.1734 ++		mask = (uint32_t)0 - (rc->code >> 31);
  1.1735 ++		rc->code += rc->range & mask;
  1.1736 ++		*dest = (*dest << 1) + (mask + 1);
  1.1737 ++	} while (--limit > 0);
  1.1738 ++}
  1.1739 ++
  1.1740 ++/********
  1.1741 ++ * LZMA *
  1.1742 ++ ********/
  1.1743 ++
  1.1744 ++/* Get pointer to literal coder probability array. */
  1.1745 ++static uint16_t *lzma_literal_probs(struct xz_dec_lzma2 *s)
  1.1746 ++{
  1.1747 ++	uint32_t prev_byte = dict_get(&s->dict, 0);
  1.1748 ++	uint32_t low = prev_byte >> (8 - s->lzma.lc);
  1.1749 ++	uint32_t high = (s->dict.pos & s->lzma.literal_pos_mask) << s->lzma.lc;
  1.1750 ++	return s->lzma.literal[low + high];
  1.1751 ++}
  1.1752 ++
  1.1753 ++/* Decode a literal (one 8-bit byte) */
  1.1754 ++static void lzma_literal(struct xz_dec_lzma2 *s)
  1.1755 ++{
  1.1756 ++	uint16_t *probs;
  1.1757 ++	uint32_t symbol;
  1.1758 ++	uint32_t match_byte;
  1.1759 ++	uint32_t match_bit;
  1.1760 ++	uint32_t offset;
  1.1761 ++	uint32_t i;
  1.1762 ++
  1.1763 ++	probs = lzma_literal_probs(s);
  1.1764 ++
  1.1765 ++	if (lzma_state_is_literal(s->lzma.state)) {
  1.1766 ++		symbol = rc_bittree(&s->rc, probs, 0x100);
  1.1767 ++	} else {
  1.1768 ++		symbol = 1;
  1.1769 ++		match_byte = dict_get(&s->dict, s->lzma.rep0) << 1;
  1.1770 ++		offset = 0x100;
  1.1771 ++
  1.1772 ++		do {
  1.1773 ++			match_bit = match_byte & offset;
  1.1774 ++			match_byte <<= 1;
  1.1775 ++			i = offset + match_bit + symbol;
  1.1776 ++
  1.1777 ++			if (rc_bit(&s->rc, &probs[i])) {
  1.1778 ++				symbol = (symbol << 1) + 1;
  1.1779 ++				offset &= match_bit;
  1.1780 ++			} else {
  1.1781 ++				symbol <<= 1;
  1.1782 ++				offset &= ~match_bit;
  1.1783 ++			}
  1.1784 ++		} while (symbol < 0x100);
  1.1785 ++	}
  1.1786 ++
  1.1787 ++	dict_put(&s->dict, (uint8_t)symbol);
  1.1788 ++	lzma_state_literal(&s->lzma.state);
  1.1789 ++}
  1.1790 ++
  1.1791 ++/* Decode the length of the match into s->lzma.len. */
  1.1792 ++static void lzma_len(struct xz_dec_lzma2 *s, struct lzma_len_dec *l,
  1.1793 ++		     uint32_t pos_state)
  1.1794 ++{
  1.1795 ++	uint16_t *probs;
  1.1796 ++	uint32_t limit;
  1.1797 ++
  1.1798 ++	if (!rc_bit(&s->rc, &l->choice)) {
  1.1799 ++		probs = l->low[pos_state];
  1.1800 ++		limit = LEN_LOW_SYMBOLS;
  1.1801 ++		s->lzma.len = MATCH_LEN_MIN;
  1.1802 ++	} else {
  1.1803 ++		if (!rc_bit(&s->rc, &l->choice2)) {
  1.1804 ++			probs = l->mid[pos_state];
  1.1805 ++			limit = LEN_MID_SYMBOLS;
  1.1806 ++			s->lzma.len = MATCH_LEN_MIN + LEN_LOW_SYMBOLS;
  1.1807 ++		} else {
  1.1808 ++			probs = l->high;
  1.1809 ++			limit = LEN_HIGH_SYMBOLS;
  1.1810 ++			s->lzma.len = MATCH_LEN_MIN + LEN_LOW_SYMBOLS
  1.1811 ++					+ LEN_MID_SYMBOLS;
  1.1812 ++		}
  1.1813 ++	}
  1.1814 ++
  1.1815 ++	s->lzma.len += rc_bittree(&s->rc, probs, limit) - limit;
  1.1816 ++}
  1.1817 ++
  1.1818 ++/* Decode a match. The distance will be stored in s->lzma.rep0. */
  1.1819 ++static void lzma_match(struct xz_dec_lzma2 *s, uint32_t pos_state)
  1.1820 ++{
  1.1821 ++	uint16_t *probs;
  1.1822 ++	uint32_t dist_slot;
  1.1823 ++	uint32_t limit;
  1.1824 ++
  1.1825 ++	lzma_state_match(&s->lzma.state);
  1.1826 ++
  1.1827 ++	s->lzma.rep3 = s->lzma.rep2;
  1.1828 ++	s->lzma.rep2 = s->lzma.rep1;
  1.1829 ++	s->lzma.rep1 = s->lzma.rep0;
  1.1830 ++
  1.1831 ++	lzma_len(s, &s->lzma.match_len_dec, pos_state);
  1.1832 ++
  1.1833 ++	probs = s->lzma.dist_slot[lzma_get_dist_state(s->lzma.len)];
  1.1834 ++	dist_slot = rc_bittree(&s->rc, probs, DIST_SLOTS) - DIST_SLOTS;
  1.1835 ++
  1.1836 ++	if (dist_slot < DIST_MODEL_START) {
  1.1837 ++		s->lzma.rep0 = dist_slot;
  1.1838 ++	} else {
  1.1839 ++		limit = (dist_slot >> 1) - 1;
  1.1840 ++		s->lzma.rep0 = 2 + (dist_slot & 1);
  1.1841 ++
  1.1842 ++		if (dist_slot < DIST_MODEL_END) {
  1.1843 ++			s->lzma.rep0 <<= limit;
  1.1844 ++			probs = s->lzma.dist_special + s->lzma.rep0
  1.1845 ++					- dist_slot - 1;
  1.1846 ++			rc_bittree_reverse(&s->rc, probs,
  1.1847 ++					&s->lzma.rep0, limit);
  1.1848 ++		} else {
  1.1849 ++			rc_direct(&s->rc, &s->lzma.rep0, limit - ALIGN_BITS);
  1.1850 ++			s->lzma.rep0 <<= ALIGN_BITS;
  1.1851 ++			rc_bittree_reverse(&s->rc, s->lzma.dist_align,
  1.1852 ++					&s->lzma.rep0, ALIGN_BITS);
  1.1853 ++		}
  1.1854 ++	}
  1.1855 ++}
  1.1856 ++
  1.1857 ++/*
  1.1858 ++ * Decode a repeated match. The distance is one of the four most recently
  1.1859 ++ * seen matches. The distance will be stored in s->lzma.rep0.
  1.1860 ++ */
  1.1861 ++static void lzma_rep_match(struct xz_dec_lzma2 *s, uint32_t pos_state)
  1.1862 ++{
  1.1863 ++	uint32_t tmp;
  1.1864 ++
  1.1865 ++	if (!rc_bit(&s->rc, &s->lzma.is_rep0[s->lzma.state])) {
  1.1866 ++		if (!rc_bit(&s->rc, &s->lzma.is_rep0_long[
  1.1867 ++				s->lzma.state][pos_state])) {
  1.1868 ++			lzma_state_short_rep(&s->lzma.state);
  1.1869 ++			s->lzma.len = 1;
  1.1870 ++			return;
  1.1871 ++		}
  1.1872 ++	} else {
  1.1873 ++		if (!rc_bit(&s->rc, &s->lzma.is_rep1[s->lzma.state])) {
  1.1874 ++			tmp = s->lzma.rep1;
  1.1875 ++		} else {
  1.1876 ++			if (!rc_bit(&s->rc, &s->lzma.is_rep2[s->lzma.state])) {
  1.1877 ++				tmp = s->lzma.rep2;
  1.1878 ++			} else {
  1.1879 ++				tmp = s->lzma.rep3;
  1.1880 ++				s->lzma.rep3 = s->lzma.rep2;
  1.1881 ++			}
  1.1882 ++
  1.1883 ++			s->lzma.rep2 = s->lzma.rep1;
  1.1884 ++		}
  1.1885 ++
  1.1886 ++		s->lzma.rep1 = s->lzma.rep0;
  1.1887 ++		s->lzma.rep0 = tmp;
  1.1888 ++	}
  1.1889 ++
  1.1890 ++	lzma_state_long_rep(&s->lzma.state);
  1.1891 ++	lzma_len(s, &s->lzma.rep_len_dec, pos_state);
  1.1892 ++}
  1.1893 ++
  1.1894 ++/* LZMA decoder core */
  1.1895 ++static bool lzma_main(struct xz_dec_lzma2 *s)
  1.1896 ++{
  1.1897 ++	uint32_t pos_state;
  1.1898 ++
  1.1899 ++	/*
  1.1900 ++	 * If the dictionary was reached during the previous call, try to
  1.1901 ++	 * finish the possibly pending repeat in the dictionary.
  1.1902 ++	 */
  1.1903 ++	if (dict_has_space(&s->dict) && s->lzma.len > 0)
  1.1904 ++		dict_repeat(&s->dict, &s->lzma.len, s->lzma.rep0);
  1.1905 ++
  1.1906 ++	/*
  1.1907 ++	 * Decode more LZMA symbols. One iteration may consume up to
  1.1908 ++	 * LZMA_IN_REQUIRED - 1 bytes.
  1.1909 ++	 */
  1.1910 ++	while (dict_has_space(&s->dict) && !rc_limit_exceeded(&s->rc)) {
  1.1911 ++		pos_state = s->dict.pos & s->lzma.pos_mask;
  1.1912 ++
  1.1913 ++		if (!rc_bit(&s->rc, &s->lzma.is_match[
  1.1914 ++				s->lzma.state][pos_state])) {
  1.1915 ++			lzma_literal(s);
  1.1916 ++		} else {
  1.1917 ++			if (rc_bit(&s->rc, &s->lzma.is_rep[s->lzma.state]))
  1.1918 ++				lzma_rep_match(s, pos_state);
  1.1919 ++			else
  1.1920 ++				lzma_match(s, pos_state);
  1.1921 ++
  1.1922 ++			if (!dict_repeat(&s->dict, &s->lzma.len, s->lzma.rep0))
  1.1923 ++				return false;
  1.1924 ++		}
  1.1925 ++	}
  1.1926 ++
  1.1927 ++	/*
  1.1928 ++	 * Having the range decoder always normalized when we are outside
  1.1929 ++	 * this function makes it easier to correctly handle end of the chunk.
  1.1930 ++	 */
  1.1931 ++	rc_normalize(&s->rc);
  1.1932 ++
  1.1933 ++	return true;
  1.1934 ++}
  1.1935 ++
  1.1936 ++/*
  1.1937 ++ * Reset the LZMA decoder and range decoder state. Dictionary is nore reset
  1.1938 ++ * here, because LZMA state may be reset without resetting the dictionary.
  1.1939 ++ */
  1.1940 ++static void lzma_reset(struct xz_dec_lzma2 *s)
  1.1941 ++{
  1.1942 ++	uint16_t *probs;
  1.1943 ++	size_t i;
  1.1944 ++
  1.1945 ++	s->lzma.state = STATE_LIT_LIT;
  1.1946 ++	s->lzma.rep0 = 0;
  1.1947 ++	s->lzma.rep1 = 0;
  1.1948 ++	s->lzma.rep2 = 0;
  1.1949 ++	s->lzma.rep3 = 0;
  1.1950 ++
  1.1951 ++	/*
  1.1952 ++	 * All probabilities are initialized to the same value. This hack
  1.1953 ++	 * makes the code smaller by avoiding a separate loop for each
  1.1954 ++	 * probability array.
  1.1955 ++	 *
  1.1956 ++	 * This could be optimized so that only that part of literal
  1.1957 ++	 * probabilities that are actually required. In the common case
  1.1958 ++	 * we would write 12 KiB less.
  1.1959 ++	 */
  1.1960 ++	probs = s->lzma.is_match[0];
  1.1961 ++	for (i = 0; i < PROBS_TOTAL; ++i)
  1.1962 ++		probs[i] = RC_BIT_MODEL_TOTAL / 2;
  1.1963 ++
  1.1964 ++	rc_reset(&s->rc);
  1.1965 ++}
  1.1966 ++
  1.1967 ++/*
  1.1968 ++ * Decode and validate LZMA properties (lc/lp/pb) and calculate the bit masks
  1.1969 ++ * from the decoded lp and pb values. On success, the LZMA decoder state is
  1.1970 ++ * reset and true is returned.
  1.1971 ++ */
  1.1972 ++static bool lzma_props(struct xz_dec_lzma2 *s, uint8_t props)
  1.1973 ++{
  1.1974 ++	if (props > (4 * 5 + 4) * 9 + 8)
  1.1975 ++		return false;
  1.1976 ++
  1.1977 ++	s->lzma.pos_mask = 0;
  1.1978 ++	while (props >= 9 * 5) {
  1.1979 ++		props -= 9 * 5;
  1.1980 ++		++s->lzma.pos_mask;
  1.1981 ++	}
  1.1982 ++
  1.1983 ++	s->lzma.pos_mask = (1 << s->lzma.pos_mask) - 1;
  1.1984 ++
  1.1985 ++	s->lzma.literal_pos_mask = 0;
  1.1986 ++	while (props >= 9) {
  1.1987 ++		props -= 9;
  1.1988 ++		++s->lzma.literal_pos_mask;
  1.1989 ++	}
  1.1990 ++
  1.1991 ++	s->lzma.lc = props;
  1.1992 ++
  1.1993 ++	if (s->lzma.lc + s->lzma.literal_pos_mask > 4)
  1.1994 ++		return false;
  1.1995 ++
  1.1996 ++	s->lzma.literal_pos_mask = (1 << s->lzma.literal_pos_mask) - 1;
  1.1997 ++
  1.1998 ++	lzma_reset(s);
  1.1999 ++
  1.2000 ++	return true;
  1.2001 ++}
  1.2002 ++
  1.2003 ++/*********
  1.2004 ++ * LZMA2 *
  1.2005 ++ *********/
  1.2006 ++
  1.2007 ++/*
  1.2008 ++ * The LZMA decoder assumes that if the input limit (s->rc.in_limit) hasn't
  1.2009 ++ * been exceeded, it is safe to read up to LZMA_IN_REQUIRED bytes. This
  1.2010 ++ * wrapper function takes care of making the LZMA decoder's assumption safe.
  1.2011 ++ *
  1.2012 ++ * As long as there is plenty of input left to be decoded in the current LZMA
  1.2013 ++ * chunk, we decode directly from the caller-supplied input buffer until
  1.2014 ++ * there's LZMA_IN_REQUIRED bytes left. Those remaining bytes are copied into
  1.2015 ++ * s->temp.buf, which (hopefully) gets filled on the next call to this
  1.2016 ++ * function. We decode a few bytes from the temporary buffer so that we can
  1.2017 ++ * continue decoding from the caller-supplied input buffer again.
  1.2018 ++ */
  1.2019 ++static bool lzma2_lzma(struct xz_dec_lzma2 *s, struct xz_buf *b)
  1.2020 ++{
  1.2021 ++	size_t in_avail;
  1.2022 ++	uint32_t tmp;
  1.2023 ++
  1.2024 ++	in_avail = b->in_size - b->in_pos;
  1.2025 ++	if (s->temp.size > 0 || s->lzma2.compressed == 0) {
  1.2026 ++		tmp = 2 * LZMA_IN_REQUIRED - s->temp.size;
  1.2027 ++		if (tmp > s->lzma2.compressed - s->temp.size)
  1.2028 ++			tmp = s->lzma2.compressed - s->temp.size;
  1.2029 ++		if (tmp > in_avail)
  1.2030 ++			tmp = in_avail;
  1.2031 ++
  1.2032 ++		memcpy(s->temp.buf + s->temp.size, b->in + b->in_pos, tmp);
  1.2033 ++
  1.2034 ++		if (s->temp.size + tmp == s->lzma2.compressed) {
  1.2035 ++			memzero(s->temp.buf + s->temp.size + tmp,
  1.2036 ++					sizeof(s->temp.buf)
  1.2037 ++						- s->temp.size - tmp);
  1.2038 ++			s->rc.in_limit = s->temp.size + tmp;
  1.2039 ++		} else if (s->temp.size + tmp < LZMA_IN_REQUIRED) {
  1.2040 ++			s->temp.size += tmp;
  1.2041 ++			b->in_pos += tmp;
  1.2042 ++			return true;
  1.2043 ++		} else {
  1.2044 ++			s->rc.in_limit = s->temp.size + tmp - LZMA_IN_REQUIRED;
  1.2045 ++		}
  1.2046 ++
  1.2047 ++		s->rc.in = s->temp.buf;
  1.2048 ++		s->rc.in_pos = 0;
  1.2049 ++
  1.2050 ++		if (!lzma_main(s) || s->rc.in_pos > s->temp.size + tmp)
  1.2051 ++			return false;
  1.2052 ++
  1.2053 ++		s->lzma2.compressed -= s->rc.in_pos;
  1.2054 ++
  1.2055 ++		if (s->rc.in_pos < s->temp.size) {
  1.2056 ++			s->temp.size -= s->rc.in_pos;
  1.2057 ++			memmove(s->temp.buf, s->temp.buf + s->rc.in_pos,
  1.2058 ++					s->temp.size);
  1.2059 ++			return true;
  1.2060 ++		}
  1.2061 ++
  1.2062 ++		b->in_pos += s->rc.in_pos - s->temp.size;
  1.2063 ++		s->temp.size = 0;
  1.2064 ++	}
  1.2065 ++
  1.2066 ++	in_avail = b->in_size - b->in_pos;
  1.2067 ++	if (in_avail >= LZMA_IN_REQUIRED) {
  1.2068 ++		s->rc.in = b->in;
  1.2069 ++		s->rc.in_pos = b->in_pos;
  1.2070 ++
  1.2071 ++		if (in_avail >= s->lzma2.compressed + LZMA_IN_REQUIRED)
  1.2072 ++			s->rc.in_limit = b->in_pos + s->lzma2.compressed;
  1.2073 ++		else
  1.2074 ++			s->rc.in_limit = b->in_size - LZMA_IN_REQUIRED;
  1.2075 ++
  1.2076 ++		if (!lzma_main(s))
  1.2077 ++			return false;
  1.2078 ++
  1.2079 ++		in_avail = s->rc.in_pos - b->in_pos;
  1.2080 ++		if (in_avail > s->lzma2.compressed)
  1.2081 ++			return false;
  1.2082 ++
  1.2083 ++		s->lzma2.compressed -= in_avail;
  1.2084 ++		b->in_pos = s->rc.in_pos;
  1.2085 ++	}
  1.2086 ++
  1.2087 ++	in_avail = b->in_size - b->in_pos;
  1.2088 ++	if (in_avail < LZMA_IN_REQUIRED) {
  1.2089 ++		if (in_avail > s->lzma2.compressed)
  1.2090 ++			in_avail = s->lzma2.compressed;
  1.2091 ++
  1.2092 ++		memcpy(s->temp.buf, b->in + b->in_pos, in_avail);
  1.2093 ++		s->temp.size = in_avail;
  1.2094 ++		b->in_pos += in_avail;
  1.2095 ++	}
  1.2096 ++
  1.2097 ++	return true;
  1.2098 ++}
  1.2099 ++
  1.2100 ++/*
  1.2101 ++ * Take care of the LZMA2 control layer, and forward the job of actual LZMA
  1.2102 ++ * decoding or copying of uncompressed chunks to other functions.
  1.2103 ++ */
  1.2104 ++XZ_EXTERN enum xz_ret xz_dec_lzma2_run(struct xz_dec_lzma2 *s,
  1.2105 ++				       struct xz_buf *b)
  1.2106 ++{
  1.2107 ++	uint32_t tmp;
  1.2108 ++
  1.2109 ++	while (b->in_pos < b->in_size || s->lzma2.sequence == SEQ_LZMA_RUN) {
  1.2110 ++		switch (s->lzma2.sequence) {
  1.2111 ++		case SEQ_CONTROL:
  1.2112 ++			/*
  1.2113 ++			 * LZMA2 control byte
  1.2114 ++			 *
  1.2115 ++			 * Exact values:
  1.2116 ++			 *   0x00   End marker
  1.2117 ++			 *   0x01   Dictionary reset followed by
  1.2118 ++			 *          an uncompressed chunk
  1.2119 ++			 *   0x02   Uncompressed chunk (no dictionary reset)
  1.2120 ++			 *
  1.2121 ++			 * Highest three bits (s->control & 0xE0):
  1.2122 ++			 *   0xE0   Dictionary reset, new properties and state
  1.2123 ++			 *          reset, followed by LZMA compressed chunk
  1.2124 ++			 *   0xC0   New properties and state reset, followed
  1.2125 ++			 *          by LZMA compressed chunk (no dictionary
  1.2126 ++			 *          reset)
  1.2127 ++			 *   0xA0   State reset using old properties,
  1.2128 ++			 *          followed by LZMA compressed chunk (no
  1.2129 ++			 *          dictionary reset)
  1.2130 ++			 *   0x80   LZMA chunk (no dictionary or state reset)
  1.2131 ++			 *
  1.2132 ++			 * For LZMA compressed chunks, the lowest five bits
  1.2133 ++			 * (s->control & 1F) are the highest bits of the
  1.2134 ++			 * uncompressed size (bits 16-20).
  1.2135 ++			 *
  1.2136 ++			 * A new LZMA2 stream must begin with a dictionary
  1.2137 ++			 * reset. The first LZMA chunk must set new
  1.2138 ++			 * properties and reset the LZMA state.
  1.2139 ++			 *
  1.2140 ++			 * Values that don't match anything described above
  1.2141 ++			 * are invalid and we return XZ_DATA_ERROR.
  1.2142 ++			 */
  1.2143 ++			tmp = b->in[b->in_pos++];
  1.2144 ++
  1.2145 ++			if (tmp >= 0xE0 || tmp == 0x01) {
  1.2146 ++				s->lzma2.need_props = true;
  1.2147 ++				s->lzma2.need_dict_reset = false;
  1.2148 ++				dict_reset(&s->dict, b);
  1.2149 ++			} else if (s->lzma2.need_dict_reset) {
  1.2150 ++				return XZ_DATA_ERROR;
  1.2151 ++			}
  1.2152 ++
  1.2153 ++			if (tmp >= 0x80) {
  1.2154 ++				s->lzma2.uncompressed = (tmp & 0x1F) << 16;
  1.2155 ++				s->lzma2.sequence = SEQ_UNCOMPRESSED_1;
  1.2156 ++
  1.2157 ++				if (tmp >= 0xC0) {
  1.2158 ++					/*
  1.2159 ++					 * When there are new properties,
  1.2160 ++					 * state reset is done at
  1.2161 ++					 * SEQ_PROPERTIES.
  1.2162 ++					 */
  1.2163 ++					s->lzma2.need_props = false;
  1.2164 ++					s->lzma2.next_sequence
  1.2165 ++							= SEQ_PROPERTIES;
  1.2166 ++
  1.2167 ++				} else if (s->lzma2.need_props) {
  1.2168 ++					return XZ_DATA_ERROR;
  1.2169 ++
  1.2170 ++				} else {
  1.2171 ++					s->lzma2.next_sequence
  1.2172 ++							= SEQ_LZMA_PREPARE;
  1.2173 ++					if (tmp >= 0xA0)
  1.2174 ++						lzma_reset(s);
  1.2175 ++				}
  1.2176 ++			} else {
  1.2177 ++				if (tmp == 0x00)
  1.2178 ++					return XZ_STREAM_END;
  1.2179 ++
  1.2180 ++				if (tmp > 0x02)
  1.2181 ++					return XZ_DATA_ERROR;
  1.2182 ++
  1.2183 ++				s->lzma2.sequence = SEQ_COMPRESSED_0;
  1.2184 ++				s->lzma2.next_sequence = SEQ_COPY;
  1.2185 ++			}
  1.2186 ++
  1.2187 ++			break;
  1.2188 ++
  1.2189 ++		case SEQ_UNCOMPRESSED_1:
  1.2190 ++			s->lzma2.uncompressed
  1.2191 ++					+= (uint32_t)b->in[b->in_pos++] << 8;
  1.2192 ++			s->lzma2.sequence = SEQ_UNCOMPRESSED_2;
  1.2193 ++			break;
  1.2194 ++
  1.2195 ++		case SEQ_UNCOMPRESSED_2:
  1.2196 ++			s->lzma2.uncompressed
  1.2197 ++					+= (uint32_t)b->in[b->in_pos++] + 1;
  1.2198 ++			s->lzma2.sequence = SEQ_COMPRESSED_0;
  1.2199 ++			break;
  1.2200 ++
  1.2201 ++		case SEQ_COMPRESSED_0:
  1.2202 ++			s->lzma2.compressed
  1.2203 ++					= (uint32_t)b->in[b->in_pos++] << 8;
  1.2204 ++			s->lzma2.sequence = SEQ_COMPRESSED_1;
  1.2205 ++			break;
  1.2206 ++
  1.2207 ++		case SEQ_COMPRESSED_1:
  1.2208 ++			s->lzma2.compressed
  1.2209 ++					+= (uint32_t)b->in[b->in_pos++] + 1;
  1.2210 ++			s->lzma2.sequence = s->lzma2.next_sequence;
  1.2211 ++			break;
  1.2212 ++
  1.2213 ++		case SEQ_PROPERTIES:
  1.2214 ++			if (!lzma_props(s, b->in[b->in_pos++]))
  1.2215 ++				return XZ_DATA_ERROR;
  1.2216 ++
  1.2217 ++			s->lzma2.sequence = SEQ_LZMA_PREPARE;
  1.2218 ++
  1.2219 ++		case SEQ_LZMA_PREPARE:
  1.2220 ++			if (s->lzma2.compressed < RC_INIT_BYTES)
  1.2221 ++				return XZ_DATA_ERROR;
  1.2222 ++
  1.2223 ++			if (!rc_read_init(&s->rc, b))
  1.2224 ++				return XZ_OK;
  1.2225 ++
  1.2226 ++			s->lzma2.compressed -= RC_INIT_BYTES;
  1.2227 ++			s->lzma2.sequence = SEQ_LZMA_RUN;
  1.2228 ++
  1.2229 ++		case SEQ_LZMA_RUN:
  1.2230 ++			/*
  1.2231 ++			 * Set dictionary limit to indicate how much we want
  1.2232 ++			 * to be encoded at maximum. Decode new data into the
  1.2233 ++			 * dictionary. Flush the new data from dictionary to
  1.2234 ++			 * b->out. Check if we finished decoding this chunk.
  1.2235 ++			 * In case the dictionary got full but we didn't fill
  1.2236 ++			 * the output buffer yet, we may run this loop
  1.2237 ++			 * multiple times without changing s->lzma2.sequence.
  1.2238 ++			 */
  1.2239 ++			dict_limit(&s->dict, min_t(size_t,
  1.2240 ++					b->out_size - b->out_pos,
  1.2241 ++					s->lzma2.uncompressed));
  1.2242 ++			if (!lzma2_lzma(s, b))
  1.2243 ++				return XZ_DATA_ERROR;
  1.2244 ++
  1.2245 ++			s->lzma2.uncompressed -= dict_flush(&s->dict, b);
  1.2246 ++
  1.2247 ++			if (s->lzma2.uncompressed == 0) {
  1.2248 ++				if (s->lzma2.compressed > 0 || s->lzma.len > 0
  1.2249 ++						|| !rc_is_finished(&s->rc))
  1.2250 ++					return XZ_DATA_ERROR;
  1.2251 ++
  1.2252 ++				rc_reset(&s->rc);
  1.2253 ++				s->lzma2.sequence = SEQ_CONTROL;
  1.2254 ++
  1.2255 ++			} else if (b->out_pos == b->out_size
  1.2256 ++					|| (b->in_pos == b->in_size
  1.2257 ++						&& s->temp.size
  1.2258 ++						< s->lzma2.compressed)) {
  1.2259 ++				return XZ_OK;
  1.2260 ++			}
  1.2261 ++
  1.2262 ++			break;
  1.2263 ++
  1.2264 ++		case SEQ_COPY:
  1.2265 ++			dict_uncompressed(&s->dict, b, &s->lzma2.compressed);
  1.2266 ++			if (s->lzma2.compressed > 0)
  1.2267 ++				return XZ_OK;
  1.2268 ++
  1.2269 ++			s->lzma2.sequence = SEQ_CONTROL;
  1.2270 ++			break;
  1.2271 ++		}
  1.2272 ++	}
  1.2273 ++
  1.2274 ++	return XZ_OK;
  1.2275 ++}
  1.2276 ++
  1.2277 ++XZ_EXTERN struct xz_dec_lzma2 *xz_dec_lzma2_create(enum xz_mode mode,
  1.2278 ++						   uint32_t dict_max)
  1.2279 ++{
  1.2280 ++	struct xz_dec_lzma2 *s = kmalloc(sizeof(*s), GFP_KERNEL);
  1.2281 ++	if (s == NULL)
  1.2282 ++		return NULL;
  1.2283 ++
  1.2284 ++	s->dict.mode = mode;
  1.2285 ++	s->dict.size_max = dict_max;
  1.2286 ++
  1.2287 ++	if (DEC_IS_PREALLOC(mode)) {
  1.2288 ++		s->dict.buf = vmalloc(dict_max);
  1.2289 ++		if (s->dict.buf == NULL) {
  1.2290 ++			kfree(s);
  1.2291 ++			return NULL;
  1.2292 ++		}
  1.2293 ++	} else if (DEC_IS_DYNALLOC(mode)) {
  1.2294 ++		s->dict.buf = NULL;
  1.2295 ++		s->dict.allocated = 0;
  1.2296 ++	}
  1.2297 ++
  1.2298 ++	return s;
  1.2299 ++}
  1.2300 ++
  1.2301 ++XZ_EXTERN enum xz_ret xz_dec_lzma2_reset(struct xz_dec_lzma2 *s, uint8_t props)
  1.2302 ++{
  1.2303 ++	/* This limits dictionary size to 3 GiB to keep parsing simpler. */
  1.2304 ++	if (props > 39)
  1.2305 ++		return XZ_OPTIONS_ERROR;
  1.2306 ++
  1.2307 ++	s->dict.size = 2 + (props & 1);
  1.2308 ++	s->dict.size <<= (props >> 1) + 11;
  1.2309 ++
  1.2310 ++	if (DEC_IS_MULTI(s->dict.mode)) {
  1.2311 ++		if (s->dict.size > s->dict.size_max)
  1.2312 ++			return XZ_MEMLIMIT_ERROR;
  1.2313 ++
  1.2314 ++		s->dict.end = s->dict.size;
  1.2315 ++
  1.2316 ++		if (DEC_IS_DYNALLOC(s->dict.mode)) {
  1.2317 ++			if (s->dict.allocated < s->dict.size) {
  1.2318 ++				vfree(s->dict.buf);
  1.2319 ++				s->dict.buf = vmalloc(s->dict.size);
  1.2320 ++				if (s->dict.buf == NULL) {
  1.2321 ++					s->dict.allocated = 0;
  1.2322 ++					return XZ_MEM_ERROR;
  1.2323 ++				}
  1.2324 ++			}
  1.2325 ++		}
  1.2326 ++	}
  1.2327 ++
  1.2328 ++	s->lzma.len = 0;
  1.2329 ++
  1.2330 ++	s->lzma2.sequence = SEQ_CONTROL;
  1.2331 ++	s->lzma2.need_dict_reset = true;
  1.2332 ++
  1.2333 ++	s->temp.size = 0;
  1.2334 ++
  1.2335 ++	return XZ_OK;
  1.2336 ++}
  1.2337 ++
  1.2338 ++XZ_EXTERN void xz_dec_lzma2_end(struct xz_dec_lzma2 *s)
  1.2339 ++{
  1.2340 ++	if (DEC_IS_MULTI(s->dict.mode))
  1.2341 ++		vfree(s->dict.buf);
  1.2342 ++
  1.2343 ++	kfree(s);
  1.2344 ++}
  1.2345 +diff --git a/lib/xz/xz_dec_stream.c b/lib/xz/xz_dec_stream.c
  1.2346 +new file mode 100644
  1.2347 +index 0000000..ac809b1
  1.2348 +--- /dev/null
  1.2349 ++++ b/lib/xz/xz_dec_stream.c
  1.2350 +@@ -0,0 +1,821 @@
  1.2351 ++/*
  1.2352 ++ * .xz Stream decoder
  1.2353 ++ *
  1.2354 ++ * Author: Lasse Collin <lasse.collin@tukaani.org>
  1.2355 ++ *
  1.2356 ++ * This file has been put into the public domain.
  1.2357 ++ * You can do whatever you want with this file.
  1.2358 ++ */
  1.2359 ++
  1.2360 ++#include "xz_private.h"
  1.2361 ++#include "xz_stream.h"
  1.2362 ++
  1.2363 ++/* Hash used to validate the Index field */
  1.2364 ++struct xz_dec_hash {
  1.2365 ++	vli_type unpadded;
  1.2366 ++	vli_type uncompressed;
  1.2367 ++	uint32_t crc32;
  1.2368 ++};
  1.2369 ++
  1.2370 ++struct xz_dec {
  1.2371 ++	/* Position in dec_main() */
  1.2372 ++	enum {
  1.2373 ++		SEQ_STREAM_HEADER,
  1.2374 ++		SEQ_BLOCK_START,
  1.2375 ++		SEQ_BLOCK_HEADER,
  1.2376 ++		SEQ_BLOCK_UNCOMPRESS,
  1.2377 ++		SEQ_BLOCK_PADDING,
  1.2378 ++		SEQ_BLOCK_CHECK,
  1.2379 ++		SEQ_INDEX,
  1.2380 ++		SEQ_INDEX_PADDING,
  1.2381 ++		SEQ_INDEX_CRC32,
  1.2382 ++		SEQ_STREAM_FOOTER
  1.2383 ++	} sequence;
  1.2384 ++
  1.2385 ++	/* Position in variable-length integers and Check fields */
  1.2386 ++	uint32_t pos;
  1.2387 ++
  1.2388 ++	/* Variable-length integer decoded by dec_vli() */
  1.2389 ++	vli_type vli;
  1.2390 ++
  1.2391 ++	/* Saved in_pos and out_pos */
  1.2392 ++	size_t in_start;
  1.2393 ++	size_t out_start;
  1.2394 ++
  1.2395 ++	/* CRC32 value in Block or Index */
  1.2396 ++	uint32_t crc32;
  1.2397 ++
  1.2398 ++	/* Type of the integrity check calculated from uncompressed data */
  1.2399 ++	enum xz_check check_type;
  1.2400 ++
  1.2401 ++	/* Operation mode */
  1.2402 ++	enum xz_mode mode;
  1.2403 ++
  1.2404 ++	/*
  1.2405 ++	 * True if the next call to xz_dec_run() is allowed to return
  1.2406 ++	 * XZ_BUF_ERROR.
  1.2407 ++	 */
  1.2408 ++	bool allow_buf_error;
  1.2409 ++
  1.2410 ++	/* Information stored in Block Header */
  1.2411 ++	struct {
  1.2412 ++		/*
  1.2413 ++		 * Value stored in the Compressed Size field, or
  1.2414 ++		 * VLI_UNKNOWN if Compressed Size is not present.
  1.2415 ++		 */
  1.2416 ++		vli_type compressed;
  1.2417 ++
  1.2418 ++		/*
  1.2419 ++		 * Value stored in the Uncompressed Size field, or
  1.2420 ++		 * VLI_UNKNOWN if Uncompressed Size is not present.
  1.2421 ++		 */
  1.2422 ++		vli_type uncompressed;
  1.2423 ++
  1.2424 ++		/* Size of the Block Header field */
  1.2425 ++		uint32_t size;
  1.2426 ++	} block_header;
  1.2427 ++
  1.2428 ++	/* Information collected when decoding Blocks */
  1.2429 ++	struct {
  1.2430 ++		/* Observed compressed size of the current Block */
  1.2431 ++		vli_type compressed;
  1.2432 ++
  1.2433 ++		/* Observed uncompressed size of the current Block */
  1.2434 ++		vli_type uncompressed;
  1.2435 ++
  1.2436 ++		/* Number of Blocks decoded so far */
  1.2437 ++		vli_type count;
  1.2438 ++
  1.2439 ++		/*
  1.2440 ++		 * Hash calculated from the Block sizes. This is used to
  1.2441 ++		 * validate the Index field.
  1.2442 ++		 */
  1.2443 ++		struct xz_dec_hash hash;
  1.2444 ++	} block;
  1.2445 ++
  1.2446 ++	/* Variables needed when verifying the Index field */
  1.2447 ++	struct {
  1.2448 ++		/* Position in dec_index() */
  1.2449 ++		enum {
  1.2450 ++			SEQ_INDEX_COUNT,
  1.2451 ++			SEQ_INDEX_UNPADDED,
  1.2452 ++			SEQ_INDEX_UNCOMPRESSED
  1.2453 ++		} sequence;
  1.2454 ++
  1.2455 ++		/* Size of the Index in bytes */
  1.2456 ++		vli_type size;
  1.2457 ++
  1.2458 ++		/* Number of Records (matches block.count in valid files) */
  1.2459 ++		vli_type count;
  1.2460 ++
  1.2461 ++		/*
  1.2462 ++		 * Hash calculated from the Records (matches block.hash in
  1.2463 ++		 * valid files).
  1.2464 ++		 */
  1.2465 ++		struct xz_dec_hash hash;
  1.2466 ++	} index;
  1.2467 ++
  1.2468 ++	/*
  1.2469 ++	 * Temporary buffer needed to hold Stream Header, Block Header,
  1.2470 ++	 * and Stream Footer. The Block Header is the biggest (1 KiB)
  1.2471 ++	 * so we reserve space according to that. buf[] has to be aligned
  1.2472 ++	 * to a multiple of four bytes; the size_t variables before it
  1.2473 ++	 * should guarantee this.
  1.2474 ++	 */
  1.2475 ++	struct {
  1.2476 ++		size_t pos;
  1.2477 ++		size_t size;
  1.2478 ++		uint8_t buf[1024];
  1.2479 ++	} temp;
  1.2480 ++
  1.2481 ++	struct xz_dec_lzma2 *lzma2;
  1.2482 ++
  1.2483 ++#ifdef XZ_DEC_BCJ
  1.2484 ++	struct xz_dec_bcj *bcj;
  1.2485 ++	bool bcj_active;
  1.2486 ++#endif
  1.2487 ++};
  1.2488 ++
  1.2489 ++#ifdef XZ_DEC_ANY_CHECK
  1.2490 ++/* Sizes of the Check field with different Check IDs */
  1.2491 ++static const uint8_t check_sizes[16] = {
  1.2492 ++	0,
  1.2493 ++	4, 4, 4,
  1.2494 ++	8, 8, 8,
  1.2495 ++	16, 16, 16,
  1.2496 ++	32, 32, 32,
  1.2497 ++	64, 64, 64
  1.2498 ++};
  1.2499 ++#endif
  1.2500 ++
  1.2501 ++/*
  1.2502 ++ * Fill s->temp by copying data starting from b->in[b->in_pos]. Caller
  1.2503 ++ * must have set s->temp.pos to indicate how much data we are supposed
  1.2504 ++ * to copy into s->temp.buf. Return true once s->temp.pos has reached
  1.2505 ++ * s->temp.size.
  1.2506 ++ */
  1.2507 ++static bool fill_temp(struct xz_dec *s, struct xz_buf *b)
  1.2508 ++{
  1.2509 ++	size_t copy_size = min_t(size_t,
  1.2510 ++			b->in_size - b->in_pos, s->temp.size - s->temp.pos);
  1.2511 ++
  1.2512 ++	memcpy(s->temp.buf + s->temp.pos, b->in + b->in_pos, copy_size);
  1.2513 ++	b->in_pos += copy_size;
  1.2514 ++	s->temp.pos += copy_size;
  1.2515 ++
  1.2516 ++	if (s->temp.pos == s->temp.size) {
  1.2517 ++		s->temp.pos = 0;
  1.2518 ++		return true;
  1.2519 ++	}
  1.2520 ++
  1.2521 ++	return false;
  1.2522 ++}
  1.2523 ++
  1.2524 ++/* Decode a variable-length integer (little-endian base-128 encoding) */
  1.2525 ++static enum xz_ret dec_vli(struct xz_dec *s, const uint8_t *in,
  1.2526 ++			   size_t *in_pos, size_t in_size)
  1.2527 ++{
  1.2528 ++	uint8_t byte;
  1.2529 ++
  1.2530 ++	if (s->pos == 0)
  1.2531 ++		s->vli = 0;
  1.2532 ++
  1.2533 ++	while (*in_pos < in_size) {
  1.2534 ++		byte = in[*in_pos];
  1.2535 ++		++*in_pos;
  1.2536 ++
  1.2537 ++		s->vli |= (vli_type)(byte & 0x7F) << s->pos;
  1.2538 ++
  1.2539 ++		if ((byte & 0x80) == 0) {
  1.2540 ++			/* Don't allow non-minimal encodings. */
  1.2541 ++			if (byte == 0 && s->pos != 0)
  1.2542 ++				return XZ_DATA_ERROR;
  1.2543 ++
  1.2544 ++			s->pos = 0;
  1.2545 ++			return XZ_STREAM_END;
  1.2546 ++		}
  1.2547 ++
  1.2548 ++		s->pos += 7;
  1.2549 ++		if (s->pos == 7 * VLI_BYTES_MAX)
  1.2550 ++			return XZ_DATA_ERROR;
  1.2551 ++	}
  1.2552 ++
  1.2553 ++	return XZ_OK;
  1.2554 ++}
  1.2555 ++
  1.2556 ++/*
  1.2557 ++ * Decode the Compressed Data field from a Block. Update and validate
  1.2558 ++ * the observed compressed and uncompressed sizes of the Block so that
  1.2559 ++ * they don't exceed the values possibly stored in the Block Header
  1.2560 ++ * (validation assumes that no integer overflow occurs, since vli_type
  1.2561 ++ * is normally uint64_t). Update the CRC32 if presence of the CRC32
  1.2562 ++ * field was indicated in Stream Header.
  1.2563 ++ *
  1.2564 ++ * Once the decoding is finished, validate that the observed sizes match
  1.2565 ++ * the sizes possibly stored in the Block Header. Update the hash and
  1.2566 ++ * Block count, which are later used to validate the Index field.
  1.2567 ++ */
  1.2568 ++static enum xz_ret dec_block(struct xz_dec *s, struct xz_buf *b)
  1.2569 ++{
  1.2570 ++	enum xz_ret ret;
  1.2571 ++
  1.2572 ++	s->in_start = b->in_pos;
  1.2573 ++	s->out_start = b->out_pos;
  1.2574 ++
  1.2575 ++#ifdef XZ_DEC_BCJ
  1.2576 ++	if (s->bcj_active)
  1.2577 ++		ret = xz_dec_bcj_run(s->bcj, s->lzma2, b);
  1.2578 ++	else
  1.2579 ++#endif
  1.2580 ++		ret = xz_dec_lzma2_run(s->lzma2, b);
  1.2581 ++
  1.2582 ++	s->block.compressed += b->in_pos - s->in_start;
  1.2583 ++	s->block.uncompressed += b->out_pos - s->out_start;
  1.2584 ++
  1.2585 ++	/*
  1.2586 ++	 * There is no need to separately check for VLI_UNKNOWN, since
  1.2587 ++	 * the observed sizes are always smaller than VLI_UNKNOWN.
  1.2588 ++	 */
  1.2589 ++	if (s->block.compressed > s->block_header.compressed
  1.2590 ++			|| s->block.uncompressed
  1.2591 ++				> s->block_header.uncompressed)
  1.2592 ++		return XZ_DATA_ERROR;
  1.2593 ++
  1.2594 ++	if (s->check_type == XZ_CHECK_CRC32)
  1.2595 ++		s->crc32 = xz_crc32(b->out + s->out_start,
  1.2596 ++				b->out_pos - s->out_start, s->crc32);
  1.2597 ++
  1.2598 ++	if (ret == XZ_STREAM_END) {
  1.2599 ++		if (s->block_header.compressed != VLI_UNKNOWN
  1.2600 ++				&& s->block_header.compressed
  1.2601 ++					!= s->block.compressed)
  1.2602 ++			return XZ_DATA_ERROR;
  1.2603 ++
  1.2604 ++		if (s->block_header.uncompressed != VLI_UNKNOWN
  1.2605 ++				&& s->block_header.uncompressed
  1.2606 ++					!= s->block.uncompressed)
  1.2607 ++			return XZ_DATA_ERROR;
  1.2608 ++
  1.2609 ++		s->block.hash.unpadded += s->block_header.size
  1.2610 ++				+ s->block.compressed;
  1.2611 ++
  1.2612 ++#ifdef XZ_DEC_ANY_CHECK
  1.2613 ++		s->block.hash.unpadded += check_sizes[s->check_type];
  1.2614 ++#else
  1.2615 ++		if (s->check_type == XZ_CHECK_CRC32)
  1.2616 ++			s->block.hash.unpadded += 4;
  1.2617 ++#endif
  1.2618 ++
  1.2619 ++		s->block.hash.uncompressed += s->block.uncompressed;
  1.2620 ++		s->block.hash.crc32 = xz_crc32(
  1.2621 ++				(const uint8_t *)&s->block.hash,
  1.2622 ++				sizeof(s->block.hash), s->block.hash.crc32);
  1.2623 ++
  1.2624 ++		++s->block.count;
  1.2625 ++	}
  1.2626 ++
  1.2627 ++	return ret;
  1.2628 ++}
  1.2629 ++
  1.2630 ++/* Update the Index size and the CRC32 value. */
  1.2631 ++static void index_update(struct xz_dec *s, const struct xz_buf *b)
  1.2632 ++{
  1.2633 ++	size_t in_used = b->in_pos - s->in_start;
  1.2634 ++	s->index.size += in_used;
  1.2635 ++	s->crc32 = xz_crc32(b->in + s->in_start, in_used, s->crc32);
  1.2636 ++}
  1.2637 ++
  1.2638 ++/*
  1.2639 ++ * Decode the Number of Records, Unpadded Size, and Uncompressed Size
  1.2640 ++ * fields from the Index field. That is, Index Padding and CRC32 are not
  1.2641 ++ * decoded by this function.
  1.2642 ++ *
  1.2643 ++ * This can return XZ_OK (more input needed), XZ_STREAM_END (everything
  1.2644 ++ * successfully decoded), or XZ_DATA_ERROR (input is corrupt).
  1.2645 ++ */
  1.2646 ++static enum xz_ret dec_index(struct xz_dec *s, struct xz_buf *b)
  1.2647 ++{
  1.2648 ++	enum xz_ret ret;
  1.2649 ++
  1.2650 ++	do {
  1.2651 ++		ret = dec_vli(s, b->in, &b->in_pos, b->in_size);
  1.2652 ++		if (ret != XZ_STREAM_END) {
  1.2653 ++			index_update(s, b);
  1.2654 ++			return ret;
  1.2655 ++		}
  1.2656 ++
  1.2657 ++		switch (s->index.sequence) {
  1.2658 ++		case SEQ_INDEX_COUNT:
  1.2659 ++			s->index.count = s->vli;
  1.2660 ++
  1.2661 ++			/*
  1.2662 ++			 * Validate that the Number of Records field
  1.2663 ++			 * indicates the same number of Records as
  1.2664 ++			 * there were Blocks in the Stream.
  1.2665 ++			 */
  1.2666 ++			if (s->index.count != s->block.count)
  1.2667 ++				return XZ_DATA_ERROR;
  1.2668 ++
  1.2669 ++			s->index.sequence = SEQ_INDEX_UNPADDED;
  1.2670 ++			break;
  1.2671 ++
  1.2672 ++		case SEQ_INDEX_UNPADDED:
  1.2673 ++			s->index.hash.unpadded += s->vli;
  1.2674 ++			s->index.sequence = SEQ_INDEX_UNCOMPRESSED;
  1.2675 ++			break;
  1.2676 ++
  1.2677 ++		case SEQ_INDEX_UNCOMPRESSED:
  1.2678 ++			s->index.hash.uncompressed += s->vli;
  1.2679 ++			s->index.hash.crc32 = xz_crc32(
  1.2680 ++					(const uint8_t *)&s->index.hash,
  1.2681 ++					sizeof(s->index.hash),
  1.2682 ++					s->index.hash.crc32);
  1.2683 ++			--s->index.count;
  1.2684 ++			s->index.sequence = SEQ_INDEX_UNPADDED;
  1.2685 ++			break;
  1.2686 ++		}
  1.2687 ++	} while (s->index.count > 0);
  1.2688 ++
  1.2689 ++	return XZ_STREAM_END;
  1.2690 ++}
  1.2691 ++
  1.2692 ++/*
  1.2693 ++ * Validate that the next four input bytes match the value of s->crc32.
  1.2694 ++ * s->pos must be zero when starting to validate the first byte.
  1.2695 ++ */
  1.2696 ++static enum xz_ret crc32_validate(struct xz_dec *s, struct xz_buf *b)
  1.2697 ++{
  1.2698 ++	do {
  1.2699 ++		if (b->in_pos == b->in_size)
  1.2700 ++			return XZ_OK;
  1.2701 ++
  1.2702 ++		if (((s->crc32 >> s->pos) & 0xFF) != b->in[b->in_pos++])
  1.2703 ++			return XZ_DATA_ERROR;
  1.2704 ++
  1.2705 ++		s->pos += 8;
  1.2706 ++
  1.2707 ++	} while (s->pos < 32);
  1.2708 ++
  1.2709 ++	s->crc32 = 0;
  1.2710 ++	s->pos = 0;
  1.2711 ++
  1.2712 ++	return XZ_STREAM_END;
  1.2713 ++}
  1.2714 ++
  1.2715 ++#ifdef XZ_DEC_ANY_CHECK
  1.2716 ++/*
  1.2717 ++ * Skip over the Check field when the Check ID is not supported.
  1.2718 ++ * Returns true once the whole Check field has been skipped over.
  1.2719 ++ */
  1.2720 ++static bool check_skip(struct xz_dec *s, struct xz_buf *b)
  1.2721 ++{
  1.2722 ++	while (s->pos < check_sizes[s->check_type]) {
  1.2723 ++		if (b->in_pos == b->in_size)
  1.2724 ++			return false;
  1.2725 ++
  1.2726 ++		++b->in_pos;
  1.2727 ++		++s->pos;
  1.2728 ++	}
  1.2729 ++
  1.2730 ++	s->pos = 0;
  1.2731 ++
  1.2732 ++	return true;
  1.2733 ++}
  1.2734 ++#endif
  1.2735 ++
  1.2736 ++/* Decode the Stream Header field (the first 12 bytes of the .xz Stream). */
  1.2737 ++static enum xz_ret dec_stream_header(struct xz_dec *s)
  1.2738 ++{
  1.2739 ++	if (!memeq(s->temp.buf, HEADER_MAGIC, HEADER_MAGIC_SIZE))
  1.2740 ++		return XZ_FORMAT_ERROR;
  1.2741 ++
  1.2742 ++	if (xz_crc32(s->temp.buf + HEADER_MAGIC_SIZE, 2, 0)
  1.2743 ++			!= get_le32(s->temp.buf + HEADER_MAGIC_SIZE + 2))
  1.2744 ++		return XZ_DATA_ERROR;
  1.2745 ++
  1.2746 ++	if (s->temp.buf[HEADER_MAGIC_SIZE] != 0)
  1.2747 ++		return XZ_OPTIONS_ERROR;
  1.2748 ++
  1.2749 ++	/*
  1.2750 ++	 * Of integrity checks, we support only none (Check ID = 0) and
  1.2751 ++	 * CRC32 (Check ID = 1). However, if XZ_DEC_ANY_CHECK is defined,
  1.2752 ++	 * we will accept other check types too, but then the check won't
  1.2753 ++	 * be verified and a warning (XZ_UNSUPPORTED_CHECK) will be given.
  1.2754 ++	 */
  1.2755 ++	s->check_type = s->temp.buf[HEADER_MAGIC_SIZE + 1];
  1.2756 ++
  1.2757 ++#ifdef XZ_DEC_ANY_CHECK
  1.2758 ++	if (s->check_type > XZ_CHECK_MAX)
  1.2759 ++		return XZ_OPTIONS_ERROR;
  1.2760 ++
  1.2761 ++	if (s->check_type > XZ_CHECK_CRC32)
  1.2762 ++		return XZ_UNSUPPORTED_CHECK;
  1.2763 ++#else
  1.2764 ++	if (s->check_type > XZ_CHECK_CRC32)
  1.2765 ++		return XZ_OPTIONS_ERROR;
  1.2766 ++#endif
  1.2767 ++
  1.2768 ++	return XZ_OK;
  1.2769 ++}
  1.2770 ++
  1.2771 ++/* Decode the Stream Footer field (the last 12 bytes of the .xz Stream) */
  1.2772 ++static enum xz_ret dec_stream_footer(struct xz_dec *s)
  1.2773 ++{
  1.2774 ++	if (!memeq(s->temp.buf + 10, FOOTER_MAGIC, FOOTER_MAGIC_SIZE))
  1.2775 ++		return XZ_DATA_ERROR;
  1.2776 ++
  1.2777 ++	if (xz_crc32(s->temp.buf + 4, 6, 0) != get_le32(s->temp.buf))
  1.2778 ++		return XZ_DATA_ERROR;
  1.2779 ++
  1.2780 ++	/*
  1.2781 ++	 * Validate Backward Size. Note that we never added the size of the
  1.2782 ++	 * Index CRC32 field to s->index.size, thus we use s->index.size / 4
  1.2783 ++	 * instead of s->index.size / 4 - 1.
  1.2784 ++	 */
  1.2785 ++	if ((s->index.size >> 2) != get_le32(s->temp.buf + 4))
  1.2786 ++		return XZ_DATA_ERROR;
  1.2787 ++
  1.2788 ++	if (s->temp.buf[8] != 0 || s->temp.buf[9] != s->check_type)
  1.2789 ++		return XZ_DATA_ERROR;
  1.2790 ++
  1.2791 ++	/*
  1.2792 ++	 * Use XZ_STREAM_END instead of XZ_OK to be more convenient
  1.2793 ++	 * for the caller.
  1.2794 ++	 */
  1.2795 ++	return XZ_STREAM_END;
  1.2796 ++}
  1.2797 ++
  1.2798 ++/* Decode the Block Header and initialize the filter chain. */
  1.2799 ++static enum xz_ret dec_block_header(struct xz_dec *s)
  1.2800 ++{
  1.2801 ++	enum xz_ret ret;
  1.2802 ++
  1.2803 ++	/*
  1.2804 ++	 * Validate the CRC32. We know that the temp buffer is at least
  1.2805 ++	 * eight bytes so this is safe.
  1.2806 ++	 */
  1.2807 ++	s->temp.size -= 4;
  1.2808 ++	if (xz_crc32(s->temp.buf, s->temp.size, 0)
  1.2809 ++			!= get_le32(s->temp.buf + s->temp.size))
  1.2810 ++		return XZ_DATA_ERROR;
  1.2811 ++
  1.2812 ++	s->temp.pos = 2;
  1.2813 ++
  1.2814 ++	/*
  1.2815 ++	 * Catch unsupported Block Flags. We support only one or two filters
  1.2816 ++	 * in the chain, so we catch that with the same test.
  1.2817 ++	 */
  1.2818 ++#ifdef XZ_DEC_BCJ
  1.2819 ++	if (s->temp.buf[1] & 0x3E)
  1.2820 ++#else
  1.2821 ++	if (s->temp.buf[1] & 0x3F)
  1.2822 ++#endif
  1.2823 ++		return XZ_OPTIONS_ERROR;
  1.2824 ++
  1.2825 ++	/* Compressed Size */
  1.2826 ++	if (s->temp.buf[1] & 0x40) {
  1.2827 ++		if (dec_vli(s, s->temp.buf, &s->temp.pos, s->temp.size)
  1.2828 ++					!= XZ_STREAM_END)
  1.2829 ++			return XZ_DATA_ERROR;
  1.2830 ++
  1.2831 ++		s->block_header.compressed = s->vli;
  1.2832 ++	} else {
  1.2833 ++		s->block_header.compressed = VLI_UNKNOWN;
  1.2834 ++	}
  1.2835 ++
  1.2836 ++	/* Uncompressed Size */
  1.2837 ++	if (s->temp.buf[1] & 0x80) {
  1.2838 ++		if (dec_vli(s, s->temp.buf, &s->temp.pos, s->temp.size)
  1.2839 ++				!= XZ_STREAM_END)
  1.2840 ++			return XZ_DATA_ERROR;
  1.2841 ++
  1.2842 ++		s->block_header.uncompressed = s->vli;
  1.2843 ++	} else {
  1.2844 ++		s->block_header.uncompressed = VLI_UNKNOWN;
  1.2845 ++	}
  1.2846 ++
  1.2847 ++#ifdef XZ_DEC_BCJ
  1.2848 ++	/* If there are two filters, the first one must be a BCJ filter. */
  1.2849 ++	s->bcj_active = s->temp.buf[1] & 0x01;
  1.2850 ++	if (s->bcj_active) {
  1.2851 ++		if (s->temp.size - s->temp.pos < 2)
  1.2852 ++			return XZ_OPTIONS_ERROR;
  1.2853 ++
  1.2854 ++		ret = xz_dec_bcj_reset(s->bcj, s->temp.buf[s->temp.pos++]);
  1.2855 ++		if (ret != XZ_OK)
  1.2856 ++			return ret;
  1.2857 ++
  1.2858 ++		/*
  1.2859 ++		 * We don't support custom start offset,
  1.2860 ++		 * so Size of Properties must be zero.
  1.2861 ++		 */
  1.2862 ++		if (s->temp.buf[s->temp.pos++] != 0x00)
  1.2863 ++			return XZ_OPTIONS_ERROR;
  1.2864 ++	}
  1.2865 ++#endif
  1.2866 ++
  1.2867 ++	/* Valid Filter Flags always take at least two bytes. */
  1.2868 ++	if (s->temp.size - s->temp.pos < 2)
  1.2869 ++		return XZ_DATA_ERROR;
  1.2870 ++
  1.2871 ++	/* Filter ID = LZMA2 */
  1.2872 ++	if (s->temp.buf[s->temp.pos++] != 0x21)
  1.2873 ++		return XZ_OPTIONS_ERROR;
  1.2874 ++
  1.2875 ++	/* Size of Properties = 1-byte Filter Properties */
  1.2876 ++	if (s->temp.buf[s->temp.pos++] != 0x01)
  1.2877 ++		return XZ_OPTIONS_ERROR;
  1.2878 ++
  1.2879 ++	/* Filter Properties contains LZMA2 dictionary size. */
  1.2880 ++	if (s->temp.size - s->temp.pos < 1)
  1.2881 ++		return XZ_DATA_ERROR;
  1.2882 ++
  1.2883 ++	ret = xz_dec_lzma2_reset(s->lzma2, s->temp.buf[s->temp.pos++]);
  1.2884 ++	if (ret != XZ_OK)
  1.2885 ++		return ret;
  1.2886 ++
  1.2887 ++	/* The rest must be Header Padding. */
  1.2888 ++	while (s->temp.pos < s->temp.size)
  1.2889 ++		if (s->temp.buf[s->temp.pos++] != 0x00)
  1.2890 ++			return XZ_OPTIONS_ERROR;
  1.2891 ++
  1.2892 ++	s->temp.pos = 0;
  1.2893 ++	s->block.compressed = 0;
  1.2894 ++	s->block.uncompressed = 0;
  1.2895 ++
  1.2896 ++	return XZ_OK;
  1.2897 ++}
  1.2898 ++
  1.2899 ++static enum xz_ret dec_main(struct xz_dec *s, struct xz_buf *b)
  1.2900 ++{
  1.2901 ++	enum xz_ret ret;
  1.2902 ++
  1.2903 ++	/*
  1.2904 ++	 * Store the start position for the case when we are in the middle
  1.2905 ++	 * of the Index field.
  1.2906 ++	 */
  1.2907 ++	s->in_start = b->in_pos;
  1.2908 ++
  1.2909 ++	while (true) {
  1.2910 ++		switch (s->sequence) {
  1.2911 ++		case SEQ_STREAM_HEADER:
  1.2912 ++			/*
  1.2913 ++			 * Stream Header is copied to s->temp, and then
  1.2914 ++			 * decoded from there. This way if the caller
  1.2915 ++			 * gives us only little input at a time, we can
  1.2916 ++			 * still keep the Stream Header decoding code
  1.2917 ++			 * simple. Similar approach is used in many places
  1.2918 ++			 * in this file.
  1.2919 ++			 */
  1.2920 ++			if (!fill_temp(s, b))
  1.2921 ++				return XZ_OK;
  1.2922 ++
  1.2923 ++			/*
  1.2924 ++			 * If dec_stream_header() returns
  1.2925 ++			 * XZ_UNSUPPORTED_CHECK, it is still possible
  1.2926 ++			 * to continue decoding if working in multi-call
  1.2927 ++			 * mode. Thus, update s->sequence before calling
  1.2928 ++			 * dec_stream_header().
  1.2929 ++			 */
  1.2930 ++			s->sequence = SEQ_BLOCK_START;
  1.2931 ++
  1.2932 ++			ret = dec_stream_header(s);
  1.2933 ++			if (ret != XZ_OK)
  1.2934 ++				return ret;
  1.2935 ++
  1.2936 ++		case SEQ_BLOCK_START:
  1.2937 ++			/* We need one byte of input to continue. */
  1.2938 ++			if (b->in_pos == b->in_size)
  1.2939 ++				return XZ_OK;
  1.2940 ++
  1.2941 ++			/* See if this is the beginning of the Index field. */
  1.2942 ++			if (b->in[b->in_pos] == 0) {
  1.2943 ++				s->in_start = b->in_pos++;
  1.2944 ++				s->sequence = SEQ_INDEX;
  1.2945 ++				break;
  1.2946 ++			}
  1.2947 ++
  1.2948 ++			/*
  1.2949 ++			 * Calculate the size of the Block Header and
  1.2950 ++			 * prepare to decode it.
  1.2951 ++			 */
  1.2952 ++			s->block_header.size
  1.2953 ++				= ((uint32_t)b->in[b->in_pos] + 1) * 4;
  1.2954 ++
  1.2955 ++			s->temp.size = s->block_header.size;
  1.2956 ++			s->temp.pos = 0;
  1.2957 ++			s->sequence = SEQ_BLOCK_HEADER;
  1.2958 ++
  1.2959 ++		case SEQ_BLOCK_HEADER:
  1.2960 ++			if (!fill_temp(s, b))
  1.2961 ++				return XZ_OK;
  1.2962 ++
  1.2963 ++			ret = dec_block_header(s);
  1.2964 ++			if (ret != XZ_OK)
  1.2965 ++				return ret;
  1.2966 ++
  1.2967 ++			s->sequence = SEQ_BLOCK_UNCOMPRESS;
  1.2968 ++
  1.2969 ++		case SEQ_BLOCK_UNCOMPRESS:
  1.2970 ++			ret = dec_block(s, b);
  1.2971 ++			if (ret != XZ_STREAM_END)
  1.2972 ++				return ret;
  1.2973 ++
  1.2974 ++			s->sequence = SEQ_BLOCK_PADDING;
  1.2975 ++
  1.2976 ++		case SEQ_BLOCK_PADDING:
  1.2977 ++			/*
  1.2978 ++			 * Size of Compressed Data + Block Padding
  1.2979 ++			 * must be a multiple of four. We don't need
  1.2980 ++			 * s->block.compressed for anything else
  1.2981 ++			 * anymore, so we use it here to test the size
  1.2982 ++			 * of the Block Padding field.
  1.2983 ++			 */
  1.2984 ++			while (s->block.compressed & 3) {
  1.2985 ++				if (b->in_pos == b->in_size)
  1.2986 ++					return XZ_OK;
  1.2987 ++
  1.2988 ++				if (b->in[b->in_pos++] != 0)
  1.2989 ++					return XZ_DATA_ERROR;
  1.2990 ++
  1.2991 ++				++s->block.compressed;
  1.2992 ++			}
  1.2993 ++
  1.2994 ++			s->sequence = SEQ_BLOCK_CHECK;
  1.2995 ++
  1.2996 ++		case SEQ_BLOCK_CHECK:
  1.2997 ++			if (s->check_type == XZ_CHECK_CRC32) {
  1.2998 ++				ret = crc32_validate(s, b);
  1.2999 ++				if (ret != XZ_STREAM_END)
  1.3000 ++					return ret;
  1.3001 ++			}
  1.3002 ++#ifdef XZ_DEC_ANY_CHECK
  1.3003 ++			else if (!check_skip(s, b)) {
  1.3004 ++				return XZ_OK;
  1.3005 ++			}
  1.3006 ++#endif
  1.3007 ++
  1.3008 ++			s->sequence = SEQ_BLOCK_START;
  1.3009 ++			break;
  1.3010 ++
  1.3011 ++		case SEQ_INDEX:
  1.3012 ++			ret = dec_index(s, b);
  1.3013 ++			if (ret != XZ_STREAM_END)
  1.3014 ++				return ret;
  1.3015 ++
  1.3016 ++			s->sequence = SEQ_INDEX_PADDING;
  1.3017 ++
  1.3018 ++		case SEQ_INDEX_PADDING:
  1.3019 ++			while ((s->index.size + (b->in_pos - s->in_start))
  1.3020 ++					& 3) {
  1.3021 ++				if (b->in_pos == b->in_size) {
  1.3022 ++					index_update(s, b);
  1.3023 ++					return XZ_OK;
  1.3024 ++				}
  1.3025 ++
  1.3026 ++				if (b->in[b->in_pos++] != 0)
  1.3027 ++					return XZ_DATA_ERROR;
  1.3028 ++			}
  1.3029 ++
  1.3030 ++			/* Finish the CRC32 value and Index size. */
  1.3031 ++			index_update(s, b);
  1.3032 ++
  1.3033 ++			/* Compare the hashes to validate the Index field. */
  1.3034 ++			if (!memeq(&s->block.hash, &s->index.hash,
  1.3035 ++					sizeof(s->block.hash)))
  1.3036 ++				return XZ_DATA_ERROR;
  1.3037 ++
  1.3038 ++			s->sequence = SEQ_INDEX_CRC32;
  1.3039 ++
  1.3040 ++		case SEQ_INDEX_CRC32:
  1.3041 ++			ret = crc32_validate(s, b);
  1.3042 ++			if (ret != XZ_STREAM_END)
  1.3043 ++				return ret;
  1.3044 ++
  1.3045 ++			s->temp.size = STREAM_HEADER_SIZE;
  1.3046 ++			s->sequence = SEQ_STREAM_FOOTER;
  1.3047 ++
  1.3048 ++		case SEQ_STREAM_FOOTER:
  1.3049 ++			if (!fill_temp(s, b))
  1.3050 ++				return XZ_OK;
  1.3051 ++
  1.3052 ++			return dec_stream_footer(s);
  1.3053 ++		}
  1.3054 ++	}
  1.3055 ++
  1.3056 ++	/* Never reached */
  1.3057 ++}
  1.3058 ++
  1.3059 ++/*
  1.3060 ++ * xz_dec_run() is a wrapper for dec_main() to handle some special cases in
  1.3061 ++ * multi-call and single-call decoding.
  1.3062 ++ *
  1.3063 ++ * In multi-call mode, we must return XZ_BUF_ERROR when it seems clear that we
  1.3064 ++ * are not going to make any progress anymore. This is to prevent the caller
  1.3065 ++ * from calling us infinitely when the input file is truncated or otherwise
  1.3066 ++ * corrupt. Since zlib-style API allows that the caller fills the input buffer
  1.3067 ++ * only when the decoder doesn't produce any new output, we have to be careful
  1.3068 ++ * to avoid returning XZ_BUF_ERROR too easily: XZ_BUF_ERROR is returned only
  1.3069 ++ * after the second consecutive call to xz_dec_run() that makes no progress.
  1.3070 ++ *
  1.3071 ++ * In single-call mode, if we couldn't decode everything and no error
  1.3072 ++ * occurred, either the input is truncated or the output buffer is too small.
  1.3073 ++ * Since we know that the last input byte never produces any output, we know
  1.3074 ++ * that if all the input was consumed and decoding wasn't finished, the file
  1.3075 ++ * must be corrupt. Otherwise the output buffer has to be too small or the
  1.3076 ++ * file is corrupt in a way that decoding it produces too big output.
  1.3077 ++ *
  1.3078 ++ * If single-call decoding fails, we reset b->in_pos and b->out_pos back to
  1.3079 ++ * their original values. This is because with some filter chains there won't
  1.3080 ++ * be any valid uncompressed data in the output buffer unless the decoding
  1.3081 ++ * actually succeeds (that's the price to pay of using the output buffer as
  1.3082 ++ * the workspace).
  1.3083 ++ */
  1.3084 ++XZ_EXTERN enum xz_ret xz_dec_run(struct xz_dec *s, struct xz_buf *b)
  1.3085 ++{
  1.3086 ++	size_t in_start;
  1.3087 ++	size_t out_start;
  1.3088 ++	enum xz_ret ret;
  1.3089 ++
  1.3090 ++	if (DEC_IS_SINGLE(s->mode))
  1.3091 ++		xz_dec_reset(s);
  1.3092 ++
  1.3093 ++	in_start = b->in_pos;
  1.3094 ++	out_start = b->out_pos;
  1.3095 ++	ret = dec_main(s, b);
  1.3096 ++
  1.3097 ++	if (DEC_IS_SINGLE(s->mode)) {
  1.3098 ++		if (ret == XZ_OK)
  1.3099 ++			ret = b->in_pos == b->in_size
  1.3100 ++					? XZ_DATA_ERROR : XZ_BUF_ERROR;
  1.3101 ++
  1.3102 ++		if (ret != XZ_STREAM_END) {
  1.3103 ++			b->in_pos = in_start;
  1.3104 ++			b->out_pos = out_start;
  1.3105 ++		}
  1.3106 ++
  1.3107 ++	} else if (ret == XZ_OK && in_start == b->in_pos
  1.3108 ++			&& out_start == b->out_pos) {
  1.3109 ++		if (s->allow_buf_error)
  1.3110 ++			ret = XZ_BUF_ERROR;
  1.3111 ++
  1.3112 ++		s->allow_buf_error = true;
  1.3113 ++	} else {
  1.3114 ++		s->allow_buf_error = false;
  1.3115 ++	}
  1.3116 ++
  1.3117 ++	return ret;
  1.3118 ++}
  1.3119 ++
  1.3120 ++XZ_EXTERN struct xz_dec *xz_dec_init(enum xz_mode mode, uint32_t dict_max)
  1.3121 ++{
  1.3122 ++	struct xz_dec *s = kmalloc(sizeof(*s), GFP_KERNEL);
  1.3123 ++	if (s == NULL)
  1.3124 ++		return NULL;
  1.3125 ++
  1.3126 ++	s->mode = mode;
  1.3127 ++
  1.3128 ++#ifdef XZ_DEC_BCJ
  1.3129 ++	s->bcj = xz_dec_bcj_create(DEC_IS_SINGLE(mode));
  1.3130 ++	if (s->bcj == NULL)
  1.3131 ++		goto error_bcj;
  1.3132 ++#endif
  1.3133 ++
  1.3134 ++	s->lzma2 = xz_dec_lzma2_create(mode, dict_max);
  1.3135 ++	if (s->lzma2 == NULL)
  1.3136 ++		goto error_lzma2;
  1.3137 ++
  1.3138 ++	xz_dec_reset(s);
  1.3139 ++	return s;
  1.3140 ++
  1.3141 ++error_lzma2:
  1.3142 ++#ifdef XZ_DEC_BCJ
  1.3143 ++	xz_dec_bcj_end(s->bcj);
  1.3144 ++error_bcj:
  1.3145 ++#endif
  1.3146 ++	kfree(s);
  1.3147 ++	return NULL;
  1.3148 ++}
  1.3149 ++
  1.3150 ++XZ_EXTERN void xz_dec_reset(struct xz_dec *s)
  1.3151 ++{
  1.3152 ++	s->sequence = SEQ_STREAM_HEADER;
  1.3153 ++	s->allow_buf_error = false;
  1.3154 ++	s->pos = 0;
  1.3155 ++	s->crc32 = 0;
  1.3156 ++	memzero(&s->block, sizeof(s->block));
  1.3157 ++	memzero(&s->index, sizeof(s->index));
  1.3158 ++	s->temp.pos = 0;
  1.3159 ++	s->temp.size = STREAM_HEADER_SIZE;
  1.3160 ++}
  1.3161 ++
  1.3162 ++XZ_EXTERN void xz_dec_end(struct xz_dec *s)
  1.3163 ++{
  1.3164 ++	if (s != NULL) {
  1.3165 ++		xz_dec_lzma2_end(s->lzma2);
  1.3166 ++#ifdef XZ_DEC_BCJ
  1.3167 ++		xz_dec_bcj_end(s->bcj);
  1.3168 ++#endif
  1.3169 ++		kfree(s);
  1.3170 ++	}
  1.3171 ++}
  1.3172 +diff --git a/lib/xz/xz_dec_syms.c b/lib/xz/xz_dec_syms.c
  1.3173 +new file mode 100644
  1.3174 +index 0000000..32eb3c0
  1.3175 +--- /dev/null
  1.3176 ++++ b/lib/xz/xz_dec_syms.c
  1.3177 +@@ -0,0 +1,26 @@
  1.3178 ++/*
  1.3179 ++ * XZ decoder module information
  1.3180 ++ *
  1.3181 ++ * Author: Lasse Collin <lasse.collin@tukaani.org>
  1.3182 ++ *
  1.3183 ++ * This file has been put into the public domain.
  1.3184 ++ * You can do whatever you want with this file.
  1.3185 ++ */
  1.3186 ++
  1.3187 ++#include <linux/module.h>
  1.3188 ++#include <linux/xz.h>
  1.3189 ++
  1.3190 ++EXPORT_SYMBOL(xz_dec_init);
  1.3191 ++EXPORT_SYMBOL(xz_dec_reset);
  1.3192 ++EXPORT_SYMBOL(xz_dec_run);
  1.3193 ++EXPORT_SYMBOL(xz_dec_end);
  1.3194 ++
  1.3195 ++MODULE_DESCRIPTION("XZ decompressor");
  1.3196 ++MODULE_VERSION("1.0");
  1.3197 ++MODULE_AUTHOR("Lasse Collin <lasse.collin@tukaani.org> and Igor Pavlov");
  1.3198 ++
  1.3199 ++/*
  1.3200 ++ * This code is in the public domain, but in Linux it's simplest to just
  1.3201 ++ * say it's GPL and consider the authors as the copyright holders.
  1.3202 ++ */
  1.3203 ++MODULE_LICENSE("GPL");
  1.3204 +diff --git a/lib/xz/xz_dec_test.c b/lib/xz/xz_dec_test.c
  1.3205 +new file mode 100644
  1.3206 +index 0000000..da28a19
  1.3207 +--- /dev/null
  1.3208 ++++ b/lib/xz/xz_dec_test.c
  1.3209 +@@ -0,0 +1,220 @@
  1.3210 ++/*
  1.3211 ++ * XZ decoder tester
  1.3212 ++ *
  1.3213 ++ * Author: Lasse Collin <lasse.collin@tukaani.org>
  1.3214 ++ *
  1.3215 ++ * This file has been put into the public domain.
  1.3216 ++ * You can do whatever you want with this file.
  1.3217 ++ */
  1.3218 ++
  1.3219 ++#include <linux/kernel.h>
  1.3220 ++#include <linux/module.h>
  1.3221 ++#include <linux/fs.h>
  1.3222 ++#include <linux/uaccess.h>
  1.3223 ++#include <linux/crc32.h>
  1.3224 ++#include <linux/xz.h>
  1.3225 ++
  1.3226 ++/* Maximum supported dictionary size */
  1.3227 ++#define DICT_MAX (1 << 20)
  1.3228 ++
  1.3229 ++/* Device name to pass to register_chrdev(). */
  1.3230 ++#define DEVICE_NAME "xz_dec_test"
  1.3231 ++
  1.3232 ++/* Dynamically allocated device major number */
  1.3233 ++static int device_major;
  1.3234 ++
  1.3235 ++/*
  1.3236 ++ * We reuse the same decoder state, and thus can decode only one
  1.3237 ++ * file at a time.
  1.3238 ++ */
  1.3239 ++static bool device_is_open;
  1.3240 ++
  1.3241 ++/* XZ decoder state */
  1.3242 ++static struct xz_dec *state;
  1.3243 ++
  1.3244 ++/*
  1.3245 ++ * Return value of xz_dec_run(). We need to avoid calling xz_dec_run() after
  1.3246 ++ * it has returned XZ_STREAM_END, so we make this static.
  1.3247 ++ */
  1.3248 ++static enum xz_ret ret;
  1.3249 ++
  1.3250 ++/*
  1.3251 ++ * Input and output buffers. The input buffer is used as a temporary safe
  1.3252 ++ * place for the data coming from the userspace.
  1.3253 ++ */
  1.3254 ++static uint8_t buffer_in[1024];
  1.3255 ++static uint8_t buffer_out[1024];
  1.3256 ++
  1.3257 ++/*
  1.3258 ++ * Structure to pass the input and output buffers to the XZ decoder.
  1.3259 ++ * A few of the fields are never modified so we initialize them here.
  1.3260 ++ */
  1.3261 ++static struct xz_buf buffers = {
  1.3262 ++	.in = buffer_in,
  1.3263 ++	.out = buffer_out,
  1.3264 ++	.out_size = sizeof(buffer_out)
  1.3265 ++};
  1.3266 ++
  1.3267 ++/*
  1.3268 ++ * CRC32 of uncompressed data. This is used to give the user a simple way
  1.3269 ++ * to check that the decoder produces correct output.
  1.3270 ++ */
  1.3271 ++static uint32_t crc;
  1.3272 ++
  1.3273 ++static int xz_dec_test_open(struct inode *i, struct file *f)
  1.3274 ++{
  1.3275 ++	if (device_is_open)
  1.3276 ++		return -EBUSY;
  1.3277 ++
  1.3278 ++	device_is_open = true;
  1.3279 ++
  1.3280 ++	xz_dec_reset(state);
  1.3281 ++	ret = XZ_OK;
  1.3282 ++	crc = 0xFFFFFFFF;
  1.3283 ++
  1.3284 ++	buffers.in_pos = 0;
  1.3285 ++	buffers.in_size = 0;
  1.3286 ++	buffers.out_pos = 0;
  1.3287 ++
  1.3288 ++	printk(KERN_INFO DEVICE_NAME ": opened\n");
  1.3289 ++	return 0;
  1.3290 ++}
  1.3291 ++
  1.3292 ++static int xz_dec_test_release(struct inode *i, struct file *f)
  1.3293 ++{
  1.3294 ++	device_is_open = false;
  1.3295 ++
  1.3296 ++	if (ret == XZ_OK)
  1.3297 ++		printk(KERN_INFO DEVICE_NAME ": input was truncated\n");
  1.3298 ++
  1.3299 ++	printk(KERN_INFO DEVICE_NAME ": closed\n");
  1.3300 ++	return 0;
  1.3301 ++}
  1.3302 ++
  1.3303 ++/*
  1.3304 ++ * Decode the data given to us from the userspace. CRC32 of the uncompressed
  1.3305 ++ * data is calculated and is printed at the end of successful decoding. The
  1.3306 ++ * uncompressed data isn't stored anywhere for further use.
  1.3307 ++ *
  1.3308 ++ * The .xz file must have exactly one Stream and no Stream Padding. The data
  1.3309 ++ * after the first Stream is considered to be garbage.
  1.3310 ++ */
  1.3311 ++static ssize_t xz_dec_test_write(struct file *file, const char __user *buf,
  1.3312 ++				 size_t size, loff_t *pos)
  1.3313 ++{
  1.3314 ++	size_t remaining;
  1.3315 ++
  1.3316 ++	if (ret != XZ_OK) {
  1.3317 ++		if (size > 0)
  1.3318 ++			printk(KERN_INFO DEVICE_NAME ": %zu bytes of "
  1.3319 ++					"garbage at the end of the file\n",
  1.3320 ++					size);
  1.3321 ++
  1.3322 ++		return -ENOSPC;
  1.3323 ++	}
  1.3324 ++
  1.3325 ++	printk(KERN_INFO DEVICE_NAME ": decoding %zu bytes of input\n",
  1.3326 ++			size);
  1.3327 ++
  1.3328 ++	remaining = size;
  1.3329 ++	while ((remaining > 0 || buffers.out_pos == buffers.out_size)
  1.3330 ++			&& ret == XZ_OK) {
  1.3331 ++		if (buffers.in_pos == buffers.in_size) {
  1.3332 ++			buffers.in_pos = 0;
  1.3333 ++			buffers.in_size = min(remaining, sizeof(buffer_in));
  1.3334 ++			if (copy_from_user(buffer_in, buf, buffers.in_size))
  1.3335 ++				return -EFAULT;
  1.3336 ++
  1.3337 ++			buf += buffers.in_size;
  1.3338 ++			remaining -= buffers.in_size;
  1.3339 ++		}
  1.3340 ++
  1.3341 ++		buffers.out_pos = 0;
  1.3342 ++		ret = xz_dec_run(state, &buffers);
  1.3343 ++		crc = crc32(crc, buffer_out, buffers.out_pos);
  1.3344 ++	}
  1.3345 ++
  1.3346 ++	switch (ret) {
  1.3347 ++	case XZ_OK:
  1.3348 ++		printk(KERN_INFO DEVICE_NAME ": XZ_OK\n");
  1.3349 ++		return size;
  1.3350 ++
  1.3351 ++	case XZ_STREAM_END:
  1.3352 ++		printk(KERN_INFO DEVICE_NAME ": XZ_STREAM_END, "
  1.3353 ++				"CRC32 = 0x%08X\n", ~crc);
  1.3354 ++		return size - remaining - (buffers.in_size - buffers.in_pos);
  1.3355 ++
  1.3356 ++	case XZ_MEMLIMIT_ERROR:
  1.3357 ++		printk(KERN_INFO DEVICE_NAME ": XZ_MEMLIMIT_ERROR\n");
  1.3358 ++		break;
  1.3359 ++
  1.3360 ++	case XZ_FORMAT_ERROR:
  1.3361 ++		printk(KERN_INFO DEVICE_NAME ": XZ_FORMAT_ERROR\n");
  1.3362 ++		break;
  1.3363 ++
  1.3364 ++	case XZ_OPTIONS_ERROR:
  1.3365 ++		printk(KERN_INFO DEVICE_NAME ": XZ_OPTIONS_ERROR\n");
  1.3366 ++		break;
  1.3367 ++
  1.3368 ++	case XZ_DATA_ERROR:
  1.3369 ++		printk(KERN_INFO DEVICE_NAME ": XZ_DATA_ERROR\n");
  1.3370 ++		break;
  1.3371 ++
  1.3372 ++	case XZ_BUF_ERROR:
  1.3373 ++		printk(KERN_INFO DEVICE_NAME ": XZ_BUF_ERROR\n");
  1.3374 ++		break;
  1.3375 ++
  1.3376 ++	default:
  1.3377 ++		printk(KERN_INFO DEVICE_NAME ": Bug detected!\n");
  1.3378 ++		break;
  1.3379 ++	}
  1.3380 ++
  1.3381 ++	return -EIO;
  1.3382 ++}
  1.3383 ++
  1.3384 ++/* Allocate the XZ decoder state and register the character device. */
  1.3385 ++static int __init xz_dec_test_init(void)
  1.3386 ++{
  1.3387 ++	static const struct file_operations fileops = {
  1.3388 ++		.owner = THIS_MODULE,
  1.3389 ++		.open = &xz_dec_test_open,
  1.3390 ++		.release = &xz_dec_test_release,
  1.3391 ++		.write = &xz_dec_test_write
  1.3392 ++	};
  1.3393 ++
  1.3394 ++	state = xz_dec_init(XZ_PREALLOC, DICT_MAX);
  1.3395 ++	if (state == NULL)
  1.3396 ++		return -ENOMEM;
  1.3397 ++
  1.3398 ++	device_major = register_chrdev(0, DEVICE_NAME, &fileops);
  1.3399 ++	if (device_major < 0) {
  1.3400 ++		xz_dec_end(state);
  1.3401 ++		return device_major;
  1.3402 ++	}
  1.3403 ++
  1.3404 ++	printk(KERN_INFO DEVICE_NAME ": module loaded\n");
  1.3405 ++	printk(KERN_INFO DEVICE_NAME ": Create a device node with "
  1.3406 ++			"'mknod " DEVICE_NAME " c %d 0' and write .xz files "
  1.3407 ++			"to it.\n", device_major);
  1.3408 ++	return 0;
  1.3409 ++}
  1.3410 ++
  1.3411 ++static void __exit xz_dec_test_exit(void)
  1.3412 ++{
  1.3413 ++	unregister_chrdev(device_major, DEVICE_NAME);
  1.3414 ++	xz_dec_end(state);
  1.3415 ++	printk(KERN_INFO DEVICE_NAME ": module unloaded\n");
  1.3416 ++}
  1.3417 ++
  1.3418 ++module_init(xz_dec_test_init);
  1.3419 ++module_exit(xz_dec_test_exit);
  1.3420 ++
  1.3421 ++MODULE_DESCRIPTION("XZ decompressor tester");
  1.3422 ++MODULE_VERSION("1.0");
  1.3423 ++MODULE_AUTHOR("Lasse Collin <lasse.collin@tukaani.org>");
  1.3424 ++
  1.3425 ++/*
  1.3426 ++ * This code is in the public domain, but in Linux it's simplest to just
  1.3427 ++ * say it's GPL and consider the authors as the copyright holders.
  1.3428 ++ */
  1.3429 ++MODULE_LICENSE("GPL");
  1.3430 +diff --git a/lib/xz/xz_lzma2.h b/lib/xz/xz_lzma2.h
  1.3431 +new file mode 100644
  1.3432 +index 0000000..071d67b
  1.3433 +--- /dev/null
  1.3434 ++++ b/lib/xz/xz_lzma2.h
  1.3435 +@@ -0,0 +1,204 @@
  1.3436 ++/*
  1.3437 ++ * LZMA2 definitions
  1.3438 ++ *
  1.3439 ++ * Authors: Lasse Collin <lasse.collin@tukaani.org>
  1.3440 ++ *          Igor Pavlov <http://7-zip.org/>
  1.3441 ++ *
  1.3442 ++ * This file has been put into the public domain.
  1.3443 ++ * You can do whatever you want with this file.
  1.3444 ++ */
  1.3445 ++
  1.3446 ++#ifndef XZ_LZMA2_H
  1.3447 ++#define XZ_LZMA2_H
  1.3448 ++
  1.3449 ++/* Range coder constants */
  1.3450 ++#define RC_SHIFT_BITS 8
  1.3451 ++#define RC_TOP_BITS 24
  1.3452 ++#define RC_TOP_VALUE (1 << RC_TOP_BITS)
  1.3453 ++#define RC_BIT_MODEL_TOTAL_BITS 11
  1.3454 ++#define RC_BIT_MODEL_TOTAL (1 << RC_BIT_MODEL_TOTAL_BITS)
  1.3455 ++#define RC_MOVE_BITS 5
  1.3456 ++
  1.3457 ++/*
  1.3458 ++ * Maximum number of position states. A position state is the lowest pb
  1.3459 ++ * number of bits of the current uncompressed offset. In some places there
  1.3460 ++ * are different sets of probabilities for different position states.
  1.3461 ++ */
  1.3462 ++#define POS_STATES_MAX (1 << 4)
  1.3463 ++
  1.3464 ++/*
  1.3465 ++ * This enum is used to track which LZMA symbols have occurred most recently
  1.3466 ++ * and in which order. This information is used to predict the next symbol.
  1.3467 ++ *
  1.3468 ++ * Symbols:
  1.3469 ++ *  - Literal: One 8-bit byte
  1.3470 ++ *  - Match: Repeat a chunk of data at some distance
  1.3471 ++ *  - Long repeat: Multi-byte match at a recently seen distance
  1.3472 ++ *  - Short repeat: One-byte repeat at a recently seen distance
  1.3473 ++ *
  1.3474 ++ * The symbol names are in from STATE_oldest_older_previous. REP means
  1.3475 ++ * either short or long repeated match, and NONLIT means any non-literal.
  1.3476 ++ */
  1.3477 ++enum lzma_state {
  1.3478 ++	STATE_LIT_LIT,
  1.3479 ++	STATE_MATCH_LIT_LIT,
  1.3480 ++	STATE_REP_LIT_LIT,
  1.3481 ++	STATE_SHORTREP_LIT_LIT,
  1.3482 ++	STATE_MATCH_LIT,
  1.3483 ++	STATE_REP_LIT,
  1.3484 ++	STATE_SHORTREP_LIT,
  1.3485 ++	STATE_LIT_MATCH,
  1.3486 ++	STATE_LIT_LONGREP,
  1.3487 ++	STATE_LIT_SHORTREP,
  1.3488 ++	STATE_NONLIT_MATCH,
  1.3489 ++	STATE_NONLIT_REP
  1.3490 ++};
  1.3491 ++
  1.3492 ++/* Total number of states */
  1.3493 ++#define STATES 12
  1.3494 ++
  1.3495 ++/* The lowest 7 states indicate that the previous state was a literal. */
  1.3496 ++#define LIT_STATES 7
  1.3497 ++
  1.3498 ++/* Indicate that the latest symbol was a literal. */
  1.3499 ++static inline void lzma_state_literal(enum lzma_state *state)
  1.3500 ++{
  1.3501 ++	if (*state <= STATE_SHORTREP_LIT_LIT)
  1.3502 ++		*state = STATE_LIT_LIT;
  1.3503 ++	else if (*state <= STATE_LIT_SHORTREP)
  1.3504 ++		*state -= 3;
  1.3505 ++	else
  1.3506 ++		*state -= 6;
  1.3507 ++}
  1.3508 ++
  1.3509 ++/* Indicate that the latest symbol was a match. */
  1.3510 ++static inline void lzma_state_match(enum lzma_state *state)
  1.3511 ++{
  1.3512 ++	*state = *state < LIT_STATES ? STATE_LIT_MATCH : STATE_NONLIT_MATCH;
  1.3513 ++}
  1.3514 ++
  1.3515 ++/* Indicate that the latest state was a long repeated match. */
  1.3516 ++static inline void lzma_state_long_rep(enum lzma_state *state)
  1.3517 ++{
  1.3518 ++	*state = *state < LIT_STATES ? STATE_LIT_LONGREP : STATE_NONLIT_REP;
  1.3519 ++}
  1.3520 ++
  1.3521 ++/* Indicate that the latest symbol was a short match. */
  1.3522 ++static inline void lzma_state_short_rep(enum lzma_state *state)
  1.3523 ++{
  1.3524 ++	*state = *state < LIT_STATES ? STATE_LIT_SHORTREP : STATE_NONLIT_REP;
  1.3525 ++}
  1.3526 ++
  1.3527 ++/* Test if the previous symbol was a literal. */
  1.3528 ++static inline bool lzma_state_is_literal(enum lzma_state state)
  1.3529 ++{
  1.3530 ++	return state < LIT_STATES;
  1.3531 ++}
  1.3532 ++
  1.3533 ++/* Each literal coder is divided in three sections:
  1.3534 ++ *   - 0x001-0x0FF: Without match byte
  1.3535 ++ *   - 0x101-0x1FF: With match byte; match bit is 0
  1.3536 ++ *   - 0x201-0x2FF: With match byte; match bit is 1
  1.3537 ++ *
  1.3538 ++ * Match byte is used when the previous LZMA symbol was something else than
  1.3539 ++ * a literal (that is, it was some kind of match).
  1.3540 ++ */
  1.3541 ++#define LITERAL_CODER_SIZE 0x300
  1.3542 ++
  1.3543 ++/* Maximum number of literal coders */
  1.3544 ++#define LITERAL_CODERS_MAX (1 << 4)
  1.3545 ++
  1.3546 ++/* Minimum length of a match is two bytes. */
  1.3547 ++#define MATCH_LEN_MIN 2
  1.3548 ++
  1.3549 ++/* Match length is encoded with 4, 5, or 10 bits.
  1.3550 ++ *
  1.3551 ++ * Length   Bits
  1.3552 ++ *  2-9      4 = Choice=0 + 3 bits
  1.3553 ++ * 10-17     5 = Choice=1 + Choice2=0 + 3 bits
  1.3554 ++ * 18-273   10 = Choice=1 + Choice2=1 + 8 bits
  1.3555 ++ */
  1.3556 ++#define LEN_LOW_BITS 3
  1.3557 ++#define LEN_LOW_SYMBOLS (1 << LEN_LOW_BITS)
  1.3558 ++#define LEN_MID_BITS 3
  1.3559 ++#define LEN_MID_SYMBOLS (1 << LEN_MID_BITS)
  1.3560 ++#define LEN_HIGH_BITS 8
  1.3561 ++#define LEN_HIGH_SYMBOLS (1 << LEN_HIGH_BITS)
  1.3562 ++#define LEN_SYMBOLS (LEN_LOW_SYMBOLS + LEN_MID_SYMBOLS + LEN_HIGH_SYMBOLS)
  1.3563 ++
  1.3564 ++/*
  1.3565 ++ * Maximum length of a match is 273 which is a result of the encoding
  1.3566 ++ * described above.
  1.3567 ++ */
  1.3568 ++#define MATCH_LEN_MAX (MATCH_LEN_MIN + LEN_SYMBOLS - 1)
  1.3569 ++
  1.3570 ++/*
  1.3571 ++ * Different sets of probabilities are used for match distances that have
  1.3572 ++ * very short match length: Lengths of 2, 3, and 4 bytes have a separate
  1.3573 ++ * set of probabilities for each length. The matches with longer length
  1.3574 ++ * use a shared set of probabilities.
  1.3575 ++ */
  1.3576 ++#define DIST_STATES 4
  1.3577 ++
  1.3578 ++/*
  1.3579 ++ * Get the index of the appropriate probability array for decoding
  1.3580 ++ * the distance slot.
  1.3581 ++ */
  1.3582 ++static inline uint32_t lzma_get_dist_state(uint32_t len)
  1.3583 ++{
  1.3584 ++	return len < DIST_STATES + MATCH_LEN_MIN
  1.3585 ++			? len - MATCH_LEN_MIN : DIST_STATES - 1;
  1.3586 ++}
  1.3587 ++
  1.3588 ++/*
  1.3589 ++ * The highest two bits of a 32-bit match distance are encoded using six bits.
  1.3590 ++ * This six-bit value is called a distance slot. This way encoding a 32-bit
  1.3591 ++ * value takes 6-36 bits, larger values taking more bits.
  1.3592 ++ */
  1.3593 ++#define DIST_SLOT_BITS 6
  1.3594 ++#define DIST_SLOTS (1 << DIST_SLOT_BITS)
  1.3595 ++
  1.3596 ++/* Match distances up to 127 are fully encoded using probabilities. Since
  1.3597 ++ * the highest two bits (distance slot) are always encoded using six bits,
  1.3598 ++ * the distances 0-3 don't need any additional bits to encode, since the
  1.3599 ++ * distance slot itself is the same as the actual distance. DIST_MODEL_START
  1.3600 ++ * indicates the first distance slot where at least one additional bit is
  1.3601 ++ * needed.
  1.3602 ++ */
  1.3603 ++#define DIST_MODEL_START 4
  1.3604 ++
  1.3605 ++/*
  1.3606 ++ * Match distances greater than 127 are encoded in three pieces:
  1.3607 ++ *   - distance slot: the highest two bits
  1.3608 ++ *   - direct bits: 2-26 bits below the highest two bits
  1.3609 ++ *   - alignment bits: four lowest bits
  1.3610 ++ *
  1.3611 ++ * Direct bits don't use any probabilities.
  1.3612 ++ *
  1.3613 ++ * The distance slot value of 14 is for distances 128-191.
  1.3614 ++ */
  1.3615 ++#define DIST_MODEL_END 14
  1.3616 ++
  1.3617 ++/* Distance slots that indicate a distance <= 127. */
  1.3618 ++#define FULL_DISTANCES_BITS (DIST_MODEL_END / 2)
  1.3619 ++#define FULL_DISTANCES (1 << FULL_DISTANCES_BITS)
  1.3620 ++
  1.3621 ++/*
  1.3622 ++ * For match distances greater than 127, only the highest two bits and the
  1.3623 ++ * lowest four bits (alignment) is encoded using probabilities.
  1.3624 ++ */
  1.3625 ++#define ALIGN_BITS 4
  1.3626 ++#define ALIGN_SIZE (1 << ALIGN_BITS)
  1.3627 ++#define ALIGN_MASK (ALIGN_SIZE - 1)
  1.3628 ++
  1.3629 ++/* Total number of all probability variables */
  1.3630 ++#define PROBS_TOTAL (1846 + LITERAL_CODERS_MAX * LITERAL_CODER_SIZE)
  1.3631 ++
  1.3632 ++/*
  1.3633 ++ * LZMA remembers the four most recent match distances. Reusing these
  1.3634 ++ * distances tends to take less space than re-encoding the actual
  1.3635 ++ * distance value.
  1.3636 ++ */
  1.3637 ++#define REPS 4
  1.3638 ++
  1.3639 ++#endif
  1.3640 +diff --git a/lib/xz/xz_private.h b/lib/xz/xz_private.h
  1.3641 +new file mode 100644
  1.3642 +index 0000000..a65633e
  1.3643 +--- /dev/null
  1.3644 ++++ b/lib/xz/xz_private.h
  1.3645 +@@ -0,0 +1,156 @@
  1.3646 ++/*
  1.3647 ++ * Private includes and definitions
  1.3648 ++ *
  1.3649 ++ * Author: Lasse Collin <lasse.collin@tukaani.org>
  1.3650 ++ *
  1.3651 ++ * This file has been put into the public domain.
  1.3652 ++ * You can do whatever you want with this file.
  1.3653 ++ */
  1.3654 ++
  1.3655 ++#ifndef XZ_PRIVATE_H
  1.3656 ++#define XZ_PRIVATE_H
  1.3657 ++
  1.3658 ++#ifdef __KERNEL__
  1.3659 ++#	include <linux/xz.h>
  1.3660 ++#	include <asm/byteorder.h>
  1.3661 ++#	include <asm/unaligned.h>
  1.3662 ++	/* XZ_PREBOOT may be defined only via decompress_unxz.c. */
  1.3663 ++#	ifndef XZ_PREBOOT
  1.3664 ++#		include <linux/slab.h>
  1.3665 ++#		include <linux/vmalloc.h>
  1.3666 ++#		include <linux/string.h>
  1.3667 ++#		ifdef CONFIG_XZ_DEC_X86
  1.3668 ++#			define XZ_DEC_X86
  1.3669 ++#		endif
  1.3670 ++#		ifdef CONFIG_XZ_DEC_POWERPC
  1.3671 ++#			define XZ_DEC_POWERPC
  1.3672 ++#		endif
  1.3673 ++#		ifdef CONFIG_XZ_DEC_IA64
  1.3674 ++#			define XZ_DEC_IA64
  1.3675 ++#		endif
  1.3676 ++#		ifdef CONFIG_XZ_DEC_ARM
  1.3677 ++#			define XZ_DEC_ARM
  1.3678 ++#		endif
  1.3679 ++#		ifdef CONFIG_XZ_DEC_ARMTHUMB
  1.3680 ++#			define XZ_DEC_ARMTHUMB
  1.3681 ++#		endif
  1.3682 ++#		ifdef CONFIG_XZ_DEC_SPARC
  1.3683 ++#			define XZ_DEC_SPARC
  1.3684 ++#		endif
  1.3685 ++#		define memeq(a, b, size) (memcmp(a, b, size) == 0)
  1.3686 ++#		define memzero(buf, size) memset(buf, 0, size)
  1.3687 ++#	endif
  1.3688 ++#	define get_le32(p) le32_to_cpup((const uint32_t *)(p))
  1.3689 ++#else
  1.3690 ++	/*
  1.3691 ++	 * For userspace builds, use a separate header to define the required
  1.3692 ++	 * macros and functions. This makes it easier to adapt the code into
  1.3693 ++	 * different environments and avoids clutter in the Linux kernel tree.
  1.3694 ++	 */
  1.3695 ++#	include "xz_config.h"
  1.3696 ++#endif
  1.3697 ++
  1.3698 ++/* If no specific decoding mode is requested, enable support for all modes. */
  1.3699 ++#if !defined(XZ_DEC_SINGLE) && !defined(XZ_DEC_PREALLOC) \
  1.3700 ++		&& !defined(XZ_DEC_DYNALLOC)
  1.3701 ++#	define XZ_DEC_SINGLE
  1.3702 ++#	define XZ_DEC_PREALLOC
  1.3703 ++#	define XZ_DEC_DYNALLOC
  1.3704 ++#endif
  1.3705 ++
  1.3706 ++/*
  1.3707 ++ * The DEC_IS_foo(mode) macros are used in "if" statements. If only some
  1.3708 ++ * of the supported modes are enabled, these macros will evaluate to true or
  1.3709 ++ * false at compile time and thus allow the compiler to omit unneeded code.
  1.3710 ++ */
  1.3711 ++#ifdef XZ_DEC_SINGLE
  1.3712 ++#	define DEC_IS_SINGLE(mode) ((mode) == XZ_SINGLE)
  1.3713 ++#else
  1.3714 ++#	define DEC_IS_SINGLE(mode) (false)
  1.3715 ++#endif
  1.3716 ++
  1.3717 ++#ifdef XZ_DEC_PREALLOC
  1.3718 ++#	define DEC_IS_PREALLOC(mode) ((mode) == XZ_PREALLOC)
  1.3719 ++#else
  1.3720 ++#	define DEC_IS_PREALLOC(mode) (false)
  1.3721 ++#endif
  1.3722 ++
  1.3723 ++#ifdef XZ_DEC_DYNALLOC
  1.3724 ++#	define DEC_IS_DYNALLOC(mode) ((mode) == XZ_DYNALLOC)
  1.3725 ++#else
  1.3726 ++#	define DEC_IS_DYNALLOC(mode) (false)
  1.3727 ++#endif
  1.3728 ++
  1.3729 ++#if !defined(XZ_DEC_SINGLE)
  1.3730 ++#	define DEC_IS_MULTI(mode) (true)
  1.3731 ++#elif defined(XZ_DEC_PREALLOC) || defined(XZ_DEC_DYNALLOC)
  1.3732 ++#	define DEC_IS_MULTI(mode) ((mode) != XZ_SINGLE)
  1.3733 ++#else
  1.3734 ++#	define DEC_IS_MULTI(mode) (false)
  1.3735 ++#endif
  1.3736 ++
  1.3737 ++/*
  1.3738 ++ * If any of the BCJ filter decoders are wanted, define XZ_DEC_BCJ.
  1.3739 ++ * XZ_DEC_BCJ is used to enable generic support for BCJ decoders.
  1.3740 ++ */
  1.3741 ++#ifndef XZ_DEC_BCJ
  1.3742 ++#	if defined(XZ_DEC_X86) || defined(XZ_DEC_POWERPC) \
  1.3743 ++			|| defined(XZ_DEC_IA64) || defined(XZ_DEC_ARM) \
  1.3744 ++			|| defined(XZ_DEC_ARM) || defined(XZ_DEC_ARMTHUMB) \
  1.3745 ++			|| defined(XZ_DEC_SPARC)
  1.3746 ++#		define XZ_DEC_BCJ
  1.3747 ++#	endif
  1.3748 ++#endif
  1.3749 ++
  1.3750 ++/*
  1.3751 ++ * Allocate memory for LZMA2 decoder. xz_dec_lzma2_reset() must be used
  1.3752 ++ * before calling xz_dec_lzma2_run().
  1.3753 ++ */
  1.3754 ++XZ_EXTERN struct xz_dec_lzma2 *xz_dec_lzma2_create(enum xz_mode mode,
  1.3755 ++						   uint32_t dict_max);
  1.3756 ++
  1.3757 ++/*
  1.3758 ++ * Decode the LZMA2 properties (one byte) and reset the decoder. Return
  1.3759 ++ * XZ_OK on success, XZ_MEMLIMIT_ERROR if the preallocated dictionary is not
  1.3760 ++ * big enough, and XZ_OPTIONS_ERROR if props indicates something that this
  1.3761 ++ * decoder doesn't support.
  1.3762 ++ */
  1.3763 ++XZ_EXTERN enum xz_ret xz_dec_lzma2_reset(struct xz_dec_lzma2 *s,
  1.3764 ++					 uint8_t props);
  1.3765 ++
  1.3766 ++/* Decode raw LZMA2 stream from b->in to b->out. */
  1.3767 ++XZ_EXTERN enum xz_ret xz_dec_lzma2_run(struct xz_dec_lzma2 *s,
  1.3768 ++				       struct xz_buf *b);
  1.3769 ++
  1.3770 ++/* Free the memory allocated for the LZMA2 decoder. */
  1.3771 ++XZ_EXTERN void xz_dec_lzma2_end(struct xz_dec_lzma2 *s);
  1.3772 ++
  1.3773 ++#ifdef XZ_DEC_BCJ
  1.3774 ++/*
  1.3775 ++ * Allocate memory for BCJ decoders. xz_dec_bcj_reset() must be used before
  1.3776 ++ * calling xz_dec_bcj_run().
  1.3777 ++ */
  1.3778 ++XZ_EXTERN struct xz_dec_bcj *xz_dec_bcj_create(bool single_call);
  1.3779 ++
  1.3780 ++/*
  1.3781 ++ * Decode the Filter ID of a BCJ filter. This implementation doesn't
  1.3782 ++ * support custom start offsets, so no decoding of Filter Properties
  1.3783 ++ * is needed. Returns XZ_OK if the given Filter ID is supported.
  1.3784 ++ * Otherwise XZ_OPTIONS_ERROR is returned.
  1.3785 ++ */
  1.3786 ++XZ_EXTERN enum xz_ret xz_dec_bcj_reset(struct xz_dec_bcj *s, uint8_t id);
  1.3787 ++
  1.3788 ++/*
  1.3789 ++ * Decode raw BCJ + LZMA2 stream. This must be used only if there actually is
  1.3790 ++ * a BCJ filter in the chain. If the chain has only LZMA2, xz_dec_lzma2_run()
  1.3791 ++ * must be called directly.
  1.3792 ++ */
  1.3793 ++XZ_EXTERN enum xz_ret xz_dec_bcj_run(struct xz_dec_bcj *s,
  1.3794 ++				     struct xz_dec_lzma2 *lzma2,
  1.3795 ++				     struct xz_buf *b);
  1.3796 ++
  1.3797 ++/* Free the memory allocated for the BCJ filters. */
  1.3798 ++#define xz_dec_bcj_end(s) kfree(s)
  1.3799 ++#endif
  1.3800 ++
  1.3801 ++#endif
  1.3802 +diff --git a/lib/xz/xz_stream.h b/lib/xz/xz_stream.h
  1.3803 +new file mode 100644
  1.3804 +index 0000000..66cb5a7
  1.3805 +--- /dev/null
  1.3806 ++++ b/lib/xz/xz_stream.h
  1.3807 +@@ -0,0 +1,62 @@
  1.3808 ++/*
  1.3809 ++ * Definitions for handling the .xz file format
  1.3810 ++ *
  1.3811 ++ * Author: Lasse Collin <lasse.collin@tukaani.org>
  1.3812 ++ *
  1.3813 ++ * This file has been put into the public domain.
  1.3814 ++ * You can do whatever you want with this file.
  1.3815 ++ */
  1.3816 ++
  1.3817 ++#ifndef XZ_STREAM_H
  1.3818 ++#define XZ_STREAM_H
  1.3819 ++
  1.3820 ++#if defined(__KERNEL__) && !XZ_INTERNAL_CRC32
  1.3821 ++#	include <linux/crc32.h>
  1.3822 ++#	undef crc32
  1.3823 ++#	define xz_crc32(buf, size, crc) \
  1.3824 ++		(~crc32_le(~(uint32_t)(crc), buf, size))
  1.3825 ++#endif
  1.3826 ++
  1.3827 ++/*
  1.3828 ++ * See the .xz file format specification at
  1.3829 ++ * http://tukaani.org/xz/xz-file-format.txt
  1.3830 ++ * to understand the container format.
  1.3831 ++ */
  1.3832 ++
  1.3833 ++#define STREAM_HEADER_SIZE 12
  1.3834 ++
  1.3835 ++#define HEADER_MAGIC "\3757zXZ"
  1.3836 ++#define HEADER_MAGIC_SIZE 6
  1.3837 ++
  1.3838 ++#define FOOTER_MAGIC "YZ"
  1.3839 ++#define FOOTER_MAGIC_SIZE 2
  1.3840 ++
  1.3841 ++/*
  1.3842 ++ * Variable-length integer can hold a 63-bit unsigned integer or a special
  1.3843 ++ * value indicating that the value is unknown.
  1.3844 ++ *
  1.3845 ++ * Experimental: vli_type can be defined to uint32_t to save a few bytes
  1.3846 ++ * in code size (no effect on speed). Doing so limits the uncompressed and
  1.3847 ++ * compressed size of the file to less than 256 MiB and may also weaken
  1.3848 ++ * error detection slightly.
  1.3849 ++ */
  1.3850 ++typedef uint64_t vli_type;
  1.3851 ++
  1.3852 ++#define VLI_MAX ((vli_type)-1 / 2)
  1.3853 ++#define VLI_UNKNOWN ((vli_type)-1)
  1.3854 ++
  1.3855 ++/* Maximum encoded size of a VLI */
  1.3856 ++#define VLI_BYTES_MAX (sizeof(vli_type) * 8 / 7)
  1.3857 ++
  1.3858 ++/* Integrity Check types */
  1.3859 ++enum xz_check {
  1.3860 ++	XZ_CHECK_NONE = 0,
  1.3861 ++	XZ_CHECK_CRC32 = 1,
  1.3862 ++	XZ_CHECK_CRC64 = 4,
  1.3863 ++	XZ_CHECK_SHA256 = 10
  1.3864 ++};
  1.3865 ++
  1.3866 ++/* Maximum possible Check ID */
  1.3867 ++#define XZ_CHECK_MAX 15
  1.3868 ++
  1.3869 ++#endif
  1.3870 +diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
  1.3871 +index 54fd1b7..b862007 100644
  1.3872 +--- a/scripts/Makefile.lib
  1.3873 ++++ b/scripts/Makefile.lib
  1.3874 +@@ -246,6 +246,34 @@ cmd_lzo = (cat $(filter-out FORCE,$^) | \
  1.3875 + 	lzop -9 && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
  1.3876 + 	(rm -f $@ ; false)
  1.3877 + 
  1.3878 ++# XZ
  1.3879 ++# ---------------------------------------------------------------------------
  1.3880 ++# Use xzkern to compress the kernel image and xzmisc to compress other things.
  1.3881 ++#
  1.3882 ++# xzkern uses a big LZMA2 dictionary since it doesn't increase memory usage
  1.3883 ++# of the kernel decompressor. A BCJ filter is used if it is available for
  1.3884 ++# the target architecture. xzkern also appends uncompressed size of the data
  1.3885 ++# using size_append. The .xz format has the size information available at
  1.3886 ++# the end of the file too, but it's in more complex format and it's good to
  1.3887 ++# avoid changing the part of the boot code that reads the uncompressed size.
  1.3888 ++# Note that the bytes added by size_append will make the xz tool think that
  1.3889 ++# the file is corrupt. This is expected.
  1.3890 ++#
  1.3891 ++# xzmisc doesn't use size_append, so it can be used to create normal .xz
  1.3892 ++# files. xzmisc uses smaller LZMA2 dictionary than xzkern, because a very
  1.3893 ++# big dictionary would increase the memory usage too much in the multi-call
  1.3894 ++# decompression mode. A BCJ filter isn't used either.
  1.3895 ++quiet_cmd_xzkern = XZKERN  $@
  1.3896 ++cmd_xzkern = (cat $(filter-out FORCE,$^) | \
  1.3897 ++	sh $(srctree)/scripts/xz_wrap.sh && \
  1.3898 ++	$(call size_append, $(filter-out FORCE,$^))) > $@ || \
  1.3899 ++	(rm -f $@ ; false)
  1.3900 ++
  1.3901 ++quiet_cmd_xzmisc = XZMISC  $@
  1.3902 ++cmd_xzmisc = (cat $(filter-out FORCE,$^) | \
  1.3903 ++	xz --check=crc32 --lzma2=dict=1MiB) > $@ || \
  1.3904 ++	(rm -f $@ ; false)
  1.3905 ++
  1.3906 + # misc stuff
  1.3907 + # ---------------------------------------------------------------------------
  1.3908 + quote:="
  1.3909 +diff --git a/scripts/xz_wrap.sh b/scripts/xz_wrap.sh
  1.3910 +new file mode 100644
  1.3911 +index 0000000..17a5798
  1.3912 +--- /dev/null
  1.3913 ++++ b/scripts/xz_wrap.sh
  1.3914 +@@ -0,0 +1,23 @@
  1.3915 ++#!/bin/sh
  1.3916 ++#
  1.3917 ++# This is a wrapper for xz to compress the kernel image using appropriate
  1.3918 ++# compression options depending on the architecture.
  1.3919 ++#
  1.3920 ++# Author: Lasse Collin <lasse.collin@tukaani.org>
  1.3921 ++#
  1.3922 ++# This file has been put into the public domain.
  1.3923 ++# You can do whatever you want with this file.
  1.3924 ++#
  1.3925 ++
  1.3926 ++BCJ=
  1.3927 ++LZMA2OPTS=
  1.3928 ++
  1.3929 ++case $ARCH in
  1.3930 ++	x86|x86_64)     BCJ=--x86 ;;
  1.3931 ++	powerpc)        BCJ=--powerpc ;;
  1.3932 ++	ia64)           BCJ=--ia64; LZMA2OPTS=pb=4 ;;
  1.3933 ++	arm)            BCJ=--arm ;;
  1.3934 ++	sparc)          BCJ=--sparc ;;
  1.3935 ++esac
  1.3936 ++
  1.3937 ++exec xz --check=crc32 $BCJ --lzma2=$LZMA2OPTS,dict=32MiB
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/linux-libre/stuff/linux-libre-2.6.37-libre-slitaz.config	Tue Mar 15 03:24:23 2011 +0100
     2.3 @@ -0,0 +1,3711 @@
     2.4 +#
     2.5 +# Automatically generated make config: don't edit
     2.6 +# Linux/i386 2.6.37 Kernel Configuration
     2.7 +# Mon Feb 14 03:03:39 2011
     2.8 +#
     2.9 +# CONFIG_64BIT is not set
    2.10 +CONFIG_X86_32=y
    2.11 +# CONFIG_X86_64 is not set
    2.12 +CONFIG_X86=y
    2.13 +CONFIG_INSTRUCTION_DECODER=y
    2.14 +CONFIG_OUTPUT_FORMAT="elf32-i386"
    2.15 +CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"
    2.16 +CONFIG_GENERIC_CMOS_UPDATE=y
    2.17 +CONFIG_CLOCKSOURCE_WATCHDOG=y
    2.18 +CONFIG_GENERIC_CLOCKEVENTS=y
    2.19 +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
    2.20 +CONFIG_LOCKDEP_SUPPORT=y
    2.21 +CONFIG_STACKTRACE_SUPPORT=y
    2.22 +CONFIG_HAVE_LATENCYTOP_SUPPORT=y
    2.23 +CONFIG_MMU=y
    2.24 +CONFIG_ZONE_DMA=y
    2.25 +# CONFIG_NEED_DMA_MAP_STATE is not set
    2.26 +CONFIG_NEED_SG_DMA_LENGTH=y
    2.27 +CONFIG_GENERIC_ISA_DMA=y
    2.28 +CONFIG_GENERIC_IOMAP=y
    2.29 +CONFIG_GENERIC_BUG=y
    2.30 +CONFIG_GENERIC_HWEIGHT=y
    2.31 +CONFIG_GENERIC_GPIO=y
    2.32 +CONFIG_ARCH_MAY_HAVE_PC_FDC=y
    2.33 +# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
    2.34 +CONFIG_RWSEM_XCHGADD_ALGORITHM=y
    2.35 +CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
    2.36 +CONFIG_GENERIC_CALIBRATE_DELAY=y
    2.37 +# CONFIG_GENERIC_TIME_VSYSCALL is not set
    2.38 +CONFIG_ARCH_HAS_CPU_RELAX=y
    2.39 +CONFIG_ARCH_HAS_DEFAULT_IDLE=y
    2.40 +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
    2.41 +CONFIG_HAVE_SETUP_PER_CPU_AREA=y
    2.42 +CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
    2.43 +CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
    2.44 +# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set
    2.45 +CONFIG_ARCH_HIBERNATION_POSSIBLE=y
    2.46 +CONFIG_ARCH_SUSPEND_POSSIBLE=y
    2.47 +# CONFIG_ZONE_DMA32 is not set
    2.48 +CONFIG_ARCH_POPULATES_NODE_MAP=y
    2.49 +# CONFIG_AUDIT_ARCH is not set
    2.50 +CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
    2.51 +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
    2.52 +CONFIG_USE_GENERIC_SMP_HELPERS=y
    2.53 +CONFIG_X86_32_SMP=y
    2.54 +CONFIG_X86_HT=y
    2.55 +CONFIG_X86_TRAMPOLINE=y
    2.56 +CONFIG_X86_32_LAZY_GS=y
    2.57 +CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-ecx -fcall-saved-edx"
    2.58 +CONFIG_KTIME_SCALAR=y
    2.59 +CONFIG_ARCH_CPU_PROBE_RELEASE=y
    2.60 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
    2.61 +CONFIG_CONSTRUCTORS=y
    2.62 +CONFIG_HAVE_IRQ_WORK=y
    2.63 +CONFIG_IRQ_WORK=y
    2.64 +
    2.65 +#
    2.66 +# General setup
    2.67 +#
    2.68 +CONFIG_EXPERIMENTAL=y
    2.69 +CONFIG_LOCK_KERNEL=y
    2.70 +CONFIG_INIT_ENV_ARG_LIMIT=32
    2.71 +CONFIG_CROSS_COMPILE=""
    2.72 +CONFIG_LOCALVERSION="-slitaz"
    2.73 +# CONFIG_LOCALVERSION_AUTO is not set
    2.74 +CONFIG_HAVE_KERNEL_GZIP=y
    2.75 +CONFIG_HAVE_KERNEL_BZIP2=y
    2.76 +CONFIG_HAVE_KERNEL_LZMA=y
    2.77 +CONFIG_HAVE_KERNEL_XZ=y
    2.78 +CONFIG_HAVE_KERNEL_LZO=y
    2.79 +# CONFIG_KERNEL_GZIP is not set
    2.80 +# CONFIG_KERNEL_BZIP2 is not set
    2.81 +CONFIG_KERNEL_LZMA=y
    2.82 +# CONFIG_KERNEL_XZ is not set
    2.83 +# CONFIG_KERNEL_LZO is not set
    2.84 +CONFIG_SWAP=y
    2.85 +CONFIG_SYSVIPC=y
    2.86 +CONFIG_SYSVIPC_SYSCTL=y
    2.87 +CONFIG_POSIX_MQUEUE=y
    2.88 +CONFIG_POSIX_MQUEUE_SYSCTL=y
    2.89 +CONFIG_BSD_PROCESS_ACCT=y
    2.90 +# CONFIG_BSD_PROCESS_ACCT_V3 is not set
    2.91 +# CONFIG_TASKSTATS is not set
    2.92 +# CONFIG_AUDIT is not set
    2.93 +CONFIG_HAVE_GENERIC_HARDIRQS=y
    2.94 +
    2.95 +#
    2.96 +# IRQ subsystem
    2.97 +#
    2.98 +CONFIG_GENERIC_HARDIRQS=y
    2.99 +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
   2.100 +# CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED is not set
   2.101 +CONFIG_HAVE_SPARSE_IRQ=y
   2.102 +CONFIG_GENERIC_IRQ_PROBE=y
   2.103 +CONFIG_GENERIC_PENDING_IRQ=y
   2.104 +# CONFIG_AUTO_IRQ_AFFINITY is not set
   2.105 +# CONFIG_IRQ_PER_CPU is not set
   2.106 +# CONFIG_HARDIRQS_SW_RESEND is not set
   2.107 +# CONFIG_SPARSE_IRQ is not set
   2.108 +
   2.109 +#
   2.110 +# RCU Subsystem
   2.111 +#
   2.112 +CONFIG_TREE_RCU=y
   2.113 +# CONFIG_PREEMPT_RCU is not set
   2.114 +# CONFIG_RCU_TRACE is not set
   2.115 +CONFIG_RCU_FANOUT=32
   2.116 +# CONFIG_RCU_FANOUT_EXACT is not set
   2.117 +# CONFIG_RCU_FAST_NO_HZ is not set
   2.118 +# CONFIG_TREE_RCU_TRACE is not set
   2.119 +CONFIG_IKCONFIG=y
   2.120 +CONFIG_IKCONFIG_PROC=y
   2.121 +CONFIG_LOG_BUF_SHIFT=14
   2.122 +CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
   2.123 +# CONFIG_CGROUPS is not set
   2.124 +CONFIG_NAMESPACES=y
   2.125 +# CONFIG_UTS_NS is not set
   2.126 +# CONFIG_IPC_NS is not set
   2.127 +# CONFIG_USER_NS is not set
   2.128 +# CONFIG_PID_NS is not set
   2.129 +# CONFIG_NET_NS is not set
   2.130 +# CONFIG_SYSFS_DEPRECATED is not set
   2.131 +# CONFIG_RELAY is not set
   2.132 +CONFIG_BLK_DEV_INITRD=y
   2.133 +CONFIG_INITRAMFS_SOURCE=""
   2.134 +CONFIG_RD_GZIP=y
   2.135 +CONFIG_RD_BZIP2=y
   2.136 +CONFIG_RD_LZMA=y
   2.137 +CONFIG_RD_XZ=y
   2.138 +CONFIG_RD_LZO=y
   2.139 +CONFIG_CC_OPTIMIZE_FOR_SIZE=y
   2.140 +CONFIG_SYSCTL=y
   2.141 +CONFIG_ANON_INODES=y
   2.142 +# CONFIG_EMBEDDED is not set
   2.143 +CONFIG_UID16=y
   2.144 +CONFIG_SYSCTL_SYSCALL=y
   2.145 +CONFIG_KALLSYMS=y
   2.146 +# CONFIG_KALLSYMS_EXTRA_PASS is not set
   2.147 +CONFIG_HOTPLUG=y
   2.148 +CONFIG_PRINTK=y
   2.149 +CONFIG_BUG=y
   2.150 +CONFIG_ELF_CORE=y
   2.151 +CONFIG_PCSPKR_PLATFORM=y
   2.152 +CONFIG_BASE_FULL=y
   2.153 +CONFIG_FUTEX=y
   2.154 +CONFIG_EPOLL=y
   2.155 +CONFIG_SIGNALFD=y
   2.156 +CONFIG_TIMERFD=y
   2.157 +CONFIG_EVENTFD=y
   2.158 +CONFIG_SHMEM=y
   2.159 +CONFIG_AIO=y
   2.160 +CONFIG_HAVE_PERF_EVENTS=y
   2.161 +
   2.162 +#
   2.163 +# Kernel Performance Events And Counters
   2.164 +#
   2.165 +CONFIG_PERF_EVENTS=y
   2.166 +# CONFIG_PERF_COUNTERS is not set
   2.167 +CONFIG_VM_EVENT_COUNTERS=y
   2.168 +CONFIG_PCI_QUIRKS=y
   2.169 +CONFIG_COMPAT_BRK=y
   2.170 +CONFIG_SLAB=y
   2.171 +# CONFIG_SLUB is not set
   2.172 +# CONFIG_PROFILING is not set
   2.173 +CONFIG_HAVE_OPROFILE=y
   2.174 +# CONFIG_KPROBES is not set
   2.175 +# CONFIG_JUMP_LABEL is not set
   2.176 +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
   2.177 +CONFIG_USER_RETURN_NOTIFIER=y
   2.178 +CONFIG_HAVE_IOREMAP_PROT=y
   2.179 +CONFIG_HAVE_KPROBES=y
   2.180 +CONFIG_HAVE_KRETPROBES=y
   2.181 +CONFIG_HAVE_OPTPROBES=y
   2.182 +CONFIG_HAVE_ARCH_TRACEHOOK=y
   2.183 +CONFIG_HAVE_DMA_ATTRS=y
   2.184 +CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
   2.185 +CONFIG_HAVE_DMA_API_DEBUG=y
   2.186 +CONFIG_HAVE_HW_BREAKPOINT=y
   2.187 +CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y
   2.188 +CONFIG_HAVE_USER_RETURN_NOTIFIER=y
   2.189 +CONFIG_HAVE_PERF_EVENTS_NMI=y
   2.190 +CONFIG_HAVE_ARCH_JUMP_LABEL=y
   2.191 +
   2.192 +#
   2.193 +# GCOV-based kernel profiling
   2.194 +#
   2.195 +CONFIG_HAVE_GENERIC_DMA_COHERENT=y
   2.196 +CONFIG_SLABINFO=y
   2.197 +CONFIG_RT_MUTEXES=y
   2.198 +CONFIG_BASE_SMALL=0
   2.199 +CONFIG_MODULES=y
   2.200 +# CONFIG_MODULE_FORCE_LOAD is not set
   2.201 +CONFIG_MODULE_UNLOAD=y
   2.202 +# CONFIG_MODULE_FORCE_UNLOAD is not set
   2.203 +# CONFIG_MODVERSIONS is not set
   2.204 +# CONFIG_MODULE_SRCVERSION_ALL is not set
   2.205 +CONFIG_STOP_MACHINE=y
   2.206 +CONFIG_BLOCK=y
   2.207 +CONFIG_LBDAF=y
   2.208 +# CONFIG_BLK_DEV_BSG is not set
   2.209 +# CONFIG_BLK_DEV_INTEGRITY is not set
   2.210 +
   2.211 +#
   2.212 +# IO Schedulers
   2.213 +#
   2.214 +CONFIG_IOSCHED_NOOP=y
   2.215 +CONFIG_IOSCHED_DEADLINE=y
   2.216 +# CONFIG_IOSCHED_CFQ is not set
   2.217 +CONFIG_DEFAULT_DEADLINE=y
   2.218 +# CONFIG_DEFAULT_NOOP is not set
   2.219 +CONFIG_DEFAULT_IOSCHED="deadline"
   2.220 +CONFIG_PREEMPT_NOTIFIERS=y
   2.221 +# CONFIG_INLINE_SPIN_TRYLOCK is not set
   2.222 +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
   2.223 +# CONFIG_INLINE_SPIN_LOCK is not set
   2.224 +# CONFIG_INLINE_SPIN_LOCK_BH is not set
   2.225 +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
   2.226 +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
   2.227 +CONFIG_INLINE_SPIN_UNLOCK=y
   2.228 +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
   2.229 +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
   2.230 +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
   2.231 +# CONFIG_INLINE_READ_TRYLOCK is not set
   2.232 +# CONFIG_INLINE_READ_LOCK is not set
   2.233 +# CONFIG_INLINE_READ_LOCK_BH is not set
   2.234 +# CONFIG_INLINE_READ_LOCK_IRQ is not set
   2.235 +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
   2.236 +CONFIG_INLINE_READ_UNLOCK=y
   2.237 +# CONFIG_INLINE_READ_UNLOCK_BH is not set
   2.238 +CONFIG_INLINE_READ_UNLOCK_IRQ=y
   2.239 +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
   2.240 +# CONFIG_INLINE_WRITE_TRYLOCK is not set
   2.241 +# CONFIG_INLINE_WRITE_LOCK is not set
   2.242 +# CONFIG_INLINE_WRITE_LOCK_BH is not set
   2.243 +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
   2.244 +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
   2.245 +CONFIG_INLINE_WRITE_UNLOCK=y
   2.246 +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
   2.247 +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
   2.248 +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
   2.249 +CONFIG_MUTEX_SPIN_ON_OWNER=y
   2.250 +CONFIG_FREEZER=y
   2.251 +
   2.252 +#
   2.253 +# Processor type and features
   2.254 +#
   2.255 +CONFIG_TICK_ONESHOT=y
   2.256 +CONFIG_NO_HZ=y
   2.257 +# CONFIG_HIGH_RES_TIMERS is not set
   2.258 +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
   2.259 +CONFIG_SMP=y
   2.260 +CONFIG_X86_MPPARSE=y
   2.261 +# CONFIG_X86_BIGSMP is not set
   2.262 +CONFIG_X86_EXTENDED_PLATFORM=y
   2.263 +# CONFIG_X86_ELAN is not set
   2.264 +# CONFIG_X86_MRST is not set
   2.265 +# CONFIG_X86_RDC321X is not set
   2.266 +# CONFIG_X86_32_NON_STANDARD is not set
   2.267 +CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y
   2.268 +CONFIG_SCHED_OMIT_FRAME_POINTER=y
   2.269 +CONFIG_PARAVIRT_GUEST=y
   2.270 +# CONFIG_XEN_PRIVILEGED_GUEST is not set
   2.271 +CONFIG_KVM_CLOCK=y
   2.272 +CONFIG_KVM_GUEST=y
   2.273 +CONFIG_LGUEST_GUEST=y
   2.274 +CONFIG_PARAVIRT=y
   2.275 +# CONFIG_PARAVIRT_SPINLOCKS is not set
   2.276 +CONFIG_PARAVIRT_CLOCK=y
   2.277 +CONFIG_NO_BOOTMEM=y
   2.278 +# CONFIG_MEMTEST is not set
   2.279 +# CONFIG_M386 is not set
   2.280 +CONFIG_M486=y
   2.281 +# CONFIG_M586 is not set
   2.282 +# CONFIG_M586TSC is not set
   2.283 +# CONFIG_M586MMX is not set
   2.284 +# CONFIG_M686 is not set
   2.285 +# CONFIG_MPENTIUMII is not set
   2.286 +# CONFIG_MPENTIUMIII is not set
   2.287 +# CONFIG_MPENTIUMM is not set
   2.288 +# CONFIG_MPENTIUM4 is not set
   2.289 +# CONFIG_MK6 is not set
   2.290 +# CONFIG_MK7 is not set
   2.291 +# CONFIG_MK8 is not set
   2.292 +# CONFIG_MCRUSOE is not set
   2.293 +# CONFIG_MEFFICEON is not set
   2.294 +# CONFIG_MWINCHIPC6 is not set
   2.295 +# CONFIG_MWINCHIP3D is not set
   2.296 +# CONFIG_MGEODEGX1 is not set
   2.297 +# CONFIG_MGEODE_LX is not set
   2.298 +# CONFIG_MCYRIXIII is not set
   2.299 +# CONFIG_MVIAC3_2 is not set
   2.300 +# CONFIG_MVIAC7 is not set
   2.301 +# CONFIG_MCORE2 is not set
   2.302 +# CONFIG_MATOM is not set
   2.303 +CONFIG_X86_GENERIC=y
   2.304 +CONFIG_X86_CPU=y
   2.305 +CONFIG_X86_INTERNODE_CACHE_SHIFT=6
   2.306 +CONFIG_X86_CMPXCHG=y
   2.307 +CONFIG_X86_L1_CACHE_SHIFT=6
   2.308 +CONFIG_X86_XADD=y
   2.309 +CONFIG_X86_PPRO_FENCE=y
   2.310 +CONFIG_X86_F00F_BUG=y
   2.311 +CONFIG_X86_INVD_BUG=y
   2.312 +CONFIG_X86_WP_WORKS_OK=y
   2.313 +CONFIG_X86_INVLPG=y
   2.314 +CONFIG_X86_BSWAP=y
   2.315 +CONFIG_X86_POPAD_OK=y
   2.316 +CONFIG_X86_ALIGNMENT_16=y
   2.317 +CONFIG_X86_INTEL_USERCOPY=y
   2.318 +CONFIG_X86_MINIMUM_CPU_FAMILY=4
   2.319 +CONFIG_CPU_SUP_INTEL=y
   2.320 +CONFIG_CPU_SUP_CYRIX_32=y
   2.321 +CONFIG_CPU_SUP_AMD=y
   2.322 +CONFIG_CPU_SUP_CENTAUR=y
   2.323 +CONFIG_CPU_SUP_TRANSMETA_32=y
   2.324 +CONFIG_CPU_SUP_UMC_32=y
   2.325 +# CONFIG_HPET_TIMER is not set
   2.326 +CONFIG_DMI=y
   2.327 +# CONFIG_IOMMU_HELPER is not set
   2.328 +# CONFIG_IOMMU_API is not set
   2.329 +CONFIG_NR_CPUS=8
   2.330 +# CONFIG_SCHED_SMT is not set
   2.331 +CONFIG_SCHED_MC=y
   2.332 +# CONFIG_IRQ_TIME_ACCOUNTING is not set
   2.333 +CONFIG_PREEMPT_NONE=y
   2.334 +# CONFIG_PREEMPT_VOLUNTARY is not set
   2.335 +# CONFIG_PREEMPT is not set
   2.336 +CONFIG_X86_LOCAL_APIC=y
   2.337 +CONFIG_X86_IO_APIC=y
   2.338 +# CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set
   2.339 +CONFIG_X86_MCE=y
   2.340 +CONFIG_X86_MCE_INTEL=y
   2.341 +CONFIG_X86_MCE_AMD=y
   2.342 +# CONFIG_X86_ANCIENT_MCE is not set
   2.343 +CONFIG_X86_MCE_THRESHOLD=y
   2.344 +# CONFIG_X86_MCE_INJECT is not set
   2.345 +CONFIG_X86_THERMAL_VECTOR=y
   2.346 +CONFIG_VM86=y
   2.347 +CONFIG_TOSHIBA=m
   2.348 +CONFIG_I8K=m
   2.349 +CONFIG_X86_REBOOTFIXUPS=y
   2.350 +# CONFIG_MICROCODE is not set
   2.351 +# CONFIG_X86_MSR is not set
   2.352 +# CONFIG_X86_CPUID is not set
   2.353 +# CONFIG_NOHIGHMEM is not set
   2.354 +CONFIG_HIGHMEM4G=y
   2.355 +CONFIG_PAGE_OFFSET=0xC0000000
   2.356 +CONFIG_HIGHMEM=y
   2.357 +# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
   2.358 +# CONFIG_ARCH_DMA_ADDR_T_64BIT is not set
   2.359 +CONFIG_ARCH_FLATMEM_ENABLE=y
   2.360 +CONFIG_ARCH_SPARSEMEM_ENABLE=y
   2.361 +CONFIG_ARCH_SELECT_MEMORY_MODEL=y
   2.362 +CONFIG_ILLEGAL_POINTER_VALUE=0
   2.363 +CONFIG_SELECT_MEMORY_MODEL=y
   2.364 +CONFIG_FLATMEM_MANUAL=y
   2.365 +# CONFIG_SPARSEMEM_MANUAL is not set
   2.366 +CONFIG_FLATMEM=y
   2.367 +CONFIG_FLAT_NODE_MEM_MAP=y
   2.368 +CONFIG_SPARSEMEM_STATIC=y
   2.369 +CONFIG_HAVE_MEMBLOCK=y
   2.370 +CONFIG_PAGEFLAGS_EXTENDED=y
   2.371 +CONFIG_SPLIT_PTLOCK_CPUS=4
   2.372 +# CONFIG_PHYS_ADDR_T_64BIT is not set
   2.373 +CONFIG_ZONE_DMA_FLAG=1
   2.374 +CONFIG_BOUNCE=y
   2.375 +CONFIG_VIRT_TO_BUS=y
   2.376 +CONFIG_MMU_NOTIFIER=y
   2.377 +# CONFIG_KSM is not set
   2.378 +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
   2.379 +CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y
   2.380 +# CONFIG_MEMORY_FAILURE is not set
   2.381 +# CONFIG_HIGHPTE is not set
   2.382 +# CONFIG_X86_CHECK_BIOS_CORRUPTION is not set
   2.383 +CONFIG_X86_RESERVE_LOW=64
   2.384 +CONFIG_MATH_EMULATION=y
   2.385 +CONFIG_MTRR=y
   2.386 +CONFIG_MTRR_SANITIZER=y
   2.387 +CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0
   2.388 +CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1
   2.389 +CONFIG_X86_PAT=y
   2.390 +CONFIG_ARCH_USES_PG_UNCACHED=y
   2.391 +# CONFIG_EFI is not set
   2.392 +# CONFIG_SECCOMP is not set
   2.393 +# CONFIG_CC_STACKPROTECTOR is not set
   2.394 +# CONFIG_HZ_100 is not set
   2.395 +# CONFIG_HZ_250 is not set
   2.396 +# CONFIG_HZ_300 is not set
   2.397 +CONFIG_HZ_1000=y
   2.398 +CONFIG_HZ=1000
   2.399 +# CONFIG_SCHED_HRTICK is not set
   2.400 +CONFIG_KEXEC=y
   2.401 +# CONFIG_CRASH_DUMP is not set
   2.402 +# CONFIG_KEXEC_JUMP is not set
   2.403 +CONFIG_PHYSICAL_START=0x1000000
   2.404 +# CONFIG_RELOCATABLE is not set
   2.405 +CONFIG_PHYSICAL_ALIGN=0x100000
   2.406 +CONFIG_HOTPLUG_CPU=y
   2.407 +CONFIG_COMPAT_VDSO=y
   2.408 +# CONFIG_CMDLINE_BOOL is not set
   2.409 +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
   2.410 +
   2.411 +#
   2.412 +# Power management and ACPI options
   2.413 +#
   2.414 +CONFIG_PM=y
   2.415 +# CONFIG_PM_DEBUG is not set
   2.416 +CONFIG_PM_SLEEP_SMP=y
   2.417 +CONFIG_PM_SLEEP=y
   2.418 +CONFIG_SUSPEND_NVS=y
   2.419 +CONFIG_SUSPEND=y
   2.420 +CONFIG_SUSPEND_FREEZER=y
   2.421 +CONFIG_HIBERNATION=y
   2.422 +CONFIG_PM_STD_PARTITION=""
   2.423 +# CONFIG_PM_RUNTIME is not set
   2.424 +CONFIG_PM_OPS=y
   2.425 +CONFIG_ACPI=y
   2.426 +CONFIG_ACPI_SLEEP=y
   2.427 +# CONFIG_ACPI_PROCFS is not set
   2.428 +CONFIG_ACPI_PROCFS_POWER=y
   2.429 +CONFIG_ACPI_POWER_METER=m
   2.430 +# CONFIG_ACPI_EC_DEBUGFS is not set
   2.431 +CONFIG_ACPI_PROC_EVENT=y
   2.432 +CONFIG_ACPI_AC=y
   2.433 +CONFIG_ACPI_BATTERY=y
   2.434 +CONFIG_ACPI_BUTTON=m
   2.435 +CONFIG_ACPI_VIDEO=m
   2.436 +CONFIG_ACPI_FAN=y
   2.437 +CONFIG_ACPI_DOCK=y
   2.438 +CONFIG_ACPI_PROCESSOR=y
   2.439 +CONFIG_ACPI_HOTPLUG_CPU=y
   2.440 +# CONFIG_ACPI_PROCESSOR_AGGREGATOR is not set
   2.441 +CONFIG_ACPI_THERMAL=y
   2.442 +# CONFIG_ACPI_CUSTOM_DSDT is not set
   2.443 +CONFIG_ACPI_BLACKLIST_YEAR=0
   2.444 +# CONFIG_ACPI_DEBUG is not set
   2.445 +# CONFIG_ACPI_PCI_SLOT is not set
   2.446 +CONFIG_X86_PM_TIMER=y
   2.447 +CONFIG_ACPI_CONTAINER=y
   2.448 +# CONFIG_ACPI_SBS is not set
   2.449 +# CONFIG_ACPI_HED is not set
   2.450 +# CONFIG_ACPI_APEI is not set
   2.451 +# CONFIG_SFI is not set
   2.452 +CONFIG_X86_APM_BOOT=y
   2.453 +CONFIG_APM=y
   2.454 +# CONFIG_APM_IGNORE_USER_SUSPEND is not set
   2.455 +CONFIG_APM_DO_ENABLE=y
   2.456 +# CONFIG_APM_CPU_IDLE is not set
   2.457 +# CONFIG_APM_DISPLAY_BLANK is not set
   2.458 +# CONFIG_APM_ALLOW_INTS is not set
   2.459 +
   2.460 +#
   2.461 +# CPU Frequency scaling
   2.462 +#
   2.463 +CONFIG_CPU_FREQ=y
   2.464 +CONFIG_CPU_FREQ_TABLE=y
   2.465 +# CONFIG_CPU_FREQ_DEBUG is not set
   2.466 +CONFIG_CPU_FREQ_STAT=y
   2.467 +# CONFIG_CPU_FREQ_STAT_DETAILS is not set
   2.468 +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
   2.469 +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
   2.470 +# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
   2.471 +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
   2.472 +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
   2.473 +CONFIG_CPU_FREQ_GOV_POWERSAVE=m
   2.474 +CONFIG_CPU_FREQ_GOV_USERSPACE=y
   2.475 +CONFIG_CPU_FREQ_GOV_ONDEMAND=y
   2.476 +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
   2.477 +
   2.478 +#
   2.479 +# CPUFreq processor drivers
   2.480 +#
   2.481 +CONFIG_X86_PCC_CPUFREQ=m
   2.482 +CONFIG_X86_ACPI_CPUFREQ=m
   2.483 +CONFIG_X86_POWERNOW_K6=m
   2.484 +CONFIG_X86_POWERNOW_K7=m
   2.485 +CONFIG_X86_POWERNOW_K7_ACPI=y
   2.486 +CONFIG_X86_POWERNOW_K8=m
   2.487 +CONFIG_X86_GX_SUSPMOD=m
   2.488 +# CONFIG_X86_SPEEDSTEP_CENTRINO is not set
   2.489 +CONFIG_X86_SPEEDSTEP_ICH=m
   2.490 +CONFIG_X86_SPEEDSTEP_SMI=m
   2.491 +CONFIG_X86_P4_CLOCKMOD=m
   2.492 +CONFIG_X86_CPUFREQ_NFORCE2=m
   2.493 +CONFIG_X86_LONGRUN=m
   2.494 +CONFIG_X86_LONGHAUL=m
   2.495 +CONFIG_X86_E_POWERSAVER=m
   2.496 +
   2.497 +#
   2.498 +# shared options
   2.499 +#
   2.500 +CONFIG_X86_SPEEDSTEP_LIB=m
   2.501 +CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK=y
   2.502 +CONFIG_CPU_IDLE=y
   2.503 +CONFIG_CPU_IDLE_GOV_LADDER=y
   2.504 +CONFIG_CPU_IDLE_GOV_MENU=y
   2.505 +# CONFIG_INTEL_IDLE is not set
   2.506 +
   2.507 +#
   2.508 +# Bus options (PCI etc.)
   2.509 +#
   2.510 +CONFIG_PCI=y
   2.511 +# CONFIG_PCI_GOBIOS is not set
   2.512 +# CONFIG_PCI_GOMMCONFIG is not set
   2.513 +# CONFIG_PCI_GODIRECT is not set
   2.514 +CONFIG_PCI_GOANY=y
   2.515 +CONFIG_PCI_BIOS=y
   2.516 +CONFIG_PCI_DIRECT=y
   2.517 +CONFIG_PCI_MMCONFIG=y
   2.518 +CONFIG_PCI_DOMAINS=y
   2.519 +CONFIG_PCI_CNB20LE_QUIRK=y
   2.520 +CONFIG_PCIEPORTBUS=y
   2.521 +CONFIG_PCIEAER=y
   2.522 +# CONFIG_PCIE_ECRC is not set
   2.523 +# CONFIG_PCIEAER_INJECT is not set
   2.524 +CONFIG_PCIEASPM=y
   2.525 +# CONFIG_PCIEASPM_DEBUG is not set
   2.526 +CONFIG_ARCH_SUPPORTS_MSI=y
   2.527 +# CONFIG_PCI_MSI is not set
   2.528 +# CONFIG_PCI_STUB is not set
   2.529 +CONFIG_HT_IRQ=y
   2.530 +# CONFIG_PCI_IOV is not set
   2.531 +CONFIG_PCI_IOAPIC=y
   2.532 +CONFIG_ISA_DMA_API=y
   2.533 +CONFIG_ISA=y
   2.534 +# CONFIG_EISA is not set
   2.535 +# CONFIG_MCA is not set
   2.536 +# CONFIG_SCx200 is not set
   2.537 +# CONFIG_OLPC is not set
   2.538 +# CONFIG_OLPC_OPENFIRMWARE is not set
   2.539 +CONFIG_AMD_NB=y
   2.540 +CONFIG_PCCARD=m
   2.541 +CONFIG_PCMCIA=m
   2.542 +CONFIG_PCMCIA_LOAD_CIS=y
   2.543 +CONFIG_CARDBUS=y
   2.544 +
   2.545 +#
   2.546 +# PC-card bridges
   2.547 +#
   2.548 +CONFIG_YENTA=m
   2.549 +CONFIG_YENTA_O2=y
   2.550 +CONFIG_YENTA_RICOH=y
   2.551 +CONFIG_YENTA_TI=y
   2.552 +CONFIG_YENTA_ENE_TUNE=y
   2.553 +CONFIG_YENTA_TOSHIBA=y
   2.554 +CONFIG_PD6729=m
   2.555 +CONFIG_I82092=m
   2.556 +CONFIG_I82365=m
   2.557 +# CONFIG_TCIC is not set
   2.558 +CONFIG_PCMCIA_PROBE=y
   2.559 +CONFIG_PCCARD_NONSTATIC=y
   2.560 +# CONFIG_HOTPLUG_PCI is not set
   2.561 +
   2.562 +#
   2.563 +# Executable file formats / Emulations
   2.564 +#
   2.565 +CONFIG_BINFMT_ELF=y
   2.566 +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
   2.567 +CONFIG_HAVE_AOUT=y
   2.568 +# CONFIG_BINFMT_AOUT is not set
   2.569 +CONFIG_BINFMT_MISC=m
   2.570 +CONFIG_HAVE_ATOMIC_IOMAP=y
   2.571 +CONFIG_HAVE_TEXT_POKE_SMP=y
   2.572 +CONFIG_NET=y
   2.573 +
   2.574 +#
   2.575 +# Networking options
   2.576 +#
   2.577 +CONFIG_PACKET=y
   2.578 +CONFIG_UNIX=y
   2.579 +CONFIG_XFRM=y
   2.580 +# CONFIG_XFRM_USER is not set
   2.581 +# CONFIG_XFRM_SUB_POLICY is not set
   2.582 +# CONFIG_XFRM_MIGRATE is not set
   2.583 +# CONFIG_XFRM_STATISTICS is not set
   2.584 +CONFIG_XFRM_IPCOMP=y
   2.585 +CONFIG_NET_KEY=y
   2.586 +# CONFIG_NET_KEY_MIGRATE is not set
   2.587 +CONFIG_INET=y
   2.588 +# CONFIG_IP_MULTICAST is not set
   2.589 +# CONFIG_IP_ADVANCED_ROUTER is not set
   2.590 +CONFIG_IP_FIB_HASH=y
   2.591 +# CONFIG_IP_PNP is not set
   2.592 +# CONFIG_NET_IPIP is not set
   2.593 +# CONFIG_NET_IPGRE_DEMUX is not set
   2.594 +# CONFIG_ARPD is not set
   2.595 +CONFIG_SYN_COOKIES=y
   2.596 +CONFIG_INET_AH=y
   2.597 +CONFIG_INET_ESP=y
   2.598 +CONFIG_INET_IPCOMP=y
   2.599 +CONFIG_INET_XFRM_TUNNEL=y
   2.600 +CONFIG_INET_TUNNEL=y
   2.601 +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
   2.602 +# CONFIG_INET_XFRM_MODE_TUNNEL is not set
   2.603 +# CONFIG_INET_XFRM_MODE_BEET is not set
   2.604 +# CONFIG_INET_LRO is not set
   2.605 +CONFIG_INET_DIAG=y
   2.606 +CONFIG_INET_TCP_DIAG=y
   2.607 +# CONFIG_TCP_CONG_ADVANCED is not set
   2.608 +CONFIG_TCP_CONG_CUBIC=y
   2.609 +CONFIG_DEFAULT_TCP_CONG="cubic"
   2.610 +# CONFIG_TCP_MD5SIG is not set
   2.611 +CONFIG_IPV6=m
   2.612 +# CONFIG_IPV6_PRIVACY is not set
   2.613 +# CONFIG_IPV6_ROUTER_PREF is not set
   2.614 +# CONFIG_IPV6_OPTIMISTIC_DAD is not set
   2.615 +# CONFIG_INET6_AH is not set
   2.616 +# CONFIG_INET6_ESP is not set
   2.617 +# CONFIG_INET6_IPCOMP is not set
   2.618 +# CONFIG_IPV6_MIP6 is not set
   2.619 +# CONFIG_INET6_XFRM_TUNNEL is not set
   2.620 +# CONFIG_INET6_TUNNEL is not set
   2.621 +CONFIG_INET6_XFRM_MODE_TRANSPORT=m
   2.622 +CONFIG_INET6_XFRM_MODE_TUNNEL=m
   2.623 +CONFIG_INET6_XFRM_MODE_BEET=m
   2.624 +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
   2.625 +CONFIG_IPV6_SIT=m
   2.626 +# CONFIG_IPV6_SIT_6RD is not set
   2.627 +CONFIG_IPV6_NDISC_NODETYPE=y
   2.628 +# CONFIG_IPV6_TUNNEL is not set
   2.629 +# CONFIG_IPV6_MULTIPLE_TABLES is not set
   2.630 +# CONFIG_IPV6_MROUTE is not set
   2.631 +# CONFIG_NETWORK_SECMARK is not set
   2.632 +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
   2.633 +CONFIG_NETFILTER=y
   2.634 +# CONFIG_NETFILTER_DEBUG is not set
   2.635 +CONFIG_NETFILTER_ADVANCED=y
   2.636 +CONFIG_BRIDGE_NETFILTER=y
   2.637 +
   2.638 +#
   2.639 +# Core Netfilter Configuration
   2.640 +#
   2.641 +CONFIG_NETFILTER_NETLINK=m
   2.642 +CONFIG_NETFILTER_NETLINK_QUEUE=m
   2.643 +CONFIG_NETFILTER_NETLINK_LOG=m
   2.644 +CONFIG_NF_CONNTRACK=m
   2.645 +CONFIG_NF_CONNTRACK_MARK=y
   2.646 +CONFIG_NF_CONNTRACK_EVENTS=y
   2.647 +CONFIG_NF_CT_PROTO_DCCP=m
   2.648 +CONFIG_NF_CT_PROTO_GRE=m
   2.649 +CONFIG_NF_CT_PROTO_SCTP=m
   2.650 +CONFIG_NF_CT_PROTO_UDPLITE=m
   2.651 +CONFIG_NF_CONNTRACK_AMANDA=m
   2.652 +CONFIG_NF_CONNTRACK_FTP=m
   2.653 +CONFIG_NF_CONNTRACK_H323=m
   2.654 +CONFIG_NF_CONNTRACK_IRC=m
   2.655 +CONFIG_NF_CONNTRACK_NETBIOS_NS=m
   2.656 +CONFIG_NF_CONNTRACK_PPTP=m
   2.657 +CONFIG_NF_CONNTRACK_SANE=m
   2.658 +CONFIG_NF_CONNTRACK_SIP=m
   2.659 +CONFIG_NF_CONNTRACK_TFTP=m
   2.660 +CONFIG_NF_CT_NETLINK=m
   2.661 +# CONFIG_NETFILTER_TPROXY is not set
   2.662 +CONFIG_NETFILTER_XTABLES=y
   2.663 +
   2.664 +#
   2.665 +# Xtables combined modules
   2.666 +#
   2.667 +CONFIG_NETFILTER_XT_MARK=m
   2.668 +CONFIG_NETFILTER_XT_CONNMARK=m
   2.669 +
   2.670 +#
   2.671 +# Xtables targets
   2.672 +#
   2.673 +# CONFIG_NETFILTER_XT_TARGET_CHECKSUM is not set
   2.674 +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
   2.675 +CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
   2.676 +# CONFIG_NETFILTER_XT_TARGET_CT is not set
   2.677 +CONFIG_NETFILTER_XT_TARGET_DSCP=m
   2.678 +CONFIG_NETFILTER_XT_TARGET_HL=m
   2.679 +# CONFIG_NETFILTER_XT_TARGET_IDLETIMER is not set
   2.680 +# CONFIG_NETFILTER_XT_TARGET_LED is not set
   2.681 +CONFIG_NETFILTER_XT_TARGET_MARK=m
   2.682 +CONFIG_NETFILTER_XT_TARGET_NFLOG=m
   2.683 +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
   2.684 +CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
   2.685 +CONFIG_NETFILTER_XT_TARGET_RATEEST=m
   2.686 +# CONFIG_NETFILTER_XT_TARGET_TEE is not set
   2.687 +CONFIG_NETFILTER_XT_TARGET_TRACE=m
   2.688 +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
   2.689 +# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
   2.690 +
   2.691 +#
   2.692 +# Xtables matches
   2.693 +#
   2.694 +CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
   2.695 +CONFIG_NETFILTER_XT_MATCH_COMMENT=m
   2.696 +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
   2.697 +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
   2.698 +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
   2.699 +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
   2.700 +# CONFIG_NETFILTER_XT_MATCH_CPU is not set
   2.701 +CONFIG_NETFILTER_XT_MATCH_DCCP=m
   2.702 +CONFIG_NETFILTER_XT_MATCH_DSCP=m
   2.703 +CONFIG_NETFILTER_XT_MATCH_ESP=m
   2.704 +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
   2.705 +CONFIG_NETFILTER_XT_MATCH_HELPER=m
   2.706 +CONFIG_NETFILTER_XT_MATCH_HL=m
   2.707 +CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
   2.708 +# CONFIG_NETFILTER_XT_MATCH_IPVS is not set
   2.709 +CONFIG_NETFILTER_XT_MATCH_LENGTH=m
   2.710 +CONFIG_NETFILTER_XT_MATCH_LIMIT=m
   2.711 +CONFIG_NETFILTER_XT_MATCH_MAC=m
   2.712 +CONFIG_NETFILTER_XT_MATCH_MARK=m
   2.713 +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
   2.714 +# CONFIG_NETFILTER_XT_MATCH_OSF is not set
   2.715 +CONFIG_NETFILTER_XT_MATCH_OWNER=m
   2.716 +CONFIG_NETFILTER_XT_MATCH_POLICY=m
   2.717 +CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
   2.718 +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
   2.719 +CONFIG_NETFILTER_XT_MATCH_QUOTA=m
   2.720 +CONFIG_NETFILTER_XT_MATCH_RATEEST=m
   2.721 +CONFIG_NETFILTER_XT_MATCH_REALM=m
   2.722 +CONFIG_NETFILTER_XT_MATCH_RECENT=m
   2.723 +CONFIG_NETFILTER_XT_MATCH_SCTP=m
   2.724 +CONFIG_NETFILTER_XT_MATCH_STATE=m
   2.725 +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
   2.726 +CONFIG_NETFILTER_XT_MATCH_STRING=m
   2.727 +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
   2.728 +CONFIG_NETFILTER_XT_MATCH_TIME=m
   2.729 +CONFIG_NETFILTER_XT_MATCH_U32=m
   2.730 +CONFIG_IP_VS=m
   2.731 +CONFIG_IP_VS_IPV6=y
   2.732 +# CONFIG_IP_VS_DEBUG is not set
   2.733 +CONFIG_IP_VS_TAB_BITS=12
   2.734 +
   2.735 +#
   2.736 +# IPVS transport protocol load balancing support
   2.737 +#
   2.738 +CONFIG_IP_VS_PROTO_TCP=y
   2.739 +CONFIG_IP_VS_PROTO_UDP=y
   2.740 +CONFIG_IP_VS_PROTO_AH_ESP=y
   2.741 +CONFIG_IP_VS_PROTO_ESP=y
   2.742 +CONFIG_IP_VS_PROTO_AH=y
   2.743 +CONFIG_IP_VS_PROTO_SCTP=y
   2.744 +
   2.745 +#
   2.746 +# IPVS scheduler
   2.747 +#
   2.748 +CONFIG_IP_VS_RR=m
   2.749 +CONFIG_IP_VS_WRR=m
   2.750 +CONFIG_IP_VS_LC=m
   2.751 +CONFIG_IP_VS_WLC=m
   2.752 +CONFIG_IP_VS_LBLC=m
   2.753 +CONFIG_IP_VS_LBLCR=m
   2.754 +CONFIG_IP_VS_DH=m
   2.755 +CONFIG_IP_VS_SH=m
   2.756 +CONFIG_IP_VS_SED=m
   2.757 +CONFIG_IP_VS_NQ=m
   2.758 +
   2.759 +#
   2.760 +# IPVS application helper
   2.761 +#
   2.762 +CONFIG_IP_VS_FTP=m
   2.763 +CONFIG_IP_VS_NFCT=y
   2.764 +# CONFIG_IP_VS_PE_SIP is not set
   2.765 +
   2.766 +#
   2.767 +# IP: Netfilter Configuration
   2.768 +#
   2.769 +CONFIG_NF_DEFRAG_IPV4=m
   2.770 +CONFIG_NF_CONNTRACK_IPV4=m
   2.771 +CONFIG_NF_CONNTRACK_PROC_COMPAT=y
   2.772 +# CONFIG_IP_NF_QUEUE is not set
   2.773 +CONFIG_IP_NF_IPTABLES=m
   2.774 +CONFIG_IP_NF_MATCH_ADDRTYPE=m
   2.775 +CONFIG_IP_NF_MATCH_AH=m
   2.776 +CONFIG_IP_NF_MATCH_ECN=m
   2.777 +CONFIG_IP_NF_MATCH_TTL=m
   2.778 +CONFIG_IP_NF_FILTER=m
   2.779 +CONFIG_IP_NF_TARGET_REJECT=m
   2.780 +CONFIG_IP_NF_TARGET_LOG=m
   2.781 +CONFIG_IP_NF_TARGET_ULOG=m
   2.782 +CONFIG_NF_NAT=m
   2.783 +CONFIG_NF_NAT_NEEDED=y
   2.784 +CONFIG_IP_NF_TARGET_MASQUERADE=m
   2.785 +CONFIG_IP_NF_TARGET_NETMAP=m
   2.786 +CONFIG_IP_NF_TARGET_REDIRECT=m
   2.787 +CONFIG_NF_NAT_SNMP_BASIC=m
   2.788 +CONFIG_NF_NAT_PROTO_DCCP=m
   2.789 +CONFIG_NF_NAT_PROTO_GRE=m
   2.790 +CONFIG_NF_NAT_PROTO_UDPLITE=m
   2.791 +CONFIG_NF_NAT_PROTO_SCTP=m
   2.792 +CONFIG_NF_NAT_FTP=m
   2.793 +CONFIG_NF_NAT_IRC=m
   2.794 +CONFIG_NF_NAT_TFTP=m
   2.795 +CONFIG_NF_NAT_AMANDA=m
   2.796 +CONFIG_NF_NAT_PPTP=m
   2.797 +CONFIG_NF_NAT_H323=m
   2.798 +CONFIG_NF_NAT_SIP=m
   2.799 +CONFIG_IP_NF_MANGLE=m
   2.800 +CONFIG_IP_NF_TARGET_CLUSTERIP=m
   2.801 +CONFIG_IP_NF_TARGET_ECN=m
   2.802 +CONFIG_IP_NF_TARGET_TTL=m
   2.803 +CONFIG_IP_NF_RAW=m
   2.804 +CONFIG_IP_NF_ARPTABLES=m
   2.805 +CONFIG_IP_NF_ARPFILTER=m
   2.806 +CONFIG_IP_NF_ARP_MANGLE=m
   2.807 +
   2.808 +#
   2.809 +# IPv6: Netfilter Configuration
   2.810 +#
   2.811 +CONFIG_NF_DEFRAG_IPV6=m
   2.812 +CONFIG_NF_CONNTRACK_IPV6=m
   2.813 +# CONFIG_IP6_NF_QUEUE is not set
   2.814 +CONFIG_IP6_NF_IPTABLES=m
   2.815 +CONFIG_IP6_NF_MATCH_AH=m
   2.816 +CONFIG_IP6_NF_MATCH_EUI64=m
   2.817 +CONFIG_IP6_NF_MATCH_FRAG=m
   2.818 +CONFIG_IP6_NF_MATCH_OPTS=m
   2.819 +CONFIG_IP6_NF_MATCH_HL=m
   2.820 +CONFIG_IP6_NF_MATCH_IPV6HEADER=m
   2.821 +CONFIG_IP6_NF_MATCH_MH=m
   2.822 +CONFIG_IP6_NF_MATCH_RT=m
   2.823 +CONFIG_IP6_NF_TARGET_HL=m
   2.824 +CONFIG_IP6_NF_TARGET_LOG=m
   2.825 +CONFIG_IP6_NF_FILTER=m
   2.826 +CONFIG_IP6_NF_TARGET_REJECT=m
   2.827 +CONFIG_IP6_NF_MANGLE=m
   2.828 +CONFIG_IP6_NF_RAW=m
   2.829 +CONFIG_BRIDGE_NF_EBTABLES=m
   2.830 +CONFIG_BRIDGE_EBT_BROUTE=m
   2.831 +CONFIG_BRIDGE_EBT_T_FILTER=m
   2.832 +CONFIG_BRIDGE_EBT_T_NAT=m
   2.833 +CONFIG_BRIDGE_EBT_802_3=m
   2.834 +CONFIG_BRIDGE_EBT_AMONG=m
   2.835 +CONFIG_BRIDGE_EBT_ARP=m
   2.836 +CONFIG_BRIDGE_EBT_IP=m
   2.837 +CONFIG_BRIDGE_EBT_IP6=m
   2.838 +CONFIG_BRIDGE_EBT_LIMIT=m
   2.839 +CONFIG_BRIDGE_EBT_MARK=m
   2.840 +CONFIG_BRIDGE_EBT_PKTTYPE=m
   2.841 +CONFIG_BRIDGE_EBT_STP=m
   2.842 +CONFIG_BRIDGE_EBT_VLAN=m
   2.843 +CONFIG_BRIDGE_EBT_ARPREPLY=m
   2.844 +CONFIG_BRIDGE_EBT_DNAT=m
   2.845 +CONFIG_BRIDGE_EBT_MARK_T=m
   2.846 +CONFIG_BRIDGE_EBT_REDIRECT=m
   2.847 +CONFIG_BRIDGE_EBT_SNAT=m
   2.848 +CONFIG_BRIDGE_EBT_LOG=m
   2.849 +CONFIG_BRIDGE_EBT_ULOG=m
   2.850 +CONFIG_BRIDGE_EBT_NFLOG=m
   2.851 +# CONFIG_IP_DCCP is not set
   2.852 +CONFIG_IP_SCTP=m
   2.853 +# CONFIG_SCTP_DBG_MSG is not set
   2.854 +# CONFIG_SCTP_DBG_OBJCNT is not set
   2.855 +# CONFIG_SCTP_HMAC_NONE is not set
   2.856 +# CONFIG_SCTP_HMAC_SHA1 is not set
   2.857 +CONFIG_SCTP_HMAC_MD5=y
   2.858 +# CONFIG_RDS is not set
   2.859 +# CONFIG_TIPC is not set
   2.860 +CONFIG_ATM=m
   2.861 +CONFIG_ATM_CLIP=m
   2.862 +CONFIG_ATM_CLIP_NO_ICMP=y
   2.863 +CONFIG_ATM_LANE=m
   2.864 +CONFIG_ATM_MPOA=m
   2.865 +CONFIG_ATM_BR2684=m
   2.866 +# CONFIG_ATM_BR2684_IPFILTER is not set
   2.867 +# CONFIG_L2TP is not set
   2.868 +CONFIG_STP=m
   2.869 +CONFIG_BRIDGE=m
   2.870 +# CONFIG_BRIDGE_IGMP_SNOOPING is not set
   2.871 +# CONFIG_NET_DSA is not set
   2.872 +CONFIG_VLAN_8021Q=m
   2.873 +# CONFIG_VLAN_8021Q_GVRP is not set
   2.874 +# CONFIG_DECNET is not set
   2.875 +CONFIG_LLC=m
   2.876 +# CONFIG_LLC2 is not set
   2.877 +# CONFIG_IPX is not set
   2.878 +CONFIG_ATALK=m
   2.879 +CONFIG_DEV_APPLETALK=m
   2.880 +CONFIG_LTPC=m
   2.881 +CONFIG_COPS=m
   2.882 +CONFIG_COPS_DAYNA=y
   2.883 +CONFIG_COPS_TANGENT=y
   2.884 +CONFIG_IPDDP=m
   2.885 +CONFIG_IPDDP_ENCAP=y
   2.886 +CONFIG_IPDDP_DECAP=y
   2.887 +# CONFIG_X25 is not set
   2.888 +# CONFIG_LAPB is not set
   2.889 +# CONFIG_ECONET is not set
   2.890 +# CONFIG_WAN_ROUTER is not set
   2.891 +# CONFIG_PHONET is not set
   2.892 +# CONFIG_IEEE802154 is not set
   2.893 +CONFIG_NET_SCHED=y
   2.894 +
   2.895 +#
   2.896 +# Queueing/Scheduling
   2.897 +#
   2.898 +CONFIG_NET_SCH_CBQ=m
   2.899 +CONFIG_NET_SCH_HTB=m
   2.900 +CONFIG_NET_SCH_HFSC=m
   2.901 +CONFIG_NET_SCH_ATM=m
   2.902 +CONFIG_NET_SCH_PRIO=m
   2.903 +CONFIG_NET_SCH_MULTIQ=m
   2.904 +CONFIG_NET_SCH_RED=m
   2.905 +CONFIG_NET_SCH_SFQ=m
   2.906 +CONFIG_NET_SCH_TEQL=m
   2.907 +CONFIG_NET_SCH_TBF=m
   2.908 +CONFIG_NET_SCH_GRED=m
   2.909 +CONFIG_NET_SCH_DSMARK=m
   2.910 +# CONFIG_NET_SCH_NETEM is not set
   2.911 +CONFIG_NET_SCH_DRR=m
   2.912 +CONFIG_NET_SCH_INGRESS=m
   2.913 +
   2.914 +#
   2.915 +# Classification
   2.916 +#
   2.917 +CONFIG_NET_CLS=y
   2.918 +CONFIG_NET_CLS_BASIC=m
   2.919 +CONFIG_NET_CLS_TCINDEX=m
   2.920 +CONFIG_NET_CLS_ROUTE4=m
   2.921 +CONFIG_NET_CLS_ROUTE=y
   2.922 +CONFIG_NET_CLS_FW=m
   2.923 +CONFIG_NET_CLS_U32=m
   2.924 +CONFIG_CLS_U32_PERF=y
   2.925 +CONFIG_CLS_U32_MARK=y
   2.926 +CONFIG_NET_CLS_RSVP=m
   2.927 +CONFIG_NET_CLS_RSVP6=m
   2.928 +CONFIG_NET_CLS_FLOW=m
   2.929 +CONFIG_NET_EMATCH=y
   2.930 +CONFIG_NET_EMATCH_STACK=32
   2.931 +CONFIG_NET_EMATCH_CMP=m
   2.932 +CONFIG_NET_EMATCH_NBYTE=m
   2.933 +CONFIG_NET_EMATCH_U32=m
   2.934 +CONFIG_NET_EMATCH_META=m
   2.935 +CONFIG_NET_EMATCH_TEXT=m
   2.936 +CONFIG_NET_CLS_ACT=y
   2.937 +CONFIG_NET_ACT_POLICE=m
   2.938 +CONFIG_NET_ACT_GACT=m
   2.939 +CONFIG_GACT_PROB=y
   2.940 +CONFIG_NET_ACT_MIRRED=m
   2.941 +CONFIG_NET_ACT_IPT=m
   2.942 +CONFIG_NET_ACT_NAT=m
   2.943 +CONFIG_NET_ACT_PEDIT=m
   2.944 +CONFIG_NET_ACT_SIMP=m
   2.945 +CONFIG_NET_ACT_SKBEDIT=m
   2.946 +# CONFIG_NET_ACT_CSUM is not set
   2.947 +CONFIG_NET_CLS_IND=y
   2.948 +CONFIG_NET_SCH_FIFO=y
   2.949 +# CONFIG_DCB is not set
   2.950 +CONFIG_RPS=y
   2.951 +
   2.952 +#
   2.953 +# Network testing
   2.954 +#
   2.955 +# CONFIG_NET_PKTGEN is not set
   2.956 +# CONFIG_HAMRADIO is not set
   2.957 +# CONFIG_CAN is not set
   2.958 +CONFIG_IRDA=m
   2.959 +
   2.960 +#
   2.961 +# IrDA protocols
   2.962 +#
   2.963 +CONFIG_IRLAN=m
   2.964 +CONFIG_IRNET=m
   2.965 +CONFIG_IRCOMM=m
   2.966 +# CONFIG_IRDA_ULTRA is not set
   2.967 +
   2.968 +#
   2.969 +# IrDA options
   2.970 +#
   2.971 +# CONFIG_IRDA_CACHE_LAST_LSAP is not set
   2.972 +# CONFIG_IRDA_FAST_RR is not set
   2.973 +# CONFIG_IRDA_DEBUG is not set
   2.974 +
   2.975 +#
   2.976 +# Infrared-port device drivers
   2.977 +#
   2.978 +
   2.979 +#
   2.980 +# SIR device drivers
   2.981 +#
   2.982 +CONFIG_IRTTY_SIR=m
   2.983 +
   2.984 +#
   2.985 +# Dongle support
   2.986 +#
   2.987 +# CONFIG_DONGLE is not set
   2.988 +# CONFIG_KINGSUN_DONGLE is not set
   2.989 +# CONFIG_KSDAZZLE_DONGLE is not set
   2.990 +# CONFIG_KS959_DONGLE is not set
   2.991 +
   2.992 +#
   2.993 +# FIR device drivers
   2.994 +#
   2.995 +# CONFIG_USB_IRDA is not set
   2.996 +# CONFIG_SIGMATEL_FIR is not set
   2.997 +# CONFIG_NSC_FIR is not set
   2.998 +# CONFIG_WINBOND_FIR is not set
   2.999 +# CONFIG_TOSHIBA_FIR is not set
  2.1000 +# CONFIG_SMC_IRCC_FIR is not set
  2.1001 +# CONFIG_ALI_FIR is not set
  2.1002 +# CONFIG_VLSI_FIR is not set
  2.1003 +# CONFIG_VIA_FIR is not set
  2.1004 +# CONFIG_MCS_FIR is not set
  2.1005 +CONFIG_BT=m
  2.1006 +CONFIG_BT_L2CAP=m
  2.1007 +CONFIG_BT_SCO=m
  2.1008 +CONFIG_BT_RFCOMM=m
  2.1009 +CONFIG_BT_RFCOMM_TTY=y
  2.1010 +# CONFIG_BT_BNEP is not set
  2.1011 +# CONFIG_BT_CMTP is not set
  2.1012 +# CONFIG_BT_HIDP is not set
  2.1013 +
  2.1014 +#
  2.1015 +# Bluetooth device drivers
  2.1016 +#
  2.1017 +CONFIG_BT_HCIBTUSB=m
  2.1018 +CONFIG_BT_HCIBTSDIO=m
  2.1019 +CONFIG_BT_HCIUART=m
  2.1020 +# CONFIG_BT_HCIUART_H4 is not set
  2.1021 +# CONFIG_BT_HCIUART_BCSP is not set
  2.1022 +# CONFIG_BT_HCIUART_ATH3K is not set
  2.1023 +# CONFIG_BT_HCIUART_LL is not set
  2.1024 +CONFIG_BT_HCIBCM203X=m
  2.1025 +# CONFIG_BT_HCIBPA10X is not set
  2.1026 +# CONFIG_BT_HCIBFUSB is not set
  2.1027 +# CONFIG_BT_HCIDTL1 is not set
  2.1028 +# CONFIG_BT_HCIBT3C is not set
  2.1029 +# CONFIG_BT_HCIBLUECARD is not set
  2.1030 +# CONFIG_BT_HCIBTUART is not set
  2.1031 +# CONFIG_BT_HCIVHCI is not set
  2.1032 +# CONFIG_BT_MRVL is not set
  2.1033 +# CONFIG_BT_ATH3K is not set
  2.1034 +# CONFIG_AF_RXRPC is not set
  2.1035 +CONFIG_WIRELESS=y
  2.1036 +CONFIG_WIRELESS_EXT=y
  2.1037 +CONFIG_WEXT_CORE=y
  2.1038 +CONFIG_WEXT_PROC=y
  2.1039 +CONFIG_WEXT_SPY=y
  2.1040 +CONFIG_WEXT_PRIV=y
  2.1041 +CONFIG_CFG80211=m
  2.1042 +# CONFIG_NL80211_TESTMODE is not set
  2.1043 +# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
  2.1044 +# CONFIG_CFG80211_REG_DEBUG is not set
  2.1045 +CONFIG_CFG80211_DEFAULT_PS=y
  2.1046 +# CONFIG_CFG80211_INTERNAL_REGDB is not set
  2.1047 +CONFIG_CFG80211_WEXT=y
  2.1048 +CONFIG_WIRELESS_EXT_SYSFS=y
  2.1049 +CONFIG_LIB80211=m
  2.1050 +CONFIG_LIB80211_CRYPT_WEP=m
  2.1051 +CONFIG_LIB80211_CRYPT_CCMP=m
  2.1052 +CONFIG_LIB80211_CRYPT_TKIP=m
  2.1053 +# CONFIG_LIB80211_DEBUG is not set
  2.1054 +CONFIG_MAC80211=m
  2.1055 +CONFIG_MAC80211_HAS_RC=y
  2.1056 +CONFIG_MAC80211_RC_MINSTREL=y
  2.1057 +CONFIG_MAC80211_RC_MINSTREL_HT=y
  2.1058 +CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
  2.1059 +CONFIG_MAC80211_RC_DEFAULT="minstrel_ht"
  2.1060 +CONFIG_MAC80211_MESH=y
  2.1061 +CONFIG_MAC80211_LEDS=y
  2.1062 +# CONFIG_MAC80211_DEBUG_MENU is not set
  2.1063 +CONFIG_WIMAX=m
  2.1064 +CONFIG_WIMAX_DEBUG_LEVEL=8
  2.1065 +CONFIG_RFKILL=m
  2.1066 +CONFIG_RFKILL_LEDS=y
  2.1067 +CONFIG_RFKILL_INPUT=y
  2.1068 +# CONFIG_NET_9P is not set
  2.1069 +# CONFIG_CAIF is not set
  2.1070 +# CONFIG_CEPH_LIB is not set
  2.1071 +
  2.1072 +#
  2.1073 +# Device Drivers
  2.1074 +#
  2.1075 +
  2.1076 +#
  2.1077 +# Generic Driver Options
  2.1078 +#
  2.1079 +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
  2.1080 +CONFIG_DEVTMPFS=y
  2.1081 +# CONFIG_DEVTMPFS_MOUNT is not set
  2.1082 +CONFIG_STANDALONE=y
  2.1083 +CONFIG_PREVENT_FIRMWARE_BUILD=y
  2.1084 +CONFIG_FW_LOADER=y
  2.1085 +CONFIG_FIRMWARE_IN_KERNEL=y
  2.1086 +CONFIG_EXTRA_FIRMWARE=""
  2.1087 +# CONFIG_SYS_HYPERVISOR is not set
  2.1088 +# CONFIG_CONNECTOR is not set
  2.1089 +# CONFIG_MTD is not set
  2.1090 +CONFIG_PARPORT=m
  2.1091 +CONFIG_PARPORT_PC=m
  2.1092 +# CONFIG_PARPORT_SERIAL is not set
  2.1093 +# CONFIG_PARPORT_PC_FIFO is not set
  2.1094 +# CONFIG_PARPORT_PC_SUPERIO is not set
  2.1095 +# CONFIG_PARPORT_PC_PCMCIA is not set
  2.1096 +# CONFIG_PARPORT_GSC is not set
  2.1097 +# CONFIG_PARPORT_AX88796 is not set
  2.1098 +CONFIG_PARPORT_1284=y
  2.1099 +CONFIG_PNP=y
  2.1100 +CONFIG_PNP_DEBUG_MESSAGES=y
  2.1101 +
  2.1102 +#
  2.1103 +# Protocols
  2.1104 +#
  2.1105 +CONFIG_ISAPNP=y
  2.1106 +# CONFIG_PNPBIOS is not set
  2.1107 +CONFIG_PNPACPI=y
  2.1108 +CONFIG_BLK_DEV=y
  2.1109 +CONFIG_BLK_DEV_FD=m
  2.1110 +# CONFIG_BLK_DEV_XD is not set
  2.1111 +# CONFIG_PARIDE is not set
  2.1112 +# CONFIG_BLK_CPQ_DA is not set
  2.1113 +# CONFIG_BLK_CPQ_CISS_DA is not set
  2.1114 +# CONFIG_BLK_DEV_DAC960 is not set
  2.1115 +# CONFIG_BLK_DEV_UMEM is not set
  2.1116 +# CONFIG_BLK_DEV_COW_COMMON is not set
  2.1117 +CONFIG_BLK_DEV_LOOP=y
  2.1118 +CONFIG_BLK_DEV_CRYPTOLOOP=m
  2.1119 +
  2.1120 +#
  2.1121 +# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
  2.1122 +#
  2.1123 +# CONFIG_BLK_DEV_NBD is not set
  2.1124 +# CONFIG_BLK_DEV_SX8 is not set
  2.1125 +# CONFIG_BLK_DEV_UB is not set
  2.1126 +CONFIG_BLK_DEV_RAM=y
  2.1127 +CONFIG_BLK_DEV_RAM_COUNT=16
  2.1128 +CONFIG_BLK_DEV_RAM_SIZE=4096
  2.1129 +# CONFIG_BLK_DEV_XIP is not set
  2.1130 +# CONFIG_CDROM_PKTCDVD is not set
  2.1131 +# CONFIG_ATA_OVER_ETH is not set
  2.1132 +CONFIG_VIRTIO_BLK=m
  2.1133 +# CONFIG_BLK_DEV_HD is not set
  2.1134 +# CONFIG_BLK_DEV_RBD is not set
  2.1135 +CONFIG_MISC_DEVICES=y
  2.1136 +# CONFIG_AD525X_DPOT is not set
  2.1137 +# CONFIG_IBM_ASM is not set
  2.1138 +# CONFIG_PHANTOM is not set
  2.1139 +# CONFIG_SGI_IOC4 is not set
  2.1140 +CONFIG_TIFM_CORE=m
  2.1141 +CONFIG_TIFM_7XX1=m
  2.1142 +# CONFIG_ICS932S401 is not set
  2.1143 +# CONFIG_ENCLOSURE_SERVICES is not set
  2.1144 +# CONFIG_CS5535_MFGPT is not set
  2.1145 +# CONFIG_HP_ILO is not set
  2.1146 +# CONFIG_APDS9802ALS is not set
  2.1147 +# CONFIG_ISL29003 is not set
  2.1148 +# CONFIG_ISL29020 is not set
  2.1149 +# CONFIG_SENSORS_TSL2550 is not set
  2.1150 +# CONFIG_SENSORS_BH1780 is not set
  2.1151 +# CONFIG_SENSORS_BH1770 is not set
  2.1152 +# CONFIG_SENSORS_APDS990X is not set
  2.1153 +# CONFIG_HMC6352 is not set
  2.1154 +# CONFIG_DS1682 is not set
  2.1155 +# CONFIG_VMWARE_BALLOON is not set
  2.1156 +# CONFIG_BMP085 is not set
  2.1157 +# CONFIG_PCH_PHUB is not set
  2.1158 +# CONFIG_C2PORT is not set
  2.1159 +
  2.1160 +#
  2.1161 +# EEPROM support
  2.1162 +#
  2.1163 +# CONFIG_EEPROM_AT24 is not set
  2.1164 +# CONFIG_EEPROM_LEGACY is not set
  2.1165 +# CONFIG_EEPROM_MAX6875 is not set
  2.1166 +CONFIG_EEPROM_93CX6=m
  2.1167 +CONFIG_CB710_CORE=m
  2.1168 +# CONFIG_CB710_DEBUG is not set
  2.1169 +CONFIG_CB710_DEBUG_ASSUMPTIONS=y
  2.1170 +CONFIG_IWMC3200TOP=m
  2.1171 +# CONFIG_IWMC3200TOP_DEBUG is not set
  2.1172 +# CONFIG_IWMC3200TOP_DEBUGFS is not set
  2.1173 +
  2.1174 +#
  2.1175 +# Texas Instruments shared transport line discipline
  2.1176 +#
  2.1177 +# CONFIG_TI_ST is not set
  2.1178 +CONFIG_HAVE_IDE=y
  2.1179 +CONFIG_IDE=y
  2.1180 +
  2.1181 +#
  2.1182 +# Please see Documentation/ide/ide.txt for help/info on IDE drives
  2.1183 +#
  2.1184 +CONFIG_IDE_XFER_MODE=y
  2.1185 +CONFIG_IDE_TIMINGS=y
  2.1186 +CONFIG_IDE_ATAPI=y
  2.1187 +# CONFIG_BLK_DEV_IDE_SATA is not set
  2.1188 +CONFIG_IDE_GD=y
  2.1189 +CONFIG_IDE_GD_ATA=y
  2.1190 +# CONFIG_IDE_GD_ATAPI is not set
  2.1191 +CONFIG_BLK_DEV_IDECS=m
  2.1192 +# CONFIG_BLK_DEV_DELKIN is not set
  2.1193 +CONFIG_BLK_DEV_IDECD=y
  2.1194 +CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
  2.1195 +# CONFIG_BLK_DEV_IDETAPE is not set
  2.1196 +# CONFIG_BLK_DEV_IDEACPI is not set
  2.1197 +# CONFIG_IDE_TASK_IOCTL is not set
  2.1198 +CONFIG_IDE_PROC_FS=y
  2.1199 +
  2.1200 +#
  2.1201 +# IDE chipset support/bugfixes
  2.1202 +#
  2.1203 +CONFIG_IDE_GENERIC=y
  2.1204 +# CONFIG_BLK_DEV_PLATFORM is not set
  2.1205 +CONFIG_BLK_DEV_CMD640=y
  2.1206 +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
  2.1207 +# CONFIG_BLK_DEV_IDEPNP is not set
  2.1208 +CONFIG_BLK_DEV_IDEDMA_SFF=y
  2.1209 +
  2.1210 +#
  2.1211 +# PCI IDE chipsets support
  2.1212 +#
  2.1213 +CONFIG_BLK_DEV_IDEPCI=y
  2.1214 +CONFIG_IDEPCI_PCIBUS_ORDER=y
  2.1215 +# CONFIG_BLK_DEV_OFFBOARD is not set
  2.1216 +CONFIG_BLK_DEV_GENERIC=y
  2.1217 +# CONFIG_BLK_DEV_OPTI621 is not set
  2.1218 +CONFIG_BLK_DEV_RZ1000=y
  2.1219 +CONFIG_BLK_DEV_IDEDMA_PCI=y
  2.1220 +CONFIG_BLK_DEV_AEC62XX=y
  2.1221 +CONFIG_BLK_DEV_ALI15X3=y
  2.1222 +CONFIG_BLK_DEV_AMD74XX=y
  2.1223 +CONFIG_BLK_DEV_ATIIXP=y
  2.1224 +CONFIG_BLK_DEV_CMD64X=y
  2.1225 +CONFIG_BLK_DEV_TRIFLEX=y
  2.1226 +# CONFIG_BLK_DEV_CS5520 is not set
  2.1227 +CONFIG_BLK_DEV_CS5530=y
  2.1228 +CONFIG_BLK_DEV_CS5535=y
  2.1229 +# CONFIG_BLK_DEV_CS5536 is not set
  2.1230 +# CONFIG_BLK_DEV_HPT366 is not set
  2.1231 +CONFIG_BLK_DEV_JMICRON=y
  2.1232 +# CONFIG_BLK_DEV_SC1200 is not set
  2.1233 +CONFIG_BLK_DEV_PIIX=y
  2.1234 +# CONFIG_BLK_DEV_IT8172 is not set
  2.1235 +CONFIG_BLK_DEV_IT8213=y
  2.1236 +CONFIG_BLK_DEV_IT821X=y
  2.1237 +CONFIG_BLK_DEV_NS87415=y
  2.1238 +# CONFIG_BLK_DEV_PDC202XX_OLD is not set
  2.1239 +CONFIG_BLK_DEV_PDC202XX_NEW=y
  2.1240 +CONFIG_BLK_DEV_SVWKS=y
  2.1241 +CONFIG_BLK_DEV_SIIMAGE=y
  2.1242 +CONFIG_BLK_DEV_SIS5513=y
  2.1243 +CONFIG_BLK_DEV_SLC90E66=y
  2.1244 +CONFIG_BLK_DEV_TRM290=y
  2.1245 +CONFIG_BLK_DEV_VIA82CXXX=y
  2.1246 +# CONFIG_BLK_DEV_TC86C001 is not set
  2.1247 +
  2.1248 +#
  2.1249 +# Other IDE chipsets support
  2.1250 +#
  2.1251 +
  2.1252 +#
  2.1253 +# Note: most of these also require special kernel boot parameters
  2.1254 +#
  2.1255 +# CONFIG_BLK_DEV_4DRIVES is not set
  2.1256 +# CONFIG_BLK_DEV_ALI14XX is not set
  2.1257 +# CONFIG_BLK_DEV_DTC2278 is not set
  2.1258 +# CONFIG_BLK_DEV_HT6560B is not set
  2.1259 +# CONFIG_BLK_DEV_QD65XX is not set
  2.1260 +# CONFIG_BLK_DEV_UMC8672 is not set
  2.1261 +CONFIG_BLK_DEV_IDEDMA=y
  2.1262 +
  2.1263 +#
  2.1264 +# SCSI device support
  2.1265 +#
  2.1266 +CONFIG_SCSI_MOD=y
  2.1267 +# CONFIG_RAID_ATTRS is not set
  2.1268 +CONFIG_SCSI=y
  2.1269 +CONFIG_SCSI_DMA=y
  2.1270 +# CONFIG_SCSI_TGT is not set
  2.1271 +# CONFIG_SCSI_NETLINK is not set
  2.1272 +CONFIG_SCSI_PROC_FS=y
  2.1273 +
  2.1274 +#
  2.1275 +# SCSI support type (disk, tape, CD-ROM)
  2.1276 +#
  2.1277 +CONFIG_BLK_DEV_SD=y
  2.1278 +# CONFIG_CHR_DEV_ST is not set
  2.1279 +# CONFIG_CHR_DEV_OSST is not set
  2.1280 +CONFIG_BLK_DEV_SR=y
  2.1281 +# CONFIG_BLK_DEV_SR_VENDOR is not set
  2.1282 +CONFIG_CHR_DEV_SG=y
  2.1283 +# CONFIG_CHR_DEV_SCH is not set
  2.1284 +# CONFIG_SCSI_MULTI_LUN is not set
  2.1285 +# CONFIG_SCSI_CONSTANTS is not set
  2.1286 +# CONFIG_SCSI_LOGGING is not set
  2.1287 +# CONFIG_SCSI_SCAN_ASYNC is not set
  2.1288 +CONFIG_SCSI_WAIT_SCAN=m
  2.1289 +
  2.1290 +#
  2.1291 +# SCSI Transports
  2.1292 +#
  2.1293 +CONFIG_SCSI_SPI_ATTRS=m
  2.1294 +# CONFIG_SCSI_FC_ATTRS is not set
  2.1295 +CONFIG_SCSI_ISCSI_ATTRS=m
  2.1296 +# CONFIG_SCSI_SAS_ATTRS is not set
  2.1297 +# CONFIG_SCSI_SAS_LIBSAS is not set
  2.1298 +# CONFIG_SCSI_SRP_ATTRS is not set
  2.1299 +CONFIG_SCSI_LOWLEVEL=y
  2.1300 +CONFIG_ISCSI_TCP=m
  2.1301 +# CONFIG_ISCSI_BOOT_SYSFS is not set
  2.1302 +# CONFIG_SCSI_BNX2_ISCSI is not set
  2.1303 +# CONFIG_BE2ISCSI is not set
  2.1304 +# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
  2.1305 +# CONFIG_SCSI_HPSA is not set
  2.1306 +# CONFIG_SCSI_3W_9XXX is not set
  2.1307 +# CONFIG_SCSI_3W_SAS is not set
  2.1308 +# CONFIG_SCSI_7000FASST is not set
  2.1309 +# CONFIG_SCSI_ACARD is not set
  2.1310 +# CONFIG_SCSI_AHA152X is not set
  2.1311 +# CONFIG_SCSI_AHA1542 is not set
  2.1312 +# CONFIG_SCSI_AACRAID is not set
  2.1313 +CONFIG_SCSI_AIC7XXX=m
  2.1314 +CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
  2.1315 +CONFIG_AIC7XXX_RESET_DELAY_MS=5000
  2.1316 +CONFIG_AIC7XXX_DEBUG_ENABLE=y
  2.1317 +CONFIG_AIC7XXX_DEBUG_MASK=0
  2.1318 +CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
  2.1319 +# CONFIG_SCSI_AIC7XXX_OLD is not set
  2.1320 +# CONFIG_SCSI_AIC79XX is not set
  2.1321 +# CONFIG_SCSI_AIC94XX is not set
  2.1322 +# CONFIG_SCSI_MVSAS is not set
  2.1323 +# CONFIG_SCSI_DPT_I2O is not set
  2.1324 +# CONFIG_SCSI_ADVANSYS is not set
  2.1325 +# CONFIG_SCSI_IN2000 is not set
  2.1326 +# CONFIG_SCSI_ARCMSR is not set
  2.1327 +# CONFIG_MEGARAID_NEWGEN is not set
  2.1328 +# CONFIG_MEGARAID_LEGACY is not set
  2.1329 +# CONFIG_MEGARAID_SAS is not set
  2.1330 +# CONFIG_SCSI_MPT2SAS is not set
  2.1331 +# CONFIG_SCSI_HPTIOP is not set
  2.1332 +# CONFIG_SCSI_BUSLOGIC is not set
  2.1333 +# CONFIG_VMWARE_PVSCSI is not set
  2.1334 +# CONFIG_LIBFC is not set
  2.1335 +# CONFIG_LIBFCOE is not set
  2.1336 +# CONFIG_FCOE is not set
  2.1337 +# CONFIG_FCOE_FNIC is not set
  2.1338 +# CONFIG_SCSI_DMX3191D is not set
  2.1339 +# CONFIG_SCSI_DTC3280 is not set
  2.1340 +# CONFIG_SCSI_EATA is not set
  2.1341 +# CONFIG_SCSI_FUTURE_DOMAIN is not set
  2.1342 +# CONFIG_SCSI_GDTH is not set
  2.1343 +# CONFIG_SCSI_GENERIC_NCR5380 is not set
  2.1344 +# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
  2.1345 +# CONFIG_SCSI_IPS is not set
  2.1346 +# CONFIG_SCSI_INITIO is not set
  2.1347 +# CONFIG_SCSI_INIA100 is not set
  2.1348 +# CONFIG_SCSI_PPA is not set
  2.1349 +# CONFIG_SCSI_IMM is not set
  2.1350 +# CONFIG_SCSI_NCR53C406A is not set
  2.1351 +# CONFIG_SCSI_STEX is not set
  2.1352 +# CONFIG_SCSI_SYM53C8XX_2 is not set
  2.1353 +# CONFIG_SCSI_IPR is not set
  2.1354 +# CONFIG_SCSI_PAS16 is not set
  2.1355 +# CONFIG_SCSI_QLOGIC_FAS is not set
  2.1356 +# CONFIG_SCSI_QLOGIC_1280 is not set
  2.1357 +# CONFIG_SCSI_QLA_FC is not set
  2.1358 +# CONFIG_SCSI_QLA_ISCSI is not set
  2.1359 +# CONFIG_SCSI_LPFC is not set
  2.1360 +# CONFIG_SCSI_SYM53C416 is not set
  2.1361 +# CONFIG_SCSI_DC395x is not set
  2.1362 +# CONFIG_SCSI_DC390T is not set
  2.1363 +# CONFIG_SCSI_T128 is not set
  2.1364 +# CONFIG_SCSI_U14_34F is not set
  2.1365 +# CONFIG_SCSI_ULTRASTOR is not set
  2.1366 +# CONFIG_SCSI_NSP32 is not set
  2.1367 +# CONFIG_SCSI_DEBUG is not set
  2.1368 +# CONFIG_SCSI_PMCRAID is not set
  2.1369 +# CONFIG_SCSI_PM8001 is not set
  2.1370 +# CONFIG_SCSI_SRP is not set
  2.1371 +# CONFIG_SCSI_BFA_FC is not set
  2.1372 +# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
  2.1373 +# CONFIG_SCSI_DH is not set
  2.1374 +# CONFIG_SCSI_OSD_INITIATOR is not set
  2.1375 +CONFIG_ATA=y
  2.1376 +# CONFIG_ATA_NONSTANDARD is not set
  2.1377 +CONFIG_ATA_VERBOSE_ERROR=y
  2.1378 +CONFIG_ATA_ACPI=y
  2.1379 +CONFIG_SATA_PMP=y
  2.1380 +
  2.1381 +#
  2.1382 +# Controllers with non-SFF native interface
  2.1383 +#
  2.1384 +CONFIG_SATA_AHCI=y
  2.1385 +# CONFIG_SATA_AHCI_PLATFORM is not set
  2.1386 +# CONFIG_SATA_INIC162X is not set
  2.1387 +# CONFIG_SATA_SIL24 is not set
  2.1388 +CONFIG_ATA_SFF=y
  2.1389 +
  2.1390 +#
  2.1391 +# SFF controllers with custom DMA interface
  2.1392 +#
  2.1393 +# CONFIG_PDC_ADMA is not set
  2.1394 +# CONFIG_SATA_QSTOR is not set
  2.1395 +# CONFIG_SATA_SX4 is not set
  2.1396 +CONFIG_ATA_BMDMA=y
  2.1397 +
  2.1398 +#
  2.1399 +# SATA SFF controllers with BMDMA
  2.1400 +#
  2.1401 +CONFIG_ATA_PIIX=y
  2.1402 +# CONFIG_SATA_MV is not set
  2.1403 +CONFIG_SATA_NV=y
  2.1404 +# CONFIG_SATA_PROMISE is not set
  2.1405 +CONFIG_SATA_SIL=y
  2.1406 +CONFIG_SATA_SIS=y
  2.1407 +# CONFIG_SATA_SVW is not set
  2.1408 +# CONFIG_SATA_ULI is not set
  2.1409 +CONFIG_SATA_VIA=y
  2.1410 +# CONFIG_SATA_VITESSE is not set
  2.1411 +
  2.1412 +#
  2.1413 +# PATA SFF controllers with BMDMA
  2.1414 +#
  2.1415 +# CONFIG_PATA_ALI is not set
  2.1416 +# CONFIG_PATA_AMD is not set
  2.1417 +# CONFIG_PATA_ARTOP is not set
  2.1418 +# CONFIG_PATA_ATIIXP is not set
  2.1419 +# CONFIG_PATA_ATP867X is not set
  2.1420 +# CONFIG_PATA_CMD64X is not set
  2.1421 +# CONFIG_PATA_CS5520 is not set
  2.1422 +# CONFIG_PATA_CS5530 is not set
  2.1423 +# CONFIG_PATA_CS5535 is not set
  2.1424 +# CONFIG_PATA_CS5536 is not set
  2.1425 +# CONFIG_PATA_CYPRESS is not set
  2.1426 +# CONFIG_PATA_EFAR is not set
  2.1427 +# CONFIG_PATA_HPT366 is not set
  2.1428 +# CONFIG_PATA_HPT37X is not set
  2.1429 +# CONFIG_PATA_HPT3X2N is not set
  2.1430 +# CONFIG_PATA_HPT3X3 is not set
  2.1431 +# CONFIG_PATA_IT8213 is not set
  2.1432 +# CONFIG_PATA_IT821X is not set
  2.1433 +# CONFIG_PATA_JMICRON is not set
  2.1434 +# CONFIG_PATA_MARVELL is not set
  2.1435 +# CONFIG_PATA_NETCELL is not set
  2.1436 +# CONFIG_PATA_NINJA32 is not set
  2.1437 +# CONFIG_PATA_NS87415 is not set
  2.1438 +# CONFIG_PATA_OLDPIIX is not set
  2.1439 +# CONFIG_PATA_OPTIDMA is not set
  2.1440 +# CONFIG_PATA_PDC2027X is not set
  2.1441 +# CONFIG_PATA_PDC_OLD is not set
  2.1442 +# CONFIG_PATA_RADISYS is not set
  2.1443 +# CONFIG_PATA_RDC is not set
  2.1444 +# CONFIG_PATA_SC1200 is not set
  2.1445 +CONFIG_PATA_SCH=y
  2.1446 +# CONFIG_PATA_SERVERWORKS is not set
  2.1447 +# CONFIG_PATA_SIL680 is not set
  2.1448 +CONFIG_PATA_SIS=y
  2.1449 +# CONFIG_PATA_TOSHIBA is not set
  2.1450 +# CONFIG_PATA_TRIFLEX is not set
  2.1451 +# CONFIG_PATA_VIA is not set
  2.1452 +# CONFIG_PATA_WINBOND is not set
  2.1453 +
  2.1454 +#
  2.1455 +# PIO-only SFF controllers
  2.1456 +#
  2.1457 +# CONFIG_PATA_CMD640_PCI is not set
  2.1458 +# CONFIG_PATA_ISAPNP is not set
  2.1459 +# CONFIG_PATA_MPIIX is not set
  2.1460 +# CONFIG_PATA_NS87410 is not set
  2.1461 +# CONFIG_PATA_OPTI is not set
  2.1462 +# CONFIG_PATA_PCMCIA is not set
  2.1463 +# CONFIG_PATA_QDI is not set
  2.1464 +# CONFIG_PATA_RZ1000 is not set
  2.1465 +# CONFIG_PATA_WINBOND_VLB is not set
  2.1466 +
  2.1467 +#
  2.1468 +# Generic fallback / legacy drivers
  2.1469 +#
  2.1470 +# CONFIG_PATA_ACPI is not set
  2.1471 +# CONFIG_ATA_GENERIC is not set
  2.1472 +# CONFIG_PATA_LEGACY is not set
  2.1473 +CONFIG_MD=y
  2.1474 +CONFIG_BLK_DEV_MD=m
  2.1475 +CONFIG_MD_LINEAR=m
  2.1476 +CONFIG_MD_RAID0=m
  2.1477 +CONFIG_MD_RAID1=m
  2.1478 +CONFIG_MD_RAID10=m
  2.1479 +CONFIG_MD_RAID456=m
  2.1480 +# CONFIG_MULTICORE_RAID456 is not set
  2.1481 +# CONFIG_MD_MULTIPATH is not set
  2.1482 +# CONFIG_MD_FAULTY is not set
  2.1483 +CONFIG_BLK_DEV_DM=m
  2.1484 +# CONFIG_DM_DEBUG is not set
  2.1485 +CONFIG_DM_CRYPT=m
  2.1486 +CONFIG_DM_SNAPSHOT=m
  2.1487 +CONFIG_DM_MIRROR=m
  2.1488 +# CONFIG_DM_LOG_USERSPACE is not set
  2.1489 +# CONFIG_DM_ZERO is not set
  2.1490 +# CONFIG_DM_MULTIPATH is not set
  2.1491 +# CONFIG_DM_DELAY is not set
  2.1492 +# CONFIG_DM_UEVENT is not set
  2.1493 +# CONFIG_FUSION is not set
  2.1494 +
  2.1495 +#
  2.1496 +# IEEE 1394 (FireWire) support
  2.1497 +#
  2.1498 +CONFIG_FIREWIRE=m
  2.1499 +CONFIG_FIREWIRE_OHCI=m
  2.1500 +CONFIG_FIREWIRE_OHCI_DEBUG=y
  2.1501 +CONFIG_FIREWIRE_SBP2=m
  2.1502 +CONFIG_FIREWIRE_NET=m
  2.1503 +CONFIG_FIREWIRE_NOSY=m
  2.1504 +# CONFIG_I2O is not set
  2.1505 +# CONFIG_MACINTOSH_DRIVERS is not set
  2.1506 +CONFIG_NETDEVICES=y
  2.1507 +# CONFIG_IFB is not set
  2.1508 +CONFIG_DUMMY=y
  2.1509 +# CONFIG_BONDING is not set
  2.1510 +# CONFIG_MACVLAN is not set
  2.1511 +# CONFIG_EQUALIZER is not set
  2.1512 +CONFIG_TUN=y
  2.1513 +# CONFIG_VETH is not set
  2.1514 +# CONFIG_NET_SB1000 is not set
  2.1515 +CONFIG_ARCNET=m
  2.1516 +CONFIG_ARCNET_1201=m
  2.1517 +# CONFIG_ARCNET_1051 is not set
  2.1518 +# CONFIG_ARCNET_RAW is not set
  2.1519 +# CONFIG_ARCNET_CAP is not set
  2.1520 +CONFIG_ARCNET_COM90xx=m
  2.1521 +# CONFIG_ARCNET_COM90xxIO is not set
  2.1522 +# CONFIG_ARCNET_RIM_I is not set
  2.1523 +# CONFIG_ARCNET_COM20020 is not set
  2.1524 +CONFIG_MII=y
  2.1525 +CONFIG_PHYLIB=m
  2.1526 +
  2.1527 +#
  2.1528 +# MII PHY device drivers
  2.1529 +#
  2.1530 +CONFIG_MARVELL_PHY=m
  2.1531 +CONFIG_DAVICOM_PHY=m
  2.1532 +CONFIG_QSEMI_PHY=m
  2.1533 +CONFIG_LXT_PHY=m
  2.1534 +CONFIG_CICADA_PHY=m
  2.1535 +# CONFIG_VITESSE_PHY is not set
  2.1536 +CONFIG_SMSC_PHY=m
  2.1537 +CONFIG_BROADCOM_PHY=m
  2.1538 +# CONFIG_BCM63XX_PHY is not set
  2.1539 +# CONFIG_ICPLUS_PHY is not set
  2.1540 +# CONFIG_REALTEK_PHY is not set
  2.1541 +# CONFIG_NATIONAL_PHY is not set
  2.1542 +# CONFIG_STE10XP is not set
  2.1543 +# CONFIG_LSI_ET1011C_PHY is not set
  2.1544 +# CONFIG_MICREL_PHY is not set
  2.1545 +# CONFIG_MDIO_BITBANG is not set
  2.1546 +CONFIG_NET_ETHERNET=y
  2.1547 +CONFIG_HAPPYMEAL=m
  2.1548 +CONFIG_SUNGEM=m
  2.1549 +CONFIG_CASSINI=m
  2.1550 +CONFIG_NET_VENDOR_3COM=y
  2.1551 +CONFIG_EL1=m
  2.1552 +CONFIG_EL2=m
  2.1553 +CONFIG_ELPLUS=m
  2.1554 +# CONFIG_EL16 is not set
  2.1555 +CONFIG_EL3=m
  2.1556 +CONFIG_3C515=m
  2.1557 +CONFIG_VORTEX=m
  2.1558 +CONFIG_TYPHOON=m
  2.1559 +CONFIG_LANCE=m
  2.1560 +CONFIG_NET_VENDOR_SMC=y
  2.1561 +CONFIG_WD80x3=m
  2.1562 +CONFIG_ULTRA=m
  2.1563 +CONFIG_SMC9194=m
  2.1564 +# CONFIG_ETHOC is not set
  2.1565 +CONFIG_NET_VENDOR_RACAL=y
  2.1566 +CONFIG_NI52=m
  2.1567 +CONFIG_NI65=m
  2.1568 +CONFIG_DNET=m
  2.1569 +CONFIG_NET_TULIP=y
  2.1570 +# CONFIG_DE2104X is not set
  2.1571 +CONFIG_TULIP=m
  2.1572 +# CONFIG_TULIP_MWI is not set
  2.1573 +# CONFIG_TULIP_MMIO is not set
  2.1574 +# CONFIG_TULIP_NAPI is not set
  2.1575 +CONFIG_DE4X5=y
  2.1576 +CONFIG_WINBOND_840=y
  2.1577 +CONFIG_DM9102=y
  2.1578 +CONFIG_ULI526X=m
  2.1579 +CONFIG_PCMCIA_XIRCOM=y
  2.1580 +# CONFIG_AT1700 is not set
  2.1581 +CONFIG_DEPCA=m
  2.1582 +CONFIG_HP100=m
  2.1583 +CONFIG_NET_ISA=y
  2.1584 +CONFIG_E2100=m
  2.1585 +CONFIG_EWRK3=m
  2.1586 +CONFIG_EEXPRESS=m
  2.1587 +CONFIG_EEXPRESS_PRO=m
  2.1588 +CONFIG_HPLAN_PLUS=m
  2.1589 +CONFIG_HPLAN=m
  2.1590 +CONFIG_LP486E=m
  2.1591 +CONFIG_ETH16I=m
  2.1592 +CONFIG_NE2000=m
  2.1593 +# CONFIG_ZNET is not set
  2.1594 +# CONFIG_SEEQ8005 is not set
  2.1595 +# CONFIG_IBM_NEW_EMAC_ZMII is not set
  2.1596 +# CONFIG_IBM_NEW_EMAC_RGMII is not set
  2.1597 +# CONFIG_IBM_NEW_EMAC_TAH is not set
  2.1598 +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
  2.1599 +# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
  2.1600 +# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
  2.1601 +# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
  2.1602 +CONFIG_NET_PCI=y
  2.1603 +CONFIG_PCNET32=y
  2.1604 +CONFIG_AMD8111_ETH=m
  2.1605 +CONFIG_ADAPTEC_STARFIRE=m
  2.1606 +# CONFIG_AC3200 is not set
  2.1607 +# CONFIG_KSZ884X_PCI is not set
  2.1608 +CONFIG_APRICOT=m
  2.1609 +CONFIG_B44=m
  2.1610 +CONFIG_B44_PCI_AUTOSELECT=y
  2.1611 +CONFIG_B44_PCICORE_AUTOSELECT=y
  2.1612 +CONFIG_B44_PCI=y
  2.1613 +CONFIG_FORCEDETH=y
  2.1614 +CONFIG_CS89x0=m
  2.1615 +CONFIG_E100=y
  2.1616 +CONFIG_FEALNX=m
  2.1617 +CONFIG_NATSEMI=y
  2.1618 +CONFIG_NE2K_PCI=y
  2.1619 +# CONFIG_8139CP is not set
  2.1620 +CONFIG_8139TOO=y
  2.1621 +# CONFIG_8139TOO_PIO is not set
  2.1622 +CONFIG_8139TOO_TUNE_TWISTER=y
  2.1623 +CONFIG_8139TOO_8129=y
  2.1624 +# CONFIG_8139_OLD_RX_RESET is not set
  2.1625 +CONFIG_R6040=m
  2.1626 +CONFIG_SIS900=y
  2.1627 +CONFIG_EPIC100=y
  2.1628 +CONFIG_SMSC9420=m
  2.1629 +CONFIG_SUNDANCE=y
  2.1630 +# CONFIG_SUNDANCE_MMIO is not set
  2.1631 +CONFIG_TLAN=y
  2.1632 +# CONFIG_KS8851_MLL is not set
  2.1633 +CONFIG_VIA_RHINE=y
  2.1634 +CONFIG_VIA_RHINE_MMIO=y
  2.1635 +CONFIG_SC92031=m
  2.1636 +# CONFIG_NET_POCKET is not set
  2.1637 +CONFIG_ATL2=m
  2.1638 +CONFIG_NETDEV_1000=y
  2.1639 +CONFIG_ACENIC=y
  2.1640 +# CONFIG_ACENIC_OMIT_TIGON_I is not set
  2.1641 +CONFIG_DL2K=m
  2.1642 +CONFIG_E1000=m
  2.1643 +CONFIG_E1000E=y
  2.1644 +CONFIG_IP1000=m
  2.1645 +# CONFIG_IGB is not set
  2.1646 +# CONFIG_IGBVF is not set
  2.1647 +CONFIG_NS83820=y
  2.1648 +CONFIG_HAMACHI=y
  2.1649 +# CONFIG_YELLOWFIN is not set
  2.1650 +CONFIG_R8169=y
  2.1651 +# CONFIG_R8169_VLAN is not set
  2.1652 +CONFIG_SIS190=m
  2.1653 +CONFIG_SKGE=m
  2.1654 +CONFIG_SKY2=m
  2.1655 +CONFIG_VIA_VELOCITY=m
  2.1656 +CONFIG_TIGON3=m
  2.1657 +CONFIG_BNX2=m
  2.1658 +# CONFIG_CNIC is not set
  2.1659 +CONFIG_QLA3XXX=y
  2.1660 +CONFIG_ATL1=y
  2.1661 +CONFIG_ATL1E=m
  2.1662 +CONFIG_ATL1C=m
  2.1663 +# CONFIG_JME is not set
  2.1664 +# CONFIG_STMMAC_ETH is not set
  2.1665 +# CONFIG_PCH_GBE is not set
  2.1666 +# CONFIG_NETDEV_10000 is not set
  2.1667 +# CONFIG_TR is not set
  2.1668 +CONFIG_WLAN=y
  2.1669 +# CONFIG_PCMCIA_RAYCS is not set
  2.1670 +# CONFIG_LIBERTAS_THINFIRM is not set
  2.1671 +CONFIG_AIRO=m
  2.1672 +CONFIG_ATMEL=m
  2.1673 +CONFIG_PCI_ATMEL=m
  2.1674 +CONFIG_PCMCIA_ATMEL=m
  2.1675 +CONFIG_AT76C50X_USB=m
  2.1676 +CONFIG_AIRO_CS=m
  2.1677 +CONFIG_PCMCIA_WL3501=m
  2.1678 +CONFIG_PRISM54=m
  2.1679 +CONFIG_USB_ZD1201=m
  2.1680 +CONFIG_USB_NET_RNDIS_WLAN=m
  2.1681 +CONFIG_RTL8180=m
  2.1682 +CONFIG_RTL8187=m
  2.1683 +CONFIG_RTL8187_LEDS=y
  2.1684 +CONFIG_ADM8211=m
  2.1685 +# CONFIG_MAC80211_HWSIM is not set
  2.1686 +CONFIG_MWL8K=m
  2.1687 +CONFIG_ATH_COMMON=m
  2.1688 +# CONFIG_ATH_DEBUG is not set
  2.1689 +CONFIG_ATH5K=m
  2.1690 +# CONFIG_ATH5K_DEBUG is not set
  2.1691 +CONFIG_ATH9K_HW=m
  2.1692 +CONFIG_ATH9K_COMMON=m
  2.1693 +CONFIG_ATH9K=m
  2.1694 +CONFIG_ATH9K_RATE_CONTROL=y
  2.1695 +CONFIG_ATH9K_HTC=m
  2.1696 +CONFIG_AR9170_USB=m
  2.1697 +CONFIG_AR9170_LEDS=y
  2.1698 +# CONFIG_CARL9170 is not set
  2.1699 +CONFIG_B43=m
  2.1700 +CONFIG_B43_PCI_AUTOSELECT=y
  2.1701 +CONFIG_B43_PCICORE_AUTOSELECT=y
  2.1702 +# CONFIG_B43_PCMCIA is not set
  2.1703 +# CONFIG_B43_SDIO is not set
  2.1704 +CONFIG_B43_PIO=y
  2.1705 +CONFIG_B43_PHY_LP=y
  2.1706 +CONFIG_B43_LEDS=y
  2.1707 +CONFIG_B43_HWRNG=y
  2.1708 +# CONFIG_B43_DEBUG is not set
  2.1709 +CONFIG_B43LEGACY=m
  2.1710 +CONFIG_B43LEGACY_PCI_AUTOSELECT=y
  2.1711 +CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
  2.1712 +CONFIG_B43LEGACY_LEDS=y
  2.1713 +CONFIG_B43LEGACY_HWRNG=y
  2.1714 +# CONFIG_B43LEGACY_DEBUG is not set
  2.1715 +CONFIG_B43LEGACY_DMA=y
  2.1716 +CONFIG_B43LEGACY_PIO=y
  2.1717 +CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
  2.1718 +# CONFIG_B43LEGACY_DMA_MODE is not set
  2.1719 +# CONFIG_B43LEGACY_PIO_MODE is not set
  2.1720 +# CONFIG_HOSTAP is not set
  2.1721 +CONFIG_IPW2100=m
  2.1722 +CONFIG_IPW2100_MONITOR=y
  2.1723 +# CONFIG_IPW2100_DEBUG is not set
  2.1724 +CONFIG_IPW2200=m
  2.1725 +CONFIG_IPW2200_MONITOR=y
  2.1726 +CONFIG_IPW2200_RADIOTAP=y
  2.1727 +CONFIG_IPW2200_PROMISCUOUS=y
  2.1728 +CONFIG_IPW2200_QOS=y
  2.1729 +# CONFIG_IPW2200_DEBUG is not set
  2.1730 +CONFIG_LIBIPW=m
  2.1731 +# CONFIG_LIBIPW_DEBUG is not set
  2.1732 +CONFIG_IWLWIFI=m
  2.1733 +
  2.1734 +#
  2.1735 +# Debugging Options
  2.1736 +#
  2.1737 +# CONFIG_IWLWIFI_DEBUG is not set
  2.1738 +CONFIG_IWLAGN=m
  2.1739 +CONFIG_IWL4965=y
  2.1740 +CONFIG_IWL5000=y
  2.1741 +CONFIG_IWL3945=m
  2.1742 +CONFIG_IWM=m
  2.1743 +# CONFIG_LIBERTAS is not set
  2.1744 +CONFIG_HERMES=m
  2.1745 +# CONFIG_HERMES_PRISM is not set
  2.1746 +CONFIG_HERMES_CACHE_FW_ON_INIT=y
  2.1747 +CONFIG_PLX_HERMES=m
  2.1748 +CONFIG_TMD_HERMES=m
  2.1749 +CONFIG_NORTEL_HERMES=m
  2.1750 +CONFIG_PCMCIA_HERMES=m
  2.1751 +CONFIG_PCMCIA_SPECTRUM=m
  2.1752 +CONFIG_ORINOCO_USB=m
  2.1753 +CONFIG_P54_COMMON=m
  2.1754 +CONFIG_P54_USB=m
  2.1755 +CONFIG_P54_PCI=m
  2.1756 +CONFIG_P54_LEDS=y
  2.1757 +CONFIG_RT2X00=m
  2.1758 +CONFIG_RT2400PCI=m
  2.1759 +CONFIG_RT2500PCI=m
  2.1760 +CONFIG_RT61PCI=m
  2.1761 +CONFIG_RT2800PCI_PCI=y
  2.1762 +# CONFIG_RT2800PCI is not set
  2.1763 +CONFIG_RT2500USB=m
  2.1764 +CONFIG_RT73USB=m
  2.1765 +CONFIG_RT2800USB=m
  2.1766 +CONFIG_RT2800USB_RT30XX=y
  2.1767 +CONFIG_RT2800USB_RT35XX=y
  2.1768 +CONFIG_RT2800USB_UNKNOWN=y
  2.1769 +CONFIG_RT2800_LIB=m
  2.1770 +CONFIG_RT2X00_LIB_PCI=m
  2.1771 +CONFIG_RT2X00_LIB_USB=m
  2.1772 +CONFIG_RT2X00_LIB=m
  2.1773 +CONFIG_RT2X00_LIB_HT=y
  2.1774 +CONFIG_RT2X00_LIB_FIRMWARE=y
  2.1775 +CONFIG_RT2X00_LIB_CRYPTO=y
  2.1776 +CONFIG_RT2X00_LIB_LEDS=y
  2.1777 +# CONFIG_RT2X00_DEBUG is not set
  2.1778 +CONFIG_WL1251=m
  2.1779 +CONFIG_WL1251_SDIO=m
  2.1780 +CONFIG_WL12XX=m
  2.1781 +CONFIG_WL1271=m
  2.1782 +CONFIG_WL1271_SDIO=m
  2.1783 +CONFIG_WL12XX_PLATFORM_DATA=y
  2.1784 +CONFIG_ZD1211RW=m
  2.1785 +# CONFIG_ZD1211RW_DEBUG is not set
  2.1786 +
  2.1787 +#
  2.1788 +# WiMAX Wireless Broadband devices
  2.1789 +#
  2.1790 +CONFIG_WIMAX_I2400M=m
  2.1791 +CONFIG_WIMAX_I2400M_USB=m
  2.1792 +CONFIG_WIMAX_I2400M_SDIO=m
  2.1793 +# CONFIG_WIMAX_IWMC3200_SDIO is not set
  2.1794 +CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8
  2.1795 +
  2.1796 +#
  2.1797 +# USB Network Adapters
  2.1798 +#
  2.1799 +# CONFIG_USB_CATC is not set
  2.1800 +# CONFIG_USB_KAWETH is not set
  2.1801 +# CONFIG_USB_PEGASUS is not set
  2.1802 +# CONFIG_USB_RTL8150 is not set
  2.1803 +CONFIG_USB_USBNET=m
  2.1804 +CONFIG_USB_NET_AX8817X=m
  2.1805 +CONFIG_USB_NET_CDCETHER=m
  2.1806 +CONFIG_USB_NET_CDC_EEM=m
  2.1807 +CONFIG_USB_NET_DM9601=m
  2.1808 +CONFIG_USB_NET_SMSC75XX=m
  2.1809 +# CONFIG_USB_NET_SMSC95XX is not set
  2.1810 +# CONFIG_USB_NET_GL620A is not set
  2.1811 +CONFIG_USB_NET_NET1080=m
  2.1812 +# CONFIG_USB_NET_PLUSB is not set
  2.1813 +# CONFIG_USB_NET_MCS7830 is not set
  2.1814 +CONFIG_USB_NET_RNDIS_HOST=m
  2.1815 +CONFIG_USB_NET_CDC_SUBSET=m
  2.1816 +# CONFIG_USB_ALI_M5632 is not set
  2.1817 +# CONFIG_USB_AN2720 is not set
  2.1818 +CONFIG_USB_BELKIN=y
  2.1819 +CONFIG_USB_ARMLINUX=y
  2.1820 +# CONFIG_USB_EPSON2888 is not set
  2.1821 +# CONFIG_USB_KC2190 is not set
  2.1822 +CONFIG_USB_NET_ZAURUS=m
  2.1823 +# CONFIG_USB_NET_CX82310_ETH is not set
  2.1824 +CONFIG_USB_HSO=m
  2.1825 +CONFIG_USB_NET_INT51X1=m
  2.1826 +CONFIG_USB_IPHETH=m
  2.1827 +# CONFIG_USB_SIERRA_NET is not set
  2.1828 +CONFIG_NET_PCMCIA=y
  2.1829 +CONFIG_PCMCIA_3C589=m
  2.1830 +CONFIG_PCMCIA_3C574=m
  2.1831 +CONFIG_PCMCIA_FMVJ18X=m
  2.1832 +CONFIG_PCMCIA_PCNET=m
  2.1833 +CONFIG_PCMCIA_NMCLAN=m
  2.1834 +CONFIG_PCMCIA_SMC91C92=m
  2.1835 +CONFIG_PCMCIA_XIRC2PS=m
  2.1836 +CONFIG_PCMCIA_AXNET=m
  2.1837 +# CONFIG_WAN is not set
  2.1838 +# CONFIG_ATM_DRIVERS is not set
  2.1839 +
  2.1840 +#
  2.1841 +# CAIF transport drivers
  2.1842 +#
  2.1843 +# CONFIG_FDDI is not set
  2.1844 +# CONFIG_HIPPI is not set
  2.1845 +# CONFIG_PLIP is not set
  2.1846 +CONFIG_PPP=y
  2.1847 +# CONFIG_PPP_MULTILINK is not set
  2.1848 +CONFIG_PPP_FILTER=y
  2.1849 +CONFIG_PPP_ASYNC=y
  2.1850 +# CONFIG_PPP_SYNC_TTY is not set
  2.1851 +CONFIG_PPP_DEFLATE=y
  2.1852 +CONFIG_PPP_BSDCOMP=y
  2.1853 +CONFIG_PPP_MPPE=y
  2.1854 +CONFIG_PPPOE=y
  2.1855 +CONFIG_PPPOATM=m
  2.1856 +# CONFIG_SLIP is not set
  2.1857 +CONFIG_SLHC=y
  2.1858 +# CONFIG_NET_FC is not set
  2.1859 +# CONFIG_NETCONSOLE is not set
  2.1860 +# CONFIG_NETPOLL is not set
  2.1861 +# CONFIG_NET_POLL_CONTROLLER is not set
  2.1862 +CONFIG_VIRTIO_NET=m
  2.1863 +CONFIG_VMXNET3=m
  2.1864 +CONFIG_ISDN=y
  2.1865 +CONFIG_ISDN_I4L=m
  2.1866 +CONFIG_ISDN_PPP=y
  2.1867 +# CONFIG_ISDN_PPP_VJ is not set
  2.1868 +# CONFIG_ISDN_MPP is not set
  2.1869 +# CONFIG_IPPP_FILTER is not set
  2.1870 +CONFIG_ISDN_PPP_BSDCOMP=m
  2.1871 +# CONFIG_ISDN_AUDIO is not set
  2.1872 +
  2.1873 +#
  2.1874 +# ISDN feature submodules
  2.1875 +#
  2.1876 +# CONFIG_ISDN_DIVERSION is not set
  2.1877 +
  2.1878 +#
  2.1879 +# ISDN4Linux hardware drivers
  2.1880 +#
  2.1881 +
  2.1882 +#
  2.1883 +# Passive cards
  2.1884 +#
  2.1885 +# CONFIG_ISDN_DRV_HISAX is not set
  2.1886 +
  2.1887 +#
  2.1888 +# Active cards
  2.1889 +#
  2.1890 +# CONFIG_ISDN_DRV_ICN is not set
  2.1891 +# CONFIG_ISDN_DRV_PCBIT is not set
  2.1892 +# CONFIG_ISDN_DRV_SC is not set
  2.1893 +# CONFIG_ISDN_DRV_ACT2000 is not set
  2.1894 +CONFIG_ISDN_CAPI=m
  2.1895 +CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
  2.1896 +CONFIG_CAPI_TRACE=y
  2.1897 +CONFIG_ISDN_CAPI_MIDDLEWARE=y
  2.1898 +CONFIG_ISDN_CAPI_CAPI20=m
  2.1899 +CONFIG_ISDN_CAPI_CAPIFS_BOOL=y
  2.1900 +CONFIG_ISDN_CAPI_CAPIFS=m
  2.1901 +# CONFIG_ISDN_CAPI_CAPIDRV is not set
  2.1902 +
  2.1903 +#
  2.1904 +# CAPI hardware drivers
  2.1905 +#
  2.1906 +CONFIG_CAPI_AVM=y
  2.1907 +CONFIG_ISDN_DRV_AVMB1_B1ISA=m
  2.1908 +CONFIG_ISDN_DRV_AVMB1_B1PCI=m
  2.1909 +CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y
  2.1910 +CONFIG_ISDN_DRV_AVMB1_T1ISA=m
  2.1911 +CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m
  2.1912 +CONFIG_ISDN_DRV_AVMB1_AVM_CS=m
  2.1913 +CONFIG_ISDN_DRV_AVMB1_T1PCI=m
  2.1914 +CONFIG_ISDN_DRV_AVMB1_C4=m
  2.1915 +CONFIG_CAPI_EICON=y
  2.1916 +CONFIG_ISDN_DIVAS=m
  2.1917 +CONFIG_ISDN_DIVAS_BRIPCI=y
  2.1918 +CONFIG_ISDN_DIVAS_PRIPCI=y
  2.1919 +CONFIG_ISDN_DIVAS_DIVACAPI=m
  2.1920 +CONFIG_ISDN_DIVAS_USERIDI=m
  2.1921 +CONFIG_ISDN_DIVAS_MAINT=m
  2.1922 +# CONFIG_ISDN_DRV_GIGASET is not set
  2.1923 +# CONFIG_HYSDN is not set
  2.1924 +CONFIG_MISDN=m
  2.1925 +CONFIG_MISDN_DSP=m
  2.1926 +CONFIG_MISDN_L1OIP=m
  2.1927 +
  2.1928 +#
  2.1929 +# mISDN hardware drivers
  2.1930 +#
  2.1931 +CONFIG_MISDN_HFCPCI=m
  2.1932 +CONFIG_MISDN_HFCMULTI=m
  2.1933 +# CONFIG_MISDN_HFCUSB is not set
  2.1934 +CONFIG_MISDN_AVMFRITZ=m
  2.1935 +CONFIG_MISDN_SPEEDFAX=m
  2.1936 +CONFIG_MISDN_INFINEON=m
  2.1937 +CONFIG_MISDN_W6692=m
  2.1938 +CONFIG_MISDN_NETJET=m
  2.1939 +CONFIG_MISDN_IPAC=m
  2.1940 +CONFIG_MISDN_ISAR=m
  2.1941 +CONFIG_ISDN_HDLC=m
  2.1942 +# CONFIG_PHONE is not set
  2.1943 +
  2.1944 +#
  2.1945 +# Input device support
  2.1946 +#
  2.1947 +CONFIG_INPUT=y
  2.1948 +# CONFIG_INPUT_FF_MEMLESS is not set
  2.1949 +CONFIG_INPUT_POLLDEV=m
  2.1950 +CONFIG_INPUT_SPARSEKMAP=m
  2.1951 +
  2.1952 +#
  2.1953 +# Userland interfaces
  2.1954 +#
  2.1955 +CONFIG_INPUT_MOUSEDEV=y
  2.1956 +CONFIG_INPUT_MOUSEDEV_PSAUX=y
  2.1957 +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
  2.1958 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
  2.1959 +CONFIG_INPUT_JOYDEV=y
  2.1960 +CONFIG_INPUT_EVDEV=y
  2.1961 +# CONFIG_INPUT_EVBUG is not set
  2.1962 +
  2.1963 +#
  2.1964 +# Input Device Drivers
  2.1965 +#
  2.1966 +CONFIG_INPUT_KEYBOARD=y
  2.1967 +# CONFIG_KEYBOARD_ADP5588 is not set
  2.1968 +CONFIG_KEYBOARD_ATKBD=y
  2.1969 +# CONFIG_KEYBOARD_QT2160 is not set
  2.1970 +# CONFIG_KEYBOARD_LKKBD is not set
  2.1971 +# CONFIG_KEYBOARD_GPIO is not set
  2.1972 +# CONFIG_KEYBOARD_GPIO_POLLED is not set
  2.1973 +# CONFIG_KEYBOARD_TCA6416 is not set
  2.1974 +# CONFIG_KEYBOARD_MATRIX is not set
  2.1975 +# CONFIG_KEYBOARD_LM8323 is not set
  2.1976 +# CONFIG_KEYBOARD_MAX7359 is not set
  2.1977 +# CONFIG_KEYBOARD_MCS is not set
  2.1978 +# CONFIG_KEYBOARD_NEWTON is not set
  2.1979 +# CONFIG_KEYBOARD_OPENCORES is not set
  2.1980 +# CONFIG_KEYBOARD_STOWAWAY is not set
  2.1981 +# CONFIG_KEYBOARD_SUNKBD is not set
  2.1982 +# CONFIG_KEYBOARD_XTKBD is not set
  2.1983 +CONFIG_INPUT_MOUSE=y
  2.1984 +CONFIG_MOUSE_PS2=y
  2.1985 +CONFIG_MOUSE_PS2_ALPS=y
  2.1986 +CONFIG_MOUSE_PS2_LOGIPS2PP=y
  2.1987 +CONFIG_MOUSE_PS2_SYNAPTICS=y
  2.1988 +CONFIG_MOUSE_PS2_LIFEBOOK=y
  2.1989 +CONFIG_MOUSE_PS2_TRACKPOINT=y
  2.1990 +# CONFIG_MOUSE_PS2_ELANTECH is not set
  2.1991 +# CONFIG_MOUSE_PS2_SENTELIC is not set
  2.1992 +# CONFIG_MOUSE_PS2_TOUCHKIT is not set
  2.1993 +CONFIG_MOUSE_SERIAL=m
  2.1994 +# CONFIG_MOUSE_APPLETOUCH is not set
  2.1995 +# CONFIG_MOUSE_BCM5974 is not set
  2.1996 +CONFIG_MOUSE_INPORT=m
  2.1997 +# CONFIG_MOUSE_ATIXL is not set
  2.1998 +CONFIG_MOUSE_LOGIBM=m
  2.1999 +CONFIG_MOUSE_PC110PAD=m
  2.2000 +# CONFIG_MOUSE_VSXXXAA is not set
  2.2001 +# CONFIG_MOUSE_GPIO is not set
  2.2002 +# CONFIG_MOUSE_SYNAPTICS_I2C is not set
  2.2003 +CONFIG_INPUT_JOYSTICK=y
  2.2004 +CONFIG_JOYSTICK_ANALOG=m
  2.2005 +# CONFIG_JOYSTICK_A3D is not set
  2.2006 +# CONFIG_JOYSTICK_ADI is not set
  2.2007 +# CONFIG_JOYSTICK_COBRA is not set
  2.2008 +# CONFIG_JOYSTICK_GF2K is not set
  2.2009 +# CONFIG_JOYSTICK_GRIP is not set
  2.2010 +# CONFIG_JOYSTICK_GRIP_MP is not set
  2.2011 +# CONFIG_JOYSTICK_GUILLEMOT is not set
  2.2012 +# CONFIG_JOYSTICK_INTERACT is not set
  2.2013 +CONFIG_JOYSTICK_SIDEWINDER=m
  2.2014 +# CONFIG_JOYSTICK_TMDC is not set
  2.2015 +# CONFIG_JOYSTICK_IFORCE is not set
  2.2016 +# CONFIG_JOYSTICK_WARRIOR is not set
  2.2017 +# CONFIG_JOYSTICK_MAGELLAN is not set
  2.2018 +# CONFIG_JOYSTICK_SPACEORB is not set
  2.2019 +# CONFIG_JOYSTICK_SPACEBALL is not set
  2.2020 +# CONFIG_JOYSTICK_STINGER is not set
  2.2021 +# CONFIG_JOYSTICK_TWIDJOY is not set
  2.2022 +# CONFIG_JOYSTICK_ZHENHUA is not set
  2.2023 +# CONFIG_JOYSTICK_DB9 is not set
  2.2024 +# CONFIG_JOYSTICK_GAMECON is not set
  2.2025 +# CONFIG_JOYSTICK_TURBOGRAFX is not set
  2.2026 +# CONFIG_JOYSTICK_JOYDUMP is not set
  2.2027 +CONFIG_JOYSTICK_XPAD=m
  2.2028 +# CONFIG_JOYSTICK_XPAD_FF is not set
  2.2029 +# CONFIG_JOYSTICK_XPAD_LEDS is not set
  2.2030 +CONFIG_INPUT_TABLET=y
  2.2031 +# CONFIG_TABLET_USB_ACECAD is not set
  2.2032 +# CONFIG_TABLET_USB_AIPTEK is not set
  2.2033 +# CONFIG_TABLET_USB_GTCO is not set
  2.2034 +# CONFIG_TABLET_USB_HANWANG is not set
  2.2035 +# CONFIG_TABLET_USB_KBTAB is not set
  2.2036 +CONFIG_TABLET_USB_WACOM=m
  2.2037 +CONFIG_INPUT_TOUCHSCREEN=y
  2.2038 +CONFIG_TOUCHSCREEN_AD7879=m
  2.2039 +CONFIG_TOUCHSCREEN_AD7879_I2C=m
  2.2040 +# CONFIG_TOUCHSCREEN_BU21013 is not set
  2.2041 +CONFIG_TOUCHSCREEN_CY8CTMG110=m
  2.2042 +# CONFIG_TOUCHSCREEN_DYNAPRO is not set
  2.2043 +CONFIG_TOUCHSCREEN_HAMPSHIRE=m
  2.2044 +# CONFIG_TOUCHSCREEN_EETI is not set
  2.2045 +CONFIG_TOUCHSCREEN_FUJITSU=m
  2.2046 +CONFIG_TOUCHSCREEN_GUNZE=m
  2.2047 +CONFIG_TOUCHSCREEN_ELO=m
  2.2048 +CONFIG_TOUCHSCREEN_WACOM_W8001=m
  2.2049 +# CONFIG_TOUCHSCREEN_MCS5000 is not set
  2.2050 +CONFIG_TOUCHSCREEN_MTOUCH=m
  2.2051 +CONFIG_TOUCHSCREEN_INEXIO=m
  2.2052 +CONFIG_TOUCHSCREEN_MK712=m
  2.2053 +CONFIG_TOUCHSCREEN_HTCPEN=m
  2.2054 +CONFIG_TOUCHSCREEN_PENMOUNT=m
  2.2055 +CONFIG_TOUCHSCREEN_QT602240=m
  2.2056 +CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
  2.2057 +CONFIG_TOUCHSCREEN_TOUCHWIN=m
  2.2058 +CONFIG_TOUCHSCREEN_WM97XX=m
  2.2059 +CONFIG_TOUCHSCREEN_WM9705=y
  2.2060 +CONFIG_TOUCHSCREEN_WM9712=y
  2.2061 +CONFIG_TOUCHSCREEN_WM9713=y
  2.2062 +CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
  2.2063 +CONFIG_TOUCHSCREEN_USB_EGALAX=y
  2.2064 +CONFIG_TOUCHSCREEN_USB_PANJIT=y
  2.2065 +CONFIG_TOUCHSCREEN_USB_3M=y
  2.2066 +CONFIG_TOUCHSCREEN_USB_ITM=y
  2.2067 +CONFIG_TOUCHSCREEN_USB_ETURBO=y
  2.2068 +CONFIG_TOUCHSCREEN_USB_GUNZE=y
  2.2069 +CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y
  2.2070 +CONFIG_TOUCHSCREEN_USB_IRTOUCH=y
  2.2071 +CONFIG_TOUCHSCREEN_USB_IDEALTEK=y
  2.2072 +CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
  2.2073 +CONFIG_TOUCHSCREEN_USB_GOTOP=y
  2.2074 +CONFIG_TOUCHSCREEN_USB_JASTEC=y
  2.2075 +CONFIG_TOUCHSCREEN_USB_E2I=y
  2.2076 +CONFIG_TOUCHSCREEN_USB_ZYTRONIC=y
  2.2077 +CONFIG_TOUCHSCREEN_USB_ETT_TC45USB=y
  2.2078 +CONFIG_TOUCHSCREEN_USB_NEXIO=y
  2.2079 +CONFIG_TOUCHSCREEN_TOUCHIT213=m
  2.2080 +CONFIG_TOUCHSCREEN_TSC2007=m
  2.2081 +CONFIG_TOUCHSCREEN_TPS6507X=m
  2.2082 +CONFIG_INPUT_MISC=y
  2.2083 +CONFIG_INPUT_AD714X=m
  2.2084 +CONFIG_INPUT_AD714X_I2C=m
  2.2085 +CONFIG_INPUT_PCSPKR=y
  2.2086 +# CONFIG_INPUT_APANEL is not set
  2.2087 +# CONFIG_INPUT_WISTRON_BTNS is not set
  2.2088 +# CONFIG_INPUT_ATLAS_BTNS is not set
  2.2089 +CONFIG_INPUT_ATI_REMOTE=m
  2.2090 +CONFIG_INPUT_ATI_REMOTE2=m
  2.2091 +# CONFIG_INPUT_KEYSPAN_REMOTE is not set
  2.2092 +# CONFIG_INPUT_POWERMATE is not set
  2.2093 +# CONFIG_INPUT_YEALINK is not set
  2.2094 +# CONFIG_INPUT_CM109 is not set
  2.2095 +CONFIG_INPUT_UINPUT=m
  2.2096 +# CONFIG_INPUT_WINBOND_CIR is not set
  2.2097 +CONFIG_INPUT_PCF8574=m
  2.2098 +# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
  2.2099 +CONFIG_INPUT_ADXL34X=m
  2.2100 +CONFIG_INPUT_ADXL34X_I2C=m
  2.2101 +
  2.2102 +#
  2.2103 +# Hardware I/O ports
  2.2104 +#
  2.2105 +CONFIG_SERIO=y
  2.2106 +CONFIG_SERIO_I8042=y
  2.2107 +CONFIG_SERIO_SERPORT=y
  2.2108 +# CONFIG_SERIO_CT82C710 is not set
  2.2109 +# CONFIG_SERIO_PARKBD is not set
  2.2110 +CONFIG_SERIO_PCIPS2=y
  2.2111 +CONFIG_SERIO_LIBPS2=y
  2.2112 +CONFIG_SERIO_RAW=y
  2.2113 +# CONFIG_SERIO_ALTERA_PS2 is not set
  2.2114 +# CONFIG_SERIO_PS2MULT is not set
  2.2115 +CONFIG_GAMEPORT=m
  2.2116 +CONFIG_GAMEPORT_NS558=m
  2.2117 +# CONFIG_GAMEPORT_L4 is not set
  2.2118 +CONFIG_GAMEPORT_EMU10K1=m
  2.2119 +# CONFIG_GAMEPORT_FM801 is not set
  2.2120 +
  2.2121 +#
  2.2122 +# Character devices
  2.2123 +#
  2.2124 +CONFIG_VT=y
  2.2125 +CONFIG_CONSOLE_TRANSLATIONS=y
  2.2126 +CONFIG_VT_CONSOLE=y
  2.2127 +CONFIG_HW_CONSOLE=y
  2.2128 +# CONFIG_VT_HW_CONSOLE_BINDING is not set
  2.2129 +CONFIG_DEVKMEM=y
  2.2130 +# CONFIG_SERIAL_NONSTANDARD is not set
  2.2131 +# CONFIG_N_GSM is not set
  2.2132 +CONFIG_NOZOMI=m
  2.2133 +
  2.2134 +#
  2.2135 +# Serial drivers
  2.2136 +#
  2.2137 +CONFIG_SERIAL_8250=y
  2.2138 +# CONFIG_SERIAL_8250_CONSOLE is not set
  2.2139 +CONFIG_FIX_EARLYCON_MEM=y
  2.2140 +CONFIG_SERIAL_8250_PCI=y
  2.2141 +CONFIG_SERIAL_8250_PNP=y
  2.2142 +CONFIG_SERIAL_8250_CS=m
  2.2143 +CONFIG_SERIAL_8250_NR_UARTS=4
  2.2144 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4
  2.2145 +# CONFIG_SERIAL_8250_EXTENDED is not set
  2.2146 +
  2.2147 +#
  2.2148 +# Non-8250 serial port support
  2.2149 +#
  2.2150 +# CONFIG_SERIAL_MFD_HSU is not set
  2.2151 +CONFIG_SERIAL_CORE=y
  2.2152 +# CONFIG_SERIAL_JSM is not set
  2.2153 +# CONFIG_SERIAL_TIMBERDALE is not set
  2.2154 +# CONFIG_SERIAL_ALTERA_JTAGUART is not set
  2.2155 +# CONFIG_SERIAL_ALTERA_UART is not set
  2.2156 +CONFIG_UNIX98_PTYS=y
  2.2157 +# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
  2.2158 +# CONFIG_LEGACY_PTYS is not set
  2.2159 +CONFIG_PRINTER=m
  2.2160 +# CONFIG_LP_CONSOLE is not set
  2.2161 +# CONFIG_PPDEV is not set
  2.2162 +CONFIG_HVC_DRIVER=y
  2.2163 +CONFIG_VIRTIO_CONSOLE=y
  2.2164 +# CONFIG_IPMI_HANDLER is not set
  2.2165 +CONFIG_HW_RANDOM=y
  2.2166 +# CONFIG_HW_RANDOM_TIMERIOMEM is not set
  2.2167 +CONFIG_HW_RANDOM_INTEL=y
  2.2168 +CONFIG_HW_RANDOM_AMD=y
  2.2169 +CONFIG_HW_RANDOM_GEODE=y
  2.2170 +CONFIG_HW_RANDOM_VIA=y
  2.2171 +CONFIG_HW_RANDOM_VIRTIO=m
  2.2172 +CONFIG_NVRAM=y
  2.2173 +CONFIG_RTC=m
  2.2174 +CONFIG_GEN_RTC=m
  2.2175 +# CONFIG_GEN_RTC_X is not set
  2.2176 +# CONFIG_DTLK is not set
  2.2177 +# CONFIG_R3964 is not set
  2.2178 +# CONFIG_APPLICOM is not set
  2.2179 +# CONFIG_SONYPI is not set
  2.2180 +
  2.2181 +#
  2.2182 +# PCMCIA character devices
  2.2183 +#
  2.2184 +# CONFIG_SYNCLINK_CS is not set
  2.2185 +# CONFIG_CARDMAN_4000 is not set
  2.2186 +# CONFIG_CARDMAN_4040 is not set
  2.2187 +# CONFIG_IPWIRELESS is not set
  2.2188 +CONFIG_MWAVE=m
  2.2189 +# CONFIG_PC8736x_GPIO is not set
  2.2190 +# CONFIG_NSC_GPIO is not set
  2.2191 +# CONFIG_CS5535_GPIO is not set
  2.2192 +# CONFIG_RAW_DRIVER is not set
  2.2193 +# CONFIG_HPET is not set
  2.2194 +# CONFIG_HANGCHECK_TIMER is not set
  2.2195 +# CONFIG_TCG_TPM is not set
  2.2196 +# CONFIG_TELCLOCK is not set
  2.2197 +CONFIG_DEVPORT=y
  2.2198 +# CONFIG_RAMOOPS is not set
  2.2199 +CONFIG_I2C=m
  2.2200 +CONFIG_I2C_BOARDINFO=y
  2.2201 +CONFIG_I2C_COMPAT=y
  2.2202 +# CONFIG_I2C_CHARDEV is not set
  2.2203 +# CONFIG_I2C_MUX is not set
  2.2204 +CONFIG_I2C_HELPER_AUTO=y
  2.2205 +CONFIG_I2C_ALGOBIT=m
  2.2206 +
  2.2207 +#
  2.2208 +# I2C Hardware Bus support
  2.2209 +#
  2.2210 +
  2.2211 +#
  2.2212 +# PC SMBus host controller drivers
  2.2213 +#
  2.2214 +# CONFIG_I2C_ALI1535 is not set
  2.2215 +# CONFIG_I2C_ALI1563 is not set
  2.2216 +# CONFIG_I2C_ALI15X3 is not set
  2.2217 +# CONFIG_I2C_AMD756 is not set
  2.2218 +# CONFIG_I2C_AMD8111 is not set
  2.2219 +# CONFIG_I2C_I801 is not set
  2.2220 +# CONFIG_I2C_ISCH is not set
  2.2221 +# CONFIG_I2C_PIIX4 is not set
  2.2222 +# CONFIG_I2C_NFORCE2 is not set
  2.2223 +# CONFIG_I2C_SIS5595 is not set
  2.2224 +# CONFIG_I2C_SIS630 is not set
  2.2225 +# CONFIG_I2C_SIS96X is not set
  2.2226 +# CONFIG_I2C_VIA is not set
  2.2227 +# CONFIG_I2C_VIAPRO is not set
  2.2228 +
  2.2229 +#
  2.2230 +# ACPI drivers
  2.2231 +#
  2.2232 +# CONFIG_I2C_SCMI is not set
  2.2233 +
  2.2234 +#
  2.2235 +# I2C system bus drivers (mostly embedded / system-on-chip)
  2.2236 +#
  2.2237 +# CONFIG_I2C_GPIO is not set
  2.2238 +# CONFIG_I2C_INTEL_MID is not set
  2.2239 +# CONFIG_I2C_OCORES is not set
  2.2240 +# CONFIG_I2C_PCA_PLATFORM is not set
  2.2241 +# CONFIG_I2C_SIMTEC is not set
  2.2242 +# CONFIG_I2C_XILINX is not set
  2.2243 +
  2.2244 +#
  2.2245 +# External I2C/SMBus adapter drivers
  2.2246 +#
  2.2247 +# CONFIG_I2C_PARPORT is not set
  2.2248 +# CONFIG_I2C_PARPORT_LIGHT is not set
  2.2249 +# CONFIG_I2C_TAOS_EVM is not set
  2.2250 +# CONFIG_I2C_TINY_USB is not set
  2.2251 +
  2.2252 +#
  2.2253 +# Other I2C/SMBus bus drivers
  2.2254 +#
  2.2255 +# CONFIG_I2C_PCA_ISA is not set
  2.2256 +# CONFIG_I2C_STUB is not set
  2.2257 +# CONFIG_SCx200_ACB is not set
  2.2258 +# CONFIG_I2C_DEBUG_CORE is not set
  2.2259 +# CONFIG_I2C_DEBUG_ALGO is not set
  2.2260 +# CONFIG_I2C_DEBUG_BUS is not set
  2.2261 +# CONFIG_SPI is not set
  2.2262 +
  2.2263 +#
  2.2264 +# PPS support
  2.2265 +#
  2.2266 +# CONFIG_PPS is not set
  2.2267 +CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
  2.2268 +CONFIG_GPIOLIB=y
  2.2269 +# CONFIG_GPIO_SYSFS is not set
  2.2270 +
  2.2271 +#
  2.2272 +# Memory mapped GPIO expanders:
  2.2273 +#
  2.2274 +# CONFIG_GPIO_BASIC_MMIO is not set
  2.2275 +# CONFIG_GPIO_IT8761E is not set
  2.2276 +# CONFIG_GPIO_SCH is not set
  2.2277 +# CONFIG_GPIO_VX855 is not set
  2.2278 +
  2.2279 +#
  2.2280 +# I2C GPIO expanders:
  2.2281 +#
  2.2282 +# CONFIG_GPIO_MAX7300 is not set
  2.2283 +# CONFIG_GPIO_MAX732X is not set
  2.2284 +# CONFIG_GPIO_PCA953X is not set
  2.2285 +# CONFIG_GPIO_PCF857X is not set
  2.2286 +# CONFIG_GPIO_ADP5588 is not set
  2.2287 +
  2.2288 +#
  2.2289 +# PCI GPIO expanders:
  2.2290 +#
  2.2291 +# CONFIG_GPIO_CS5535 is not set
  2.2292 +CONFIG_GPIO_BT8XX=m
  2.2293 +# CONFIG_GPIO_LANGWELL is not set
  2.2294 +# CONFIG_GPIO_PCH is not set
  2.2295 +# CONFIG_GPIO_RDC321X is not set
  2.2296 +
  2.2297 +#
  2.2298 +# SPI GPIO expanders:
  2.2299 +#
  2.2300 +
  2.2301 +#
  2.2302 +# AC97 GPIO expanders:
  2.2303 +#
  2.2304 +
  2.2305 +#
  2.2306 +# MODULbus GPIO expanders:
  2.2307 +#
  2.2308 +# CONFIG_W1 is not set
  2.2309 +CONFIG_POWER_SUPPLY=y
  2.2310 +# CONFIG_POWER_SUPPLY_DEBUG is not set
  2.2311 +# CONFIG_PDA_POWER is not set
  2.2312 +# CONFIG_TEST_POWER is not set
  2.2313 +# CONFIG_BATTERY_DS2782 is not set
  2.2314 +# CONFIG_BATTERY_BQ20Z75 is not set
  2.2315 +# CONFIG_BATTERY_BQ27x00 is not set
  2.2316 +# CONFIG_BATTERY_MAX17040 is not set
  2.2317 +CONFIG_HWMON=m
  2.2318 +CONFIG_HWMON_VID=m
  2.2319 +# CONFIG_HWMON_DEBUG_CHIP is not set
  2.2320 +
  2.2321 +#
  2.2322 +# Native drivers
  2.2323 +#
  2.2324 +CONFIG_SENSORS_ABITUGURU=m
  2.2325 +CONFIG_SENSORS_ABITUGURU3=m
  2.2326 +CONFIG_SENSORS_AD7414=m
  2.2327 +CONFIG_SENSORS_AD7418=m
  2.2328 +CONFIG_SENSORS_ADM1021=m
  2.2329 +CONFIG_SENSORS_ADM1025=m
  2.2330 +CONFIG_SENSORS_ADM1026=m
  2.2331 +CONFIG_SENSORS_ADM1029=m
  2.2332 +CONFIG_SENSORS_ADM1031=m
  2.2333 +CONFIG_SENSORS_ADM9240=m
  2.2334 +CONFIG_SENSORS_ADT7411=m
  2.2335 +CONFIG_SENSORS_ADT7462=m
  2.2336 +CONFIG_SENSORS_ADT7470=m
  2.2337 +CONFIG_SENSORS_ADT7475=m
  2.2338 +CONFIG_SENSORS_ASC7621=m
  2.2339 +CONFIG_SENSORS_K8TEMP=m
  2.2340 +CONFIG_SENSORS_K10TEMP=m
  2.2341 +CONFIG_SENSORS_ASB100=m
  2.2342 +CONFIG_SENSORS_ATXP1=m
  2.2343 +CONFIG_SENSORS_DS1621=m
  2.2344 +CONFIG_SENSORS_I5K_AMB=m
  2.2345 +CONFIG_SENSORS_F71805F=m
  2.2346 +CONFIG_SENSORS_F71882FG=m
  2.2347 +CONFIG_SENSORS_F75375S=m
  2.2348 +CONFIG_SENSORS_FSCHMD=m
  2.2349 +CONFIG_SENSORS_G760A=m
  2.2350 +CONFIG_SENSORS_GL518SM=m
  2.2351 +CONFIG_SENSORS_GL520SM=m
  2.2352 +CONFIG_SENSORS_GPIO_FAN=m
  2.2353 +CONFIG_SENSORS_CORETEMP=m
  2.2354 +CONFIG_SENSORS_PKGTEMP=m
  2.2355 +CONFIG_SENSORS_IT87=m
  2.2356 +CONFIG_SENSORS_JC42=m
  2.2357 +CONFIG_SENSORS_LM63=m
  2.2358 +CONFIG_SENSORS_LM73=m
  2.2359 +CONFIG_SENSORS_LM75=m
  2.2360 +CONFIG_SENSORS_LM77=m
  2.2361 +CONFIG_SENSORS_LM78=m
  2.2362 +CONFIG_SENSORS_LM80=m
  2.2363 +CONFIG_SENSORS_LM83=m
  2.2364 +CONFIG_SENSORS_LM85=m
  2.2365 +CONFIG_SENSORS_LM87=m
  2.2366 +CONFIG_SENSORS_LM90=m
  2.2367 +CONFIG_SENSORS_LM92=m
  2.2368 +CONFIG_SENSORS_LM93=m
  2.2369 +CONFIG_SENSORS_LTC4215=m
  2.2370 +CONFIG_SENSORS_LTC4245=m
  2.2371 +CONFIG_SENSORS_LTC4261=m
  2.2372 +CONFIG_SENSORS_LM95241=m
  2.2373 +CONFIG_SENSORS_MAX1619=m
  2.2374 +CONFIG_SENSORS_MAX6650=m
  2.2375 +CONFIG_SENSORS_PC87360=m
  2.2376 +CONFIG_SENSORS_PC87427=m
  2.2377 +CONFIG_SENSORS_PCF8591=m
  2.2378 +CONFIG_SENSORS_SHT15=m
  2.2379 +CONFIG_SENSORS_SIS5595=m
  2.2380 +CONFIG_SENSORS_SMM665=m
  2.2381 +CONFIG_SENSORS_DME1737=m
  2.2382 +CONFIG_SENSORS_EMC1403=m
  2.2383 +CONFIG_SENSORS_EMC2103=m
  2.2384 +CONFIG_SENSORS_SMSC47M1=m
  2.2385 +CONFIG_SENSORS_SMSC47M192=m
  2.2386 +CONFIG_SENSORS_SMSC47B397=m
  2.2387 +CONFIG_SENSORS_ADS7828=m
  2.2388 +CONFIG_SENSORS_AMC6821=m
  2.2389 +CONFIG_SENSORS_THMC50=m
  2.2390 +CONFIG_SENSORS_TMP102=m
  2.2391 +CONFIG_SENSORS_TMP401=m
  2.2392 +CONFIG_SENSORS_TMP421=m
  2.2393 +CONFIG_SENSORS_VIA_CPUTEMP=m
  2.2394 +CONFIG_SENSORS_VIA686A=m
  2.2395 +CONFIG_SENSORS_VT1211=m
  2.2396 +CONFIG_SENSORS_VT8231=m
  2.2397 +CONFIG_SENSORS_W83781D=m
  2.2398 +CONFIG_SENSORS_W83791D=m
  2.2399 +CONFIG_SENSORS_W83792D=m
  2.2400 +CONFIG_SENSORS_W83793=m
  2.2401 +CONFIG_SENSORS_W83795=m
  2.2402 +# CONFIG_SENSORS_W83795_FANCTRL is not set
  2.2403 +CONFIG_SENSORS_W83L785TS=m
  2.2404 +CONFIG_SENSORS_W83L786NG=m
  2.2405 +CONFIG_SENSORS_W83627HF=m
  2.2406 +CONFIG_SENSORS_W83627EHF=m
  2.2407 +CONFIG_SENSORS_LIS3_I2C=m
  2.2408 +CONFIG_SENSORS_APPLESMC=m
  2.2409 +
  2.2410 +#
  2.2411 +# ACPI drivers
  2.2412 +#
  2.2413 +# CONFIG_SENSORS_ATK0110 is not set
  2.2414 +# CONFIG_SENSORS_LIS3LV02D is not set
  2.2415 +CONFIG_THERMAL=y
  2.2416 +CONFIG_WATCHDOG=y
  2.2417 +# CONFIG_WATCHDOG_NOWAYOUT is not set
  2.2418 +
  2.2419 +#
  2.2420 +# Watchdog Device Drivers
  2.2421 +#
  2.2422 +CONFIG_SOFT_WATCHDOG=m
  2.2423 +# CONFIG_ACQUIRE_WDT is not set
  2.2424 +# CONFIG_ADVANTECH_WDT is not set
  2.2425 +# CONFIG_ALIM1535_WDT is not set
  2.2426 +# CONFIG_ALIM7101_WDT is not set
  2.2427 +# CONFIG_F71808E_WDT is not set
  2.2428 +# CONFIG_SC520_WDT is not set
  2.2429 +# CONFIG_SBC_FITPC2_WATCHDOG is not set
  2.2430 +# CONFIG_EUROTECH_WDT is not set
  2.2431 +# CONFIG_IB700_WDT is not set
  2.2432 +# CONFIG_IBMASR is not set
  2.2433 +# CONFIG_WAFER_WDT is not set
  2.2434 +# CONFIG_I6300ESB_WDT is not set
  2.2435 +# CONFIG_ITCO_WDT is not set
  2.2436 +# CONFIG_IT8712F_WDT is not set
  2.2437 +# CONFIG_IT87_WDT is not set
  2.2438 +# CONFIG_HP_WATCHDOG is not set
  2.2439 +# CONFIG_SC1200_WDT is not set
  2.2440 +# CONFIG_PC87413_WDT is not set
  2.2441 +# CONFIG_60XX_WDT is not set
  2.2442 +# CONFIG_SBC8360_WDT is not set
  2.2443 +# CONFIG_SBC7240_WDT is not set
  2.2444 +# CONFIG_CPU5_WDT is not set
  2.2445 +# CONFIG_SMSC_SCH311X_WDT is not set
  2.2446 +# CONFIG_SMSC37B787_WDT is not set
  2.2447 +# CONFIG_W83627HF_WDT is not set
  2.2448 +# CONFIG_W83697HF_WDT is not set
  2.2449 +# CONFIG_W83697UG_WDT is not set
  2.2450 +# CONFIG_W83877F_WDT is not set
  2.2451 +# CONFIG_W83977F_WDT is not set
  2.2452 +# CONFIG_MACHZ_WDT is not set
  2.2453 +# CONFIG_SBC_EPX_C3_WATCHDOG is not set
  2.2454 +
  2.2455 +#
  2.2456 +# ISA-based Watchdog Cards
  2.2457 +#
  2.2458 +# CONFIG_PCWATCHDOG is not set
  2.2459 +# CONFIG_MIXCOMWD is not set
  2.2460 +# CONFIG_WDT is not set
  2.2461 +
  2.2462 +#
  2.2463 +# PCI-based Watchdog Cards
  2.2464 +#
  2.2465 +# CONFIG_PCIPCWATCHDOG is not set
  2.2466 +# CONFIG_WDTPCI is not set
  2.2467 +
  2.2468 +#
  2.2469 +# USB-based Watchdog Cards
  2.2470 +#
  2.2471 +# CONFIG_USBPCWATCHDOG is not set
  2.2472 +CONFIG_SSB_POSSIBLE=y
  2.2473 +
  2.2474 +#
  2.2475 +# Sonics Silicon Backplane
  2.2476 +#
  2.2477 +CONFIG_SSB=m
  2.2478 +CONFIG_SSB_SPROM=y
  2.2479 +CONFIG_SSB_BLOCKIO=y
  2.2480 +CONFIG_SSB_PCIHOST_POSSIBLE=y
  2.2481 +CONFIG_SSB_PCIHOST=y
  2.2482 +CONFIG_SSB_B43_PCI_BRIDGE=y
  2.2483 +CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
  2.2484 +# CONFIG_SSB_PCMCIAHOST is not set
  2.2485 +CONFIG_SSB_SDIOHOST_POSSIBLE=y
  2.2486 +# CONFIG_SSB_SDIOHOST is not set
  2.2487 +# CONFIG_SSB_DEBUG is not set
  2.2488 +CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
  2.2489 +CONFIG_SSB_DRIVER_PCICORE=y
  2.2490 +# CONFIG_MFD_SUPPORT is not set
  2.2491 +# CONFIG_REGULATOR is not set
  2.2492 +# CONFIG_MEDIA_SUPPORT is not set
  2.2493 +
  2.2494 +#
  2.2495 +# Graphics support
  2.2496 +#
  2.2497 +CONFIG_AGP=m
  2.2498 +CONFIG_AGP_ALI=m
  2.2499 +CONFIG_AGP_ATI=m
  2.2500 +CONFIG_AGP_AMD=m
  2.2501 +CONFIG_AGP_AMD64=m
  2.2502 +CONFIG_AGP_INTEL=m
  2.2503 +CONFIG_AGP_NVIDIA=m
  2.2504 +CONFIG_AGP_SIS=m
  2.2505 +CONFIG_AGP_SWORKS=m
  2.2506 +CONFIG_AGP_VIA=m
  2.2507 +CONFIG_AGP_EFFICEON=m
  2.2508 +CONFIG_VGA_ARB=y
  2.2509 +CONFIG_VGA_ARB_MAX_GPUS=16
  2.2510 +# CONFIG_VGA_SWITCHEROO is not set
  2.2511 +CONFIG_DRM=m
  2.2512 +CONFIG_DRM_KMS_HELPER=m
  2.2513 +CONFIG_DRM_TTM=m
  2.2514 +# CONFIG_DRM_TDFX is not set
  2.2515 +CONFIG_DRM_R128=m
  2.2516 +CONFIG_DRM_RADEON=m
  2.2517 +CONFIG_DRM_RADEON_KMS=y
  2.2518 +CONFIG_DRM_I810=m
  2.2519 +CONFIG_DRM_I830=m
  2.2520 +CONFIG_DRM_I915=m
  2.2521 +CONFIG_DRM_I915_KMS=y
  2.2522 +CONFIG_DRM_MGA=m
  2.2523 +CONFIG_DRM_SIS=m
  2.2524 +CONFIG_DRM_VIA=m
  2.2525 +CONFIG_DRM_SAVAGE=m
  2.2526 +# CONFIG_STUB_POULSBO is not set
  2.2527 +# CONFIG_VGASTATE is not set
  2.2528 +CONFIG_VIDEO_OUTPUT_CONTROL=m
  2.2529 +CONFIG_FB=y
  2.2530 +# CONFIG_FIRMWARE_EDID is not set
  2.2531 +# CONFIG_FB_DDC is not set
  2.2532 +CONFIG_FB_BOOT_VESA_SUPPORT=y
  2.2533 +CONFIG_FB_CFB_FILLRECT=y
  2.2534 +CONFIG_FB_CFB_COPYAREA=y
  2.2535 +CONFIG_FB_CFB_IMAGEBLIT=y
  2.2536 +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
  2.2537 +# CONFIG_FB_SYS_FILLRECT is not set
  2.2538 +# CONFIG_FB_SYS_COPYAREA is not set
  2.2539 +# CONFIG_FB_SYS_IMAGEBLIT is not set
  2.2540 +# CONFIG_FB_FOREIGN_ENDIAN is not set
  2.2541 +# CONFIG_FB_SYS_FOPS is not set
  2.2542 +# CONFIG_FB_SVGALIB is not set
  2.2543 +# CONFIG_FB_MACMODES is not set
  2.2544 +CONFIG_FB_BACKLIGHT=y
  2.2545 +# CONFIG_FB_MODE_HELPERS is not set
  2.2546 +# CONFIG_FB_TILEBLITTING is not set
  2.2547 +
  2.2548 +#
  2.2549 +# Frame buffer hardware drivers
  2.2550 +#
  2.2551 +# CONFIG_FB_CIRRUS is not set
  2.2552 +# CONFIG_FB_PM2 is not set
  2.2553 +# CONFIG_FB_CYBER2000 is not set
  2.2554 +# CONFIG_FB_ARC is not set
  2.2555 +# CONFIG_FB_ASILIANT is not set
  2.2556 +# CONFIG_FB_IMSTT is not set
  2.2557 +# CONFIG_FB_VGA16 is not set
  2.2558 +CONFIG_FB_VESA=y
  2.2559 +# CONFIG_FB_N411 is not set
  2.2560 +# CONFIG_FB_HGA is not set
  2.2561 +# CONFIG_FB_S1D13XXX is not set
  2.2562 +# CONFIG_FB_NVIDIA is not set
  2.2563 +# CONFIG_FB_RIVA is not set
  2.2564 +# CONFIG_FB_I810 is not set
  2.2565 +# CONFIG_FB_LE80578 is not set
  2.2566 +# CONFIG_FB_MATROX is not set
  2.2567 +# CONFIG_FB_RADEON is not set
  2.2568 +# CONFIG_FB_ATY128 is not set
  2.2569 +# CONFIG_FB_ATY is not set
  2.2570 +# CONFIG_FB_S3 is not set
  2.2571 +# CONFIG_FB_SAVAGE is not set
  2.2572 +# CONFIG_FB_SIS is not set
  2.2573 +# CONFIG_FB_VIA is not set
  2.2574 +# CONFIG_FB_NEOMAGIC is not set
  2.2575 +# CONFIG_FB_KYRO is not set
  2.2576 +# CONFIG_FB_3DFX is not set
  2.2577 +# CONFIG_FB_VOODOO1 is not set
  2.2578 +# CONFIG_FB_VT8623 is not set
  2.2579 +# CONFIG_FB_TRIDENT is not set
  2.2580 +# CONFIG_FB_ARK is not set
  2.2581 +# CONFIG_FB_PM3 is not set
  2.2582 +# CONFIG_FB_CARMINE is not set
  2.2583 +# CONFIG_FB_GEODE is not set
  2.2584 +# CONFIG_FB_VIRTUAL is not set
  2.2585 +# CONFIG_FB_METRONOME is not set
  2.2586 +# CONFIG_FB_MB862XX is not set
  2.2587 +# CONFIG_FB_BROADSHEET is not set
  2.2588 +CONFIG_BACKLIGHT_LCD_SUPPORT=y
  2.2589 +CONFIG_LCD_CLASS_DEVICE=m
  2.2590 +# CONFIG_LCD_PLATFORM is not set
  2.2591 +CONFIG_BACKLIGHT_CLASS_DEVICE=y
  2.2592 +CONFIG_BACKLIGHT_GENERIC=m
  2.2593 +# CONFIG_BACKLIGHT_PROGEAR is not set
  2.2594 +# CONFIG_BACKLIGHT_MBP_NVIDIA is not set
  2.2595 +# CONFIG_BACKLIGHT_SAHARA is not set
  2.2596 +# CONFIG_BACKLIGHT_ADP8860 is not set
  2.2597 +
  2.2598 +#
  2.2599 +# Display device support
  2.2600 +#
  2.2601 +# CONFIG_DISPLAY_SUPPORT is not set
  2.2602 +
  2.2603 +#
  2.2604 +# Console display driver support
  2.2605 +#
  2.2606 +CONFIG_VGA_CONSOLE=y
  2.2607 +# CONFIG_VGACON_SOFT_SCROLLBACK is not set
  2.2608 +# CONFIG_MDA_CONSOLE is not set
  2.2609 +CONFIG_DUMMY_CONSOLE=y
  2.2610 +CONFIG_FRAMEBUFFER_CONSOLE=y
  2.2611 +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
  2.2612 +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
  2.2613 +# CONFIG_FONTS is not set
  2.2614 +CONFIG_FONT_8x8=y
  2.2615 +CONFIG_FONT_8x16=y
  2.2616 +CONFIG_LOGO=y
  2.2617 +# CONFIG_LOGO_LINUX_MONO is not set
  2.2618 +# CONFIG_LOGO_LINUX_VGA16 is not set
  2.2619 +CONFIG_LOGO_LINUX_CLUT224=y
  2.2620 +CONFIG_SOUND=m
  2.2621 +CONFIG_SOUND_OSS_CORE=y
  2.2622 +CONFIG_SOUND_OSS_CORE_PRECLAIM=y
  2.2623 +CONFIG_SND=m
  2.2624 +CONFIG_SND_TIMER=m
  2.2625 +CONFIG_SND_PCM=m
  2.2626 +CONFIG_SND_HWDEP=m
  2.2627 +CONFIG_SND_RAWMIDI=m
  2.2628 +CONFIG_SND_JACK=y
  2.2629 +CONFIG_SND_SEQUENCER=m
  2.2630 +# CONFIG_SND_SEQ_DUMMY is not set
  2.2631 +CONFIG_SND_OSSEMUL=y
  2.2632 +CONFIG_SND_MIXER_OSS=m
  2.2633 +CONFIG_SND_PCM_OSS=m
  2.2634 +CONFIG_SND_PCM_OSS_PLUGINS=y
  2.2635 +CONFIG_SND_SEQUENCER_OSS=y
  2.2636 +CONFIG_SND_RTCTIMER=m
  2.2637 +CONFIG_SND_SEQ_RTCTIMER_DEFAULT=y
  2.2638 +CONFIG_SND_DYNAMIC_MINORS=y
  2.2639 +CONFIG_SND_SUPPORT_OLD_API=y
  2.2640 +# CONFIG_SND_VERBOSE_PROCFS is not set
  2.2641 +# CONFIG_SND_VERBOSE_PRINTK is not set
  2.2642 +# CONFIG_SND_DEBUG is not set
  2.2643 +CONFIG_SND_VMASTER=y
  2.2644 +CONFIG_SND_DMA_SGBUF=y
  2.2645 +CONFIG_SND_RAWMIDI_SEQ=m
  2.2646 +CONFIG_SND_OPL3_LIB_SEQ=m
  2.2647 +CONFIG_SND_OPL4_LIB_SEQ=m
  2.2648 +CONFIG_SND_SBAWE_SEQ=m
  2.2649 +CONFIG_SND_EMU10K1_SEQ=m
  2.2650 +CONFIG_SND_MPU401_UART=m
  2.2651 +CONFIG_SND_OPL3_LIB=m
  2.2652 +CONFIG_SND_OPL4_LIB=m
  2.2653 +CONFIG_SND_VX_LIB=m
  2.2654 +CONFIG_SND_AC97_CODEC=m
  2.2655 +CONFIG_SND_DRIVERS=y
  2.2656 +# CONFIG_SND_DUMMY is not set
  2.2657 +# CONFIG_SND_ALOOP is not set
  2.2658 +# CONFIG_SND_VIRMIDI is not set
  2.2659 +# CONFIG_SND_MTPAV is not set
  2.2660 +# CONFIG_SND_MTS64 is not set
  2.2661 +# CONFIG_SND_SERIAL_U16550 is not set
  2.2662 +CONFIG_SND_MPU401=m
  2.2663 +# CONFIG_SND_PORTMAN2X4 is not set
  2.2664 +CONFIG_SND_AC97_POWER_SAVE=y
  2.2665 +CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0
  2.2666 +CONFIG_SND_WSS_LIB=m
  2.2667 +CONFIG_SND_SB_COMMON=m
  2.2668 +CONFIG_SND_SB8_DSP=m
  2.2669 +CONFIG_SND_SB16_DSP=m
  2.2670 +CONFIG_SND_ISA=y
  2.2671 +CONFIG_SND_ADLIB=m
  2.2672 +CONFIG_SND_AD1816A=m
  2.2673 +CONFIG_SND_AD1848=m
  2.2674 +CONFIG_SND_ALS100=m
  2.2675 +# CONFIG_SND_AZT1605 is not set
  2.2676 +# CONFIG_SND_AZT2316 is not set
  2.2677 +CONFIG_SND_AZT2320=m
  2.2678 +CONFIG_SND_CMI8330=m
  2.2679 +CONFIG_SND_CS4231=m
  2.2680 +CONFIG_SND_CS4236=m
  2.2681 +CONFIG_SND_ES1688=m
  2.2682 +CONFIG_SND_ES18XX=m
  2.2683 +CONFIG_SND_SC6000=m
  2.2684 +CONFIG_SND_GUSCLASSIC=m
  2.2685 +CONFIG_SND_GUSEXTREME=m
  2.2686 +CONFIG_SND_GUSMAX=m
  2.2687 +CONFIG_SND_INTERWAVE=m
  2.2688 +CONFIG_SND_INTERWAVE_STB=m
  2.2689 +CONFIG_SND_JAZZ16=m
  2.2690 +CONFIG_SND_OPL3SA2=m
  2.2691 +CONFIG_SND_OPTI92X_AD1848=m
  2.2692 +CONFIG_SND_OPTI92X_CS4231=m
  2.2693 +CONFIG_SND_OPTI93X=m
  2.2694 +CONFIG_SND_MIRO=m
  2.2695 +CONFIG_SND_SB8=m
  2.2696 +CONFIG_SND_SB16=m
  2.2697 +CONFIG_SND_SBAWE=m
  2.2698 +# CONFIG_SND_SB16_CSP is not set
  2.2699 +CONFIG_SND_SSCAPE=m
  2.2700 +CONFIG_SND_WAVEFRONT=m
  2.2701 +CONFIG_SND_MSND_PINNACLE=m
  2.2702 +CONFIG_SND_MSND_CLASSIC=m
  2.2703 +CONFIG_SND_PCI=y
  2.2704 +CONFIG_SND_AD1889=m
  2.2705 +CONFIG_SND_ALS300=m
  2.2706 +CONFIG_SND_ALS4000=m
  2.2707 +CONFIG_SND_ALI5451=m
  2.2708 +CONFIG_SND_ASIHPI=m
  2.2709 +CONFIG_SND_ATIIXP=m
  2.2710 +CONFIG_SND_ATIIXP_MODEM=m
  2.2711 +CONFIG_SND_AU8810=m
  2.2712 +CONFIG_SND_AU8820=m
  2.2713 +CONFIG_SND_AU8830=m
  2.2714 +CONFIG_SND_AW2=m
  2.2715 +CONFIG_SND_AZT3328=m
  2.2716 +CONFIG_SND_BT87X=m
  2.2717 +# CONFIG_SND_BT87X_OVERCLOCK is not set
  2.2718 +CONFIG_SND_CA0106=m
  2.2719 +CONFIG_SND_CMIPCI=m
  2.2720 +CONFIG_SND_OXYGEN_LIB=m
  2.2721 +CONFIG_SND_OXYGEN=m
  2.2722 +CONFIG_SND_CS4281=m
  2.2723 +CONFIG_SND_CS46XX=m
  2.2724 +CONFIG_SND_CS46XX_NEW_DSP=y
  2.2725 +CONFIG_SND_CS5530=m
  2.2726 +CONFIG_SND_CS5535AUDIO=m
  2.2727 +CONFIG_SND_CTXFI=m
  2.2728 +CONFIG_SND_DARLA20=m
  2.2729 +CONFIG_SND_GINA20=m
  2.2730 +CONFIG_SND_LAYLA20=m
  2.2731 +CONFIG_SND_DARLA24=m
  2.2732 +CONFIG_SND_GINA24=m
  2.2733 +CONFIG_SND_LAYLA24=m
  2.2734 +CONFIG_SND_MONA=m
  2.2735 +CONFIG_SND_MIA=m
  2.2736 +CONFIG_SND_ECHO3G=m
  2.2737 +CONFIG_SND_INDIGO=m
  2.2738 +CONFIG_SND_INDIGOIO=m
  2.2739 +CONFIG_SND_INDIGODJ=m
  2.2740 +CONFIG_SND_INDIGOIOX=m
  2.2741 +CONFIG_SND_INDIGODJX=m
  2.2742 +CONFIG_SND_EMU10K1=m
  2.2743 +CONFIG_SND_EMU10K1X=m
  2.2744 +CONFIG_SND_ENS1370=m
  2.2745 +CONFIG_SND_ENS1371=m
  2.2746 +CONFIG_SND_ES1938=m
  2.2747 +CONFIG_SND_ES1968=m
  2.2748 +# CONFIG_SND_ES1968_INPUT is not set
  2.2749 +CONFIG_SND_FM801=m
  2.2750 +CONFIG_SND_HDA_INTEL=m
  2.2751 +CONFIG_SND_HDA_HWDEP=y
  2.2752 +# CONFIG_SND_HDA_RECONFIG is not set
  2.2753 +# CONFIG_SND_HDA_INPUT_BEEP is not set
  2.2754 +# CONFIG_SND_HDA_INPUT_JACK is not set
  2.2755 +# CONFIG_SND_HDA_PATCH_LOADER is not set
  2.2756 +CONFIG_SND_HDA_CODEC_REALTEK=y
  2.2757 +CONFIG_SND_HDA_CODEC_ANALOG=y
  2.2758 +CONFIG_SND_HDA_CODEC_SIGMATEL=y
  2.2759 +CONFIG_SND_HDA_CODEC_VIA=y
  2.2760 +CONFIG_SND_HDA_CODEC_HDMI=y
  2.2761 +CONFIG_SND_HDA_CODEC_CIRRUS=y
  2.2762 +CONFIG_SND_HDA_CODEC_CONEXANT=y
  2.2763 +CONFIG_SND_HDA_CODEC_CA0110=y
  2.2764 +CONFIG_SND_HDA_CODEC_CMEDIA=y
  2.2765 +CONFIG_SND_HDA_CODEC_SI3054=y
  2.2766 +CONFIG_SND_HDA_GENERIC=y
  2.2767 +CONFIG_SND_HDA_POWER_SAVE=y
  2.2768 +CONFIG_SND_HDA_POWER_SAVE_DEFAULT=60
  2.2769 +CONFIG_SND_HDSP=m
  2.2770 +CONFIG_SND_HDSPM=m
  2.2771 +CONFIG_SND_HIFIER=m
  2.2772 +CONFIG_SND_ICE1712=m
  2.2773 +CONFIG_SND_ICE1724=m
  2.2774 +CONFIG_SND_INTEL8X0=m
  2.2775 +CONFIG_SND_INTEL8X0M=m
  2.2776 +CONFIG_SND_KORG1212=m
  2.2777 +CONFIG_SND_LX6464ES=m
  2.2778 +CONFIG_SND_MAESTRO3=m
  2.2779 +# CONFIG_SND_MAESTRO3_INPUT is not set
  2.2780 +CONFIG_SND_MIXART=m
  2.2781 +CONFIG_SND_NM256=m
  2.2782 +CONFIG_SND_PCXHR=m
  2.2783 +CONFIG_SND_RIPTIDE=m
  2.2784 +CONFIG_SND_RME32=m
  2.2785 +CONFIG_SND_RME96=m
  2.2786 +CONFIG_SND_RME9652=m
  2.2787 +CONFIG_SND_SIS7019=m
  2.2788 +CONFIG_SND_SONICVIBES=m
  2.2789 +CONFIG_SND_TRIDENT=m
  2.2790 +CONFIG_SND_VIA82XX=m
  2.2791 +CONFIG_SND_VIA82XX_MODEM=m
  2.2792 +CONFIG_SND_VIRTUOSO=m
  2.2793 +CONFIG_SND_VX222=m
  2.2794 +CONFIG_SND_YMFPCI=m
  2.2795 +CONFIG_SND_USB=y
  2.2796 +CONFIG_SND_USB_AUDIO=m
  2.2797 +# CONFIG_SND_USB_UA101 is not set
  2.2798 +CONFIG_SND_USB_USX2Y=m
  2.2799 +CONFIG_SND_USB_CAIAQ=m
  2.2800 +# CONFIG_SND_USB_CAIAQ_INPUT is not set
  2.2801 +CONFIG_SND_USB_US122L=m
  2.2802 +CONFIG_SND_PCMCIA=y
  2.2803 +CONFIG_SND_VXPOCKET=m
  2.2804 +CONFIG_SND_PDAUDIOCF=m
  2.2805 +# CONFIG_SND_SOC is not set
  2.2806 +# CONFIG_SOUND_PRIME is not set
  2.2807 +CONFIG_AC97_BUS=m
  2.2808 +CONFIG_HID_SUPPORT=y
  2.2809 +CONFIG_HID=y
  2.2810 +# CONFIG_HIDRAW is not set
  2.2811 +
  2.2812 +#
  2.2813 +# USB Input Devices
  2.2814 +#
  2.2815 +CONFIG_USB_HID=y
  2.2816 +# CONFIG_HID_PID is not set
  2.2817 +CONFIG_USB_HIDDEV=y
  2.2818 +
  2.2819 +#
  2.2820 +# Special HID drivers
  2.2821 +#
  2.2822 +# CONFIG_HID_3M_PCT is not set
  2.2823 +CONFIG_HID_A4TECH=y
  2.2824 +# CONFIG_HID_ACRUX_FF is not set
  2.2825 +CONFIG_HID_APPLE=y
  2.2826 +CONFIG_HID_BELKIN=y
  2.2827 +# CONFIG_HID_CANDO is not set
  2.2828 +CONFIG_HID_CHERRY=y
  2.2829 +CONFIG_HID_CHICONY=y
  2.2830 +# CONFIG_HID_PRODIKEYS is not set
  2.2831 +CONFIG_HID_CYPRESS=y
  2.2832 +CONFIG_HID_DRAGONRISE=y
  2.2833 +# CONFIG_DRAGONRISE_FF is not set
  2.2834 +# CONFIG_HID_EGALAX is not set
  2.2835 +CONFIG_HID_EZKEY=y
  2.2836 +CONFIG_HID_KYE=y
  2.2837 +# CONFIG_HID_UCLOGIC is not set
  2.2838 +# CONFIG_HID_WALTOP is not set
  2.2839 +CONFIG_HID_GYRATION=y
  2.2840 +CONFIG_HID_TWINHAN=y
  2.2841 +CONFIG_HID_KENSINGTON=y
  2.2842 +CONFIG_HID_LOGITECH=y
  2.2843 +# CONFIG_LOGITECH_FF is not set
  2.2844 +# CONFIG_LOGIRUMBLEPAD2_FF is not set
  2.2845 +# CONFIG_LOGIG940_FF is not set
  2.2846 +# CONFIG_LOGIWII_FF is not set
  2.2847 +CONFIG_HID_MICROSOFT=y
  2.2848 +# CONFIG_HID_MOSART is not set
  2.2849 +CONFIG_HID_MONTEREY=y
  2.2850 +CONFIG_HID_NTRIG=y
  2.2851 +CONFIG_HID_ORTEK=y
  2.2852 +CONFIG_HID_PANTHERLORD=y
  2.2853 +# CONFIG_PANTHERLORD_FF is not set
  2.2854 +CONFIG_HID_PETALYNX=y
  2.2855 +# CONFIG_HID_PICOLCD is not set
  2.2856 +# CONFIG_HID_QUANTA is not set
  2.2857 +# CONFIG_HID_ROCCAT is not set
  2.2858 +# CONFIG_HID_ROCCAT_KONE is not set
  2.2859 +# CONFIG_HID_ROCCAT_PYRA is not set
  2.2860 +CONFIG_HID_SAMSUNG=y
  2.2861 +CONFIG_HID_SONY=y
  2.2862 +# CONFIG_HID_STANTUM is not set
  2.2863 +CONFIG_HID_SUNPLUS=y
  2.2864 +CONFIG_HID_GREENASIA=y
  2.2865 +# CONFIG_GREENASIA_FF is not set
  2.2866 +CONFIG_HID_SMARTJOYPLUS=y
  2.2867 +# CONFIG_SMARTJOYPLUS_FF is not set
  2.2868 +CONFIG_HID_TOPSEED=y
  2.2869 +CONFIG_HID_THRUSTMASTER=y
  2.2870 +# CONFIG_THRUSTMASTER_FF is not set
  2.2871 +CONFIG_HID_ZEROPLUS=y
  2.2872 +# CONFIG_ZEROPLUS_FF is not set
  2.2873 +# CONFIG_HID_ZYDACRON is not set
  2.2874 +CONFIG_USB_SUPPORT=y
  2.2875 +CONFIG_USB_ARCH_HAS_HCD=y
  2.2876 +CONFIG_USB_ARCH_HAS_OHCI=y
  2.2877 +CONFIG_USB_ARCH_HAS_EHCI=y
  2.2878 +CONFIG_USB=y
  2.2879 +# CONFIG_USB_DEBUG is not set
  2.2880 +# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
  2.2881 +
  2.2882 +#
  2.2883 +# Miscellaneous USB options
  2.2884 +#
  2.2885 +CONFIG_USB_DEVICEFS=y
  2.2886 +CONFIG_USB_DEVICE_CLASS=y
  2.2887 +# CONFIG_USB_DYNAMIC_MINORS is not set
  2.2888 +CONFIG_USB_MON=m
  2.2889 +CONFIG_USB_WUSB=m
  2.2890 +CONFIG_USB_WUSB_CBAF=m
  2.2891 +# CONFIG_USB_WUSB_CBAF_DEBUG is not set
  2.2892 +
  2.2893 +#
  2.2894 +# USB Host Controller Drivers
  2.2895 +#
  2.2896 +# CONFIG_USB_C67X00_HCD is not set
  2.2897 +CONFIG_USB_XHCI_HCD=m
  2.2898 +# CONFIG_USB_XHCI_HCD_DEBUGGING is not set
  2.2899 +CONFIG_USB_EHCI_HCD=y
  2.2900 +# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
  2.2901 +# CONFIG_USB_EHCI_TT_NEWSCHED is not set
  2.2902 +# CONFIG_USB_OXU210HP_HCD is not set
  2.2903 +# CONFIG_USB_ISP116X_HCD is not set
  2.2904 +# CONFIG_USB_ISP1760_HCD is not set
  2.2905 +# CONFIG_USB_ISP1362_HCD is not set
  2.2906 +CONFIG_USB_OHCI_HCD=y
  2.2907 +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
  2.2908 +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
  2.2909 +CONFIG_USB_OHCI_LITTLE_ENDIAN=y
  2.2910 +CONFIG_USB_UHCI_HCD=y
  2.2911 +# CONFIG_USB_SL811_HCD is not set
  2.2912 +# CONFIG_USB_R8A66597_HCD is not set
  2.2913 +CONFIG_USB_WHCI_HCD=m
  2.2914 +# CONFIG_USB_HWA_HCD is not set
  2.2915 +
  2.2916 +#
  2.2917 +# USB Device Class drivers
  2.2918 +#
  2.2919 +CONFIG_USB_ACM=m
  2.2920 +CONFIG_USB_PRINTER=m
  2.2921 +# CONFIG_USB_WDM is not set
  2.2922 +# CONFIG_USB_TMC is not set
  2.2923 +
  2.2924 +#
  2.2925 +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
  2.2926 +#
  2.2927 +
  2.2928 +#
  2.2929 +# also be needed; see USB_STORAGE Help for more info
  2.2930 +#
  2.2931 +CONFIG_USB_STORAGE=y
  2.2932 +# CONFIG_USB_STORAGE_DEBUG is not set
  2.2933 +# CONFIG_USB_STORAGE_DATAFAB is not set
  2.2934 +# CONFIG_USB_STORAGE_FREECOM is not set
  2.2935 +# CONFIG_USB_STORAGE_ISD200 is not set
  2.2936 +# CONFIG_USB_STORAGE_USBAT is not set
  2.2937 +# CONFIG_USB_STORAGE_SDDR09 is not set
  2.2938 +# CONFIG_USB_STORAGE_SDDR55 is not set
  2.2939 +# CONFIG_USB_STORAGE_JUMPSHOT is not set
  2.2940 +# CONFIG_USB_STORAGE_ALAUDA is not set
  2.2941 +# CONFIG_USB_STORAGE_ONETOUCH is not set
  2.2942 +# CONFIG_USB_STORAGE_KARMA is not set
  2.2943 +# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
  2.2944 +# CONFIG_USB_UAS is not set
  2.2945 +# CONFIG_USB_LIBUSUAL is not set
  2.2946 +
  2.2947 +#
  2.2948 +# USB Imaging devices
  2.2949 +#
  2.2950 +# CONFIG_USB_MDC800 is not set
  2.2951 +# CONFIG_USB_MICROTEK is not set
  2.2952 +
  2.2953 +#
  2.2954 +# USB port drivers
  2.2955 +#
  2.2956 +# CONFIG_USB_USS720 is not set
  2.2957 +CONFIG_USB_SERIAL=m
  2.2958 +# CONFIG_USB_EZUSB is not set
  2.2959 +CONFIG_USB_SERIAL_GENERIC=y
  2.2960 +# CONFIG_USB_SERIAL_AIRCABLE is not set
  2.2961 +# CONFIG_USB_SERIAL_ARK3116 is not set
  2.2962 +# CONFIG_USB_SERIAL_BELKIN is not set
  2.2963 +CONFIG_USB_SERIAL_CH341=m
  2.2964 +# CONFIG_USB_SERIAL_WHITEHEAT is not set
  2.2965 +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
  2.2966 +# CONFIG_USB_SERIAL_CP210X is not set
  2.2967 +# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
  2.2968 +# CONFIG_USB_SERIAL_EMPEG is not set
  2.2969 +# CONFIG_USB_SERIAL_FTDI_SIO is not set
  2.2970 +# CONFIG_USB_SERIAL_FUNSOFT is not set
  2.2971 +# CONFIG_USB_SERIAL_VISOR is not set
  2.2972 +# CONFIG_USB_SERIAL_IPAQ is not set
  2.2973 +# CONFIG_USB_SERIAL_IR is not set
  2.2974 +# CONFIG_USB_SERIAL_EDGEPORT is not set
  2.2975 +# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
  2.2976 +# CONFIG_USB_SERIAL_GARMIN is not set
  2.2977 +# CONFIG_USB_SERIAL_IPW is not set
  2.2978 +# CONFIG_USB_SERIAL_IUU is not set
  2.2979 +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
  2.2980 +# CONFIG_USB_SERIAL_KEYSPAN is not set
  2.2981 +# CONFIG_USB_SERIAL_KLSI is not set
  2.2982 +# CONFIG_USB_SERIAL_KOBIL_SCT is not set
  2.2983 +# CONFIG_USB_SERIAL_MCT_U232 is not set
  2.2984 +# CONFIG_USB_SERIAL_MOS7720 is not set
  2.2985 +# CONFIG_USB_SERIAL_MOS7840 is not set
  2.2986 +# CONFIG_USB_SERIAL_MOTOROLA is not set
  2.2987 +# CONFIG_USB_SERIAL_NAVMAN is not set
  2.2988 +CONFIG_USB_SERIAL_PL2303=m
  2.2989 +# CONFIG_USB_SERIAL_OTI6858 is not set
  2.2990 +# CONFIG_USB_SERIAL_QCAUX is not set
  2.2991 +# CONFIG_USB_SERIAL_QUALCOMM is not set
  2.2992 +# CONFIG_USB_SERIAL_SPCP8X5 is not set
  2.2993 +# CONFIG_USB_SERIAL_HP4X is not set
  2.2994 +# CONFIG_USB_SERIAL_SAFE is not set
  2.2995 +# CONFIG_USB_SERIAL_SAMBA is not set
  2.2996 +# CONFIG_USB_SERIAL_SIEMENS_MPI is not set
  2.2997 +# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
  2.2998 +# CONFIG_USB_SERIAL_SYMBOL is not set
  2.2999 +# CONFIG_USB_SERIAL_TI is not set
  2.3000 +# CONFIG_USB_SERIAL_CYBERJACK is not set
  2.3001 +# CONFIG_USB_SERIAL_XIRCOM is not set
  2.3002 +CONFIG_USB_SERIAL_WWAN=m
  2.3003 +CONFIG_USB_SERIAL_OPTION=m
  2.3004 +# CONFIG_USB_SERIAL_OMNINET is not set
  2.3005 +# CONFIG_USB_SERIAL_OPTICON is not set
  2.3006 +# CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set
  2.3007 +# CONFIG_USB_SERIAL_ZIO is not set
  2.3008 +# CONFIG_USB_SERIAL_SSU100 is not set
  2.3009 +# CONFIG_USB_SERIAL_DEBUG is not set
  2.3010 +
  2.3011 +#
  2.3012 +# USB Miscellaneous drivers
  2.3013 +#
  2.3014 +# CONFIG_USB_EMI62 is not set
  2.3015 +# CONFIG_USB_EMI26 is not set
  2.3016 +# CONFIG_USB_ADUTUX is not set
  2.3017 +# CONFIG_USB_SEVSEG is not set
  2.3018 +# CONFIG_USB_RIO500 is not set
  2.3019 +CONFIG_USB_LEGOTOWER=m
  2.3020 +# CONFIG_USB_LCD is not set
  2.3021 +# CONFIG_USB_LED is not set
  2.3022 +# CONFIG_USB_CYPRESS_CY7C63 is not set
  2.3023 +# CONFIG_USB_CYTHERM is not set
  2.3024 +# CONFIG_USB_IDMOUSE is not set
  2.3025 +# CONFIG_USB_FTDI_ELAN is not set
  2.3026 +# CONFIG_USB_APPLEDISPLAY is not set
  2.3027 +# CONFIG_USB_SISUSBVGA is not set
  2.3028 +# CONFIG_USB_LD is not set
  2.3029 +# CONFIG_USB_TRANCEVIBRATOR is not set
  2.3030 +# CONFIG_USB_IOWARRIOR is not set
  2.3031 +# CONFIG_USB_TEST is not set
  2.3032 +# CONFIG_USB_ISIGHTFW is not set
  2.3033 +# CONFIG_USB_YUREX is not set
  2.3034 +CONFIG_USB_ATM=m
  2.3035 +CONFIG_USB_SPEEDTOUCH=m
  2.3036 +CONFIG_USB_CXACRU=m
  2.3037 +CONFIG_USB_UEAGLEATM=m
  2.3038 +CONFIG_USB_XUSBATM=m
  2.3039 +# CONFIG_USB_GADGET is not set
  2.3040 +
  2.3041 +#
  2.3042 +# OTG and related infrastructure
  2.3043 +#
  2.3044 +# CONFIG_USB_GPIO_VBUS is not set
  2.3045 +# CONFIG_NOP_USB_XCEIV is not set
  2.3046 +CONFIG_UWB=m
  2.3047 +CONFIG_UWB_HWA=m
  2.3048 +CONFIG_UWB_WHCI=m
  2.3049 +CONFIG_UWB_I1480U=m
  2.3050 +CONFIG_MMC=m
  2.3051 +# CONFIG_MMC_DEBUG is not set
  2.3052 +# CONFIG_MMC_UNSAFE_RESUME is not set
  2.3053 +
  2.3054 +#
  2.3055 +# MMC/SD/SDIO Card Drivers
  2.3056 +#
  2.3057 +CONFIG_MMC_BLOCK=m
  2.3058 +CONFIG_MMC_BLOCK_MINORS=8
  2.3059 +CONFIG_MMC_BLOCK_BOUNCE=y
  2.3060 +CONFIG_SDIO_UART=m
  2.3061 +# CONFIG_MMC_TEST is not set
  2.3062 +
  2.3063 +#
  2.3064 +# MMC/SD/SDIO Host Controller Drivers
  2.3065 +#
  2.3066 +CONFIG_MMC_SDHCI=m
  2.3067 +CONFIG_MMC_SDHCI_PCI=m
  2.3068 +# CONFIG_MMC_RICOH_MMC is not set
  2.3069 +# CONFIG_MMC_SDHCI_PLTFM is not set
  2.3070 +# CONFIG_MMC_WBSD is not set
  2.3071 +# CONFIG_MMC_TIFM_SD is not set
  2.3072 +# CONFIG_MMC_SDRICOH_CS is not set
  2.3073 +# CONFIG_MMC_CB710 is not set
  2.3074 +# CONFIG_MMC_VIA_SDMMC is not set
  2.3075 +# CONFIG_MMC_USHC is not set
  2.3076 +CONFIG_MEMSTICK=m
  2.3077 +# CONFIG_MEMSTICK_DEBUG is not set
  2.3078 +
  2.3079 +#
  2.3080 +# MemoryStick drivers
  2.3081 +#
  2.3082 +# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
  2.3083 +CONFIG_MSPRO_BLOCK=m
  2.3084 +
  2.3085 +#
  2.3086 +# MemoryStick Host Controller Drivers
  2.3087 +#
  2.3088 +CONFIG_MEMSTICK_TIFM_MS=m
  2.3089 +CONFIG_MEMSTICK_JMICRON_38X=m
  2.3090 +CONFIG_NEW_LEDS=y
  2.3091 +CONFIG_LEDS_CLASS=y
  2.3092 +
  2.3093 +#
  2.3094 +# LED drivers
  2.3095 +#
  2.3096 +# CONFIG_LEDS_ALIX2 is not set
  2.3097 +# CONFIG_LEDS_PCA9532 is not set
  2.3098 +CONFIG_LEDS_GPIO=m
  2.3099 +CONFIG_LEDS_GPIO_PLATFORM=y
  2.3100 +# CONFIG_LEDS_LP3944 is not set
  2.3101 +# CONFIG_LEDS_LP5521 is not set
  2.3102 +# CONFIG_LEDS_LP5523 is not set
  2.3103 +# CONFIG_LEDS_CLEVO_MAIL is not set
  2.3104 +# CONFIG_LEDS_PCA955X is not set
  2.3105 +# CONFIG_LEDS_BD2802 is not set
  2.3106 +# CONFIG_LEDS_INTEL_SS4200 is not set
  2.3107 +# CONFIG_LEDS_LT3593 is not set
  2.3108 +# CONFIG_LEDS_DELL_NETBOOKS is not set
  2.3109 +CONFIG_LEDS_TRIGGERS=y
  2.3110 +
  2.3111 +#
  2.3112 +# LED Triggers
  2.3113 +#
  2.3114 +CONFIG_LEDS_TRIGGER_TIMER=m
  2.3115 +CONFIG_LEDS_TRIGGER_IDE_DISK=y
  2.3116 +CONFIG_LEDS_TRIGGER_HEARTBEAT=m
  2.3117 +CONFIG_LEDS_TRIGGER_BACKLIGHT=m
  2.3118 +# CONFIG_LEDS_TRIGGER_GPIO is not set
  2.3119 +CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
  2.3120 +
  2.3121 +#
  2.3122 +# iptables trigger is under Netfilter config (LED target)
  2.3123 +#
  2.3124 +# CONFIG_ACCESSIBILITY is not set
  2.3125 +# CONFIG_INFINIBAND is not set
  2.3126 +# CONFIG_EDAC is not set
  2.3127 +# CONFIG_RTC_CLASS is not set
  2.3128 +# CONFIG_DMADEVICES is not set
  2.3129 +# CONFIG_AUXDISPLAY is not set
  2.3130 +# CONFIG_UIO is not set
  2.3131 +CONFIG_STAGING=y
  2.3132 +# CONFIG_STAGING_EXCLUDE_BUILD is not set
  2.3133 +# CONFIG_ET131X is not set
  2.3134 +# CONFIG_SLICOSS is not set
  2.3135 +CONFIG_USB_IP_COMMON=m
  2.3136 +CONFIG_USB_IP_VHCI_HCD=m
  2.3137 +CONFIG_USB_IP_HOST=m
  2.3138 +# CONFIG_USB_IP_DEBUG_ENABLE is not set
  2.3139 +# CONFIG_W35UND is not set
  2.3140 +CONFIG_PRISM2_USB=m
  2.3141 +CONFIG_ECHO=m
  2.3142 +# CONFIG_BRCM80211 is not set
  2.3143 +CONFIG_RT2860=m
  2.3144 +CONFIG_RT2870=m
  2.3145 +# CONFIG_COMEDI is not set
  2.3146 +# CONFIG_ASUS_OLED is not set
  2.3147 +# CONFIG_PANEL is not set
  2.3148 +CONFIG_R8187SE=m
  2.3149 +CONFIG_RTL8192U=m
  2.3150 +CONFIG_RTL8192E=m
  2.3151 +# CONFIG_R8712U is not set
  2.3152 +# CONFIG_TRANZPORT is not set
  2.3153 +# CONFIG_POHMELFS is not set
  2.3154 +# CONFIG_AUTOFS_FS is not set
  2.3155 +# CONFIG_IDE_PHISON is not set
  2.3156 +# CONFIG_LINE6_USB is not set
  2.3157 +# CONFIG_DRM_VMWGFX is not set
  2.3158 +CONFIG_DRM_NOUVEAU=m
  2.3159 +CONFIG_DRM_NOUVEAU_BACKLIGHT=y
  2.3160 +
  2.3161 +#
  2.3162 +# I2C encoder or helper chips
  2.3163 +#
  2.3164 +CONFIG_DRM_I2C_CH7006=m
  2.3165 +# CONFIG_DRM_I2C_SIL164 is not set
  2.3166 +# CONFIG_USB_SERIAL_QUATECH2 is not set
  2.3167 +# CONFIG_USB_SERIAL_QUATECH_USB2 is not set
  2.3168 +# CONFIG_VT6655 is not set
  2.3169 +# CONFIG_VT6656 is not set
  2.3170 +# CONFIG_FB_UDL is not set
  2.3171 +# CONFIG_HYPERV is not set
  2.3172 +# CONFIG_VME_BUS is not set
  2.3173 +# CONFIG_IIO is not set
  2.3174 +# CONFIG_ZRAM is not set
  2.3175 +# CONFIG_WLAGS49_H2 is not set
  2.3176 +# CONFIG_WLAGS49_H25 is not set
  2.3177 +# CONFIG_BATMAN_ADV is not set
  2.3178 +# CONFIG_SAMSUNG_LAPTOP is not set
  2.3179 +CONFIG_FB_SM7XX=m
  2.3180 +CONFIG_CRYSTALHD=m
  2.3181 +
  2.3182 +#
  2.3183 +# Texas Instruments shared transport line discipline
  2.3184 +#
  2.3185 +# CONFIG_ST_BT is not set
  2.3186 +# CONFIG_FB_XGI is not set
  2.3187 +# CONFIG_SMB_FS is not set
  2.3188 +# CONFIG_ACPI_QUICKSTART is not set
  2.3189 +CONFIG_MACH_NO_WESTBRIDGE=y
  2.3190 +# CONFIG_ATH6K_LEGACY is not set
  2.3191 +# CONFIG_USB_ENESTORAGE is not set
  2.3192 +# CONFIG_BCM_WIMAX is not set
  2.3193 +# CONFIG_FT1000 is not set
  2.3194 +
  2.3195 +#
  2.3196 +# Speakup console speech
  2.3197 +#
  2.3198 +CONFIG_SPEAKUP=m
  2.3199 +CONFIG_SPEAKUP_SYNTH_ACNTSA=m
  2.3200 +CONFIG_SPEAKUP_SYNTH_ACNTPC=m
  2.3201 +CONFIG_SPEAKUP_SYNTH_APOLLO=m
  2.3202 +CONFIG_SPEAKUP_SYNTH_AUDPTR=m
  2.3203 +CONFIG_SPEAKUP_SYNTH_BNS=m
  2.3204 +CONFIG_SPEAKUP_SYNTH_DECTLK=m
  2.3205 +CONFIG_SPEAKUP_SYNTH_DECEXT=m
  2.3206 +CONFIG_SPEAKUP_SYNTH_DECPC=m
  2.3207 +CONFIG_SPEAKUP_SYNTH_DTLK=m
  2.3208 +CONFIG_SPEAKUP_SYNTH_KEYPC=m
  2.3209 +CONFIG_SPEAKUP_SYNTH_LTLK=m
  2.3210 +CONFIG_SPEAKUP_SYNTH_SOFT=m
  2.3211 +CONFIG_SPEAKUP_SYNTH_SPKOUT=m
  2.3212 +CONFIG_SPEAKUP_SYNTH_TXPRT=m
  2.3213 +CONFIG_SPEAKUP_SYNTH_DUMMY=m
  2.3214 +CONFIG_X86_PLATFORM_DEVICES=y
  2.3215 +CONFIG_ACER_WMI=m
  2.3216 +CONFIG_ASUS_LAPTOP=m
  2.3217 +# CONFIG_DELL_WMI is not set
  2.3218 +# CONFIG_FUJITSU_LAPTOP is not set
  2.3219 +# CONFIG_TC1100_WMI is not set
  2.3220 +CONFIG_HP_WMI=m
  2.3221 +CONFIG_MSI_LAPTOP=m
  2.3222 +CONFIG_PANASONIC_LAPTOP=m
  2.3223 +# CONFIG_COMPAL_LAPTOP is not set
  2.3224 +CONFIG_SONY_LAPTOP=m
  2.3225 +# CONFIG_SONYPI_COMPAT is not set
  2.3226 +# CONFIG_IDEAPAD_LAPTOP is not set
  2.3227 +CONFIG_THINKPAD_ACPI=m
  2.3228 +CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y
  2.3229 +# CONFIG_THINKPAD_ACPI_DEBUGFACILITIES is not set
  2.3230 +# CONFIG_THINKPAD_ACPI_DEBUG is not set
  2.3231 +# CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set
  2.3232 +CONFIG_THINKPAD_ACPI_VIDEO=y
  2.3233 +CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
  2.3234 +# CONFIG_SENSORS_HDAPS is not set
  2.3235 +# CONFIG_INTEL_MENLOW is not set
  2.3236 +CONFIG_EEEPC_WMI=m
  2.3237 +CONFIG_ACPI_WMI=m
  2.3238 +# CONFIG_MSI_WMI is not set
  2.3239 +# CONFIG_ACPI_ASUS is not set
  2.3240 +CONFIG_TOPSTAR_LAPTOP=m
  2.3241 +# CONFIG_ACPI_TOSHIBA is not set
  2.3242 +# CONFIG_TOSHIBA_BT_RFKILL is not set
  2.3243 +CONFIG_ACPI_CMPC=m
  2.3244 +# CONFIG_INTEL_IPS is not set
  2.3245 +# CONFIG_IBM_RTL is not set
  2.3246 +
  2.3247 +#
  2.3248 +# Firmware Drivers
  2.3249 +#
  2.3250 +# CONFIG_EDD is not set
  2.3251 +CONFIG_FIRMWARE_MEMMAP=y
  2.3252 +# CONFIG_DELL_RBU is not set
  2.3253 +# CONFIG_DCDBAS is not set
  2.3254 +CONFIG_DMIID=y
  2.3255 +# CONFIG_ISCSI_IBFT_FIND is not set
  2.3256 +
  2.3257 +#
  2.3258 +# File systems
  2.3259 +#
  2.3260 +# CONFIG_EXT2_FS is not set
  2.3261 +# CONFIG_EXT3_FS is not set
  2.3262 +CONFIG_EXT4_FS=y
  2.3263 +CONFIG_EXT4_USE_FOR_EXT23=y
  2.3264 +CONFIG_EXT4_FS_XATTR=y
  2.3265 +CONFIG_EXT4_FS_POSIX_ACL=y
  2.3266 +# CONFIG_EXT4_FS_SECURITY is not set
  2.3267 +# CONFIG_EXT4_DEBUG is not set
  2.3268 +CONFIG_JBD2=y
  2.3269 +CONFIG_FS_MBCACHE=y
  2.3270 +CONFIG_REISERFS_FS=m
  2.3271 +# CONFIG_REISERFS_CHECK is not set
  2.3272 +# CONFIG_REISERFS_PROC_INFO is not set
  2.3273 +# CONFIG_REISERFS_FS_XATTR is not set
  2.3274 +CONFIG_JFS_FS=m
  2.3275 +CONFIG_JFS_POSIX_ACL=y
  2.3276 +# CONFIG_JFS_SECURITY is not set
  2.3277 +# CONFIG_JFS_DEBUG is not set
  2.3278 +# CONFIG_JFS_STATISTICS is not set
  2.3279 +CONFIG_FS_POSIX_ACL=y
  2.3280 +CONFIG_XFS_FS=y
  2.3281 +CONFIG_XFS_QUOTA=y
  2.3282 +CONFIG_XFS_POSIX_ACL=y
  2.3283 +# CONFIG_XFS_RT is not set
  2.3284 +# CONFIG_XFS_DEBUG is not set
  2.3285 +CONFIG_GFS2_FS=m
  2.3286 +# CONFIG_GFS2_FS_LOCKING_DLM is not set
  2.3287 +# CONFIG_OCFS2_FS is not set
  2.3288 +CONFIG_BTRFS_FS=m
  2.3289 +CONFIG_BTRFS_FS_POSIX_ACL=y
  2.3290 +# CONFIG_NILFS2_FS is not set
  2.3291 +CONFIG_EXPORTFS=y
  2.3292 +CONFIG_FILE_LOCKING=y
  2.3293 +CONFIG_FSNOTIFY=y
  2.3294 +CONFIG_DNOTIFY=y
  2.3295 +CONFIG_INOTIFY_USER=y
  2.3296 +# CONFIG_FANOTIFY is not set
  2.3297 +CONFIG_QUOTA=y
  2.3298 +# CONFIG_QUOTA_NETLINK_INTERFACE is not set
  2.3299 +CONFIG_PRINT_QUOTA_WARNING=y
  2.3300 +# CONFIG_QUOTA_DEBUG is not set
  2.3301 +# CONFIG_QFMT_V1 is not set
  2.3302 +# CONFIG_QFMT_V2 is not set
  2.3303 +CONFIG_QUOTACTL=y
  2.3304 +CONFIG_AUTOFS4_FS=m
  2.3305 +CONFIG_FUSE_FS=y
  2.3306 +CONFIG_CUSE=m
  2.3307 +
  2.3308 +#
  2.3309 +# Caches
  2.3310 +#
  2.3311 +# CONFIG_FSCACHE is not set
  2.3312 +
  2.3313 +#
  2.3314 +# CD-ROM/DVD Filesystems
  2.3315 +#
  2.3316 +CONFIG_ISO9660_FS=y
  2.3317 +CONFIG_JOLIET=y
  2.3318 +CONFIG_ZISOFS=y
  2.3319 +CONFIG_UDF_FS=m
  2.3320 +CONFIG_UDF_NLS=y
  2.3321 +
  2.3322 +#
  2.3323 +# DOS/FAT/NT Filesystems
  2.3324 +#
  2.3325 +CONFIG_FAT_FS=y
  2.3326 +CONFIG_MSDOS_FS=m
  2.3327 +CONFIG_VFAT_FS=y
  2.3328 +CONFIG_FAT_DEFAULT_CODEPAGE=437
  2.3329 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
  2.3330 +# CONFIG_NTFS_FS is not set
  2.3331 +
  2.3332 +#
  2.3333 +# Pseudo filesystems
  2.3334 +#
  2.3335 +CONFIG_PROC_FS=y
  2.3336 +CONFIG_PROC_KCORE=y
  2.3337 +CONFIG_PROC_SYSCTL=y
  2.3338 +CONFIG_PROC_PAGE_MONITOR=y
  2.3339 +CONFIG_SYSFS=y
  2.3340 +CONFIG_TMPFS=y
  2.3341 +# CONFIG_TMPFS_POSIX_ACL is not set
  2.3342 +# CONFIG_HUGETLBFS is not set
  2.3343 +# CONFIG_HUGETLB_PAGE is not set
  2.3344 +CONFIG_CONFIGFS_FS=m
  2.3345 +CONFIG_MISC_FILESYSTEMS=y
  2.3346 +# CONFIG_ADFS_FS is not set
  2.3347 +# CONFIG_AFFS_FS is not set
  2.3348 +CONFIG_HFS_FS=m
  2.3349 +CONFIG_HFSPLUS_FS=m
  2.3350 +# CONFIG_BEFS_FS is not set
  2.3351 +# CONFIG_BFS_FS is not set
  2.3352 +# CONFIG_EFS_FS is not set
  2.3353 +CONFIG_LOGFS=m
  2.3354 +CONFIG_CRAMFS=m
  2.3355 +CONFIG_SQUASHFS=m
  2.3356 +CONFIG_SQUASHFS_XATTR=y
  2.3357 +CONFIG_SQUASHFS_LZO=y
  2.3358 +CONFIG_SQUASHFS_XZ=y
  2.3359 +# CONFIG_SQUASHFS_EMBEDDED is not set
  2.3360 +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
  2.3361 +# CONFIG_VXFS_FS is not set
  2.3362 +CONFIG_MINIX_FS=m
  2.3363 +# CONFIG_OMFS_FS is not set
  2.3364 +# CONFIG_HPFS_FS is not set
  2.3365 +# CONFIG_QNX4FS_FS is not set
  2.3366 +# CONFIG_ROMFS_FS is not set
  2.3367 +# CONFIG_SYSV_FS is not set
  2.3368 +# CONFIG_UFS_FS is not set
  2.3369 +CONFIG_NETWORK_FILESYSTEMS=y
  2.3370 +CONFIG_NFS_FS=y
  2.3371 +CONFIG_NFS_V3=y
  2.3372 +CONFIG_NFS_V3_ACL=y
  2.3373 +# CONFIG_NFS_V4 is not set
  2.3374 +CONFIG_NFSD=m
  2.3375 +CONFIG_NFSD_DEPRECATED=y
  2.3376 +CONFIG_NFSD_V2_ACL=y
  2.3377 +CONFIG_NFSD_V3=y
  2.3378 +CONFIG_NFSD_V3_ACL=y
  2.3379 +# CONFIG_NFSD_V4 is not set
  2.3380 +CONFIG_LOCKD=y
  2.3381 +CONFIG_LOCKD_V4=y
  2.3382 +CONFIG_NFS_ACL_SUPPORT=y
  2.3383 +CONFIG_NFS_COMMON=y
  2.3384 +CONFIG_SUNRPC=y
  2.3385 +CONFIG_SUNRPC_GSS=m
  2.3386 +CONFIG_RPCSEC_GSS_KRB5=m
  2.3387 +# CONFIG_CEPH_FS is not set
  2.3388 +CONFIG_CIFS=m
  2.3389 +# CONFIG_CIFS_STATS is not set
  2.3390 +CONFIG_CIFS_WEAK_PW_HASH=y
  2.3391 +# CONFIG_CIFS_XATTR is not set
  2.3392 +# CONFIG_CIFS_DEBUG2 is not set
  2.3393 +# CONFIG_CIFS_EXPERIMENTAL is not set
  2.3394 +CONFIG_NCP_FS=m
  2.3395 +# CONFIG_NCPFS_PACKET_SIGNING is not set
  2.3396 +# CONFIG_NCPFS_IOCTL_LOCKING is not set
  2.3397 +# CONFIG_NCPFS_STRONG is not set
  2.3398 +# CONFIG_NCPFS_NFS_NS is not set
  2.3399 +# CONFIG_NCPFS_OS2_NS is not set
  2.3400 +# CONFIG_NCPFS_SMALLDOS is not set
  2.3401 +# CONFIG_NCPFS_NLS is not set
  2.3402 +# CONFIG_NCPFS_EXTRAS is not set
  2.3403 +CONFIG_CODA_FS=m
  2.3404 +# CONFIG_AFS_FS is not set
  2.3405 +
  2.3406 +#
  2.3407 +# Partition Types
  2.3408 +#
  2.3409 +CONFIG_PARTITION_ADVANCED=y
  2.3410 +# CONFIG_ACORN_PARTITION is not set
  2.3411 +# CONFIG_OSF_PARTITION is not set
  2.3412 +# CONFIG_AMIGA_PARTITION is not set
  2.3413 +# CONFIG_ATARI_PARTITION is not set
  2.3414 +# CONFIG_MAC_PARTITION is not set
  2.3415 +CONFIG_MSDOS_PARTITION=y
  2.3416 +CONFIG_BSD_DISKLABEL=y
  2.3417 +# CONFIG_MINIX_SUBPARTITION is not set
  2.3418 +# CONFIG_SOLARIS_X86_PARTITION is not set
  2.3419 +# CONFIG_UNIXWARE_DISKLABEL is not set
  2.3420 +# CONFIG_LDM_PARTITION is not set
  2.3421 +# CONFIG_SGI_PARTITION is not set
  2.3422 +# CONFIG_ULTRIX_PARTITION is not set
  2.3423 +# CONFIG_SUN_PARTITION is not set
  2.3424 +# CONFIG_KARMA_PARTITION is not set
  2.3425 +CONFIG_EFI_PARTITION=y
  2.3426 +# CONFIG_SYSV68_PARTITION is not set
  2.3427 +CONFIG_NLS=y
  2.3428 +CONFIG_NLS_DEFAULT="iso8859-1"
  2.3429 +CONFIG_NLS_CODEPAGE_437=y
  2.3430 +# CONFIG_NLS_CODEPAGE_737 is not set
  2.3431 +# CONFIG_NLS_CODEPAGE_775 is not set
  2.3432 +CONFIG_NLS_CODEPAGE_850=y
  2.3433 +CONFIG_NLS_CODEPAGE_852=y
  2.3434 +# CONFIG_NLS_CODEPAGE_855 is not set
  2.3435 +# CONFIG_NLS_CODEPAGE_857 is not set
  2.3436 +# CONFIG_NLS_CODEPAGE_860 is not set
  2.3437 +# CONFIG_NLS_CODEPAGE_861 is not set
  2.3438 +# CONFIG_NLS_CODEPAGE_862 is not set
  2.3439 +CONFIG_NLS_CODEPAGE_863=y
  2.3440 +# CONFIG_NLS_CODEPAGE_864 is not set
  2.3441 +CONFIG_NLS_CODEPAGE_865=y
  2.3442 +# CONFIG_NLS_CODEPAGE_866 is not set
  2.3443 +# CONFIG_NLS_CODEPAGE_869 is not set
  2.3444 +# CONFIG_NLS_CODEPAGE_936 is not set
  2.3445 +# CONFIG_NLS_CODEPAGE_950 is not set
  2.3446 +# CONFIG_NLS_CODEPAGE_932 is not set
  2.3447 +# CONFIG_NLS_CODEPAGE_949 is not set
  2.3448 +# CONFIG_NLS_CODEPAGE_874 is not set
  2.3449 +# CONFIG_NLS_ISO8859_8 is not set
  2.3450 +# CONFIG_NLS_CODEPAGE_1250 is not set
  2.3451 +# CONFIG_NLS_CODEPAGE_1251 is not set
  2.3452 +CONFIG_NLS_ASCII=y
  2.3453 +CONFIG_NLS_ISO8859_1=y
  2.3454 +CONFIG_NLS_ISO8859_2=y
  2.3455 +# CONFIG_NLS_ISO8859_3 is not set
  2.3456 +# CONFIG_NLS_ISO8859_4 is not set
  2.3457 +# CONFIG_NLS_ISO8859_5 is not set
  2.3458 +# CONFIG_NLS_ISO8859_6 is not set
  2.3459 +# CONFIG_NLS_ISO8859_7 is not set
  2.3460 +# CONFIG_NLS_ISO8859_9 is not set
  2.3461 +# CONFIG_NLS_ISO8859_13 is not set
  2.3462 +# CONFIG_NLS_ISO8859_14 is not set
  2.3463 +CONFIG_NLS_ISO8859_15=y
  2.3464 +# CONFIG_NLS_KOI8_R is not set
  2.3465 +# CONFIG_NLS_KOI8_U is not set
  2.3466 +CONFIG_NLS_UTF8=y
  2.3467 +CONFIG_DLM=m
  2.3468 +# CONFIG_DLM_DEBUG is not set
  2.3469 +
  2.3470 +#
  2.3471 +# Kernel hacking
  2.3472 +#
  2.3473 +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
  2.3474 +# CONFIG_PRINTK_TIME is not set
  2.3475 +CONFIG_ENABLE_WARN_DEPRECATED=y
  2.3476 +CONFIG_ENABLE_MUST_CHECK=y
  2.3477 +CONFIG_FRAME_WARN=1024
  2.3478 +# CONFIG_MAGIC_SYSRQ is not set
  2.3479 +CONFIG_STRIP_ASM_SYMS=y
  2.3480 +CONFIG_UNUSED_SYMBOLS=y
  2.3481 +# CONFIG_DEBUG_FS is not set
  2.3482 +# CONFIG_HEADERS_CHECK is not set
  2.3483 +# CONFIG_DEBUG_KERNEL is not set
  2.3484 +# CONFIG_HARDLOCKUP_DETECTOR is not set
  2.3485 +CONFIG_BKL=y
  2.3486 +# CONFIG_SPARSE_RCU_POINTER is not set
  2.3487 +CONFIG_DEBUG_BUGVERBOSE=y
  2.3488 +CONFIG_DEBUG_MEMORY_INIT=y
  2.3489 +CONFIG_ARCH_WANT_FRAME_POINTERS=y
  2.3490 +CONFIG_FRAME_POINTER=y
  2.3491 +# CONFIG_RCU_CPU_STALL_DETECTOR is not set
  2.3492 +# CONFIG_SYSCTL_SYSCALL_CHECK is not set
  2.3493 +CONFIG_USER_STACKTRACE_SUPPORT=y
  2.3494 +CONFIG_HAVE_FUNCTION_TRACER=y
  2.3495 +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
  2.3496 +CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y
  2.3497 +CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
  2.3498 +CONFIG_HAVE_DYNAMIC_FTRACE=y
  2.3499 +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
  2.3500 +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
  2.3501 +CONFIG_HAVE_C_RECORDMCOUNT=y
  2.3502 +CONFIG_TRACING_SUPPORT=y
  2.3503 +# CONFIG_FTRACE is not set
  2.3504 +# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
  2.3505 +# CONFIG_FIREWIRE_OHCI_REMOTE_DMA is not set
  2.3506 +# CONFIG_DMA_API_DEBUG is not set
  2.3507 +# CONFIG_ATOMIC64_SELFTEST is not set
  2.3508 +# CONFIG_ASYNC_RAID6_TEST is not set
  2.3509 +# CONFIG_SAMPLES is not set
  2.3510 +CONFIG_HAVE_ARCH_KGDB=y
  2.3511 +CONFIG_HAVE_ARCH_KMEMCHECK=y
  2.3512 +# CONFIG_STRICT_DEVMEM is not set
  2.3513 +CONFIG_X86_VERBOSE_BOOTUP=y
  2.3514 +CONFIG_EARLY_PRINTK=y
  2.3515 +# CONFIG_EARLY_PRINTK_DBGP is not set
  2.3516 +CONFIG_DOUBLEFAULT=y
  2.3517 +# CONFIG_IOMMU_STRESS is not set
  2.3518 +CONFIG_HAVE_MMIOTRACE_SUPPORT=y
  2.3519 +CONFIG_IO_DELAY_TYPE_0X80=0
  2.3520 +CONFIG_IO_DELAY_TYPE_0XED=1
  2.3521 +CONFIG_IO_DELAY_TYPE_UDELAY=2
  2.3522 +CONFIG_IO_DELAY_TYPE_NONE=3
  2.3523 +CONFIG_IO_DELAY_0X80=y
  2.3524 +# CONFIG_IO_DELAY_0XED is not set
  2.3525 +# CONFIG_IO_DELAY_UDELAY is not set
  2.3526 +# CONFIG_IO_DELAY_NONE is not set
  2.3527 +CONFIG_DEFAULT_IO_DELAY_TYPE=0
  2.3528 +# CONFIG_OPTIMIZE_INLINING is not set
  2.3529 +
  2.3530 +#
  2.3531 +# Security options
  2.3532 +#
  2.3533 +# CONFIG_KEYS is not set
  2.3534 +# CONFIG_SECURITY_DMESG_RESTRICT is not set
  2.3535 +# CONFIG_SECURITY is not set
  2.3536 +# CONFIG_SECURITYFS is not set
  2.3537 +CONFIG_DEFAULT_SECURITY_DAC=y
  2.3538 +CONFIG_DEFAULT_SECURITY=""
  2.3539 +CONFIG_XOR_BLOCKS=m
  2.3540 +CONFIG_ASYNC_CORE=m
  2.3541 +CONFIG_ASYNC_MEMCPY=m
  2.3542 +CONFIG_ASYNC_XOR=m
  2.3543 +CONFIG_ASYNC_PQ=m
  2.3544 +CONFIG_ASYNC_RAID6_RECOV=m
  2.3545 +CONFIG_CRYPTO=y
  2.3546 +
  2.3547 +#
  2.3548 +# Crypto core or helper
  2.3549 +#
  2.3550 +CONFIG_CRYPTO_ALGAPI=y
  2.3551 +CONFIG_CRYPTO_ALGAPI2=y
  2.3552 +CONFIG_CRYPTO_AEAD=y
  2.3553 +CONFIG_CRYPTO_AEAD2=y
  2.3554 +CONFIG_CRYPTO_BLKCIPHER=y
  2.3555 +CONFIG_CRYPTO_BLKCIPHER2=y
  2.3556 +CONFIG_CRYPTO_HASH=y
  2.3557 +CONFIG_CRYPTO_HASH2=y
  2.3558 +CONFIG_CRYPTO_RNG2=y
  2.3559 +CONFIG_CRYPTO_PCOMP2=y
  2.3560 +CONFIG_CRYPTO_MANAGER=y
  2.3561 +CONFIG_CRYPTO_MANAGER2=y
  2.3562 +CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
  2.3563 +# CONFIG_CRYPTO_GF128MUL is not set
  2.3564 +# CONFIG_CRYPTO_NULL is not set
  2.3565 +# CONFIG_CRYPTO_PCRYPT is not set
  2.3566 +CONFIG_CRYPTO_WORKQUEUE=y
  2.3567 +# CONFIG_CRYPTO_CRYPTD is not set
  2.3568 +CONFIG_CRYPTO_AUTHENC=y
  2.3569 +# CONFIG_CRYPTO_TEST is not set
  2.3570 +
  2.3571 +#
  2.3572 +# Authenticated Encryption with Associated Data
  2.3573 +#
  2.3574 +# CONFIG_CRYPTO_CCM is not set
  2.3575 +# CONFIG_CRYPTO_GCM is not set
  2.3576 +# CONFIG_CRYPTO_SEQIV is not set
  2.3577 +
  2.3578 +#
  2.3579 +# Block modes
  2.3580 +#
  2.3581 +CONFIG_CRYPTO_CBC=y
  2.3582 +# CONFIG_CRYPTO_CTR is not set
  2.3583 +# CONFIG_CRYPTO_CTS is not set
  2.3584 +CONFIG_CRYPTO_ECB=y
  2.3585 +# CONFIG_CRYPTO_LRW is not set
  2.3586 +CONFIG_CRYPTO_PCBC=m
  2.3587 +CONFIG_CRYPTO_XTS=m
  2.3588 +
  2.3589 +#
  2.3590 +# Hash modes
  2.3591 +#
  2.3592 +CONFIG_CRYPTO_HMAC=y
  2.3593 +# CONFIG_CRYPTO_XCBC is not set
  2.3594 +# CONFIG_CRYPTO_VMAC is not set
  2.3595 +
  2.3596 +#
  2.3597 +# Digest
  2.3598 +#
  2.3599 +CONFIG_CRYPTO_CRC32C=m
  2.3600 +# CONFIG_CRYPTO_CRC32C_INTEL is not set
  2.3601 +# CONFIG_CRYPTO_GHASH is not set
  2.3602 +# CONFIG_CRYPTO_MD4 is not set
  2.3603 +CONFIG_CRYPTO_MD5=y
  2.3604 +CONFIG_CRYPTO_MICHAEL_MIC=m
  2.3605 +# CONFIG_CRYPTO_RMD128 is not set
  2.3606 +# CONFIG_CRYPTO_RMD160 is not set
  2.3607 +# CONFIG_CRYPTO_RMD256 is not set
  2.3608 +# CONFIG_CRYPTO_RMD320 is not set
  2.3609 +CONFIG_CRYPTO_SHA1=y
  2.3610 +CONFIG_CRYPTO_SHA256=m
  2.3611 +CONFIG_CRYPTO_SHA512=m
  2.3612 +# CONFIG_CRYPTO_TGR192 is not set
  2.3613 +# CONFIG_CRYPTO_WP512 is not set
  2.3614 +
  2.3615 +#
  2.3616 +# Ciphers
  2.3617 +#
  2.3618 +CONFIG_CRYPTO_AES=m
  2.3619 +CONFIG_CRYPTO_AES_586=m
  2.3620 +# CONFIG_CRYPTO_ANUBIS is not set
  2.3621 +CONFIG_CRYPTO_ARC4=y
  2.3622 +CONFIG_CRYPTO_BLOWFISH=m
  2.3623 +# CONFIG_CRYPTO_CAMELLIA is not set
  2.3624 +# CONFIG_CRYPTO_CAST5 is not set
  2.3625 +# CONFIG_CRYPTO_CAST6 is not set
  2.3626 +CONFIG_CRYPTO_DES=y
  2.3627 +CONFIG_CRYPTO_FCRYPT=m
  2.3628 +# CONFIG_CRYPTO_KHAZAD is not set
  2.3629 +# CONFIG_CRYPTO_SALSA20 is not set
  2.3630 +# CONFIG_CRYPTO_SALSA20_586 is not set
  2.3631 +# CONFIG_CRYPTO_SEED is not set
  2.3632 +CONFIG_CRYPTO_SERPENT=m
  2.3633 +# CONFIG_CRYPTO_TEA is not set
  2.3634 +CONFIG_CRYPTO_TWOFISH=m
  2.3635 +CONFIG_CRYPTO_TWOFISH_COMMON=m
  2.3636 +CONFIG_CRYPTO_TWOFISH_586=m
  2.3637 +
  2.3638 +#
  2.3639 +# Compression
  2.3640 +#
  2.3641 +CONFIG_CRYPTO_DEFLATE=y
  2.3642 +# CONFIG_CRYPTO_ZLIB is not set
  2.3643 +# CONFIG_CRYPTO_LZO is not set
  2.3644 +
  2.3645 +#
  2.3646 +# Random Number Generation
  2.3647 +#
  2.3648 +# CONFIG_CRYPTO_ANSI_CPRNG is not set
  2.3649 +CONFIG_CRYPTO_HW=y
  2.3650 +CONFIG_CRYPTO_DEV_PADLOCK=m
  2.3651 +CONFIG_CRYPTO_DEV_PADLOCK_AES=m
  2.3652 +CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
  2.3653 +CONFIG_CRYPTO_DEV_GEODE=m
  2.3654 +CONFIG_CRYPTO_DEV_HIFN_795X=m
  2.3655 +CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
  2.3656 +CONFIG_HAVE_KVM=y
  2.3657 +CONFIG_HAVE_KVM_IRQCHIP=y
  2.3658 +CONFIG_HAVE_KVM_EVENTFD=y
  2.3659 +CONFIG_KVM_APIC_ARCHITECTURE=y
  2.3660 +CONFIG_KVM_MMIO=y
  2.3661 +CONFIG_VIRTUALIZATION=y
  2.3662 +CONFIG_KVM=m
  2.3663 +CONFIG_KVM_INTEL=m
  2.3664 +CONFIG_KVM_AMD=m
  2.3665 +# CONFIG_VHOST_NET is not set
  2.3666 +CONFIG_LGUEST=m
  2.3667 +CONFIG_VIRTIO=y
  2.3668 +CONFIG_VIRTIO_RING=y
  2.3669 +CONFIG_VIRTIO_PCI=m
  2.3670 +# CONFIG_VIRTIO_BALLOON is not set
  2.3671 +# CONFIG_BINARY_PRINTF is not set
  2.3672 +
  2.3673 +#
  2.3674 +# Library routines
  2.3675 +#
  2.3676 +CONFIG_RAID6_PQ=m
  2.3677 +CONFIG_BITREVERSE=y
  2.3678 +CONFIG_GENERIC_FIND_FIRST_BIT=y
  2.3679 +CONFIG_GENERIC_FIND_NEXT_BIT=y
  2.3680 +CONFIG_GENERIC_FIND_LAST_BIT=y
  2.3681 +CONFIG_CRC_CCITT=y
  2.3682 +CONFIG_CRC16=y
  2.3683 +# CONFIG_CRC_T10DIF is not set
  2.3684 +CONFIG_CRC_ITU_T=m
  2.3685 +CONFIG_CRC32=y
  2.3686 +CONFIG_CRC7=m
  2.3687 +CONFIG_LIBCRC32C=m
  2.3688 +CONFIG_ZLIB_INFLATE=y
  2.3689 +CONFIG_ZLIB_DEFLATE=y
  2.3690 +CONFIG_LZO_COMPRESS=y
  2.3691 +CONFIG_LZO_DECOMPRESS=y
  2.3692 +CONFIG_XZ_DEC=y
  2.3693 +CONFIG_XZ_DEC_X86=y
  2.3694 +CONFIG_XZ_DEC_POWERPC=y
  2.3695 +CONFIG_XZ_DEC_IA64=y
  2.3696 +CONFIG_XZ_DEC_ARM=y
  2.3697 +CONFIG_XZ_DEC_ARMTHUMB=y
  2.3698 +CONFIG_XZ_DEC_SPARC=y
  2.3699 +CONFIG_XZ_DEC_BCJ=y
  2.3700 +# CONFIG_XZ_DEC_TEST is not set
  2.3701 +CONFIG_DECOMPRESS_GZIP=y
  2.3702 +CONFIG_DECOMPRESS_BZIP2=y
  2.3703 +CONFIG_DECOMPRESS_LZMA=y
  2.3704 +CONFIG_DECOMPRESS_XZ=y
  2.3705 +CONFIG_DECOMPRESS_LZO=y
  2.3706 +CONFIG_TEXTSEARCH=y
  2.3707 +CONFIG_TEXTSEARCH_KMP=m
  2.3708 +CONFIG_TEXTSEARCH_BM=m
  2.3709 +CONFIG_TEXTSEARCH_FSM=m
  2.3710 +CONFIG_BTREE=y
  2.3711 +CONFIG_HAS_IOMEM=y
  2.3712 +CONFIG_HAS_IOPORT=y
  2.3713 +CONFIG_HAS_DMA=y
  2.3714 +CONFIG_NLATTR=y