wok rev 3

Add 'linux' Kernel config + patches
author Christophe Lincoln <pankso@slitaz.org>
date Thu Dec 13 11:30:29 2007 +0100 (2007-12-13)
parents 47ae9d067aef
children bc07037253c6
files linux/receipt linux/stuff/boot-kernel.u linux/stuff/decompress_unlzma.u linux/stuff/gztazmod.sh linux/stuff/linux-2.6.22.9-slitaz.config linux/stuff/linux-lzma-2.6.22.9.u
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/linux/receipt	Thu Dec 13 11:30:29 2007 +0100
     1.3 @@ -0,0 +1,53 @@
     1.4 +# SliTaz package receipt.
     1.5 +
     1.6 +PACKAGE="linux"
     1.7 +VERSION="2.6.22.9"
     1.8 +CATEGORY="base-system"
     1.9 +SHORT_DESC="The Linux kernel and modules."
    1.10 +MAINTAINER="pankso@slitaz.org"
    1.11 +TARBALL="$PACKAGE-$VERSION.tar.bz2"
    1.12 +WEB_SITE="http://www.kernel.org/"
    1.13 +WGET_URL="http://www.eu.kernel.org/pub/linux/kernel/v2.6/$TARBALL"
    1.14 +
    1.15 +# Rules to configure and make the package.
    1.16 +compile_rules()
    1.17 +{
    1.18 +    cd $src
    1.19 +    # lzma and boot patch from pascal
    1.20 +    patch -p1 < ../stuff/boot-kernel.u
    1.21 +    patch -p1 < ../stuff/$PACKAGE-lzma-$VERSION.u
    1.22 +    patch -p1 < ../stuff/decompress_unlzma.u
    1.23 +    make mrproper
    1.24 +    cp ../stuff/$PACKAGE-$VERSION-slitaz.config .config
    1.25 +    make oldconfig
    1.26 +    make bzImage
    1.27 +    make modules
    1.28 +    make INSTALL_MOD_PATH=$PWD/_pkg modules_install
    1.29 +}
    1.30 +
    1.31 +# Rules to gen a SliTaz package suitable for Tazpkg.
    1.32 +genpkg_rules()
    1.33 +{
    1.34 +    mkdir $fs/boot
    1.35 +    cp -a $src/arch/i386/boot/bzImage $fs/boot/vmlinuz-$VERSION-slitaz
    1.36 +    cp -a $_pkg/* $fs
    1.37 +    # Compress all modules.
    1.38 +    # Package module-init-tools is compiled with zlib support.
    1.39 +    #
    1.40 +    ./stuff/gztazmod.sh $fs/lib/modules/$VERSION-slitaz
    1.41 +}
    1.42 +
    1.43 +# Pre and post install commands for Tazpkg.
    1.44 +# GRUB stuf.
    1.45 +post_install()
    1.46 +{
    1.47 +  echo "Processing post-install commands..."
    1.48 +  echo "----"
    1.49 +  echo "If you have GRUB installed, you can add tree lines to boot SliTaz."
    1.50 +  echo "Example /boot/grub/menu.lst"
    1.51 +  echo -e "
    1.52 +title  SliTaz GNU/Linux (Kernel $VERSION-slitaz)
    1.53 +       root(hd0,0)
    1.54 +       kernel /boot/vmlinuz-$VERSION-slitaz root=/dev/hda1 vga=771\n"
    1.55 +  echo "----"
    1.56 +}
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/linux/stuff/boot-kernel.u	Thu Dec 13 11:30:29 2007 +0100
     2.3 @@ -0,0 +1,11 @@
     2.4 +--- linux-2.6.22.9/init/initramfs.c
     2.5 ++++ linux-2.6.22.9/init/initramfs.c
     2.6 +@@ -549,7 +549,7 @@
     2.7 + 		panic(err);
     2.8 + #ifdef CONFIG_BLK_DEV_INITRD
     2.9 + 	if (initrd_start) {
    2.10 +-#ifdef CONFIG_BLK_DEV_RAM
    2.11 ++#ifdef NOT_IN_SLITAZ_CONFIG_BLK_DEV_RAM
    2.12 + 		int fd;
    2.13 + 		printk(KERN_INFO "checking if image is initramfs...");
    2.14 + 		err = unpack_to_rootfs((char *)initrd_start,
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/linux/stuff/decompress_unlzma.u	Thu Dec 13 11:30:29 2007 +0100
     3.3 @@ -0,0 +1,10 @@
     3.4 +--- linux-2.6.22.9/lib/decompress_unlzma.c
     3.5 ++++ linux-2.6.22.9/lib/decompress_unlzma.c
     3.6 +@@ -73,6 +73,7 @@
     3.7 + 
     3.8 + #endif
     3.9 + 
    3.10 ++#define CONFIG_FEATURE_LZMA_FAST
    3.11 + #include <linux/decompress_unlzma.h>
    3.12 + 
    3.13 + #define	MIN(a,b) (((a)<(b))?(a):(b))
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/linux/stuff/gztazmod.sh	Thu Dec 13 11:30:29 2007 +0100
     4.3 @@ -0,0 +1,64 @@
     4.4 +#!/bin/sh
     4.5 +# gztazmod.sh: Compress Linux kernel modules for SliTaz GNU/Linux.
     4.6 +# 2007/10/04 <pankso@slitaz.org> - GNU General Public License.
     4.7 +#
     4.8 +
     4.9 +# We do our work in the kernel version modules directory.
    4.10 +if [ -z "$1" ] ; then
    4.11 +  echo ""
    4.12 +  echo -e "\033[1musage:\033[0m `basename $0` path/to/kernel-version"
    4.13 +  echo ""
    4.14 +  exit 1
    4.15 +fi
    4.16 +
    4.17 +if [ ! -r "$1" ] ; then
    4.18 +  echo ""
    4.19 +  echo -e "Error : $1 does not exist."
    4.20 +  echo ""
    4.21 +  exit 1
    4.22 +fi
    4.23 +
    4.24 +cd $1
    4.25 +
    4.26 +# Status functions.
    4.27 +status()
    4.28 +{
    4.29 +	local CHECK=$?
    4.30 +	echo -en "\\033[70G[ "
    4.31 +	if [ $CHECK = 0 ]; then
    4.32 +		echo -en "\\033[1;33mOK"
    4.33 +	else
    4.34 +		echo -en "\\033[1;31mFailed"
    4.35 +	fi
    4.36 +	echo -e "\\033[0;39m ]"
    4.37 +}
    4.38 +
    4.39 +# Script start.
    4.40 +echo ""
    4.41 +echo "Starting gztazmod.sh to build compressed kernel modules... "
    4.42 +echo ""
    4.43 +
    4.44 +# Find all modules.
    4.45 +echo -n "Searching all modules to gzip them... "
    4.46 +find . -name "*.ko" -exec gzip '{}' \;
    4.47 +status
    4.48 +
    4.49 +# Build a new temporary modules.dep.
    4.50 +echo -n "Building tmp.dep... "
    4.51 +sed 's/\.ko/.ko.gz/g' modules.dep > tmp.dep
    4.52 +status
    4.53 +
    4.54 +# Destroy original modules.dep
    4.55 +echo -n "Destroying modules.dep... "
    4.56 +rm modules.dep
    4.57 +status
    4.58 +
    4.59 +# Remove tmp.dep to modules.dep.
    4.60 +echo -n "Removing tmp.dep to modules.dep... "
    4.61 +mv tmp.dep modules.dep
    4.62 +status
    4.63 +
    4.64 +# Script end.
    4.65 +echo ""
    4.66 +echo "Kernel modules `basename $1` are ready."
    4.67 +echo ""
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/linux/stuff/linux-2.6.22.9-slitaz.config	Thu Dec 13 11:30:29 2007 +0100
     5.3 @@ -0,0 +1,1828 @@
     5.4 +#
     5.5 +# Automatically generated make config: don't edit
     5.6 +# Linux kernel version: 2.6.22.9
     5.7 +# Sat Dec  1 11:06:26 2007
     5.8 +#
     5.9 +CONFIG_X86_32=y
    5.10 +CONFIG_GENERIC_TIME=y
    5.11 +CONFIG_CLOCKSOURCE_WATCHDOG=y
    5.12 +CONFIG_GENERIC_CLOCKEVENTS=y
    5.13 +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
    5.14 +CONFIG_LOCKDEP_SUPPORT=y
    5.15 +CONFIG_STACKTRACE_SUPPORT=y
    5.16 +CONFIG_SEMAPHORE_SLEEPERS=y
    5.17 +CONFIG_X86=y
    5.18 +CONFIG_MMU=y
    5.19 +CONFIG_ZONE_DMA=y
    5.20 +CONFIG_QUICKLIST=y
    5.21 +CONFIG_GENERIC_ISA_DMA=y
    5.22 +CONFIG_GENERIC_IOMAP=y
    5.23 +CONFIG_GENERIC_BUG=y
    5.24 +CONFIG_GENERIC_HWEIGHT=y
    5.25 +CONFIG_ARCH_MAY_HAVE_PC_FDC=y
    5.26 +CONFIG_DMI=y
    5.27 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
    5.28 +
    5.29 +#
    5.30 +# Code maturity level options
    5.31 +#
    5.32 +CONFIG_EXPERIMENTAL=y
    5.33 +CONFIG_LOCK_KERNEL=y
    5.34 +CONFIG_INIT_ENV_ARG_LIMIT=32
    5.35 +
    5.36 +#
    5.37 +# General setup
    5.38 +#
    5.39 +CONFIG_LOCALVERSION="-slitaz"
    5.40 +# CONFIG_LOCALVERSION_AUTO is not set
    5.41 +# CONFIG_KERNEL_GZIP is not set
    5.42 +# CONFIG_KERNEL_BZIP2 is not set
    5.43 +CONFIG_KERNEL_LZMA=y
    5.44 +CONFIG_SWAP=y
    5.45 +CONFIG_SYSVIPC=y
    5.46 +# CONFIG_IPC_NS is not set
    5.47 +CONFIG_SYSVIPC_SYSCTL=y
    5.48 +CONFIG_POSIX_MQUEUE=y
    5.49 +CONFIG_BSD_PROCESS_ACCT=y
    5.50 +# CONFIG_BSD_PROCESS_ACCT_V3 is not set
    5.51 +# CONFIG_TASKSTATS is not set
    5.52 +# CONFIG_UTS_NS is not set
    5.53 +# CONFIG_AUDIT is not set
    5.54 +CONFIG_IKCONFIG=y
    5.55 +CONFIG_IKCONFIG_PROC=y
    5.56 +CONFIG_LOG_BUF_SHIFT=14
    5.57 +# CONFIG_CPUSETS is not set
    5.58 +# CONFIG_SYSFS_DEPRECATED is not set
    5.59 +# CONFIG_RELAY is not set
    5.60 +CONFIG_BLK_DEV_INITRD=y
    5.61 +CONFIG_INITRAMFS_SOURCE=""
    5.62 +CONFIG_CC_OPTIMIZE_FOR_SIZE=y
    5.63 +CONFIG_SYSCTL=y
    5.64 +# CONFIG_EMBEDDED is not set
    5.65 +CONFIG_UID16=y
    5.66 +CONFIG_SYSCTL_SYSCALL=y
    5.67 +CONFIG_KALLSYMS=y
    5.68 +# CONFIG_KALLSYMS_EXTRA_PASS is not set
    5.69 +CONFIG_HOTPLUG=y
    5.70 +CONFIG_PRINTK=y
    5.71 +CONFIG_BUG=y
    5.72 +CONFIG_ELF_CORE=y
    5.73 +CONFIG_BASE_FULL=y
    5.74 +CONFIG_FUTEX=y
    5.75 +CONFIG_ANON_INODES=y
    5.76 +CONFIG_EPOLL=y
    5.77 +CONFIG_SIGNALFD=y
    5.78 +CONFIG_EVENTFD=y
    5.79 +CONFIG_SHMEM=y
    5.80 +CONFIG_VM_EVENT_COUNTERS=y
    5.81 +CONFIG_SLAB=y
    5.82 +# CONFIG_SLUB is not set
    5.83 +# CONFIG_SLOB is not set
    5.84 +CONFIG_RT_MUTEXES=y
    5.85 +# CONFIG_TINY_SHMEM is not set
    5.86 +CONFIG_BASE_SMALL=0
    5.87 +
    5.88 +#
    5.89 +# Loadable module support
    5.90 +#
    5.91 +CONFIG_MODULES=y
    5.92 +CONFIG_MODULE_UNLOAD=y
    5.93 +# CONFIG_MODULE_FORCE_UNLOAD is not set
    5.94 +# CONFIG_MODVERSIONS is not set
    5.95 +# CONFIG_MODULE_SRCVERSION_ALL is not set
    5.96 +CONFIG_KMOD=y
    5.97 +CONFIG_STOP_MACHINE=y
    5.98 +
    5.99 +#
   5.100 +# Block layer
   5.101 +#
   5.102 +CONFIG_BLOCK=y
   5.103 +# CONFIG_LBD is not set
   5.104 +# CONFIG_BLK_DEV_IO_TRACE is not set
   5.105 +# CONFIG_LSF is not set
   5.106 +
   5.107 +#
   5.108 +# IO Schedulers
   5.109 +#
   5.110 +CONFIG_IOSCHED_NOOP=y
   5.111 +# CONFIG_IOSCHED_AS is not set
   5.112 +CONFIG_IOSCHED_DEADLINE=y
   5.113 +# CONFIG_IOSCHED_CFQ is not set
   5.114 +# CONFIG_DEFAULT_AS is not set
   5.115 +CONFIG_DEFAULT_DEADLINE=y
   5.116 +# CONFIG_DEFAULT_CFQ is not set
   5.117 +# CONFIG_DEFAULT_NOOP is not set
   5.118 +CONFIG_DEFAULT_IOSCHED="deadline"
   5.119 +
   5.120 +#
   5.121 +# Processor type and features
   5.122 +#
   5.123 +# CONFIG_TICK_ONESHOT is not set
   5.124 +# CONFIG_NO_HZ is not set
   5.125 +# CONFIG_HIGH_RES_TIMERS is not set
   5.126 +CONFIG_SMP=y
   5.127 +CONFIG_X86_PC=y
   5.128 +# CONFIG_X86_ELAN is not set
   5.129 +# CONFIG_X86_VOYAGER is not set
   5.130 +# CONFIG_X86_NUMAQ is not set
   5.131 +# CONFIG_X86_SUMMIT is not set
   5.132 +# CONFIG_X86_BIGSMP is not set
   5.133 +# CONFIG_X86_VISWS is not set
   5.134 +# CONFIG_X86_GENERICARCH is not set
   5.135 +# CONFIG_X86_ES7000 is not set
   5.136 +# CONFIG_PARAVIRT is not set
   5.137 +CONFIG_M386=y
   5.138 +# CONFIG_M486 is not set
   5.139 +# CONFIG_M586 is not set
   5.140 +# CONFIG_M586TSC is not set
   5.141 +# CONFIG_M586MMX is not set
   5.142 +# CONFIG_M686 is not set
   5.143 +# CONFIG_MPENTIUMII is not set
   5.144 +# CONFIG_MPENTIUMIII is not set
   5.145 +# CONFIG_MPENTIUMM is not set
   5.146 +# CONFIG_MCORE2 is not set
   5.147 +# CONFIG_MPENTIUM4 is not set
   5.148 +# CONFIG_MK6 is not set
   5.149 +# CONFIG_MK7 is not set
   5.150 +# CONFIG_MK8 is not set
   5.151 +# CONFIG_MCRUSOE is not set
   5.152 +# CONFIG_MEFFICEON is not set
   5.153 +# CONFIG_MWINCHIPC6 is not set
   5.154 +# CONFIG_MWINCHIP2 is not set
   5.155 +# CONFIG_MWINCHIP3D is not set
   5.156 +# CONFIG_MGEODEGX1 is not set
   5.157 +# CONFIG_MGEODE_LX is not set
   5.158 +# CONFIG_MCYRIXIII is not set
   5.159 +# CONFIG_MVIAC3_2 is not set
   5.160 +# CONFIG_MVIAC7 is not set
   5.161 +CONFIG_X86_GENERIC=y
   5.162 +CONFIG_X86_L1_CACHE_SHIFT=7
   5.163 +CONFIG_RWSEM_GENERIC_SPINLOCK=y
   5.164 +# CONFIG_ARCH_HAS_ILOG2_U32 is not set
   5.165 +# CONFIG_ARCH_HAS_ILOG2_U64 is not set
   5.166 +CONFIG_GENERIC_CALIBRATE_DELAY=y
   5.167 +CONFIG_X86_PPRO_FENCE=y
   5.168 +CONFIG_X86_F00F_BUG=y
   5.169 +CONFIG_X86_INTEL_USERCOPY=y
   5.170 +CONFIG_X86_MINIMUM_CPU_MODEL=0
   5.171 +# CONFIG_HPET_TIMER is not set
   5.172 +CONFIG_NR_CPUS=8
   5.173 +# CONFIG_SCHED_SMT is not set
   5.174 +CONFIG_SCHED_MC=y
   5.175 +CONFIG_PREEMPT_NONE=y
   5.176 +# CONFIG_PREEMPT_VOLUNTARY is not set
   5.177 +# CONFIG_PREEMPT is not set
   5.178 +CONFIG_PREEMPT_BKL=y
   5.179 +CONFIG_X86_LOCAL_APIC=y
   5.180 +CONFIG_X86_IO_APIC=y
   5.181 +# CONFIG_X86_MCE is not set
   5.182 +CONFIG_VM86=y
   5.183 +# CONFIG_TOSHIBA is not set
   5.184 +# CONFIG_I8K is not set
   5.185 +# CONFIG_X86_REBOOTFIXUPS is not set
   5.186 +# CONFIG_MICROCODE is not set
   5.187 +# CONFIG_X86_MSR is not set
   5.188 +# CONFIG_X86_CPUID is not set
   5.189 +
   5.190 +#
   5.191 +# Firmware Drivers
   5.192 +#
   5.193 +# CONFIG_EDD is not set
   5.194 +# CONFIG_DELL_RBU is not set
   5.195 +# CONFIG_DCDBAS is not set
   5.196 +# CONFIG_NOHIGHMEM is not set
   5.197 +CONFIG_HIGHMEM4G=y
   5.198 +# CONFIG_HIGHMEM64G is not set
   5.199 +CONFIG_PAGE_OFFSET=0xC0000000
   5.200 +CONFIG_HIGHMEM=y
   5.201 +CONFIG_ARCH_FLATMEM_ENABLE=y
   5.202 +CONFIG_ARCH_SPARSEMEM_ENABLE=y
   5.203 +CONFIG_ARCH_SELECT_MEMORY_MODEL=y
   5.204 +CONFIG_ARCH_POPULATES_NODE_MAP=y
   5.205 +CONFIG_SELECT_MEMORY_MODEL=y
   5.206 +CONFIG_FLATMEM_MANUAL=y
   5.207 +# CONFIG_DISCONTIGMEM_MANUAL is not set
   5.208 +# CONFIG_SPARSEMEM_MANUAL is not set
   5.209 +CONFIG_FLATMEM=y
   5.210 +CONFIG_FLAT_NODE_MEM_MAP=y
   5.211 +CONFIG_SPARSEMEM_STATIC=y
   5.212 +CONFIG_SPLIT_PTLOCK_CPUS=4
   5.213 +# CONFIG_RESOURCES_64BIT is not set
   5.214 +CONFIG_ZONE_DMA_FLAG=1
   5.215 +CONFIG_NR_QUICK=1
   5.216 +# CONFIG_HIGHPTE is not set
   5.217 +CONFIG_MATH_EMULATION=y
   5.218 +CONFIG_MTRR=y
   5.219 +CONFIG_IRQBALANCE=y
   5.220 +# CONFIG_SECCOMP is not set
   5.221 +# CONFIG_HZ_100 is not set
   5.222 +# CONFIG_HZ_250 is not set
   5.223 +CONFIG_HZ_300=y
   5.224 +# CONFIG_HZ_1000 is not set
   5.225 +CONFIG_HZ=300
   5.226 +# CONFIG_KEXEC is not set
   5.227 +# CONFIG_CRASH_DUMP is not set
   5.228 +CONFIG_PHYSICAL_START=0x100000
   5.229 +# CONFIG_RELOCATABLE is not set
   5.230 +CONFIG_PHYSICAL_ALIGN=0x100000
   5.231 +# CONFIG_HOTPLUG_CPU is not set
   5.232 +CONFIG_COMPAT_VDSO=y
   5.233 +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
   5.234 +
   5.235 +#
   5.236 +# Power management options (ACPI, APM)
   5.237 +#
   5.238 +# CONFIG_PM is not set
   5.239 +
   5.240 +#
   5.241 +# CPU Frequency scaling
   5.242 +#
   5.243 +# CONFIG_CPU_FREQ is not set
   5.244 +
   5.245 +#
   5.246 +# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
   5.247 +#
   5.248 +CONFIG_PCI=y
   5.249 +# CONFIG_PCI_GOBIOS is not set
   5.250 +# CONFIG_PCI_GOMMCONFIG is not set
   5.251 +# CONFIG_PCI_GODIRECT is not set
   5.252 +CONFIG_PCI_GOANY=y
   5.253 +CONFIG_PCI_BIOS=y
   5.254 +CONFIG_PCI_DIRECT=y
   5.255 +# CONFIG_PCIEPORTBUS is not set
   5.256 +CONFIG_ARCH_SUPPORTS_MSI=y
   5.257 +# CONFIG_PCI_MSI is not set
   5.258 +CONFIG_HT_IRQ=y
   5.259 +CONFIG_ISA_DMA_API=y
   5.260 +CONFIG_ISA=y
   5.261 +# CONFIG_EISA is not set
   5.262 +# CONFIG_MCA is not set
   5.263 +# CONFIG_SCx200 is not set
   5.264 +
   5.265 +#
   5.266 +# PCCARD (PCMCIA/CardBus) support
   5.267 +#
   5.268 +CONFIG_PCCARD=m
   5.269 +# CONFIG_PCMCIA_DEBUG is not set
   5.270 +CONFIG_PCMCIA=m
   5.271 +CONFIG_PCMCIA_LOAD_CIS=y
   5.272 +CONFIG_PCMCIA_IOCTL=y
   5.273 +CONFIG_CARDBUS=y
   5.274 +
   5.275 +#
   5.276 +# PC-card bridges
   5.277 +#
   5.278 +CONFIG_YENTA=m
   5.279 +CONFIG_YENTA_O2=y
   5.280 +CONFIG_YENTA_RICOH=y
   5.281 +CONFIG_YENTA_TI=y
   5.282 +CONFIG_YENTA_ENE_TUNE=y
   5.283 +CONFIG_YENTA_TOSHIBA=y
   5.284 +CONFIG_PD6729=m
   5.285 +CONFIG_I82092=m
   5.286 +CONFIG_I82365=m
   5.287 +# CONFIG_TCIC is not set
   5.288 +CONFIG_PCMCIA_PROBE=y
   5.289 +CONFIG_PCCARD_NONSTATIC=m
   5.290 +# CONFIG_HOTPLUG_PCI is not set
   5.291 +
   5.292 +#
   5.293 +# Executable file formats
   5.294 +#
   5.295 +CONFIG_BINFMT_ELF=y
   5.296 +# CONFIG_BINFMT_AOUT is not set
   5.297 +# CONFIG_BINFMT_MISC is not set
   5.298 +
   5.299 +#
   5.300 +# Networking
   5.301 +#
   5.302 +CONFIG_NET=y
   5.303 +
   5.304 +#
   5.305 +# Networking options
   5.306 +#
   5.307 +CONFIG_PACKET=y
   5.308 +# CONFIG_PACKET_MMAP is not set
   5.309 +CONFIG_UNIX=y
   5.310 +CONFIG_XFRM=y
   5.311 +# CONFIG_XFRM_USER is not set
   5.312 +# CONFIG_XFRM_SUB_POLICY is not set
   5.313 +# CONFIG_XFRM_MIGRATE is not set
   5.314 +CONFIG_NET_KEY=y
   5.315 +# CONFIG_NET_KEY_MIGRATE is not set
   5.316 +CONFIG_INET=y
   5.317 +# CONFIG_IP_MULTICAST is not set
   5.318 +# CONFIG_IP_ADVANCED_ROUTER is not set
   5.319 +CONFIG_IP_FIB_HASH=y
   5.320 +# CONFIG_IP_PNP is not set
   5.321 +# CONFIG_NET_IPIP is not set
   5.322 +# CONFIG_NET_IPGRE is not set
   5.323 +# CONFIG_ARPD is not set
   5.324 +CONFIG_SYN_COOKIES=y
   5.325 +CONFIG_INET_AH=y
   5.326 +CONFIG_INET_ESP=y
   5.327 +CONFIG_INET_IPCOMP=y
   5.328 +CONFIG_INET_XFRM_TUNNEL=y
   5.329 +CONFIG_INET_TUNNEL=y
   5.330 +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
   5.331 +# CONFIG_INET_XFRM_MODE_TUNNEL is not set
   5.332 +# CONFIG_INET_XFRM_MODE_BEET is not set
   5.333 +CONFIG_INET_DIAG=y
   5.334 +CONFIG_INET_TCP_DIAG=y
   5.335 +# CONFIG_TCP_CONG_ADVANCED is not set
   5.336 +CONFIG_TCP_CONG_CUBIC=y
   5.337 +CONFIG_DEFAULT_TCP_CONG="cubic"
   5.338 +# CONFIG_TCP_MD5SIG is not set
   5.339 +# CONFIG_IP_VS is not set
   5.340 +# CONFIG_IPV6 is not set
   5.341 +# CONFIG_INET6_XFRM_TUNNEL is not set
   5.342 +# CONFIG_INET6_TUNNEL is not set
   5.343 +# CONFIG_NETWORK_SECMARK is not set
   5.344 +CONFIG_NETFILTER=y
   5.345 +# CONFIG_NETFILTER_DEBUG is not set
   5.346 +
   5.347 +#
   5.348 +# Core Netfilter Configuration
   5.349 +#
   5.350 +CONFIG_NETFILTER_NETLINK=y
   5.351 +# CONFIG_NETFILTER_NETLINK_QUEUE is not set
   5.352 +CONFIG_NETFILTER_NETLINK_LOG=m
   5.353 +# CONFIG_NF_CONNTRACK_ENABLED is not set
   5.354 +# CONFIG_NF_CONNTRACK is not set
   5.355 +CONFIG_NETFILTER_XTABLES=y
   5.356 +# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
   5.357 +# CONFIG_NETFILTER_XT_TARGET_MARK is not set
   5.358 +# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
   5.359 +# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
   5.360 +# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
   5.361 +# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
   5.362 +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
   5.363 +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
   5.364 +# CONFIG_NETFILTER_XT_MATCH_ESP is not set
   5.365 +# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
   5.366 +# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
   5.367 +# CONFIG_NETFILTER_XT_MATCH_MAC is not set
   5.368 +# CONFIG_NETFILTER_XT_MATCH_MARK is not set
   5.369 +# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
   5.370 +# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
   5.371 +# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
   5.372 +# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
   5.373 +# CONFIG_NETFILTER_XT_MATCH_REALM is not set
   5.374 +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
   5.375 +# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
   5.376 +# CONFIG_NETFILTER_XT_MATCH_STRING is not set
   5.377 +# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
   5.378 +# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
   5.379 +
   5.380 +#
   5.381 +# IP: Netfilter Configuration
   5.382 +#
   5.383 +# CONFIG_IP_NF_QUEUE is not set
   5.384 +CONFIG_IP_NF_IPTABLES=y
   5.385 +# CONFIG_IP_NF_MATCH_IPRANGE is not set
   5.386 +# CONFIG_IP_NF_MATCH_TOS is not set
   5.387 +# CONFIG_IP_NF_MATCH_RECENT is not set
   5.388 +# CONFIG_IP_NF_MATCH_ECN is not set
   5.389 +# CONFIG_IP_NF_MATCH_AH is not set
   5.390 +# CONFIG_IP_NF_MATCH_TTL is not set
   5.391 +# CONFIG_IP_NF_MATCH_OWNER is not set
   5.392 +# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
   5.393 +CONFIG_IP_NF_FILTER=y
   5.394 +CONFIG_IP_NF_TARGET_REJECT=m
   5.395 +# CONFIG_IP_NF_TARGET_LOG is not set
   5.396 +# CONFIG_IP_NF_TARGET_ULOG is not set
   5.397 +# CONFIG_IP_NF_MANGLE is not set
   5.398 +# CONFIG_IP_NF_RAW is not set
   5.399 +# CONFIG_IP_NF_ARPTABLES is not set
   5.400 +# CONFIG_IP_DCCP is not set
   5.401 +# CONFIG_IP_SCTP is not set
   5.402 +# CONFIG_TIPC is not set
   5.403 +# CONFIG_ATM is not set
   5.404 +# CONFIG_BRIDGE is not set
   5.405 +# CONFIG_VLAN_8021Q is not set
   5.406 +# CONFIG_DECNET is not set
   5.407 +# CONFIG_LLC2 is not set
   5.408 +# CONFIG_IPX is not set
   5.409 +# CONFIG_ATALK is not set
   5.410 +# CONFIG_X25 is not set
   5.411 +# CONFIG_LAPB is not set
   5.412 +# CONFIG_ECONET is not set
   5.413 +# CONFIG_WAN_ROUTER is not set
   5.414 +
   5.415 +#
   5.416 +# QoS and/or fair queueing
   5.417 +#
   5.418 +# CONFIG_NET_SCHED is not set
   5.419 +
   5.420 +#
   5.421 +# Network testing
   5.422 +#
   5.423 +# CONFIG_NET_PKTGEN is not set
   5.424 +# CONFIG_HAMRADIO is not set
   5.425 +# CONFIG_IRDA is not set
   5.426 +# CONFIG_BT is not set
   5.427 +# CONFIG_AF_RXRPC is not set
   5.428 +
   5.429 +#
   5.430 +# Wireless
   5.431 +#
   5.432 +# CONFIG_CFG80211 is not set
   5.433 +# CONFIG_WIRELESS_EXT is not set
   5.434 +# CONFIG_MAC80211 is not set
   5.435 +# CONFIG_IEEE80211 is not set
   5.436 +# CONFIG_RFKILL is not set
   5.437 +
   5.438 +#
   5.439 +# Device Drivers
   5.440 +#
   5.441 +
   5.442 +#
   5.443 +# Generic Driver Options
   5.444 +#
   5.445 +CONFIG_STANDALONE=y
   5.446 +CONFIG_PREVENT_FIRMWARE_BUILD=y
   5.447 +CONFIG_FW_LOADER=m
   5.448 +# CONFIG_SYS_HYPERVISOR is not set
   5.449 +
   5.450 +#
   5.451 +# Connector - unified userspace <-> kernelspace linker
   5.452 +#
   5.453 +# CONFIG_CONNECTOR is not set
   5.454 +# CONFIG_MTD is not set
   5.455 +
   5.456 +#
   5.457 +# Parallel port support
   5.458 +#
   5.459 +# CONFIG_PARPORT is not set
   5.460 +
   5.461 +#
   5.462 +# Plug and Play support
   5.463 +#
   5.464 +CONFIG_PNP=y
   5.465 +# CONFIG_PNP_DEBUG is not set
   5.466 +
   5.467 +#
   5.468 +# Protocols
   5.469 +#
   5.470 +CONFIG_ISAPNP=y
   5.471 +# CONFIG_PNPBIOS is not set
   5.472 +# CONFIG_PNPACPI is not set
   5.473 +
   5.474 +#
   5.475 +# Block devices
   5.476 +#
   5.477 +CONFIG_BLK_DEV_FD=y
   5.478 +# CONFIG_BLK_DEV_XD is not set
   5.479 +# CONFIG_BLK_CPQ_DA is not set
   5.480 +# CONFIG_BLK_CPQ_CISS_DA is not set
   5.481 +# CONFIG_BLK_DEV_DAC960 is not set
   5.482 +# CONFIG_BLK_DEV_UMEM is not set
   5.483 +# CONFIG_BLK_DEV_COW_COMMON is not set
   5.484 +CONFIG_BLK_DEV_LOOP=y
   5.485 +# CONFIG_BLK_DEV_CRYPTOLOOP is not set
   5.486 +# CONFIG_BLK_DEV_NBD is not set
   5.487 +# CONFIG_BLK_DEV_SX8 is not set
   5.488 +# CONFIG_BLK_DEV_UB is not set
   5.489 +CONFIG_BLK_DEV_RAM=y
   5.490 +CONFIG_BLK_DEV_RAM_COUNT=16
   5.491 +CONFIG_BLK_DEV_RAM_SIZE=4096
   5.492 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
   5.493 +# CONFIG_RD_BZIP2 is not set
   5.494 +CONFIG_RD_LZMA=y
   5.495 +CONFIG_RD_GZIP=y
   5.496 +# CONFIG_CDROM_PKTCDVD is not set
   5.497 +# CONFIG_ATA_OVER_ETH is not set
   5.498 +
   5.499 +#
   5.500 +# Misc devices
   5.501 +#
   5.502 +# CONFIG_IBM_ASM is not set
   5.503 +# CONFIG_PHANTOM is not set
   5.504 +# CONFIG_SGI_IOC4 is not set
   5.505 +# CONFIG_TIFM_CORE is not set
   5.506 +CONFIG_IDE=y
   5.507 +CONFIG_BLK_DEV_IDE=y
   5.508 +
   5.509 +#
   5.510 +# Please see Documentation/ide.txt for help/info on IDE drives
   5.511 +#
   5.512 +# CONFIG_BLK_DEV_IDE_SATA is not set
   5.513 +# CONFIG_BLK_DEV_HD_IDE is not set
   5.514 +CONFIG_BLK_DEV_IDEDISK=y
   5.515 +CONFIG_IDEDISK_MULTI_MODE=y
   5.516 +# CONFIG_BLK_DEV_IDECS is not set
   5.517 +# CONFIG_BLK_DEV_DELKIN is not set
   5.518 +CONFIG_BLK_DEV_IDECD=y
   5.519 +# CONFIG_BLK_DEV_IDETAPE is not set
   5.520 +CONFIG_BLK_DEV_IDEFLOPPY=y
   5.521 +# CONFIG_BLK_DEV_IDESCSI is not set
   5.522 +# CONFIG_IDE_TASK_IOCTL is not set
   5.523 +CONFIG_IDE_PROC_FS=y
   5.524 +
   5.525 +#
   5.526 +# IDE chipset support/bugfixes
   5.527 +#
   5.528 +CONFIG_IDE_GENERIC=y
   5.529 +CONFIG_BLK_DEV_CMD640=y
   5.530 +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
   5.531 +# CONFIG_BLK_DEV_IDEPNP is not set
   5.532 +CONFIG_BLK_DEV_IDEPCI=y
   5.533 +CONFIG_IDEPCI_SHARE_IRQ=y
   5.534 +CONFIG_IDEPCI_PCIBUS_ORDER=y
   5.535 +# CONFIG_BLK_DEV_OFFBOARD is not set
   5.536 +CONFIG_BLK_DEV_GENERIC=y
   5.537 +# CONFIG_BLK_DEV_OPTI621 is not set
   5.538 +CONFIG_BLK_DEV_RZ1000=y
   5.539 +CONFIG_BLK_DEV_IDEDMA_PCI=y
   5.540 +# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
   5.541 +# CONFIG_IDEDMA_ONLYDISK is not set
   5.542 +CONFIG_BLK_DEV_AEC62XX=y
   5.543 +CONFIG_BLK_DEV_ALI15X3=y
   5.544 +# CONFIG_WDC_ALI15X3 is not set
   5.545 +CONFIG_BLK_DEV_AMD74XX=y
   5.546 +CONFIG_BLK_DEV_ATIIXP=y
   5.547 +CONFIG_BLK_DEV_CMD64X=y
   5.548 +CONFIG_BLK_DEV_TRIFLEX=y
   5.549 +CONFIG_BLK_DEV_CY82C693=y
   5.550 +# CONFIG_BLK_DEV_CS5520 is not set
   5.551 +CONFIG_BLK_DEV_CS5530=y
   5.552 +CONFIG_BLK_DEV_CS5535=y
   5.553 +# CONFIG_BLK_DEV_HPT34X is not set
   5.554 +# CONFIG_BLK_DEV_HPT366 is not set
   5.555 +CONFIG_BLK_DEV_JMICRON=y
   5.556 +# CONFIG_BLK_DEV_SC1200 is not set
   5.557 +CONFIG_BLK_DEV_PIIX=y
   5.558 +CONFIG_BLK_DEV_IT8213=y
   5.559 +CONFIG_BLK_DEV_IT821X=y
   5.560 +CONFIG_BLK_DEV_NS87415=y
   5.561 +# CONFIG_BLK_DEV_PDC202XX_OLD is not set
   5.562 +CONFIG_BLK_DEV_PDC202XX_NEW=y
   5.563 +CONFIG_BLK_DEV_SVWKS=y
   5.564 +CONFIG_BLK_DEV_SIIMAGE=y
   5.565 +CONFIG_BLK_DEV_SIS5513=y
   5.566 +CONFIG_BLK_DEV_SLC90E66=y
   5.567 +CONFIG_BLK_DEV_TRM290=y
   5.568 +CONFIG_BLK_DEV_VIA82CXXX=y
   5.569 +# CONFIG_BLK_DEV_TC86C001 is not set
   5.570 +# CONFIG_IDE_ARM is not set
   5.571 +# CONFIG_IDE_CHIPSETS is not set
   5.572 +CONFIG_BLK_DEV_IDEDMA=y
   5.573 +# CONFIG_IDEDMA_IVB is not set
   5.574 +# CONFIG_BLK_DEV_HD is not set
   5.575 +
   5.576 +#
   5.577 +# SCSI device support
   5.578 +#
   5.579 +# CONFIG_RAID_ATTRS is not set
   5.580 +CONFIG_SCSI=y
   5.581 +# CONFIG_SCSI_TGT is not set
   5.582 +# CONFIG_SCSI_NETLINK is not set
   5.583 +CONFIG_SCSI_PROC_FS=y
   5.584 +
   5.585 +#
   5.586 +# SCSI support type (disk, tape, CD-ROM)
   5.587 +#
   5.588 +CONFIG_BLK_DEV_SD=y
   5.589 +# CONFIG_CHR_DEV_ST is not set
   5.590 +# CONFIG_CHR_DEV_OSST is not set
   5.591 +# CONFIG_BLK_DEV_SR is not set
   5.592 +# CONFIG_CHR_DEV_SG is not set
   5.593 +# CONFIG_CHR_DEV_SCH is not set
   5.594 +
   5.595 +#
   5.596 +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
   5.597 +#
   5.598 +# CONFIG_SCSI_MULTI_LUN is not set
   5.599 +# CONFIG_SCSI_CONSTANTS is not set
   5.600 +# CONFIG_SCSI_LOGGING is not set
   5.601 +# CONFIG_SCSI_SCAN_ASYNC is not set
   5.602 +CONFIG_SCSI_WAIT_SCAN=m
   5.603 +
   5.604 +#
   5.605 +# SCSI Transports
   5.606 +#
   5.607 +# CONFIG_SCSI_SPI_ATTRS is not set
   5.608 +# CONFIG_SCSI_FC_ATTRS is not set
   5.609 +# CONFIG_SCSI_ISCSI_ATTRS is not set
   5.610 +# CONFIG_SCSI_SAS_ATTRS is not set
   5.611 +# CONFIG_SCSI_SAS_LIBSAS is not set
   5.612 +
   5.613 +#
   5.614 +# SCSI low-level drivers
   5.615 +#
   5.616 +# CONFIG_ISCSI_TCP is not set
   5.617 +# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
   5.618 +# CONFIG_SCSI_3W_9XXX is not set
   5.619 +# CONFIG_SCSI_7000FASST is not set
   5.620 +# CONFIG_SCSI_ACARD is not set
   5.621 +# CONFIG_SCSI_AHA152X is not set
   5.622 +# CONFIG_SCSI_AHA1542 is not set
   5.623 +# CONFIG_SCSI_AACRAID is not set
   5.624 +# CONFIG_SCSI_AIC7XXX is not set
   5.625 +# CONFIG_SCSI_AIC7XXX_OLD is not set
   5.626 +# CONFIG_SCSI_AIC79XX is not set
   5.627 +# CONFIG_SCSI_AIC94XX is not set
   5.628 +# CONFIG_SCSI_DPT_I2O is not set
   5.629 +# CONFIG_SCSI_ADVANSYS is not set
   5.630 +# CONFIG_SCSI_IN2000 is not set
   5.631 +# CONFIG_SCSI_ARCMSR is not set
   5.632 +# CONFIG_MEGARAID_NEWGEN is not set
   5.633 +# CONFIG_MEGARAID_LEGACY is not set
   5.634 +# CONFIG_MEGARAID_SAS is not set
   5.635 +# CONFIG_SCSI_HPTIOP is not set
   5.636 +# CONFIG_SCSI_BUSLOGIC is not set
   5.637 +# CONFIG_SCSI_DMX3191D is not set
   5.638 +# CONFIG_SCSI_DTC3280 is not set
   5.639 +# CONFIG_SCSI_EATA is not set
   5.640 +# CONFIG_SCSI_FUTURE_DOMAIN is not set
   5.641 +# CONFIG_SCSI_GDTH is not set
   5.642 +# CONFIG_SCSI_GENERIC_NCR5380 is not set
   5.643 +# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
   5.644 +# CONFIG_SCSI_IPS is not set
   5.645 +# CONFIG_SCSI_INITIO is not set
   5.646 +# CONFIG_SCSI_INIA100 is not set
   5.647 +# CONFIG_SCSI_NCR53C406A is not set
   5.648 +# CONFIG_SCSI_STEX is not set
   5.649 +# CONFIG_SCSI_SYM53C8XX_2 is not set
   5.650 +# CONFIG_SCSI_IPR is not set
   5.651 +# CONFIG_SCSI_PAS16 is not set
   5.652 +# CONFIG_SCSI_PSI240I is not set
   5.653 +# CONFIG_SCSI_QLOGIC_FAS is not set
   5.654 +# CONFIG_SCSI_QLOGIC_1280 is not set
   5.655 +# CONFIG_SCSI_QLA_FC is not set
   5.656 +# CONFIG_SCSI_QLA_ISCSI is not set
   5.657 +# CONFIG_SCSI_LPFC is not set
   5.658 +# CONFIG_SCSI_SEAGATE is not set
   5.659 +# CONFIG_SCSI_SYM53C416 is not set
   5.660 +# CONFIG_SCSI_DC395x is not set
   5.661 +# CONFIG_SCSI_DC390T is not set
   5.662 +# CONFIG_SCSI_T128 is not set
   5.663 +# CONFIG_SCSI_U14_34F is not set
   5.664 +# CONFIG_SCSI_ULTRASTOR is not set
   5.665 +# CONFIG_SCSI_NSP32 is not set
   5.666 +# CONFIG_SCSI_DEBUG is not set
   5.667 +# CONFIG_SCSI_SRP is not set
   5.668 +
   5.669 +#
   5.670 +# PCMCIA SCSI adapter support
   5.671 +#
   5.672 +# CONFIG_PCMCIA_AHA152X is not set
   5.673 +# CONFIG_PCMCIA_FDOMAIN is not set
   5.674 +# CONFIG_PCMCIA_NINJA_SCSI is not set
   5.675 +# CONFIG_PCMCIA_QLOGIC is not set
   5.676 +# CONFIG_PCMCIA_SYM53C500 is not set
   5.677 +CONFIG_ATA=y
   5.678 +# CONFIG_ATA_NONSTANDARD is not set
   5.679 +CONFIG_SATA_AHCI=y
   5.680 +# CONFIG_SATA_SVW is not set
   5.681 +CONFIG_ATA_PIIX=y
   5.682 +# CONFIG_SATA_MV is not set
   5.683 +CONFIG_SATA_NV=y
   5.684 +# CONFIG_PDC_ADMA is not set
   5.685 +# CONFIG_SATA_QSTOR is not set
   5.686 +# CONFIG_SATA_PROMISE is not set
   5.687 +# CONFIG_SATA_SX4 is not set
   5.688 +# CONFIG_SATA_SIL is not set
   5.689 +# CONFIG_SATA_SIL24 is not set
   5.690 +CONFIG_SATA_SIS=y
   5.691 +# CONFIG_SATA_ULI is not set
   5.692 +CONFIG_SATA_VIA=y
   5.693 +# CONFIG_SATA_VITESSE is not set
   5.694 +# CONFIG_SATA_INIC162X is not set
   5.695 +# CONFIG_PATA_ALI is not set
   5.696 +# CONFIG_PATA_AMD is not set
   5.697 +# CONFIG_PATA_ARTOP is not set
   5.698 +# CONFIG_PATA_ATIIXP is not set
   5.699 +# CONFIG_PATA_CMD640_PCI is not set
   5.700 +# CONFIG_PATA_CMD64X is not set
   5.701 +# CONFIG_PATA_CS5520 is not set
   5.702 +# CONFIG_PATA_CS5530 is not set
   5.703 +# CONFIG_PATA_CS5535 is not set
   5.704 +# CONFIG_PATA_CYPRESS is not set
   5.705 +# CONFIG_PATA_EFAR is not set
   5.706 +# CONFIG_ATA_GENERIC is not set
   5.707 +# CONFIG_PATA_HPT366 is not set
   5.708 +# CONFIG_PATA_HPT37X is not set
   5.709 +# CONFIG_PATA_HPT3X2N is not set
   5.710 +# CONFIG_PATA_HPT3X3 is not set
   5.711 +# CONFIG_PATA_ISAPNP is not set
   5.712 +# CONFIG_PATA_IT821X is not set
   5.713 +# CONFIG_PATA_IT8213 is not set
   5.714 +# CONFIG_PATA_JMICRON is not set
   5.715 +# CONFIG_PATA_LEGACY is not set
   5.716 +# CONFIG_PATA_TRIFLEX is not set
   5.717 +# CONFIG_PATA_MARVELL is not set
   5.718 +# CONFIG_PATA_MPIIX is not set
   5.719 +# CONFIG_PATA_OLDPIIX is not set
   5.720 +# CONFIG_PATA_NETCELL is not set
   5.721 +# CONFIG_PATA_NS87410 is not set
   5.722 +# CONFIG_PATA_OPTI is not set
   5.723 +# CONFIG_PATA_OPTIDMA is not set
   5.724 +# CONFIG_PATA_PCMCIA is not set
   5.725 +# CONFIG_PATA_PDC_OLD is not set
   5.726 +# CONFIG_PATA_QDI is not set
   5.727 +# CONFIG_PATA_RADISYS is not set
   5.728 +# CONFIG_PATA_RZ1000 is not set
   5.729 +# CONFIG_PATA_SC1200 is not set
   5.730 +# CONFIG_PATA_SERVERWORKS is not set
   5.731 +# CONFIG_PATA_PDC2027X is not set
   5.732 +# CONFIG_PATA_SIL680 is not set
   5.733 +CONFIG_PATA_SIS=y
   5.734 +# CONFIG_PATA_VIA is not set
   5.735 +# CONFIG_PATA_WINBOND is not set
   5.736 +# CONFIG_PATA_WINBOND_VLB is not set
   5.737 +
   5.738 +#
   5.739 +# Old CD-ROM drivers (not SCSI, not IDE)
   5.740 +#
   5.741 +# CONFIG_CD_NO_IDESCSI is not set
   5.742 +
   5.743 +#
   5.744 +# Multi-device support (RAID and LVM)
   5.745 +#
   5.746 +# CONFIG_MD is not set
   5.747 +
   5.748 +#
   5.749 +# Fusion MPT device support
   5.750 +#
   5.751 +# CONFIG_FUSION is not set
   5.752 +# CONFIG_FUSION_SPI is not set
   5.753 +# CONFIG_FUSION_FC is not set
   5.754 +# CONFIG_FUSION_SAS is not set
   5.755 +
   5.756 +#
   5.757 +# IEEE 1394 (FireWire) support
   5.758 +#
   5.759 +# CONFIG_FIREWIRE is not set
   5.760 +# CONFIG_IEEE1394 is not set
   5.761 +
   5.762 +#
   5.763 +# I2O device support
   5.764 +#
   5.765 +# CONFIG_I2O is not set
   5.766 +# CONFIG_MACINTOSH_DRIVERS is not set
   5.767 +
   5.768 +#
   5.769 +# Network device support
   5.770 +#
   5.771 +CONFIG_NETDEVICES=y
   5.772 +CONFIG_DUMMY=y
   5.773 +# CONFIG_BONDING is not set
   5.774 +# CONFIG_EQUALIZER is not set
   5.775 +# CONFIG_TUN is not set
   5.776 +# CONFIG_NET_SB1000 is not set
   5.777 +CONFIG_ARCNET=m
   5.778 +CONFIG_ARCNET_1201=m
   5.779 +# CONFIG_ARCNET_1051 is not set
   5.780 +# CONFIG_ARCNET_RAW is not set
   5.781 +# CONFIG_ARCNET_CAP is not set
   5.782 +CONFIG_ARCNET_COM90xx=m
   5.783 +# CONFIG_ARCNET_COM90xxIO is not set
   5.784 +# CONFIG_ARCNET_RIM_I is not set
   5.785 +# CONFIG_ARCNET_COM20020 is not set
   5.786 +CONFIG_PHYLIB=m
   5.787 +
   5.788 +#
   5.789 +# MII PHY device drivers
   5.790 +#
   5.791 +CONFIG_MARVELL_PHY=m
   5.792 +CONFIG_DAVICOM_PHY=m
   5.793 +CONFIG_QSEMI_PHY=m
   5.794 +CONFIG_LXT_PHY=m
   5.795 +CONFIG_CICADA_PHY=m
   5.796 +# CONFIG_VITESSE_PHY is not set
   5.797 +# CONFIG_SMSC_PHY is not set
   5.798 +CONFIG_BROADCOM_PHY=m
   5.799 +# CONFIG_FIXED_PHY is not set
   5.800 +
   5.801 +#
   5.802 +# Ethernet (10 or 100Mbit)
   5.803 +#
   5.804 +CONFIG_NET_ETHERNET=y
   5.805 +CONFIG_MII=y
   5.806 +CONFIG_HAPPYMEAL=m
   5.807 +CONFIG_SUNGEM=m
   5.808 +CONFIG_CASSINI=m
   5.809 +CONFIG_NET_VENDOR_3COM=y
   5.810 +CONFIG_EL1=m
   5.811 +CONFIG_EL2=m
   5.812 +CONFIG_ELPLUS=m
   5.813 +# CONFIG_EL16 is not set
   5.814 +CONFIG_EL3=m
   5.815 +CONFIG_3C515=m
   5.816 +CONFIG_VORTEX=m
   5.817 +CONFIG_TYPHOON=m
   5.818 +CONFIG_LANCE=m
   5.819 +CONFIG_NET_VENDOR_SMC=y
   5.820 +CONFIG_WD80x3=m
   5.821 +CONFIG_ULTRA=m
   5.822 +CONFIG_SMC9194=m
   5.823 +CONFIG_NET_VENDOR_RACAL=y
   5.824 +CONFIG_NI52=m
   5.825 +CONFIG_NI65=m
   5.826 +
   5.827 +#
   5.828 +# Tulip family network device support
   5.829 +#
   5.830 +CONFIG_NET_TULIP=y
   5.831 +# CONFIG_DE2104X is not set
   5.832 +CONFIG_TULIP=m
   5.833 +# CONFIG_TULIP_MWI is not set
   5.834 +# CONFIG_TULIP_MMIO is not set
   5.835 +# CONFIG_TULIP_NAPI is not set
   5.836 +CONFIG_DE4X5=y
   5.837 +CONFIG_WINBOND_840=y
   5.838 +CONFIG_DM9102=y
   5.839 +CONFIG_ULI526X=m
   5.840 +CONFIG_PCMCIA_XIRCOM=y
   5.841 +# CONFIG_AT1700 is not set
   5.842 +CONFIG_DEPCA=m
   5.843 +CONFIG_HP100=m
   5.844 +CONFIG_NET_ISA=y
   5.845 +CONFIG_E2100=m
   5.846 +CONFIG_EWRK3=m
   5.847 +CONFIG_EEXPRESS=m
   5.848 +CONFIG_EEXPRESS_PRO=m
   5.849 +CONFIG_HPLAN_PLUS=m
   5.850 +CONFIG_HPLAN=m
   5.851 +CONFIG_LP486E=m
   5.852 +CONFIG_ETH16I=m
   5.853 +CONFIG_NE2000=m
   5.854 +# CONFIG_ZNET is not set
   5.855 +# CONFIG_SEEQ8005 is not set
   5.856 +CONFIG_NET_PCI=y
   5.857 +CONFIG_PCNET32=y
   5.858 +# CONFIG_PCNET32_NAPI is not set
   5.859 +CONFIG_AMD8111_ETH=m
   5.860 +# CONFIG_AMD8111E_NAPI is not set
   5.861 +CONFIG_ADAPTEC_STARFIRE=m
   5.862 +# CONFIG_ADAPTEC_STARFIRE_NAPI is not set
   5.863 +# CONFIG_AC3200 is not set
   5.864 +CONFIG_APRICOT=m
   5.865 +CONFIG_B44=y
   5.866 +CONFIG_FORCEDETH=y
   5.867 +# CONFIG_FORCEDETH_NAPI is not set
   5.868 +CONFIG_CS89x0=m
   5.869 +CONFIG_DGRS=y
   5.870 +CONFIG_EEPRO100=y
   5.871 +CONFIG_E100=y
   5.872 +CONFIG_FEALNX=m
   5.873 +CONFIG_NATSEMI=y
   5.874 +CONFIG_NE2K_PCI=y
   5.875 +# CONFIG_8139CP is not set
   5.876 +CONFIG_8139TOO=y
   5.877 +# CONFIG_8139TOO_PIO is not set
   5.878 +CONFIG_8139TOO_TUNE_TWISTER=y
   5.879 +CONFIG_8139TOO_8129=y
   5.880 +# CONFIG_8139_OLD_RX_RESET is not set
   5.881 +CONFIG_SIS900=y
   5.882 +CONFIG_EPIC100=y
   5.883 +CONFIG_SUNDANCE=y
   5.884 +# CONFIG_SUNDANCE_MMIO is not set
   5.885 +CONFIG_TLAN=y
   5.886 +CONFIG_VIA_RHINE=y
   5.887 +CONFIG_VIA_RHINE_MMIO=y
   5.888 +# CONFIG_VIA_RHINE_NAPI is not set
   5.889 +# CONFIG_SC92031 is not set
   5.890 +CONFIG_NETDEV_1000=y
   5.891 +# CONFIG_ACENIC is not set
   5.892 +CONFIG_DL2K=m
   5.893 +CONFIG_E1000=m
   5.894 +# CONFIG_E1000_NAPI is not set
   5.895 +# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
   5.896 +# CONFIG_NS83820 is not set
   5.897 +# CONFIG_HAMACHI is not set
   5.898 +# CONFIG_YELLOWFIN is not set
   5.899 +CONFIG_R8169=y
   5.900 +# CONFIG_R8169_NAPI is not set
   5.901 +CONFIG_SIS190=m
   5.902 +# CONFIG_SKGE is not set
   5.903 +# CONFIG_SKY2 is not set
   5.904 +# CONFIG_SK98LIN is not set
   5.905 +CONFIG_VIA_VELOCITY=m
   5.906 +CONFIG_TIGON3=m
   5.907 +CONFIG_BNX2=m
   5.908 +# CONFIG_QLA3XXX is not set
   5.909 +# CONFIG_ATL1 is not set
   5.910 +# CONFIG_NETDEV_10000 is not set
   5.911 +# CONFIG_TR is not set
   5.912 +
   5.913 +#
   5.914 +# Wireless LAN
   5.915 +#
   5.916 +# CONFIG_WLAN_PRE80211 is not set
   5.917 +# CONFIG_WLAN_80211 is not set
   5.918 +
   5.919 +#
   5.920 +# USB Network Adapters
   5.921 +#
   5.922 +# CONFIG_USB_CATC is not set
   5.923 +# CONFIG_USB_KAWETH is not set
   5.924 +# CONFIG_USB_PEGASUS is not set
   5.925 +# CONFIG_USB_RTL8150 is not set
   5.926 +# CONFIG_USB_USBNET_MII is not set
   5.927 +# CONFIG_USB_USBNET is not set
   5.928 +CONFIG_NET_PCMCIA=y
   5.929 +CONFIG_PCMCIA_3C589=m
   5.930 +CONFIG_PCMCIA_3C574=m
   5.931 +CONFIG_PCMCIA_FMVJ18X=m
   5.932 +CONFIG_PCMCIA_PCNET=m
   5.933 +CONFIG_PCMCIA_NMCLAN=m
   5.934 +CONFIG_PCMCIA_SMC91C92=m
   5.935 +CONFIG_PCMCIA_XIRC2PS=m
   5.936 +CONFIG_PCMCIA_AXNET=m
   5.937 +# CONFIG_WAN is not set
   5.938 +# CONFIG_FDDI is not set
   5.939 +# CONFIG_HIPPI is not set
   5.940 +CONFIG_PPP=y
   5.941 +# CONFIG_PPP_MULTILINK is not set
   5.942 +# CONFIG_PPP_FILTER is not set
   5.943 +CONFIG_PPP_ASYNC=y
   5.944 +# CONFIG_PPP_SYNC_TTY is not set
   5.945 +# CONFIG_PPP_DEFLATE is not set
   5.946 +# CONFIG_PPP_BSDCOMP is not set
   5.947 +# CONFIG_PPP_MPPE is not set
   5.948 +CONFIG_PPPOE=y
   5.949 +# CONFIG_SLIP is not set
   5.950 +CONFIG_SLHC=y
   5.951 +# CONFIG_NET_FC is not set
   5.952 +# CONFIG_SHAPER is not set
   5.953 +# CONFIG_NETCONSOLE is not set
   5.954 +# CONFIG_NETPOLL is not set
   5.955 +# CONFIG_NET_POLL_CONTROLLER is not set
   5.956 +
   5.957 +#
   5.958 +# ISDN subsystem
   5.959 +#
   5.960 +# CONFIG_ISDN is not set
   5.961 +
   5.962 +#
   5.963 +# Telephony Support
   5.964 +#
   5.965 +# CONFIG_PHONE is not set
   5.966 +
   5.967 +#
   5.968 +# Input device support
   5.969 +#
   5.970 +CONFIG_INPUT=y
   5.971 +# CONFIG_INPUT_FF_MEMLESS is not set
   5.972 +# CONFIG_INPUT_POLLDEV is not set
   5.973 +
   5.974 +#
   5.975 +# Userland interfaces
   5.976 +#
   5.977 +CONFIG_INPUT_MOUSEDEV=y
   5.978 +CONFIG_INPUT_MOUSEDEV_PSAUX=y
   5.979 +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
   5.980 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
   5.981 +# CONFIG_INPUT_JOYDEV is not set
   5.982 +# CONFIG_INPUT_TSDEV is not set
   5.983 +CONFIG_INPUT_EVDEV=y
   5.984 +# CONFIG_INPUT_EVBUG is not set
   5.985 +
   5.986 +#
   5.987 +# Input Device Drivers
   5.988 +#
   5.989 +CONFIG_INPUT_KEYBOARD=y
   5.990 +CONFIG_KEYBOARD_ATKBD=y
   5.991 +# CONFIG_KEYBOARD_SUNKBD is not set
   5.992 +# CONFIG_KEYBOARD_LKKBD is not set
   5.993 +# CONFIG_KEYBOARD_XTKBD is not set
   5.994 +# CONFIG_KEYBOARD_NEWTON is not set
   5.995 +# CONFIG_KEYBOARD_STOWAWAY is not set
   5.996 +CONFIG_INPUT_MOUSE=y
   5.997 +CONFIG_MOUSE_PS2=y
   5.998 +CONFIG_MOUSE_PS2_ALPS=y
   5.999 +CONFIG_MOUSE_PS2_LOGIPS2PP=y
  5.1000 +CONFIG_MOUSE_PS2_SYNAPTICS=y
  5.1001 +CONFIG_MOUSE_PS2_LIFEBOOK=y
  5.1002 +CONFIG_MOUSE_PS2_TRACKPOINT=y
  5.1003 +# CONFIG_MOUSE_PS2_TOUCHKIT is not set
  5.1004 +CONFIG_MOUSE_SERIAL=y
  5.1005 +# CONFIG_MOUSE_APPLETOUCH is not set
  5.1006 +CONFIG_MOUSE_INPORT=m
  5.1007 +# CONFIG_MOUSE_ATIXL is not set
  5.1008 +CONFIG_MOUSE_LOGIBM=m
  5.1009 +CONFIG_MOUSE_PC110PAD=m
  5.1010 +# CONFIG_MOUSE_VSXXXAA is not set
  5.1011 +# CONFIG_INPUT_JOYSTICK is not set
  5.1012 +# CONFIG_INPUT_TABLET is not set
  5.1013 +# CONFIG_INPUT_TOUCHSCREEN is not set
  5.1014 +CONFIG_INPUT_MISC=y
  5.1015 +CONFIG_INPUT_PCSPKR=y
  5.1016 +# CONFIG_INPUT_WISTRON_BTNS is not set
  5.1017 +# CONFIG_INPUT_ATI_REMOTE is not set
  5.1018 +# CONFIG_INPUT_ATI_REMOTE2 is not set
  5.1019 +# CONFIG_INPUT_KEYSPAN_REMOTE is not set
  5.1020 +# CONFIG_INPUT_POWERMATE is not set
  5.1021 +# CONFIG_INPUT_YEALINK is not set
  5.1022 +# CONFIG_INPUT_UINPUT is not set
  5.1023 +
  5.1024 +#
  5.1025 +# Hardware I/O ports
  5.1026 +#
  5.1027 +CONFIG_SERIO=y
  5.1028 +CONFIG_SERIO_I8042=y
  5.1029 +CONFIG_SERIO_SERPORT=y
  5.1030 +# CONFIG_SERIO_CT82C710 is not set
  5.1031 +CONFIG_SERIO_PCIPS2=y
  5.1032 +CONFIG_SERIO_LIBPS2=y
  5.1033 +CONFIG_SERIO_RAW=y
  5.1034 +# CONFIG_GAMEPORT is not set
  5.1035 +
  5.1036 +#
  5.1037 +# Character devices
  5.1038 +#
  5.1039 +CONFIG_VT=y
  5.1040 +CONFIG_VT_CONSOLE=y
  5.1041 +CONFIG_HW_CONSOLE=y
  5.1042 +# CONFIG_VT_HW_CONSOLE_BINDING is not set
  5.1043 +# CONFIG_SERIAL_NONSTANDARD is not set
  5.1044 +
  5.1045 +#
  5.1046 +# Serial drivers
  5.1047 +#
  5.1048 +CONFIG_SERIAL_8250=y
  5.1049 +# CONFIG_SERIAL_8250_CONSOLE is not set
  5.1050 +CONFIG_SERIAL_8250_PCI=y
  5.1051 +CONFIG_SERIAL_8250_PNP=y
  5.1052 +# CONFIG_SERIAL_8250_CS is not set
  5.1053 +CONFIG_SERIAL_8250_NR_UARTS=4
  5.1054 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4
  5.1055 +# CONFIG_SERIAL_8250_EXTENDED is not set
  5.1056 +
  5.1057 +#
  5.1058 +# Non-8250 serial port support
  5.1059 +#
  5.1060 +CONFIG_SERIAL_CORE=y
  5.1061 +# CONFIG_SERIAL_JSM is not set
  5.1062 +CONFIG_UNIX98_PTYS=y
  5.1063 +# CONFIG_LEGACY_PTYS is not set
  5.1064 +
  5.1065 +#
  5.1066 +# IPMI
  5.1067 +#
  5.1068 +# CONFIG_IPMI_HANDLER is not set
  5.1069 +# CONFIG_WATCHDOG is not set
  5.1070 +CONFIG_HW_RANDOM=y
  5.1071 +CONFIG_HW_RANDOM_INTEL=y
  5.1072 +CONFIG_HW_RANDOM_AMD=y
  5.1073 +CONFIG_HW_RANDOM_GEODE=y
  5.1074 +CONFIG_HW_RANDOM_VIA=y
  5.1075 +CONFIG_NVRAM=y
  5.1076 +CONFIG_RTC=m
  5.1077 +CONFIG_GEN_RTC=m
  5.1078 +# CONFIG_GEN_RTC_X is not set
  5.1079 +# CONFIG_DTLK is not set
  5.1080 +# CONFIG_R3964 is not set
  5.1081 +# CONFIG_APPLICOM is not set
  5.1082 +# CONFIG_SONYPI is not set
  5.1083 +# CONFIG_AGP is not set
  5.1084 +# CONFIG_DRM is not set
  5.1085 +
  5.1086 +#
  5.1087 +# PCMCIA character devices
  5.1088 +#
  5.1089 +# CONFIG_SYNCLINK_CS is not set
  5.1090 +# CONFIG_CARDMAN_4000 is not set
  5.1091 +# CONFIG_CARDMAN_4040 is not set
  5.1092 +# CONFIG_MWAVE is not set
  5.1093 +# CONFIG_PC8736x_GPIO is not set
  5.1094 +# CONFIG_NSC_GPIO is not set
  5.1095 +# CONFIG_CS5535_GPIO is not set
  5.1096 +# CONFIG_RAW_DRIVER is not set
  5.1097 +# CONFIG_HANGCHECK_TIMER is not set
  5.1098 +
  5.1099 +#
  5.1100 +# TPM devices
  5.1101 +#
  5.1102 +# CONFIG_TCG_TPM is not set
  5.1103 +# CONFIG_TELCLOCK is not set
  5.1104 +CONFIG_DEVPORT=y
  5.1105 +# CONFIG_I2C is not set
  5.1106 +
  5.1107 +#
  5.1108 +# SPI support
  5.1109 +#
  5.1110 +# CONFIG_SPI is not set
  5.1111 +# CONFIG_SPI_MASTER is not set
  5.1112 +
  5.1113 +#
  5.1114 +# Dallas's 1-wire bus
  5.1115 +#
  5.1116 +# CONFIG_W1 is not set
  5.1117 +# CONFIG_HWMON is not set
  5.1118 +
  5.1119 +#
  5.1120 +# Multifunction device drivers
  5.1121 +#
  5.1122 +# CONFIG_MFD_SM501 is not set
  5.1123 +
  5.1124 +#
  5.1125 +# Multimedia devices
  5.1126 +#
  5.1127 +# CONFIG_VIDEO_DEV is not set
  5.1128 +# CONFIG_DVB_CORE is not set
  5.1129 +CONFIG_DAB=y
  5.1130 +# CONFIG_USB_DABUSB is not set
  5.1131 +
  5.1132 +#
  5.1133 +# Graphics support
  5.1134 +#
  5.1135 +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
  5.1136 +
  5.1137 +#
  5.1138 +# Display device support
  5.1139 +#
  5.1140 +# CONFIG_DISPLAY_SUPPORT is not set
  5.1141 +# CONFIG_VGASTATE is not set
  5.1142 +CONFIG_FB=y
  5.1143 +# CONFIG_FIRMWARE_EDID is not set
  5.1144 +# CONFIG_FB_DDC is not set
  5.1145 +CONFIG_FB_CFB_FILLRECT=y
  5.1146 +CONFIG_FB_CFB_COPYAREA=y
  5.1147 +CONFIG_FB_CFB_IMAGEBLIT=y
  5.1148 +# CONFIG_FB_SYS_FILLRECT is not set
  5.1149 +# CONFIG_FB_SYS_COPYAREA is not set
  5.1150 +# CONFIG_FB_SYS_IMAGEBLIT is not set
  5.1151 +# CONFIG_FB_SYS_FOPS is not set
  5.1152 +CONFIG_FB_DEFERRED_IO=y
  5.1153 +# CONFIG_FB_SVGALIB is not set
  5.1154 +# CONFIG_FB_MACMODES is not set
  5.1155 +# CONFIG_FB_BACKLIGHT is not set
  5.1156 +# CONFIG_FB_MODE_HELPERS is not set
  5.1157 +# CONFIG_FB_TILEBLITTING is not set
  5.1158 +
  5.1159 +#
  5.1160 +# Frame buffer hardware drivers
  5.1161 +#
  5.1162 +# CONFIG_FB_CIRRUS is not set
  5.1163 +# CONFIG_FB_PM2 is not set
  5.1164 +# CONFIG_FB_CYBER2000 is not set
  5.1165 +# CONFIG_FB_ARC is not set
  5.1166 +# CONFIG_FB_ASILIANT is not set
  5.1167 +# CONFIG_FB_IMSTT is not set
  5.1168 +# CONFIG_FB_VGA16 is not set
  5.1169 +CONFIG_FB_VESA=y
  5.1170 +# CONFIG_FB_HECUBA is not set
  5.1171 +# CONFIG_FB_HGA is not set
  5.1172 +# CONFIG_FB_S1D13XXX is not set
  5.1173 +# CONFIG_FB_NVIDIA is not set
  5.1174 +# CONFIG_FB_RIVA is not set
  5.1175 +# CONFIG_FB_I810 is not set
  5.1176 +# CONFIG_FB_LE80578 is not set
  5.1177 +# CONFIG_FB_INTEL is not set
  5.1178 +# CONFIG_FB_MATROX is not set
  5.1179 +# CONFIG_FB_RADEON is not set
  5.1180 +# CONFIG_FB_ATY128 is not set
  5.1181 +# CONFIG_FB_ATY is not set
  5.1182 +# CONFIG_FB_S3 is not set
  5.1183 +# CONFIG_FB_SAVAGE is not set
  5.1184 +# CONFIG_FB_SIS is not set
  5.1185 +# CONFIG_FB_NEOMAGIC is not set
  5.1186 +# CONFIG_FB_KYRO is not set
  5.1187 +# CONFIG_FB_3DFX is not set
  5.1188 +# CONFIG_FB_VOODOO1 is not set
  5.1189 +# CONFIG_FB_VT8623 is not set
  5.1190 +# CONFIG_FB_CYBLA is not set
  5.1191 +# CONFIG_FB_TRIDENT is not set
  5.1192 +# CONFIG_FB_ARK is not set
  5.1193 +# CONFIG_FB_PM3 is not set
  5.1194 +# CONFIG_FB_GEODE is not set
  5.1195 +# CONFIG_FB_VIRTUAL is not set
  5.1196 +
  5.1197 +#
  5.1198 +# Console display driver support
  5.1199 +#
  5.1200 +CONFIG_VGA_CONSOLE=y
  5.1201 +# CONFIG_VGACON_SOFT_SCROLLBACK is not set
  5.1202 +CONFIG_VIDEO_SELECT=y
  5.1203 +# CONFIG_MDA_CONSOLE is not set
  5.1204 +CONFIG_DUMMY_CONSOLE=y
  5.1205 +CONFIG_FRAMEBUFFER_CONSOLE=y
  5.1206 +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
  5.1207 +# CONFIG_FONTS is not set
  5.1208 +CONFIG_FONT_8x8=y
  5.1209 +CONFIG_FONT_8x16=y
  5.1210 +CONFIG_LOGO=y
  5.1211 +CONFIG_LOGO_LINUX_MONO=y
  5.1212 +CONFIG_LOGO_LINUX_VGA16=y
  5.1213 +CONFIG_LOGO_LINUX_CLUT224=y
  5.1214 +
  5.1215 +#
  5.1216 +# Sound
  5.1217 +#
  5.1218 +CONFIG_SOUND=m
  5.1219 +
  5.1220 +#
  5.1221 +# Advanced Linux Sound Architecture
  5.1222 +#
  5.1223 +CONFIG_SND=m
  5.1224 +CONFIG_SND_TIMER=m
  5.1225 +CONFIG_SND_PCM=m
  5.1226 +CONFIG_SND_HWDEP=m
  5.1227 +CONFIG_SND_RAWMIDI=m
  5.1228 +CONFIG_SND_SEQUENCER=m
  5.1229 +# CONFIG_SND_SEQ_DUMMY is not set
  5.1230 +CONFIG_SND_OSSEMUL=y
  5.1231 +CONFIG_SND_MIXER_OSS=m
  5.1232 +CONFIG_SND_PCM_OSS=m
  5.1233 +CONFIG_SND_PCM_OSS_PLUGINS=y
  5.1234 +CONFIG_SND_SEQUENCER_OSS=y
  5.1235 +CONFIG_SND_RTCTIMER=m
  5.1236 +CONFIG_SND_SEQ_RTCTIMER_DEFAULT=y
  5.1237 +# CONFIG_SND_DYNAMIC_MINORS is not set
  5.1238 +CONFIG_SND_SUPPORT_OLD_API=y
  5.1239 +# CONFIG_SND_VERBOSE_PROCFS is not set
  5.1240 +# CONFIG_SND_VERBOSE_PRINTK is not set
  5.1241 +# CONFIG_SND_DEBUG is not set
  5.1242 +
  5.1243 +#
  5.1244 +# Generic devices
  5.1245 +#
  5.1246 +CONFIG_SND_MPU401_UART=m
  5.1247 +CONFIG_SND_OPL3_LIB=m
  5.1248 +CONFIG_SND_OPL4_LIB=m
  5.1249 +CONFIG_SND_VX_LIB=m
  5.1250 +CONFIG_SND_AC97_CODEC=m
  5.1251 +# CONFIG_SND_DUMMY is not set
  5.1252 +# CONFIG_SND_VIRMIDI is not set
  5.1253 +# CONFIG_SND_MTPAV is not set
  5.1254 +# CONFIG_SND_SERIAL_U16550 is not set
  5.1255 +# CONFIG_SND_MPU401 is not set
  5.1256 +
  5.1257 +#
  5.1258 +# ISA devices
  5.1259 +#
  5.1260 +CONFIG_SND_AD1848_LIB=m
  5.1261 +CONFIG_SND_CS4231_LIB=m
  5.1262 +CONFIG_SND_ADLIB=m
  5.1263 +CONFIG_SND_AD1816A=m
  5.1264 +CONFIG_SND_AD1848=m
  5.1265 +CONFIG_SND_ALS100=m
  5.1266 +CONFIG_SND_AZT2320=m
  5.1267 +CONFIG_SND_CMI8330=m
  5.1268 +CONFIG_SND_CS4231=m
  5.1269 +CONFIG_SND_CS4232=m
  5.1270 +CONFIG_SND_CS4236=m
  5.1271 +CONFIG_SND_DT019X=m
  5.1272 +CONFIG_SND_ES968=m
  5.1273 +CONFIG_SND_ES1688=m
  5.1274 +CONFIG_SND_ES18XX=m
  5.1275 +CONFIG_SND_GUS_SYNTH=m
  5.1276 +CONFIG_SND_GUSCLASSIC=m
  5.1277 +CONFIG_SND_GUSEXTREME=m
  5.1278 +CONFIG_SND_GUSMAX=m
  5.1279 +CONFIG_SND_INTERWAVE=m
  5.1280 +CONFIG_SND_INTERWAVE_STB=m
  5.1281 +CONFIG_SND_OPL3SA2=m
  5.1282 +CONFIG_SND_OPTI92X_AD1848=m
  5.1283 +CONFIG_SND_OPTI92X_CS4231=m
  5.1284 +CONFIG_SND_OPTI93X=m
  5.1285 +CONFIG_SND_MIRO=m
  5.1286 +CONFIG_SND_SB8=m
  5.1287 +CONFIG_SND_SB16=m
  5.1288 +CONFIG_SND_SBAWE=m
  5.1289 +# CONFIG_SND_SB16_CSP is not set
  5.1290 +CONFIG_SND_SGALAXY=m
  5.1291 +CONFIG_SND_SSCAPE=m
  5.1292 +CONFIG_SND_WAVEFRONT=m
  5.1293 +CONFIG_SND_WAVEFRONT_FIRMWARE_IN_KERNEL=y
  5.1294 +
  5.1295 +#
  5.1296 +# PCI devices
  5.1297 +#
  5.1298 +CONFIG_SND_AD1889=m
  5.1299 +CONFIG_SND_ALS300=m
  5.1300 +CONFIG_SND_ALS4000=m
  5.1301 +CONFIG_SND_ALI5451=m
  5.1302 +CONFIG_SND_ATIIXP=m
  5.1303 +CONFIG_SND_ATIIXP_MODEM=m
  5.1304 +CONFIG_SND_AU8810=m
  5.1305 +CONFIG_SND_AU8820=m
  5.1306 +CONFIG_SND_AU8830=m
  5.1307 +CONFIG_SND_AZT3328=m
  5.1308 +CONFIG_SND_BT87X=m
  5.1309 +# CONFIG_SND_BT87X_OVERCLOCK is not set
  5.1310 +CONFIG_SND_CA0106=m
  5.1311 +CONFIG_SND_CMIPCI=m
  5.1312 +CONFIG_SND_CS4281=m
  5.1313 +CONFIG_SND_CS46XX=m
  5.1314 +CONFIG_SND_CS46XX_NEW_DSP=y
  5.1315 +CONFIG_SND_CS5535AUDIO=m
  5.1316 +CONFIG_SND_DARLA20=m
  5.1317 +CONFIG_SND_GINA20=m
  5.1318 +CONFIG_SND_LAYLA20=m
  5.1319 +CONFIG_SND_DARLA24=m
  5.1320 +CONFIG_SND_GINA24=m
  5.1321 +CONFIG_SND_LAYLA24=m
  5.1322 +CONFIG_SND_MONA=m
  5.1323 +CONFIG_SND_MIA=m
  5.1324 +CONFIG_SND_ECHO3G=m
  5.1325 +CONFIG_SND_INDIGO=m
  5.1326 +CONFIG_SND_INDIGOIO=m
  5.1327 +CONFIG_SND_INDIGODJ=m
  5.1328 +CONFIG_SND_EMU10K1=m
  5.1329 +CONFIG_SND_EMU10K1X=m
  5.1330 +CONFIG_SND_ENS1370=m
  5.1331 +CONFIG_SND_ENS1371=m
  5.1332 +CONFIG_SND_ES1938=m
  5.1333 +CONFIG_SND_ES1968=m
  5.1334 +CONFIG_SND_FM801=m
  5.1335 +# CONFIG_SND_FM801_TEA575X_BOOL is not set
  5.1336 +CONFIG_SND_HDA_INTEL=m
  5.1337 +CONFIG_SND_HDSP=m
  5.1338 +CONFIG_SND_HDSPM=m
  5.1339 +CONFIG_SND_ICE1712=m
  5.1340 +CONFIG_SND_ICE1724=m
  5.1341 +CONFIG_SND_INTEL8X0=m
  5.1342 +CONFIG_SND_INTEL8X0M=m
  5.1343 +CONFIG_SND_KORG1212=m
  5.1344 +CONFIG_SND_KORG1212_FIRMWARE_IN_KERNEL=y
  5.1345 +CONFIG_SND_MAESTRO3=m
  5.1346 +CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL=y
  5.1347 +CONFIG_SND_MIXART=m
  5.1348 +CONFIG_SND_NM256=m
  5.1349 +CONFIG_SND_PCXHR=m
  5.1350 +CONFIG_SND_RIPTIDE=m
  5.1351 +CONFIG_SND_RME32=m
  5.1352 +CONFIG_SND_RME96=m
  5.1353 +CONFIG_SND_RME9652=m
  5.1354 +CONFIG_SND_SONICVIBES=m
  5.1355 +CONFIG_SND_TRIDENT=m
  5.1356 +CONFIG_SND_VIA82XX=m
  5.1357 +CONFIG_SND_VIA82XX_MODEM=m
  5.1358 +CONFIG_SND_VX222=m
  5.1359 +CONFIG_SND_YMFPCI=m
  5.1360 +CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL=y
  5.1361 +# CONFIG_SND_AC97_POWER_SAVE is not set
  5.1362 +
  5.1363 +#
  5.1364 +# USB devices
  5.1365 +#
  5.1366 +# CONFIG_SND_USB_AUDIO is not set
  5.1367 +# CONFIG_SND_USB_USX2Y is not set
  5.1368 +# CONFIG_SND_USB_CAIAQ is not set
  5.1369 +
  5.1370 +#
  5.1371 +# PCMCIA devices
  5.1372 +#
  5.1373 +# CONFIG_SND_VXPOCKET is not set
  5.1374 +# CONFIG_SND_PDAUDIOCF is not set
  5.1375 +
  5.1376 +#
  5.1377 +# System on Chip audio support
  5.1378 +#
  5.1379 +# CONFIG_SND_SOC is not set
  5.1380 +
  5.1381 +#
  5.1382 +# Open Sound System
  5.1383 +#
  5.1384 +# CONFIG_SOUND_PRIME is not set
  5.1385 +CONFIG_AC97_BUS=m
  5.1386 +
  5.1387 +#
  5.1388 +# HID Devices
  5.1389 +#
  5.1390 +CONFIG_HID=y
  5.1391 +# CONFIG_HID_DEBUG is not set
  5.1392 +
  5.1393 +#
  5.1394 +# USB Input Devices
  5.1395 +#
  5.1396 +CONFIG_USB_HID=y
  5.1397 +# CONFIG_USB_HIDINPUT_POWERBOOK is not set
  5.1398 +# CONFIG_HID_FF is not set
  5.1399 +CONFIG_USB_HIDDEV=y
  5.1400 +
  5.1401 +#
  5.1402 +# USB support
  5.1403 +#
  5.1404 +CONFIG_USB_ARCH_HAS_HCD=y
  5.1405 +CONFIG_USB_ARCH_HAS_OHCI=y
  5.1406 +CONFIG_USB_ARCH_HAS_EHCI=y
  5.1407 +CONFIG_USB=y
  5.1408 +# CONFIG_USB_DEBUG is not set
  5.1409 +
  5.1410 +#
  5.1411 +# Miscellaneous USB options
  5.1412 +#
  5.1413 +CONFIG_USB_DEVICEFS=y
  5.1414 +CONFIG_USB_DEVICE_CLASS=y
  5.1415 +# CONFIG_USB_DYNAMIC_MINORS is not set
  5.1416 +# CONFIG_USB_OTG is not set
  5.1417 +
  5.1418 +#
  5.1419 +# USB Host Controller Drivers
  5.1420 +#
  5.1421 +CONFIG_USB_EHCI_HCD=y
  5.1422 +# CONFIG_USB_EHCI_SPLIT_ISO is not set
  5.1423 +# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
  5.1424 +# CONFIG_USB_EHCI_TT_NEWSCHED is not set
  5.1425 +# CONFIG_USB_EHCI_BIG_ENDIAN_MMIO is not set
  5.1426 +# CONFIG_USB_ISP116X_HCD is not set
  5.1427 +CONFIG_USB_OHCI_HCD=m
  5.1428 +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
  5.1429 +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
  5.1430 +CONFIG_USB_OHCI_LITTLE_ENDIAN=y
  5.1431 +CONFIG_USB_UHCI_HCD=y
  5.1432 +# CONFIG_USB_SL811_HCD is not set
  5.1433 +
  5.1434 +#
  5.1435 +# USB Device Class drivers
  5.1436 +#
  5.1437 +# CONFIG_USB_ACM is not set
  5.1438 +# CONFIG_USB_PRINTER is not set
  5.1439 +
  5.1440 +#
  5.1441 +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
  5.1442 +#
  5.1443 +
  5.1444 +#
  5.1445 +# may also be needed; see USB_STORAGE Help for more information
  5.1446 +#
  5.1447 +CONFIG_USB_STORAGE=y
  5.1448 +# CONFIG_USB_STORAGE_DEBUG is not set
  5.1449 +# CONFIG_USB_STORAGE_DATAFAB is not set
  5.1450 +# CONFIG_USB_STORAGE_FREECOM is not set
  5.1451 +# CONFIG_USB_STORAGE_ISD200 is not set
  5.1452 +# CONFIG_USB_STORAGE_DPCM is not set
  5.1453 +# CONFIG_USB_STORAGE_USBAT is not set
  5.1454 +# CONFIG_USB_STORAGE_SDDR09 is not set
  5.1455 +# CONFIG_USB_STORAGE_SDDR55 is not set
  5.1456 +# CONFIG_USB_STORAGE_JUMPSHOT is not set
  5.1457 +# CONFIG_USB_STORAGE_ALAUDA is not set
  5.1458 +# CONFIG_USB_STORAGE_ONETOUCH is not set
  5.1459 +# CONFIG_USB_STORAGE_KARMA is not set
  5.1460 +# CONFIG_USB_LIBUSUAL is not set
  5.1461 +
  5.1462 +#
  5.1463 +# USB Imaging devices
  5.1464 +#
  5.1465 +# CONFIG_USB_MDC800 is not set
  5.1466 +# CONFIG_USB_MICROTEK is not set
  5.1467 +# CONFIG_USB_MON is not set
  5.1468 +
  5.1469 +#
  5.1470 +# USB port drivers
  5.1471 +#
  5.1472 +
  5.1473 +#
  5.1474 +# USB Serial Converter support
  5.1475 +#
  5.1476 +# CONFIG_USB_SERIAL is not set
  5.1477 +
  5.1478 +#
  5.1479 +# USB Miscellaneous drivers
  5.1480 +#
  5.1481 +# CONFIG_USB_EMI62 is not set
  5.1482 +# CONFIG_USB_EMI26 is not set
  5.1483 +# CONFIG_USB_ADUTUX is not set
  5.1484 +# CONFIG_USB_AUERSWALD is not set
  5.1485 +# CONFIG_USB_RIO500 is not set
  5.1486 +# CONFIG_USB_LEGOTOWER is not set
  5.1487 +# CONFIG_USB_LCD is not set
  5.1488 +# CONFIG_USB_BERRY_CHARGE is not set
  5.1489 +# CONFIG_USB_LED is not set
  5.1490 +# CONFIG_USB_CYPRESS_CY7C63 is not set
  5.1491 +# CONFIG_USB_CYTHERM is not set
  5.1492 +# CONFIG_USB_PHIDGET is not set
  5.1493 +# CONFIG_USB_IDMOUSE is not set
  5.1494 +# CONFIG_USB_FTDI_ELAN is not set
  5.1495 +# CONFIG_USB_APPLEDISPLAY is not set
  5.1496 +# CONFIG_USB_SISUSBVGA is not set
  5.1497 +# CONFIG_USB_LD is not set
  5.1498 +# CONFIG_USB_TRANCEVIBRATOR is not set
  5.1499 +# CONFIG_USB_IOWARRIOR is not set
  5.1500 +# CONFIG_USB_TEST is not set
  5.1501 +
  5.1502 +#
  5.1503 +# USB DSL modem support
  5.1504 +#
  5.1505 +
  5.1506 +#
  5.1507 +# USB Gadget Support
  5.1508 +#
  5.1509 +# CONFIG_USB_GADGET is not set
  5.1510 +# CONFIG_MMC is not set
  5.1511 +
  5.1512 +#
  5.1513 +# LED devices
  5.1514 +#
  5.1515 +# CONFIG_NEW_LEDS is not set
  5.1516 +
  5.1517 +#
  5.1518 +# LED drivers
  5.1519 +#
  5.1520 +
  5.1521 +#
  5.1522 +# LED Triggers
  5.1523 +#
  5.1524 +
  5.1525 +#
  5.1526 +# InfiniBand support
  5.1527 +#
  5.1528 +# CONFIG_INFINIBAND is not set
  5.1529 +
  5.1530 +#
  5.1531 +# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
  5.1532 +#
  5.1533 +# CONFIG_EDAC is not set
  5.1534 +
  5.1535 +#
  5.1536 +# Real Time Clock
  5.1537 +#
  5.1538 +# CONFIG_RTC_CLASS is not set
  5.1539 +
  5.1540 +#
  5.1541 +# DMA Engine support
  5.1542 +#
  5.1543 +CONFIG_DMA_ENGINE=y
  5.1544 +
  5.1545 +#
  5.1546 +# DMA Clients
  5.1547 +#
  5.1548 +CONFIG_NET_DMA=y
  5.1549 +
  5.1550 +#
  5.1551 +# DMA Devices
  5.1552 +#
  5.1553 +CONFIG_INTEL_IOATDMA=y
  5.1554 +
  5.1555 +#
  5.1556 +# Virtualization
  5.1557 +#
  5.1558 +# CONFIG_KVM is not set
  5.1559 +
  5.1560 +#
  5.1561 +# File systems
  5.1562 +#
  5.1563 +CONFIG_EXT2_FS=y
  5.1564 +# CONFIG_EXT2_FS_XATTR is not set
  5.1565 +# CONFIG_EXT2_FS_XIP is not set
  5.1566 +CONFIG_EXT3_FS=y
  5.1567 +# CONFIG_EXT3_FS_XATTR is not set
  5.1568 +# CONFIG_EXT4DEV_FS is not set
  5.1569 +CONFIG_JBD=y
  5.1570 +# CONFIG_JBD_DEBUG is not set
  5.1571 +# CONFIG_REISERFS_FS is not set
  5.1572 +# CONFIG_JFS_FS is not set
  5.1573 +# CONFIG_FS_POSIX_ACL is not set
  5.1574 +# CONFIG_XFS_FS is not set
  5.1575 +# CONFIG_GFS2_FS is not set
  5.1576 +# CONFIG_OCFS2_FS is not set
  5.1577 +# CONFIG_MINIX_FS is not set
  5.1578 +# CONFIG_ROMFS_FS is not set
  5.1579 +CONFIG_INOTIFY=y
  5.1580 +CONFIG_INOTIFY_USER=y
  5.1581 +# CONFIG_QUOTA is not set
  5.1582 +CONFIG_DNOTIFY=y
  5.1583 +# CONFIG_AUTOFS_FS is not set
  5.1584 +# CONFIG_AUTOFS4_FS is not set
  5.1585 +CONFIG_FUSE_FS=y
  5.1586 +
  5.1587 +#
  5.1588 +# CD-ROM/DVD Filesystems
  5.1589 +#
  5.1590 +CONFIG_ISO9660_FS=y
  5.1591 +CONFIG_JOLIET=y
  5.1592 +# CONFIG_ZISOFS is not set
  5.1593 +# CONFIG_UDF_FS is not set
  5.1594 +
  5.1595 +#
  5.1596 +# DOS/FAT/NT Filesystems
  5.1597 +#
  5.1598 +CONFIG_FAT_FS=m
  5.1599 +CONFIG_MSDOS_FS=m
  5.1600 +CONFIG_VFAT_FS=m
  5.1601 +CONFIG_FAT_DEFAULT_CODEPAGE=437
  5.1602 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
  5.1603 +# CONFIG_NTFS_FS is not set
  5.1604 +
  5.1605 +#
  5.1606 +# Pseudo filesystems
  5.1607 +#
  5.1608 +CONFIG_PROC_FS=y
  5.1609 +CONFIG_PROC_KCORE=y
  5.1610 +CONFIG_PROC_SYSCTL=y
  5.1611 +CONFIG_SYSFS=y
  5.1612 +CONFIG_TMPFS=y
  5.1613 +# CONFIG_TMPFS_POSIX_ACL is not set
  5.1614 +# CONFIG_HUGETLBFS is not set
  5.1615 +# CONFIG_HUGETLB_PAGE is not set
  5.1616 +CONFIG_RAMFS=y
  5.1617 +# CONFIG_CONFIGFS_FS is not set
  5.1618 +
  5.1619 +#
  5.1620 +# Miscellaneous filesystems
  5.1621 +#
  5.1622 +# CONFIG_ADFS_FS is not set
  5.1623 +# CONFIG_AFFS_FS is not set
  5.1624 +# CONFIG_HFS_FS is not set
  5.1625 +# CONFIG_HFSPLUS_FS is not set
  5.1626 +# CONFIG_BEFS_FS is not set
  5.1627 +# CONFIG_BFS_FS is not set
  5.1628 +# CONFIG_EFS_FS is not set
  5.1629 +CONFIG_CRAMFS=y
  5.1630 +# CONFIG_VXFS_FS is not set
  5.1631 +# CONFIG_HPFS_FS is not set
  5.1632 +# CONFIG_QNX4FS_FS is not set
  5.1633 +# CONFIG_SYSV_FS is not set
  5.1634 +# CONFIG_UFS_FS is not set
  5.1635 +
  5.1636 +#
  5.1637 +# Network File Systems
  5.1638 +#
  5.1639 +CONFIG_NFS_FS=y
  5.1640 +CONFIG_NFS_V3=y
  5.1641 +# CONFIG_NFS_V3_ACL is not set
  5.1642 +# CONFIG_NFS_V4 is not set
  5.1643 +# CONFIG_NFS_DIRECTIO is not set
  5.1644 +# CONFIG_NFSD is not set
  5.1645 +CONFIG_LOCKD=y
  5.1646 +CONFIG_LOCKD_V4=y
  5.1647 +CONFIG_NFS_COMMON=y
  5.1648 +CONFIG_SUNRPC=y
  5.1649 +# CONFIG_SUNRPC_BIND34 is not set
  5.1650 +# CONFIG_RPCSEC_GSS_KRB5 is not set
  5.1651 +# CONFIG_RPCSEC_GSS_SPKM3 is not set
  5.1652 +# CONFIG_SMB_FS is not set
  5.1653 +# CONFIG_CIFS is not set
  5.1654 +# CONFIG_NCP_FS is not set
  5.1655 +# CONFIG_CODA_FS is not set
  5.1656 +# CONFIG_AFS_FS is not set
  5.1657 +# CONFIG_9P_FS is not set
  5.1658 +
  5.1659 +#
  5.1660 +# Partition Types
  5.1661 +#
  5.1662 +CONFIG_PARTITION_ADVANCED=y
  5.1663 +# CONFIG_ACORN_PARTITION is not set
  5.1664 +# CONFIG_OSF_PARTITION is not set
  5.1665 +# CONFIG_AMIGA_PARTITION is not set
  5.1666 +# CONFIG_ATARI_PARTITION is not set
  5.1667 +# CONFIG_MAC_PARTITION is not set
  5.1668 +CONFIG_MSDOS_PARTITION=y
  5.1669 +# CONFIG_BSD_DISKLABEL is not set
  5.1670 +# CONFIG_MINIX_SUBPARTITION is not set
  5.1671 +# CONFIG_SOLARIS_X86_PARTITION is not set
  5.1672 +# CONFIG_UNIXWARE_DISKLABEL is not set
  5.1673 +# CONFIG_LDM_PARTITION is not set
  5.1674 +# CONFIG_SGI_PARTITION is not set
  5.1675 +# CONFIG_ULTRIX_PARTITION is not set
  5.1676 +# CONFIG_SUN_PARTITION is not set
  5.1677 +# CONFIG_KARMA_PARTITION is not set
  5.1678 +# CONFIG_EFI_PARTITION is not set
  5.1679 +# CONFIG_SYSV68_PARTITION is not set
  5.1680 +
  5.1681 +#
  5.1682 +# Native Language Support
  5.1683 +#
  5.1684 +CONFIG_NLS=y
  5.1685 +CONFIG_NLS_DEFAULT="iso8859-1"
  5.1686 +CONFIG_NLS_CODEPAGE_437=y
  5.1687 +# CONFIG_NLS_CODEPAGE_737 is not set
  5.1688 +# CONFIG_NLS_CODEPAGE_775 is not set
  5.1689 +CONFIG_NLS_CODEPAGE_850=y
  5.1690 +CONFIG_NLS_CODEPAGE_852=y
  5.1691 +# CONFIG_NLS_CODEPAGE_855 is not set
  5.1692 +# CONFIG_NLS_CODEPAGE_857 is not set
  5.1693 +# CONFIG_NLS_CODEPAGE_860 is not set
  5.1694 +# CONFIG_NLS_CODEPAGE_861 is not set
  5.1695 +# CONFIG_NLS_CODEPAGE_862 is not set
  5.1696 +CONFIG_NLS_CODEPAGE_863=y
  5.1697 +# CONFIG_NLS_CODEPAGE_864 is not set
  5.1698 +CONFIG_NLS_CODEPAGE_865=y
  5.1699 +# CONFIG_NLS_CODEPAGE_866 is not set
  5.1700 +# CONFIG_NLS_CODEPAGE_869 is not set
  5.1701 +# CONFIG_NLS_CODEPAGE_936 is not set
  5.1702 +# CONFIG_NLS_CODEPAGE_950 is not set
  5.1703 +# CONFIG_NLS_CODEPAGE_932 is not set
  5.1704 +# CONFIG_NLS_CODEPAGE_949 is not set
  5.1705 +# CONFIG_NLS_CODEPAGE_874 is not set
  5.1706 +# CONFIG_NLS_ISO8859_8 is not set
  5.1707 +# CONFIG_NLS_CODEPAGE_1250 is not set
  5.1708 +# CONFIG_NLS_CODEPAGE_1251 is not set
  5.1709 +CONFIG_NLS_ASCII=y
  5.1710 +CONFIG_NLS_ISO8859_1=y
  5.1711 +CONFIG_NLS_ISO8859_2=y
  5.1712 +# CONFIG_NLS_ISO8859_3 is not set
  5.1713 +# CONFIG_NLS_ISO8859_4 is not set
  5.1714 +# CONFIG_NLS_ISO8859_5 is not set
  5.1715 +# CONFIG_NLS_ISO8859_6 is not set
  5.1716 +# CONFIG_NLS_ISO8859_7 is not set
  5.1717 +# CONFIG_NLS_ISO8859_9 is not set
  5.1718 +# CONFIG_NLS_ISO8859_13 is not set
  5.1719 +# CONFIG_NLS_ISO8859_14 is not set
  5.1720 +CONFIG_NLS_ISO8859_15=y
  5.1721 +# CONFIG_NLS_KOI8_R is not set
  5.1722 +# CONFIG_NLS_KOI8_U is not set
  5.1723 +CONFIG_NLS_UTF8=m
  5.1724 +
  5.1725 +#
  5.1726 +# Distributed Lock Manager
  5.1727 +#
  5.1728 +# CONFIG_DLM is not set
  5.1729 +
  5.1730 +#
  5.1731 +# Instrumentation Support
  5.1732 +#
  5.1733 +# CONFIG_PROFILING is not set
  5.1734 +# CONFIG_KPROBES is not set
  5.1735 +
  5.1736 +#
  5.1737 +# Kernel hacking
  5.1738 +#
  5.1739 +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
  5.1740 +# CONFIG_PRINTK_TIME is not set
  5.1741 +CONFIG_ENABLE_MUST_CHECK=y
  5.1742 +# CONFIG_MAGIC_SYSRQ is not set
  5.1743 +CONFIG_UNUSED_SYMBOLS=y
  5.1744 +# CONFIG_DEBUG_FS is not set
  5.1745 +# CONFIG_HEADERS_CHECK is not set
  5.1746 +# CONFIG_DEBUG_KERNEL is not set
  5.1747 +CONFIG_DEBUG_BUGVERBOSE=y
  5.1748 +CONFIG_EARLY_PRINTK=y
  5.1749 +CONFIG_X86_FIND_SMP_CONFIG=y
  5.1750 +CONFIG_X86_MPPARSE=y
  5.1751 +CONFIG_DOUBLEFAULT=y
  5.1752 +
  5.1753 +#
  5.1754 +# Security options
  5.1755 +#
  5.1756 +# CONFIG_KEYS is not set
  5.1757 +# CONFIG_SECURITY is not set
  5.1758 +
  5.1759 +#
  5.1760 +# Cryptographic options
  5.1761 +#
  5.1762 +CONFIG_CRYPTO=y
  5.1763 +CONFIG_CRYPTO_ALGAPI=y
  5.1764 +CONFIG_CRYPTO_BLKCIPHER=y
  5.1765 +CONFIG_CRYPTO_HASH=y
  5.1766 +CONFIG_CRYPTO_MANAGER=y
  5.1767 +CONFIG_CRYPTO_HMAC=y
  5.1768 +# CONFIG_CRYPTO_XCBC is not set
  5.1769 +# CONFIG_CRYPTO_NULL is not set
  5.1770 +# CONFIG_CRYPTO_MD4 is not set
  5.1771 +CONFIG_CRYPTO_MD5=y
  5.1772 +CONFIG_CRYPTO_SHA1=y
  5.1773 +# CONFIG_CRYPTO_SHA256 is not set
  5.1774 +# CONFIG_CRYPTO_SHA512 is not set
  5.1775 +# CONFIG_CRYPTO_WP512 is not set
  5.1776 +# CONFIG_CRYPTO_TGR192 is not set
  5.1777 +# CONFIG_CRYPTO_GF128MUL is not set
  5.1778 +# CONFIG_CRYPTO_ECB is not set
  5.1779 +CONFIG_CRYPTO_CBC=y
  5.1780 +CONFIG_CRYPTO_PCBC=m
  5.1781 +# CONFIG_CRYPTO_LRW is not set
  5.1782 +# CONFIG_CRYPTO_CRYPTD is not set
  5.1783 +CONFIG_CRYPTO_DES=y
  5.1784 +# CONFIG_CRYPTO_FCRYPT is not set
  5.1785 +# CONFIG_CRYPTO_BLOWFISH is not set
  5.1786 +# CONFIG_CRYPTO_TWOFISH is not set
  5.1787 +# CONFIG_CRYPTO_TWOFISH_586 is not set
  5.1788 +# CONFIG_CRYPTO_SERPENT is not set
  5.1789 +# CONFIG_CRYPTO_AES is not set
  5.1790 +# CONFIG_CRYPTO_AES_586 is not set
  5.1791 +# CONFIG_CRYPTO_CAST5 is not set
  5.1792 +# CONFIG_CRYPTO_CAST6 is not set
  5.1793 +# CONFIG_CRYPTO_TEA is not set
  5.1794 +# CONFIG_CRYPTO_ARC4 is not set
  5.1795 +# CONFIG_CRYPTO_KHAZAD is not set
  5.1796 +# CONFIG_CRYPTO_ANUBIS is not set
  5.1797 +CONFIG_CRYPTO_DEFLATE=y
  5.1798 +# CONFIG_CRYPTO_MICHAEL_MIC is not set
  5.1799 +# CONFIG_CRYPTO_CRC32C is not set
  5.1800 +# CONFIG_CRYPTO_CAMELLIA is not set
  5.1801 +# CONFIG_CRYPTO_TEST is not set
  5.1802 +
  5.1803 +#
  5.1804 +# Hardware crypto devices
  5.1805 +#
  5.1806 +# CONFIG_CRYPTO_DEV_PADLOCK is not set
  5.1807 +# CONFIG_CRYPTO_DEV_GEODE is not set
  5.1808 +
  5.1809 +#
  5.1810 +# Library routines
  5.1811 +#
  5.1812 +CONFIG_BITREVERSE=y
  5.1813 +CONFIG_CRC_CCITT=y
  5.1814 +# CONFIG_CRC16 is not set
  5.1815 +# CONFIG_CRC_ITU_T is not set
  5.1816 +CONFIG_CRC32=y
  5.1817 +# CONFIG_LIBCRC32C is not set
  5.1818 +CONFIG_ZLIB_INFLATE=y
  5.1819 +CONFIG_ZLIB_DEFLATE=y
  5.1820 +CONFIG_PLIST=y
  5.1821 +CONFIG_HAS_IOMEM=y
  5.1822 +CONFIG_HAS_IOPORT=y
  5.1823 +CONFIG_HAS_DMA=y
  5.1824 +CONFIG_GENERIC_HARDIRQS=y
  5.1825 +CONFIG_GENERIC_IRQ_PROBE=y
  5.1826 +CONFIG_GENERIC_PENDING_IRQ=y
  5.1827 +CONFIG_X86_SMP=y
  5.1828 +CONFIG_X86_HT=y
  5.1829 +CONFIG_X86_BIOS_REBOOT=y
  5.1830 +CONFIG_X86_TRAMPOLINE=y
  5.1831 +CONFIG_KTIME_SCALAR=y
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/linux/stuff/linux-lzma-2.6.22.9.u	Thu Dec 13 11:30:29 2007 +0100
     6.3 @@ -0,0 +1,2075 @@
     6.4 +--- linux-2.6.22.9/arch/i386/boot/compressed/Makefile
     6.5 ++++ linux-2.6.22.9/arch/i386/boot/compressed/Makefile
     6.6 +@@ -4,7 +4,7 @@
     6.7 + # create a compressed vmlinux image from the original vmlinux
     6.8 + #
     6.9 + 
    6.10 +-targets		:= vmlinux vmlinux.bin vmlinux.bin.gz head.o misc.o piggy.o \
    6.11 ++targets		:= vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma head.o misc.o piggy.o \
    6.12 + 			vmlinux.bin.all vmlinux.relocs
    6.13 + EXTRA_AFLAGS	:= -traditional
    6.14 + 
    6.15 +@@ -39,7 +39,27 @@ $(obj)/vmlinux.bin.gz: $(obj)/vmlinux.bi
    6.16 + 	$(call if_changed,gzip)
    6.17 + endif
    6.18 + 
    6.19 ++ifdef CONFIG_RELOCATABLE
    6.20 ++$(obj)/vmlinux.bin.bz2: $(obj)/vmlinux.bin.all FORCE
    6.21 ++	$(call if_changed,bzip2)
    6.22 ++else
    6.23 ++$(obj)/vmlinux.bin.bz2: $(obj)/vmlinux.bin FORCE
    6.24 ++	$(call if_changed,bzip2)
    6.25 ++endif
    6.26 ++
    6.27 ++ifdef CONFIG_RELOCATABLE
    6.28 ++$(obj)/vmlinux.bin.lzma: $(obj)/vmlinux.bin.all FORCE
    6.29 ++	$(call if_changed,lzma)
    6.30 ++else
    6.31 ++$(obj)/vmlinux.bin.lzma: $(obj)/vmlinux.bin FORCE
    6.32 ++	$(call if_changed,lzma)
    6.33 ++endif
    6.34 ++
    6.35 + LDFLAGS_piggy.o := -r --format binary --oformat elf32-i386 -T
    6.36 + 
    6.37 +-$(obj)/piggy.o: $(src)/vmlinux.scr $(obj)/vmlinux.bin.gz FORCE
    6.38 ++suffix_$(CONFIG_KERNEL_GZIP)  = gz
    6.39 ++suffix_$(CONFIG_KERNEL_BZIP2) = bz2
    6.40 ++suffix_$(CONFIG_KERNEL_LZMA)  = lzma
    6.41 ++
    6.42 ++$(obj)/piggy.o: $(src)/vmlinux.scr $(obj)/vmlinux.bin.$(suffix_y) FORCE
    6.43 + 	$(call if_changed,ld)
    6.44 +
    6.45 +--- linux-2.6.22.9/arch/i386/boot/compressed/misc.c
    6.46 ++++ linux-2.6.22.9/arch/i386/boot/compressed/misc.c
    6.47 +@@ -121,9 +121,12 @@
    6.48 + 				 * always be larger than our output buffer.
    6.49 + 				 */
    6.50 + 
    6.51 ++#ifdef CONFIG_KERNEL_GZIP
    6.52 + static uch *inbuf;	/* input buffer */
    6.53 ++#endif
    6.54 + static uch *window;	/* Sliding window buffer, (and final output buffer) */
    6.55 + 
    6.56 ++#ifdef CONFIG_KERNEL_GZIP
    6.57 + static unsigned insize;  /* valid bytes in inbuf */
    6.58 + static unsigned inptr;   /* index of next byte to be processed in inbuf */
    6.59 + static unsigned outcnt;  /* bytes in output buffer */
    6.60 +@@ -158,9 +161,14 @@ static unsigned outcnt;  /* bytes in out
    6.61 + 
    6.62 + static int  fill_inbuf(void);
    6.63 + static void flush_window(void);
    6.64 ++#endif
    6.65 ++
    6.66 + static void error(char *m);
    6.67 ++
    6.68 ++#ifdef CONFIG_KERNEL_GZIP
    6.69 + static void gzip_mark(void **);
    6.70 + static void gzip_release(void **);
    6.71 ++#endif
    6.72 +   
    6.73 + /*
    6.74 +  * This is set up by the setup-routine at boot-time
    6.75 +@@ -181,7 +189,9 @@ static long bytes_out = 0;
    6.76 + static void *malloc(int size);
    6.77 + static void free(void *where);
    6.78 + 
    6.79 ++#if (defined CONFIG_KERNEL_GZIP || defined CONFIG_KERNEL_BZIP2)
    6.80 + static void *memset(void *s, int c, unsigned n);
    6.81 ++#endif
    6.82 + static void *memcpy(void *dest, const void *src, unsigned n);
    6.83 + 
    6.84 + static void putstr(const char *);
    6.85 +@@ -189,7 +199,11 @@ static void putstr(const char *);
    6.86 + static unsigned long free_mem_ptr;
    6.87 + static unsigned long free_mem_end_ptr;
    6.88 + 
    6.89 ++#if (defined CONFIG_KERNEL_BZIP2 || defined CONFIG_KERNEL_LZMA)
    6.90 ++#define HEAP_SIZE             0x400000
    6.91 ++#else
    6.92 + #define HEAP_SIZE             0x4000
    6.93 ++#endif
    6.94 + 
    6.95 + static char *vidmem = (char *)0xb8000;
    6.96 + static int vidport;
    6.97 +@@ -199,7 +213,29 @@ static int lines, cols;
    6.98 + void *xquad_portio;
    6.99 + #endif
   6.100 + 
   6.101 ++#if (defined CONFIG_KERNEL_BZIP2 || defined CONFIG_KERNEL_LZMA)
   6.102 ++
   6.103 ++#define large_malloc malloc
   6.104 ++#define large_free free
   6.105 ++
   6.106 ++#ifdef current
   6.107 ++#undef current
   6.108 ++#endif
   6.109 ++
   6.110 ++#define INCLUDED
   6.111 ++#endif
   6.112 ++
   6.113 ++#ifdef CONFIG_KERNEL_GZIP
   6.114 + #include "../../../../lib/inflate.c"
   6.115 ++#endif
   6.116 ++
   6.117 ++#ifdef CONFIG_KERNEL_BZIP2
   6.118 ++#include "../../../../lib/decompress_bunzip2.c"
   6.119 ++#endif
   6.120 ++
   6.121 ++#ifdef CONFIG_KERNEL_LZMA
   6.122 ++#include "../../../../lib/decompress_unlzma.c"
   6.123 ++#endif
   6.124 + 
   6.125 + static void *malloc(int size)
   6.126 + {
   6.127 +@@ -223,6 +259,7 @@ static void free(void *where)
   6.128 + {	/* Don't care */
   6.129 + }
   6.130 + 
   6.131 ++#ifdef CONFIG_KERNEL_GZIP
   6.132 + static void gzip_mark(void **ptr)
   6.133 + {
   6.134 + 	*ptr = (void *) free_mem_ptr;
   6.135 +@@ -232,6 +269,7 @@ static void gzip_release(void **ptr)
   6.136 + {
   6.137 + 	free_mem_ptr = (unsigned long) *ptr;
   6.138 + }
   6.139 ++#endif
   6.140 +  
   6.141 + static void scroll(void)
   6.142 + {
   6.143 +@@ -279,6 +317,7 @@ static void putstr(const char *s)
   6.144 + 	outb_p(0xff & (pos >> 1), vidport+1);
   6.145 + }
   6.146 + 
   6.147 ++#if (defined CONFIG_KERNEL_GZIP || defined CONFIG_KERNEL_BZIP2)
   6.148 + static void* memset(void* s, int c, unsigned n)
   6.149 + {
   6.150 + 	int i;
   6.151 +@@ -287,6 +326,7 @@ static void* memset(void* s, int c, unsi
   6.152 + 	for (i=0;i<n;i++) ss[i] = c;
   6.153 + 	return s;
   6.154 + }
   6.155 ++#endif
   6.156 + 
   6.157 + static void* memcpy(void* dest, const void* src, unsigned n)
   6.158 + {
   6.159 +@@ -297,6 +337,26 @@ static void* memcpy(void* dest, const vo
   6.160 + 	return dest;
   6.161 + }
   6.162 + 
   6.163 ++#ifndef CONFIG_KERNEL_GZIP
   6.164 ++/* ===========================================================================
   6.165 ++ * Write the output window window[0..outcnt-1] and update bytes_out.
   6.166 ++ * (Used for the decompressed data only.)
   6.167 ++ */
   6.168 ++static int compr_flush(char *data, unsigned int len)
   6.169 ++{
   6.170 ++    unsigned n;
   6.171 ++    uch *out;
   6.172 ++    
   6.173 ++    out = window; 
   6.174 ++    for (n = 0; n < len; n++) {
   6.175 ++	    *out++ = *data++;
   6.176 ++    }
   6.177 ++    bytes_out += (ulg)len;
   6.178 ++    window += (ulg)len;
   6.179 ++    return len;
   6.180 ++}
   6.181 ++
   6.182 ++#else
   6.183 + /* ===========================================================================
   6.184 +  * Fill the input buffer. This is called only when the buffer is empty
   6.185 +  * and at least one byte is really needed.
   6.186 +@@ -329,6 +389,7 @@ static void flush_window(void)
   6.187 + 	bytes_out += (ulg)outcnt;
   6.188 + 	outcnt = 0;
   6.189 + }
   6.190 ++#endif
   6.191 + 
   6.192 + static void error(char *x)
   6.193 + {
   6.194 +@@ -358,9 +419,11 @@ asmlinkage void decompress_kernel(void *
   6.195 + 	window = output;  	/* Output buffer (Normally at 1M) */
   6.196 + 	free_mem_ptr     = end;	/* Heap  */
   6.197 + 	free_mem_end_ptr = end + HEAP_SIZE;
   6.198 ++#ifdef CONFIG_KERNEL_GZIP
   6.199 + 	inbuf  = input_data;	/* Input buffer */
   6.200 + 	insize = input_len;
   6.201 + 	inptr  = 0;
   6.202 ++#endif
   6.203 + 
   6.204 + 	if ((u32)output & (CONFIG_PHYSICAL_ALIGN -1))
   6.205 + 		error("Destination address not CONFIG_PHYSICAL_ALIGN aligned");
   6.206 +@@ -371,9 +434,21 @@ asmlinkage void decompress_kernel(void *
   6.207 + 		error("Wrong destination address");
   6.208 + #endif
   6.209 + 
   6.210 ++#ifdef CONFIG_KERNEL_BZIP2
   6.211 ++	putstr("Bunzipping Linux... ");
   6.212 ++	bunzip2(input_data, input_len-4, NULL, compr_flush, NULL);
   6.213 ++#endif
   6.214 ++
   6.215 ++#ifdef CONFIG_KERNEL_LZMA
   6.216 ++	putstr("Unlzmaing Linux... ");
   6.217 ++	unlzma(input_data, input_len-4, NULL, compr_flush, NULL);
   6.218 ++#endif
   6.219 ++
   6.220 ++#ifdef CONFIG_KERNEL_GZIP
   6.221 + 	makecrc();
   6.222 + 	putstr("Uncompressing Linux... ");
   6.223 + 	gunzip();
   6.224 ++#endif
   6.225 + 	putstr("Ok, booting the kernel.\n");
   6.226 + 	return;
   6.227 + }
   6.228 +
   6.229 +--- linux-2.6.22.9/drivers/block/Kconfig
   6.230 ++++ linux-2.6.22.9/drivers/block/Kconfig
   6.231 +@@ -406,6 +406,30 @@
   6.232 + 	  setups function - apparently needed by the rd_load_image routine
   6.233 + 	  that supposes the filesystem in the image uses a 1024 blocksize.
   6.234 + 
   6.235 ++config RD_BZIP2
   6.236 ++	bool "Initial ramdisk compressed using bzip2"
   6.237 ++	default n
   6.238 ++	depends on BLK_DEV_INITRD=y
   6.239 ++	help
   6.240 ++	  Support loading of a bzip2 encoded initial ramdisk or cpio buffer
   6.241 ++	  If unsure, say N.
   6.242 ++
   6.243 ++config RD_LZMA
   6.244 ++	bool "Initial ramdisk compressed using lzma"
   6.245 ++	default n
   6.246 ++	depends on BLK_DEV_INITRD=y
   6.247 ++	help
   6.248 ++	  Support loading of a lzma encoded initial ramdisk or cpio buffer
   6.249 ++	  If unsure, say N.
   6.250 ++
   6.251 ++config RD_GZIP
   6.252 ++	bool "Initial ramdisk compressed using gzip"
   6.253 ++	default y
   6.254 ++	depends on BLK_DEV_INITRD=y
   6.255 ++	help
   6.256 ++	  Support loading of a gzip encoded initial ramdisk or cpio buffer.
   6.257 ++	  If unsure, say Y.
   6.258 ++
   6.259 + config CDROM_PKTCDVD
   6.260 + 	tristate "Packet writing on CD/DVD media"
   6.261 + 	depends on !UML
   6.262 +
   6.263 +--- linux-2.6.22.9/include/linux/decompress_bunzip2.h
   6.264 ++++ linux-2.6.22.9/include/linux/decompress_bunzip2.h
   6.265 +@@ -0,0 +1,16 @@
   6.266 ++#ifndef DECOMPRESS_BUNZIP2_H
   6.267 ++#define DECOMPRESS_BUNZIP2_H
   6.268 ++
   6.269 ++/* Other housekeeping constants */
   6.270 ++#define BZIP2_IOBUF_SIZE		4096
   6.271 ++
   6.272 ++#ifndef STATIC
   6.273 ++#define STATIC /**/
   6.274 ++#endif
   6.275 ++
   6.276 ++STATIC int bunzip2(char *inbuf, int len, 
   6.277 ++		   int(*fill)(void*,unsigned int),
   6.278 ++		   int(*writebb)(char*,unsigned int),
   6.279 ++		   int *pos);
   6.280 ++
   6.281 ++#endif
   6.282 +
   6.283 +--- linux-2.6.22.9/include/linux/decompress_generic.h
   6.284 ++++ linux-2.6.22.9/include/linux/decompress_generic.h
   6.285 +@@ -0,0 +1,28 @@
   6.286 ++#ifndef DECOMPRESS_GENERIC_H
   6.287 ++#define DECOMPRESS_GENERIC_H
   6.288 ++
   6.289 ++/* Minimal chunksize to be read.
   6.290 ++ * Bzip2 prefers at least 4096
   6.291 ++ * Lzma prefers 0x10000 */
   6.292 ++#define COMPR_IOBUF_SIZE	4096
   6.293 ++
   6.294 ++typedef int (*uncompress_fn) (char *inbuf, int len, 
   6.295 ++			      int(*fill)(char*,unsigned int),
   6.296 ++			      int(*writebb)(char*,unsigned int),
   6.297 ++			      int *posp);
   6.298 ++
   6.299 ++/* inbuf   - input buffer
   6.300 ++ * len     - len of pre-read data in inbuf
   6.301 ++ * fill    - function to fill inbuf if empty
   6.302 ++ * writebb - function to write out outbug
   6.303 ++ * posp    - if non-null, input position (number of bytes read) will be
   6.304 ++ *           returned here
   6.305 ++ *
   6.306 ++ * If len != 0, the inbuf is initialized (with as much data), and fill
   6.307 ++ * should not be called
   6.308 ++ * If len = 0, the inbuf is allocated, but empty. Its size is IOBUF_SIZE
   6.309 ++ * fill should be called (repeatedly...) to read data, at most IOBUF_SIZE
   6.310 ++ */
   6.311 ++ 
   6.312 ++
   6.313 ++#endif
   6.314 +
   6.315 +--- linux-2.6.22.9/include/linux/decompress_unlzma.h
   6.316 ++++ linux-2.6.22.9/include/linux/decompress_unlzma.h
   6.317 +@@ -0,0 +1,15 @@
   6.318 ++#ifndef DECOMPRESS_UNLZMA_H
   6.319 ++#define DECOMPRESS_UNLZMA_H
   6.320 ++
   6.321 ++#define LZMA_IOBUF_SIZE	0x10000
   6.322 ++
   6.323 ++#ifndef STATIC
   6.324 ++#define STATIC /**/
   6.325 ++#endif
   6.326 ++
   6.327 ++STATIC int unlzma(char *inbuf, int len, 
   6.328 ++		  int(*fill)(void*,unsigned int),
   6.329 ++		  int(*writebb)(char*,unsigned int),
   6.330 ++		  int *pos);
   6.331 ++
   6.332 ++#endif
   6.333 +
   6.334 +--- linux-2.6.22.9/init/do_mounts_rd.c
   6.335 ++++ linux-2.6.22.9/init/do_mounts_rd.c
   6.336 +@@ -8,6 +8,16 @@
   6.337 + #include <linux/initrd.h>
   6.338 + #include <linux/string.h>
   6.339 + 
   6.340 ++#ifdef CONFIG_RD_BZIP2
   6.341 ++#include <linux/decompress_bunzip2.h>
   6.342 ++#undef STATIC
   6.343 ++#endif
   6.344 ++
   6.345 ++#ifdef CONFIG_RD_LZMA
   6.346 ++#include <linux/decompress_unlzma.h>
   6.347 ++#undef STATIC
   6.348 ++#endif
   6.349 ++
   6.350 + #include "do_mounts.h"
   6.351 + 
   6.352 + #define BUILD_CRAMDISK
   6.353 +@@ -30,7 +40,15 @@ static int __init ramdisk_start_setup(ch
   6.354 + }
   6.355 + __setup("ramdisk_start=", ramdisk_start_setup);
   6.356 + 
   6.357 ++#ifdef CONFIG_RD_GZIP
   6.358 + static int __init crd_load(int in_fd, int out_fd);
   6.359 ++#endif
   6.360 ++#ifdef CONFIG_RD_BZIP2
   6.361 ++static int __init crd_load_bzip2(int in_fd, int out_fd);
   6.362 ++#endif
   6.363 ++#ifdef CONFIG_RD_LZMA
   6.364 ++static int __init crd_load_lzma(int in_fd, int out_fd);
   6.365 ++#endif
   6.366 + 
   6.367 + /*
   6.368 +  * This routine tries to find a RAM disk image to load, and returns the
   6.369 +@@ -46,7 +64,7 @@ static int __init crd_load(int in_fd, in
   6.370 +  * 	gzip
   6.371 +  */
   6.372 + static int __init 
   6.373 +-identify_ramdisk_image(int fd, int start_block)
   6.374 ++identify_ramdisk_image(int fd, int start_block, int *ztype)
   6.375 + {
   6.376 + 	const int size = 512;
   6.377 + 	struct minix_super_block *minixsb;
   6.378 +@@ -72,6 +90,7 @@ identify_ramdisk_image(int fd, int start
   6.379 + 	sys_lseek(fd, start_block * BLOCK_SIZE, 0);
   6.380 + 	sys_read(fd, buf, size);
   6.381 + 
   6.382 ++#ifdef CONFIG_RD_GZIP
   6.383 + 	/*
   6.384 + 	 * If it matches the gzip magic numbers, return -1
   6.385 + 	 */
   6.386 +@@ -79,9 +98,40 @@ identify_ramdisk_image(int fd, int start
   6.387 + 		printk(KERN_NOTICE
   6.388 + 		       "RAMDISK: Compressed image found at block %d\n",
   6.389 + 		       start_block);
   6.390 ++		*ztype = 0;
   6.391 ++		nblocks = 0;
   6.392 ++		goto done;
   6.393 ++	}
   6.394 ++#endif
   6.395 ++
   6.396 ++#ifdef CONFIG_RD_BZIP2
   6.397 ++	/*
   6.398 ++	 * If it matches the bzip magic numbers, return -1
   6.399 ++	 */
   6.400 ++	if (buf[0] == 0x42 && (buf[1] == 0x5a)) {
   6.401 ++		printk(KERN_NOTICE
   6.402 ++		       "RAMDISK: Bzipped image found at block %d\n",
   6.403 ++		       start_block);
   6.404 ++		*ztype = 1;
   6.405 + 		nblocks = 0;
   6.406 + 		goto done;
   6.407 + 	}
   6.408 ++#endif
   6.409 ++
   6.410 ++#ifdef CONFIG_RD_LZMA
   6.411 ++	/*
   6.412 ++	 * If it matches the bzip magic numbers, return -1
   6.413 ++	 */
   6.414 ++	if (buf[0] == 0x5d && (buf[1] == 0x00)) {
   6.415 ++		printk(KERN_NOTICE
   6.416 ++		       "RAMDISK: Lzma image found at block %d\n",
   6.417 ++		       start_block);
   6.418 ++		*ztype = 2;
   6.419 ++		nblocks = 0;
   6.420 ++		goto done;
   6.421 ++	}
   6.422 ++#endif
   6.423 ++
   6.424 + 
   6.425 + 	/* romfs is at block zero too */
   6.426 + 	if (romfsb->word0 == ROMSB_WORD0 &&
   6.427 +@@ -145,6 +195,7 @@ int __init rd_load_image(char *from)
   6.428 + 	int nblocks, i, disk;
   6.429 + 	char *buf = NULL;
   6.430 + 	unsigned short rotate = 0;
   6.431 ++	int ztype=-1;
   6.432 + #if !defined(CONFIG_S390) && !defined(CONFIG_PPC_ISERIES)
   6.433 + 	char rotator[4] = { '|' , '/' , '-' , '\\' };
   6.434 + #endif
   6.435 +@@ -157,14 +208,38 @@ int __init rd_load_image(char *from)
   6.436 + 	if (in_fd < 0)
   6.437 + 		goto noclose_input;
   6.438 + 
   6.439 +-	nblocks = identify_ramdisk_image(in_fd, rd_image_start);
   6.440 ++	nblocks = identify_ramdisk_image(in_fd, rd_image_start, &ztype);
   6.441 + 	if (nblocks < 0)
   6.442 + 		goto done;
   6.443 + 
   6.444 + 	if (nblocks == 0) {
   6.445 + #ifdef BUILD_CRAMDISK
   6.446 +-		if (crd_load(in_fd, out_fd) == 0)
   6.447 +-			goto successful_load;
   6.448 ++		switch(ztype) {
   6.449 ++
   6.450 ++#ifdef CONFIG_RD_GZIP
   6.451 ++			case 0:
   6.452 ++				if (crd_load(in_fd, out_fd) == 0)
   6.453 ++					goto successful_load;
   6.454 ++				break;
   6.455 ++#endif
   6.456 ++
   6.457 ++#ifdef CONFIG_RD_BZIP2
   6.458 ++			case 1:
   6.459 ++				if (crd_load_bzip2(in_fd, out_fd) == 0)
   6.460 ++					goto successful_load;
   6.461 ++				break;
   6.462 ++#endif
   6.463 ++
   6.464 ++#ifdef CONFIG_RD_LZMA
   6.465 ++			case 2:
   6.466 ++				if (crd_load_lzma(in_fd, out_fd) == 0)
   6.467 ++					goto successful_load;
   6.468 ++				break;
   6.469 ++#endif
   6.470 ++
   6.471 ++			default:
   6.472 ++				break;
   6.473 ++		}
   6.474 + #else
   6.475 + 		printk(KERN_NOTICE
   6.476 + 		       "RAMDISK: Kernel does not support compressed "
   6.477 +@@ -269,6 +344,7 @@ int __init rd_load_disk(int n)
   6.478 + 
   6.479 + #ifdef BUILD_CRAMDISK
   6.480 + 
   6.481 ++#ifdef CONFIG_RD_GZIP
   6.482 + /*
   6.483 +  * gzip declarations
   6.484 +  */
   6.485 +@@ -296,8 +372,11 @@ static unsigned outcnt;  /* bytes in out
   6.486 + static int exit_code;
   6.487 + static int unzip_error;
   6.488 + static long bytes_out;
   6.489 ++#endif
   6.490 ++
   6.491 + static int crd_infd, crd_outfd;
   6.492 + 
   6.493 ++#ifdef CONFIG_RD_GZIP
   6.494 + #define get_byte()  (inptr < insize ? inbuf[inptr++] : fill_inbuf())
   6.495 + 		
   6.496 + /* Diagnostic functions (stubbed out) */
   6.497 +@@ -359,7 +438,22 @@ static int __init fill_inbuf(void)
   6.498 + 
   6.499 + 	return inbuf[0];
   6.500 + }
   6.501 ++#endif
   6.502 + 
   6.503 ++#if (defined CONFIG_RD_BZIP2 || defined CONFIG_RD_LZMA)
   6.504 ++static int __init compr_fill(void *buf, unsigned int len)
   6.505 ++{
   6.506 ++	int r = sys_read(crd_infd, buf, len);
   6.507 ++	if(r < 0) {
   6.508 ++		printk(KERN_ERR "RAMDISK: error while reading compressed data");
   6.509 ++	} else if(r == 0) {
   6.510 ++		printk(KERN_ERR "RAMDISK: EOF while reading compressed data");
   6.511 ++	}
   6.512 ++	return r;
   6.513 ++}
   6.514 ++#endif
   6.515 ++
   6.516 ++#ifdef CONFIG_RD_GZIP
   6.517 + /* ===========================================================================
   6.518 +  * Write the output window window[0..outcnt-1] and update crc and bytes_out.
   6.519 +  * (Used for the decompressed data only.)
   6.520 +@@ -385,7 +479,24 @@ static void __init flush_window(void)
   6.521 +     bytes_out += (ulg)outcnt;
   6.522 +     outcnt = 0;
   6.523 + }
   6.524 ++#endif
   6.525 + 
   6.526 ++#if (defined CONFIG_RD_BZIP2 || defined CONFIG_RD_LZMA)
   6.527 ++static int __init compr_flush(void *window, unsigned int outcnt) {
   6.528 ++	static int progressDots=0;
   6.529 ++	int written = sys_write(crd_outfd, window, outcnt);
   6.530 ++	if (written != outcnt) {
   6.531 ++		printk(KERN_ERR "RAMDISK: incomplete write (%d != %d)\n",
   6.532 ++		       written, outcnt);
   6.533 ++	}
   6.534 ++	progressDots = (progressDots+1)%10;
   6.535 ++	if(!progressDots)
   6.536 ++		printk(".");
   6.537 ++	return outcnt;
   6.538 ++}
   6.539 ++#endif
   6.540 ++
   6.541 ++#ifdef CONFIG_RD_GZIP
   6.542 + static void __init error(char *x)
   6.543 + {
   6.544 + 	printk(KERN_ERR "%s\n", x);
   6.545 +@@ -425,5 +536,43 @@ static int __init crd_load(int in_fd, in
   6.546 + 	kfree(window);
   6.547 + 	return result;
   6.548 + }
   6.549 ++#endif
   6.550 ++
   6.551 ++#if (defined CONFIG_RD_BZIP2 || defined CONFIG_RD_LZMA)
   6.552 ++static int __init crd_load_compr(int in_fd, int out_fd, int size,
   6.553 ++				 int (*deco)(char *,int,
   6.554 ++					     int(*fill)(void*,unsigned int),
   6.555 ++					     int(*flush)(void*,unsigned int),
   6.556 ++					     int *))
   6.557 ++{
   6.558 ++	int result;
   6.559 ++	char *inbuf = kmalloc(size, GFP_KERNEL);
   6.560 ++	crd_infd = in_fd;
   6.561 ++	crd_outfd = out_fd;
   6.562 ++	if (inbuf == 0) {
   6.563 ++		printk(KERN_ERR "RAMDISK: Couldn't allocate decompression buffer\n");
   6.564 ++		return -1;
   6.565 ++	}
   6.566 ++	result=deco(inbuf, 0, compr_fill, compr_flush, NULL);
   6.567 ++	kfree(inbuf);
   6.568 ++	printk("\n");
   6.569 ++	return result;
   6.570 ++}
   6.571 ++#endif
   6.572 ++
   6.573 ++#ifdef CONFIG_RD_BZIP2
   6.574 ++static int __init crd_load_bzip2(int in_fd, int out_fd)
   6.575 ++{
   6.576 ++	return crd_load_compr(in_fd, out_fd, BZIP2_IOBUF_SIZE, bunzip2);
   6.577 ++}
   6.578 ++#endif
   6.579 ++
   6.580 ++#ifdef CONFIG_RD_LZMA
   6.581 ++static int __init crd_load_lzma(int in_fd, int out_fd)
   6.582 ++{
   6.583 ++	return crd_load_compr(in_fd, out_fd, LZMA_IOBUF_SIZE, unlzma);
   6.584 ++}
   6.585 ++
   6.586 ++#endif
   6.587 + 
   6.588 + #endif  /* BUILD_CRAMDISK */
   6.589 +
   6.590 +--- linux-2.6.22.9/init/initramfs.c
   6.591 ++++ linux-2.6.22.9/init/initramfs.c
   6.592 +@@ -7,6 +7,15 @@
   6.593 + #include <linux/string.h>
   6.594 + #include <linux/syscalls.h>
   6.595 + 
   6.596 ++/* We need to enable RD_GZIP unconditionnally, as the built-in
   6.597 ++ * initramfs is gzip-compressed, alas!
   6.598 ++ * We can only wonder why, though, as the whole kernel (which contains
   6.599 ++ * built-in initramfs) is gzip (or bzip) compressed anyways afterwards...
   6.600 ++ */
   6.601 ++#ifndef CONFIG_RD_GZIP
   6.602 ++#define CONFIG_RD_GZIP
   6.603 ++#endif
   6.604 ++
   6.605 + static __initdata char *message;
   6.606 + static void __init error(char *x)
   6.607 + {
   6.608 +@@ -347,11 +356,13 @@ static int __init write_buffer(char *buf
   6.609 + 	return len - count;
   6.610 + }
   6.611 + 
   6.612 +-static void __init flush_buffer(char *buf, unsigned len)
   6.613 ++
   6.614 ++static int __init flush_buffer(char *buf, unsigned len)
   6.615 + {
   6.616 + 	int written;
   6.617 ++	int origLen = len;
   6.618 + 	if (message)
   6.619 +-		return;
   6.620 ++		return -1;
   6.621 + 	while ((written = write_buffer(buf, len)) < len && !message) {
   6.622 + 		char c = buf[written];
   6.623 + 		if (c == '0') {
   6.624 +@@ -365,8 +376,24 @@ static void __init flush_buffer(char *bu
   6.625 + 		} else
   6.626 + 			error("junk in compressed archive");
   6.627 + 	}
   6.628 ++	return origLen;
   6.629 + }
   6.630 + 
   6.631 ++#ifdef CONFIG_RD_BZIP2
   6.632 ++#include <linux/decompress_bunzip2.h>
   6.633 ++#undef STATIC
   6.634 ++
   6.635 ++#endif
   6.636 ++
   6.637 ++#ifdef CONFIG_RD_LZMA
   6.638 ++#include <linux/decompress_unlzma.h>
   6.639 ++#undef STATIC
   6.640 ++
   6.641 ++#endif
   6.642 ++
   6.643 ++static unsigned inptr;   /* index of next byte to be processed in inbuf */
   6.644 ++
   6.645 ++#ifdef CONFIG_RD_GZIP
   6.646 + /*
   6.647 +  * gzip declarations
   6.648 +  */
   6.649 +@@ -388,7 +415,6 @@ static uch *inbuf;
   6.650 + static uch *window;
   6.651 + 
   6.652 + static unsigned insize;  /* valid bytes in inbuf */
   6.653 +-static unsigned inptr;   /* index of next byte to be processed in inbuf */
   6.654 + static unsigned outcnt;  /* bytes in output buffer */
   6.655 + static long bytes_out;
   6.656 + 
   6.657 +@@ -440,6 +466,7 @@ static void __init flush_window(void)
   6.658 + 	bytes_out += (ulg)outcnt;
   6.659 + 	outcnt = 0;
   6.660 + }
   6.661 ++#endif
   6.662 + 
   6.663 + static char * __init unpack_to_rootfs(char *buf, unsigned len, int check_only)
   6.664 + {
   6.665 +@@ -448,9 +475,11 @@ static char * __init unpack_to_rootfs(ch
   6.666 + 	header_buf = malloc(110);
   6.667 + 	symlink_buf = malloc(PATH_MAX + N_ALIGN(PATH_MAX) + 1);
   6.668 + 	name_buf = malloc(N_ALIGN(PATH_MAX));
   6.669 ++#ifdef CONFIG_RD_GZIP
   6.670 + 	window = malloc(WSIZE);
   6.671 + 	if (!window || !header_buf || !symlink_buf || !name_buf)
   6.672 + 		panic("can't allocate buffers");
   6.673 ++#endif
   6.674 + 	state = Start;
   6.675 + 	this_header = 0;
   6.676 + 	message = NULL;
   6.677 +@@ -470,6 +499,7 @@ static char * __init unpack_to_rootfs(ch
   6.678 + 			continue;
   6.679 + 		}
   6.680 + 		this_header = 0;
   6.681 ++#ifdef CONFIG_RD_GZIP
   6.682 + 		insize = len;
   6.683 + 		inbuf = buf;
   6.684 + 		inptr = 0;
   6.685 +@@ -477,14 +507,38 @@ static char * __init unpack_to_rootfs(ch
   6.686 + 		bytes_out = 0;
   6.687 + 		crc = (ulg)0xffffffffL; /* shift register contents */
   6.688 + 		makecrc();
   6.689 +-		gunzip();
   6.690 ++		if(!gunzip() && message == NULL)
   6.691 ++			goto ok;
   6.692 ++#endif
   6.693 ++
   6.694 ++#ifdef CONFIG_RD_BZIP2
   6.695 ++		message = NULL; /* Zero out message, or else cpio will
   6.696 ++				   think an error has already occured */
   6.697 ++		if(!bunzip2(buf, len, NULL, flush_buffer, &inptr) < 0 &&
   6.698 ++		   message == NULL) {
   6.699 ++			goto ok;
   6.700 ++		}
   6.701 ++#endif
   6.702 ++
   6.703 ++#ifdef CONFIG_RD_LZMA
   6.704 ++		message = NULL; /* Zero out message, or else cpio will
   6.705 ++				   think an error has already occured */
   6.706 ++		if(!unlzma(buf, len, NULL, flush_buffer, &inptr) < 0 &&
   6.707 ++		   message == NULL) {
   6.708 ++			goto ok;
   6.709 ++		}
   6.710 ++#endif
   6.711 ++    ok:
   6.712 ++
   6.713 + 		if (state != Reset)
   6.714 +-			error("junk in gzipped archive");
   6.715 ++			error("junk in compressed archive");
   6.716 + 		this_header = saved_offset + inptr;
   6.717 + 		buf += inptr;
   6.718 + 		len -= inptr;
   6.719 + 	}
   6.720 ++#ifdef CONFIG_RD_GZIP
   6.721 + 	free(window);
   6.722 ++#endif
   6.723 + 	free(name_buf);
   6.724 + 	free(symlink_buf);
   6.725 + 	free(header_buf);
   6.726 +
   6.727 +--- linux-2.6.22.9/init/Kconfig
   6.728 ++++ linux-2.6.22.9/init/Kconfig
   6.729 +@@ -95,6 +95,56 @@
   6.730 + 
   6.731 + 	  which is done within the script "scripts/setlocalversion".)
   6.732 + 
   6.733 ++choice
   6.734 ++        prompt "Kernel compression mode"
   6.735 ++        default KERNEL_GZIP
   6.736 ++        help
   6.737 ++	  The linux kernel is a kind of self-extracting executable.
   6.738 ++	  Several compression algorithms are available, which differ
   6.739 ++	  in efficiency, compression and decompression speed.
   6.740 ++	  Compression speed is only relevant when building a kernel.
   6.741 ++	  Decompression speed is relevant at each boot.
   6.742 ++
   6.743 ++	  If you have any problems with bzip2 or lzma compressed
   6.744 ++	  kernels, mail me (Alain Knaff) <alain@knaff.lu>. (An older
   6.745 ++	  version of this functionality (bzip2 only), for 2.4, was
   6.746 ++	  supplied by Christian Ludwig)
   6.747 ++
   6.748 ++	  High compression options are mostly useful for users, who
   6.749 ++	  are low on disk space (embedded systems), but for whom ram
   6.750 ++	  size matters less.
   6.751 ++
   6.752 ++	  If in doubt, select 'gzip'
   6.753 ++
   6.754 ++config KERNEL_GZIP
   6.755 ++       bool "Gzip"
   6.756 ++       help
   6.757 ++         The old and tries gzip compression. Its compression ratio is
   6.758 ++	 the poorest among the 3 choices; however its speed (both
   6.759 ++	 compression and decompression) is the fastest.
   6.760 ++
   6.761 ++config KERNEL_BZIP2
   6.762 ++	bool "Bzip2"
   6.763 ++	help
   6.764 ++	  Its compression ratio and speed is intermediate.
   6.765 ++	  Decompression speed is slowest among the 3.
   6.766 ++	  The kernel size is about 10 per cent smaller with bzip2,
   6.767 ++	  in comparison to gzip.
   6.768 ++	  Bzip2 uses a large amount of memory. For modern kernels
   6.769 ++	  you will need at least 8MB RAM or more for booting.
   6.770 ++
   6.771 ++config KERNEL_LZMA
   6.772 ++       bool "LZMA"
   6.773 ++       help
   6.774 ++         The most recent compression algorithm.
   6.775 ++	 Its ratio is best, decompression speed is between the other
   6.776 ++	 2. Compression is slowest.
   6.777 ++	 The kernel size is about 33 per cent smaller with lzma,
   6.778 ++	 in comparison to gzip.
   6.779 ++
   6.780 ++endchoice
   6.781 ++
   6.782 ++
   6.783 + config SWAP
   6.784 + 	bool "Support for paging of anonymous memory (swap)"
   6.785 + 	depends on MMU && BLOCK
   6.786 +
   6.787 +--- linux-2.6.22.9/lib/decompress_bunzip2.c
   6.788 ++++ linux-2.6.22.9/lib/decompress_bunzip2.c
   6.789 +@@ -0,0 +1,645 @@
   6.790 ++/* vi: set sw=4 ts=4: */
   6.791 ++/*	Small bzip2 deflate implementation, by Rob Landley (rob@landley.net).
   6.792 ++
   6.793 ++	Based on bzip2 decompression code by Julian R Seward (jseward@acm.org),
   6.794 ++	which also acknowledges contributions by Mike Burrows, David Wheeler,
   6.795 ++	Peter Fenwick, Alistair Moffat, Radford Neal, Ian H. Witten,
   6.796 ++	Robert Sedgewick, and Jon L. Bentley.
   6.797 ++
   6.798 ++	This code is licensed under the LGPLv2:
   6.799 ++		LGPL (http://www.gnu.org/copyleft/lgpl.html
   6.800 ++*/
   6.801 ++
   6.802 ++/*
   6.803 ++	Size and speed optimizations by Manuel Novoa III  (mjn3@codepoet.org).
   6.804 ++
   6.805 ++	More efficient reading of Huffman codes, a streamlined read_bunzip()
   6.806 ++	function, and various other tweaks.  In (limited) tests, approximately
   6.807 ++	20% faster than bzcat on x86 and about 10% faster on arm.
   6.808 ++
   6.809 ++	Note that about 2/3 of the time is spent in read_unzip() reversing
   6.810 ++	the Burrows-Wheeler transformation.  Much of that time is delay
   6.811 ++	resulting from cache misses.
   6.812 ++
   6.813 ++	I would ask that anyone benefiting from this work, especially those
   6.814 ++	using it in commercial products, consider making a donation to my local
   6.815 ++	non-profit hospice organization in the name of the woman I loved, who
   6.816 ++	passed away Feb. 12, 2003.
   6.817 ++
   6.818 ++		In memory of Toni W. Hagan
   6.819 ++
   6.820 ++		Hospice of Acadiana, Inc.
   6.821 ++		2600 Johnston St., Suite 200
   6.822 ++		Lafayette, LA 70503-3240
   6.823 ++
   6.824 ++		Phone (337) 232-1234 or 1-800-738-2226
   6.825 ++		Fax   (337) 232-1297
   6.826 ++
   6.827 ++		http://www.hospiceacadiana.com/
   6.828 ++
   6.829 ++	Manuel
   6.830 ++ */
   6.831 ++
   6.832 ++/*
   6.833 ++	Made it fit for running in Linux Kernel by Alain Knaff (alain@knaff.lu)
   6.834 ++*/
   6.835 ++
   6.836 ++
   6.837 ++#ifndef STATIC
   6.838 ++
   6.839 ++#include <linux/kernel.h>
   6.840 ++#include <linux/fs.h>
   6.841 ++#include <linux/string.h>
   6.842 ++
   6.843 ++#ifdef TEST
   6.844 ++#include "test.h"
   6.845 ++#else
   6.846 ++#include <linux/vmalloc.h>
   6.847 ++#endif
   6.848 ++
   6.849 ++static void __init *large_malloc(size_t size)
   6.850 ++{
   6.851 ++	return vmalloc(size);
   6.852 ++}
   6.853 ++
   6.854 ++static void __init large_free(void *where)
   6.855 ++{
   6.856 ++	vfree(where);
   6.857 ++}
   6.858 ++
   6.859 ++#ifndef TEST
   6.860 ++static void __init *malloc(size_t size)
   6.861 ++{
   6.862 ++	return kmalloc(size, GFP_KERNEL);
   6.863 ++}
   6.864 ++
   6.865 ++static void __init free(void *where)
   6.866 ++{
   6.867 ++	kfree(where);
   6.868 ++}
   6.869 ++
   6.870 ++static void __init error(char *x)
   6.871 ++{
   6.872 ++	printk(KERN_ERR "%s\n", x);
   6.873 ++}
   6.874 ++#endif
   6.875 ++
   6.876 ++#define STATIC /**/
   6.877 ++
   6.878 ++#endif
   6.879 ++
   6.880 ++#include <linux/decompress_bunzip2.h>
   6.881 ++
   6.882 ++
   6.883 ++/* Constants for Huffman coding */
   6.884 ++#define MAX_GROUPS			6
   6.885 ++#define GROUP_SIZE   		50		/* 64 would have been more efficient */
   6.886 ++#define MAX_HUFCODE_BITS 	20		/* Longest Huffman code allowed */
   6.887 ++#define MAX_SYMBOLS 		258		/* 256 literals + RUNA + RUNB */
   6.888 ++#define SYMBOL_RUNA			0
   6.889 ++#define SYMBOL_RUNB			1
   6.890 ++
   6.891 ++/* Status return values */
   6.892 ++#define RETVAL_OK						0
   6.893 ++#define RETVAL_LAST_BLOCK				(-1)
   6.894 ++#define RETVAL_NOT_BZIP_DATA			(-2)
   6.895 ++#define RETVAL_UNEXPECTED_INPUT_EOF		(-3)
   6.896 ++#define RETVAL_UNEXPECTED_OUTPUT_EOF	(-4)
   6.897 ++#define RETVAL_DATA_ERROR				(-5)
   6.898 ++#define RETVAL_OUT_OF_MEMORY			(-6)
   6.899 ++#define RETVAL_OBSOLETE_INPUT			(-7)
   6.900 ++
   6.901 ++
   6.902 ++/* This is what we know about each Huffman coding group */
   6.903 ++struct group_data {
   6.904 ++	/* We have an extra slot at the end of limit[] for a sentinal value. */
   6.905 ++	int limit[MAX_HUFCODE_BITS+1],base[MAX_HUFCODE_BITS],permute[MAX_SYMBOLS];
   6.906 ++	int minLen, maxLen;
   6.907 ++};
   6.908 ++
   6.909 ++/* Structure holding all the housekeeping data, including IO buffers and
   6.910 ++   memory that persists between calls to bunzip */
   6.911 ++typedef struct {
   6.912 ++	/* State for interrupting output loop */
   6.913 ++	int writeCopies,writePos,writeRunCountdown,writeCount,writeCurrent;
   6.914 ++	/* I/O tracking data (file handles, buffers, positions, etc.) */
   6.915 ++	int (*fill)(void*,unsigned int);
   6.916 ++	int inbufCount,inbufPos /*,outbufPos*/;
   6.917 ++	unsigned char *inbuf /*,*outbuf*/;
   6.918 ++	unsigned int inbufBitCount, inbufBits;
   6.919 ++	/* The CRC values stored in the block header and calculated from the data */
   6.920 ++	unsigned int crc32Table[256],headerCRC, totalCRC, writeCRC;
   6.921 ++	/* Intermediate buffer and its size (in bytes) */
   6.922 ++	unsigned int *dbuf, dbufSize;
   6.923 ++	/* These things are a bit too big to go on the stack */
   6.924 ++	unsigned char selectors[32768];			/* nSelectors=15 bits */
   6.925 ++	struct group_data groups[MAX_GROUPS];	/* Huffman coding tables */
   6.926 ++	int io_error;			/* non-zero if we have IO error */
   6.927 ++} bunzip_data;
   6.928 ++	
   6.929 ++
   6.930 ++/* Return the next nnn bits of input.  All reads from the compressed input
   6.931 ++   are done through this function.  All reads are big endian */
   6.932 ++static unsigned int get_bits(bunzip_data *bd, char bits_wanted)
   6.933 ++{
   6.934 ++	unsigned int bits=0;
   6.935 ++
   6.936 ++	/* If we need to get more data from the byte buffer, do so.  (Loop getting
   6.937 ++	   one byte at a time to enforce endianness and avoid unaligned access.) */
   6.938 ++	while (bd->inbufBitCount<bits_wanted) {
   6.939 ++		/* If we need to read more data from file into byte buffer, do so */
   6.940 ++		if(bd->inbufPos==bd->inbufCount) {
   6.941 ++			if(bd->io_error)
   6.942 ++				return 0;
   6.943 ++			if((bd->inbufCount = bd->fill(bd->inbuf, BZIP2_IOBUF_SIZE)) <= 0) {
   6.944 ++				bd->io_error=RETVAL_UNEXPECTED_INPUT_EOF;
   6.945 ++				return 0;
   6.946 ++			}
   6.947 ++			bd->inbufPos=0;
   6.948 ++		}
   6.949 ++		/* Avoid 32-bit overflow (dump bit buffer to top of output) */
   6.950 ++		if(bd->inbufBitCount>=24) {
   6.951 ++			bits=bd->inbufBits&((1<<bd->inbufBitCount)-1);
   6.952 ++			bits_wanted-=bd->inbufBitCount;
   6.953 ++			bits<<=bits_wanted;
   6.954 ++			bd->inbufBitCount=0;
   6.955 ++		}
   6.956 ++		/* Grab next 8 bits of input from buffer. */
   6.957 ++		bd->inbufBits=(bd->inbufBits<<8)|bd->inbuf[bd->inbufPos++];
   6.958 ++		bd->inbufBitCount+=8;
   6.959 ++	}
   6.960 ++	/* Calculate result */
   6.961 ++	bd->inbufBitCount-=bits_wanted;
   6.962 ++	bits|=(bd->inbufBits>>bd->inbufBitCount)&((1<<bits_wanted)-1);
   6.963 ++
   6.964 ++	return bits;
   6.965 ++}
   6.966 ++
   6.967 ++/* Unpacks the next block and sets up for the inverse burrows-wheeler step. */
   6.968 ++
   6.969 ++static int get_next_block(bunzip_data *bd)
   6.970 ++{
   6.971 ++	struct group_data *hufGroup=NULL;
   6.972 ++	int *base=NULL;
   6.973 ++	int *limit=NULL;
   6.974 ++	int dbufCount,nextSym,dbufSize,groupCount,selector,
   6.975 ++		i,j,k,t,runPos,symCount,symTotal,nSelectors,byteCount[256];
   6.976 ++	unsigned char uc, symToByte[256], mtfSymbol[256], *selectors;
   6.977 ++	unsigned int *dbuf,origPtr;
   6.978 ++
   6.979 ++	dbuf=bd->dbuf;
   6.980 ++	dbufSize=bd->dbufSize;
   6.981 ++	selectors=bd->selectors;
   6.982 ++
   6.983 ++	/* Read in header signature and CRC, then validate signature.
   6.984 ++	   (last block signature means CRC is for whole file, return now) */
   6.985 ++	i = get_bits(bd,24);
   6.986 ++	j = get_bits(bd,24);
   6.987 ++	bd->headerCRC=get_bits(bd,32);
   6.988 ++	if ((i == 0x177245) && (j == 0x385090)) return RETVAL_LAST_BLOCK;
   6.989 ++	if ((i != 0x314159) || (j != 0x265359)) return RETVAL_NOT_BZIP_DATA;
   6.990 ++	/* We can add support for blockRandomised if anybody complains.  There was
   6.991 ++	   some code for this in busybox 1.0.0-pre3, but nobody ever noticed that
   6.992 ++	   it didn't actually work. */
   6.993 ++	if(get_bits(bd,1)) return RETVAL_OBSOLETE_INPUT;
   6.994 ++	if((origPtr=get_bits(bd,24)) > dbufSize) return RETVAL_DATA_ERROR;
   6.995 ++	/* mapping table: if some byte values are never used (encoding things
   6.996 ++	   like ascii text), the compression code removes the gaps to have fewer
   6.997 ++	   symbols to deal with, and writes a sparse bitfield indicating which
   6.998 ++	   values were present.  We make a translation table to convert the symbols
   6.999 ++	   back to the corresponding bytes. */
  6.1000 ++	t=get_bits(bd, 16);
  6.1001 ++	symTotal=0;
  6.1002 ++	for (i=0;i<16;i++) {
  6.1003 ++		if(t&(1<<(15-i))) {
  6.1004 ++			k=get_bits(bd,16);
  6.1005 ++			for(j=0;j<16;j++)
  6.1006 ++				if(k&(1<<(15-j))) symToByte[symTotal++]=(16*i)+j;
  6.1007 ++		}
  6.1008 ++	}
  6.1009 ++	/* How many different Huffman coding groups does this block use? */
  6.1010 ++	groupCount=get_bits(bd,3);
  6.1011 ++	if (groupCount<2 || groupCount>MAX_GROUPS) return RETVAL_DATA_ERROR;
  6.1012 ++	/* nSelectors: Every GROUP_SIZE many symbols we select a new Huffman coding
  6.1013 ++	   group.  Read in the group selector list, which is stored as MTF encoded
  6.1014 ++	   bit runs.  (MTF=Move To Front, as each value is used it's moved to the
  6.1015 ++	   start of the list.) */
  6.1016 ++	if(!(nSelectors=get_bits(bd, 15))) return RETVAL_DATA_ERROR;
  6.1017 ++	for(i=0; i<groupCount; i++) mtfSymbol[i] = i;
  6.1018 ++	for(i=0; i<nSelectors; i++) {
  6.1019 ++		/* Get next value */
  6.1020 ++		for(j=0;get_bits(bd,1);j++) if (j>=groupCount) return RETVAL_DATA_ERROR;
  6.1021 ++		/* Decode MTF to get the next selector */
  6.1022 ++		uc = mtfSymbol[j];
  6.1023 ++		for(;j;j--) mtfSymbol[j] = mtfSymbol[j-1];
  6.1024 ++		mtfSymbol[0]=selectors[i]=uc;
  6.1025 ++	}
  6.1026 ++	/* Read the Huffman coding tables for each group, which code for symTotal
  6.1027 ++	   literal symbols, plus two run symbols (RUNA, RUNB) */
  6.1028 ++	symCount=symTotal+2;
  6.1029 ++	for (j=0; j<groupCount; j++) {
  6.1030 ++		unsigned char length[MAX_SYMBOLS],temp[MAX_HUFCODE_BITS+1];
  6.1031 ++		int	minLen,	maxLen, pp;
  6.1032 ++		/* Read Huffman code lengths for each symbol.  They're stored in
  6.1033 ++		   a way similar to mtf; record a starting value for the first symbol,
  6.1034 ++		   and an offset from the previous value for everys symbol after that.
  6.1035 ++		   (Subtracting 1 before the loop and then adding it back at the end is
  6.1036 ++		   an optimization that makes the test inside the loop simpler: symbol
  6.1037 ++		   length 0 becomes negative, so an unsigned inequality catches it.) */
  6.1038 ++		t=get_bits(bd, 5)-1;
  6.1039 ++		for (i = 0; i < symCount; i++) {
  6.1040 ++			for(;;) {
  6.1041 ++				if (((unsigned)t) > (MAX_HUFCODE_BITS-1))
  6.1042 ++					return RETVAL_DATA_ERROR;
  6.1043 ++				/* If first bit is 0, stop.  Else second bit indicates whether
  6.1044 ++				   to increment or decrement the value.  Optimization: grab 2
  6.1045 ++				   bits and unget the second if the first was 0. */
  6.1046 ++				k = get_bits(bd,2);
  6.1047 ++				if (k < 2) {
  6.1048 ++					bd->inbufBitCount++;
  6.1049 ++					break;
  6.1050 ++				}
  6.1051 ++				/* Add one if second bit 1, else subtract 1.  Avoids if/else */
  6.1052 ++				t+=(((k+1)&2)-1);
  6.1053 ++			}
  6.1054 ++			/* Correct for the initial -1, to get the final symbol length */
  6.1055 ++			length[i]=t+1;
  6.1056 ++		}
  6.1057 ++		/* Find largest and smallest lengths in this group */
  6.1058 ++		minLen=maxLen=length[0];
  6.1059 ++		for(i = 1; i < symCount; i++) {
  6.1060 ++			if(length[i] > maxLen) maxLen = length[i];
  6.1061 ++			else if(length[i] < minLen) minLen = length[i];
  6.1062 ++		}
  6.1063 ++		/* Calculate permute[], base[], and limit[] tables from length[].
  6.1064 ++		 *
  6.1065 ++		 * permute[] is the lookup table for converting Huffman coded symbols
  6.1066 ++		 * into decoded symbols.  base[] is the amount to subtract from the
  6.1067 ++		 * value of a Huffman symbol of a given length when using permute[].
  6.1068 ++		 *
  6.1069 ++		 * limit[] indicates the largest numerical value a symbol with a given
  6.1070 ++		 * number of bits can have.  This is how the Huffman codes can vary in
  6.1071 ++		 * length: each code with a value>limit[length] needs another bit.
  6.1072 ++		 */
  6.1073 ++		hufGroup=bd->groups+j;
  6.1074 ++		hufGroup->minLen = minLen;
  6.1075 ++		hufGroup->maxLen = maxLen;
  6.1076 ++		/* Note that minLen can't be smaller than 1, so we adjust the base
  6.1077 ++		   and limit array pointers so we're not always wasting the first
  6.1078 ++		   entry.  We do this again when using them (during symbol decoding).*/
  6.1079 ++		base=hufGroup->base-1;
  6.1080 ++		limit=hufGroup->limit-1;
  6.1081 ++		/* Calculate permute[].  Concurently, initialize temp[] and limit[]. */
  6.1082 ++		pp=0;
  6.1083 ++		for(i=minLen;i<=maxLen;i++) {
  6.1084 ++			temp[i]=limit[i]=0;
  6.1085 ++			for(t=0;t<symCount;t++)
  6.1086 ++				if(length[t]==i) hufGroup->permute[pp++] = t;
  6.1087 ++		}
  6.1088 ++		/* Count symbols coded for at each bit length */
  6.1089 ++		for (i=0;i<symCount;i++) temp[length[i]]++;
  6.1090 ++		/* Calculate limit[] (the largest symbol-coding value at each bit
  6.1091 ++		 * length, which is (previous limit<<1)+symbols at this level), and
  6.1092 ++		 * base[] (number of symbols to ignore at each bit length, which is
  6.1093 ++		 * limit minus the cumulative count of symbols coded for already). */
  6.1094 ++		pp=t=0;
  6.1095 ++		for (i=minLen; i<maxLen; i++) {
  6.1096 ++			pp+=temp[i];
  6.1097 ++			/* We read the largest possible symbol size and then unget bits
  6.1098 ++			   after determining how many we need, and those extra bits could
  6.1099 ++			   be set to anything.  (They're noise from future symbols.)  At
  6.1100 ++			   each level we're really only interested in the first few bits,
  6.1101 ++			   so here we set all the trailing to-be-ignored bits to 1 so they
  6.1102 ++			   don't affect the value>limit[length] comparison. */
  6.1103 ++			limit[i]= (pp << (maxLen - i)) - 1;
  6.1104 ++			pp<<=1;
  6.1105 ++			base[i+1]=pp-(t+=temp[i]);
  6.1106 ++		}
  6.1107 ++		limit[maxLen+1] = INT_MAX; /* Sentinal value for reading next sym. */
  6.1108 ++		limit[maxLen]=pp+temp[maxLen]-1;
  6.1109 ++		base[minLen]=0;
  6.1110 ++	}
  6.1111 ++	/* We've finished reading and digesting the block header.  Now read this
  6.1112 ++	   block's Huffman coded symbols from the file and undo the Huffman coding
  6.1113 ++	   and run length encoding, saving the result into dbuf[dbufCount++]=uc */
  6.1114 ++
  6.1115 ++	/* Initialize symbol occurrence counters and symbol Move To Front table */
  6.1116 ++	for(i=0;i<256;i++) {
  6.1117 ++		byteCount[i] = 0;
  6.1118 ++		mtfSymbol[i]=(unsigned char)i;
  6.1119 ++	}
  6.1120 ++	/* Loop through compressed symbols. */
  6.1121 ++	runPos=dbufCount=symCount=selector=0;
  6.1122 ++	for(;;) {
  6.1123 ++		/* Determine which Huffman coding group to use. */
  6.1124 ++		if(!(symCount--)) {
  6.1125 ++			symCount=GROUP_SIZE-1;
  6.1126 ++			if(selector>=nSelectors) return RETVAL_DATA_ERROR;
  6.1127 ++			hufGroup=bd->groups+selectors[selector++];
  6.1128 ++			base=hufGroup->base-1;
  6.1129 ++			limit=hufGroup->limit-1;
  6.1130 ++		}
  6.1131 ++		/* Read next Huffman-coded symbol. */
  6.1132 ++		/* Note: It is far cheaper to read maxLen bits and back up than it is
  6.1133 ++		   to read minLen bits and then an additional bit at a time, testing
  6.1134 ++		   as we go.  Because there is a trailing last block (with file CRC),
  6.1135 ++		   there is no danger of the overread causing an unexpected EOF for a
  6.1136 ++		   valid compressed file.  As a further optimization, we do the read
  6.1137 ++		   inline (falling back to a call to get_bits if the buffer runs
  6.1138 ++		   dry).  The following (up to got_huff_bits:) is equivalent to
  6.1139 ++		   j=get_bits(bd,hufGroup->maxLen);
  6.1140 ++		 */
  6.1141 ++		while (bd->inbufBitCount<hufGroup->maxLen) {
  6.1142 ++			if(bd->inbufPos==bd->inbufCount) {
  6.1143 ++				j = get_bits(bd,hufGroup->maxLen);
  6.1144 ++				goto got_huff_bits;
  6.1145 ++			}
  6.1146 ++			bd->inbufBits=(bd->inbufBits<<8)|bd->inbuf[bd->inbufPos++];
  6.1147 ++			bd->inbufBitCount+=8;
  6.1148 ++		};
  6.1149 ++		bd->inbufBitCount-=hufGroup->maxLen;
  6.1150 ++		j = (bd->inbufBits>>bd->inbufBitCount)&((1<<hufGroup->maxLen)-1);
  6.1151 ++got_huff_bits:
  6.1152 ++		/* Figure how how many bits are in next symbol and unget extras */
  6.1153 ++		i=hufGroup->minLen;
  6.1154 ++		while(j>limit[i]) ++i;
  6.1155 ++		bd->inbufBitCount += (hufGroup->maxLen - i);
  6.1156 ++		/* Huffman decode value to get nextSym (with bounds checking) */
  6.1157 ++		if ((i > hufGroup->maxLen)
  6.1158 ++			|| (((unsigned)(j=(j>>(hufGroup->maxLen-i))-base[i]))
  6.1159 ++				>= MAX_SYMBOLS))
  6.1160 ++			return RETVAL_DATA_ERROR;
  6.1161 ++		nextSym = hufGroup->permute[j];
  6.1162 ++		/* We have now decoded the symbol, which indicates either a new literal
  6.1163 ++		   byte, or a repeated run of the most recent literal byte.  First,
  6.1164 ++		   check if nextSym indicates a repeated run, and if so loop collecting
  6.1165 ++		   how many times to repeat the last literal. */
  6.1166 ++		if (((unsigned)nextSym) <= SYMBOL_RUNB) { /* RUNA or RUNB */
  6.1167 ++			/* If this is the start of a new run, zero out counter */
  6.1168 ++			if(!runPos) {
  6.1169 ++				runPos = 1;
  6.1170 ++				t = 0;
  6.1171 ++			}
  6.1172 ++			/* Neat trick that saves 1 symbol: instead of or-ing 0 or 1 at
  6.1173 ++			   each bit position, add 1 or 2 instead.  For example,
  6.1174 ++			   1011 is 1<<0 + 1<<1 + 2<<2.  1010 is 2<<0 + 2<<1 + 1<<2.
  6.1175 ++			   You can make any bit pattern that way using 1 less symbol than
  6.1176 ++			   the basic or 0/1 method (except all bits 0, which would use no
  6.1177 ++			   symbols, but a run of length 0 doesn't mean anything in this
  6.1178 ++			   context).  Thus space is saved. */
  6.1179 ++			t += (runPos << nextSym); /* +runPos if RUNA; +2*runPos if RUNB */
  6.1180 ++			runPos <<= 1;
  6.1181 ++			continue;
  6.1182 ++		}
  6.1183 ++		/* When we hit the first non-run symbol after a run, we now know
  6.1184 ++		   how many times to repeat the last literal, so append that many
  6.1185 ++		   copies to our buffer of decoded symbols (dbuf) now.  (The last
  6.1186 ++		   literal used is the one at the head of the mtfSymbol array.) */
  6.1187 ++		if(runPos) {
  6.1188 ++			runPos=0;
  6.1189 ++			if(dbufCount+t>=dbufSize) return RETVAL_DATA_ERROR;
  6.1190 ++
  6.1191 ++			uc = symToByte[mtfSymbol[0]];
  6.1192 ++			byteCount[uc] += t;
  6.1193 ++			while(t--) dbuf[dbufCount++]=uc;
  6.1194 ++		}
  6.1195 ++		/* Is this the terminating symbol? */
  6.1196 ++		if(nextSym>symTotal) break;
  6.1197 ++		/* At this point, nextSym indicates a new literal character.  Subtract
  6.1198 ++		   one to get the position in the MTF array at which this literal is
  6.1199 ++		   currently to be found.  (Note that the result can't be -1 or 0,
  6.1200 ++		   because 0 and 1 are RUNA and RUNB.  But another instance of the
  6.1201 ++		   first symbol in the mtf array, position 0, would have been handled
  6.1202 ++		   as part of a run above.  Therefore 1 unused mtf position minus
  6.1203 ++		   2 non-literal nextSym values equals -1.) */
  6.1204 ++		if(dbufCount>=dbufSize) return RETVAL_DATA_ERROR;
  6.1205 ++		i = nextSym - 1;
  6.1206 ++		uc = mtfSymbol[i];
  6.1207 ++		/* Adjust the MTF array.  Since we typically expect to move only a
  6.1208 ++		 * small number of symbols, and are bound by 256 in any case, using
  6.1209 ++		 * memmove here would typically be bigger and slower due to function
  6.1210 ++		 * call overhead and other assorted setup costs. */
  6.1211 ++		do {
  6.1212 ++			mtfSymbol[i] = mtfSymbol[i-1];
  6.1213 ++		} while (--i);
  6.1214 ++		mtfSymbol[0] = uc;
  6.1215 ++		uc=symToByte[uc];
  6.1216 ++		/* We have our literal byte.  Save it into dbuf. */
  6.1217 ++		byteCount[uc]++;
  6.1218 ++		dbuf[dbufCount++] = (unsigned int)uc;
  6.1219 ++	}
  6.1220 ++	/* At this point, we've read all the Huffman-coded symbols (and repeated
  6.1221 ++       runs) for this block from the input stream, and decoded them into the
  6.1222 ++	   intermediate buffer.  There are dbufCount many decoded bytes in dbuf[].
  6.1223 ++	   Now undo the Burrows-Wheeler transform on dbuf.
  6.1224 ++	   See http://dogma.net/markn/articles/bwt/bwt.htm
  6.1225 ++	 */
  6.1226 ++	/* Turn byteCount into cumulative occurrence counts of 0 to n-1. */
  6.1227 ++	j=0;
  6.1228 ++	for(i=0;i<256;i++) {
  6.1229 ++		k=j+byteCount[i];
  6.1230 ++		byteCount[i] = j;
  6.1231 ++		j=k;
  6.1232 ++	}
  6.1233 ++	/* Figure out what order dbuf would be in if we sorted it. */
  6.1234 ++	for (i=0;i<dbufCount;i++) {
  6.1235 ++		uc=(unsigned char)(dbuf[i] & 0xff);
  6.1236 ++		dbuf[byteCount[uc]] |= (i << 8);
  6.1237 ++		byteCount[uc]++;
  6.1238 ++	}
  6.1239 ++	/* Decode first byte by hand to initialize "previous" byte.  Note that it
  6.1240 ++	   doesn't get output, and if the first three characters are identical
  6.1241 ++	   it doesn't qualify as a run (hence writeRunCountdown=5). */
  6.1242 ++	if(dbufCount) {
  6.1243 ++		if(origPtr>=dbufCount) return RETVAL_DATA_ERROR;
  6.1244 ++		bd->writePos=dbuf[origPtr];
  6.1245 ++	    bd->writeCurrent=(unsigned char)(bd->writePos&0xff);
  6.1246 ++		bd->writePos>>=8;
  6.1247 ++		bd->writeRunCountdown=5;
  6.1248 ++	}
  6.1249 ++	bd->writeCount=dbufCount;
  6.1250 ++
  6.1251 ++	return RETVAL_OK;
  6.1252 ++}
  6.1253 ++
  6.1254 ++/* Undo burrows-wheeler transform on intermediate buffer to produce output.
  6.1255 ++   If start_bunzip was initialized with out_fd=-1, then up to len bytes of
  6.1256 ++   data are written to outbuf.  Return value is number of bytes written or
  6.1257 ++   error (all errors are negative numbers).  If out_fd!=-1, outbuf and len
  6.1258 ++   are ignored, data is written to out_fd and return is RETVAL_OK or error.
  6.1259 ++*/
  6.1260 ++
  6.1261 ++static int read_bunzip(bunzip_data *bd, char *outbuf, int len)
  6.1262 ++{
  6.1263 ++	const unsigned int *dbuf;
  6.1264 ++	int pos,xcurrent,previous,gotcount;
  6.1265 ++
  6.1266 ++	/* If last read was short due to end of file, return last block now */
  6.1267 ++	if(bd->writeCount<0) return bd->writeCount;
  6.1268 ++
  6.1269 ++	gotcount = 0;
  6.1270 ++	dbuf=bd->dbuf;
  6.1271 ++	pos=bd->writePos;
  6.1272 ++	xcurrent=bd->writeCurrent;
  6.1273 ++
  6.1274 ++	/* We will always have pending decoded data to write into the output
  6.1275 ++	   buffer unless this is the very first call (in which case we haven't
  6.1276 ++	   Huffman-decoded a block into the intermediate buffer yet). */
  6.1277 ++
  6.1278 ++	if (bd->writeCopies) {
  6.1279 ++		/* Inside the loop, writeCopies means extra copies (beyond 1) */
  6.1280 ++		--bd->writeCopies;
  6.1281 ++		/* Loop outputting bytes */
  6.1282 ++		for(;;) {
  6.1283 ++			/* If the output buffer is full, snapshot state and return */
  6.1284 ++			if(gotcount >= len) {
  6.1285 ++				bd->writePos=pos;
  6.1286 ++				bd->writeCurrent=xcurrent;
  6.1287 ++				bd->writeCopies++;
  6.1288 ++				return len;
  6.1289 ++			}
  6.1290 ++			/* Write next byte into output buffer, updating CRC */
  6.1291 ++			outbuf[gotcount++] = xcurrent;
  6.1292 ++			bd->writeCRC=(((bd->writeCRC)<<8)
  6.1293 ++						  ^bd->crc32Table[((bd->writeCRC)>>24)^xcurrent]);
  6.1294 ++			/* Loop now if we're outputting multiple copies of this byte */
  6.1295 ++			if (bd->writeCopies) {
  6.1296 ++				--bd->writeCopies;
  6.1297 ++				continue;
  6.1298 ++			}
  6.1299 ++decode_next_byte:
  6.1300 ++			if (!bd->writeCount--) break;
  6.1301 ++			/* Follow sequence vector to undo Burrows-Wheeler transform */
  6.1302 ++			previous=xcurrent;
  6.1303 ++			pos=dbuf[pos];
  6.1304 ++			xcurrent=pos&0xff;
  6.1305 ++			pos>>=8;
  6.1306 ++			/* After 3 consecutive copies of the same byte, the 4th is a repeat
  6.1307 ++			   count.  We count down from 4 instead
  6.1308 ++			 * of counting up because testing for non-zero is faster */
  6.1309 ++			if(--bd->writeRunCountdown) {
  6.1310 ++				if(xcurrent!=previous) bd->writeRunCountdown=4;
  6.1311 ++			} else {
  6.1312 ++				/* We have a repeated run, this byte indicates the count */
  6.1313 ++				bd->writeCopies=xcurrent;
  6.1314 ++				xcurrent=previous;
  6.1315 ++				bd->writeRunCountdown=5;
  6.1316 ++				/* Sometimes there are just 3 bytes (run length 0) */
  6.1317 ++				if(!bd->writeCopies) goto decode_next_byte;
  6.1318 ++				/* Subtract the 1 copy we'd output anyway to get extras */
  6.1319 ++				--bd->writeCopies;
  6.1320 ++			}
  6.1321 ++		}
  6.1322 ++		/* Decompression of this block completed successfully */
  6.1323 ++		bd->writeCRC=~bd->writeCRC;
  6.1324 ++		bd->totalCRC=((bd->totalCRC<<1) | (bd->totalCRC>>31)) ^ bd->writeCRC;
  6.1325 ++		/* If this block had a CRC error, force file level CRC error. */
  6.1326 ++		if(bd->writeCRC!=bd->headerCRC) {
  6.1327 ++			bd->totalCRC=bd->headerCRC+1;
  6.1328 ++			return RETVAL_LAST_BLOCK;
  6.1329 ++		}
  6.1330 ++	}
  6.1331 ++
  6.1332 ++	/* Refill the intermediate buffer by Huffman-decoding next block of input */
  6.1333 ++	/* (previous is just a convenient unused temp variable here) */
  6.1334 ++	previous=get_next_block(bd);
  6.1335 ++	if(previous) {
  6.1336 ++		bd->writeCount=previous;
  6.1337 ++		return (previous!=RETVAL_LAST_BLOCK) ? previous : gotcount;
  6.1338 ++	}
  6.1339 ++	bd->writeCRC=0xffffffffUL;
  6.1340 ++	pos=bd->writePos;
  6.1341 ++	xcurrent=bd->writeCurrent;
  6.1342 ++	goto decode_next_byte;
  6.1343 ++}
  6.1344 ++
  6.1345 ++static int nofill(void *buf,unsigned int len) {
  6.1346 ++	return -1;
  6.1347 ++}
  6.1348 ++
  6.1349 ++/* Allocate the structure, read file header.  If in_fd==-1, inbuf must contain
  6.1350 ++   a complete bunzip file (len bytes long).  If in_fd!=-1, inbuf and len are
  6.1351 ++   ignored, and data is read from file handle into temporary buffer. */
  6.1352 ++static int start_bunzip(bunzip_data **bdp, void *inbuf, int len,
  6.1353 ++			int (*fill)(void*,unsigned int))
  6.1354 ++{
  6.1355 ++	bunzip_data *bd;
  6.1356 ++	unsigned int i,j,c;
  6.1357 ++	const unsigned int BZh0=(((unsigned int)'B')<<24)+(((unsigned int)'Z')<<16)
  6.1358 ++							+(((unsigned int)'h')<<8)+(unsigned int)'0';
  6.1359 ++
  6.1360 ++	/* Figure out how much data to allocate */
  6.1361 ++	i=sizeof(bunzip_data);
  6.1362 ++
  6.1363 ++	/* Allocate bunzip_data.  Most fields initialize to zero. */
  6.1364 ++	bd=*bdp=malloc(i);
  6.1365 ++	memset(bd,0,sizeof(bunzip_data));
  6.1366 ++	/* Setup input buffer */
  6.1367 ++	bd->inbuf=inbuf;
  6.1368 ++	bd->inbufCount=len;
  6.1369 ++	if(fill != NULL)
  6.1370 ++		bd->fill=fill;
  6.1371 ++	else
  6.1372 ++		bd->fill=nofill;
  6.1373 ++
  6.1374 ++	/* Init the CRC32 table (big endian) */
  6.1375 ++	for(i=0;i<256;i++) {
  6.1376 ++		c=i<<24;
  6.1377 ++		for(j=8;j;j--)
  6.1378 ++			c=c&0x80000000 ? (c<<1)^0x04c11db7 : (c<<1);
  6.1379 ++		bd->crc32Table[i]=c;
  6.1380 ++	}
  6.1381 ++
  6.1382 ++	/* Ensure that file starts with "BZh['1'-'9']." */
  6.1383 ++	i = get_bits(bd,32);
  6.1384 ++	if (((unsigned int)(i-BZh0-1)) >= 9) return RETVAL_NOT_BZIP_DATA;
  6.1385 ++
  6.1386 ++	/* Fourth byte (ascii '1'-'9'), indicates block size in units of 100k of
  6.1387 ++	   uncompressed data.  Allocate intermediate buffer for block. */
  6.1388 ++	bd->dbufSize=100000*(i-BZh0);
  6.1389 ++
  6.1390 ++	bd->dbuf=large_malloc(bd->dbufSize * sizeof(int));
  6.1391 ++	return RETVAL_OK;
  6.1392 ++}
  6.1393 ++
  6.1394 ++/* Example usage: decompress src_fd to dst_fd.  (Stops at end of bzip data,
  6.1395 ++   not end of file.) */
  6.1396 ++STATIC int bunzip2(char *inbuf, int len, 
  6.1397 ++		   int(*fill)(void*,unsigned int),
  6.1398 ++		   int(*writebb)(char*,unsigned int),
  6.1399 ++		   int *pos)
  6.1400 ++{
  6.1401 ++	char *outbuf;
  6.1402 ++	bunzip_data *bd;
  6.1403 ++	int i;
  6.1404 ++
  6.1405 ++	outbuf=malloc(BZIP2_IOBUF_SIZE);
  6.1406 ++	if(!(i=start_bunzip(&bd,inbuf,len,fill))) {
  6.1407 ++		for(;;) {
  6.1408 ++			if((i=read_bunzip(bd,outbuf,BZIP2_IOBUF_SIZE)) <= 0) break;
  6.1409 ++			if(i!=writebb(outbuf,i)) {
  6.1410 ++				i=RETVAL_UNEXPECTED_OUTPUT_EOF;
  6.1411 ++				break;
  6.1412 ++			}
  6.1413 ++		}
  6.1414 ++	}
  6.1415 ++	/* Check CRC and release memory */
  6.1416 ++	if(i==RETVAL_LAST_BLOCK) {
  6.1417 ++		if (bd->headerCRC!=bd->totalCRC) {
  6.1418 ++			error("Data integrity error when decompressing.");
  6.1419 ++		} else {
  6.1420 ++			i=RETVAL_OK;
  6.1421 ++		}
  6.1422 ++	}
  6.1423 ++	else if (i==RETVAL_UNEXPECTED_OUTPUT_EOF) {
  6.1424 ++		error("Compressed file ends unexpectedly");
  6.1425 ++	}
  6.1426 ++	if(bd->dbuf) large_free(bd->dbuf);
  6.1427 ++	if(pos)
  6.1428 ++		*pos = bd->inbufPos;
  6.1429 ++	free(bd);
  6.1430 ++	free(outbuf);
  6.1431 ++
  6.1432 ++	return i;
  6.1433 ++}
  6.1434 ++
  6.1435 +
  6.1436 +--- linux-2.6.22.9/lib/decompress_unlzma.c
  6.1437 ++++ linux-2.6.22.9/lib/decompress_unlzma.c
  6.1438 +@@ -0,0 +1,605 @@
  6.1439 ++/* Lzma decompressor for Linux kernel. Shamelessly snarfed
  6.1440 ++ * from busybox 1.1.1
  6.1441 ++ *
  6.1442 ++ * Linux kernel adaptation
  6.1443 ++ * Copyright (C) 2006  Alain <alain@knaff.lu>
  6.1444 ++ *
  6.1445 ++ * Based on small lzma deflate implementation/Small range coder 
  6.1446 ++ * implementation for lzma.
  6.1447 ++ * Copyright (C) 2006  Aurelien Jacobs <aurel@gnuage.org>
  6.1448 ++ *
  6.1449 ++ * Based on LzmaDecode.c from the LZMA SDK 4.22 (http://www.7-zip.org/)
  6.1450 ++ * Copyright (C) 1999-2005  Igor Pavlov
  6.1451 ++ *
  6.1452 ++ * Copyrights of the parts, see headers below.
  6.1453 ++ *
  6.1454 ++ *
  6.1455 ++ * This program is free software; you can redistribute it and/or
  6.1456 ++ * modify it under the terms of the GNU Lesser General Public
  6.1457 ++ * License as published by the Free Software Foundation; either
  6.1458 ++ * version 2.1 of the License, or (at your option) any later version.
  6.1459 ++ *
  6.1460 ++ * This program is distributed in the hope that it will be useful,
  6.1461 ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
  6.1462 ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  6.1463 ++ * Lesser General Public License for more details.
  6.1464 ++ *
  6.1465 ++ * You should have received a copy of the GNU Lesser General Public
  6.1466 ++ * License along with this library; if not, write to the Free Software
  6.1467 ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  6.1468 ++ */
  6.1469 ++
  6.1470 ++#ifndef STATIC
  6.1471 ++
  6.1472 ++#include <linux/kernel.h>
  6.1473 ++#include <linux/fs.h>
  6.1474 ++#include <linux/string.h>
  6.1475 ++
  6.1476 ++#ifdef TEST
  6.1477 ++#include "test.h"
  6.1478 ++#else
  6.1479 ++#include <linux/vmalloc.h>
  6.1480 ++#endif
  6.1481 ++
  6.1482 ++static void __init *large_malloc(size_t size)
  6.1483 ++{
  6.1484 ++	return vmalloc(size);
  6.1485 ++}
  6.1486 ++
  6.1487 ++static void __init large_free(void *where)
  6.1488 ++{
  6.1489 ++	vfree(where);
  6.1490 ++}
  6.1491 ++
  6.1492 ++#ifndef TEST
  6.1493 ++static void __init *malloc(size_t size)
  6.1494 ++{
  6.1495 ++	return kmalloc(size, GFP_KERNEL);
  6.1496 ++}
  6.1497 ++
  6.1498 ++static void __init free(void *where)
  6.1499 ++{
  6.1500 ++	kfree(where);
  6.1501 ++}
  6.1502 ++
  6.1503 ++static void __init error(char *x)
  6.1504 ++{
  6.1505 ++	printk(KERN_ERR "%s\n", x);
  6.1506 ++}
  6.1507 ++
  6.1508 ++#endif
  6.1509 ++
  6.1510 ++#define STATIC /**/
  6.1511 ++
  6.1512 ++#endif
  6.1513 ++
  6.1514 ++#include <linux/decompress_unlzma.h>
  6.1515 ++
  6.1516 ++#define	MIN(a,b) (((a)<(b))?(a):(b))
  6.1517 ++
  6.1518 ++static long long read_int(unsigned char *ptr, int size)
  6.1519 ++{
  6.1520 ++	int i;
  6.1521 ++	long long ret=0;
  6.1522 ++
  6.1523 ++	for(i=0; i<size; i++) {
  6.1524 ++		ret = (ret << 8) | ptr[size-i-1];
  6.1525 ++	}
  6.1526 ++	return ret;
  6.1527 ++}
  6.1528 ++
  6.1529 ++#define ENDIAN_CONVERT(x) x=(typeof(x))read_int((unsigned char*)&x,sizeof(x))
  6.1530 ++
  6.1531 ++
  6.1532 ++/* Small range coder implementation for lzma.
  6.1533 ++ * Copyright (C) 2006  Aurelien Jacobs <aurel@gnuage.org>
  6.1534 ++ *
  6.1535 ++ * Based on LzmaDecode.c from the LZMA SDK 4.22 (http://www.7-zip.org/)
  6.1536 ++ * Copyright (c) 1999-2005  Igor Pavlov
  6.1537 ++ */
  6.1538 ++
  6.1539 ++#ifndef always_inline
  6.1540 ++#  if defined(__GNUC__) && (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ >0)
  6.1541 ++#    define always_inline __attribute__((always_inline)) inline
  6.1542 ++#  else
  6.1543 ++#    define always_inline inline
  6.1544 ++#  endif
  6.1545 ++#endif
  6.1546 ++
  6.1547 ++#ifdef CONFIG_FEATURE_LZMA_FAST
  6.1548 ++#  define speed_inline always_inline
  6.1549 ++#else
  6.1550 ++#  define speed_inline
  6.1551 ++#endif
  6.1552 ++
  6.1553 ++
  6.1554 ++typedef struct {
  6.1555 ++	int (*fill)(void*,unsigned int);
  6.1556 ++	uint8_t *ptr;
  6.1557 ++	uint8_t *buffer;
  6.1558 ++	uint8_t *buffer_end;
  6.1559 ++	int buffer_size;
  6.1560 ++	uint32_t code;
  6.1561 ++	uint32_t range;
  6.1562 ++	uint32_t bound;
  6.1563 ++} rc_t;
  6.1564 ++
  6.1565 ++
  6.1566 ++#define RC_TOP_BITS 24
  6.1567 ++#define RC_MOVE_BITS 5
  6.1568 ++#define RC_MODEL_TOTAL_BITS 11
  6.1569 ++
  6.1570 ++
  6.1571 ++/* Called twice: once at startup and once in rc_normalize() */
  6.1572 ++static void rc_read(rc_t * rc)
  6.1573 ++{
  6.1574 ++	rc->buffer_size = rc->fill((char*)rc->buffer, LZMA_IOBUF_SIZE);
  6.1575 ++	if (rc->buffer_size <= 0)
  6.1576 ++		error("unexpected EOF");
  6.1577 ++	rc->ptr = rc->buffer;
  6.1578 ++	rc->buffer_end = rc->buffer + rc->buffer_size;
  6.1579 ++}
  6.1580 ++
  6.1581 ++/* Called once */
  6.1582 ++static always_inline void rc_init(rc_t * rc, int (*fill)(void*,unsigned int),
  6.1583 ++				  char *buffer, int buffer_size)
  6.1584 ++{
  6.1585 ++	rc->fill = fill;
  6.1586 ++	rc->buffer = (uint8_t *)buffer;
  6.1587 ++	rc->buffer_size = buffer_size;
  6.1588 ++	rc->buffer_end = rc->buffer + rc->buffer_size;
  6.1589 ++	rc->ptr = rc->buffer;
  6.1590 ++
  6.1591 ++	rc->code = 0;
  6.1592 ++	rc->range = 0xFFFFFFFF;
  6.1593 ++}
  6.1594 ++
  6.1595 ++static always_inline void rc_init_code(rc_t * rc)
  6.1596 ++{
  6.1597 ++	int i;
  6.1598 ++
  6.1599 ++	for (i = 0; i < 5; i++) {
  6.1600 ++		if (rc->ptr >= rc->buffer_end)
  6.1601 ++			rc_read(rc);
  6.1602 ++		rc->code = (rc->code << 8) | *rc->ptr++;
  6.1603 ++	}
  6.1604 ++}
  6.1605 ++
  6.1606 ++
  6.1607 ++/* Called once. TODO: bb_maybe_free() */
  6.1608 ++static always_inline void rc_free(rc_t * rc)
  6.1609 ++{
  6.1610 ++	free(rc->buffer);
  6.1611 ++}
  6.1612 ++
  6.1613 ++/* Called twice, but one callsite is in speed_inline'd rc_is_bit_0_helper() */
  6.1614 ++static void rc_do_normalize(rc_t * rc)
  6.1615 ++{
  6.1616 ++	if (rc->ptr >= rc->buffer_end)
  6.1617 ++		rc_read(rc);
  6.1618 ++	rc->range <<= 8;
  6.1619 ++	rc->code = (rc->code << 8) | *rc->ptr++;
  6.1620 ++}
  6.1621 ++static always_inline void rc_normalize(rc_t * rc)
  6.1622 ++{
  6.1623 ++	if (rc->range < (1 << RC_TOP_BITS)) {
  6.1624 ++		rc_do_normalize(rc);
  6.1625 ++	}
  6.1626 ++}
  6.1627 ++
  6.1628 ++/* Called 9 times */
  6.1629 ++/* Why rc_is_bit_0_helper exists?
  6.1630 ++ * Because we want to always expose (rc->code < rc->bound) to optimizer
  6.1631 ++ */
  6.1632 ++static speed_inline uint32_t rc_is_bit_0_helper(rc_t * rc, uint16_t * p)
  6.1633 ++{
  6.1634 ++	rc_normalize(rc);
  6.1635 ++	rc->bound = *p * (rc->range >> RC_MODEL_TOTAL_BITS);
  6.1636 ++	return rc->bound;
  6.1637 ++}
  6.1638 ++static always_inline int rc_is_bit_0(rc_t * rc, uint16_t * p)
  6.1639 ++{
  6.1640 ++	uint32_t t = rc_is_bit_0_helper(rc, p);
  6.1641 ++	return rc->code < t;
  6.1642 ++}
  6.1643 ++
  6.1644 ++/* Called ~10 times, but very small, thus inlined */
  6.1645 ++static speed_inline void rc_update_bit_0(rc_t * rc, uint16_t * p)
  6.1646 ++{
  6.1647 ++	rc->range = rc->bound;
  6.1648 ++	*p += ((1 << RC_MODEL_TOTAL_BITS) - *p) >> RC_MOVE_BITS;
  6.1649 ++}
  6.1650 ++static speed_inline void rc_update_bit_1(rc_t * rc, uint16_t * p)
  6.1651 ++{
  6.1652 ++	rc->range -= rc->bound;
  6.1653 ++	rc->code -= rc->bound;
  6.1654 ++	*p -= *p >> RC_MOVE_BITS;
  6.1655 ++}
  6.1656 ++
  6.1657 ++/* Called 4 times in unlzma loop */
  6.1658 ++static int rc_get_bit(rc_t * rc, uint16_t * p, int *symbol)
  6.1659 ++{
  6.1660 ++	if (rc_is_bit_0(rc, p)) {
  6.1661 ++		rc_update_bit_0(rc, p);
  6.1662 ++		*symbol *= 2;
  6.1663 ++		return 0;
  6.1664 ++	} else {
  6.1665 ++		rc_update_bit_1(rc, p);
  6.1666 ++		*symbol = *symbol * 2 + 1;
  6.1667 ++		return 1;
  6.1668 ++	}
  6.1669 ++}
  6.1670 ++
  6.1671 ++/* Called once */
  6.1672 ++static always_inline int rc_direct_bit(rc_t * rc)
  6.1673 ++{
  6.1674 ++	rc_normalize(rc);
  6.1675 ++	rc->range >>= 1;
  6.1676 ++	if (rc->code >= rc->range) {
  6.1677 ++		rc->code -= rc->range;
  6.1678 ++		return 1;
  6.1679 ++	}
  6.1680 ++	return 0;
  6.1681 ++}
  6.1682 ++
  6.1683 ++/* Called twice */
  6.1684 ++static speed_inline void
  6.1685 ++rc_bit_tree_decode(rc_t * rc, uint16_t * p, int num_levels, int *symbol)
  6.1686 ++{
  6.1687 ++	int i = num_levels;
  6.1688 ++
  6.1689 ++	*symbol = 1;
  6.1690 ++	while (i--)
  6.1691 ++		rc_get_bit(rc, p + *symbol, symbol);
  6.1692 ++	*symbol -= 1 << num_levels;
  6.1693 ++}
  6.1694 ++
  6.1695 ++
  6.1696 ++/*
  6.1697 ++ * Small lzma deflate implementation.
  6.1698 ++ * Copyright (C) 2006  Aurelien Jacobs <aurel@gnuage.org>
  6.1699 ++ *
  6.1700 ++ * Based on LzmaDecode.c from the LZMA SDK 4.22 (http://www.7-zip.org/)
  6.1701 ++ * Copyright (C) 1999-2005  Igor Pavlov
  6.1702 ++ */
  6.1703 ++
  6.1704 ++
  6.1705 ++typedef struct {
  6.1706 ++	uint8_t pos;
  6.1707 ++	uint32_t dict_size;
  6.1708 ++	uint64_t dst_size;
  6.1709 ++} __attribute__ ((packed)) lzma_header_t;
  6.1710 ++
  6.1711 ++
  6.1712 ++#define LZMA_BASE_SIZE 1846
  6.1713 ++#define LZMA_LIT_SIZE 768
  6.1714 ++
  6.1715 ++#define LZMA_NUM_POS_BITS_MAX 4
  6.1716 ++
  6.1717 ++#define LZMA_LEN_NUM_LOW_BITS 3
  6.1718 ++#define LZMA_LEN_NUM_MID_BITS 3
  6.1719 ++#define LZMA_LEN_NUM_HIGH_BITS 8
  6.1720 ++
  6.1721 ++#define LZMA_LEN_CHOICE 0
  6.1722 ++#define LZMA_LEN_CHOICE_2 (LZMA_LEN_CHOICE + 1)
  6.1723 ++#define LZMA_LEN_LOW (LZMA_LEN_CHOICE_2 + 1)
  6.1724 ++#define LZMA_LEN_MID (LZMA_LEN_LOW \
  6.1725 ++		      + (1 << (LZMA_NUM_POS_BITS_MAX + LZMA_LEN_NUM_LOW_BITS)))
  6.1726 ++#define LZMA_LEN_HIGH (LZMA_LEN_MID \
  6.1727 ++		       +(1 << (LZMA_NUM_POS_BITS_MAX + LZMA_LEN_NUM_MID_BITS)))
  6.1728 ++#define LZMA_NUM_LEN_PROBS (LZMA_LEN_HIGH + (1 << LZMA_LEN_NUM_HIGH_BITS))
  6.1729 ++
  6.1730 ++#define LZMA_NUM_STATES 12
  6.1731 ++#define LZMA_NUM_LIT_STATES 7
  6.1732 ++
  6.1733 ++#define LZMA_START_POS_MODEL_INDEX 4
  6.1734 ++#define LZMA_END_POS_MODEL_INDEX 14
  6.1735 ++#define LZMA_NUM_FULL_DISTANCES (1 << (LZMA_END_POS_MODEL_INDEX >> 1))
  6.1736 ++
  6.1737 ++#define LZMA_NUM_POS_SLOT_BITS 6
  6.1738 ++#define LZMA_NUM_LEN_TO_POS_STATES 4
  6.1739 ++
  6.1740 ++#define LZMA_NUM_ALIGN_BITS 4
  6.1741 ++
  6.1742 ++#define LZMA_MATCH_MIN_LEN 2
  6.1743 ++
  6.1744 ++#define LZMA_IS_MATCH 0
  6.1745 ++#define LZMA_IS_REP (LZMA_IS_MATCH + (LZMA_NUM_STATES <<LZMA_NUM_POS_BITS_MAX))
  6.1746 ++#define LZMA_IS_REP_G0 (LZMA_IS_REP + LZMA_NUM_STATES)
  6.1747 ++#define LZMA_IS_REP_G1 (LZMA_IS_REP_G0 + LZMA_NUM_STATES)
  6.1748 ++#define LZMA_IS_REP_G2 (LZMA_IS_REP_G1 + LZMA_NUM_STATES)
  6.1749 ++#define LZMA_IS_REP_0_LONG (LZMA_IS_REP_G2 + LZMA_NUM_STATES)
  6.1750 ++#define LZMA_POS_SLOT (LZMA_IS_REP_0_LONG \
  6.1751 ++		       + (LZMA_NUM_STATES << LZMA_NUM_POS_BITS_MAX))
  6.1752 ++#define LZMA_SPEC_POS (LZMA_POS_SLOT \
  6.1753 ++		       +(LZMA_NUM_LEN_TO_POS_STATES << LZMA_NUM_POS_SLOT_BITS))
  6.1754 ++#define LZMA_ALIGN (LZMA_SPEC_POS \
  6.1755 ++		    + LZMA_NUM_FULL_DISTANCES - LZMA_END_POS_MODEL_INDEX)
  6.1756 ++#define LZMA_LEN_CODER (LZMA_ALIGN + (1 << LZMA_NUM_ALIGN_BITS))
  6.1757 ++#define LZMA_REP_LEN_CODER (LZMA_LEN_CODER + LZMA_NUM_LEN_PROBS)
  6.1758 ++#define LZMA_LITERAL (LZMA_REP_LEN_CODER + LZMA_NUM_LEN_PROBS)
  6.1759 ++
  6.1760 ++
  6.1761 ++STATIC int unlzma(char *inbuf, int in_len, 
  6.1762 ++		   int(*fill)(void*,unsigned int),
  6.1763 ++		   int(*writebb)(char*,unsigned int),
  6.1764 ++		   int *posp)
  6.1765 ++{
  6.1766 ++	lzma_header_t header;
  6.1767 ++	int lc, pb, lp;
  6.1768 ++	uint32_t pos_state_mask;
  6.1769 ++	uint32_t literal_pos_mask;
  6.1770 ++	uint32_t pos;
  6.1771 ++	uint16_t *p;
  6.1772 ++	uint16_t *prob;
  6.1773 ++	uint16_t *prob_lit;
  6.1774 ++	int num_bits;
  6.1775 ++	int num_probs;
  6.1776 ++	rc_t rc;
  6.1777 ++	int i, mi;
  6.1778 ++	uint8_t *buffer;
  6.1779 ++	uint8_t previous_byte = 0;
  6.1780 ++	size_t buffer_pos = 0, global_pos = 0;
  6.1781 ++	int len = 0;
  6.1782 ++	int state = 0;
  6.1783 ++	int bufsize;
  6.1784 ++	uint32_t rep0 = 1, rep1 = 1, rep2 = 1, rep3 = 1;
  6.1785 ++
  6.1786 ++	rc_init(&rc, fill, inbuf, in_len);
  6.1787 ++
  6.1788 ++	for (i = 0; i < sizeof(header); i++) {
  6.1789 ++		if (rc.ptr >= rc.buffer_end)
  6.1790 ++			rc_read(&rc);
  6.1791 ++		((unsigned char *)&header)[i] = *rc.ptr++;
  6.1792 ++	}
  6.1793 ++
  6.1794 ++	if (header.pos >= (9 * 5 * 5))
  6.1795 ++		error("bad header");
  6.1796 ++
  6.1797 ++	mi = header.pos / 9;
  6.1798 ++	lc = header.pos % 9;
  6.1799 ++	pb = mi / 5;
  6.1800 ++	lp = mi % 5;
  6.1801 ++	pos_state_mask = (1 << pb) - 1;
  6.1802 ++	literal_pos_mask = (1 << lp) - 1;
  6.1803 ++
  6.1804 ++	ENDIAN_CONVERT(header.dict_size);
  6.1805 ++	ENDIAN_CONVERT(header.dst_size);
  6.1806 ++
  6.1807 ++	if (header.dict_size == 0)
  6.1808 ++		header.dict_size = 1;
  6.1809 ++
  6.1810 ++	bufsize = MIN(header.dst_size, header.dict_size);
  6.1811 ++	buffer = large_malloc(bufsize);
  6.1812 ++	if(buffer == NULL)
  6.1813 ++		return -1;
  6.1814 ++
  6.1815 ++	num_probs = LZMA_BASE_SIZE + (LZMA_LIT_SIZE << (lc + lp));
  6.1816 ++	p = large_malloc(num_probs * sizeof(*p));
  6.1817 ++	num_probs = LZMA_LITERAL + (LZMA_LIT_SIZE << (lc + lp));
  6.1818 ++	for (i = 0; i < num_probs; i++)
  6.1819 ++		p[i] = (1 << RC_MODEL_TOTAL_BITS) >> 1;
  6.1820 ++
  6.1821 ++	rc_init_code(&rc);
  6.1822 ++
  6.1823 ++	while (global_pos + buffer_pos < header.dst_size) {
  6.1824 ++		int pos_state = (buffer_pos + global_pos) & pos_state_mask;
  6.1825 ++
  6.1826 ++		prob =
  6.1827 ++			p + LZMA_IS_MATCH + (state << LZMA_NUM_POS_BITS_MAX) + pos_state;
  6.1828 ++		if (rc_is_bit_0(&rc, prob)) {
  6.1829 ++			mi = 1;
  6.1830 ++			rc_update_bit_0(&rc, prob);
  6.1831 ++			prob = (p + LZMA_LITERAL + (LZMA_LIT_SIZE
  6.1832 ++					* ((((buffer_pos + global_pos) & literal_pos_mask) << lc)
  6.1833 ++					+ (previous_byte >> (8 - lc)))));
  6.1834 ++
  6.1835 ++			if (state >= LZMA_NUM_LIT_STATES) {
  6.1836 ++				int match_byte;
  6.1837 ++
  6.1838 ++				pos = buffer_pos - rep0;
  6.1839 ++				while (pos >= header.dict_size)
  6.1840 ++					pos += header.dict_size;
  6.1841 ++				if(pos >= bufsize) {
  6.1842 ++					goto fail;
  6.1843 ++				}
  6.1844 ++				match_byte = buffer[pos];
  6.1845 ++				do {
  6.1846 ++					int bit;
  6.1847 ++
  6.1848 ++					match_byte <<= 1;
  6.1849 ++					bit = match_byte & 0x100;
  6.1850 ++					prob_lit = prob + 0x100 + bit + mi;
  6.1851 ++					if (rc_get_bit(&rc, prob_lit, &mi)) {
  6.1852 ++						if (!bit)
  6.1853 ++							break;
  6.1854 ++					} else {
  6.1855 ++						if (bit)
  6.1856 ++							break;
  6.1857 ++					}
  6.1858 ++				} while (mi < 0x100);
  6.1859 ++			}
  6.1860 ++			while (mi < 0x100) {
  6.1861 ++				prob_lit = prob + mi;
  6.1862 ++				rc_get_bit(&rc, prob_lit, &mi);
  6.1863 ++			}
  6.1864 ++			previous_byte = (uint8_t) mi;
  6.1865 ++
  6.1866 ++			buffer[buffer_pos++] = previous_byte;
  6.1867 ++			if (buffer_pos == header.dict_size) {
  6.1868 ++				buffer_pos = 0;
  6.1869 ++				global_pos += header.dict_size;
  6.1870 ++				writebb((char*)buffer, header.dict_size);
  6.1871 ++			}
  6.1872 ++			if (state < 4)
  6.1873 ++				state = 0;
  6.1874 ++			else if (state < 10)
  6.1875 ++				state -= 3;
  6.1876 ++			else
  6.1877 ++				state -= 6;
  6.1878 ++		} else {
  6.1879 ++			int offset;
  6.1880 ++			uint16_t *prob_len;
  6.1881 ++
  6.1882 ++			rc_update_bit_1(&rc, prob);
  6.1883 ++			prob = p + LZMA_IS_REP + state;
  6.1884 ++			if (rc_is_bit_0(&rc, prob)) {
  6.1885 ++				rc_update_bit_0(&rc, prob);
  6.1886 ++				rep3 = rep2;
  6.1887 ++				rep2 = rep1;
  6.1888 ++				rep1 = rep0;
  6.1889 ++				state = state < LZMA_NUM_LIT_STATES ? 0 : 3;
  6.1890 ++				prob = p + LZMA_LEN_CODER;
  6.1891 ++			} else {
  6.1892 ++				rc_update_bit_1(&rc, prob);
  6.1893 ++				prob = p + LZMA_IS_REP_G0 + state;
  6.1894 ++				if (rc_is_bit_0(&rc, prob)) {
  6.1895 ++					rc_update_bit_0(&rc, prob);
  6.1896 ++					prob = (p + LZMA_IS_REP_0_LONG
  6.1897 ++							+ (state << LZMA_NUM_POS_BITS_MAX) + pos_state);
  6.1898 ++					if (rc_is_bit_0(&rc, prob)) {
  6.1899 ++						rc_update_bit_0(&rc, prob);
  6.1900 ++
  6.1901 ++						state = state < LZMA_NUM_LIT_STATES ? 9 : 11;
  6.1902 ++						pos = buffer_pos - rep0;
  6.1903 ++						while (pos >= header.dict_size)
  6.1904 ++							pos += header.dict_size;
  6.1905 ++						if(pos >= bufsize) {
  6.1906 ++							goto fail;
  6.1907 ++						}
  6.1908 ++						previous_byte = buffer[pos];
  6.1909 ++						buffer[buffer_pos++] = previous_byte;
  6.1910 ++						if (buffer_pos == header.dict_size) {
  6.1911 ++							buffer_pos = 0;
  6.1912 ++							global_pos += header.dict_size;
  6.1913 ++							writebb((char*)buffer, header.dict_size);
  6.1914 ++						}
  6.1915 ++						continue;
  6.1916 ++					} else {
  6.1917 ++						rc_update_bit_1(&rc, prob);
  6.1918 ++					}
  6.1919 ++				} else {
  6.1920 ++					uint32_t distance;
  6.1921 ++
  6.1922 ++					rc_update_bit_1(&rc, prob);
  6.1923 ++					prob = p + LZMA_IS_REP_G1 + state;
  6.1924 ++					if (rc_is_bit_0(&rc, prob)) {
  6.1925 ++						rc_update_bit_0(&rc, prob);
  6.1926 ++						distance = rep1;
  6.1927 ++					} else {
  6.1928 ++						rc_update_bit_1(&rc, prob);
  6.1929 ++						prob = p + LZMA_IS_REP_G2 + state;
  6.1930 ++						if (rc_is_bit_0(&rc, prob)) {
  6.1931 ++							rc_update_bit_0(&rc, prob);
  6.1932 ++							distance = rep2;
  6.1933 ++						} else {
  6.1934 ++							rc_update_bit_1(&rc, prob);
  6.1935 ++							distance = rep3;
  6.1936 ++							rep3 = rep2;
  6.1937 ++						}
  6.1938 ++						rep2 = rep1;
  6.1939 ++					}
  6.1940 ++					rep1 = rep0;
  6.1941 ++					rep0 = distance;
  6.1942 ++				}
  6.1943 ++				state = state < LZMA_NUM_LIT_STATES ? 8 : 11;
  6.1944 ++				prob = p + LZMA_REP_LEN_CODER;
  6.1945 ++			}
  6.1946 ++
  6.1947 ++			prob_len = prob + LZMA_LEN_CHOICE;
  6.1948 ++			if (rc_is_bit_0(&rc, prob_len)) {
  6.1949 ++				rc_update_bit_0(&rc, prob_len);
  6.1950 ++				prob_len = (prob + LZMA_LEN_LOW
  6.1951 ++							+ (pos_state << LZMA_LEN_NUM_LOW_BITS));
  6.1952 ++				offset = 0;
  6.1953 ++				num_bits = LZMA_LEN_NUM_LOW_BITS;
  6.1954 ++			} else {
  6.1955 ++				rc_update_bit_1(&rc, prob_len);
  6.1956 ++				prob_len = prob + LZMA_LEN_CHOICE_2;
  6.1957 ++				if (rc_is_bit_0(&rc, prob_len)) {
  6.1958 ++					rc_update_bit_0(&rc, prob_len);
  6.1959 ++					prob_len = (prob + LZMA_LEN_MID
  6.1960 ++								+ (pos_state << LZMA_LEN_NUM_MID_BITS));
  6.1961 ++					offset = 1 << LZMA_LEN_NUM_LOW_BITS;
  6.1962 ++					num_bits = LZMA_LEN_NUM_MID_BITS;
  6.1963 ++				} else {
  6.1964 ++					rc_update_bit_1(&rc, prob_len);
  6.1965 ++					prob_len = prob + LZMA_LEN_HIGH;
  6.1966 ++					offset = ((1 << LZMA_LEN_NUM_LOW_BITS)
  6.1967 ++							  + (1 << LZMA_LEN_NUM_MID_BITS));
  6.1968 ++					num_bits = LZMA_LEN_NUM_HIGH_BITS;
  6.1969 ++				}
  6.1970 ++			}
  6.1971 ++			rc_bit_tree_decode(&rc, prob_len, num_bits, &len);
  6.1972 ++			len += offset;
  6.1973 ++
  6.1974 ++			if (state < 4) {
  6.1975 ++				int pos_slot;
  6.1976 ++
  6.1977 ++				state += LZMA_NUM_LIT_STATES;
  6.1978 ++				prob =
  6.1979 ++					p + LZMA_POS_SLOT +
  6.1980 ++					((len <
  6.1981 ++					  LZMA_NUM_LEN_TO_POS_STATES ? len :
  6.1982 ++					  LZMA_NUM_LEN_TO_POS_STATES - 1)
  6.1983 ++					 << LZMA_NUM_POS_SLOT_BITS);
  6.1984 ++				rc_bit_tree_decode(&rc, prob, LZMA_NUM_POS_SLOT_BITS,
  6.1985 ++								   &pos_slot);
  6.1986 ++				if (pos_slot >= LZMA_START_POS_MODEL_INDEX) {
  6.1987 ++					num_bits = (pos_slot >> 1) - 1;
  6.1988 ++					rep0 = 2 | (pos_slot & 1);
  6.1989 ++					if (pos_slot < LZMA_END_POS_MODEL_INDEX) {
  6.1990 ++						rep0 <<= num_bits;
  6.1991 ++						prob = p + LZMA_SPEC_POS + rep0 - pos_slot - 1;
  6.1992 ++					} else {
  6.1993 ++						num_bits -= LZMA_NUM_ALIGN_BITS;
  6.1994 ++						while (num_bits--)
  6.1995 ++							rep0 = (rep0 << 1) | rc_direct_bit(&rc);
  6.1996 ++						prob = p + LZMA_ALIGN;
  6.1997 ++						rep0 <<= LZMA_NUM_ALIGN_BITS;
  6.1998 ++						num_bits = LZMA_NUM_ALIGN_BITS;
  6.1999 ++					}
  6.2000 ++					i = 1;
  6.2001 ++					mi = 1;
  6.2002 ++					while (num_bits--) {
  6.2003 ++						if (rc_get_bit(&rc, prob + mi, &mi))
  6.2004 ++							rep0 |= i;
  6.2005 ++						i <<= 1;
  6.2006 ++					}
  6.2007 ++				} else
  6.2008 ++					rep0 = pos_slot;
  6.2009 ++				if (++rep0 == 0)
  6.2010 ++					break;
  6.2011 ++			}
  6.2012 ++
  6.2013 ++			len += LZMA_MATCH_MIN_LEN;
  6.2014 ++
  6.2015 ++			do {
  6.2016 ++				pos = buffer_pos - rep0;
  6.2017 ++				while (pos >= header.dict_size)
  6.2018 ++					pos += header.dict_size;
  6.2019 ++				if(pos >= bufsize) {
  6.2020 ++					goto fail;
  6.2021 ++				}
  6.2022 ++				previous_byte = buffer[pos];
  6.2023 ++				buffer[buffer_pos++] = previous_byte;
  6.2024 ++				if (buffer_pos == header.dict_size) {
  6.2025 ++					buffer_pos = 0;
  6.2026 ++					global_pos += header.dict_size;
  6.2027 ++					writebb((char*)buffer, header.dict_size);
  6.2028 ++				}
  6.2029 ++				len--;
  6.2030 ++			} while (len != 0 && buffer_pos < header.dst_size);
  6.2031 ++		}
  6.2032 ++	}
  6.2033 ++
  6.2034 ++	writebb((char*)buffer, buffer_pos);
  6.2035 ++	if(posp) {
  6.2036 ++		*posp = rc.ptr-rc.buffer;
  6.2037 ++	}
  6.2038 ++	large_free(buffer);
  6.2039 ++	return 0;
  6.2040 ++ fail:
  6.2041 ++	large_free(buffer);
  6.2042 ++	return -1;
  6.2043 ++}
  6.2044 +
  6.2045 +--- linux-2.6.22.9/lib/Makefile
  6.2046 ++++ linux-2.6.22.9/lib/Makefile
  6.2047 +@@ -46,6 +46,10 @@
  6.2048 + obj-$(CONFIG_LIBCRC32C)	+= libcrc32c.o
  6.2049 + obj-$(CONFIG_GENERIC_ALLOCATOR) += genalloc.o
  6.2050 + 
  6.2051 ++obj-$(CONFIG_RD_BZIP2)	+= decompress_bunzip2.o
  6.2052 ++obj-$(CONFIG_RD_LZMA)	+= decompress_unlzma.o
  6.2053 ++
  6.2054 ++
  6.2055 + obj-$(CONFIG_ZLIB_INFLATE) += zlib_inflate/
  6.2056 + obj-$(CONFIG_ZLIB_DEFLATE) += zlib_deflate/
  6.2057 + obj-$(CONFIG_REED_SOLOMON) += reed_solomon/
  6.2058 +
  6.2059 +--- linux-2.6.22.9/scripts/Makefile.lib
  6.2060 ++++ linux-2.6.22.9/scripts/Makefile.lib
  6.2061 +@@ -162,4 +162,17 @@
  6.2062 + quiet_cmd_gzip = GZIP    $@
  6.2063 + cmd_gzip = gzip -f -9 < $< > $@
  6.2064 + 
  6.2065 ++# Append size
  6.2066 ++size_append=perl -e 'print(pack("i",(stat($$ARGV[0]))[7]));'
  6.2067 + 
  6.2068 ++# Bzip2
  6.2069 ++# ---------------------------------------------------------------------------
  6.2070 ++
  6.2071 ++quiet_cmd_bzip2 = BZIP2    $@
  6.2072 ++cmd_bzip2 = (bzip2 -9 < $< ; $(size_append) $<) > $@
  6.2073 ++
  6.2074 ++# Lzma
  6.2075 ++# ---------------------------------------------------------------------------
  6.2076 ++
  6.2077 ++quiet_cmd_lzma = LZMA    $@
  6.2078 ++cmd_lzma = (lzma e $< -so ; $(size_append) $<) >$@